@prism-ing/wallet 0.1.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.
Files changed (113) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/LICENSE +21 -0
  3. package/README.md +596 -0
  4. package/SPEC.md +192 -0
  5. package/dist/backends/squads-recovery-backend.d.ts +59 -0
  6. package/dist/backends/squads-recovery-backend.d.ts.map +1 -0
  7. package/dist/backends/squads-recovery-backend.js +81 -0
  8. package/dist/backends/squads-recovery-backend.js.map +1 -0
  9. package/dist/backends/squads-types.d.ts +74 -0
  10. package/dist/backends/squads-types.d.ts.map +1 -0
  11. package/dist/backends/squads-types.js +22 -0
  12. package/dist/backends/squads-types.js.map +1 -0
  13. package/dist/backends/zerodev-policy-mapper.d.ts +41 -0
  14. package/dist/backends/zerodev-policy-mapper.d.ts.map +1 -0
  15. package/dist/backends/zerodev-policy-mapper.js +127 -0
  16. package/dist/backends/zerodev-policy-mapper.js.map +1 -0
  17. package/dist/backends/zerodev-session-backend.d.ts +43 -0
  18. package/dist/backends/zerodev-session-backend.d.ts.map +1 -0
  19. package/dist/backends/zerodev-session-backend.js +63 -0
  20. package/dist/backends/zerodev-session-backend.js.map +1 -0
  21. package/dist/backends/zerodev-types.d.ts +104 -0
  22. package/dist/backends/zerodev-types.d.ts.map +1 -0
  23. package/dist/backends/zerodev-types.js +13 -0
  24. package/dist/backends/zerodev-types.js.map +1 -0
  25. package/dist/create-wallet.d.ts +89 -0
  26. package/dist/create-wallet.d.ts.map +1 -0
  27. package/dist/create-wallet.js +235 -0
  28. package/dist/create-wallet.js.map +1 -0
  29. package/dist/cross-chain.d.ts +64 -0
  30. package/dist/cross-chain.d.ts.map +1 -0
  31. package/dist/cross-chain.js +200 -0
  32. package/dist/cross-chain.js.map +1 -0
  33. package/dist/errors.d.ts +115 -0
  34. package/dist/errors.d.ts.map +1 -0
  35. package/dist/errors.js +97 -0
  36. package/dist/errors.js.map +1 -0
  37. package/dist/index.d.ts +55 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +52 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/internal/base58.d.ts +8 -0
  42. package/dist/internal/base58.d.ts.map +1 -0
  43. package/dist/internal/base58.js +34 -0
  44. package/dist/internal/base58.js.map +1 -0
  45. package/dist/internal/eip712.d.ts +41 -0
  46. package/dist/internal/eip712.d.ts.map +1 -0
  47. package/dist/internal/eip712.js +182 -0
  48. package/dist/internal/eip712.js.map +1 -0
  49. package/dist/internal/file-spend-persistence.d.ts +9 -0
  50. package/dist/internal/file-spend-persistence.d.ts.map +1 -0
  51. package/dist/internal/file-spend-persistence.js +58 -0
  52. package/dist/internal/file-spend-persistence.js.map +1 -0
  53. package/dist/internal/onebalance-client.d.ts +59 -0
  54. package/dist/internal/onebalance-client.d.ts.map +1 -0
  55. package/dist/internal/onebalance-client.js +2 -0
  56. package/dist/internal/onebalance-client.js.map +1 -0
  57. package/dist/internal/onebalance-http-client.d.ts +25 -0
  58. package/dist/internal/onebalance-http-client.d.ts.map +1 -0
  59. package/dist/internal/onebalance-http-client.js +161 -0
  60. package/dist/internal/onebalance-http-client.js.map +1 -0
  61. package/dist/internal/onebalance-types.d.ts +201 -0
  62. package/dist/internal/onebalance-types.d.ts.map +1 -0
  63. package/dist/internal/onebalance-types.js +39 -0
  64. package/dist/internal/onebalance-types.js.map +1 -0
  65. package/dist/internal/platform.d.ts +14 -0
  66. package/dist/internal/platform.d.ts.map +1 -0
  67. package/dist/internal/platform.js +22 -0
  68. package/dist/internal/platform.js.map +1 -0
  69. package/dist/internal/quote-verifier.d.ts +71 -0
  70. package/dist/internal/quote-verifier.d.ts.map +1 -0
  71. package/dist/internal/quote-verifier.js +172 -0
  72. package/dist/internal/quote-verifier.js.map +1 -0
  73. package/dist/internal/recovery-manager.d.ts +29 -0
  74. package/dist/internal/recovery-manager.d.ts.map +1 -0
  75. package/dist/internal/recovery-manager.js +161 -0
  76. package/dist/internal/recovery-manager.js.map +1 -0
  77. package/dist/result.d.ts +132 -0
  78. package/dist/result.d.ts.map +1 -0
  79. package/dist/result.js +114 -0
  80. package/dist/result.js.map +1 -0
  81. package/dist/schemas.d.ts +184 -0
  82. package/dist/schemas.d.ts.map +1 -0
  83. package/dist/schemas.js +76 -0
  84. package/dist/schemas.js.map +1 -0
  85. package/dist/session-keys.d.ts +53 -0
  86. package/dist/session-keys.d.ts.map +1 -0
  87. package/dist/session-keys.js +345 -0
  88. package/dist/session-keys.js.map +1 -0
  89. package/dist/signers/node-signing-backend.d.ts +11 -0
  90. package/dist/signers/node-signing-backend.d.ts.map +1 -0
  91. package/dist/signers/node-signing-backend.js +120 -0
  92. package/dist/signers/node-signing-backend.js.map +1 -0
  93. package/dist/signers/ows-adapter.d.ts +70 -0
  94. package/dist/signers/ows-adapter.d.ts.map +1 -0
  95. package/dist/signers/ows-adapter.js +53 -0
  96. package/dist/signers/ows-adapter.js.map +1 -0
  97. package/dist/signers/ows-signing-backend.d.ts +25 -0
  98. package/dist/signers/ows-signing-backend.d.ts.map +1 -0
  99. package/dist/signers/ows-signing-backend.js +192 -0
  100. package/dist/signers/ows-signing-backend.js.map +1 -0
  101. package/dist/signers/secure-enclave-backend.d.ts +19 -0
  102. package/dist/signers/secure-enclave-backend.d.ts.map +1 -0
  103. package/dist/signers/secure-enclave-backend.js +201 -0
  104. package/dist/signers/secure-enclave-backend.js.map +1 -0
  105. package/dist/signers/secure-enclave-types.d.ts +98 -0
  106. package/dist/signers/secure-enclave-types.d.ts.map +1 -0
  107. package/dist/signers/secure-enclave-types.js +12 -0
  108. package/dist/signers/secure-enclave-types.js.map +1 -0
  109. package/dist/types.d.ts +371 -0
  110. package/dist/types.d.ts.map +1 -0
  111. package/dist/types.js +2 -0
  112. package/dist/types.js.map +1 -0
  113. package/package.json +85 -0
