@bikefinder/api-client 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/admin/generated/index.d.ts +1 -1
- package/dist/admin/generated/index.d.ts.map +1 -1
- package/dist/admin/generated/sdk.gen.d.ts +173 -19
- package/dist/admin/generated/sdk.gen.d.ts.map +1 -1
- package/dist/admin/generated/sdk.gen.js +377 -125
- package/dist/admin/generated/sdk.gen.js.map +1 -1
- package/dist/admin/generated/types.gen.d.ts +1468 -431
- package/dist/admin/generated/types.gen.d.ts.map +1 -1
- package/dist/admin/generated/zod.gen.d.ts +2726 -1638
- package/dist/admin/generated/zod.gen.d.ts.map +1 -1
- package/dist/admin/generated/zod.gen.js +410 -270
- package/dist/admin/generated/zod.gen.js.map +1 -1
- package/dist/generated/index.d.ts +1 -1
- package/dist/generated/index.d.ts.map +1 -1
- package/dist/generated/sdk.gen.d.ts +80 -45
- package/dist/generated/sdk.gen.d.ts.map +1 -1
- package/dist/generated/sdk.gen.js +192 -157
- package/dist/generated/sdk.gen.js.map +1 -1
- package/dist/generated/types.gen.d.ts +887 -453
- package/dist/generated/types.gen.d.ts.map +1 -1
- package/dist/generated/zod.gen.d.ts +468 -286
- package/dist/generated/zod.gen.d.ts.map +1 -1
- package/dist/generated/zod.gen.js +188 -201
- package/dist/generated/zod.gen.js.map +1 -1
- package/dist/realtime/api-stream-error.d.ts +2 -1
- package/dist/realtime/api-stream-error.d.ts.map +1 -1
- package/dist/realtime/api-stream-error.js +8 -1
- package/dist/realtime/api-stream-error.js.map +1 -1
- package/dist/realtime/watch.d.ts.map +1 -1
- package/dist/realtime/watch.js +1 -1
- package/dist/realtime/watch.js.map +1 -1
- package/dist/transport.js +10 -1
- package/dist/transport.js.map +1 -1
- package/package.json +1 -1
- package/src/admin/generated/index.ts +65 -7
- package/src/admin/generated/sdk.gen.ts +720 -300
- package/src/admin/generated/types.gen.ts +1646 -513
- package/src/admin/generated/zod.gen.ts +474 -286
- package/src/generated/index.ts +6 -2
- package/src/generated/sdk.gen.ts +408 -373
- package/src/generated/types.gen.ts +956 -516
- package/src/generated/zod.gen.ts +217 -231
- package/src/realtime/api-stream-error.ts +12 -1
- package/src/realtime/watch.ts +6 -1
- package/src/transport.ts +10 -1
|
@@ -4,8 +4,13 @@ export type ApiStreamErrorCode = "http" | "protocol" | "network";
|
|
|
4
4
|
export class ApiStreamError extends Error {
|
|
5
5
|
readonly code: ApiStreamErrorCode;
|
|
6
6
|
readonly status: number | undefined;
|
|
7
|
+
readonly retryAfterMs: number | undefined;
|
|
7
8
|
|
|
8
|
-
constructor(
|
|
9
|
+
constructor(
|
|
10
|
+
code: ApiStreamErrorCode,
|
|
11
|
+
status?: number,
|
|
12
|
+
retryAfterMs?: number,
|
|
13
|
+
) {
|
|
9
14
|
super(
|
|
10
15
|
code === "http"
|
|
11
16
|
? `The tracker stream returned HTTP ${status}.`
|
|
@@ -16,5 +21,11 @@ export class ApiStreamError extends Error {
|
|
|
16
21
|
this.name = "ApiStreamError";
|
|
17
22
|
this.code = code;
|
|
18
23
|
this.status = status;
|
|
24
|
+
this.retryAfterMs =
|
|
25
|
+
retryAfterMs !== undefined &&
|
|
26
|
+
Number.isFinite(retryAfterMs) &&
|
|
27
|
+
retryAfterMs >= 0
|
|
28
|
+
? Math.min(retryAfterMs, 300_000)
|
|
29
|
+
: undefined;
|
|
19
30
|
}
|
|
20
31
|
}
|
package/src/realtime/watch.ts
CHANGED
|
@@ -136,7 +136,12 @@ export function watch<TSdk, TOperation extends StreamOperation<TSdk>>(
|
|
|
136
136
|
(error.status ?? 0) >= 500)));
|
|
137
137
|
if (!retryable) throw error;
|
|
138
138
|
const maximum = Math.min(30_000, 1_000 * 2 ** (attempt - 1));
|
|
139
|
-
return timer(
|
|
139
|
+
return timer(
|
|
140
|
+
Math.max(
|
|
141
|
+
maximum * (0.5 + Math.random() * 0.5),
|
|
142
|
+
error.retryAfterMs ?? 0,
|
|
143
|
+
),
|
|
144
|
+
);
|
|
140
145
|
},
|
|
141
146
|
}),
|
|
142
147
|
),
|
package/src/transport.ts
CHANGED
|
@@ -60,7 +60,7 @@ export function createAuthenticatedFetch(
|
|
|
60
60
|
if (response.status !== 200) {
|
|
61
61
|
await response.body?.cancel().catch(() => {});
|
|
62
62
|
if (response.status === 401) throw new AuthenticationError();
|
|
63
|
-
throw new ApiStreamError("http", response.status);
|
|
63
|
+
throw new ApiStreamError("http", response.status, retryAfter(response));
|
|
64
64
|
}
|
|
65
65
|
const contentType = response.headers
|
|
66
66
|
.get("Content-Type")
|
|
@@ -86,6 +86,15 @@ export function createAuthenticatedFetch(
|
|
|
86
86
|
};
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
+
function retryAfter(response: Response): number | undefined {
|
|
90
|
+
const value = response.headers.get("Retry-After")?.trim();
|
|
91
|
+
if (!value) return undefined;
|
|
92
|
+
const delay = /^\d+$/.test(value)
|
|
93
|
+
? Number(value) * 1_000
|
|
94
|
+
: Date.parse(value) - Date.now();
|
|
95
|
+
return Number.isFinite(delay) ? Math.max(0, delay) : undefined;
|
|
96
|
+
}
|
|
97
|
+
|
|
89
98
|
function throwIfAborted(signal?: AbortSignal): void {
|
|
90
99
|
// Expo's React Native AbortSignal supports aborted, but not throwIfAborted().
|
|
91
100
|
if (signal?.aborted) {
|