accounts 0.3.0 → 0.4.1
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 +13 -0
- package/LICENSE +21 -0
- package/README.md +97 -0
- package/dist/core/AccessKey.d.ts +55 -0
- package/dist/core/AccessKey.d.ts.map +1 -0
- package/dist/core/AccessKey.js +69 -0
- package/dist/core/AccessKey.js.map +1 -0
- package/dist/core/Account.d.ts +91 -0
- package/dist/core/Account.d.ts.map +1 -0
- package/dist/core/Account.js +64 -0
- package/dist/core/Account.js.map +1 -0
- package/dist/core/Adapter.d.ts +187 -0
- package/dist/core/Adapter.d.ts.map +1 -0
- package/dist/core/Adapter.js +7 -0
- package/dist/core/Adapter.js.map +1 -0
- package/dist/core/Ceremony.d.ts +109 -0
- package/dist/core/Ceremony.d.ts.map +1 -0
- package/dist/core/Ceremony.js +104 -0
- package/dist/core/Ceremony.js.map +1 -0
- package/dist/core/Client.d.ts +16 -0
- package/dist/core/Client.d.ts.map +1 -0
- package/dist/core/Client.js +18 -0
- package/dist/core/Client.js.map +1 -0
- package/dist/core/Dialog.d.ts +52 -0
- package/dist/core/Dialog.d.ts.map +1 -0
- package/dist/core/Dialog.js +342 -0
- package/dist/core/Dialog.js.map +1 -0
- package/dist/core/Expiry.d.ts +15 -0
- package/dist/core/Expiry.d.ts.map +1 -0
- package/dist/core/Expiry.js +29 -0
- package/dist/core/Expiry.js.map +1 -0
- package/dist/core/Messenger.d.ts +86 -0
- package/dist/core/Messenger.d.ts.map +1 -0
- package/dist/core/Messenger.js +127 -0
- package/dist/core/Messenger.js.map +1 -0
- package/dist/core/Provider.d.ts +69 -0
- package/dist/core/Provider.d.ts.map +1 -0
- package/dist/core/Provider.js +401 -0
- package/dist/core/Provider.js.map +1 -0
- package/dist/core/Remote.d.ts +114 -0
- package/dist/core/Remote.d.ts.map +1 -0
- package/dist/core/Remote.js +116 -0
- package/dist/core/Remote.js.map +1 -0
- package/dist/core/Schema.d.ts +805 -0
- package/dist/core/Schema.d.ts.map +1 -0
- package/dist/core/Schema.js +43 -0
- package/dist/core/Schema.js.map +1 -0
- package/dist/core/Storage.d.ts +42 -0
- package/dist/core/Storage.d.ts.map +1 -0
- package/dist/core/Storage.js +173 -0
- package/dist/core/Storage.js.map +1 -0
- package/dist/core/Store.d.ts +58 -0
- package/dist/core/Store.d.ts.map +1 -0
- package/dist/core/Store.js +58 -0
- package/dist/core/Store.js.map +1 -0
- package/dist/core/adapters/dangerous_secp256k1.d.ts +30 -0
- package/dist/core/adapters/dangerous_secp256k1.d.ts.map +1 -0
- package/dist/core/adapters/dangerous_secp256k1.js +39 -0
- package/dist/core/adapters/dangerous_secp256k1.js.map +1 -0
- package/dist/core/adapters/dialog.d.ts +31 -0
- package/dist/core/adapters/dialog.d.ts.map +1 -0
- package/dist/core/adapters/dialog.js +306 -0
- package/dist/core/adapters/dialog.js.map +1 -0
- package/dist/core/adapters/local.d.ts +33 -0
- package/dist/core/adapters/local.d.ts.map +1 -0
- package/dist/core/adapters/local.js +227 -0
- package/dist/core/adapters/local.js.map +1 -0
- package/dist/core/adapters/webAuthn.d.ts +36 -0
- package/dist/core/adapters/webAuthn.d.ts.map +1 -0
- package/dist/core/adapters/webAuthn.js +93 -0
- package/dist/core/adapters/webAuthn.js.map +1 -0
- package/dist/core/internal/withDedupe.d.ts +12 -0
- package/dist/core/internal/withDedupe.d.ts.map +1 -0
- package/dist/core/internal/withDedupe.js +12 -0
- package/dist/core/internal/withDedupe.js.map +1 -0
- package/dist/core/zod/request.d.ts +31 -0
- package/dist/core/zod/request.d.ts.map +1 -0
- package/dist/core/zod/request.js +41 -0
- package/dist/core/zod/request.js.map +1 -0
- package/dist/core/zod/rpc.d.ts +603 -0
- package/dist/core/zod/rpc.d.ts.map +1 -0
- package/dist/core/zod/rpc.js +293 -0
- package/dist/core/zod/rpc.js.map +1 -0
- package/dist/core/zod/utils.d.ts +18 -0
- package/dist/core/zod/utils.d.ts.map +1 -0
- package/dist/core/zod/utils.js +21 -0
- package/dist/core/zod/utils.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/types.d.ts +284 -0
- package/dist/internal/types.d.ts.map +1 -0
- package/dist/internal/types.js +2 -0
- package/dist/internal/types.js.map +1 -0
- package/dist/server/Handler.d.ts +257 -0
- package/dist/server/Handler.d.ts.map +1 -0
- package/dist/server/Handler.js +433 -0
- package/dist/server/Handler.js.map +1 -0
- package/dist/server/Kv.d.ts +16 -0
- package/dist/server/Kv.d.ts.map +1 -0
- package/dist/server/Kv.js +30 -0
- package/dist/server/Kv.js.map +1 -0
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +3 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/internal/requestListener.d.ts +124 -0
- package/dist/server/internal/requestListener.d.ts.map +1 -0
- package/dist/server/internal/requestListener.js +173 -0
- package/dist/server/internal/requestListener.js.map +1 -0
- package/dist/wagmi/Connector.d.ts +93 -0
- package/dist/wagmi/Connector.d.ts.map +1 -0
- package/dist/wagmi/Connector.js +238 -0
- package/dist/wagmi/Connector.js.map +1 -0
- package/dist/wagmi/index.d.ts +3 -0
- package/dist/wagmi/index.d.ts.map +1 -0
- package/dist/wagmi/index.js +3 -0
- package/dist/wagmi/index.js.map +1 -0
- package/package.json +56 -2
- package/src/core/AccessKey.test.ts +257 -0
- package/src/core/AccessKey.ts +123 -0
- package/src/core/Account.test.ts +309 -0
- package/src/core/Account.ts +152 -0
- package/src/core/Adapter.ts +238 -0
- package/src/core/Ceremony.browser.test.ts +239 -0
- package/src/core/Ceremony.test.ts +151 -0
- package/src/core/Ceremony.ts +203 -0
- package/src/core/Client.ts +36 -0
- package/src/core/Dialog.browser.test.ts +309 -0
- package/src/core/Dialog.test-d.ts +19 -0
- package/src/core/Dialog.ts +442 -0
- package/src/core/Expiry.ts +34 -0
- package/src/core/Messenger.ts +206 -0
- package/src/core/Provider.browser.test.ts +774 -0
- package/src/core/Provider.connect.browser.test.ts +415 -0
- package/src/core/Provider.test-d.ts +53 -0
- package/src/core/Provider.test.ts +1566 -0
- package/src/core/Provider.ts +559 -0
- package/src/core/Remote.ts +262 -0
- package/src/core/Schema.test-d.ts +211 -0
- package/src/core/Schema.ts +143 -0
- package/src/core/Storage.ts +213 -0
- package/src/core/Store.test.ts +287 -0
- package/src/core/Store.ts +129 -0
- package/src/core/adapters/dangerous_secp256k1.ts +53 -0
- package/src/core/adapters/dialog.ts +379 -0
- package/src/core/adapters/local.test.ts +97 -0
- package/src/core/adapters/local.ts +277 -0
- package/src/core/adapters/webAuthn.ts +129 -0
- package/src/core/internal/withDedupe.test.ts +116 -0
- package/src/core/internal/withDedupe.ts +20 -0
- package/src/core/mppx.test.ts +83 -0
- package/src/core/zod/request.test.ts +121 -0
- package/src/core/zod/request.ts +70 -0
- package/src/core/zod/rpc.ts +374 -0
- package/src/core/zod/utils.test.ts +69 -0
- package/src/core/zod/utils.ts +40 -0
- package/src/index.ts +14 -0
- package/src/internal/types.ts +378 -0
- package/src/server/Handler.test.ts +1014 -0
- package/src/server/Handler.ts +605 -0
- package/src/server/Kv.ts +46 -0
- package/src/server/index.ts +2 -0
- package/src/server/internal/requestListener.ts +273 -0
- package/src/tsconfig.json +9 -0
- package/src/wagmi/Connector.ts +287 -0
- package/src/wagmi/index.ts +2 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { PublicKey, Signature } from 'ox';
|
|
2
|
+
import { SignatureEnvelope } from 'ox/tempo';
|
|
3
|
+
import { Account } from 'viem/tempo';
|
|
4
|
+
import { Authentication, Registration } from 'webauthx/client';
|
|
5
|
+
import * as Adapter from '../Adapter.js';
|
|
6
|
+
import * as Ceremony from '../Ceremony.js';
|
|
7
|
+
import { local } from './local.js';
|
|
8
|
+
/**
|
|
9
|
+
* Creates a WebAuthn adapter backed by real passkey ceremonies.
|
|
10
|
+
*
|
|
11
|
+
* Wraps the {@link local} adapter with WebAuthn registration and authentication flows,
|
|
12
|
+
* using the provided {@link Ceremony} for challenge generation and verification.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* import { webAuthn } from 'accounts'
|
|
17
|
+
*
|
|
18
|
+
* const provider = Provider.create({
|
|
19
|
+
* adapter: webAuthn(),
|
|
20
|
+
* })
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export function webAuthn(options = {}) {
|
|
24
|
+
const { authUrl, icon, name, rdns } = options;
|
|
25
|
+
return Adapter.define({ icon, name, rdns }, (parameters) => {
|
|
26
|
+
const { storage } = parameters;
|
|
27
|
+
const ceremony = options.ceremony ??
|
|
28
|
+
(authUrl ? Ceremony.server({ url: authUrl }) : Ceremony.local({ storage }));
|
|
29
|
+
const base = local({
|
|
30
|
+
async createAccount(parameters) {
|
|
31
|
+
const { options } = await ceremony.getRegistrationOptions(parameters);
|
|
32
|
+
const rpId = options.publicKey?.rp.id;
|
|
33
|
+
if (!rpId)
|
|
34
|
+
throw new Error('rpId is required');
|
|
35
|
+
const credential = await Registration.create({ options });
|
|
36
|
+
const { publicKey } = await ceremony.verifyRegistration(credential, {
|
|
37
|
+
name: parameters.name,
|
|
38
|
+
});
|
|
39
|
+
await storage.setItem('lastCredentialId', credential.id);
|
|
40
|
+
const account = Account.fromWebAuthnP256({ id: credential.id, publicKey });
|
|
41
|
+
return {
|
|
42
|
+
accounts: [
|
|
43
|
+
{
|
|
44
|
+
address: account.address,
|
|
45
|
+
keyType: 'webAuthn',
|
|
46
|
+
credential: { id: credential.id, publicKey, rpId },
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
};
|
|
50
|
+
},
|
|
51
|
+
async loadAccounts(parameters = {}) {
|
|
52
|
+
const { selectAccount, digest } = parameters;
|
|
53
|
+
const credentialId = selectAccount
|
|
54
|
+
? undefined
|
|
55
|
+
: (parameters?.credentialId ??
|
|
56
|
+
(await storage.getItem('lastCredentialId')) ??
|
|
57
|
+
undefined);
|
|
58
|
+
const { options } = await ceremony.getAuthenticationOptions({
|
|
59
|
+
...parameters,
|
|
60
|
+
challenge: digest,
|
|
61
|
+
credentialId,
|
|
62
|
+
});
|
|
63
|
+
const rpId = options.publicKey?.rpId;
|
|
64
|
+
if (!rpId)
|
|
65
|
+
throw new Error('rpId is required');
|
|
66
|
+
const response = await Authentication.sign({ options });
|
|
67
|
+
const { publicKey } = await ceremony.verifyAuthentication(response);
|
|
68
|
+
await storage.setItem('lastCredentialId', response.id);
|
|
69
|
+
const account = Account.fromWebAuthnP256({ id: response.id, publicKey }, { rpId });
|
|
70
|
+
const signature = digest
|
|
71
|
+
? SignatureEnvelope.serialize({
|
|
72
|
+
metadata: response.metadata,
|
|
73
|
+
publicKey: PublicKey.fromHex(publicKey),
|
|
74
|
+
signature: Signature.from(response.signature),
|
|
75
|
+
type: 'webAuthn',
|
|
76
|
+
}, { magic: true })
|
|
77
|
+
: undefined;
|
|
78
|
+
return {
|
|
79
|
+
accounts: [
|
|
80
|
+
{
|
|
81
|
+
address: account.address,
|
|
82
|
+
keyType: 'webAuthn',
|
|
83
|
+
credential: { id: response.id, publicKey, rpId },
|
|
84
|
+
},
|
|
85
|
+
],
|
|
86
|
+
signature,
|
|
87
|
+
};
|
|
88
|
+
},
|
|
89
|
+
})(parameters);
|
|
90
|
+
return { ...base, persistAccounts: true };
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=webAuthn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webAuthn.js","sourceRoot":"","sources":["../../../src/core/adapters/webAuthn.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Deduplicates in-flight promises by key. */
|
|
2
|
+
export declare function withDedupe<data>(fn: () => Promise<data>, { enabled, id }: withDedupe.Options): Promise<data>;
|
|
3
|
+
export declare namespace withDedupe {
|
|
4
|
+
var cache: Map<string, Promise<any>>;
|
|
5
|
+
}
|
|
6
|
+
export declare namespace withDedupe {
|
|
7
|
+
type Options = {
|
|
8
|
+
enabled?: boolean | undefined;
|
|
9
|
+
id?: string | undefined;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=withDedupe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withDedupe.d.ts","sourceRoot":"","sources":["../../../src/core/internal/withDedupe.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,wBAAgB,UAAU,CAAC,IAAI,EAC7B,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACvB,EAAE,OAAc,EAAE,EAAE,EAAE,EAAE,UAAU,CAAC,OAAO,GACzC,OAAO,CAAC,IAAI,CAAC,CAMf;yBATe,UAAU;;;AAW1B,MAAM,CAAC,OAAO,WAAW,UAAU,CAAC;IAClC,KAAK,OAAO,GAAG;QACb,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;QAC7B,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KACxB,CAAA;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Deduplicates in-flight promises by key. */
|
|
2
|
+
export function withDedupe(fn, { enabled = true, id }) {
|
|
3
|
+
if (!enabled || !id)
|
|
4
|
+
return fn();
|
|
5
|
+
if (withDedupe.cache.get(id))
|
|
6
|
+
return withDedupe.cache.get(id);
|
|
7
|
+
const promise = fn().finally(() => withDedupe.cache.delete(id));
|
|
8
|
+
withDedupe.cache.set(id, promise);
|
|
9
|
+
return promise;
|
|
10
|
+
}
|
|
11
|
+
withDedupe.cache = new Map();
|
|
12
|
+
//# sourceMappingURL=withDedupe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withDedupe.js","sourceRoot":"","sources":["../../../src/core/internal/withDedupe.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,MAAM,UAAU,UAAU,CACxB,EAAuB,EACvB,EAAE,OAAO,GAAG,IAAI,EAAE,EAAE,EAAsB;IAE1C,IAAI,CAAC,OAAO,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,CAAA;IAChC,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAAE,OAAO,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAE,CAAA;IAC9D,MAAM,OAAO,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;IAC/D,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IACjC,OAAO,OAAO,CAAA;AAChB,CAAC;AASD,UAAU,CAAC,KAAK,GAAG,IAAI,GAAG,EAAwB,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as z from 'zod/mini';
|
|
2
|
+
/**
|
|
3
|
+
* Validates an incoming JSON-RPC request against the provider schema.
|
|
4
|
+
*
|
|
5
|
+
* Returns the original request augmented with a `_decoded` property
|
|
6
|
+
* containing the Zod-parsed output (with codec transforms applied).
|
|
7
|
+
*
|
|
8
|
+
* Throws EIP-1193 errors on validation failure:
|
|
9
|
+
* - `4200` if the method is not in the discriminated union
|
|
10
|
+
* - `-32602` if params fail validation
|
|
11
|
+
*/
|
|
12
|
+
export declare function validate<const schema extends z.ZodMiniType>(schema: schema, value: unknown): WithDecoded<schema>;
|
|
13
|
+
/**
|
|
14
|
+
* A validated request with the decoded (Zod-parsed) output attached.
|
|
15
|
+
*
|
|
16
|
+
* Distributes over the union so that switching on `method` narrows
|
|
17
|
+
* both the input and `_decoded` properties together.
|
|
18
|
+
*/
|
|
19
|
+
export type WithDecoded<schema extends z.ZodMiniType> = z.output<schema> extends infer decoded ? decoded extends {
|
|
20
|
+
method: infer m extends string;
|
|
21
|
+
} ? Extract<z.input<schema>, {
|
|
22
|
+
method: m;
|
|
23
|
+
}> & {
|
|
24
|
+
_decoded: decoded;
|
|
25
|
+
} : never : never;
|
|
26
|
+
/**
|
|
27
|
+
* Encodes a decoded (output) value back to its wire (input) format
|
|
28
|
+
* by running codec `reverseTransform` functions.
|
|
29
|
+
*/
|
|
30
|
+
export declare function encode<const schema extends z.ZodMiniType>(schema: schema, value: z.output<schema>): z.input<schema>;
|
|
31
|
+
//# sourceMappingURL=request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../src/core/zod/request.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAE7B;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC,WAAW,EACzD,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,GACb,WAAW,CAAC,MAAM,CAAC,CAcrB;AAiBD;;;;;GAKG;AACH,MAAM,MAAM,WAAW,CAAC,MAAM,SAAS,CAAC,CAAC,WAAW,IAClD,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,MAAM,OAAO,GAClC,OAAO,SAAS;IAAE,MAAM,EAAE,MAAM,CAAC,SAAS,MAAM,CAAA;CAAE,GAChD,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;IAAE,MAAM,EAAE,CAAC,CAAA;CAAE,CAAC,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,GAC/D,KAAK,GACP,KAAK,CAAA;AAEX;;;GAGG;AACH,wBAAgB,MAAM,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC,WAAW,EACvD,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GACtB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAEjB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Provider } from 'ox';
|
|
2
|
+
import * as z from 'zod/mini';
|
|
3
|
+
/**
|
|
4
|
+
* Validates an incoming JSON-RPC request against the provider schema.
|
|
5
|
+
*
|
|
6
|
+
* Returns the original request augmented with a `_decoded` property
|
|
7
|
+
* containing the Zod-parsed output (with codec transforms applied).
|
|
8
|
+
*
|
|
9
|
+
* Throws EIP-1193 errors on validation failure:
|
|
10
|
+
* - `4200` if the method is not in the discriminated union
|
|
11
|
+
* - `-32602` if params fail validation
|
|
12
|
+
*/
|
|
13
|
+
export function validate(schema, value) {
|
|
14
|
+
const result = z.safeParse(schema, value);
|
|
15
|
+
if (result.error) {
|
|
16
|
+
const issue = result.error.issues.at(0);
|
|
17
|
+
if (issue?.code === 'invalid_union' && issue.note === 'No matching discriminator')
|
|
18
|
+
throw new Provider.UnsupportedMethodError({
|
|
19
|
+
message: `Unsupported method "${value?.method}".`,
|
|
20
|
+
});
|
|
21
|
+
throw new Provider.ProviderRpcError(-32602, `Invalid params: ${formatIssues(result.error.issues)}`);
|
|
22
|
+
}
|
|
23
|
+
return { ...value, _decoded: result.data };
|
|
24
|
+
}
|
|
25
|
+
function formatIssues(issues) {
|
|
26
|
+
return issues
|
|
27
|
+
.flatMap((issue) => {
|
|
28
|
+
if (issue.code === 'invalid_union' && issue.errors.length > 0)
|
|
29
|
+
return issue.errors.flatMap((branch) => branch.map((i) => `${[...issue.path, ...i.path].join('.')}: ${i.code === 'invalid_union' && i.errors.length > 0 ? formatIssues([i]) : i.message}`));
|
|
30
|
+
return [`${issue.path.join('.')}: ${issue.message}`];
|
|
31
|
+
})
|
|
32
|
+
.join(', ');
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Encodes a decoded (output) value back to its wire (input) format
|
|
36
|
+
* by running codec `reverseTransform` functions.
|
|
37
|
+
*/
|
|
38
|
+
export function encode(schema, value) {
|
|
39
|
+
return z.encode(schema, value);
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/core/zod/request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;AAC7B,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAE7B;;;;;;;;;GASG;AACH,MAAM,UAAU,QAAQ,CACtB,MAAc,EACd,KAAc;IAEd,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACzC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACvC,IAAI,KAAK,EAAE,IAAI,KAAK,eAAe,IAAK,KAAa,CAAC,IAAI,KAAK,2BAA2B;YACxF,MAAM,IAAI,QAAQ,CAAC,sBAAsB,CAAC;gBACxC,OAAO,EAAE,uBAAwB,KAAa,EAAE,MAAM,IAAI;aAC3D,CAAC,CAAA;QACJ,MAAM,IAAI,QAAQ,CAAC,gBAAgB,CACjC,CAAC,KAAK,EACN,mBAAmB,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CACvD,CAAA;IACH,CAAC;IACD,OAAO,EAAE,GAAI,KAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAW,CAAA;AAC9D,CAAC;AAED,SAAS,YAAY,CAAC,MAAmC;IACvD,OAAO,MAAM;SACV,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACjB,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YAC3D,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CACrC,MAAM,CAAC,GAAG,CACR,CAAC,CAAC,EAAE,EAAE,CACJ,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,eAAe,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAClI,CACF,CAAA;QACH,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;IACtD,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAA;AACf,CAAC;AAeD;;;GAGG;AACH,MAAM,UAAU,MAAM,CACpB,MAAc,EACd,KAAuB;IAEvB,OAAQ,CAAwC,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;AACxE,CAAC"}
|