@vrplatform/api 1.3.1-stage.2287 → 1.3.1-stage.2295
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/build/main/{services/api/client.js → client.js} +27 -44
- package/build/main/client.js.map +1 -0
- package/build/main/error.d.ts +22 -0
- package/build/main/{services/api/error.js → error.js} +8 -12
- package/build/main/error.js.map +1 -0
- package/build/main/generated/openapi-fetch.d.ts +224 -0
- package/build/main/generated/openapi-fetch.js +14 -0
- package/build/main/generated/openapi-fetch.js.map +1 -0
- package/build/{module/services/api → main}/generated/v1.d.ts +185 -1168
- package/build/main/{services/api/generated → generated}/v1.js.map +1 -1
- package/build/main/index.d.ts +6 -14
- package/build/main/index.js +3 -19
- package/build/main/index.js.map +1 -1
- package/build/main/tsconfig.main.tsbuildinfo +1 -1
- package/build/main/types.d.ts +61 -0
- package/build/main/types.js.map +1 -0
- package/build/module/client.js +66 -0
- package/build/module/client.js.map +1 -0
- package/build/module/error.d.ts +22 -0
- package/build/module/{services/api/error.js → error.js} +8 -12
- package/build/module/error.js.map +1 -0
- package/build/module/generated/openapi-fetch.d.ts +224 -0
- package/build/module/generated/openapi-fetch.js +2 -0
- package/build/module/generated/openapi-fetch.js.map +1 -0
- package/build/{main/services/api → module}/generated/v1.d.ts +185 -1168
- package/build/module/{services/api/generated → generated}/v1.js.map +1 -1
- package/build/module/index.d.ts +6 -14
- package/build/module/index.js +3 -6
- package/build/module/index.js.map +1 -1
- package/build/module/tsconfig.esm.tsbuildinfo +1 -1
- package/build/module/types.d.ts +61 -0
- package/build/module/types.js.map +1 -0
- package/package.json +7 -39
- package/src/client.ts +99 -0
- package/src/error.ts +71 -0
- package/src/generated/openapi-fetch.ts +433 -0
- package/src/{services/api/generated → generated}/v1.ts +185 -1168
- package/src/index.ts +7 -49
- package/src/types.ts +98 -0
- package/build/main/analytics/client.d.ts +0 -16
- package/build/main/analytics/client.js +0 -81
- package/build/main/analytics/client.js.map +0 -1
- package/build/main/analytics/index.d.ts +0 -2
- package/build/main/analytics/index.js +0 -19
- package/build/main/analytics/index.js.map +0 -1
- package/build/main/analytics/types.d.ts +0 -77
- package/build/main/analytics/types.js.map +0 -1
- package/build/main/service-client.d.ts +0 -15
- package/build/main/service-client.js +0 -90
- package/build/main/service-client.js.map +0 -1
- package/build/main/services/analytics/client.d.ts +0 -16
- package/build/main/services/analytics/client.js +0 -33
- package/build/main/services/analytics/client.js.map +0 -1
- package/build/main/services/analytics/generated/v1.d.ts +0 -359
- package/build/main/services/analytics/generated/v1.js.map +0 -1
- package/build/main/services/api/client.js.map +0 -1
- package/build/main/services/api/error.d.ts +0 -22
- package/build/main/services/api/error.js.map +0 -1
- package/build/main/services/api/generated/v1.js +0 -7
- package/build/main/services/api/index.d.ts +0 -6
- package/build/main/services/api/index.js +0 -20
- package/build/main/services/api/index.js.map +0 -1
- package/build/main/services/api/types.d.ts +0 -128
- package/build/main/services/api/types.js +0 -3
- package/build/main/services/api/types.js.map +0 -1
- package/build/main/services/cache/client.d.ts +0 -16
- package/build/main/services/cache/client.js +0 -33
- package/build/main/services/cache/client.js.map +0 -1
- package/build/main/services/cache/generated/v1.d.ts +0 -1009
- package/build/main/services/cache/generated/v1.js +0 -7
- package/build/main/services/cache/generated/v1.js.map +0 -1
- package/build/main/services/cache/index.d.ts +0 -2
- package/build/main/services/cache/index.js +0 -18
- package/build/main/services/cache/index.js.map +0 -1
- package/build/main/services/control-plane/client.d.ts +0 -17
- package/build/main/services/control-plane/client.js +0 -33
- package/build/main/services/control-plane/client.js.map +0 -1
- package/build/main/services/control-plane/generated/v1.d.ts +0 -2123
- package/build/main/services/control-plane/generated/v1.js +0 -7
- package/build/main/services/control-plane/generated/v1.js.map +0 -1
- package/build/main/services/control-plane/index.d.ts +0 -2
- package/build/main/services/control-plane/index.js +0 -18
- package/build/main/services/control-plane/index.js.map +0 -1
- package/build/main/services/ingest/client.d.ts +0 -16
- package/build/main/services/ingest/client.js +0 -33
- package/build/main/services/ingest/client.js.map +0 -1
- package/build/main/services/ingest/generated/v1.d.ts +0 -1920
- package/build/main/services/ingest/generated/v1.js +0 -7
- package/build/main/services/ingest/generated/v1.js.map +0 -1
- package/build/main/services/ingest/index.d.ts +0 -2
- package/build/main/services/ingest/index.js +0 -18
- package/build/main/services/ingest/index.js.map +0 -1
- package/build/module/analytics/client.d.ts +0 -16
- package/build/module/analytics/client.js +0 -39
- package/build/module/analytics/client.js.map +0 -1
- package/build/module/analytics/index.d.ts +0 -2
- package/build/module/analytics/index.js +0 -3
- package/build/module/analytics/index.js.map +0 -1
- package/build/module/analytics/types.d.ts +0 -77
- package/build/module/analytics/types.js.map +0 -1
- package/build/module/service-client.d.ts +0 -15
- package/build/module/service-client.js +0 -51
- package/build/module/service-client.js.map +0 -1
- package/build/module/services/analytics/client.d.ts +0 -16
- package/build/module/services/analytics/client.js +0 -24
- package/build/module/services/analytics/client.js.map +0 -1
- package/build/module/services/analytics/generated/v1.d.ts +0 -359
- package/build/module/services/analytics/generated/v1.js.map +0 -1
- package/build/module/services/api/client.js +0 -83
- package/build/module/services/api/client.js.map +0 -1
- package/build/module/services/api/error.d.ts +0 -22
- package/build/module/services/api/error.js.map +0 -1
- package/build/module/services/api/generated/v1.js +0 -6
- package/build/module/services/api/index.d.ts +0 -6
- package/build/module/services/api/index.js +0 -4
- package/build/module/services/api/index.js.map +0 -1
- package/build/module/services/api/types.d.ts +0 -128
- package/build/module/services/api/types.js +0 -2
- package/build/module/services/api/types.js.map +0 -1
- package/build/module/services/cache/client.d.ts +0 -16
- package/build/module/services/cache/client.js +0 -24
- package/build/module/services/cache/client.js.map +0 -1
- package/build/module/services/cache/generated/v1.d.ts +0 -1009
- package/build/module/services/cache/generated/v1.js +0 -6
- package/build/module/services/cache/generated/v1.js.map +0 -1
- package/build/module/services/cache/index.d.ts +0 -2
- package/build/module/services/cache/index.js +0 -2
- package/build/module/services/cache/index.js.map +0 -1
- package/build/module/services/control-plane/client.d.ts +0 -17
- package/build/module/services/control-plane/client.js +0 -24
- package/build/module/services/control-plane/client.js.map +0 -1
- package/build/module/services/control-plane/generated/v1.d.ts +0 -2123
- package/build/module/services/control-plane/generated/v1.js +0 -6
- package/build/module/services/control-plane/generated/v1.js.map +0 -1
- package/build/module/services/control-plane/index.d.ts +0 -2
- package/build/module/services/control-plane/index.js +0 -2
- package/build/module/services/control-plane/index.js.map +0 -1
- package/build/module/services/ingest/client.d.ts +0 -16
- package/build/module/services/ingest/client.js +0 -24
- package/build/module/services/ingest/client.js.map +0 -1
- package/build/module/services/ingest/generated/v1.d.ts +0 -1920
- package/build/module/services/ingest/generated/v1.js +0 -6
- package/build/module/services/ingest/generated/v1.js.map +0 -1
- package/build/module/services/ingest/index.d.ts +0 -2
- package/build/module/services/ingest/index.js +0 -2
- package/build/module/services/ingest/index.js.map +0 -1
- package/src/analytics/client.ts +0 -81
- package/src/analytics/index.ts +0 -2
- package/src/analytics/types.ts +0 -83
- package/src/service-client.ts +0 -80
- package/src/services/analytics/client.ts +0 -44
- package/src/services/analytics/generated/v1.ts +0 -360
- package/src/services/api/client.ts +0 -146
- package/src/services/api/error.ts +0 -82
- package/src/services/api/index.ts +0 -8
- package/src/services/api/types.ts +0 -212
- package/src/services/cache/client.ts +0 -44
- package/src/services/cache/generated/v1.ts +0 -1010
- package/src/services/cache/index.ts +0 -2
- package/src/services/control-plane/client.ts +0 -46
- package/src/services/control-plane/generated/v1.ts +0 -2124
- package/src/services/control-plane/index.ts +0 -2
- package/src/services/ingest/client.ts +0 -44
- package/src/services/ingest/generated/v1.ts +0 -1921
- package/src/services/ingest/index.ts +0 -2
- /package/build/main/{services/api/client.d.ts → client.d.ts} +0 -0
- /package/build/main/{services/analytics/generated → generated}/v1.js +0 -0
- /package/build/main/{analytics/types.js → types.js} +0 -0
- /package/build/module/{services/api/client.d.ts → client.d.ts} +0 -0
- /package/build/module/{services/analytics/generated → generated}/v1.js +0 -0
- /package/build/module/{analytics/types.js → types.js} +0 -0
package/build/main/index.d.ts
CHANGED
|
@@ -1,14 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export type
|
|
5
|
-
export * from './
|
|
6
|
-
export type
|
|
7
|
-
export { CacheApiError, throwIfError as throwIfCacheError, useCacheApiClient, } from './services/cache/client';
|
|
8
|
-
export type { components as CacheComponents, operations as CacheOperations, paths as CachePaths, } from './services/cache/generated/v1';
|
|
9
|
-
export type { ControlPlaneApiClient, TenantRoutingResponse, } from './services/control-plane/client';
|
|
10
|
-
export { ControlPlaneApiError, throwIfError as throwIfControlPlaneError, useControlPlaneApiClient, } from './services/control-plane/client';
|
|
11
|
-
export type { components as ControlPlaneComponents, operations as ControlPlaneOperations, paths as ControlPlanePaths, } from './services/control-plane/generated/v1';
|
|
12
|
-
export type { IngestApiClient } from './services/ingest/client';
|
|
13
|
-
export { IngestApiError, throwIfError as throwIfIngestError, useIngestApiClient, } from './services/ingest/client';
|
|
14
|
-
export type { components as IngestComponents, operations as IngestOperations, paths as IngestPaths, } from './services/ingest/generated/v1';
|
|
1
|
+
import type { ApiClient } from './types';
|
|
2
|
+
export * from './client';
|
|
3
|
+
export * from './error';
|
|
4
|
+
export type * from './generated/v1';
|
|
5
|
+
export * from './types';
|
|
6
|
+
export type VRPlatformApi = ApiClient;
|
package/build/main/index.js
CHANGED
|
@@ -14,23 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
|
|
18
|
-
__exportStar(require("./
|
|
19
|
-
|
|
20
|
-
Object.defineProperty(exports, "AnalyticsApiError", { enumerable: true, get: function () { return client_1.AnalyticsApiError; } });
|
|
21
|
-
Object.defineProperty(exports, "throwIfAnalyticsError", { enumerable: true, get: function () { return client_1.throwIfError; } });
|
|
22
|
-
Object.defineProperty(exports, "useAnalyticsApiClient", { enumerable: true, get: function () { return client_1.useAnalyticsApiClient; } });
|
|
23
|
-
__exportStar(require("./services/api"), exports);
|
|
24
|
-
const client_2 = require("./services/cache/client");
|
|
25
|
-
Object.defineProperty(exports, "CacheApiError", { enumerable: true, get: function () { return client_2.CacheApiError; } });
|
|
26
|
-
Object.defineProperty(exports, "throwIfCacheError", { enumerable: true, get: function () { return client_2.throwIfError; } });
|
|
27
|
-
Object.defineProperty(exports, "useCacheApiClient", { enumerable: true, get: function () { return client_2.useCacheApiClient; } });
|
|
28
|
-
const client_3 = require("./services/control-plane/client");
|
|
29
|
-
Object.defineProperty(exports, "ControlPlaneApiError", { enumerable: true, get: function () { return client_3.ControlPlaneApiError; } });
|
|
30
|
-
Object.defineProperty(exports, "throwIfControlPlaneError", { enumerable: true, get: function () { return client_3.throwIfError; } });
|
|
31
|
-
Object.defineProperty(exports, "useControlPlaneApiClient", { enumerable: true, get: function () { return client_3.useControlPlaneApiClient; } });
|
|
32
|
-
const client_4 = require("./services/ingest/client");
|
|
33
|
-
Object.defineProperty(exports, "IngestApiError", { enumerable: true, get: function () { return client_4.IngestApiError; } });
|
|
34
|
-
Object.defineProperty(exports, "throwIfIngestError", { enumerable: true, get: function () { return client_4.throwIfError; } });
|
|
35
|
-
Object.defineProperty(exports, "useIngestApiClient", { enumerable: true, get: function () { return client_4.useIngestApiClient; } });
|
|
17
|
+
__exportStar(require("./client"), exports);
|
|
18
|
+
__exportStar(require("./error"), exports);
|
|
19
|
+
__exportStar(require("./types"), exports);
|
|
36
20
|
//# sourceMappingURL=index.js.map
|
package/build/main/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"src/","sources":["index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"src/","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAEA,2CAAyB;AACzB,0CAAwB;AAExB,0CAAwB","sourcesContent":["import type { ApiClient } from './types';\n\nexport * from './client';\nexport * from './error';\nexport type * from './generated/v1';\nexport * from './types';\n\nexport type VRPlatformApi = ApiClient;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"7.0.0-dev.20251218.3","root":["../../src/cache.ts","../../src/
|
|
1
|
+
{"version":"7.0.0-dev.20251218.3","root":["../../src/cache.ts","../../src/client.ts","../../src/error.ts","../../src/index.ts","../../src/sec.ts","../../src/types.ts","../../src/generated/openapi-fetch.ts","../../src/generated/v1.ts"]}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type createClient from 'openapi-fetch';
|
|
2
|
+
import type { paths } from './generated/v1';
|
|
3
|
+
export type ApiClientAuth = {
|
|
4
|
+
apiKey?: string;
|
|
5
|
+
sec?: string;
|
|
6
|
+
tenantId?: string;
|
|
7
|
+
accessToken?: string;
|
|
8
|
+
};
|
|
9
|
+
export type ApiClient = ReturnType<typeof createClient<paths>> & {
|
|
10
|
+
sessionId: string;
|
|
11
|
+
};
|
|
12
|
+
type ResponseCombinations = {
|
|
13
|
+
[Path in keyof paths]: {
|
|
14
|
+
[Method in keyof paths[Path]]: paths[Path][Method] extends never ? never : paths[Path][Method] extends {
|
|
15
|
+
responses: {
|
|
16
|
+
200: {
|
|
17
|
+
content: {
|
|
18
|
+
'application/json': unknown;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
} ? `${Method & string}:${Path}` : never;
|
|
23
|
+
}[keyof paths[Path]];
|
|
24
|
+
}[keyof paths];
|
|
25
|
+
export type ResponseData<T extends ResponseCombinations> = T extends `${infer Method}:${infer Path}` ? Path extends keyof paths ? Method extends keyof paths[Path] ? paths[Path][Method] extends {
|
|
26
|
+
responses: {
|
|
27
|
+
200: {
|
|
28
|
+
content: {
|
|
29
|
+
'application/json': infer Data;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
} ? Data : never : never : never : never;
|
|
34
|
+
type RequestBodyCombinations = {
|
|
35
|
+
[Path in keyof paths]: {
|
|
36
|
+
[Method in keyof paths[Path]]: paths[Path][Method] extends never ? never : ExtractJsonRequestBody<paths[Path][Method]> extends never ? never : `${Method & string}:${Path}`;
|
|
37
|
+
}[keyof paths[Path]];
|
|
38
|
+
}[keyof paths];
|
|
39
|
+
type ExtractJsonRequestBody<T> = T extends {
|
|
40
|
+
requestBody?: infer RequestBody;
|
|
41
|
+
} ? RequestBody extends {
|
|
42
|
+
content: {
|
|
43
|
+
'application/json': infer Data;
|
|
44
|
+
};
|
|
45
|
+
} ? Data : never : never;
|
|
46
|
+
export type RequestBody<T extends RequestBodyCombinations> = T extends `${infer Method}:${infer Path}` ? Path extends keyof paths ? Method extends keyof paths[Path] ? ExtractJsonRequestBody<paths[Path][Method]> : never : never : never;
|
|
47
|
+
type RequestParamCombinations = {
|
|
48
|
+
[Path in keyof paths]: {
|
|
49
|
+
[Method in keyof paths[Path]]: paths[Path][Method] extends never ? never : paths[Path][Method] extends {
|
|
50
|
+
parameters: {
|
|
51
|
+
query?: Record<string, unknown>;
|
|
52
|
+
};
|
|
53
|
+
} ? `${Method & string}:${Path}` : never;
|
|
54
|
+
}[keyof paths[Path]];
|
|
55
|
+
}[keyof paths];
|
|
56
|
+
export type RequestQuery<T extends RequestParamCombinations> = T extends `${infer Method}:${infer Path}` ? Path extends keyof paths ? Method extends keyof paths[Path] ? paths[Path][Method] extends {
|
|
57
|
+
parameters: {
|
|
58
|
+
query?: infer Data;
|
|
59
|
+
};
|
|
60
|
+
} ? Data : never : never : never : never;
|
|
61
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"src/","sources":["types.ts"],"names":[],"mappings":"","sourcesContent":["import type createClient from 'openapi-fetch';\nimport type { paths } from './generated/v1';\n\nexport type ApiClientAuth = {\n apiKey?: string;\n sec?: string;\n tenantId?: string;\n accessToken?: string;\n};\nexport type ApiClient = ReturnType<typeof createClient<paths>> & {\n sessionId: string;\n};\ntype ResponseCombinations = {\n [Path in keyof paths]: {\n [Method in keyof paths[Path]]: paths[Path][Method] extends never\n ? never\n : paths[Path][Method] extends {\n responses: {\n 200: { content: { 'application/json': unknown } };\n };\n }\n ? `${Method & string}:${Path}`\n : never;\n }[keyof paths[Path]];\n}[keyof paths];\n\nexport type ResponseData<T extends ResponseCombinations> =\n T extends `${infer Method}:${infer Path}`\n ? Path extends keyof paths\n ? Method extends keyof paths[Path]\n ? paths[Path][Method] extends {\n responses: {\n 200: { content: { 'application/json': infer Data } };\n };\n }\n ? Data\n : never\n : never\n : never\n : never;\n\ntype RequestBodyCombinations = {\n [Path in keyof paths]: {\n [Method in keyof paths[Path]]: paths[Path][Method] extends never\n ? never\n : ExtractJsonRequestBody<paths[Path][Method]> extends never\n ? never\n : `${Method & string}:${Path}`;\n }[keyof paths[Path]];\n}[keyof paths];\n\ntype ExtractJsonRequestBody<T> = T extends {\n requestBody?: infer RequestBody;\n}\n ? RequestBody extends {\n content: { 'application/json': infer Data };\n }\n ? Data\n : never\n : never;\n\nexport type RequestBody<T extends RequestBodyCombinations> =\n T extends `${infer Method}:${infer Path}`\n ? Path extends keyof paths\n ? Method extends keyof paths[Path]\n ? ExtractJsonRequestBody<paths[Path][Method]>\n : never\n : never\n : never;\n\ntype RequestParamCombinations = {\n [Path in keyof paths]: {\n [Method in keyof paths[Path]]: paths[Path][Method] extends never\n ? never\n : paths[Path][Method] extends {\n parameters: {\n query?: Record<string, unknown>;\n };\n }\n ? `${Method & string}:${Path}`\n : never;\n }[keyof paths[Path]];\n}[keyof paths];\n\nexport type RequestQuery<T extends RequestParamCombinations> =\n T extends `${infer Method}:${infer Path}`\n ? Path extends keyof paths\n ? Method extends keyof paths[Path]\n ? paths[Path][Method] extends {\n parameters: {\n query?: infer Data;\n };\n }\n ? Data\n : never\n : never\n : never\n : never;\n"]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import * as Sentry from '@sentry/core';
|
|
2
|
+
import { useRetryableFetch, } from '@vrplatform/utils';
|
|
3
|
+
import createClient from 'openapi-fetch';
|
|
4
|
+
import { useCache } from './cache';
|
|
5
|
+
import { generateApiKeySec } from './sec';
|
|
6
|
+
export function useApiClient({ baseUrl: base, local, auth, sessionId: sid,
|
|
7
|
+
// headers: h,
|
|
8
|
+
testing, headers: h, ...retryableFetchParams }) {
|
|
9
|
+
const baseUrl = (local
|
|
10
|
+
? `http://localhost:${typeof local === 'number' ? local : 8877}`
|
|
11
|
+
: base) || 'https://api.vrplatform.app';
|
|
12
|
+
const sessionId = sid || crypto.randomUUID();
|
|
13
|
+
// cache the sec key for 1 minute (its valid for 5 minutes on the API)
|
|
14
|
+
const cache = useCache(async (v) => generateApiKeySec(v, testing?.getOverwriteTimestamp?.()), 60_000);
|
|
15
|
+
const retryableFetch = useRetryableFetch({
|
|
16
|
+
...retryableFetchParams,
|
|
17
|
+
onRetry(arg) {
|
|
18
|
+
cache.invalidate();
|
|
19
|
+
if (retryableFetchParams.onRetry)
|
|
20
|
+
retryableFetchParams.onRetry(arg);
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
const trace = Sentry.getTraceData();
|
|
24
|
+
const client = createClient({
|
|
25
|
+
baseUrl,
|
|
26
|
+
querySerializer: {
|
|
27
|
+
array: {
|
|
28
|
+
explode: false,
|
|
29
|
+
style: 'form',
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
fetch(req) {
|
|
33
|
+
return retryableFetch(async () => {
|
|
34
|
+
let clone = req.clone();
|
|
35
|
+
if (testing?.overwriteUri)
|
|
36
|
+
clone = new Request(testing.overwriteUri, clone);
|
|
37
|
+
const a = (typeof auth === 'function' ? auth() : auth) || {};
|
|
38
|
+
if (sessionId)
|
|
39
|
+
clone.headers.set('X-Session-Id', sessionId);
|
|
40
|
+
if (a.sec)
|
|
41
|
+
clone.headers.set('X-Api-Key', `Sec ${await cache.current(a.sec)}`);
|
|
42
|
+
if (a.apiKey)
|
|
43
|
+
clone.headers.set('X-Api-Key', a.apiKey);
|
|
44
|
+
if (a.tenantId)
|
|
45
|
+
clone.headers.set('X-Team-Id', a.tenantId);
|
|
46
|
+
if (a.accessToken)
|
|
47
|
+
clone.headers.set('Authorization', a.accessToken.startsWith('Bearer ')
|
|
48
|
+
? a.accessToken
|
|
49
|
+
: `Bearer ${a.accessToken}`);
|
|
50
|
+
const additionalHeaders = h ? (typeof h === 'function' ? h() : h) : {};
|
|
51
|
+
for (const key in additionalHeaders) {
|
|
52
|
+
clone.headers.set(key, additionalHeaders[key]);
|
|
53
|
+
}
|
|
54
|
+
if (trace['sentry-trace'])
|
|
55
|
+
clone.headers.set('sentry-trace', trace['sentry-trace']);
|
|
56
|
+
if (trace.baggage)
|
|
57
|
+
clone.headers.set('baggage', trace.baggage);
|
|
58
|
+
return clone;
|
|
59
|
+
});
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
const sessionClient = client;
|
|
63
|
+
sessionClient.sessionId = sessionId;
|
|
64
|
+
return sessionClient;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"src/","sources":["client.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Sentry from '@sentry/core';\nimport {\n type RetryableFetchParams,\n useRetryableFetch,\n} from '@vrplatform/utils';\nimport createClient from 'openapi-fetch';\nimport { useCache } from './cache';\nimport type { paths } from './generated/v1';\nimport { generateApiKeySec } from './sec';\nimport type { ApiClient, ApiClientAuth } from './types';\n\nexport function useApiClient({\n baseUrl: base,\n local,\n auth,\n sessionId: sid,\n // headers: h,\n testing,\n headers: h,\n ...retryableFetchParams\n}: {\n attempts?: number;\n auth?: ApiClientAuth | (() => ApiClientAuth);\n baseUrl?: string;\n sessionId?: string;\n local?: boolean | number;\n headers?: Record<string, string> | (() => Record<string, string>);\n testing?: {\n overwriteUri?: string;\n getOverwriteTimestamp?: () => number | undefined;\n };\n} & RetryableFetchParams) {\n const baseUrl =\n (local\n ? `http://localhost:${typeof local === 'number' ? local : 8877}`\n : base) || 'https://api.vrplatform.app';\n\n const sessionId = sid || crypto.randomUUID();\n // cache the sec key for 1 minute (its valid for 5 minutes on the API)\n const cache = useCache(\n async (v: string) =>\n generateApiKeySec(v, testing?.getOverwriteTimestamp?.()),\n 60_000\n );\n\n const retryableFetch = useRetryableFetch({\n ...retryableFetchParams,\n onRetry(arg) {\n cache.invalidate();\n if (retryableFetchParams.onRetry) retryableFetchParams.onRetry(arg);\n },\n });\n\n const trace = Sentry.getTraceData();\n const client = createClient<paths>({\n baseUrl,\n querySerializer: {\n array: {\n explode: false,\n style: 'form',\n },\n },\n fetch(req) {\n return retryableFetch(async () => {\n let clone: any = req.clone() as any;\n if (testing?.overwriteUri)\n clone = new Request(testing.overwriteUri, clone);\n\n const a = (typeof auth === 'function' ? auth() : auth) || {};\n if (sessionId) clone.headers.set('X-Session-Id', sessionId);\n if (a.sec)\n clone.headers.set('X-Api-Key', `Sec ${await cache.current(a.sec)}`);\n if (a.apiKey) clone.headers.set('X-Api-Key', a.apiKey);\n if (a.tenantId) clone.headers.set('X-Team-Id', a.tenantId);\n if (a.accessToken)\n clone.headers.set(\n 'Authorization',\n a.accessToken.startsWith('Bearer ')\n ? a.accessToken\n : `Bearer ${a.accessToken}`\n );\n const additionalHeaders = h ? (typeof h === 'function' ? h() : h) : {};\n for (const key in additionalHeaders) {\n clone.headers.set(key, additionalHeaders[key]);\n }\n\n if (trace['sentry-trace'])\n clone.headers.set('sentry-trace', trace['sentry-trace']);\n if (trace.baggage) clone.headers.set('baggage', trace.baggage);\n\n return clone;\n });\n },\n });\n\n const sessionClient: ApiClient = client as any;\n sessionClient.sessionId = sessionId;\n return sessionClient;\n}\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { FetchResponse } from './generated/openapi-fetch';
|
|
2
|
+
type E = {
|
|
3
|
+
code: string;
|
|
4
|
+
message: string;
|
|
5
|
+
issues?: {
|
|
6
|
+
message: string;
|
|
7
|
+
}[];
|
|
8
|
+
context?: any;
|
|
9
|
+
stack?: any;
|
|
10
|
+
};
|
|
11
|
+
export declare class ApiClientError extends Error {
|
|
12
|
+
error: E;
|
|
13
|
+
code: string;
|
|
14
|
+
issues: {
|
|
15
|
+
message: string;
|
|
16
|
+
}[];
|
|
17
|
+
context: any;
|
|
18
|
+
constructor(error: E);
|
|
19
|
+
}
|
|
20
|
+
export declare function throwIfError<T extends FetchResponse<any, any, any>>(response: T): NonNullable<T['data']>;
|
|
21
|
+
export declare function throwIfError<T extends FetchResponse<any, any, any>>(response: Promise<T>): Promise<NonNullable<T['data']>>;
|
|
22
|
+
export {};
|
|
@@ -9,7 +9,7 @@ export class ApiClientError extends Error {
|
|
|
9
9
|
[
|
|
10
10
|
error.code,
|
|
11
11
|
error.issues
|
|
12
|
-
?.map((
|
|
12
|
+
?.map((x) => [x.message, x.path?.join('->')]
|
|
13
13
|
.filter(hasValue)
|
|
14
14
|
.join(' on '))
|
|
15
15
|
.join(', '),
|
|
@@ -18,35 +18,31 @@ export class ApiClientError extends Error {
|
|
|
18
18
|
.join(': ');
|
|
19
19
|
super(message);
|
|
20
20
|
this.error = error;
|
|
21
|
-
this.name = 'ApiClientError';
|
|
22
21
|
this.code = error.code;
|
|
23
22
|
this.issues = error.issues || [];
|
|
24
23
|
this.context = error.context || {};
|
|
25
|
-
if (error.stack)
|
|
24
|
+
if (error.stack)
|
|
26
25
|
this.stack = error.stack;
|
|
27
|
-
}
|
|
28
26
|
}
|
|
29
27
|
}
|
|
30
28
|
export function throwIfError(response) {
|
|
31
29
|
if (response instanceof Promise) {
|
|
32
|
-
return response.then((
|
|
33
|
-
if (
|
|
30
|
+
return response.then((response) => {
|
|
31
|
+
if (response.response.status === 503) {
|
|
34
32
|
throw new ApiClientError({
|
|
35
33
|
code: 'SERVICE_UNAVAILABLE',
|
|
36
34
|
message: 'Worker resources exceeded.',
|
|
37
35
|
});
|
|
38
36
|
}
|
|
39
|
-
const error =
|
|
40
|
-
if (error)
|
|
37
|
+
const error = response.error;
|
|
38
|
+
if (error)
|
|
41
39
|
throw new ApiClientError(error);
|
|
42
|
-
|
|
43
|
-
return resolved.data;
|
|
40
|
+
return response.data;
|
|
44
41
|
});
|
|
45
42
|
}
|
|
46
43
|
const error = response.error;
|
|
47
|
-
if (error)
|
|
44
|
+
if (error)
|
|
48
45
|
throw new ApiClientError(error);
|
|
49
|
-
}
|
|
50
46
|
return response.data;
|
|
51
47
|
}
|
|
52
48
|
//# sourceMappingURL=error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"src/","sources":["error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAY7C,MAAM,OAAO,cAAe,SAAQ,KAAK;IAMpB,KAAK;IALxB,IAAI,CAAS;IACb,MAAM,CAEF;IACJ,OAAO,CAAM;IACb,YAAmB,KAAQ,EAAE;QAC3B,MAAM,OAAO,GACX,KAAK,CAAC,OAAO;YACb;gBACE,KAAK,CAAC,IAAI;gBACV,KAAK,CAAC,MAAM;oBACV,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACV,CAAC,CAAC,CAAC,OAAO,EAAG,CAAS,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;qBACrC,MAAM,CAAC,QAAQ,CAAC;qBAChB,IAAI,CAAC,MAAM,CAAC,CAChB;qBACA,IAAI,CAAC,IAAI,CAAC;aACd;iBACE,MAAM,CAAC,QAAQ,CAAC;iBAChB,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,KAAK,CAAC,OAAO,CAAC,CAAC;qBAfE,KAAK;QAiBtB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAAA,CAC3C;CACF;AAOD,MAAM,UAAU,YAAY,CAC1B,QAAwB,EACkC;IAC1D,IAAI,QAAQ,YAAY,OAAO,EAAE,CAAC;QAChC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;YACjC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACrC,MAAM,IAAI,cAAc,CAAC;oBACvB,IAAI,EAAE,qBAAqB;oBAC3B,OAAO,EAAE,4BAA4B;iBACtC,CAAC,CAAC;YACL,CAAC;YAED,MAAM,KAAK,GAAM,QAAQ,CAAC,KAAK,CAAC;YAEhC,IAAI,KAAK;gBAAE,MAAM,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC;YAC3C,OAAO,QAAQ,CAAC,IAAI,CAAC;QAAA,CACtB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAM,QAAQ,CAAC,KAAK,CAAC;IAEhC,IAAI,KAAK;QAAE,MAAM,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC;IAC3C,OAAO,QAAQ,CAAC,IAAI,CAAC;AAAA,CACtB","sourcesContent":["import { hasValue } from '@vrplatform/utils';\nimport type { FetchResponse } from './generated/openapi-fetch';\n\ntype E = {\n code: string;\n message: string;\n issues?: {\n message: string;\n }[];\n context?: any;\n stack?: any;\n};\nexport class ApiClientError extends Error {\n code: string;\n issues: {\n message: string;\n }[];\n context: any;\n constructor(public error: E) {\n const message =\n error.message ||\n [\n error.code,\n error.issues\n ?.map((x) =>\n [x.message, (x as any).path?.join('->')]\n .filter(hasValue)\n .join(' on ')\n )\n .join(', '),\n ]\n .filter(hasValue)\n .join(': ');\n super(message);\n\n this.code = error.code;\n this.issues = error.issues || [];\n this.context = error.context || {};\n if (error.stack) this.stack = error.stack;\n }\n}\nexport function throwIfError<T extends FetchResponse<any, any, any>>(\n response: T\n): NonNullable<T['data']>;\nexport function throwIfError<T extends FetchResponse<any, any, any>>(\n response: Promise<T>\n): Promise<NonNullable<T['data']>>;\nexport function throwIfError<T extends FetchResponse<any, any, any>>(\n response: Promise<T> | T\n): Promise<NonNullable<T['data']>> | NonNullable<T['data']> {\n if (response instanceof Promise) {\n return response.then((response) => {\n if (response.response.status === 503) {\n throw new ApiClientError({\n code: 'SERVICE_UNAVAILABLE',\n message: 'Worker resources exceeded.',\n });\n }\n\n const error: E = response.error;\n\n if (error) throw new ApiClientError(error);\n return response.data;\n });\n }\n\n const error: E = response.error;\n\n if (error) throw new ApiClientError(error);\n return response.data;\n}\n"]}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import type { ErrorResponse, FilterKeys, HttpMethod, IsOperationRequestBodyOptional, MediaType, OperationRequestBodyContent, PathsWithMethod, RequiredKeysOf, ResponseObjectMap, SuccessResponse } from 'openapi-typescript-helpers';
|
|
2
|
+
/** Options for each client instance */
|
|
3
|
+
interface ClientOptions extends Omit<RequestInit, 'headers'> {
|
|
4
|
+
/** set the common root URL for all API requests */
|
|
5
|
+
baseUrl?: string;
|
|
6
|
+
/** custom fetch (defaults to globalThis.fetch) */
|
|
7
|
+
fetch?: (input: Request) => Promise<Response>;
|
|
8
|
+
/** custom Request (defaults to globalThis.Request) */
|
|
9
|
+
Request?: typeof Request;
|
|
10
|
+
/** global querySerializer */
|
|
11
|
+
querySerializer?: QuerySerializer<unknown> | QuerySerializerOptions;
|
|
12
|
+
/** global bodySerializer */
|
|
13
|
+
bodySerializer?: BodySerializer<unknown>;
|
|
14
|
+
headers?: HeadersOptions;
|
|
15
|
+
/** RequestInit extension object to pass as 2nd argument to fetch when supported (defaults to undefined) */
|
|
16
|
+
requestInitExt?: Record<string, unknown>;
|
|
17
|
+
}
|
|
18
|
+
type HeadersOptions = Required<RequestInit>['headers'] | Record<string, string | number | boolean | (string | number | boolean)[] | null | undefined>;
|
|
19
|
+
type QuerySerializer<T> = (query: T extends {
|
|
20
|
+
parameters: any;
|
|
21
|
+
} ? NonNullable<T['parameters']['query']> : Record<string, unknown>) => string;
|
|
22
|
+
/** @see https://swagger.io/docs/specification/serialization/#query */
|
|
23
|
+
type QuerySerializerOptions = {
|
|
24
|
+
/** Set serialization for arrays. @see https://swagger.io/docs/specification/serialization/#query */
|
|
25
|
+
array?: {
|
|
26
|
+
/** default: "form" */
|
|
27
|
+
style: 'form' | 'spaceDelimited' | 'pipeDelimited';
|
|
28
|
+
/** default: true */
|
|
29
|
+
explode: boolean;
|
|
30
|
+
};
|
|
31
|
+
/** Set serialization for objects. @see https://swagger.io/docs/specification/serialization/#query */
|
|
32
|
+
object?: {
|
|
33
|
+
/** default: "deepObject" */
|
|
34
|
+
style: 'form' | 'deepObject';
|
|
35
|
+
/** default: true */
|
|
36
|
+
explode: boolean;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* The `allowReserved` keyword specifies whether the reserved characters
|
|
40
|
+
* `:/?#[]@!$&'()*+,;=` in parameter values are allowed to be sent as they
|
|
41
|
+
* are, or should be percent-encoded. By default, allowReserved is `false`,
|
|
42
|
+
* and reserved characters are percent-encoded.
|
|
43
|
+
* @see https://swagger.io/docs/specification/serialization/#query
|
|
44
|
+
*/
|
|
45
|
+
allowReserved?: boolean;
|
|
46
|
+
};
|
|
47
|
+
type BodySerializer<T> = (body: OperationRequestBodyContent<T>) => any;
|
|
48
|
+
type BodyType<T = unknown> = {
|
|
49
|
+
json: T;
|
|
50
|
+
text: Awaited<ReturnType<Response['text']>>;
|
|
51
|
+
blob: Awaited<ReturnType<Response['blob']>>;
|
|
52
|
+
arrayBuffer: Awaited<ReturnType<Response['arrayBuffer']>>;
|
|
53
|
+
stream: Response['body'];
|
|
54
|
+
};
|
|
55
|
+
type ParseAs = keyof BodyType;
|
|
56
|
+
type ParseAsResponse<T, Options> = Options extends {
|
|
57
|
+
parseAs: ParseAs;
|
|
58
|
+
} ? BodyType<T>[Options['parseAs']] : T;
|
|
59
|
+
interface DefaultParamsOption {
|
|
60
|
+
params?: {
|
|
61
|
+
query?: Record<string, unknown>;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
type ParamsOption<T> = T extends {
|
|
65
|
+
parameters: any;
|
|
66
|
+
} ? RequiredKeysOf<T['parameters']> extends never ? {
|
|
67
|
+
params?: T['parameters'];
|
|
68
|
+
} : {
|
|
69
|
+
params: T['parameters'];
|
|
70
|
+
} : DefaultParamsOption;
|
|
71
|
+
type RequestBodyOption<T> = OperationRequestBodyContent<T> extends never ? {
|
|
72
|
+
body?: never;
|
|
73
|
+
} : IsOperationRequestBodyOptional<T> extends true ? {
|
|
74
|
+
body?: OperationRequestBodyContent<T>;
|
|
75
|
+
} : {
|
|
76
|
+
body: OperationRequestBodyContent<T>;
|
|
77
|
+
};
|
|
78
|
+
type FetchOptions<T> = RequestOptions<T> & Omit<RequestInit, 'body' | 'headers'>;
|
|
79
|
+
type FetchResponse<T extends Record<string | number, any>, Options, Media extends MediaType> = {
|
|
80
|
+
data: ParseAsResponse<SuccessResponse<ResponseObjectMap<T>, Media>, Options>;
|
|
81
|
+
error?: never;
|
|
82
|
+
response: Response;
|
|
83
|
+
} | {
|
|
84
|
+
data?: never;
|
|
85
|
+
error: ErrorResponse<ResponseObjectMap<T>, Media>;
|
|
86
|
+
response: Response;
|
|
87
|
+
};
|
|
88
|
+
type RequestOptions<T> = ParamsOption<T> & RequestBodyOption<T> & {
|
|
89
|
+
baseUrl?: string;
|
|
90
|
+
querySerializer?: QuerySerializer<T> | QuerySerializerOptions;
|
|
91
|
+
bodySerializer?: BodySerializer<T>;
|
|
92
|
+
parseAs?: ParseAs;
|
|
93
|
+
fetch?: ClientOptions['fetch'];
|
|
94
|
+
headers?: HeadersOptions;
|
|
95
|
+
};
|
|
96
|
+
type MergedOptions<T = unknown> = {
|
|
97
|
+
baseUrl: string;
|
|
98
|
+
parseAs: ParseAs;
|
|
99
|
+
querySerializer: QuerySerializer<T>;
|
|
100
|
+
bodySerializer: BodySerializer<T>;
|
|
101
|
+
fetch: typeof globalThis.fetch;
|
|
102
|
+
};
|
|
103
|
+
interface MiddlewareCallbackParams {
|
|
104
|
+
/** Current Request object */
|
|
105
|
+
request: Request;
|
|
106
|
+
/** The original OpenAPI schema path (including curly braces) */
|
|
107
|
+
readonly schemaPath: string;
|
|
108
|
+
/** OpenAPI parameters as provided from openapi-fetch */
|
|
109
|
+
readonly params: {
|
|
110
|
+
query?: Record<string, unknown>;
|
|
111
|
+
header?: Record<string, unknown>;
|
|
112
|
+
path?: Record<string, unknown>;
|
|
113
|
+
cookie?: Record<string, unknown>;
|
|
114
|
+
};
|
|
115
|
+
/** Unique ID for this request */
|
|
116
|
+
readonly id: string;
|
|
117
|
+
/** createClient options (read-only) */
|
|
118
|
+
readonly options: MergedOptions;
|
|
119
|
+
}
|
|
120
|
+
type MiddlewareOnRequest = (options: MiddlewareCallbackParams) => void | Request | Response | undefined | Promise<Request | Response | undefined | void>;
|
|
121
|
+
type MiddlewareOnResponse = (options: MiddlewareCallbackParams & {
|
|
122
|
+
response: Response;
|
|
123
|
+
}) => void | Response | undefined | Promise<Response | undefined | void>;
|
|
124
|
+
type MiddlewareOnError = (options: MiddlewareCallbackParams & {
|
|
125
|
+
error: unknown;
|
|
126
|
+
}) => void | Response | Error | Promise<void | Response | Error>;
|
|
127
|
+
type Middleware = {
|
|
128
|
+
onRequest: MiddlewareOnRequest;
|
|
129
|
+
onResponse?: MiddlewareOnResponse;
|
|
130
|
+
onError?: MiddlewareOnError;
|
|
131
|
+
} | {
|
|
132
|
+
onRequest?: MiddlewareOnRequest;
|
|
133
|
+
onResponse: MiddlewareOnResponse;
|
|
134
|
+
onError?: MiddlewareOnError;
|
|
135
|
+
} | {
|
|
136
|
+
onRequest?: MiddlewareOnRequest;
|
|
137
|
+
onResponse?: MiddlewareOnResponse;
|
|
138
|
+
onError: MiddlewareOnError;
|
|
139
|
+
};
|
|
140
|
+
/** This type helper makes the 2nd function param required if params/requestBody are required; otherwise, optional */
|
|
141
|
+
type MaybeOptionalInit<Params, Location extends keyof Params> = RequiredKeysOf<FetchOptions<FilterKeys<Params, Location>>> extends never ? FetchOptions<FilterKeys<Params, Location>> | undefined : FetchOptions<FilterKeys<Params, Location>>;
|
|
142
|
+
type InitParam<Init> = RequiredKeysOf<Init> extends never ? [(Init & {
|
|
143
|
+
[key: string]: unknown;
|
|
144
|
+
})?] : [Init & {
|
|
145
|
+
[key: string]: unknown;
|
|
146
|
+
}];
|
|
147
|
+
type ClientMethod<Paths extends Record<string, Record<HttpMethod, {}>>, Method extends HttpMethod, Media extends MediaType> = <Path extends PathsWithMethod<Paths, Method>, Init extends MaybeOptionalInit<Paths[Path], Method>>(url: Path, ...init: InitParam<Init>) => Promise<FetchResponse<Paths[Path][Method], Init, Media>>;
|
|
148
|
+
type ClientRequestMethod<Paths extends Record<string, Record<HttpMethod, {}>>, Media extends MediaType> = <Method extends HttpMethod, Path extends PathsWithMethod<Paths, Method>, Init extends MaybeOptionalInit<Paths[Path], Method>>(method: Method, url: Path, ...init: InitParam<Init>) => Promise<FetchResponse<Paths[Path][Method], Init, Media>>;
|
|
149
|
+
type ClientForPath<PathInfo extends Record<string | number, any>, Media extends MediaType> = {
|
|
150
|
+
[Method in keyof PathInfo as Uppercase<string & Method>]: <Init extends MaybeOptionalInit<PathInfo, Method>>(...init: InitParam<Init>) => Promise<FetchResponse<PathInfo[Method], Init, Media>>;
|
|
151
|
+
};
|
|
152
|
+
interface Client<Paths extends {}, Media extends MediaType = MediaType> {
|
|
153
|
+
request: ClientRequestMethod<Paths, Media>;
|
|
154
|
+
/** Call a GET endpoint */
|
|
155
|
+
GET: ClientMethod<Paths, 'get', Media>;
|
|
156
|
+
/** Call a PUT endpoint */
|
|
157
|
+
PUT: ClientMethod<Paths, 'put', Media>;
|
|
158
|
+
/** Call a POST endpoint */
|
|
159
|
+
POST: ClientMethod<Paths, 'post', Media>;
|
|
160
|
+
/** Call a DELETE endpoint */
|
|
161
|
+
DELETE: ClientMethod<Paths, 'delete', Media>;
|
|
162
|
+
/** Call a OPTIONS endpoint */
|
|
163
|
+
OPTIONS: ClientMethod<Paths, 'options', Media>;
|
|
164
|
+
/** Call a HEAD endpoint */
|
|
165
|
+
HEAD: ClientMethod<Paths, 'head', Media>;
|
|
166
|
+
/** Call a PATCH endpoint */
|
|
167
|
+
PATCH: ClientMethod<Paths, 'patch', Media>;
|
|
168
|
+
/** Call a TRACE endpoint */
|
|
169
|
+
TRACE: ClientMethod<Paths, 'trace', Media>;
|
|
170
|
+
/** Register middleware */
|
|
171
|
+
use(...middleware: Middleware[]): void;
|
|
172
|
+
/** Unregister middleware */
|
|
173
|
+
eject(...middleware: Middleware[]): void;
|
|
174
|
+
}
|
|
175
|
+
type ClientPathsWithMethod<CreatedClient extends Client<any, any>, Method extends HttpMethod> = CreatedClient extends Client<infer Paths, infer _Media> ? PathsWithMethod<Paths, Method> : never;
|
|
176
|
+
type MethodResponse<CreatedClient extends Client<any, any>, Method extends HttpMethod, Path extends ClientPathsWithMethod<CreatedClient, Method>, Options = {}> = CreatedClient extends Client<infer Paths extends {
|
|
177
|
+
[key: string]: any;
|
|
178
|
+
}, infer Media extends MediaType> ? NonNullable<FetchResponse<Paths[Path][Method], Options, Media>['data']> : never;
|
|
179
|
+
type PathBasedClient<Paths extends Record<string | number, any>, Media extends MediaType = MediaType> = {
|
|
180
|
+
[Path in keyof Paths]: ClientForPath<Paths[Path], Media>;
|
|
181
|
+
};
|
|
182
|
+
declare function wrapAsPathBasedClient<Paths extends {}, Media extends MediaType = MediaType>(client: Client<Paths, Media>): PathBasedClient<Paths, Media>;
|
|
183
|
+
declare function createPathBasedClient<Paths extends {}, Media extends MediaType = MediaType>(clientOptions?: ClientOptions): PathBasedClient<Paths, Media>;
|
|
184
|
+
/** Serialize primitive params to string */
|
|
185
|
+
declare function serializePrimitiveParam(name: string, value: string, options?: {
|
|
186
|
+
allowReserved?: boolean;
|
|
187
|
+
}): string;
|
|
188
|
+
/** Serialize object param to string */
|
|
189
|
+
declare function serializeObjectParam(name: string, value: Record<string, unknown>, options: {
|
|
190
|
+
style: 'simple' | 'label' | 'matrix' | 'form' | 'deepObject';
|
|
191
|
+
explode: boolean;
|
|
192
|
+
allowReserved?: boolean;
|
|
193
|
+
}): string;
|
|
194
|
+
/** Serialize array param to string */
|
|
195
|
+
declare function serializeArrayParam(name: string, value: unknown[], options: {
|
|
196
|
+
style: 'simple' | 'label' | 'matrix' | 'form' | 'spaceDelimited' | 'pipeDelimited';
|
|
197
|
+
explode: boolean;
|
|
198
|
+
allowReserved?: boolean;
|
|
199
|
+
}): string;
|
|
200
|
+
/** Serialize query params to string */
|
|
201
|
+
declare function createQuerySerializer<T = unknown>(options?: QuerySerializerOptions): (queryParams: T) => string;
|
|
202
|
+
/**
|
|
203
|
+
* Handle different OpenAPI 3.x serialization styles
|
|
204
|
+
* @type {import("openapi-fetch").defaultPathSerializer}
|
|
205
|
+
* @see https://swagger.io/docs/specification/serialization/#path
|
|
206
|
+
*/
|
|
207
|
+
declare function defaultPathSerializer(pathname: string, pathParams: Record<string, unknown>): string;
|
|
208
|
+
/** Serialize body object to string */
|
|
209
|
+
declare function defaultBodySerializer<T>(body: T): string;
|
|
210
|
+
/** Construct URL string from baseUrl and handle path and query params */
|
|
211
|
+
declare function createFinalURL<O>(pathname: string, options: {
|
|
212
|
+
baseUrl: string;
|
|
213
|
+
params: {
|
|
214
|
+
query?: Record<string, unknown>;
|
|
215
|
+
path?: Record<string, unknown>;
|
|
216
|
+
};
|
|
217
|
+
querySerializer: QuerySerializer<O>;
|
|
218
|
+
}): string;
|
|
219
|
+
/** Merge headers a and b, with b taking priority */
|
|
220
|
+
declare function mergeHeaders(...allHeaders: (HeadersOptions | undefined)[]): Headers;
|
|
221
|
+
/** Remove trailing slash from url */
|
|
222
|
+
declare function removeTrailingSlash(url: string): string;
|
|
223
|
+
export { createFinalURL, createPathBasedClient, createQuerySerializer, defaultBodySerializer, defaultPathSerializer, mergeHeaders, removeTrailingSlash, serializeArrayParam, serializeObjectParam, serializePrimitiveParam, wrapAsPathBasedClient, };
|
|
224
|
+
export type { BodySerializer, Client, ClientForPath, ClientMethod, ClientOptions, ClientPathsWithMethod, ClientRequestMethod, DefaultParamsOption, FetchOptions, FetchResponse, HeadersOptions, MaybeOptionalInit, MergedOptions, MethodResponse, Middleware, MiddlewareCallbackParams, ParamsOption, ParseAs, ParseAsResponse, PathBasedClient, QuerySerializer, QuerySerializerOptions, RequestBodyOption, RequestOptions, };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { createFinalURL, createPathBasedClient, createQuerySerializer, defaultBodySerializer, defaultPathSerializer, mergeHeaders, removeTrailingSlash, serializeArrayParam, serializeObjectParam, serializePrimitiveParam, wrapAsPathBasedClient, };
|
|
2
|
+
//# sourceMappingURL=openapi-fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi-fetch.js","sourceRoot":"src/","sources":["generated/openapi-fetch.ts"],"names":[],"mappings":"AA0YA,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,GACtB,CAAC","sourcesContent":["import type {\n ErrorResponse,\n FilterKeys,\n HttpMethod,\n IsOperationRequestBodyOptional,\n MediaType,\n OperationRequestBodyContent,\n PathsWithMethod,\n RequiredKeysOf,\n ResponseObjectMap,\n SuccessResponse,\n} from 'openapi-typescript-helpers';\n\n/** Options for each client instance */\ninterface ClientOptions extends Omit<RequestInit, 'headers'> {\n /** set the common root URL for all API requests */\n baseUrl?: string;\n /** custom fetch (defaults to globalThis.fetch) */\n fetch?: (input: Request) => Promise<Response>;\n /** custom Request (defaults to globalThis.Request) */\n Request?: typeof Request;\n /** global querySerializer */\n querySerializer?: QuerySerializer<unknown> | QuerySerializerOptions;\n /** global bodySerializer */\n bodySerializer?: BodySerializer<unknown>;\n headers?: HeadersOptions;\n /** RequestInit extension object to pass as 2nd argument to fetch when supported (defaults to undefined) */\n requestInitExt?: Record<string, unknown>;\n}\n\ntype HeadersOptions =\n | Required<RequestInit>['headers']\n | Record<\n string,\n | string\n | number\n | boolean\n | (string | number | boolean)[]\n | null\n | undefined\n >;\n\ntype QuerySerializer<T> = (\n query: T extends { parameters: any }\n ? NonNullable<T['parameters']['query']>\n : Record<string, unknown>\n) => string;\n\n/** @see https://swagger.io/docs/specification/serialization/#query */\ntype QuerySerializerOptions = {\n /** Set serialization for arrays. @see https://swagger.io/docs/specification/serialization/#query */\n array?: {\n /** default: \"form\" */\n style: 'form' | 'spaceDelimited' | 'pipeDelimited';\n /** default: true */\n explode: boolean;\n };\n /** Set serialization for objects. @see https://swagger.io/docs/specification/serialization/#query */\n object?: {\n /** default: \"deepObject\" */\n style: 'form' | 'deepObject';\n /** default: true */\n explode: boolean;\n };\n /**\n * The `allowReserved` keyword specifies whether the reserved characters\n * `:/?#[]@!$&'()*+,;=` in parameter values are allowed to be sent as they\n * are, or should be percent-encoded. By default, allowReserved is `false`,\n * and reserved characters are percent-encoded.\n * @see https://swagger.io/docs/specification/serialization/#query\n */\n allowReserved?: boolean;\n};\n\ntype BodySerializer<T> = (body: OperationRequestBodyContent<T>) => any;\n\ntype BodyType<T = unknown> = {\n json: T;\n text: Awaited<ReturnType<Response['text']>>;\n blob: Awaited<ReturnType<Response['blob']>>;\n arrayBuffer: Awaited<ReturnType<Response['arrayBuffer']>>;\n stream: Response['body'];\n};\ntype ParseAs = keyof BodyType;\ntype ParseAsResponse<T, Options> = Options extends {\n parseAs: ParseAs;\n}\n ? BodyType<T>[Options['parseAs']]\n : T;\n\ninterface DefaultParamsOption {\n params?: {\n query?: Record<string, unknown>;\n };\n}\n\ntype ParamsOption<T> = T extends {\n parameters: any;\n}\n ? RequiredKeysOf<T['parameters']> extends never\n ? { params?: T['parameters'] }\n : { params: T['parameters'] }\n : DefaultParamsOption;\n\ntype RequestBodyOption<T> = OperationRequestBodyContent<T> extends never\n ? { body?: never }\n : IsOperationRequestBodyOptional<T> extends true\n ? { body?: OperationRequestBodyContent<T> }\n : { body: OperationRequestBodyContent<T> };\n\ntype FetchOptions<T> = RequestOptions<T> &\n Omit<RequestInit, 'body' | 'headers'>;\n\ntype FetchResponse<\n T extends Record<string | number, any>,\n Options,\n Media extends MediaType,\n> =\n | {\n data: ParseAsResponse<\n SuccessResponse<ResponseObjectMap<T>, Media>,\n Options\n >;\n error?: never;\n response: Response;\n }\n | {\n data?: never;\n error: ErrorResponse<ResponseObjectMap<T>, Media>;\n response: Response;\n };\n\ntype RequestOptions<T> = ParamsOption<T> &\n RequestBodyOption<T> & {\n baseUrl?: string;\n querySerializer?: QuerySerializer<T> | QuerySerializerOptions;\n bodySerializer?: BodySerializer<T>;\n parseAs?: ParseAs;\n fetch?: ClientOptions['fetch'];\n headers?: HeadersOptions;\n };\n\ntype MergedOptions<T = unknown> = {\n baseUrl: string;\n parseAs: ParseAs;\n querySerializer: QuerySerializer<T>;\n bodySerializer: BodySerializer<T>;\n fetch: typeof globalThis.fetch;\n};\n\ninterface MiddlewareCallbackParams {\n /** Current Request object */\n request: Request;\n /** The original OpenAPI schema path (including curly braces) */\n readonly schemaPath: string;\n /** OpenAPI parameters as provided from openapi-fetch */\n readonly params: {\n query?: Record<string, unknown>;\n header?: Record<string, unknown>;\n path?: Record<string, unknown>;\n cookie?: Record<string, unknown>;\n };\n /** Unique ID for this request */\n readonly id: string;\n /** createClient options (read-only) */\n readonly options: MergedOptions;\n}\n\ntype MiddlewareOnRequest = (options: MiddlewareCallbackParams) =>\n | void\n | Request\n | Response\n | undefined\n // biome-ignore lint/suspicious/noConfusingVoidType: N\n | Promise<Request | Response | undefined | void>;\ntype MiddlewareOnResponse = (\n options: MiddlewareCallbackParams & { response: Response }\n // biome-ignore lint/suspicious/noConfusingVoidType: N\n) => void | Response | undefined | Promise<Response | undefined | void>;\ntype MiddlewareOnError = (\n options: MiddlewareCallbackParams & { error: unknown }\n // biome-ignore lint/suspicious/noConfusingVoidType: N\n) => void | Response | Error | Promise<void | Response | Error>;\n\ntype Middleware =\n | {\n onRequest: MiddlewareOnRequest;\n onResponse?: MiddlewareOnResponse;\n onError?: MiddlewareOnError;\n }\n | {\n onRequest?: MiddlewareOnRequest;\n onResponse: MiddlewareOnResponse;\n onError?: MiddlewareOnError;\n }\n | {\n onRequest?: MiddlewareOnRequest;\n onResponse?: MiddlewareOnResponse;\n onError: MiddlewareOnError;\n };\n\n/** This type helper makes the 2nd function param required if params/requestBody are required; otherwise, optional */\ntype MaybeOptionalInit<Params, Location extends keyof Params> = RequiredKeysOf<\n FetchOptions<FilterKeys<Params, Location>>\n> extends never\n ? FetchOptions<FilterKeys<Params, Location>> | undefined\n : FetchOptions<FilterKeys<Params, Location>>;\n\n// The final init param to accept.\n// - Determines if the param is optional or not.\n// - Performs arbitrary [key: string] addition.\n// Note: the addition MUST happen after all the inference happens (otherwise TS can’t infer if init is required or not).\ntype InitParam<Init> = RequiredKeysOf<Init> extends never\n ? [(Init & { [key: string]: unknown })?]\n : [Init & { [key: string]: unknown }];\n\ntype ClientMethod<\n // biome-ignore lint/complexity/noBannedTypes: N\n Paths extends Record<string, Record<HttpMethod, {}>>,\n Method extends HttpMethod,\n Media extends MediaType,\n> = <\n Path extends PathsWithMethod<Paths, Method>,\n Init extends MaybeOptionalInit<Paths[Path], Method>,\n>(\n url: Path,\n ...init: InitParam<Init>\n) => Promise<FetchResponse<Paths[Path][Method], Init, Media>>;\n\ntype ClientRequestMethod<\n // biome-ignore lint/complexity/noBannedTypes: N\n Paths extends Record<string, Record<HttpMethod, {}>>,\n Media extends MediaType,\n> = <\n Method extends HttpMethod,\n Path extends PathsWithMethod<Paths, Method>,\n Init extends MaybeOptionalInit<Paths[Path], Method>,\n>(\n method: Method,\n url: Path,\n ...init: InitParam<Init>\n) => Promise<FetchResponse<Paths[Path][Method], Init, Media>>;\n\ntype ClientForPath<\n PathInfo extends Record<string | number, any>,\n Media extends MediaType,\n> = {\n [Method in keyof PathInfo as Uppercase<string & Method>]: <\n Init extends MaybeOptionalInit<PathInfo, Method>,\n >(\n ...init: InitParam<Init>\n ) => Promise<FetchResponse<PathInfo[Method], Init, Media>>;\n};\n\ninterface Client<Paths extends {}, Media extends MediaType = MediaType> {\n request: ClientRequestMethod<Paths, Media>;\n /** Call a GET endpoint */\n GET: ClientMethod<Paths, 'get', Media>;\n /** Call a PUT endpoint */\n PUT: ClientMethod<Paths, 'put', Media>;\n /** Call a POST endpoint */\n POST: ClientMethod<Paths, 'post', Media>;\n /** Call a DELETE endpoint */\n DELETE: ClientMethod<Paths, 'delete', Media>;\n /** Call a OPTIONS endpoint */\n OPTIONS: ClientMethod<Paths, 'options', Media>;\n /** Call a HEAD endpoint */\n HEAD: ClientMethod<Paths, 'head', Media>;\n /** Call a PATCH endpoint */\n PATCH: ClientMethod<Paths, 'patch', Media>;\n /** Call a TRACE endpoint */\n TRACE: ClientMethod<Paths, 'trace', Media>;\n /** Register middleware */\n use(...middleware: Middleware[]): void;\n /** Unregister middleware */\n eject(...middleware: Middleware[]): void;\n}\n\ntype ClientPathsWithMethod<\n CreatedClient extends Client<any, any>,\n Method extends HttpMethod,\n> = CreatedClient extends Client<infer Paths, infer _Media>\n ? PathsWithMethod<Paths, Method>\n : never;\n\ntype MethodResponse<\n CreatedClient extends Client<any, any>,\n Method extends HttpMethod,\n Path extends ClientPathsWithMethod<CreatedClient, Method>,\n // biome-ignore lint/complexity/noBannedTypes: Bla\n Options = {},\n> = CreatedClient extends Client<\n infer Paths extends { [key: string]: any },\n infer Media extends MediaType\n>\n ? NonNullable<FetchResponse<Paths[Path][Method], Options, Media>['data']>\n : never;\n\ndeclare function createClient<\n Paths extends {},\n Media extends MediaType = MediaType,\n>(clientOptions?: ClientOptions): Client<Paths, Media>;\n\ntype PathBasedClient<\n Paths extends Record<string | number, any>,\n Media extends MediaType = MediaType,\n> = {\n [Path in keyof Paths]: ClientForPath<Paths[Path], Media>;\n};\n\ndeclare function wrapAsPathBasedClient<\n Paths extends {},\n Media extends MediaType = MediaType,\n>(client: Client<Paths, Media>): PathBasedClient<Paths, Media>;\n\ndeclare function createPathBasedClient<\n Paths extends {},\n Media extends MediaType = MediaType,\n>(clientOptions?: ClientOptions): PathBasedClient<Paths, Media>;\n\n/** Serialize primitive params to string */\ndeclare function serializePrimitiveParam(\n name: string,\n value: string,\n options?: { allowReserved?: boolean }\n): string;\n\n/** Serialize object param to string */\ndeclare function serializeObjectParam(\n name: string,\n value: Record<string, unknown>,\n options: {\n style: 'simple' | 'label' | 'matrix' | 'form' | 'deepObject';\n explode: boolean;\n allowReserved?: boolean;\n }\n): string;\n\n/** Serialize array param to string */\ndeclare function serializeArrayParam(\n name: string,\n value: unknown[],\n options: {\n style:\n | 'simple'\n | 'label'\n | 'matrix'\n | 'form'\n | 'spaceDelimited'\n | 'pipeDelimited';\n explode: boolean;\n allowReserved?: boolean;\n }\n): string;\n\n/** Serialize query params to string */\ndeclare function createQuerySerializer<T = unknown>(\n options?: QuerySerializerOptions\n): (queryParams: T) => string;\n\n/**\n * Handle different OpenAPI 3.x serialization styles\n * @type {import(\"openapi-fetch\").defaultPathSerializer}\n * @see https://swagger.io/docs/specification/serialization/#path\n */\ndeclare function defaultPathSerializer(\n pathname: string,\n pathParams: Record<string, unknown>\n): string;\n\n/** Serialize body object to string */\ndeclare function defaultBodySerializer<T>(body: T): string;\n\n/** Construct URL string from baseUrl and handle path and query params */\ndeclare function createFinalURL<O>(\n pathname: string,\n options: {\n baseUrl: string;\n params: {\n query?: Record<string, unknown>;\n path?: Record<string, unknown>;\n };\n querySerializer: QuerySerializer<O>;\n }\n): string;\n\n/** Merge headers a and b, with b taking priority */\ndeclare function mergeHeaders(\n ...allHeaders: (HeadersOptions | undefined)[]\n): Headers;\n\n/** Remove trailing slash from url */\ndeclare function removeTrailingSlash(url: string): string;\n\nexport {\n createFinalURL,\n createPathBasedClient,\n createQuerySerializer,\n defaultBodySerializer,\n defaultPathSerializer,\n mergeHeaders,\n removeTrailingSlash,\n serializeArrayParam,\n serializeObjectParam,\n serializePrimitiveParam,\n wrapAsPathBasedClient,\n};\nexport type {\n BodySerializer,\n Client,\n ClientForPath,\n ClientMethod,\n ClientOptions,\n ClientPathsWithMethod,\n ClientRequestMethod,\n DefaultParamsOption,\n FetchOptions,\n FetchResponse,\n HeadersOptions,\n MaybeOptionalInit,\n MergedOptions,\n MethodResponse,\n Middleware,\n MiddlewareCallbackParams,\n ParamsOption,\n ParseAs,\n ParseAsResponse,\n PathBasedClient,\n QuerySerializer,\n QuerySerializerOptions,\n RequestBodyOption,\n RequestOptions,\n};\n"]}
|