(
logger: Logger,
versionedSchemaMap: TVersionedResponseBodyMap,
unversionedSchema: TUnversionedResponseBodySchema,
url: string,
requestInit?: RequestInit,
options?: {
errorMessage?: string;
optional?: TOptional;
},
retryCount = 0
)
| 779 | }; |
| 780 | |
| 781 | async function zodfetchWithVersions< |
| 782 | TVersionedResponseBodyMap extends VersionedResponseBodyMap, |
| 783 | TUnversionedResponseBodySchema extends z.ZodTypeAny, |
| 784 | TOptional extends boolean = false, |
| 785 | >( |
| 786 | logger: Logger, |
| 787 | versionedSchemaMap: TVersionedResponseBodyMap, |
| 788 | unversionedSchema: TUnversionedResponseBodySchema, |
| 789 | url: string, |
| 790 | requestInit?: RequestInit, |
| 791 | options?: { |
| 792 | errorMessage?: string; |
| 793 | optional?: TOptional; |
| 794 | }, |
| 795 | retryCount = 0 |
| 796 | ): Promise< |
| 797 | TOptional extends true |
| 798 | ? VersionedResponseBody<TVersionedResponseBodyMap, TUnversionedResponseBodySchema> | undefined |
| 799 | : VersionedResponseBody<TVersionedResponseBodyMap, TUnversionedResponseBodySchema> |
| 800 | > { |
| 801 | try { |
| 802 | const fullRequestInit = requestInitWithCache(requestInit); |
| 803 | |
| 804 | const response = await fetch(url, fullRequestInit); |
| 805 | |
| 806 | logger.debug(`[ApiClient] zodfetchWithVersions ${url} (attempt ${retryCount + 1})`, { |
| 807 | url, |
| 808 | retryCount, |
| 809 | requestHeaders: fullRequestInit?.headers, |
| 810 | responseHeaders: Object.fromEntries(response.headers.entries()), |
| 811 | }); |
| 812 | |
| 813 | if ( |
| 814 | (!requestInit || requestInit.method === "GET") && |
| 815 | response.status === 404 && |
| 816 | options?.optional |
| 817 | ) { |
| 818 | // @ts-ignore |
| 819 | return; |
| 820 | } |
| 821 | |
| 822 | //rate limit, so we want to reschedule |
| 823 | if (response.status === 429) { |
| 824 | //unix timestamp in milliseconds |
| 825 | const retryAfter = response.headers.get("x-ratelimit-reset"); |
| 826 | if (retryAfter) { |
| 827 | throw new AutoYieldRateLimitError(parseInt(retryAfter)); |
| 828 | } |
| 829 | } |
| 830 | |
| 831 | if (response.status >= 400 && response.status < 500) { |
| 832 | const rawBody = await safeResponseText(response); |
| 833 | const body = safeJsonParse(rawBody); |
| 834 | |
| 835 | logger.error(`[ApiClient] zodfetchWithVersions failed with ${response.status}`, { |
| 836 | url, |
| 837 | retryCount, |
| 838 | requestHeaders: fullRequestInit?.headers, |
no test coverage detected
searching dependent graphs…