@equinor/fusion-framework-module-services 4.1.5 → 5.0.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/CHANGELOG.md +17 -0
- package/dist/esm/bookmarks/api-version.js +6 -0
- package/dist/esm/bookmarks/api-version.js.map +1 -0
- package/dist/esm/bookmarks/client.js +148 -47
- package/dist/esm/bookmarks/client.js.map +1 -1
- package/dist/esm/bookmarks/endpoints/bookmark-apply.get.js +49 -0
- package/dist/esm/bookmarks/endpoints/bookmark-apply.get.js.map +1 -0
- package/dist/esm/bookmarks/endpoints/bookmark.delete.js +48 -0
- package/dist/esm/bookmarks/endpoints/bookmark.delete.js.map +1 -0
- package/dist/esm/bookmarks/endpoints/bookmark.get.js +53 -0
- package/dist/esm/bookmarks/endpoints/bookmark.get.js.map +1 -0
- package/dist/esm/bookmarks/endpoints/bookmark.patch.js +68 -0
- package/dist/esm/bookmarks/endpoints/bookmark.patch.js.map +1 -0
- package/dist/esm/bookmarks/endpoints/bookmark.post.js +57 -0
- package/dist/esm/bookmarks/endpoints/bookmark.post.js.map +1 -0
- package/dist/esm/bookmarks/endpoints/user-bookmark-favourite.delete.js +48 -0
- package/dist/esm/bookmarks/endpoints/user-bookmark-favourite.delete.js.map +1 -0
- package/dist/esm/bookmarks/endpoints/user-bookmark-favourite.head.js +49 -0
- package/dist/esm/bookmarks/endpoints/user-bookmark-favourite.head.js.map +1 -0
- package/dist/esm/bookmarks/endpoints/user-bookmark-favourite.post.js +49 -0
- package/dist/esm/bookmarks/endpoints/user-bookmark-favourite.post.js.map +1 -0
- package/dist/esm/bookmarks/endpoints/user-bookmarks.get.js +75 -0
- package/dist/esm/bookmarks/endpoints/user-bookmarks.get.js.map +1 -0
- package/dist/esm/bookmarks/index.js +1 -2
- package/dist/esm/bookmarks/index.js.map +1 -1
- package/dist/esm/bookmarks/schemas.js +76 -0
- package/dist/esm/bookmarks/schemas.js.map +1 -0
- package/dist/esm/bookmarks/selectors.js +58 -0
- package/dist/esm/bookmarks/selectors.js.map +1 -0
- package/dist/esm/utils.js +35 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/esm/version.js +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/bookmarks/api-version.d.ts +4 -0
- package/dist/types/bookmarks/client.d.ts +132 -34
- package/dist/types/bookmarks/endpoints/bookmark-apply.get.d.ts +40 -0
- package/dist/types/bookmarks/endpoints/bookmark.delete.d.ts +31 -0
- package/dist/types/bookmarks/endpoints/bookmark.get.d.ts +351 -0
- package/dist/types/bookmarks/endpoints/bookmark.patch.d.ts +254 -0
- package/dist/types/bookmarks/endpoints/bookmark.post.d.ts +231 -0
- package/dist/types/bookmarks/endpoints/user-bookmark-favourite.delete.d.ts +31 -0
- package/dist/types/bookmarks/endpoints/user-bookmark-favourite.head.d.ts +31 -0
- package/dist/types/bookmarks/endpoints/user-bookmark-favourite.post.d.ts +31 -0
- package/dist/types/bookmarks/endpoints/user-bookmarks.get.d.ts +235 -0
- package/dist/types/bookmarks/index.d.ts +3 -2
- package/dist/types/bookmarks/schemas.d.ts +383 -0
- package/dist/types/bookmarks/selectors.d.ts +17 -0
- package/dist/types/bookmarks/types.d.ts +5 -1
- package/dist/types/provider.d.ts +2 -2
- package/dist/types/types.d.ts +74 -11
- package/dist/types/utils.d.ts +18 -0
- package/dist/types/version.d.ts +1 -1
- package/package.json +8 -7
- package/src/bookmarks/README.md +90 -0
- package/src/bookmarks/api-version.ts +4 -0
- package/src/bookmarks/client.ts +257 -77
- package/src/bookmarks/endpoints/bookmark-apply.get.ts +114 -0
- package/src/bookmarks/endpoints/bookmark.delete.ts +113 -0
- package/src/bookmarks/endpoints/bookmark.get.ts +118 -0
- package/src/bookmarks/endpoints/bookmark.patch.ts +135 -0
- package/src/bookmarks/endpoints/bookmark.post.ts +124 -0
- package/src/bookmarks/endpoints/user-bookmark-favourite.delete.ts +113 -0
- package/src/bookmarks/endpoints/user-bookmark-favourite.head.ts +114 -0
- package/src/bookmarks/endpoints/user-bookmark-favourite.post.ts +114 -0
- package/src/bookmarks/endpoints/user-bookmarks.get.ts +142 -0
- package/src/bookmarks/index.ts +3 -3
- package/src/bookmarks/schemas.ts +81 -0
- package/src/bookmarks/selectors.ts +49 -0
- package/src/bookmarks/types.ts +16 -1
- package/src/provider.ts +4 -4
- package/src/types.ts +92 -11
- package/src/utils.ts +51 -0
- package/src/version.ts +1 -1
- package/dist/esm/bookmarks/api-models.js +0 -2
- package/dist/esm/bookmarks/api-models.js.map +0 -1
- package/dist/esm/bookmarks/delete/client.js +0 -10
- package/dist/esm/bookmarks/delete/client.js.map +0 -1
- package/dist/esm/bookmarks/delete/generate-endpoint.js +0 -20
- package/dist/esm/bookmarks/delete/generate-endpoint.js.map +0 -1
- package/dist/esm/bookmarks/delete/generate-parameters.js +0 -8
- package/dist/esm/bookmarks/delete/generate-parameters.js.map +0 -1
- package/dist/esm/bookmarks/delete/index.js +0 -5
- package/dist/esm/bookmarks/delete/index.js.map +0 -1
- package/dist/esm/bookmarks/delete/types-v1.js +0 -2
- package/dist/esm/bookmarks/delete/types-v1.js.map +0 -1
- package/dist/esm/bookmarks/delete/types.js +0 -2
- package/dist/esm/bookmarks/delete/types.js.map +0 -1
- package/dist/esm/bookmarks/favorites/delete/client.js +0 -10
- package/dist/esm/bookmarks/favorites/delete/client.js.map +0 -1
- package/dist/esm/bookmarks/favorites/delete/generate-endpoint.js +0 -15
- package/dist/esm/bookmarks/favorites/delete/generate-endpoint.js.map +0 -1
- package/dist/esm/bookmarks/favorites/delete/generate-parameters.js +0 -8
- package/dist/esm/bookmarks/favorites/delete/generate-parameters.js.map +0 -1
- package/dist/esm/bookmarks/favorites/delete/index.js +0 -5
- package/dist/esm/bookmarks/favorites/delete/index.js.map +0 -1
- package/dist/esm/bookmarks/favorites/delete/types-v1.js +0 -2
- package/dist/esm/bookmarks/favorites/delete/types-v1.js.map +0 -1
- package/dist/esm/bookmarks/favorites/delete/types.js +0 -2
- package/dist/esm/bookmarks/favorites/delete/types.js.map +0 -1
- package/dist/esm/bookmarks/favorites/head/client.js +0 -10
- package/dist/esm/bookmarks/favorites/head/client.js.map +0 -1
- package/dist/esm/bookmarks/favorites/head/generate-endpoint.js +0 -15
- package/dist/esm/bookmarks/favorites/head/generate-endpoint.js.map +0 -1
- package/dist/esm/bookmarks/favorites/head/generate-parameters.js +0 -10
- package/dist/esm/bookmarks/favorites/head/generate-parameters.js.map +0 -1
- package/dist/esm/bookmarks/favorites/head/index.js +0 -5
- package/dist/esm/bookmarks/favorites/head/index.js.map +0 -1
- package/dist/esm/bookmarks/favorites/head/types.js +0 -2
- package/dist/esm/bookmarks/favorites/head/types.js.map +0 -1
- package/dist/esm/bookmarks/favorites/post/client.js +0 -10
- package/dist/esm/bookmarks/favorites/post/client.js.map +0 -1
- package/dist/esm/bookmarks/favorites/post/generate-endpoint.js +0 -14
- package/dist/esm/bookmarks/favorites/post/generate-endpoint.js.map +0 -1
- package/dist/esm/bookmarks/favorites/post/generate-parameters.js +0 -10
- package/dist/esm/bookmarks/favorites/post/generate-parameters.js.map +0 -1
- package/dist/esm/bookmarks/favorites/post/index.js +0 -5
- package/dist/esm/bookmarks/favorites/post/index.js.map +0 -1
- package/dist/esm/bookmarks/favorites/post/types.js +0 -2
- package/dist/esm/bookmarks/favorites/post/types.js.map +0 -1
- package/dist/esm/bookmarks/get/client.js +0 -10
- package/dist/esm/bookmarks/get/client.js.map +0 -1
- package/dist/esm/bookmarks/get/generate-endpoint.js +0 -20
- package/dist/esm/bookmarks/get/generate-endpoint.js.map +0 -1
- package/dist/esm/bookmarks/get/generate-parameters.js +0 -7
- package/dist/esm/bookmarks/get/generate-parameters.js.map +0 -1
- package/dist/esm/bookmarks/get/index.js +0 -5
- package/dist/esm/bookmarks/get/index.js.map +0 -1
- package/dist/esm/bookmarks/get/types.js +0 -2
- package/dist/esm/bookmarks/get/types.js.map +0 -1
- package/dist/esm/bookmarks/getAll/client.js +0 -10
- package/dist/esm/bookmarks/getAll/client.js.map +0 -1
- package/dist/esm/bookmarks/getAll/generate-endpoint.js +0 -14
- package/dist/esm/bookmarks/getAll/generate-endpoint.js.map +0 -1
- package/dist/esm/bookmarks/getAll/generate-parameters.js +0 -7
- package/dist/esm/bookmarks/getAll/generate-parameters.js.map +0 -1
- package/dist/esm/bookmarks/getAll/index.js +0 -5
- package/dist/esm/bookmarks/getAll/index.js.map +0 -1
- package/dist/esm/bookmarks/getAll/types.js +0 -2
- package/dist/esm/bookmarks/getAll/types.js.map +0 -1
- package/dist/esm/bookmarks/patch/client.js +0 -10
- package/dist/esm/bookmarks/patch/client.js.map +0 -1
- package/dist/esm/bookmarks/patch/generate-endpoint.js +0 -14
- package/dist/esm/bookmarks/patch/generate-endpoint.js.map +0 -1
- package/dist/esm/bookmarks/patch/generate-parameters.js +0 -10
- package/dist/esm/bookmarks/patch/generate-parameters.js.map +0 -1
- package/dist/esm/bookmarks/patch/index.js +0 -5
- package/dist/esm/bookmarks/patch/index.js.map +0 -1
- package/dist/esm/bookmarks/patch/types.js +0 -2
- package/dist/esm/bookmarks/patch/types.js.map +0 -1
- package/dist/esm/bookmarks/post/client.js +0 -10
- package/dist/esm/bookmarks/post/client.js.map +0 -1
- package/dist/esm/bookmarks/post/generate-endpoint.js +0 -14
- package/dist/esm/bookmarks/post/generate-endpoint.js.map +0 -1
- package/dist/esm/bookmarks/post/generate-parameters.js +0 -10
- package/dist/esm/bookmarks/post/generate-parameters.js.map +0 -1
- package/dist/esm/bookmarks/post/index.js +0 -5
- package/dist/esm/bookmarks/post/index.js.map +0 -1
- package/dist/esm/bookmarks/post/types.js +0 -2
- package/dist/esm/bookmarks/post/types.js.map +0 -1
- package/dist/types/bookmarks/api-models.d.ts +0 -42
- package/dist/types/bookmarks/delete/client.d.ts +0 -11
- package/dist/types/bookmarks/delete/generate-endpoint.d.ts +0 -5
- package/dist/types/bookmarks/delete/generate-parameters.d.ts +0 -5
- package/dist/types/bookmarks/delete/index.d.ts +0 -4
- package/dist/types/bookmarks/delete/types-v1.d.ts +0 -4
- package/dist/types/bookmarks/delete/types.d.ts +0 -18
- package/dist/types/bookmarks/favorites/delete/client.d.ts +0 -11
- package/dist/types/bookmarks/favorites/delete/generate-endpoint.d.ts +0 -5
- package/dist/types/bookmarks/favorites/delete/generate-parameters.d.ts +0 -5
- package/dist/types/bookmarks/favorites/delete/index.d.ts +0 -4
- package/dist/types/bookmarks/favorites/delete/types-v1.d.ts +0 -4
- package/dist/types/bookmarks/favorites/delete/types.d.ts +0 -16
- package/dist/types/bookmarks/favorites/head/client.d.ts +0 -11
- package/dist/types/bookmarks/favorites/head/generate-endpoint.d.ts +0 -5
- package/dist/types/bookmarks/favorites/head/generate-parameters.d.ts +0 -5
- package/dist/types/bookmarks/favorites/head/index.d.ts +0 -4
- package/dist/types/bookmarks/favorites/head/types.d.ts +0 -17
- package/dist/types/bookmarks/favorites/post/client.d.ts +0 -11
- package/dist/types/bookmarks/favorites/post/generate-endpoint.d.ts +0 -5
- package/dist/types/bookmarks/favorites/post/generate-parameters.d.ts +0 -5
- package/dist/types/bookmarks/favorites/post/index.d.ts +0 -4
- package/dist/types/bookmarks/favorites/post/types.d.ts +0 -17
- package/dist/types/bookmarks/get/client.d.ts +0 -11
- package/dist/types/bookmarks/get/generate-endpoint.d.ts +0 -5
- package/dist/types/bookmarks/get/generate-parameters.d.ts +0 -5
- package/dist/types/bookmarks/get/index.d.ts +0 -4
- package/dist/types/bookmarks/get/types.d.ts +0 -21
- package/dist/types/bookmarks/getAll/client.d.ts +0 -11
- package/dist/types/bookmarks/getAll/generate-endpoint.d.ts +0 -5
- package/dist/types/bookmarks/getAll/generate-parameters.d.ts +0 -5
- package/dist/types/bookmarks/getAll/index.d.ts +0 -4
- package/dist/types/bookmarks/getAll/types.d.ts +0 -11
- package/dist/types/bookmarks/patch/client.d.ts +0 -11
- package/dist/types/bookmarks/patch/generate-endpoint.d.ts +0 -5
- package/dist/types/bookmarks/patch/generate-parameters.d.ts +0 -5
- package/dist/types/bookmarks/patch/index.d.ts +0 -4
- package/dist/types/bookmarks/patch/types.d.ts +0 -21
- package/dist/types/bookmarks/post/client.d.ts +0 -11
- package/dist/types/bookmarks/post/generate-endpoint.d.ts +0 -5
- package/dist/types/bookmarks/post/generate-parameters.d.ts +0 -5
- package/dist/types/bookmarks/post/index.d.ts +0 -4
- package/dist/types/bookmarks/post/types.d.ts +0 -34
- package/src/bookmarks/api-models.ts +0 -46
- package/src/bookmarks/delete/client.ts +0 -35
- package/src/bookmarks/delete/generate-endpoint.ts +0 -24
- package/src/bookmarks/delete/generate-parameters.ts +0 -25
- package/src/bookmarks/delete/index.ts +0 -6
- package/src/bookmarks/delete/types-v1.ts +0 -2
- package/src/bookmarks/delete/types.ts +0 -35
- package/src/bookmarks/favorites/delete/client.ts +0 -35
- package/src/bookmarks/favorites/delete/generate-endpoint.ts +0 -19
- package/src/bookmarks/favorites/delete/generate-parameters.ts +0 -25
- package/src/bookmarks/favorites/delete/index.ts +0 -6
- package/src/bookmarks/favorites/delete/types-v1.ts +0 -2
- package/src/bookmarks/favorites/delete/types.ts +0 -33
- package/src/bookmarks/favorites/head/client.ts +0 -35
- package/src/bookmarks/favorites/head/generate-endpoint.ts +0 -19
- package/src/bookmarks/favorites/head/generate-parameters.ts +0 -28
- package/src/bookmarks/favorites/head/index.ts +0 -6
- package/src/bookmarks/favorites/head/types.ts +0 -35
- package/src/bookmarks/favorites/post/client.ts +0 -35
- package/src/bookmarks/favorites/post/generate-endpoint.ts +0 -18
- package/src/bookmarks/favorites/post/generate-parameters.ts +0 -28
- package/src/bookmarks/favorites/post/index.ts +0 -6
- package/src/bookmarks/favorites/post/types.ts +0 -35
- package/src/bookmarks/get/client.ts +0 -30
- package/src/bookmarks/get/generate-endpoint.ts +0 -24
- package/src/bookmarks/get/generate-parameters.ts +0 -18
- package/src/bookmarks/get/index.ts +0 -6
- package/src/bookmarks/get/types.ts +0 -39
- package/src/bookmarks/getAll/client.ts +0 -30
- package/src/bookmarks/getAll/generate-endpoint.ts +0 -15
- package/src/bookmarks/getAll/generate-parameters.ts +0 -18
- package/src/bookmarks/getAll/index.ts +0 -6
- package/src/bookmarks/getAll/types.ts +0 -21
- package/src/bookmarks/patch/client.ts +0 -30
- package/src/bookmarks/patch/generate-endpoint.ts +0 -18
- package/src/bookmarks/patch/generate-parameters.ts +0 -28
- package/src/bookmarks/patch/index.ts +0 -6
- package/src/bookmarks/patch/types.ts +0 -45
- package/src/bookmarks/post/client.ts +0 -30
- package/src/bookmarks/post/generate-endpoint.ts +0 -18
- package/src/bookmarks/post/generate-parameters.ts +0 -28
- package/src/bookmarks/post/index.ts +0 -6
- package/src/bookmarks/post/types.ts +0 -58
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
import type {
|
|
4
|
+
ClientRequestInit,
|
|
5
|
+
FetchRequestInit,
|
|
6
|
+
IHttpClient,
|
|
7
|
+
JsonRequest,
|
|
8
|
+
} from '@equinor/fusion-framework-module-http/client';
|
|
9
|
+
|
|
10
|
+
import type { ClientMethod, ExtractApiVersion, FilterAllowedApiVersions } from '../types';
|
|
11
|
+
|
|
12
|
+
import { extractVersion, schemaSelector } from '../../utils';
|
|
13
|
+
import { ApiVersion } from '../api-version';
|
|
14
|
+
import { ApiBookmarkPayload } from '../schemas';
|
|
15
|
+
|
|
16
|
+
/** API version which this operation uses. */
|
|
17
|
+
type AvailableVersions = ApiVersion.v1;
|
|
18
|
+
|
|
19
|
+
/** Defines the allowed versions for this operation. (key of enum as string or enum value) */
|
|
20
|
+
type AllowedVersions = FilterAllowedApiVersions<AvailableVersions>;
|
|
21
|
+
|
|
22
|
+
/** Schema for the input arguments to this operation. */
|
|
23
|
+
const ArgSchema = {
|
|
24
|
+
[ApiVersion.v1]: z.object({ bookmarkId: z.string() }),
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/** Schema for the response from the API. */
|
|
28
|
+
const ApiResponseSchema = {
|
|
29
|
+
[ApiVersion.v1]: z.object({
|
|
30
|
+
id: z.string(),
|
|
31
|
+
payload: ApiBookmarkPayload[ApiVersion.v1],
|
|
32
|
+
}),
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/** Defines the expected output from the api. */
|
|
36
|
+
type ApiResponse<TVersion extends AllowedVersions> = z.infer<
|
|
37
|
+
(typeof ApiResponseSchema)[ExtractApiVersion<TVersion>]
|
|
38
|
+
>;
|
|
39
|
+
|
|
40
|
+
/** Defines the input arguments to this operation. */
|
|
41
|
+
type MethodArg<TVersion extends AllowedVersions> = z.input<
|
|
42
|
+
(typeof ArgSchema)[ExtractApiVersion<TVersion>]
|
|
43
|
+
>;
|
|
44
|
+
|
|
45
|
+
/** Defines the expected output of this operation. */
|
|
46
|
+
type MethodResult<
|
|
47
|
+
TVersion extends AllowedVersions,
|
|
48
|
+
TMethod extends keyof ClientMethod<unknown> = keyof ClientMethod<unknown>,
|
|
49
|
+
TResult = ApiResponse<TVersion>,
|
|
50
|
+
> = ClientMethod<TResult>[TMethod];
|
|
51
|
+
|
|
52
|
+
/** utility function for generating http request initialization parameters */
|
|
53
|
+
const generateRequestParameters = <TResult, TVersion extends AvailableVersions>(
|
|
54
|
+
version: TVersion,
|
|
55
|
+
_args: z.infer<(typeof ArgSchema)[TVersion]>,
|
|
56
|
+
init?: ClientRequestInit<IHttpClient, TResult>,
|
|
57
|
+
): ClientRequestInit<IHttpClient, TResult> => {
|
|
58
|
+
switch (version) {
|
|
59
|
+
case ApiVersion.v1: {
|
|
60
|
+
const baseInit: FetchRequestInit<ApiResponse<ApiVersion.v1>, JsonRequest> = {
|
|
61
|
+
method: 'GET',
|
|
62
|
+
selector: schemaSelector(ApiResponseSchema[version]),
|
|
63
|
+
};
|
|
64
|
+
return Object.assign({}, baseInit, init);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
throw Error(`Unknown API version: ${version}`);
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
/** utility function for generating the api path */
|
|
71
|
+
const generateApiPath = <TVersion extends AvailableVersions>(
|
|
72
|
+
version: TVersion,
|
|
73
|
+
args: z.infer<(typeof ArgSchema)[TVersion]>,
|
|
74
|
+
): string => {
|
|
75
|
+
switch (version) {
|
|
76
|
+
case ApiVersion.v1: {
|
|
77
|
+
const params = new URLSearchParams();
|
|
78
|
+
params.append('api-version', version);
|
|
79
|
+
return `/bookmarks/${args.bookmarkId}/apply?${String(params)}`;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
throw Error(`Unknown API version: ${version}`);
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
/** executes the api call */
|
|
86
|
+
const executeApiCall = <TVersion extends AllowedVersions, TMethod extends keyof ClientMethod>(
|
|
87
|
+
version: TVersion,
|
|
88
|
+
client: IHttpClient,
|
|
89
|
+
method: TMethod = 'json' as TMethod,
|
|
90
|
+
) => {
|
|
91
|
+
type MethodVersion = ExtractApiVersion<TVersion>;
|
|
92
|
+
const apiVersion = extractVersion(ApiVersion, version);
|
|
93
|
+
return <
|
|
94
|
+
TResponse = ApiResponse<MethodVersion>,
|
|
95
|
+
TResult = MethodResult<MethodVersion, TMethod, TResponse>,
|
|
96
|
+
>(
|
|
97
|
+
input: MethodArg<MethodVersion>,
|
|
98
|
+
init?: ClientRequestInit<IHttpClient, TResponse>,
|
|
99
|
+
): TResult => {
|
|
100
|
+
const args = ArgSchema[apiVersion].parse(input);
|
|
101
|
+
return client[method](
|
|
102
|
+
generateApiPath(apiVersion, args),
|
|
103
|
+
generateRequestParameters(apiVersion, args, init),
|
|
104
|
+
) as TResult;
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
export {
|
|
109
|
+
AllowedVersions as BookmarkApplyVersion,
|
|
110
|
+
MethodArg as BookmarkApplyArgs,
|
|
111
|
+
ApiResponse as BookmarkApplyResponse,
|
|
112
|
+
MethodResult as BookmarkApplyResult,
|
|
113
|
+
executeApiCall as getBookmarkApply,
|
|
114
|
+
};
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
import type {
|
|
4
|
+
ClientRequestInit,
|
|
5
|
+
FetchRequestInit,
|
|
6
|
+
IHttpClient,
|
|
7
|
+
JsonRequest,
|
|
8
|
+
} from '@equinor/fusion-framework-module-http/client';
|
|
9
|
+
|
|
10
|
+
import type { ClientMethod, ExtractApiVersion, FilterAllowedApiVersions } from '../types';
|
|
11
|
+
|
|
12
|
+
import { extractVersion } from '../../utils';
|
|
13
|
+
import { ApiVersion } from '../api-version';
|
|
14
|
+
import { statusSelector } from '../selectors';
|
|
15
|
+
|
|
16
|
+
/** API version which this operation uses. */
|
|
17
|
+
type AvailableVersions = ApiVersion.v1;
|
|
18
|
+
|
|
19
|
+
/** Defines the allowed versions for this operation. (key of enum as string or enum value) */
|
|
20
|
+
type AllowedVersions = FilterAllowedApiVersions<AvailableVersions>;
|
|
21
|
+
|
|
22
|
+
/** Schema for the input arguments to this operation. */
|
|
23
|
+
const ArgSchema = {
|
|
24
|
+
[ApiVersion.v1]: z.object({
|
|
25
|
+
bookmarkId: z.string(),
|
|
26
|
+
}),
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
/** Schema for the response from the API. */
|
|
30
|
+
const ApiResponseSchema = {
|
|
31
|
+
[ApiVersion.v1]: z.boolean(),
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/** Defines the expected output from the api. */
|
|
35
|
+
type ApiResponse<TVersion extends AllowedVersions> = z.infer<
|
|
36
|
+
(typeof ApiResponseSchema)[ExtractApiVersion<TVersion>]
|
|
37
|
+
>;
|
|
38
|
+
|
|
39
|
+
/** Defines the input arguments to this operation. */
|
|
40
|
+
type MethodArg<TVersion extends AllowedVersions> = z.input<
|
|
41
|
+
(typeof ArgSchema)[ExtractApiVersion<TVersion>]
|
|
42
|
+
>;
|
|
43
|
+
|
|
44
|
+
/** Defines the expected output of this operation. */
|
|
45
|
+
type MethodResult<
|
|
46
|
+
TVersion extends AllowedVersions,
|
|
47
|
+
TMethod extends keyof ClientMethod<unknown> = keyof ClientMethod<unknown>,
|
|
48
|
+
TResult = ApiResponse<TVersion>,
|
|
49
|
+
> = ClientMethod<TResult>[TMethod];
|
|
50
|
+
|
|
51
|
+
/** utility function for generating http request initialization parameters */
|
|
52
|
+
const generateRequestParameters = <TResult, TVersion extends AvailableVersions>(
|
|
53
|
+
version: TVersion,
|
|
54
|
+
args: z.infer<(typeof ArgSchema)[TVersion]>,
|
|
55
|
+
init?: ClientRequestInit<IHttpClient, TResult>,
|
|
56
|
+
): ClientRequestInit<IHttpClient, TResult> => {
|
|
57
|
+
switch (version) {
|
|
58
|
+
case ApiVersion.v1: {
|
|
59
|
+
const baseInit: FetchRequestInit<ApiResponse<ApiVersion.v1>, JsonRequest> = {
|
|
60
|
+
method: 'DELETE',
|
|
61
|
+
selector: statusSelector,
|
|
62
|
+
};
|
|
63
|
+
return Object.assign({}, baseInit, init);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
throw Error(`Unknown API version: ${version}`);
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
/** utility function for generating the api path */
|
|
70
|
+
const generateApiPath = <TVersion extends AvailableVersions>(
|
|
71
|
+
version: TVersion,
|
|
72
|
+
args: z.infer<(typeof ArgSchema)[TVersion]>,
|
|
73
|
+
): string => {
|
|
74
|
+
switch (version) {
|
|
75
|
+
case ApiVersion.v1: {
|
|
76
|
+
const params = new URLSearchParams();
|
|
77
|
+
params.append('api-version', version);
|
|
78
|
+
return `/bookmarks/${args.bookmarkId}?${String(params)}`;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
throw Error(`Unknown API version: ${version}`);
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
/** executes the api call */
|
|
85
|
+
const executeApiCall = <TVersion extends AllowedVersions, TMethod extends keyof ClientMethod>(
|
|
86
|
+
version: TVersion,
|
|
87
|
+
client: IHttpClient,
|
|
88
|
+
method: TMethod = 'json' as TMethod,
|
|
89
|
+
) => {
|
|
90
|
+
type MethodVersion = ExtractApiVersion<TVersion>;
|
|
91
|
+
const apiVersion = extractVersion(ApiVersion, version);
|
|
92
|
+
return <
|
|
93
|
+
TResponse = ApiResponse<MethodVersion>,
|
|
94
|
+
TResult = MethodResult<MethodVersion, TMethod, TResponse>,
|
|
95
|
+
>(
|
|
96
|
+
input: MethodArg<MethodVersion>,
|
|
97
|
+
init?: ClientRequestInit<IHttpClient, TResponse>,
|
|
98
|
+
): TResult => {
|
|
99
|
+
const args = ArgSchema[apiVersion].parse(input);
|
|
100
|
+
return client[method](
|
|
101
|
+
generateApiPath(apiVersion, args),
|
|
102
|
+
generateRequestParameters(apiVersion, args, init),
|
|
103
|
+
) as TResult;
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
export {
|
|
108
|
+
AllowedVersions as DeleteBookmarkVersion,
|
|
109
|
+
MethodArg as DeleteBookmarkArg,
|
|
110
|
+
ApiResponse as DeleteBookmarkResponse,
|
|
111
|
+
MethodResult as DeleteBookmarksResult,
|
|
112
|
+
executeApiCall as deleteBookmark,
|
|
113
|
+
};
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
import type {
|
|
4
|
+
ClientRequestInit,
|
|
5
|
+
FetchRequestInit,
|
|
6
|
+
IHttpClient,
|
|
7
|
+
JsonRequest,
|
|
8
|
+
} from '@equinor/fusion-framework-module-http/client';
|
|
9
|
+
|
|
10
|
+
import type { ClientMethod, ExtractApiVersion, FilterAllowedApiVersions } from '../types';
|
|
11
|
+
|
|
12
|
+
import { extractVersion, schemaSelector } from '../../utils';
|
|
13
|
+
import { ApiVersion } from '../api-version';
|
|
14
|
+
import { ApiBookmarkSchema } from '../schemas';
|
|
15
|
+
|
|
16
|
+
/** API version which this operation uses. */
|
|
17
|
+
type AvailableVersions = ApiVersion.v1 | ApiVersion.v2;
|
|
18
|
+
|
|
19
|
+
/** Defines the allowed versions for this operation. (key of enum as string or enum value) */
|
|
20
|
+
type AllowedVersions = FilterAllowedApiVersions<AvailableVersions>;
|
|
21
|
+
|
|
22
|
+
/** Schema for the input arguments to this operation. */
|
|
23
|
+
const ArgSchema = {
|
|
24
|
+
[ApiVersion.v1]: z.object({
|
|
25
|
+
bookmarkId: z.string(),
|
|
26
|
+
}),
|
|
27
|
+
[ApiVersion.v2]: z.object({
|
|
28
|
+
bookmarkId: z.string(),
|
|
29
|
+
}),
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/** Schema for the response from the API. */
|
|
33
|
+
const ApiResponseSchema = {
|
|
34
|
+
[ApiVersion.v1]: ApiBookmarkSchema[ApiVersion.v1],
|
|
35
|
+
[ApiVersion.v2]: ApiBookmarkSchema[ApiVersion.v2],
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/** Defines the expected output from the api. */
|
|
39
|
+
type ApiResponse<TVersion extends AllowedVersions> = z.infer<
|
|
40
|
+
(typeof ApiResponseSchema)[ExtractApiVersion<TVersion>]
|
|
41
|
+
>;
|
|
42
|
+
|
|
43
|
+
/** Defines the input arguments to this operation. */
|
|
44
|
+
type MethodArg<TVersion extends AllowedVersions> = z.input<
|
|
45
|
+
(typeof ArgSchema)[ExtractApiVersion<TVersion>]
|
|
46
|
+
>;
|
|
47
|
+
|
|
48
|
+
/** Defines the expected output of this operation. */
|
|
49
|
+
type MethodResult<
|
|
50
|
+
TVersion extends AllowedVersions,
|
|
51
|
+
TMethod extends keyof ClientMethod<unknown> = keyof ClientMethod<unknown>,
|
|
52
|
+
TResult = ApiResponse<TVersion>,
|
|
53
|
+
> = ClientMethod<TResult>[TMethod];
|
|
54
|
+
|
|
55
|
+
/** utility function for generating http request initialization parameters */
|
|
56
|
+
const generateRequestParameters = <TResult, TVersion extends AvailableVersions>(
|
|
57
|
+
version: TVersion,
|
|
58
|
+
args: z.infer<(typeof ArgSchema)[TVersion]>,
|
|
59
|
+
init?: ClientRequestInit<IHttpClient, TResult>,
|
|
60
|
+
): ClientRequestInit<IHttpClient, TResult> => {
|
|
61
|
+
switch (version) {
|
|
62
|
+
case ApiVersion.v1:
|
|
63
|
+
case ApiVersion.v2: {
|
|
64
|
+
const baseInit: FetchRequestInit<ApiResponse<ApiVersion.v1>, JsonRequest> = {
|
|
65
|
+
selector: schemaSelector(ApiResponseSchema[version]),
|
|
66
|
+
};
|
|
67
|
+
return Object.assign({}, baseInit, init);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
throw Error(`Unknown API version: ${version}`);
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
/** utility function for generating the api path */
|
|
74
|
+
const generateApiPath = <TVersion extends AvailableVersions>(
|
|
75
|
+
version: TVersion,
|
|
76
|
+
args: z.infer<(typeof ArgSchema)[TVersion]>,
|
|
77
|
+
): string => {
|
|
78
|
+
switch (version) {
|
|
79
|
+
case ApiVersion.v1:
|
|
80
|
+
case ApiVersion.v2: {
|
|
81
|
+
const params = new URLSearchParams();
|
|
82
|
+
params.append('api-version', version);
|
|
83
|
+
return `/bookmarks/${args.bookmarkId}?${String(params)}`;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
throw Error(`Unknown API version: ${version}`);
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
/** executes the api call */
|
|
90
|
+
const executeApiCall = <TVersion extends AllowedVersions, TMethod extends keyof ClientMethod>(
|
|
91
|
+
version: TVersion,
|
|
92
|
+
client: IHttpClient,
|
|
93
|
+
method: TMethod = 'json' as TMethod,
|
|
94
|
+
) => {
|
|
95
|
+
type MethodVersion = ExtractApiVersion<TVersion>;
|
|
96
|
+
const apiVersion = extractVersion(ApiVersion, version);
|
|
97
|
+
return <
|
|
98
|
+
TResponse = ApiResponse<MethodVersion>,
|
|
99
|
+
TResult = MethodResult<MethodVersion, TMethod, TResponse>,
|
|
100
|
+
>(
|
|
101
|
+
input: MethodArg<MethodVersion>,
|
|
102
|
+
init?: ClientRequestInit<IHttpClient, TResponse>,
|
|
103
|
+
): TResult => {
|
|
104
|
+
const args = ArgSchema[apiVersion].parse(input);
|
|
105
|
+
return client[method](
|
|
106
|
+
generateApiPath(apiVersion, args),
|
|
107
|
+
generateRequestParameters(apiVersion, args, init),
|
|
108
|
+
) as TResult;
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
export {
|
|
113
|
+
AllowedVersions as GetBookmarkVersion,
|
|
114
|
+
MethodArg as GetBookmarkArg,
|
|
115
|
+
ApiResponse as GetBookmarkResponse,
|
|
116
|
+
MethodResult as GetBookmarkResult,
|
|
117
|
+
executeApiCall as getBookmark,
|
|
118
|
+
};
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
import type {
|
|
4
|
+
ClientRequestInit,
|
|
5
|
+
FetchRequestInit,
|
|
6
|
+
IHttpClient,
|
|
7
|
+
JsonRequest,
|
|
8
|
+
} from '@equinor/fusion-framework-module-http/client';
|
|
9
|
+
|
|
10
|
+
import type { ClientMethod, ExtractApiVersion, FilterAllowedApiVersions } from '../types';
|
|
11
|
+
|
|
12
|
+
import { extractVersion, schemaSelector } from '../../utils';
|
|
13
|
+
import { ApiVersion } from '../api-version';
|
|
14
|
+
import { ApiBookmarkPayload, ApiBookmarkSchema } from '../schemas';
|
|
15
|
+
|
|
16
|
+
/** API version which this operation uses. */
|
|
17
|
+
type AvailableVersions = ApiVersion.v1;
|
|
18
|
+
|
|
19
|
+
/** Defines the allowed versions for this operation. (key of enum as string or enum value) */
|
|
20
|
+
type AllowedVersions = FilterAllowedApiVersions<AvailableVersions>;
|
|
21
|
+
|
|
22
|
+
/** Schema for the input arguments to this operation. */
|
|
23
|
+
const ArgSchema = {
|
|
24
|
+
[ApiVersion.v1]: z.object({
|
|
25
|
+
bookmarkId: z.string(),
|
|
26
|
+
updates: z.object({
|
|
27
|
+
name: z.string().nullish(),
|
|
28
|
+
description: z.string().nullish(),
|
|
29
|
+
isShared: z.boolean().nullish(),
|
|
30
|
+
payload: z
|
|
31
|
+
.record(z.unknown())
|
|
32
|
+
.or(z.string())
|
|
33
|
+
.nullish()
|
|
34
|
+
.transform((x) => (typeof x === 'object' ? JSON.stringify(x) : x)),
|
|
35
|
+
sourceSystem: z
|
|
36
|
+
.object({
|
|
37
|
+
identifier: z.string().nullish(),
|
|
38
|
+
name: z.string().nullish(),
|
|
39
|
+
subSystem: z.string().nullish(),
|
|
40
|
+
})
|
|
41
|
+
.nullish(),
|
|
42
|
+
}),
|
|
43
|
+
}),
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/** Schema for the response from the API. */
|
|
47
|
+
const ApiResponseSchema = {
|
|
48
|
+
[ApiVersion.v1]: ApiBookmarkSchema[ApiVersion.v1].and(
|
|
49
|
+
z.object({
|
|
50
|
+
payload: ApiBookmarkPayload[ApiVersion.v1].optional(),
|
|
51
|
+
}),
|
|
52
|
+
),
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
/** Defines the expected output from the api. */
|
|
56
|
+
type ApiResponse<TVersion extends AllowedVersions> = z.infer<
|
|
57
|
+
(typeof ApiResponseSchema)[ExtractApiVersion<TVersion>]
|
|
58
|
+
>;
|
|
59
|
+
|
|
60
|
+
/** Defines the input arguments to this operation. */
|
|
61
|
+
type MethodArg<TVersion extends AllowedVersions> = z.input<
|
|
62
|
+
(typeof ArgSchema)[ExtractApiVersion<TVersion>]
|
|
63
|
+
>;
|
|
64
|
+
|
|
65
|
+
/** Defines the expected output of this operation. */
|
|
66
|
+
type MethodResult<
|
|
67
|
+
TVersion extends AllowedVersions,
|
|
68
|
+
TMethod extends keyof ClientMethod<unknown> = keyof ClientMethod<unknown>,
|
|
69
|
+
TResult = ApiResponse<TVersion>,
|
|
70
|
+
> = ClientMethod<TResult>[TMethod];
|
|
71
|
+
|
|
72
|
+
/** utility function for generating http request initialization parameters */
|
|
73
|
+
const generateRequestParameters = <TResult, TVersion extends AvailableVersions>(
|
|
74
|
+
version: TVersion,
|
|
75
|
+
args: z.infer<(typeof ArgSchema)[TVersion]>,
|
|
76
|
+
init?: ClientRequestInit<IHttpClient, TResult>,
|
|
77
|
+
): ClientRequestInit<IHttpClient, TResult> => {
|
|
78
|
+
switch (version) {
|
|
79
|
+
case ApiVersion.v1: {
|
|
80
|
+
const baseInit: FetchRequestInit<ApiResponse<ApiVersion.v1>, JsonRequest> = {
|
|
81
|
+
method: 'PATCH',
|
|
82
|
+
selector: schemaSelector(ApiResponseSchema[version]),
|
|
83
|
+
body: args.updates,
|
|
84
|
+
};
|
|
85
|
+
return Object.assign({}, baseInit, init);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
throw Error(`Unknown API version: ${version}`);
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
/** utility function for generating the api path */
|
|
92
|
+
const generateApiPath = <TVersion extends AvailableVersions>(
|
|
93
|
+
version: TVersion,
|
|
94
|
+
args: z.infer<(typeof ArgSchema)[TVersion]>,
|
|
95
|
+
): string => {
|
|
96
|
+
switch (version) {
|
|
97
|
+
case ApiVersion.v1: {
|
|
98
|
+
const params = new URLSearchParams();
|
|
99
|
+
params.append('api-version', version);
|
|
100
|
+
return `/bookmarks/${args.bookmarkId}?${String(params)}`;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
throw Error(`Unknown API version: ${version}`);
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
/** executes the api call */
|
|
107
|
+
const executeApiCall = <TVersion extends AllowedVersions, TMethod extends keyof ClientMethod>(
|
|
108
|
+
version: TVersion,
|
|
109
|
+
client: IHttpClient,
|
|
110
|
+
method: TMethod = 'json' as TMethod,
|
|
111
|
+
) => {
|
|
112
|
+
type MethodVersion = ExtractApiVersion<TVersion>;
|
|
113
|
+
const apiVersion = extractVersion(ApiVersion, version);
|
|
114
|
+
return <
|
|
115
|
+
TResponse = ApiResponse<MethodVersion>,
|
|
116
|
+
TResult = MethodResult<MethodVersion, TMethod, TResponse>,
|
|
117
|
+
>(
|
|
118
|
+
input: MethodArg<MethodVersion>,
|
|
119
|
+
init?: ClientRequestInit<IHttpClient, TResponse>,
|
|
120
|
+
): TResult => {
|
|
121
|
+
const args = ArgSchema[apiVersion].parse(input);
|
|
122
|
+
return client[method](
|
|
123
|
+
generateApiPath(apiVersion, args),
|
|
124
|
+
generateRequestParameters(apiVersion, args, init),
|
|
125
|
+
) as TResult;
|
|
126
|
+
};
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
export {
|
|
130
|
+
AllowedVersions as PatchBookmarkVersion,
|
|
131
|
+
MethodArg as PatchBookmarkArg,
|
|
132
|
+
ApiResponse as PatchBookmarkResponse,
|
|
133
|
+
MethodResult as PatchBookmarksResult,
|
|
134
|
+
executeApiCall as patchBookmark,
|
|
135
|
+
};
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
import type {
|
|
4
|
+
ClientRequestInit,
|
|
5
|
+
FetchRequestInit,
|
|
6
|
+
IHttpClient,
|
|
7
|
+
JsonRequest,
|
|
8
|
+
} from '@equinor/fusion-framework-module-http/client';
|
|
9
|
+
|
|
10
|
+
import type { ClientMethod, ExtractApiVersion, FilterAllowedApiVersions } from '../types';
|
|
11
|
+
|
|
12
|
+
import { extractVersion, schemaSelector } from '../../utils';
|
|
13
|
+
import { ApiVersion } from '../api-version';
|
|
14
|
+
import { ApiBookmarkPayload, ApiBookmarkSchema, ApiSourceSystem } from '../schemas';
|
|
15
|
+
|
|
16
|
+
/** API version which this operation uses. */
|
|
17
|
+
type AvailableVersions = ApiVersion.v1;
|
|
18
|
+
|
|
19
|
+
/** Defines the allowed versions for this operation. (key of enum as string or enum value) */
|
|
20
|
+
type AllowedVersions = FilterAllowedApiVersions<AvailableVersions>;
|
|
21
|
+
|
|
22
|
+
/** Schema for the input arguments to this operation. */
|
|
23
|
+
const ArgSchema = {
|
|
24
|
+
[ApiVersion.v1]: z.object({
|
|
25
|
+
name: z.string(),
|
|
26
|
+
appKey: z.string(),
|
|
27
|
+
payload: z.record(z.unknown()).or(z.string()).optional(),
|
|
28
|
+
description: z.string().nullish(),
|
|
29
|
+
isShared: z.boolean().nullish(),
|
|
30
|
+
contextId: z.string().nullish(),
|
|
31
|
+
sourceSystem: ApiSourceSystem[ApiVersion.v1].nullish(),
|
|
32
|
+
}),
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/** Schema for the response from the API. */
|
|
36
|
+
const ApiResponseSchema = {
|
|
37
|
+
[ApiVersion.v1]: ApiBookmarkSchema[ApiVersion.v1].and(
|
|
38
|
+
z.object({
|
|
39
|
+
payload: ApiBookmarkPayload[ApiVersion.v1].optional(),
|
|
40
|
+
}),
|
|
41
|
+
),
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/** Defines the expected output from the api. */
|
|
45
|
+
type ApiResponse<TVersion extends AllowedVersions> = z.infer<
|
|
46
|
+
(typeof ApiResponseSchema)[ExtractApiVersion<TVersion>]
|
|
47
|
+
>;
|
|
48
|
+
|
|
49
|
+
/** Defines the input arguments to this operation. */
|
|
50
|
+
type MethodArg<TVersion extends AllowedVersions> = z.input<
|
|
51
|
+
(typeof ArgSchema)[ExtractApiVersion<TVersion>]
|
|
52
|
+
>;
|
|
53
|
+
|
|
54
|
+
/** Defines the expected output of this operation. */
|
|
55
|
+
type MethodResult<
|
|
56
|
+
TVersion extends AllowedVersions,
|
|
57
|
+
TMethod extends keyof ClientMethod<unknown> = keyof ClientMethod<unknown>,
|
|
58
|
+
TResult = ApiResponse<TVersion>,
|
|
59
|
+
> = ClientMethod<TResult>[TMethod];
|
|
60
|
+
|
|
61
|
+
/** utility function for generating http request initialization parameters */
|
|
62
|
+
const generateRequestParameters = <TResult, TVersion extends AvailableVersions>(
|
|
63
|
+
version: TVersion,
|
|
64
|
+
args: z.infer<(typeof ArgSchema)[TVersion]>,
|
|
65
|
+
init?: ClientRequestInit<IHttpClient, TResult>,
|
|
66
|
+
): ClientRequestInit<IHttpClient, TResult> => {
|
|
67
|
+
switch (version) {
|
|
68
|
+
case ApiVersion.v1: {
|
|
69
|
+
const baseInit: FetchRequestInit<ApiResponse<ApiVersion.v1>, JsonRequest> = {
|
|
70
|
+
method: 'POST',
|
|
71
|
+
selector: schemaSelector(ApiResponseSchema[version]),
|
|
72
|
+
body: args,
|
|
73
|
+
};
|
|
74
|
+
return Object.assign({}, baseInit, init);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
throw Error(`Unknown API version: ${version}`);
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
/** utility function for generating the api path */
|
|
81
|
+
const generateApiPath = <TVersion extends AvailableVersions>(
|
|
82
|
+
version: TVersion,
|
|
83
|
+
_args: z.infer<(typeof ArgSchema)[TVersion]>,
|
|
84
|
+
): string => {
|
|
85
|
+
switch (version) {
|
|
86
|
+
case ApiVersion.v1: {
|
|
87
|
+
const params = new URLSearchParams();
|
|
88
|
+
params.append('api-version', version);
|
|
89
|
+
return `/bookmarks?${String(params)}`;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
throw Error(`Unknown API version: ${version}`);
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
/** executes the api call */
|
|
96
|
+
const executeApiCall = <TVersion extends AllowedVersions, TMethod extends keyof ClientMethod>(
|
|
97
|
+
version: TVersion,
|
|
98
|
+
client: IHttpClient,
|
|
99
|
+
method: TMethod = 'json' as TMethod,
|
|
100
|
+
) => {
|
|
101
|
+
type MethodVersion = ExtractApiVersion<TVersion>;
|
|
102
|
+
const apiVersion = extractVersion(ApiVersion, version);
|
|
103
|
+
return <
|
|
104
|
+
TResponse = ApiResponse<MethodVersion>,
|
|
105
|
+
TResult = MethodResult<MethodVersion, TMethod, TResponse>,
|
|
106
|
+
>(
|
|
107
|
+
input: MethodArg<MethodVersion>,
|
|
108
|
+
init?: ClientRequestInit<IHttpClient, TResponse>,
|
|
109
|
+
): TResult => {
|
|
110
|
+
const args = ArgSchema[apiVersion].parse(input);
|
|
111
|
+
return client[method](
|
|
112
|
+
generateApiPath(apiVersion, args),
|
|
113
|
+
generateRequestParameters(apiVersion, args, init),
|
|
114
|
+
) as TResult;
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
export {
|
|
119
|
+
AllowedVersions as CreateBookmarkVersion,
|
|
120
|
+
MethodArg as CreateBookmarkArg,
|
|
121
|
+
ApiResponse as CreateBookmarkResponse,
|
|
122
|
+
MethodResult as CreateBookmarksResult,
|
|
123
|
+
executeApiCall as createBookmark,
|
|
124
|
+
};
|