@vrplatform/api 1.3.1-stage.2286 → 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/module/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/module/index.js
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
export
|
|
3
|
-
export * from './
|
|
4
|
-
export { CacheApiError, throwIfError as throwIfCacheError, useCacheApiClient, } from './services/cache/client';
|
|
5
|
-
export { ControlPlaneApiError, throwIfError as throwIfControlPlaneError, useControlPlaneApiClient, } from './services/control-plane/client';
|
|
6
|
-
export { IngestApiError, throwIfError as throwIfIngestError, useIngestApiClient, } from './services/ingest/client';
|
|
1
|
+
export * from './client';
|
|
2
|
+
export * from './error';
|
|
3
|
+
export * from './types';
|
|
7
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -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,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AAExB,cAAc,SAAS,CAAC","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"]}
|
package/package.json
CHANGED
|
@@ -3,43 +3,10 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "1.3.1-stage.
|
|
6
|
+
"version": "1.3.1-stage.2295",
|
|
7
7
|
"description": "",
|
|
8
8
|
"main": "build/main/index.js",
|
|
9
9
|
"module": "build/module/index.js",
|
|
10
|
-
"typings": "build/main/index.d.ts",
|
|
11
|
-
"exports": {
|
|
12
|
-
".": {
|
|
13
|
-
"types": "./build/main/index.d.ts",
|
|
14
|
-
"require": "./build/main/index.js",
|
|
15
|
-
"import": "./build/module/index.js"
|
|
16
|
-
},
|
|
17
|
-
"./analytics": {
|
|
18
|
-
"types": "./build/main/analytics/index.d.ts",
|
|
19
|
-
"require": "./build/main/analytics/index.js",
|
|
20
|
-
"import": "./build/module/analytics/index.js"
|
|
21
|
-
},
|
|
22
|
-
"./api": {
|
|
23
|
-
"types": "./build/main/services/api/index.d.ts",
|
|
24
|
-
"require": "./build/main/services/api/index.js",
|
|
25
|
-
"import": "./build/module/services/api/index.js"
|
|
26
|
-
},
|
|
27
|
-
"./cache": {
|
|
28
|
-
"types": "./build/main/services/cache/index.d.ts",
|
|
29
|
-
"require": "./build/main/services/cache/index.js",
|
|
30
|
-
"import": "./build/module/services/cache/index.js"
|
|
31
|
-
},
|
|
32
|
-
"./control-plane": {
|
|
33
|
-
"types": "./build/main/services/control-plane/index.d.ts",
|
|
34
|
-
"require": "./build/main/services/control-plane/index.js",
|
|
35
|
-
"import": "./build/module/services/control-plane/index.js"
|
|
36
|
-
},
|
|
37
|
-
"./ingest": {
|
|
38
|
-
"types": "./build/main/services/ingest/index.d.ts",
|
|
39
|
-
"require": "./build/main/services/ingest/index.js",
|
|
40
|
-
"import": "./build/module/services/ingest/index.js"
|
|
41
|
-
}
|
|
42
|
-
},
|
|
43
10
|
"scripts": {
|
|
44
11
|
"pub": "bun pm version patch --no-git-tag-version && bun run npmpub",
|
|
45
12
|
"npmpub": "bun run build && bunx vrp-publish && bunx vrp-deploy --prefix npmpub",
|
|
@@ -51,15 +18,15 @@
|
|
|
51
18
|
"dev": "NODE_ENV=generator bun --watch ./generate.ts",
|
|
52
19
|
"generate-client": "bun generate:schema && bun generate:client",
|
|
53
20
|
"generate:schema": "NODE_ENV=generator bun ./openapi.ts",
|
|
54
|
-
"generate:client": "bun ./
|
|
21
|
+
"generate:client": "bunx --bun openapi-typescript ./openapi.json -o ./src/generated/v1.ts",
|
|
55
22
|
"tsgo": "tsgo --noEmit"
|
|
56
23
|
},
|
|
57
24
|
"author": "",
|
|
58
25
|
"license": "ISC",
|
|
59
26
|
"dependencies": {
|
|
60
|
-
"openapi-fetch": "0.
|
|
61
|
-
"openapi-typescript
|
|
62
|
-
"openapi-typescript": "^
|
|
27
|
+
"openapi-fetch": "0.15.0",
|
|
28
|
+
"openapi-typescript": "^7.10.1",
|
|
29
|
+
"openapi-typescript-helpers": "^0.0.15"
|
|
63
30
|
},
|
|
64
31
|
"peerDependencies": {
|
|
65
32
|
"@vrplatform/utils": "*",
|
|
@@ -74,5 +41,6 @@
|
|
|
74
41
|
"src",
|
|
75
42
|
"!**/*.spec.*",
|
|
76
43
|
"LICENSE"
|
|
77
|
-
]
|
|
44
|
+
],
|
|
45
|
+
"typings": "build/main/index.d.ts"
|
|
78
46
|
}
|
package/src/client.ts
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import * as Sentry from '@sentry/core';
|
|
2
|
+
import {
|
|
3
|
+
type RetryableFetchParams,
|
|
4
|
+
useRetryableFetch,
|
|
5
|
+
} from '@vrplatform/utils';
|
|
6
|
+
import createClient from 'openapi-fetch';
|
|
7
|
+
import { useCache } from './cache';
|
|
8
|
+
import type { paths } from './generated/v1';
|
|
9
|
+
import { generateApiKeySec } from './sec';
|
|
10
|
+
import type { ApiClient, ApiClientAuth } from './types';
|
|
11
|
+
|
|
12
|
+
export function useApiClient({
|
|
13
|
+
baseUrl: base,
|
|
14
|
+
local,
|
|
15
|
+
auth,
|
|
16
|
+
sessionId: sid,
|
|
17
|
+
// headers: h,
|
|
18
|
+
testing,
|
|
19
|
+
headers: h,
|
|
20
|
+
...retryableFetchParams
|
|
21
|
+
}: {
|
|
22
|
+
attempts?: number;
|
|
23
|
+
auth?: ApiClientAuth | (() => ApiClientAuth);
|
|
24
|
+
baseUrl?: string;
|
|
25
|
+
sessionId?: string;
|
|
26
|
+
local?: boolean | number;
|
|
27
|
+
headers?: Record<string, string> | (() => Record<string, string>);
|
|
28
|
+
testing?: {
|
|
29
|
+
overwriteUri?: string;
|
|
30
|
+
getOverwriteTimestamp?: () => number | undefined;
|
|
31
|
+
};
|
|
32
|
+
} & RetryableFetchParams) {
|
|
33
|
+
const baseUrl =
|
|
34
|
+
(local
|
|
35
|
+
? `http://localhost:${typeof local === 'number' ? local : 8877}`
|
|
36
|
+
: base) || 'https://api.vrplatform.app';
|
|
37
|
+
|
|
38
|
+
const sessionId = sid || crypto.randomUUID();
|
|
39
|
+
// cache the sec key for 1 minute (its valid for 5 minutes on the API)
|
|
40
|
+
const cache = useCache(
|
|
41
|
+
async (v: string) =>
|
|
42
|
+
generateApiKeySec(v, testing?.getOverwriteTimestamp?.()),
|
|
43
|
+
60_000
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
const retryableFetch = useRetryableFetch({
|
|
47
|
+
...retryableFetchParams,
|
|
48
|
+
onRetry(arg) {
|
|
49
|
+
cache.invalidate();
|
|
50
|
+
if (retryableFetchParams.onRetry) retryableFetchParams.onRetry(arg);
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
const trace = Sentry.getTraceData();
|
|
55
|
+
const client = createClient<paths>({
|
|
56
|
+
baseUrl,
|
|
57
|
+
querySerializer: {
|
|
58
|
+
array: {
|
|
59
|
+
explode: false,
|
|
60
|
+
style: 'form',
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
fetch(req) {
|
|
64
|
+
return retryableFetch(async () => {
|
|
65
|
+
let clone: any = req.clone() as any;
|
|
66
|
+
if (testing?.overwriteUri)
|
|
67
|
+
clone = new Request(testing.overwriteUri, clone);
|
|
68
|
+
|
|
69
|
+
const a = (typeof auth === 'function' ? auth() : auth) || {};
|
|
70
|
+
if (sessionId) clone.headers.set('X-Session-Id', sessionId);
|
|
71
|
+
if (a.sec)
|
|
72
|
+
clone.headers.set('X-Api-Key', `Sec ${await cache.current(a.sec)}`);
|
|
73
|
+
if (a.apiKey) clone.headers.set('X-Api-Key', a.apiKey);
|
|
74
|
+
if (a.tenantId) clone.headers.set('X-Team-Id', a.tenantId);
|
|
75
|
+
if (a.accessToken)
|
|
76
|
+
clone.headers.set(
|
|
77
|
+
'Authorization',
|
|
78
|
+
a.accessToken.startsWith('Bearer ')
|
|
79
|
+
? a.accessToken
|
|
80
|
+
: `Bearer ${a.accessToken}`
|
|
81
|
+
);
|
|
82
|
+
const additionalHeaders = h ? (typeof h === 'function' ? h() : h) : {};
|
|
83
|
+
for (const key in additionalHeaders) {
|
|
84
|
+
clone.headers.set(key, additionalHeaders[key]);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if (trace['sentry-trace'])
|
|
88
|
+
clone.headers.set('sentry-trace', trace['sentry-trace']);
|
|
89
|
+
if (trace.baggage) clone.headers.set('baggage', trace.baggage);
|
|
90
|
+
|
|
91
|
+
return clone;
|
|
92
|
+
});
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
const sessionClient: ApiClient = client as any;
|
|
97
|
+
sessionClient.sessionId = sessionId;
|
|
98
|
+
return sessionClient;
|
|
99
|
+
}
|
package/src/error.ts
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { hasValue } from '@vrplatform/utils';
|
|
2
|
+
import type { FetchResponse } from './generated/openapi-fetch';
|
|
3
|
+
|
|
4
|
+
type E = {
|
|
5
|
+
code: string;
|
|
6
|
+
message: string;
|
|
7
|
+
issues?: {
|
|
8
|
+
message: string;
|
|
9
|
+
}[];
|
|
10
|
+
context?: any;
|
|
11
|
+
stack?: any;
|
|
12
|
+
};
|
|
13
|
+
export class ApiClientError extends Error {
|
|
14
|
+
code: string;
|
|
15
|
+
issues: {
|
|
16
|
+
message: string;
|
|
17
|
+
}[];
|
|
18
|
+
context: any;
|
|
19
|
+
constructor(public error: E) {
|
|
20
|
+
const message =
|
|
21
|
+
error.message ||
|
|
22
|
+
[
|
|
23
|
+
error.code,
|
|
24
|
+
error.issues
|
|
25
|
+
?.map((x) =>
|
|
26
|
+
[x.message, (x as any).path?.join('->')]
|
|
27
|
+
.filter(hasValue)
|
|
28
|
+
.join(' on ')
|
|
29
|
+
)
|
|
30
|
+
.join(', '),
|
|
31
|
+
]
|
|
32
|
+
.filter(hasValue)
|
|
33
|
+
.join(': ');
|
|
34
|
+
super(message);
|
|
35
|
+
|
|
36
|
+
this.code = error.code;
|
|
37
|
+
this.issues = error.issues || [];
|
|
38
|
+
this.context = error.context || {};
|
|
39
|
+
if (error.stack) this.stack = error.stack;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export function throwIfError<T extends FetchResponse<any, any, any>>(
|
|
43
|
+
response: T
|
|
44
|
+
): NonNullable<T['data']>;
|
|
45
|
+
export function throwIfError<T extends FetchResponse<any, any, any>>(
|
|
46
|
+
response: Promise<T>
|
|
47
|
+
): Promise<NonNullable<T['data']>>;
|
|
48
|
+
export function throwIfError<T extends FetchResponse<any, any, any>>(
|
|
49
|
+
response: Promise<T> | T
|
|
50
|
+
): Promise<NonNullable<T['data']>> | NonNullable<T['data']> {
|
|
51
|
+
if (response instanceof Promise) {
|
|
52
|
+
return response.then((response) => {
|
|
53
|
+
if (response.response.status === 503) {
|
|
54
|
+
throw new ApiClientError({
|
|
55
|
+
code: 'SERVICE_UNAVAILABLE',
|
|
56
|
+
message: 'Worker resources exceeded.',
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const error: E = response.error;
|
|
61
|
+
|
|
62
|
+
if (error) throw new ApiClientError(error);
|
|
63
|
+
return response.data;
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const error: E = response.error;
|
|
68
|
+
|
|
69
|
+
if (error) throw new ApiClientError(error);
|
|
70
|
+
return response.data;
|
|
71
|
+
}
|