@pagopa/io-react-native-wallet 0.11.1 → 0.12.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/lib/commonjs/client/generated/wallet-provider.js +126 -0
- package/lib/commonjs/client/generated/wallet-provider.js.map +1 -0
- package/lib/commonjs/client/index.js +41 -0
- package/lib/commonjs/client/index.js.map +1 -0
- package/lib/commonjs/index.js +10 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils/errors.js +29 -1
- package/lib/commonjs/utils/errors.js.map +1 -1
- package/lib/commonjs/utils/integrity.js +2 -0
- package/lib/commonjs/utils/integrity.js.map +1 -0
- package/lib/commonjs/wallet-instance/index.js +29 -0
- package/lib/commonjs/wallet-instance/index.js.map +1 -0
- package/lib/commonjs/wallet-instance-attestation/issuing.js +48 -66
- package/lib/commonjs/wallet-instance-attestation/issuing.js.map +1 -1
- package/lib/commonjs/wallet-instance-attestation/types.js +1 -1
- package/lib/commonjs/wallet-instance-attestation/types.js.map +1 -1
- package/lib/module/client/generated/wallet-provider.js +105 -0
- package/lib/module/client/generated/wallet-provider.js.map +1 -0
- package/lib/module/client/index.js +34 -0
- package/lib/module/client/index.js.map +1 -0
- package/lib/module/index.js +3 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/sd-jwt/verifier.js.map +1 -1
- package/lib/module/utils/errors.js +27 -0
- package/lib/module/utils/errors.js.map +1 -1
- package/lib/module/utils/integrity.js +2 -0
- package/lib/module/utils/integrity.js.map +1 -0
- package/lib/module/wallet-instance/index.js +23 -0
- package/lib/module/wallet-instance/index.js.map +1 -0
- package/lib/module/wallet-instance-attestation/issuing.js +48 -67
- package/lib/module/wallet-instance-attestation/issuing.js.map +1 -1
- package/lib/module/wallet-instance-attestation/types.js +1 -1
- package/lib/module/wallet-instance-attestation/types.js.map +1 -1
- package/lib/typescript/client/generated/wallet-provider.d.ts +242 -0
- package/lib/typescript/client/generated/wallet-provider.d.ts.map +1 -0
- package/lib/typescript/client/index.d.ts +7 -0
- package/lib/typescript/client/index.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +5 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/utils/errors.d.ts +13 -0
- package/lib/typescript/utils/errors.d.ts.map +1 -1
- package/lib/typescript/utils/integrity.d.ts +21 -0
- package/lib/typescript/utils/integrity.d.ts.map +1 -0
- package/lib/typescript/wallet-instance/index.d.ts +7 -0
- package/lib/typescript/wallet-instance/index.d.ts.map +1 -0
- package/lib/typescript/wallet-instance-attestation/issuing.d.ts +15 -3
- package/lib/typescript/wallet-instance-attestation/issuing.d.ts.map +1 -1
- package/lib/typescript/wallet-instance-attestation/types.d.ts +5 -5
- package/package.json +8 -5
- package/src/client/generated/wallet-provider.ts +170 -0
- package/src/client/index.ts +58 -0
- package/src/index.ts +7 -0
- package/src/sd-jwt/__test__/converters.test.js +24 -0
- package/src/sd-jwt/verifier.js +12 -0
- package/src/utils/errors.ts +28 -0
- package/src/utils/integrity.ts +23 -0
- package/src/wallet-instance/index.ts +29 -0
- package/src/wallet-instance-attestation/issuing.ts +68 -101
- package/src/wallet-instance-attestation/types.ts +1 -1
@@ -0,0 +1,242 @@
|
|
1
|
+
import z from "zod";
|
2
|
+
export type ProblemDetail = z.infer<typeof ProblemDetail>;
|
3
|
+
export declare const ProblemDetail: z.ZodObject<{
|
4
|
+
type: z.ZodOptional<z.ZodString>;
|
5
|
+
title: z.ZodOptional<z.ZodString>;
|
6
|
+
status: z.ZodOptional<z.ZodNumber>;
|
7
|
+
detail: z.ZodOptional<z.ZodString>;
|
8
|
+
instance: z.ZodOptional<z.ZodString>;
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
10
|
+
type?: string | undefined;
|
11
|
+
title?: string | undefined;
|
12
|
+
status?: number | undefined;
|
13
|
+
detail?: string | undefined;
|
14
|
+
instance?: string | undefined;
|
15
|
+
}, {
|
16
|
+
type?: string | undefined;
|
17
|
+
title?: string | undefined;
|
18
|
+
status?: number | undefined;
|
19
|
+
detail?: string | undefined;
|
20
|
+
instance?: string | undefined;
|
21
|
+
}>;
|
22
|
+
export type FiscalCode = z.infer<typeof FiscalCode>;
|
23
|
+
export declare const FiscalCode: z.ZodString;
|
24
|
+
export type Id = z.infer<typeof Id>;
|
25
|
+
export declare const Id: z.ZodString;
|
26
|
+
export type get_GetEntityConfiguration = typeof get_GetEntityConfiguration;
|
27
|
+
export declare const get_GetEntityConfiguration: {
|
28
|
+
method: z.ZodLiteral<"GET">;
|
29
|
+
path: z.ZodLiteral<"/.well-known/openid-federation">;
|
30
|
+
parameters: z.ZodNever;
|
31
|
+
response: z.ZodUnknown;
|
32
|
+
};
|
33
|
+
export type get_GetNonce = typeof get_GetNonce;
|
34
|
+
export declare const get_GetNonce: {
|
35
|
+
method: z.ZodLiteral<"GET">;
|
36
|
+
path: z.ZodLiteral<"/nonce">;
|
37
|
+
parameters: z.ZodNever;
|
38
|
+
response: z.ZodObject<{
|
39
|
+
nonce: z.ZodString;
|
40
|
+
}, "strip", z.ZodTypeAny, {
|
41
|
+
nonce: string;
|
42
|
+
}, {
|
43
|
+
nonce: string;
|
44
|
+
}>;
|
45
|
+
};
|
46
|
+
export type post_CreateWalletInstance = typeof post_CreateWalletInstance;
|
47
|
+
export declare const post_CreateWalletInstance: {
|
48
|
+
method: z.ZodLiteral<"POST">;
|
49
|
+
path: z.ZodLiteral<"/wallet-instances">;
|
50
|
+
parameters: z.ZodObject<{
|
51
|
+
body: z.ZodObject<{
|
52
|
+
challenge: z.ZodString;
|
53
|
+
key_attestation: z.ZodString;
|
54
|
+
hardware_key_tag: z.ZodString;
|
55
|
+
}, "strip", z.ZodTypeAny, {
|
56
|
+
challenge: string;
|
57
|
+
key_attestation: string;
|
58
|
+
hardware_key_tag: string;
|
59
|
+
}, {
|
60
|
+
challenge: string;
|
61
|
+
key_attestation: string;
|
62
|
+
hardware_key_tag: string;
|
63
|
+
}>;
|
64
|
+
}, "strip", z.ZodTypeAny, {
|
65
|
+
body: {
|
66
|
+
challenge: string;
|
67
|
+
key_attestation: string;
|
68
|
+
hardware_key_tag: string;
|
69
|
+
};
|
70
|
+
}, {
|
71
|
+
body: {
|
72
|
+
challenge: string;
|
73
|
+
key_attestation: string;
|
74
|
+
hardware_key_tag: string;
|
75
|
+
};
|
76
|
+
}>;
|
77
|
+
response: z.ZodUnknown;
|
78
|
+
};
|
79
|
+
export type post_CreateWalletAttestation = typeof post_CreateWalletAttestation;
|
80
|
+
export declare const post_CreateWalletAttestation: {
|
81
|
+
method: z.ZodLiteral<"POST">;
|
82
|
+
path: z.ZodLiteral<"/token">;
|
83
|
+
parameters: z.ZodObject<{
|
84
|
+
body: z.ZodObject<{
|
85
|
+
grant_type: z.ZodLiteral<"urn:ietf:params:oauth:grant-type:jwt-bearer">;
|
86
|
+
assertion: z.ZodString;
|
87
|
+
}, "strip", z.ZodTypeAny, {
|
88
|
+
grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer";
|
89
|
+
assertion: string;
|
90
|
+
}, {
|
91
|
+
grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer";
|
92
|
+
assertion: string;
|
93
|
+
}>;
|
94
|
+
}, "strip", z.ZodTypeAny, {
|
95
|
+
body: {
|
96
|
+
grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer";
|
97
|
+
assertion: string;
|
98
|
+
};
|
99
|
+
}, {
|
100
|
+
body: {
|
101
|
+
grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer";
|
102
|
+
assertion: string;
|
103
|
+
};
|
104
|
+
}>;
|
105
|
+
response: z.ZodUnknown;
|
106
|
+
};
|
107
|
+
export declare const EndpointByMethod: {
|
108
|
+
get: {
|
109
|
+
"/.well-known/openid-federation": {
|
110
|
+
method: z.ZodLiteral<"GET">;
|
111
|
+
path: z.ZodLiteral<"/.well-known/openid-federation">;
|
112
|
+
parameters: z.ZodNever;
|
113
|
+
response: z.ZodUnknown;
|
114
|
+
};
|
115
|
+
"/nonce": {
|
116
|
+
method: z.ZodLiteral<"GET">;
|
117
|
+
path: z.ZodLiteral<"/nonce">;
|
118
|
+
parameters: z.ZodNever;
|
119
|
+
response: z.ZodObject<{
|
120
|
+
nonce: z.ZodString;
|
121
|
+
}, "strip", z.ZodTypeAny, {
|
122
|
+
nonce: string;
|
123
|
+
}, {
|
124
|
+
nonce: string;
|
125
|
+
}>;
|
126
|
+
};
|
127
|
+
};
|
128
|
+
post: {
|
129
|
+
"/wallet-instances": {
|
130
|
+
method: z.ZodLiteral<"POST">;
|
131
|
+
path: z.ZodLiteral<"/wallet-instances">;
|
132
|
+
parameters: z.ZodObject<{
|
133
|
+
body: z.ZodObject<{
|
134
|
+
challenge: z.ZodString;
|
135
|
+
key_attestation: z.ZodString;
|
136
|
+
hardware_key_tag: z.ZodString;
|
137
|
+
}, "strip", z.ZodTypeAny, {
|
138
|
+
challenge: string;
|
139
|
+
key_attestation: string;
|
140
|
+
hardware_key_tag: string;
|
141
|
+
}, {
|
142
|
+
challenge: string;
|
143
|
+
key_attestation: string;
|
144
|
+
hardware_key_tag: string;
|
145
|
+
}>;
|
146
|
+
}, "strip", z.ZodTypeAny, {
|
147
|
+
body: {
|
148
|
+
challenge: string;
|
149
|
+
key_attestation: string;
|
150
|
+
hardware_key_tag: string;
|
151
|
+
};
|
152
|
+
}, {
|
153
|
+
body: {
|
154
|
+
challenge: string;
|
155
|
+
key_attestation: string;
|
156
|
+
hardware_key_tag: string;
|
157
|
+
};
|
158
|
+
}>;
|
159
|
+
response: z.ZodUnknown;
|
160
|
+
};
|
161
|
+
"/token": {
|
162
|
+
method: z.ZodLiteral<"POST">;
|
163
|
+
path: z.ZodLiteral<"/token">;
|
164
|
+
parameters: z.ZodObject<{
|
165
|
+
body: z.ZodObject<{
|
166
|
+
grant_type: z.ZodLiteral<"urn:ietf:params:oauth:grant-type:jwt-bearer">;
|
167
|
+
assertion: z.ZodString;
|
168
|
+
}, "strip", z.ZodTypeAny, {
|
169
|
+
grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer";
|
170
|
+
assertion: string;
|
171
|
+
}, {
|
172
|
+
grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer";
|
173
|
+
assertion: string;
|
174
|
+
}>;
|
175
|
+
}, "strip", z.ZodTypeAny, {
|
176
|
+
body: {
|
177
|
+
grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer";
|
178
|
+
assertion: string;
|
179
|
+
};
|
180
|
+
}, {
|
181
|
+
body: {
|
182
|
+
grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer";
|
183
|
+
assertion: string;
|
184
|
+
};
|
185
|
+
}>;
|
186
|
+
response: z.ZodUnknown;
|
187
|
+
};
|
188
|
+
};
|
189
|
+
};
|
190
|
+
export type EndpointByMethod = typeof EndpointByMethod;
|
191
|
+
export type GetEndpoints = EndpointByMethod["get"];
|
192
|
+
export type PostEndpoints = EndpointByMethod["post"];
|
193
|
+
export type AllEndpoints = EndpointByMethod[keyof EndpointByMethod];
|
194
|
+
export type EndpointParameters = {
|
195
|
+
body?: unknown;
|
196
|
+
query?: Record<string, unknown>;
|
197
|
+
header?: Record<string, unknown>;
|
198
|
+
path?: Record<string, unknown>;
|
199
|
+
};
|
200
|
+
export type MutationMethod = "post" | "put" | "patch" | "delete";
|
201
|
+
export type Method = "get" | "head" | MutationMethod;
|
202
|
+
export type DefaultEndpoint = {
|
203
|
+
parameters?: EndpointParameters | undefined;
|
204
|
+
response: unknown;
|
205
|
+
};
|
206
|
+
export type Endpoint<TConfig extends DefaultEndpoint = DefaultEndpoint> = {
|
207
|
+
operationId: string;
|
208
|
+
method: Method;
|
209
|
+
path: string;
|
210
|
+
parameters?: TConfig["parameters"];
|
211
|
+
meta: {
|
212
|
+
alias: string;
|
213
|
+
hasParameters: boolean;
|
214
|
+
areParametersRequired: boolean;
|
215
|
+
};
|
216
|
+
response: TConfig["response"];
|
217
|
+
};
|
218
|
+
type Fetcher = (method: Method, url: string, parameters?: EndpointParameters | undefined) => Promise<Endpoint["response"]>;
|
219
|
+
type RequiredKeys<T> = {
|
220
|
+
[P in keyof T]-?: undefined extends T[P] ? never : P;
|
221
|
+
}[keyof T];
|
222
|
+
type MaybeOptionalArg<T> = RequiredKeys<T> extends never ? [config?: T] : [config: T];
|
223
|
+
export declare class ApiClient {
|
224
|
+
fetcher: Fetcher;
|
225
|
+
baseUrl: string;
|
226
|
+
constructor(fetcher: Fetcher);
|
227
|
+
setBaseUrl(baseUrl: string): this;
|
228
|
+
get<Path extends keyof GetEndpoints, TEndpoint extends GetEndpoints[Path]>(path: Path, ...params: MaybeOptionalArg<z.infer<TEndpoint["parameters"]>>): Promise<z.infer<TEndpoint["response"]>>;
|
229
|
+
post<Path extends keyof PostEndpoints, TEndpoint extends PostEndpoints[Path]>(path: Path, ...params: MaybeOptionalArg<z.infer<TEndpoint["parameters"]>>): Promise<z.infer<TEndpoint["response"]>>;
|
230
|
+
}
|
231
|
+
export declare function createApiClient(fetcher: Fetcher, baseUrl?: string): ApiClient;
|
232
|
+
export {};
|
233
|
+
/**
|
234
|
+
Example usage:
|
235
|
+
const api = createApiClient((method, url, params) =>
|
236
|
+
fetch(url, { method, body: JSON.stringify(params) }).then((res) => res.json()),
|
237
|
+
);
|
238
|
+
api.get("/users").then((users) => console.log(users));
|
239
|
+
api.post("/users", { body: { name: "John" } }).then((user) => console.log(user));
|
240
|
+
api.put("/users/:id", { path: { id: 1 }, body: { name: "John" } }).then((user) => console.log(user));
|
241
|
+
*/
|
242
|
+
//# sourceMappingURL=wallet-provider.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"wallet-provider.d.ts","sourceRoot":"","sources":["../../../../src/client/generated/wallet-provider.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import { ApiClient as WalletProviderApiClient } from "./generated/wallet-provider";
|
2
|
+
export type WalletProviderClient = WalletProviderApiClient;
|
3
|
+
export declare const getWalletProviderClient: (context: {
|
4
|
+
walletProviderBaseUrl: string;
|
5
|
+
appFetch?: GlobalFetch["fetch"];
|
6
|
+
}) => WalletProviderApiClient;
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,IAAI,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAEnF,MAAM,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AA4B3D,eAAO,MAAM,uBAAuB,YAAa;IAC/C,qBAAqB,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CACjC,4BAmBA,CAAC"}
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import { fixBase64EncodingOnKey } from "./utils/jwk";
|
1
2
|
import "react-native-url-polyfill/auto";
|
2
3
|
import * as Credential from "./credential";
|
3
4
|
import * as PID from "./pid";
|
@@ -5,7 +6,10 @@ import * as SdJwt from "./sd-jwt";
|
|
5
6
|
import * as Errors from "./utils/errors";
|
6
7
|
import * as WalletInstanceAttestation from "./wallet-instance-attestation";
|
7
8
|
import * as Trust from "./trust";
|
9
|
+
import * as WalletInstance from "./wallet-instance";
|
8
10
|
import { AuthorizationDetail, AuthorizationDetails } from "./utils/par";
|
9
11
|
import { createCryptoContextFor } from "./utils/crypto";
|
10
|
-
|
12
|
+
import type { IntegrityContext } from "./utils/integrity";
|
13
|
+
export { SdJwt, PID, Credential, WalletInstanceAttestation, WalletInstance, Errors, Trust, createCryptoContextFor, AuthorizationDetail, AuthorizationDetails, fixBase64EncodingOnKey, };
|
14
|
+
export type { IntegrityContext };
|
11
15
|
//# sourceMappingURL=index.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGrD,OAAO,gCAAgC,CAAC;AAExC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,UAAU,CAAC;AAClC,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AACzC,OAAO,KAAK,yBAAyB,MAAM,+BAA+B,CAAC;AAC3E,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,cAAc,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,EACL,KAAK,EACL,GAAG,EACH,UAAU,EACV,yBAAyB,EACzB,cAAc,EACd,MAAM,EACN,KAAK,EACL,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,GACvB,CAAC;AAEF,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
|
@@ -109,4 +109,17 @@ export declare class PidMetadataError extends Error {
|
|
109
109
|
static get code(): "PID_METADATA_ERROR";
|
110
110
|
constructor(message: string);
|
111
111
|
}
|
112
|
+
/**
|
113
|
+
* An error subclass thrown when a Wallet Provider http request fail
|
114
|
+
*
|
115
|
+
*/
|
116
|
+
export declare class WalletProviderResponseError extends IoWalletError {
|
117
|
+
static get code(): "ERR_IO_WALLET_PROVIDER_RESPONSE_FAILED";
|
118
|
+
code: string;
|
119
|
+
/** The Claim for which the validation failed. */
|
120
|
+
claim: string;
|
121
|
+
/** Reason code for the validation failure. */
|
122
|
+
reason: string;
|
123
|
+
constructor(message: string, claim?: string, reason?: string);
|
124
|
+
}
|
112
125
|
//# sourceMappingURL=errors.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/utils/errors.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;;GAUG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,6DAA6D;IAC7D,MAAM,KAAK,IAAI,IAAI,MAAM,CAExB;IAED,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAA2B;gBAE3B,OAAO,CAAC,EAAE,MAAM;CAM7B;AACD;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,aAAa;IACjD,MAAM,KAAK,IAAI,IAAI,iCAAiC,CAEnD;IAED,IAAI,SAAqC;IAEzC,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IAEd,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;gBAGb,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,MAAsB,EAC7B,MAAM,GAAE,MAAsB;CAMjC;AAED;;;GAGG;AACH,qBAAa,qCAAsC,SAAQ,aAAa;IACtE,MAAM,KAAK,IAAI,IAAI,mDAAmD,CAErE;IAED,IAAI,SAAuD;IAE3D,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IAEd,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;gBAGb,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,MAAsB,EAC7B,MAAM,GAAE,MAAsB;CAMjC;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,aAAa;IACvD,MAAM,KAAK,IAAI,IAAI,oDAAoD,CAEtE;IAED,IAAI,SAAwD;IAE5D,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IAEd,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;gBAGb,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,MAAsB,EAC7B,MAAM,GAAE,MAAsB;CAMjC;AAED;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,aAAa;IAChD,MAAM,KAAK,IAAI,IAAI,kCAAkC,CAEpD;IAED,IAAI,SAAsC;IAE1C,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IAEd,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;gBAGb,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,MAAsB,EAC7B,MAAM,GAAE,MAAsB;CAMjC;AAED;;;GAGG;AACH,qBAAa,+BAAgC,SAAQ,KAAK;IACxD,MAAM,KAAK,IAAI,IAAI,sBAAsB,CAExC;IAED,IAAI,SAA0B;IAE9B,2BAA2B;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAC;gBAEL,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;CAQtC;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,MAAM,KAAK,IAAI,IAAI,+BAA+B,CAEjD;IAED,IAAI,SAAmC;IAEvC,2BAA2B;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAC;gBAEL,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;CAQtC;AAED;;;GAGG;AACH,qBAAa,wCAAyC,SAAQ,KAAK;IACjE,MAAM,KAAK,IAAI,IAAI,gCAAgC,CAElD;IAED,IAAI,SAAoC;IAExC;;OAEG;gBACS,QAAQ,EAAE,MAAM;CAI7B;AAED;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,MAAM,KAAK,IAAI,IAAI,oBAAoB,CAEtC;gBAEW,OAAO,EAAE,MAAM;CAG5B"}
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/utils/errors.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;;GAUG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,6DAA6D;IAC7D,MAAM,KAAK,IAAI,IAAI,MAAM,CAExB;IAED,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAA2B;gBAE3B,OAAO,CAAC,EAAE,MAAM;CAM7B;AACD;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,aAAa;IACjD,MAAM,KAAK,IAAI,IAAI,iCAAiC,CAEnD;IAED,IAAI,SAAqC;IAEzC,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IAEd,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;gBAGb,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,MAAsB,EAC7B,MAAM,GAAE,MAAsB;CAMjC;AAED;;;GAGG;AACH,qBAAa,qCAAsC,SAAQ,aAAa;IACtE,MAAM,KAAK,IAAI,IAAI,mDAAmD,CAErE;IAED,IAAI,SAAuD;IAE3D,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IAEd,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;gBAGb,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,MAAsB,EAC7B,MAAM,GAAE,MAAsB;CAMjC;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,aAAa;IACvD,MAAM,KAAK,IAAI,IAAI,oDAAoD,CAEtE;IAED,IAAI,SAAwD;IAE5D,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IAEd,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;gBAGb,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,MAAsB,EAC7B,MAAM,GAAE,MAAsB;CAMjC;AAED;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,aAAa;IAChD,MAAM,KAAK,IAAI,IAAI,kCAAkC,CAEpD;IAED,IAAI,SAAsC;IAE1C,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IAEd,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;gBAGb,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,MAAsB,EAC7B,MAAM,GAAE,MAAsB;CAMjC;AAED;;;GAGG;AACH,qBAAa,+BAAgC,SAAQ,KAAK;IACxD,MAAM,KAAK,IAAI,IAAI,sBAAsB,CAExC;IAED,IAAI,SAA0B;IAE9B,2BAA2B;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAC;gBAEL,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;CAQtC;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,MAAM,KAAK,IAAI,IAAI,+BAA+B,CAEjD;IAED,IAAI,SAAmC;IAEvC,2BAA2B;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAC;gBAEL,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;CAQtC;AAED;;;GAGG;AACH,qBAAa,wCAAyC,SAAQ,KAAK;IACjE,MAAM,KAAK,IAAI,IAAI,gCAAgC,CAElD;IAED,IAAI,SAAoC;IAExC;;OAEG;gBACS,QAAQ,EAAE,MAAM;CAI7B;AAED;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,MAAM,KAAK,IAAI,IAAI,oBAAoB,CAEtC;gBAEW,OAAO,EAAE,MAAM;CAG5B;AAED;;;GAGG;AACH,qBAAa,2BAA4B,SAAQ,aAAa;IAC5D,MAAM,KAAK,IAAI,IAAI,wCAAwC,CAE1D;IAED,IAAI,SAA4C;IAEhD,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IAEd,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;gBAGb,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,MAAsB,EAC7B,MAAM,GAAE,MAAsB;CAMjC"}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
/**
|
2
|
+
* Interface for the integrity context which provides the necessary functions to interact with the integrity service.
|
3
|
+
* The functions are platform specific and must be implemented in the platform specific code.
|
4
|
+
* getHardwareKeyTag: returns the hardware key tag.
|
5
|
+
* getAttestation: requests the attestation from the integrity service.
|
6
|
+
* getHardwareSignatureWithAuthData: signs the clientData and returns the signature with the authenticator data.
|
7
|
+
*/
|
8
|
+
export interface IntegrityContext {
|
9
|
+
getHardwareKeyTag: () => string;
|
10
|
+
getAttestation: (nonce: string) => Promise<string>;
|
11
|
+
getHardwareSignatureWithAuthData: (clientData: string) => Promise<HardwareSignatureWithAuthData>;
|
12
|
+
}
|
13
|
+
/**
|
14
|
+
* Type returned by the getHardwareSignatureWithAuthData function of {@link IntegrityContext}.
|
15
|
+
* It contains the signature and the authenticator data.
|
16
|
+
*/
|
17
|
+
export type HardwareSignatureWithAuthData = {
|
18
|
+
signature: string;
|
19
|
+
authenticatorData: string;
|
20
|
+
};
|
21
|
+
//# sourceMappingURL=integrity.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"integrity.d.ts","sourceRoot":"","sources":["../../../src/utils/integrity.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,EAAE,MAAM,MAAM,CAAC;IAChC,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,gCAAgC,EAAE,CAChC,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,6BAA6B,CAAC,CAAC;CAC7C;AAED;;;GAGG;AACH,MAAM,MAAM,6BAA6B,GAAG;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC"}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import type { IntegrityContext } from "..";
|
2
|
+
export declare function createWalletInstance(context: {
|
3
|
+
integrityContext: IntegrityContext;
|
4
|
+
walletProviderBaseUrl: string;
|
5
|
+
appFetch?: GlobalFetch["fetch"];
|
6
|
+
}): Promise<string>;
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/wallet-instance/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,IAAI,CAAC;AAE3C,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CACjC,mBAqBA"}
|
@@ -1,6 +1,16 @@
|
|
1
1
|
/// <reference types="react-native" />
|
2
2
|
import { type CryptoContext } from "@pagopa/io-react-native-jwt";
|
3
|
-
import type {
|
3
|
+
import type { IntegrityContext } from "..";
|
4
|
+
/**
|
5
|
+
* Getter for an attestation request. The attestation request is a JWT that will be sent to the Wallet Provider to request a Wallet Instance Attestation.
|
6
|
+
*
|
7
|
+
* @param challenge - The nonce received from the Wallet Provider which is part of the signed clientData
|
8
|
+
* @param wiaCryptoContext - The key pair associated with the WIA. Will be use to prove the ownership of the attestation
|
9
|
+
* @param integrityContext - The integrity context which exposes a set of functions to interact with the device integrity service
|
10
|
+
* @param walletProviderBaseUrl - Base url for the Wallet Provider
|
11
|
+
* @returns A JWT containing the attestation request
|
12
|
+
*/
|
13
|
+
export declare function getAttestationRequest(challenge: string, wiaCryptoContext: CryptoContext, integrityContext: IntegrityContext, walletProviderBaseUrl: string): Promise<string>;
|
4
14
|
/**
|
5
15
|
* Request a Wallet Instance Attestation (WIA) to the Wallet provider
|
6
16
|
*
|
@@ -9,11 +19,13 @@ import type { WalletProviderEntityConfiguration } from "../trust/types";
|
|
9
19
|
* @param walletProviderBaseUrl Base url for the Wallet Provider
|
10
20
|
* @returns The retrieved Wallet Instance Attestation token
|
11
21
|
*/
|
12
|
-
export declare const getAttestation: ({ wiaCryptoContext, appFetch, }: {
|
22
|
+
export declare const getAttestation: ({ wiaCryptoContext, integrityContext, walletProviderBaseUrl, appFetch, }: {
|
13
23
|
wiaCryptoContext: CryptoContext;
|
24
|
+
integrityContext: IntegrityContext;
|
25
|
+
walletProviderBaseUrl: string;
|
14
26
|
appFetch?: {
|
15
27
|
(input: RequestInfo, init?: RequestInit | undefined): Promise<Response>;
|
16
28
|
(input: RequestInfo, init?: RequestInit | undefined): Promise<Response>;
|
17
29
|
} | undefined;
|
18
|
-
}) =>
|
30
|
+
}) => Promise<string>;
|
19
31
|
//# sourceMappingURL=issuing.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"issuing.d.ts","sourceRoot":"","sources":["../../../src/wallet-instance-attestation/issuing.ts"],"names":[],"mappings":";AAAA,OAAO,
|
1
|
+
{"version":3,"file":"issuing.d.ts","sourceRoot":"","sources":["../../../src/wallet-instance-attestation/issuing.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAIjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,IAAI,CAAC;AAG3C;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,aAAa,EAC/B,gBAAgB,EAAE,gBAAgB,EAClC,qBAAqB,EAAE,MAAM,GAC5B,OAAO,CAAC,MAAM,CAAC,CAoCjB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc;sBAMP,aAAa;sBACb,gBAAgB;2BACX,MAAM;;;;;MAE3B,QAAQ,MAAM,CA4BjB,CAAC"}
|
@@ -20,11 +20,11 @@ export declare const WalletInstanceAttestationRequestJwt: z.ZodObject<{
|
|
20
20
|
x5c?: string[] | undefined;
|
21
21
|
trust_chain?: string[] | undefined;
|
22
22
|
}>, z.ZodObject<{
|
23
|
-
typ: z.ZodLiteral<"
|
23
|
+
typ: z.ZodLiteral<"war+jwt">;
|
24
24
|
}, "strip", z.ZodTypeAny, {
|
25
|
-
typ: "
|
25
|
+
typ: "war+jwt";
|
26
26
|
}, {
|
27
|
-
typ: "
|
27
|
+
typ: "war+jwt";
|
28
28
|
}>>;
|
29
29
|
payload: z.ZodIntersection<z.ZodObject<{
|
30
30
|
iss: z.ZodString;
|
@@ -247,7 +247,7 @@ export declare const WalletInstanceAttestationRequestJwt: z.ZodObject<{
|
|
247
247
|
x5c?: string[] | undefined;
|
248
248
|
trust_chain?: string[] | undefined;
|
249
249
|
} & {
|
250
|
-
typ: "
|
250
|
+
typ: "war+jwt";
|
251
251
|
};
|
252
252
|
payload: {
|
253
253
|
iss: string;
|
@@ -294,7 +294,7 @@ export declare const WalletInstanceAttestationRequestJwt: z.ZodObject<{
|
|
294
294
|
x5c?: string[] | undefined;
|
295
295
|
trust_chain?: string[] | undefined;
|
296
296
|
} & {
|
297
|
-
typ: "
|
297
|
+
typ: "war+jwt";
|
298
298
|
};
|
299
299
|
payload: {
|
300
300
|
iss: string;
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@pagopa/io-react-native-wallet",
|
3
|
-
"version": "0.
|
3
|
+
"version": "0.12.0",
|
4
4
|
"description": "Provide data structures, helpers and API for IO Wallet",
|
5
5
|
"main": "lib/commonjs/index",
|
6
6
|
"module": "lib/module/index",
|
@@ -34,7 +34,9 @@
|
|
34
34
|
"release": "release-it",
|
35
35
|
"example": "yarn --cwd example",
|
36
36
|
"bootstrap": "yarn example && yarn install",
|
37
|
-
"code-review": "yarn lint && yarn typecheck && yarn test"
|
37
|
+
"code-review": "yarn generate && yarn lint && yarn typecheck && yarn test",
|
38
|
+
"generate-wallet-provider-client": "typed-openapi openapi/wallet-provider.yaml -o src/client/generated/wallet-provider.ts -r zod",
|
39
|
+
"generate": "yarn generate-wallet-provider-client"
|
38
40
|
},
|
39
41
|
"keywords": [
|
40
42
|
"react-native",
|
@@ -53,8 +55,8 @@
|
|
53
55
|
"devDependencies": {
|
54
56
|
"@pagopa/eslint-config": "^3.0.0",
|
55
57
|
"@pagopa/io-react-native-crypto": "^0.2.3",
|
56
|
-
"@pagopa/io-react-native-jwt": "^1.
|
57
|
-
"@react-native
|
58
|
+
"@pagopa/io-react-native-jwt": "^1.2.0",
|
59
|
+
"@react-native/eslint-config": "^0.72.2",
|
58
60
|
"@rushstack/eslint-patch": "^1.3.2",
|
59
61
|
"@types/jest": "^28.1.2",
|
60
62
|
"@types/react": "~17.0.21",
|
@@ -66,8 +68,9 @@
|
|
66
68
|
"pod-install": "^0.1.0",
|
67
69
|
"prettier": "^2.0.5",
|
68
70
|
"react": "18.2.0",
|
69
|
-
"react-native": "0.
|
71
|
+
"react-native": "0.72.14",
|
70
72
|
"react-native-builder-bob": "^0.20.0",
|
73
|
+
"typed-openapi": "^0.4.1",
|
71
74
|
"typescript": "^5.0.2"
|
72
75
|
},
|
73
76
|
"resolutions": {
|
@@ -0,0 +1,170 @@
|
|
1
|
+
import z from "zod";
|
2
|
+
|
3
|
+
export type ProblemDetail = z.infer<typeof ProblemDetail>;
|
4
|
+
export const ProblemDetail = z.object({
|
5
|
+
type: z.string().optional(),
|
6
|
+
title: z.string().optional(),
|
7
|
+
status: z.number().optional(),
|
8
|
+
detail: z.string().optional(),
|
9
|
+
instance: z.string().optional(),
|
10
|
+
});
|
11
|
+
|
12
|
+
export type FiscalCode = z.infer<typeof FiscalCode>;
|
13
|
+
export const FiscalCode = z.string();
|
14
|
+
|
15
|
+
export type Id = z.infer<typeof Id>;
|
16
|
+
export const Id = z.string();
|
17
|
+
|
18
|
+
export type get_GetEntityConfiguration = typeof get_GetEntityConfiguration;
|
19
|
+
export const get_GetEntityConfiguration = {
|
20
|
+
method: z.literal("GET"),
|
21
|
+
path: z.literal("/.well-known/openid-federation"),
|
22
|
+
parameters: z.never(),
|
23
|
+
response: z.unknown(),
|
24
|
+
};
|
25
|
+
|
26
|
+
export type get_GetNonce = typeof get_GetNonce;
|
27
|
+
export const get_GetNonce = {
|
28
|
+
method: z.literal("GET"),
|
29
|
+
path: z.literal("/nonce"),
|
30
|
+
parameters: z.never(),
|
31
|
+
response: z.object({
|
32
|
+
nonce: z.string(),
|
33
|
+
}),
|
34
|
+
};
|
35
|
+
|
36
|
+
export type post_CreateWalletInstance = typeof post_CreateWalletInstance;
|
37
|
+
export const post_CreateWalletInstance = {
|
38
|
+
method: z.literal("POST"),
|
39
|
+
path: z.literal("/wallet-instances"),
|
40
|
+
parameters: z.object({
|
41
|
+
body: z.object({
|
42
|
+
challenge: z.string(),
|
43
|
+
key_attestation: z.string(),
|
44
|
+
hardware_key_tag: z.string(),
|
45
|
+
}),
|
46
|
+
}),
|
47
|
+
response: z.unknown(),
|
48
|
+
};
|
49
|
+
|
50
|
+
export type post_CreateWalletAttestation = typeof post_CreateWalletAttestation;
|
51
|
+
export const post_CreateWalletAttestation = {
|
52
|
+
method: z.literal("POST"),
|
53
|
+
path: z.literal("/token"),
|
54
|
+
parameters: z.object({
|
55
|
+
body: z.object({
|
56
|
+
grant_type: z.literal("urn:ietf:params:oauth:grant-type:jwt-bearer"),
|
57
|
+
assertion: z.string(),
|
58
|
+
}),
|
59
|
+
}),
|
60
|
+
response: z.unknown(),
|
61
|
+
};
|
62
|
+
|
63
|
+
// <EndpointByMethod>
|
64
|
+
export const EndpointByMethod = {
|
65
|
+
get: {
|
66
|
+
"/.well-known/openid-federation": get_GetEntityConfiguration,
|
67
|
+
"/nonce": get_GetNonce,
|
68
|
+
},
|
69
|
+
post: {
|
70
|
+
"/wallet-instances": post_CreateWalletInstance,
|
71
|
+
"/token": post_CreateWalletAttestation,
|
72
|
+
},
|
73
|
+
};
|
74
|
+
export type EndpointByMethod = typeof EndpointByMethod;
|
75
|
+
// </EndpointByMethod>
|
76
|
+
|
77
|
+
// <EndpointByMethod.Shorthands>
|
78
|
+
export type GetEndpoints = EndpointByMethod["get"];
|
79
|
+
export type PostEndpoints = EndpointByMethod["post"];
|
80
|
+
export type AllEndpoints = EndpointByMethod[keyof EndpointByMethod];
|
81
|
+
// </EndpointByMethod.Shorthands>
|
82
|
+
|
83
|
+
// <ApiClientTypes>
|
84
|
+
export type EndpointParameters = {
|
85
|
+
body?: unknown;
|
86
|
+
query?: Record<string, unknown>;
|
87
|
+
header?: Record<string, unknown>;
|
88
|
+
path?: Record<string, unknown>;
|
89
|
+
};
|
90
|
+
|
91
|
+
export type MutationMethod = "post" | "put" | "patch" | "delete";
|
92
|
+
export type Method = "get" | "head" | MutationMethod;
|
93
|
+
|
94
|
+
export type DefaultEndpoint = {
|
95
|
+
parameters?: EndpointParameters | undefined;
|
96
|
+
response: unknown;
|
97
|
+
};
|
98
|
+
|
99
|
+
export type Endpoint<TConfig extends DefaultEndpoint = DefaultEndpoint> = {
|
100
|
+
operationId: string;
|
101
|
+
method: Method;
|
102
|
+
path: string;
|
103
|
+
parameters?: TConfig["parameters"];
|
104
|
+
meta: {
|
105
|
+
alias: string;
|
106
|
+
hasParameters: boolean;
|
107
|
+
areParametersRequired: boolean;
|
108
|
+
};
|
109
|
+
response: TConfig["response"];
|
110
|
+
};
|
111
|
+
|
112
|
+
type Fetcher = (
|
113
|
+
method: Method,
|
114
|
+
url: string,
|
115
|
+
parameters?: EndpointParameters | undefined,
|
116
|
+
) => Promise<Endpoint["response"]>;
|
117
|
+
|
118
|
+
type RequiredKeys<T> = {
|
119
|
+
[P in keyof T]-?: undefined extends T[P] ? never : P;
|
120
|
+
}[keyof T];
|
121
|
+
|
122
|
+
type MaybeOptionalArg<T> = RequiredKeys<T> extends never ? [config?: T] : [config: T];
|
123
|
+
|
124
|
+
// </ApiClientTypes>
|
125
|
+
|
126
|
+
// <ApiClient>
|
127
|
+
export class ApiClient {
|
128
|
+
baseUrl: string = "";
|
129
|
+
|
130
|
+
constructor(public fetcher: Fetcher) {}
|
131
|
+
|
132
|
+
setBaseUrl(baseUrl: string) {
|
133
|
+
this.baseUrl = baseUrl;
|
134
|
+
return this;
|
135
|
+
}
|
136
|
+
|
137
|
+
// <ApiClient.get>
|
138
|
+
get<Path extends keyof GetEndpoints, TEndpoint extends GetEndpoints[Path]>(
|
139
|
+
path: Path,
|
140
|
+
...params: MaybeOptionalArg<z.infer<TEndpoint["parameters"]>>
|
141
|
+
): Promise<z.infer<TEndpoint["response"]>> {
|
142
|
+
return this.fetcher("get", this.baseUrl + path, params[0]) as Promise<z.infer<TEndpoint["response"]>>;
|
143
|
+
}
|
144
|
+
// </ApiClient.get>
|
145
|
+
|
146
|
+
// <ApiClient.post>
|
147
|
+
post<Path extends keyof PostEndpoints, TEndpoint extends PostEndpoints[Path]>(
|
148
|
+
path: Path,
|
149
|
+
...params: MaybeOptionalArg<z.infer<TEndpoint["parameters"]>>
|
150
|
+
): Promise<z.infer<TEndpoint["response"]>> {
|
151
|
+
return this.fetcher("post", this.baseUrl + path, params[0]) as Promise<z.infer<TEndpoint["response"]>>;
|
152
|
+
}
|
153
|
+
// </ApiClient.post>
|
154
|
+
}
|
155
|
+
|
156
|
+
export function createApiClient(fetcher: Fetcher, baseUrl?: string) {
|
157
|
+
return new ApiClient(fetcher).setBaseUrl(baseUrl ?? "");
|
158
|
+
}
|
159
|
+
|
160
|
+
/**
|
161
|
+
Example usage:
|
162
|
+
const api = createApiClient((method, url, params) =>
|
163
|
+
fetch(url, { method, body: JSON.stringify(params) }).then((res) => res.json()),
|
164
|
+
);
|
165
|
+
api.get("/users").then((users) => console.log(users));
|
166
|
+
api.post("/users", { body: { name: "John" } }).then((user) => console.log(user));
|
167
|
+
api.put("/users/:id", { path: { id: 1 }, body: { name: "John" } }).then((user) => console.log(user));
|
168
|
+
*/
|
169
|
+
|
170
|
+
// </ApiClient
|