@@ -0,0 +1,43 @@
1
+ import type { SessionKeyBackend } from '../types.js';
2
+ import type { ZeroDevSessionBackendConfig } from './zerodev-types.js';
3
+ /**
4
+ * Create a ZeroDev on-chain session key backend.
5
+ *
6
+ * @remarks
7
+ * The backend maps Prism session key policies to ZeroDev on-chain
8
+ * permission validators. The `config.registerOnChain` and
9
+ * `config.revokeOnChain` functions should be implemented by the consumer
10
+ * using `@zerodev/permissions`:
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * import { toPermissionValidator, toECDSASigner } from '@zerodev/permissions';
15
+ * import { toCallPolicy, toTimestampPolicy, toGasPolicy } from '@zerodev/permissions/policies';
16
+ *
17
+ * const backend = createZeroDevSessionBackend({
18
+ * registerOnChain: async (sessionAddress, policies) => {
19
+ * const signer = await toECDSASigner({ signer: sessionPrivateKey });
20
+ * const zerodevPolicies = policies.map(mapToZeroDevSdkPolicy);
21
+ * const validator = await toPermissionValidator(client, {
22
+ * signer,
23
+ * policies: zerodevPolicies,
24
+ * entryPoint: entryPoint07,
25
+ * kernelVersion: '0.3.1',
26
+ * });
27
+ * // ... install validator, return tx hash
28
+ * return txHash;
29
+ * },
30
+ * revokeOnChain: async (sessionAddress) => {
31
+ * // ... remove validator, return tx hash
32
+ * return txHash;
33
+ * },
34
+ * });
35
+ *
36
+ * const manager = createSessionKeyManager(rootSigner, backend);
37
+ * ```
38
+ *
39
+ * @param config - ZeroDev backend configuration with registrar functions.
40
+ * @returns A {@link SessionKeyBackend} that enforces policies on-chain.
41
+ */
42
+ export declare function createZeroDevSessionBackend(config: ZeroDevSessionBackendConfig): SessionKeyBackend;
43
+ //# sourceMappingURL=zerodev-session-backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zerodev-session-backend.d.ts","sourceRoot":"","sources":["../../src/backends/zerodev-session-backend.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAoB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEvE,OAAO,KAAK,EAAE,2BAA2B,EAAqB,MAAM,oBAAoB,CAAC;AAMzF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,2BAA2B,GAClC,iBAAiB,CA2BnB"}
@@ -0,0 +1,63 @@
1
+ import { mapSessionPolicyToZeroDev } from './zerodev-policy-mapper.js';
2
+ // ---------------------------------------------------------------------------
3
+ // Factory
4
+ // ---------------------------------------------------------------------------
5
+ /**
6
+ * Create a ZeroDev on-chain session key backend.
7
+ *
8
+ * @remarks
9
+ * The backend maps Prism session key policies to ZeroDev on-chain
10
+ * permission validators. The `config.registerOnChain` and
11
+ * `config.revokeOnChain` functions should be implemented by the consumer
12
+ * using `@zerodev/permissions`:
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * import { toPermissionValidator, toECDSASigner } from '@zerodev/permissions';
17
+ * import { toCallPolicy, toTimestampPolicy, toGasPolicy } from '@zerodev/permissions/policies';
18
+ *
19
+ * const backend = createZeroDevSessionBackend({
20
+ * registerOnChain: async (sessionAddress, policies) => {
21
+ * const signer = await toECDSASigner({ signer: sessionPrivateKey });
22
+ * const zerodevPolicies = policies.map(mapToZeroDevSdkPolicy);
23
+ * const validator = await toPermissionValidator(client, {
24
+ * signer,
25
+ * policies: zerodevPolicies,
26
+ * entryPoint: entryPoint07,
27
+ * kernelVersion: '0.3.1',
28
+ * });
29
+ * // ... install validator, return tx hash
30
+ * return txHash;
31
+ * },
32
+ * revokeOnChain: async (sessionAddress) => {
33
+ * // ... remove validator, return tx hash
34
+ * return txHash;
35
+ * },
36
+ * });
37
+ *
38
+ * const manager = createSessionKeyManager(rootSigner, backend);
39
+ * ```
40
+ *
41
+ * @param config - ZeroDev backend configuration with registrar functions.
42
+ * @returns A {@link SessionKeyBackend} that enforces policies on-chain.
43
+ */
44
+ export function createZeroDevSessionBackend(config) {
45
+ const backend = {
46
+ async registerSessionKey(sessionAddress, policy) {
47
+ const mapOptions = {};
48
+ if (config.defaultGasBudgetWei !== undefined) {
49
+ mapOptions.gasBudgetWei = config.defaultGasBudgetWei;
50
+ }
51
+ if (config.callPolicyVersion !== undefined) {
52
+ mapOptions.callPolicyVersion = config.callPolicyVersion;
53
+ }
54
+ const zeroDevPolicies = mapSessionPolicyToZeroDev(policy, mapOptions);
55
+ return config.registerOnChain(sessionAddress, zeroDevPolicies);
56
+ },
57
+ async revokeSessionKey(sessionAddress) {
58
+ return config.revokeOnChain(sessionAddress);
59
+ },
60
+ };
61
+ return backend;
62
+ }
63
+ //# sourceMappingURL=zerodev-session-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zerodev-session-backend.js","sourceRoot":"","sources":["../../src/backends/zerodev-session-backend.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAGvE,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,UAAU,2BAA2B,CACzC,MAAmC;IAEnC,MAAM,OAAO,GAAsB;QACjC,KAAK,CAAC,kBAAkB,CACtB,cAAuB,EACvB,MAAwB;YAExB,MAAM,UAAU,GAGZ,EAAE,CAAC;YACP,IAAI,MAAM,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;gBAC7C,UAAU,CAAC,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC;YACvD,CAAC;YACD,IAAI,MAAM,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBAC3C,UAAU,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;YAC1D,CAAC;YACD,MAAM,eAAe,GAAG,yBAAyB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAEtE,OAAO,MAAM,CAAC,eAAe,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;QACjE,CAAC;QAED,KAAK,CAAC,gBAAgB,CAAC,cAAuB;YAC5C,OAAO,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QAC9C,CAAC;KACF,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Types for the ZeroDev on-chain session key backend.
3
+ *
4
+ * @remarks
5
+ * These types model the ZeroDev Kernel v3 permission system:
6
+ * - Permission validators enforce policies at the smart contract level
7
+ * - Policies restrict what a session key can do (calls, gas, rate, time)
8
+ * - The backend maps Prism's {@link SessionKeyPolicy} to on-chain policies
9
+ *
10
+ * @packageDocumentation
11
+ */
12
+ import type { Address } from '../result.js';
13
+ /** Supported call policy versions from ZeroDev. */
14
+ export type CallPolicyVersion = '0.0.1' | '0.0.2' | '0.0.3' | '0.0.4' | '0.0.5';
15
+ /** Recommended production call policy version (Alchemy bundler compatible). */
16
+ export declare const RECOMMENDED_CALL_POLICY_VERSION: CallPolicyVersion;
17
+ /**
18
+ * Parameter condition for call policy argument restrictions.
19
+ *
20
+ * @remarks
21
+ * Maps 1:1 to ZeroDev's `ParamCondition` enum in `@zerodev/permissions`.
22
+ */
23
+ export type ParamCondition = 'EQUAL' | 'GREATER_THAN' | 'LESS_THAN' | 'GREATER_THAN_OR_EQUAL' | 'LESS_THAN_OR_EQUAL' | 'NOT_EQUAL' | 'ONE_OF';
24
+ /** Numeric values for on-chain encoding. */
25
+ export declare const PARAM_CONDITION_VALUES: Record<ParamCondition, number>;
26
+ /**
27
+ * A mapped on-chain policy ready for ZeroDev registration.
28
+ *
29
+ * @remarks
30
+ * Each policy has a type discriminator for exhaustive matching and
31
+ * the data payload needed for on-chain encoding.
32
+ */
33
+ export type ZeroDevPolicy = ZeroDevTimestampPolicy | ZeroDevCallPolicy | ZeroDevGasPolicy | ZeroDevRateLimitPolicy | ZeroDevSudoPolicy;
34
+ export interface ZeroDevTimestampPolicy {
35
+ readonly type: 'timestamp';
36
+ readonly validAfter: number;
37
+ readonly validUntil: number;
38
+ }
39
+ export interface ZeroDevCallPolicy {
40
+ readonly type: 'call';
41
+ readonly version: CallPolicyVersion;
42
+ readonly permissions: readonly ZeroDevCallPermission[];
43
+ }
44
+ export interface ZeroDevCallPermission {
45
+ readonly target: Address;
46
+ readonly functionSelector: string;
47
+ readonly valueLimit: bigint;
48
+ readonly args: readonly ZeroDevParamRule[];
49
+ }
50
+ export interface ZeroDevParamRule {
51
+ readonly condition: ParamCondition;
52
+ readonly offset: number;
53
+ readonly value: string;
54
+ }
55
+ export interface ZeroDevGasPolicy {
56
+ readonly type: 'gas';
57
+ readonly maxGasAllowedWei: bigint;
58
+ }
59
+ export interface ZeroDevRateLimitPolicy {
60
+ readonly type: 'rate_limit';
61
+ readonly count: number;
62
+ readonly interval: number;
63
+ }
64
+ export interface ZeroDevSudoPolicy {
65
+ readonly type: 'sudo';
66
+ }
67
+ /**
68
+ * Configuration for the ZeroDev session key backend.
69
+ *
70
+ * @remarks
71
+ * The `registrar` function is the integration point with ZeroDev's SDK.
72
+ * Consumers provide their own implementation that calls `@zerodev/permissions`
73
+ * functions (`toPermissionValidator`, `toCallPolicy`, etc.).
74
+ */
75
+ export interface ZeroDevSessionBackendConfig {
76
+ /**
77
+ * Register policies on-chain. Returns a transaction hash.
78
+ *
79
+ * @remarks
80
+ * This function should:
81
+ * 1. Create an ECDSA signer via `toECDSASigner`
82
+ * 2. Map `ZeroDevPolicy[]` to ZeroDev policy objects
83
+ * 3. Call `toPermissionValidator` with the signer + policies
84
+ * 4. Install the permission via `toInitConfig` or enable mode
85
+ */
86
+ readonly registerOnChain: (sessionAddress: Address, policies: readonly ZeroDevPolicy[]) => Promise<string>;
87
+ /**
88
+ * Revoke a session key on-chain. Returns a transaction hash.
89
+ *
90
+ * @remarks
91
+ * Should remove the permission validator from the Kernel account.
92
+ */
93
+ readonly revokeOnChain: (sessionAddress: Address) => Promise<string>;
94
+ /**
95
+ * Default gas budget per session in wei.
96
+ * Defaults to 0.1 ETH (100000000000000000n) if not specified.
97
+ */
98
+ readonly defaultGasBudgetWei?: bigint;
99
+ /**
100
+ * Call policy version. Defaults to V0.0.4 (Alchemy bundler compatible).
101
+ */
102
+ readonly callPolicyVersion?: CallPolicyVersion;
103
+ }
104
+ //# sourceMappingURL=zerodev-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zerodev-types.d.ts","sourceRoot":"","sources":["../../src/backends/zerodev-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,mDAAmD;AACnD,MAAM,MAAM,iBAAiB,GACzB,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,CAAC;AAEZ,+EAA+E;AAC/E,eAAO,MAAM,+BAA+B,EAAE,iBAA2B,CAAC;AAE1E;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GACtB,OAAO,GACP,cAAc,GACd,WAAW,GACX,uBAAuB,GACvB,oBAAoB,GACpB,WAAW,GACX,QAAQ,CAAC;AAEb,4CAA4C;AAC5C,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAQxD,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GACrB,sBAAsB,GACtB,iBAAiB,GACjB,gBAAgB,GAChB,sBAAsB,GACtB,iBAAiB,CAAC;AAEtB,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACxD;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;;;;;;;OASG;IACH,QAAQ,CAAC,eAAe,EAAE,CACxB,cAAc,EAAE,OAAO,EACvB,QAAQ,EAAE,SAAS,aAAa,EAAE,KAC/B,OAAO,CAAC,MAAM,CAAC,CAAC;IAErB;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,EAAE,CACtB,cAAc,EAAE,OAAO,KACpB,OAAO,CAAC,MAAM,CAAC,CAAC;IAErB;;;OAGG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAEtC;;OAEG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CAChD"}
@@ -0,0 +1,13 @@
1
+ /** Recommended production call policy version (Alchemy bundler compatible). */
2
+ export const RECOMMENDED_CALL_POLICY_VERSION = '0.0.4';
3
+ /** Numeric values for on-chain encoding. */
4
+ export const PARAM_CONDITION_VALUES = {
5
+ EQUAL: 0,
6
+ GREATER_THAN: 1,
7
+ LESS_THAN: 2,
8
+ GREATER_THAN_OR_EQUAL: 3,
9
+ LESS_THAN_OR_EQUAL: 4,
10
+ NOT_EQUAL: 5,
11
+ ONE_OF: 6,
12
+ };
13
+ //# sourceMappingURL=zerodev-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zerodev-types.js","sourceRoot":"","sources":["../../src/backends/zerodev-types.ts"],"names":[],"mappings":"AAqBA,+EAA+E;AAC/E,MAAM,CAAC,MAAM,+BAA+B,GAAsB,OAAO,CAAC;AAiB1E,4CAA4C;AAC5C,MAAM,CAAC,MAAM,sBAAsB,GAAmC;IACpE,KAAK,EAAE,CAAC;IACR,YAAY,EAAE,CAAC;IACf,SAAS,EAAE,CAAC;IACZ,qBAAqB,EAAE,CAAC;IACxB,kBAAkB,EAAE,CAAC;IACrB,SAAS,EAAE,CAAC;IACZ,MAAM,EAAE,CAAC;CACD,CAAC"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Primary entry point for @prism-ing/wallet.
3
+ *
4
+ * @remarks
5
+ * {@link createWallet} is the factory function that initializes a complete
6
+ * wallet account with OWS signing, OneBalance accounts, and optional recovery.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import { createWallet } from '@prism-ing/wallet';
11
+ *
12
+ * const wallet = await createWallet({
13
+ * enclaveOptions: { preferHardware: true, appId: 'com.prism.app' },
14
+ * oneBalanceApiKey: process.env.ONEBALANCE_API_KEY,
15
+ * recovery: { evm: { guardians: [guardianAddr], threshold: 1 } },
16
+ * });
17
+ *
18
+ * if (!wallet.ok) {
19
+ * console.error('Wallet creation failed:', wallet.error.code);
20
+ * return;
21
+ * }
22
+ *
23
+ * const balance = await wallet.value.getBalance();
24
+ * ```
25
+ *
26
+ * @packageDocumentation
27
+ */
28
+ import type { Result } from './result.js';
29
+ import type { WalletAccount, WalletPendingRecovery, WalletConfig, RecoveryBackends } from './types.js';
30
+ import type { WalletError } from './errors.js';
31
+ import type { OWSAdapter, SigningBackend } from './signers/ows-adapter.js';
32
+ import type { SecureEnclaveNativeBridge } from './signers/secure-enclave-types.js';
33
+ import type { OneBalanceClient } from './internal/onebalance-client.js';
34
+ /** Dependencies required by createWallet. Injected via factory. */
35
+ export interface WalletDeps {
36
+ readonly createSigner: (config: WalletConfig) => Promise<Result<OWSAdapter, WalletError>>;
37
+ readonly oneBalanceClient: OneBalanceClient;
38
+ readonly recoveryBackends?: RecoveryBackends;
39
+ readonly signingBackend?: SigningBackend;
40
+ }
41
+ /**
42
+ * Create a fully initialized wallet account.
43
+ *
44
+ * @param config - Wallet configuration (validated via Zod).
45
+ * @param deps - Injectable dependencies (for testing).
46
+ * @returns A `Result` containing either a `WalletAccount` or a `WalletError`.
47
+ */
48
+ export declare function createWallet(config: WalletConfig, deps: WalletDeps): Promise<Result<WalletAccount, WalletError>>;
49
+ /**
50
+ * Create a wallet with production dependencies.
51
+ *
52
+ * @remarks
53
+ * This is the convenience wrapper that most consumers will use.
54
+ * For testing, use {@link createWallet} directly with mock deps.
55
+ *
56
+ * Wires:
57
+ * - iOS: Secure Enclave signing backend (when `nativeBridge` is provided and platform is iOS)
58
+ * - Node.js: OWS software signing backend (secp256k1 + ed25519)
59
+ * - OneBalance HTTP client for account abstraction + cross-chain
60
+ *
61
+ * @param config - Wallet configuration including OneBalance API key.
62
+ * @param options - Optional overrides for platform-specific backends.
63
+ * @returns A Result with the WalletAccount or a WalletError.
64
+ */
65
+ export declare function createProductionWallet(config: WalletConfig, options?: ProductionWalletOptions): Promise<Result<WalletAccount | WalletPendingRecovery, WalletError>>;
66
+ /** Options for {@link createProductionWallet}. */
67
+ export interface ProductionWalletOptions {
68
+ /** iOS Secure Enclave native bridge. When provided on iOS, uses hardware-backed signing. */
69
+ readonly nativeBridge?: SecureEnclaveNativeBridge;
70
+ /** Custom key tag for the iOS Keychain. Defaults to `'prism-wallet-default'`. */
71
+ readonly keyTag?: string;
72
+ /** Custom biometric prompt text. Defaults to `'Authorize transaction'`. */
73
+ readonly biometricPrompt?: string;
74
+ /** Recovery backends for guardian-based signer rotation. */
75
+ readonly recoveryBackends?: RecoveryBackends;
76
+ }
77
+ /**
78
+ * Type guard: is this a wallet pending recovery setup?
79
+ *
80
+ * @param wallet - A wallet returned by {@link createProductionWallet}.
81
+ * @returns `true` if the wallet requires recovery setup before full activation.
82
+ */
83
+ export declare function isPendingRecovery(wallet: WalletAccount | WalletPendingRecovery): wallet is WalletPendingRecovery;
84
+ /**
85
+ * Wrap a WalletAccount in a WalletPendingRecovery that forces guardian setup.
86
+ * @internal — exported for test reuse only.
87
+ */
88
+ export declare function createPendingRecoveryWrapper(wallet: WalletAccount): WalletPendingRecovery;
89
+ //# sourceMappingURL=create-wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-wallet.d.ts","sourceRoot":"","sources":["../src/create-wallet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,YAAY,EAAE,gBAAgB,EAA6B,MAAM,YAAY,CAAC;AAClI,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAI3E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAGnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAsBxE,mEAAmE;AACnE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IAC1F,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IAC7C,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;CAC1C;AAMD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAyH7C;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,MAAM,CAAC,aAAa,GAAG,qBAAqB,EAAE,WAAW,CAAC,CAAC,CAqCrE;AAED,kDAAkD;AAClD,MAAM,WAAW,uBAAuB;IACtC,4FAA4F;IAC5F,QAAQ,CAAC,YAAY,CAAC,EAAE,yBAAyB,CAAC;IAClD,iFAAiF;IACjF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,2EAA2E;IAC3E,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,4DAA4D;IAC5D,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CAC9C;AAMD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,GAAG,qBAAqB,GAC5C,MAAM,IAAI,qBAAqB,CAEjC;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,aAAa,GACpB,qBAAqB,CA2CvB"}
@@ -0,0 +1,235 @@
1
+ import { Ok, Err, fromPromise, toAddress } from './result.js';
2
+ import { walletErrors } from './errors.js';
3
+ import { WalletConfigSchema } from './schemas.js';
4
+ import { createOWSAdapter } from './signers/ows-adapter.js';
5
+ import { createOWSSigningBackend } from './signers/ows-signing-backend.js';
6
+ import { createSecureEnclaveBackend } from './signers/secure-enclave-backend.js';
7
+ import { detectPlatform } from './internal/platform.js';
8
+ import { createOneBalanceHttpClient } from './internal/onebalance-http-client.js';
9
+ import { createRecoveryManager } from './internal/recovery-manager.js';
10
+ import { executeCrossChain } from './cross-chain.js';
11
+ // ---------------------------------------------------------------------------
12
+ // Module-level Constants
13
+ // ---------------------------------------------------------------------------
14
+ /** Maps OneBalance execution statuses to wallet TxStatus. */
15
+ const EXECUTION_STATUS_MAP = {
16
+ PENDING: 'submitted',
17
+ EXECUTING: 'submitted',
18
+ COMPLETED: 'confirmed',
19
+ FAILED: 'failed',
20
+ };
21
+ // ---------------------------------------------------------------------------
22
+ // Factory
23
+ // ---------------------------------------------------------------------------
24
+ /**
25
+ * Create a fully initialized wallet account.
26
+ *
27
+ * @param config - Wallet configuration (validated via Zod).
28
+ * @param deps - Injectable dependencies (for testing).
29
+ * @returns A `Result` containing either a `WalletAccount` or a `WalletError`.
30
+ */
31
+ export async function createWallet(config, deps) {
32
+ // 1. Parse and validate config at the boundary
33
+ const parsed = WalletConfigSchema.safeParse(config);
34
+ if (!parsed.success) {
35
+ const firstIssue = parsed.error.issues[0];
36
+ return Err(walletErrors.validation(firstIssue?.path.join('.') ?? 'unknown', firstIssue?.message ?? 'Invalid configuration'));
37
+ }
38
+ // 2. Create OWS signer
39
+ const signerResult = await deps.createSigner(config);
40
+ if (!signerResult.ok)
41
+ return signerResult;
42
+ const signer = signerResult.value;
43
+ // 3. Predict OneBalance smart account address
44
+ const accountType = config.accountType ?? 'kernel-v3.1-ecdsa';
45
+ const predictResult = await fromPromise(deps.oneBalanceClient.predictAddress({
46
+ type: accountType,
47
+ signerAddress: signer.evmAddress,
48
+ }), () => walletErrors.oneBalanceTimeout(5000));
49
+ if (!predictResult.ok)
50
+ return predictResult;
51
+ const predicted = predictResult.value;
52
+ const evmAddressResult = toAddress(predicted.predictedAddress);
53
+ if (!evmAddressResult.ok) {
54
+ return Err(walletErrors.validation('predictedAddress', 'Invalid address from OneBalance'));
55
+ }
56
+ const evmAddress = evmAddressResult.value;
57
+ // 4. Build the MultiAccount for OneBalance API calls
58
+ const accounts = [
59
+ {
60
+ type: accountType,
61
+ signerAddress: signer.evmAddress,
62
+ accountAddress: evmAddress,
63
+ },
64
+ ];
65
+ // 5. Build the WalletAccount
66
+ const walletAccount = {
67
+ signer,
68
+ evmAddress,
69
+ solanaAddress: signer.solanaAddress,
70
+ async getBalance() {
71
+ const balance = await deps.oneBalanceClient.getAggregatedBalance(accounts);
72
+ return {
73
+ totalUsd: balance.totalUsd,
74
+ breakdown: balance.breakdown.map((entry) => {
75
+ // Parse CAIP-19 assetType (e.g. "eip155:8453/erc20:0x...") into chain info
76
+ const chainPart = entry.assetType.split('/')[0] ?? entry.assetType;
77
+ const chainIdStr = chainPart.split(':')[1] ?? '0';
78
+ return {
79
+ chainId: parseInt(chainIdStr, 10) || 0,
80
+ chainName: chainPart,
81
+ balanceUsd: entry.fiatValue,
82
+ tokens: [{
83
+ symbol: entry.assetType.split('/')[1]?.split(':')[0] ?? 'unknown',
84
+ address: entry.assetType,
85
+ amount: entry.amount,
86
+ amountUsd: entry.fiatValue,
87
+ decimals: 18,
88
+ }],
89
+ };
90
+ }),
91
+ };
92
+ },
93
+ async deposit(params) {
94
+ const result = await executeCrossChain(deps.oneBalanceClient, signer, {
95
+ fromAsset: `eip155:${params.chainId}/erc20:${params.token}`,
96
+ toAsset: `eip155:${params.chainId}/erc20:${params.token}`,
97
+ amount: params.amount.toString(),
98
+ }, accounts, deps.signingBackend !== undefined ? { backend: deps.signingBackend } : undefined);
99
+ if (!result.ok) {
100
+ return { txHash: '', status: 'failed' };
101
+ }
102
+ return {
103
+ txHash: result.value.quoteId,
104
+ status: 'submitted',
105
+ };
106
+ },
107
+ async getTransactionStatus(quoteId) {
108
+ const statusResult = await fromPromise(deps.oneBalanceClient.getExecutionStatus(quoteId), () => walletErrors.oneBalanceTimeout(5000));
109
+ if (!statusResult.ok) {
110
+ return { txHash: quoteId, status: 'failed' };
111
+ }
112
+ const raw = statusResult.value;
113
+ const mapped = EXECUTION_STATUS_MAP[raw.status];
114
+ return {
115
+ txHash: quoteId,
116
+ status: mapped ?? 'submitted',
117
+ };
118
+ },
119
+ recover() {
120
+ return createRecoveryManager(signer.evmAddress, signer.solanaAddress, deps.recoveryBackends ?? {});
121
+ },
122
+ };
123
+ return Ok(walletAccount);
124
+ }
125
+ // ---------------------------------------------------------------------------
126
+ // Default Factory (production wiring)
127
+ // ---------------------------------------------------------------------------
128
+ /**
129
+ * Create a wallet with production dependencies.
130
+ *
131
+ * @remarks
132
+ * This is the convenience wrapper that most consumers will use.
133
+ * For testing, use {@link createWallet} directly with mock deps.
134
+ *
135
+ * Wires:
136
+ * - iOS: Secure Enclave signing backend (when `nativeBridge` is provided and platform is iOS)
137
+ * - Node.js: OWS software signing backend (secp256k1 + ed25519)
138
+ * - OneBalance HTTP client for account abstraction + cross-chain
139
+ *
140
+ * @param config - Wallet configuration including OneBalance API key.
141
+ * @param options - Optional overrides for platform-specific backends.
142
+ * @returns A Result with the WalletAccount or a WalletError.
143
+ */
144
+ export async function createProductionWallet(config, options) {
145
+ const platform = detectPlatform();
146
+ const nativeBridge = options?.nativeBridge;
147
+ const signerFactory = () => {
148
+ if (platform === 'ios' && nativeBridge !== undefined) {
149
+ const enclaveConfig = {
150
+ nativeBridge,
151
+ ...(options?.keyTag !== undefined && { keyTag: options.keyTag }),
152
+ ...(options?.biometricPrompt !== undefined && { biometricPrompt: options.biometricPrompt }),
153
+ };
154
+ const backend = createSecureEnclaveBackend(enclaveConfig);
155
+ return createOWSAdapter(backend);
156
+ }
157
+ const backend = createOWSSigningBackend(config.signer);
158
+ return createOWSAdapter(backend);
159
+ };
160
+ const oneBalanceClient = createOneBalanceHttpClient({
161
+ apiKey: config.oneBalanceApiKey,
162
+ });
163
+ const deps = {
164
+ createSigner: signerFactory,
165
+ oneBalanceClient,
166
+ ...(options?.recoveryBackends !== undefined && { recoveryBackends: options.recoveryBackends }),
167
+ };
168
+ const walletResult = await createWallet(config, deps);
169
+ if (!walletResult.ok)
170
+ return walletResult;
171
+ // On iOS, wrap in WalletPendingRecovery to force guardian setup
172
+ if (platform === 'ios') {
173
+ return Ok(createPendingRecoveryWrapper(walletResult.value));
174
+ }
175
+ return walletResult;
176
+ }
177
+ // ---------------------------------------------------------------------------
178
+ // Pending Recovery Wrapper (iOS only)
179
+ // ---------------------------------------------------------------------------
180
+ /**
181
+ * Type guard: is this a wallet pending recovery setup?
182
+ *
183
+ * @param wallet - A wallet returned by {@link createProductionWallet}.
184
+ * @returns `true` if the wallet requires recovery setup before full activation.
185
+ */
186
+ export function isPendingRecovery(wallet) {
187
+ return 'activateWallet' in wallet;
188
+ }
189
+ /**
190
+ * Wrap a WalletAccount in a WalletPendingRecovery that forces guardian setup.
191
+ * @internal — exported for test reuse only.
192
+ */
193
+ export function createPendingRecoveryWrapper(wallet) {
194
+ let guardianCount = 0;
195
+ const recoveryManager = wallet.recover();
196
+ const trackedRecovery = {
197
+ async setupPasskey() {
198
+ const result = await recoveryManager.setupPasskey();
199
+ guardianCount++;
200
+ return result;
201
+ },
202
+ async addDeviceGuardian(evmAddr, solAddr) {
203
+ await recoveryManager.addDeviceGuardian(evmAddr, solAddr);
204
+ guardianCount++;
205
+ },
206
+ async addContactGuardian(addr) {
207
+ await recoveryManager.addContactGuardian(addr);
208
+ guardianCount++;
209
+ },
210
+ initiateRecovery(newSigner) {
211
+ return recoveryManager.initiateRecovery(newSigner);
212
+ },
213
+ };
214
+ return {
215
+ signer: wallet.signer,
216
+ evmAddress: wallet.evmAddress,
217
+ solanaAddress: wallet.solanaAddress,
218
+ getBalance() {
219
+ return wallet.getBalance();
220
+ },
221
+ getTransactionStatus(quoteId) {
222
+ return wallet.getTransactionStatus(quoteId);
223
+ },
224
+ recover() {
225
+ return trackedRecovery;
226
+ },
227
+ activateWallet() {
228
+ if (guardianCount === 0) {
229
+ return Err(walletErrors.recoveryNotConfigured('ios'));
230
+ }
231
+ return Ok(wallet);
232
+ },
233
+ };
234
+ }
235
+ //# sourceMappingURL=create-wallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-wallet.js","sourceRoot":"","sources":["../src/create-wallet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Cross-chain execution via OneBalance Resource Locks.
3
+ *
4
+ * @remarks
5
+ * Orchestrates the quote → sign → execute flow. Signs EVM operations
6
+ * via EIP-712 typed data and Solana operations via transaction signing.
7
+ * Resource Locks enable instant cross-chain execution — no waiting for
8
+ * source chain finality.
9
+ *
10
+ * @packageDocumentation
11
+ */
12
+ import type { Result } from './result.js';
13
+ import type { PrismSigner } from './types.js';
14
+ import type { WalletError } from './errors.js';
15
+ import type { SigningBackend } from './signers/ows-adapter.js';
16
+ import type { OneBalanceClient } from './internal/onebalance-client.js';
17
+ import type { QuoteRequest, ExecutionStatus } from './internal/onebalance-types.js';
18
+ /** Parameters for requesting a cross-chain quote. */
19
+ export interface CrossChainQuoteParams {
20
+ /** Source asset identifier (aggregated like "ob:usdc" or CAIP-19). */
21
+ readonly fromAsset: string;
22
+ /** Destination asset identifier. */
23
+ readonly toAsset: string;
24
+ /** Amount in smallest unit (as string). */
25
+ readonly amount: string;
26
+ /** Slippage tolerance in basis points (1-10000). */
27
+ readonly slippageTolerance?: number;
28
+ /** Optional recipient address in CAIP-10 format. */
29
+ readonly recipient?: string;
30
+ /**
31
+ * The wallet's smart account address for quote verification.
32
+ * When provided, verifies that EVM operation senders match this address.
33
+ */
34
+ readonly accountAddress?: string;
35
+ /**
36
+ * Skip client-side quote verification. Defaults to false.
37
+ * Set to true only for testing or when you handle verification externally.
38
+ */
39
+ readonly skipVerification?: boolean;
40
+ }
41
+ /** Result of a cross-chain execution. */
42
+ export interface CrossChainResult {
43
+ readonly quoteId: string;
44
+ readonly status: ExecutionStatus;
45
+ }
46
+ /**
47
+ * Execute a cross-chain swap or transfer via OneBalance.
48
+ *
49
+ * @remarks
50
+ * Flow:
51
+ * 1. Get a quote from OneBalance (includes typed data to sign per chain operation)
52
+ * 2. Sign each operation — EVM via signTypedData, Solana via signTransaction
53
+ * 3. Submit the signed quote to OneBalance for execution via Resource Locks
54
+ *
55
+ * @param client - The OneBalance API client.
56
+ * @param signer - The PrismSigner for this wallet.
57
+ * @param params - Quote parameters (assets, amount, slippage).
58
+ * @param accounts - The MultiAccount array for this wallet.
59
+ * @returns A Result with the execution status or a WalletError.
60
+ */
61
+ export declare function executeCrossChain(client: OneBalanceClient, signer: PrismSigner, params: CrossChainQuoteParams, accounts: QuoteRequest['from']['accounts'], options?: {
62
+ readonly backend?: SigningBackend;
63
+ }): Promise<Result<CrossChainResult, WalletError>>;
64
+ //# sourceMappingURL=cross-chain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cross-chain.d.ts","sourceRoot":"","sources":["../src/cross-chain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EACV,YAAY,EAKZ,eAAe,EAChB,MAAM,gCAAgC,CAAC;AAQxC,qDAAqD;AACrD,MAAM,WAAW,qBAAqB;IACpC,sEAAsE;IACtE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,oCAAoC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,oDAAoD;IACpD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED,yCAAyC;AACzC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;CAClC;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,qBAAqB,EAC7B,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,EAC1C,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAA;CAAE,GAC9C,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC,CAoDhD"}