passkey-kit 0.12.0 → 0.13.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.
Files changed (172) hide show
  1. package/README.md +399 -227
  2. package/{types → dist}/base.d.ts +2 -1
  3. package/dist/base.d.ts.map +1 -0
  4. package/{src/base.ts → dist/base.js} +8 -10
  5. package/dist/base.js.map +1 -0
  6. package/dist/base64url.d.ts +18 -0
  7. package/dist/base64url.d.ts.map +1 -0
  8. package/dist/base64url.js +18 -0
  9. package/dist/base64url.js.map +1 -0
  10. package/dist/constants.d.ts +87 -0
  11. package/dist/constants.d.ts.map +1 -0
  12. package/dist/constants.js +111 -0
  13. package/dist/constants.js.map +1 -0
  14. package/dist/contract-errors.d.ts +69 -0
  15. package/dist/contract-errors.d.ts.map +1 -0
  16. package/dist/contract-errors.js +129 -0
  17. package/dist/contract-errors.js.map +1 -0
  18. package/dist/errors.d.ts +163 -0
  19. package/dist/errors.d.ts.map +1 -0
  20. package/dist/errors.js +244 -0
  21. package/dist/errors.js.map +1 -0
  22. package/dist/events.d.ts +94 -0
  23. package/dist/events.d.ts.map +1 -0
  24. package/dist/events.js +92 -0
  25. package/dist/events.js.map +1 -0
  26. package/dist/index.d.ts +22 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +36 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/indexer/codec.d.ts +18 -0
  31. package/dist/indexer/codec.d.ts.map +1 -0
  32. package/dist/indexer/codec.js +32 -0
  33. package/dist/indexer/codec.js.map +1 -0
  34. package/dist/indexer/index.d.ts +25 -0
  35. package/dist/indexer/index.d.ts.map +1 -0
  36. package/dist/indexer/index.js +34 -0
  37. package/dist/indexer/index.js.map +1 -0
  38. package/dist/indexer/mercury.d.ts +88 -0
  39. package/dist/indexer/mercury.d.ts.map +1 -0
  40. package/dist/indexer/mercury.js +237 -0
  41. package/dist/indexer/mercury.js.map +1 -0
  42. package/dist/indexer/stellar-indexer.d.ts +115 -0
  43. package/dist/indexer/stellar-indexer.d.ts.map +1 -0
  44. package/dist/indexer/stellar-indexer.js +279 -0
  45. package/dist/indexer/stellar-indexer.js.map +1 -0
  46. package/dist/indexer/types.d.ts +73 -0
  47. package/dist/indexer/types.d.ts.map +1 -0
  48. package/dist/indexer/types.js +9 -0
  49. package/dist/indexer/types.js.map +1 -0
  50. package/dist/kit/auth-payload.d.ts +89 -0
  51. package/dist/kit/auth-payload.d.ts.map +1 -0
  52. package/dist/kit/auth-payload.js +203 -0
  53. package/dist/kit/auth-payload.js.map +1 -0
  54. package/dist/kit/deploy-ops.d.ts +45 -0
  55. package/dist/kit/deploy-ops.d.ts.map +1 -0
  56. package/dist/kit/deploy-ops.js +69 -0
  57. package/dist/kit/deploy-ops.js.map +1 -0
  58. package/dist/kit/tx-ops.d.ts +92 -0
  59. package/dist/kit/tx-ops.d.ts.map +1 -0
  60. package/dist/kit/tx-ops.js +113 -0
  61. package/dist/kit/tx-ops.js.map +1 -0
  62. package/dist/kit/wallet-ops.d.ts +59 -0
  63. package/dist/kit/wallet-ops.d.ts.map +1 -0
  64. package/dist/kit/wallet-ops.js +122 -0
  65. package/dist/kit/wallet-ops.js.map +1 -0
  66. package/dist/kit/webauthn-ops.d.ts +55 -0
  67. package/dist/kit/webauthn-ops.d.ts.map +1 -0
  68. package/dist/kit/webauthn-ops.js +79 -0
  69. package/dist/kit/webauthn-ops.js.map +1 -0
  70. package/dist/kit.d.ts +128 -0
  71. package/dist/kit.d.ts.map +1 -0
  72. package/dist/kit.js +276 -0
  73. package/dist/kit.js.map +1 -0
  74. package/dist/managers/credential-manager.d.ts +39 -0
  75. package/dist/managers/credential-manager.d.ts.map +1 -0
  76. package/dist/managers/credential-manager.js +47 -0
  77. package/dist/managers/credential-manager.js.map +1 -0
  78. package/dist/managers/index.d.ts +7 -0
  79. package/dist/managers/index.d.ts.map +1 -0
  80. package/dist/managers/index.js +7 -0
  81. package/dist/managers/index.js.map +1 -0
  82. package/dist/managers/signer-manager.d.ts +51 -0
  83. package/dist/managers/signer-manager.d.ts.map +1 -0
  84. package/dist/managers/signer-manager.js +92 -0
  85. package/dist/managers/signer-manager.js.map +1 -0
  86. package/dist/managers/submission-manager.d.ts +52 -0
  87. package/dist/managers/submission-manager.d.ts.map +1 -0
  88. package/dist/managers/submission-manager.js +77 -0
  89. package/dist/managers/submission-manager.js.map +1 -0
  90. package/dist/relayer.d.ts +61 -0
  91. package/dist/relayer.d.ts.map +1 -0
  92. package/dist/relayer.js +119 -0
  93. package/dist/relayer.js.map +1 -0
  94. package/dist/rpc-data.d.ts +35 -0
  95. package/dist/rpc-data.d.ts.map +1 -0
  96. package/dist/rpc-data.js +49 -0
  97. package/dist/rpc-data.js.map +1 -0
  98. package/dist/sac.d.ts +31 -0
  99. package/dist/sac.d.ts.map +1 -0
  100. package/dist/sac.js +47 -0
  101. package/dist/sac.js.map +1 -0
  102. package/dist/server.d.ts +79 -0
  103. package/dist/server.d.ts.map +1 -0
  104. package/dist/server.js +152 -0
  105. package/dist/server.js.map +1 -0
  106. package/dist/signers.d.ts +83 -0
  107. package/dist/signers.d.ts.map +1 -0
  108. package/dist/signers.js +124 -0
  109. package/dist/signers.js.map +1 -0
  110. package/dist/storage/index.d.ts +13 -0
  111. package/dist/storage/index.d.ts.map +1 -0
  112. package/dist/storage/index.js +12 -0
  113. package/dist/storage/index.js.map +1 -0
  114. package/dist/storage/indexeddb.d.ts +26 -0
  115. package/dist/storage/indexeddb.d.ts.map +1 -0
  116. package/dist/storage/indexeddb.js +100 -0
  117. package/dist/storage/indexeddb.js.map +1 -0
  118. package/dist/storage/localStorage.d.ts +22 -0
  119. package/dist/storage/localStorage.d.ts.map +1 -0
  120. package/dist/storage/localStorage.js +86 -0
  121. package/dist/storage/localStorage.js.map +1 -0
  122. package/dist/storage/memory.d.ts +18 -0
  123. package/dist/storage/memory.d.ts.map +1 -0
  124. package/dist/storage/memory.js +41 -0
  125. package/dist/storage/memory.js.map +1 -0
  126. package/dist/types.d.ts +136 -0
  127. package/dist/types.d.ts.map +1 -0
  128. package/dist/types.js +39 -0
  129. package/dist/types.js.map +1 -0
  130. package/dist/utils.d.ts +52 -0
  131. package/dist/utils.d.ts.map +1 -0
  132. package/dist/utils.js +153 -0
  133. package/dist/utils.js.map +1 -0
  134. package/dist/validation.d.ts +40 -0
  135. package/dist/validation.d.ts.map +1 -0
  136. package/dist/validation.js +73 -0
  137. package/dist/validation.js.map +1 -0
  138. package/dist/version.d.ts +7 -0
  139. package/dist/version.d.ts.map +1 -0
  140. package/dist/version.js +9 -0
  141. package/dist/version.js.map +1 -0
  142. package/package.json +48 -20
  143. package/.claude/settings.local.json +0 -20
  144. package/.cursorrules +0 -170
  145. package/.gitattributes +0 -2
  146. package/.github/workflows/release.yml +0 -21
  147. package/.vscode/settings.json +0 -6
  148. package/PROPOSAL.md +0 -397
  149. package/cheatsheet.txt +0 -18
  150. package/clone-js-sdk.sh +0 -21
  151. package/packages/passkey-kit-sdk/README.md +0 -54
  152. package/packages/passkey-kit-sdk/package.json +0 -18
  153. package/packages/passkey-kit-sdk/src/index.ts +0 -171
  154. package/packages/passkey-kit-sdk/tsconfig.json +0 -98
  155. package/packages/passkey-kit-sdk/types/index.d.ts +0 -190
  156. package/packages/sac-sdk/README.md +0 -54
  157. package/packages/sac-sdk/package.json +0 -18
  158. package/packages/sac-sdk/src/index.ts +0 -586
  159. package/packages/sac-sdk/tsconfig.json +0 -98
  160. package/packages/sac-sdk/types/index.d.ts +0 -532
  161. package/pnpm-workspace.yaml +0 -2
  162. package/src/index.ts +0 -5
  163. package/src/kit.ts +0 -698
  164. package/src/sac.ts +0 -29
  165. package/src/server.ts +0 -179
  166. package/src/types.ts +0 -32
  167. package/tsconfig.json +0 -28
  168. package/types/index.d.ts +0 -5
  169. package/types/kit.d.ts +0 -89
  170. package/types/sac.d.ts +0 -13
  171. package/types/server.d.ts +0 -29
  172. package/types/types.d.ts +0 -22
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Typed error model for the Passkey Kit SDK.
3
+ *
4
+ * Every error the kit throws is a {@link PasskeyKitError} (or subclass) carrying
5
+ * a numeric {@link PasskeyKitErrorCode}, optional structured `context`, and an
6
+ * optional `cause`. Callers branch on `error.code` (or `instanceof`) instead of
7
+ * matching on message strings.
8
+ *
9
+ * Submission methods are the one exception to "throw on failure": they return a
10
+ * discriminated {@link import("./types.js").TransactionResult} whose failure arm
11
+ * carries one of these typed errors (see `contract-errors.ts`).
12
+ *
13
+ * @packageDocumentation
14
+ */
15
+ /**
16
+ * Error codes for Passkey Kit operations, grouped by concern.
17
+ *
18
+ * Ranges (per SDK architecture spec #599 §5, extended with validation/storage):
19
+ * - 1xxx configuration
20
+ * - 2xxx wallet state
21
+ * - 3xxx WebAuthn
22
+ * - 4xxx signing
23
+ * - 5xxx transaction (simulation/submission)
24
+ * - 6xxx indexer
25
+ * - 7xxx relayer
26
+ * - 8xxx validation
27
+ * - 9xxx storage
28
+ * - 10000 contract-level failure decoded from on-chain diagnostics (the raw
29
+ * contract code 1-9 is carried separately on {@link ContractError}).
30
+ */
31
+ export declare enum PasskeyKitErrorCode {
32
+ INVALID_CONFIG = 1001,
33
+ MISSING_CONFIG = 1002,
34
+ WALLET_NOT_CONNECTED = 2001,
35
+ WALLET_ALREADY_EXISTS = 2002,
36
+ WALLET_NOT_FOUND = 2003,
37
+ WALLET_OWNERSHIP_MISMATCH = 2004,
38
+ WEBAUTHN_REGISTRATION_FAILED = 3001,
39
+ WEBAUTHN_AUTHENTICATION_FAILED = 3002,
40
+ WEBAUTHN_NOT_SUPPORTED = 3003,
41
+ WEBAUTHN_CANCELLED = 3004,
42
+ PUBLIC_KEY_EXTRACTION_FAILED = 3005,
43
+ SIGNING_FAILED = 4001,
44
+ SIGNER_NOT_FOUND = 4002,
45
+ INVALID_SIGNER = 4003,
46
+ INVALID_SIGNATURE_EXPIRATION = 4004,
47
+ UNSUPPORTED_CREDENTIALS = 4005,
48
+ SIMULATION_FAILED = 5001,
49
+ SUBMISSION_FAILED = 5002,
50
+ TRANSACTION_TIMEOUT = 5003,
51
+ RESTORE_REQUIRED = 5004,
52
+ INDEXER_NOT_CONFIGURED = 6001,
53
+ INDEXER_REQUEST_FAILED = 6002,
54
+ RELAYER_NOT_CONFIGURED = 7001,
55
+ RELAYER_REQUEST_FAILED = 7002,
56
+ /** Submitted but not yet in a terminal state — keep polling getTransaction. */
57
+ RELAYER_PENDING = 7003,
58
+ INVALID_ADDRESS = 8001,
59
+ INVALID_AMOUNT = 8002,
60
+ INVALID_INPUT = 8003,
61
+ INVALID_PUBLIC_KEY = 8004,
62
+ STORAGE_READ_FAILED = 9001,
63
+ STORAGE_WRITE_FAILED = 9002,
64
+ CONTRACT_ERROR = 10000
65
+ }
66
+ /**
67
+ * Base error class for all Passkey Kit errors.
68
+ */
69
+ export declare class PasskeyKitError extends Error {
70
+ /** Error code for programmatic handling. */
71
+ readonly code: PasskeyKitErrorCode;
72
+ /** Structured context about the error. */
73
+ readonly context?: Record<string, unknown>;
74
+ /** The underlying error that caused this one, if any. */
75
+ readonly cause?: Error;
76
+ constructor(message: string, code: PasskeyKitErrorCode, options?: {
77
+ context?: Record<string, unknown>;
78
+ cause?: Error;
79
+ });
80
+ /** Format the error with its code, context, and cause for logging. */
81
+ toDetailedString(): string;
82
+ }
83
+ /** Thrown when the client is misconfigured. */
84
+ export declare class ConfigurationError extends PasskeyKitError {
85
+ constructor(message: string, code?: PasskeyKitErrorCode.INVALID_CONFIG | PasskeyKitErrorCode.MISSING_CONFIG, context?: Record<string, unknown>);
86
+ }
87
+ /** Thrown when an operation requires a connected wallet but none is connected. */
88
+ export declare class WalletNotConnectedError extends PasskeyKitError {
89
+ constructor(operation?: string);
90
+ }
91
+ /**
92
+ * Thrown when a connected wallet does not actually own the credential used to
93
+ * connect (connectWallet ownership verification, #601 F7).
94
+ */
95
+ export declare class WalletOwnershipError extends PasskeyKitError {
96
+ constructor(message: string, context?: Record<string, unknown>);
97
+ }
98
+ /** Thrown when a WebAuthn ceremony fails. */
99
+ export declare class WebAuthnError extends PasskeyKitError {
100
+ constructor(message: string, code: PasskeyKitErrorCode.WEBAUTHN_REGISTRATION_FAILED | PasskeyKitErrorCode.WEBAUTHN_AUTHENTICATION_FAILED | PasskeyKitErrorCode.WEBAUTHN_NOT_SUPPORTED | PasskeyKitErrorCode.WEBAUTHN_CANCELLED | PasskeyKitErrorCode.PUBLIC_KEY_EXTRACTION_FAILED, cause?: Error);
101
+ }
102
+ /** Thrown when signing an authorization entry fails. */
103
+ export declare class SigningError extends PasskeyKitError {
104
+ constructor(message: string, code?: PasskeyKitErrorCode.SIGNING_FAILED | PasskeyKitErrorCode.INVALID_SIGNER | PasskeyKitErrorCode.INVALID_SIGNATURE_EXPIRATION | PasskeyKitErrorCode.UNSUPPORTED_CREDENTIALS, context?: Record<string, unknown>);
105
+ }
106
+ /** Thrown when a requested signer cannot be found. */
107
+ export declare class SignerNotFoundError extends PasskeyKitError {
108
+ constructor(identifier: string, hint?: string);
109
+ }
110
+ /** Thrown when transaction simulation fails. */
111
+ export declare class SimulationError extends PasskeyKitError {
112
+ constructor(message: string, context?: Record<string, unknown>);
113
+ }
114
+ /** Thrown when transaction submission fails. */
115
+ export declare class SubmissionError extends PasskeyKitError {
116
+ constructor(message: string, hash?: string, context?: Record<string, unknown>);
117
+ }
118
+ /** Thrown when input validation fails. */
119
+ export declare class ValidationError extends PasskeyKitError {
120
+ constructor(message: string, code?: PasskeyKitErrorCode.INVALID_ADDRESS | PasskeyKitErrorCode.INVALID_AMOUNT | PasskeyKitErrorCode.INVALID_INPUT | PasskeyKitErrorCode.INVALID_PUBLIC_KEY, context?: Record<string, unknown>);
121
+ }
122
+ /** Thrown when an indexer request fails or the indexer is not configured. */
123
+ export declare class IndexerError extends PasskeyKitError {
124
+ constructor(message: string, code?: PasskeyKitErrorCode.INDEXER_NOT_CONFIGURED | PasskeyKitErrorCode.INDEXER_REQUEST_FAILED, context?: Record<string, unknown>, cause?: Error);
125
+ }
126
+ /** Thrown when a relayer request fails or the relayer is not configured. */
127
+ export declare class RelayerError extends PasskeyKitError {
128
+ constructor(message: string, code?: PasskeyKitErrorCode.RELAYER_NOT_CONFIGURED | PasskeyKitErrorCode.RELAYER_REQUEST_FAILED | PasskeyKitErrorCode.RELAYER_PENDING, context?: Record<string, unknown>, cause?: Error);
129
+ }
130
+ /**
131
+ * Error decoded from an on-chain smart-wallet failure code.
132
+ *
133
+ * Produced by `decodeContractError` when a simulation/submission diagnostic
134
+ * reports an `Error(Contract, #N)`. Carries the raw contract code and its enum
135
+ * variant name so callers can branch on the exact failure.
136
+ *
137
+ * @example
138
+ * ```typescript
139
+ * const result = await server.send(tx);
140
+ * if (!result.success && result.error instanceof ContractError) {
141
+ * if (result.error.contractErrorName === "SignerExpired") { ... }
142
+ * }
143
+ * ```
144
+ */
145
+ export declare class ContractError extends PasskeyKitError {
146
+ /** Raw contract error code (e.g. 4). */
147
+ readonly contractCode: number;
148
+ /** Enum variant name from the contract (e.g. "SignerExpired"). */
149
+ readonly contractErrorName: string;
150
+ /** Contract family the code belongs to (e.g. "SmartWallet"). */
151
+ readonly family: string;
152
+ constructor(contractCode: number, contractErrorName: string, family: string, message: string, options?: {
153
+ context?: Record<string, unknown>;
154
+ cause?: Error;
155
+ });
156
+ }
157
+ /**
158
+ * Wrap an unknown thrown value in a {@link PasskeyKitError}.
159
+ *
160
+ * Passes through values that are already {@link PasskeyKitError}s.
161
+ */
162
+ export declare function wrapError(err: unknown, defaultCode?: PasskeyKitErrorCode): PasskeyKitError;
163
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
package/dist/errors.js ADDED
@@ -0,0 +1,244 @@
1
+ /**
2
+ * Typed error model for the Passkey Kit SDK.
3
+ *
4
+ * Every error the kit throws is a {@link PasskeyKitError} (or subclass) carrying
5
+ * a numeric {@link PasskeyKitErrorCode}, optional structured `context`, and an
6
+ * optional `cause`. Callers branch on `error.code` (or `instanceof`) instead of
7
+ * matching on message strings.
8
+ *
9
+ * Submission methods are the one exception to "throw on failure": they return a
10
+ * discriminated {@link import("./types.js").TransactionResult} whose failure arm
11
+ * carries one of these typed errors (see `contract-errors.ts`).
12
+ *
13
+ * @packageDocumentation
14
+ */
15
+ /**
16
+ * Error codes for Passkey Kit operations, grouped by concern.
17
+ *
18
+ * Ranges (per SDK architecture spec #599 §5, extended with validation/storage):
19
+ * - 1xxx configuration
20
+ * - 2xxx wallet state
21
+ * - 3xxx WebAuthn
22
+ * - 4xxx signing
23
+ * - 5xxx transaction (simulation/submission)
24
+ * - 6xxx indexer
25
+ * - 7xxx relayer
26
+ * - 8xxx validation
27
+ * - 9xxx storage
28
+ * - 10000 contract-level failure decoded from on-chain diagnostics (the raw
29
+ * contract code 1-9 is carried separately on {@link ContractError}).
30
+ */
31
+ export var PasskeyKitErrorCode;
32
+ (function (PasskeyKitErrorCode) {
33
+ // Configuration (1xxx)
34
+ PasskeyKitErrorCode[PasskeyKitErrorCode["INVALID_CONFIG"] = 1001] = "INVALID_CONFIG";
35
+ PasskeyKitErrorCode[PasskeyKitErrorCode["MISSING_CONFIG"] = 1002] = "MISSING_CONFIG";
36
+ // Wallet state (2xxx)
37
+ PasskeyKitErrorCode[PasskeyKitErrorCode["WALLET_NOT_CONNECTED"] = 2001] = "WALLET_NOT_CONNECTED";
38
+ PasskeyKitErrorCode[PasskeyKitErrorCode["WALLET_ALREADY_EXISTS"] = 2002] = "WALLET_ALREADY_EXISTS";
39
+ PasskeyKitErrorCode[PasskeyKitErrorCode["WALLET_NOT_FOUND"] = 2003] = "WALLET_NOT_FOUND";
40
+ PasskeyKitErrorCode[PasskeyKitErrorCode["WALLET_OWNERSHIP_MISMATCH"] = 2004] = "WALLET_OWNERSHIP_MISMATCH";
41
+ // WebAuthn (3xxx)
42
+ PasskeyKitErrorCode[PasskeyKitErrorCode["WEBAUTHN_REGISTRATION_FAILED"] = 3001] = "WEBAUTHN_REGISTRATION_FAILED";
43
+ PasskeyKitErrorCode[PasskeyKitErrorCode["WEBAUTHN_AUTHENTICATION_FAILED"] = 3002] = "WEBAUTHN_AUTHENTICATION_FAILED";
44
+ PasskeyKitErrorCode[PasskeyKitErrorCode["WEBAUTHN_NOT_SUPPORTED"] = 3003] = "WEBAUTHN_NOT_SUPPORTED";
45
+ PasskeyKitErrorCode[PasskeyKitErrorCode["WEBAUTHN_CANCELLED"] = 3004] = "WEBAUTHN_CANCELLED";
46
+ PasskeyKitErrorCode[PasskeyKitErrorCode["PUBLIC_KEY_EXTRACTION_FAILED"] = 3005] = "PUBLIC_KEY_EXTRACTION_FAILED";
47
+ // Signing (4xxx)
48
+ PasskeyKitErrorCode[PasskeyKitErrorCode["SIGNING_FAILED"] = 4001] = "SIGNING_FAILED";
49
+ PasskeyKitErrorCode[PasskeyKitErrorCode["SIGNER_NOT_FOUND"] = 4002] = "SIGNER_NOT_FOUND";
50
+ PasskeyKitErrorCode[PasskeyKitErrorCode["INVALID_SIGNER"] = 4003] = "INVALID_SIGNER";
51
+ PasskeyKitErrorCode[PasskeyKitErrorCode["INVALID_SIGNATURE_EXPIRATION"] = 4004] = "INVALID_SIGNATURE_EXPIRATION";
52
+ PasskeyKitErrorCode[PasskeyKitErrorCode["UNSUPPORTED_CREDENTIALS"] = 4005] = "UNSUPPORTED_CREDENTIALS";
53
+ // Transaction (5xxx)
54
+ PasskeyKitErrorCode[PasskeyKitErrorCode["SIMULATION_FAILED"] = 5001] = "SIMULATION_FAILED";
55
+ PasskeyKitErrorCode[PasskeyKitErrorCode["SUBMISSION_FAILED"] = 5002] = "SUBMISSION_FAILED";
56
+ PasskeyKitErrorCode[PasskeyKitErrorCode["TRANSACTION_TIMEOUT"] = 5003] = "TRANSACTION_TIMEOUT";
57
+ PasskeyKitErrorCode[PasskeyKitErrorCode["RESTORE_REQUIRED"] = 5004] = "RESTORE_REQUIRED";
58
+ // Indexer (6xxx)
59
+ PasskeyKitErrorCode[PasskeyKitErrorCode["INDEXER_NOT_CONFIGURED"] = 6001] = "INDEXER_NOT_CONFIGURED";
60
+ PasskeyKitErrorCode[PasskeyKitErrorCode["INDEXER_REQUEST_FAILED"] = 6002] = "INDEXER_REQUEST_FAILED";
61
+ // Relayer (7xxx)
62
+ PasskeyKitErrorCode[PasskeyKitErrorCode["RELAYER_NOT_CONFIGURED"] = 7001] = "RELAYER_NOT_CONFIGURED";
63
+ PasskeyKitErrorCode[PasskeyKitErrorCode["RELAYER_REQUEST_FAILED"] = 7002] = "RELAYER_REQUEST_FAILED";
64
+ /** Submitted but not yet in a terminal state — keep polling getTransaction. */
65
+ PasskeyKitErrorCode[PasskeyKitErrorCode["RELAYER_PENDING"] = 7003] = "RELAYER_PENDING";
66
+ // Validation (8xxx)
67
+ PasskeyKitErrorCode[PasskeyKitErrorCode["INVALID_ADDRESS"] = 8001] = "INVALID_ADDRESS";
68
+ PasskeyKitErrorCode[PasskeyKitErrorCode["INVALID_AMOUNT"] = 8002] = "INVALID_AMOUNT";
69
+ PasskeyKitErrorCode[PasskeyKitErrorCode["INVALID_INPUT"] = 8003] = "INVALID_INPUT";
70
+ PasskeyKitErrorCode[PasskeyKitErrorCode["INVALID_PUBLIC_KEY"] = 8004] = "INVALID_PUBLIC_KEY";
71
+ // Storage (9xxx)
72
+ PasskeyKitErrorCode[PasskeyKitErrorCode["STORAGE_READ_FAILED"] = 9001] = "STORAGE_READ_FAILED";
73
+ PasskeyKitErrorCode[PasskeyKitErrorCode["STORAGE_WRITE_FAILED"] = 9002] = "STORAGE_WRITE_FAILED";
74
+ // Contract-level failure decoded from on-chain diagnostics (10xxx).
75
+ // The raw contract code (1-9) is carried separately on ContractError so the
76
+ // SDK code space never collides with the contract's own small code range.
77
+ PasskeyKitErrorCode[PasskeyKitErrorCode["CONTRACT_ERROR"] = 10000] = "CONTRACT_ERROR";
78
+ })(PasskeyKitErrorCode || (PasskeyKitErrorCode = {}));
79
+ /**
80
+ * Base error class for all Passkey Kit errors.
81
+ */
82
+ export class PasskeyKitError extends Error {
83
+ /** Error code for programmatic handling. */
84
+ code;
85
+ /** Structured context about the error. */
86
+ context;
87
+ /** The underlying error that caused this one, if any. */
88
+ cause;
89
+ constructor(message, code, options) {
90
+ super(message);
91
+ this.name = "PasskeyKitError";
92
+ this.code = code;
93
+ this.context = options?.context;
94
+ this.cause = options?.cause;
95
+ // Maintain a proper stack trace in V8 environments.
96
+ if (Error.captureStackTrace) {
97
+ Error.captureStackTrace(this, PasskeyKitError);
98
+ }
99
+ }
100
+ /** Format the error with its code, context, and cause for logging. */
101
+ toDetailedString() {
102
+ let msg = `[${this.code}] ${this.message}`;
103
+ if (this.context) {
104
+ msg += `\nContext: ${JSON.stringify(this.context, null, 2)}`;
105
+ }
106
+ if (this.cause) {
107
+ msg += `\nCaused by: ${this.cause.message}`;
108
+ }
109
+ return msg;
110
+ }
111
+ }
112
+ /** Thrown when the client is misconfigured. */
113
+ export class ConfigurationError extends PasskeyKitError {
114
+ constructor(message, code = PasskeyKitErrorCode.INVALID_CONFIG, context) {
115
+ super(message, code, { context });
116
+ this.name = "ConfigurationError";
117
+ }
118
+ }
119
+ /** Thrown when an operation requires a connected wallet but none is connected. */
120
+ export class WalletNotConnectedError extends PasskeyKitError {
121
+ constructor(operation) {
122
+ super(operation
123
+ ? `A connected wallet is required to ${operation}`
124
+ : "Wallet not connected", PasskeyKitErrorCode.WALLET_NOT_CONNECTED, { context: operation ? { operation } : undefined });
125
+ this.name = "WalletNotConnectedError";
126
+ }
127
+ }
128
+ /**
129
+ * Thrown when a connected wallet does not actually own the credential used to
130
+ * connect (connectWallet ownership verification, #601 F7).
131
+ */
132
+ export class WalletOwnershipError extends PasskeyKitError {
133
+ constructor(message, context) {
134
+ super(message, PasskeyKitErrorCode.WALLET_OWNERSHIP_MISMATCH, { context });
135
+ this.name = "WalletOwnershipError";
136
+ }
137
+ }
138
+ /** Thrown when a WebAuthn ceremony fails. */
139
+ export class WebAuthnError extends PasskeyKitError {
140
+ constructor(message, code, cause) {
141
+ super(message, code, { cause });
142
+ this.name = "WebAuthnError";
143
+ }
144
+ }
145
+ /** Thrown when signing an authorization entry fails. */
146
+ export class SigningError extends PasskeyKitError {
147
+ constructor(message, code = PasskeyKitErrorCode.SIGNING_FAILED, context) {
148
+ super(message, code, { context });
149
+ this.name = "SigningError";
150
+ }
151
+ }
152
+ /** Thrown when a requested signer cannot be found. */
153
+ export class SignerNotFoundError extends PasskeyKitError {
154
+ constructor(identifier, hint) {
155
+ super(hint
156
+ ? `No signer found for: ${identifier}. ${hint}`
157
+ : `No signer found for: ${identifier}`, PasskeyKitErrorCode.SIGNER_NOT_FOUND, { context: { identifier } });
158
+ this.name = "SignerNotFoundError";
159
+ }
160
+ }
161
+ /** Thrown when transaction simulation fails. */
162
+ export class SimulationError extends PasskeyKitError {
163
+ constructor(message, context) {
164
+ super(message, PasskeyKitErrorCode.SIMULATION_FAILED, { context });
165
+ this.name = "SimulationError";
166
+ }
167
+ }
168
+ /** Thrown when transaction submission fails. */
169
+ export class SubmissionError extends PasskeyKitError {
170
+ constructor(message, hash, context) {
171
+ super(message, PasskeyKitErrorCode.SUBMISSION_FAILED, {
172
+ context: { hash, ...context },
173
+ });
174
+ this.name = "SubmissionError";
175
+ }
176
+ }
177
+ /** Thrown when input validation fails. */
178
+ export class ValidationError extends PasskeyKitError {
179
+ constructor(message, code = PasskeyKitErrorCode.INVALID_INPUT, context) {
180
+ super(message, code, { context });
181
+ this.name = "ValidationError";
182
+ }
183
+ }
184
+ /** Thrown when an indexer request fails or the indexer is not configured. */
185
+ export class IndexerError extends PasskeyKitError {
186
+ constructor(message, code = PasskeyKitErrorCode.INDEXER_REQUEST_FAILED, context, cause) {
187
+ super(message, code, { context, cause });
188
+ this.name = "IndexerError";
189
+ }
190
+ }
191
+ /** Thrown when a relayer request fails or the relayer is not configured. */
192
+ export class RelayerError extends PasskeyKitError {
193
+ constructor(message, code = PasskeyKitErrorCode.RELAYER_REQUEST_FAILED, context, cause) {
194
+ super(message, code, { context, cause });
195
+ this.name = "RelayerError";
196
+ }
197
+ }
198
+ /**
199
+ * Error decoded from an on-chain smart-wallet failure code.
200
+ *
201
+ * Produced by `decodeContractError` when a simulation/submission diagnostic
202
+ * reports an `Error(Contract, #N)`. Carries the raw contract code and its enum
203
+ * variant name so callers can branch on the exact failure.
204
+ *
205
+ * @example
206
+ * ```typescript
207
+ * const result = await server.send(tx);
208
+ * if (!result.success && result.error instanceof ContractError) {
209
+ * if (result.error.contractErrorName === "SignerExpired") { ... }
210
+ * }
211
+ * ```
212
+ */
213
+ export class ContractError extends PasskeyKitError {
214
+ /** Raw contract error code (e.g. 4). */
215
+ contractCode;
216
+ /** Enum variant name from the contract (e.g. "SignerExpired"). */
217
+ contractErrorName;
218
+ /** Contract family the code belongs to (e.g. "SmartWallet"). */
219
+ family;
220
+ constructor(contractCode, contractErrorName, family, message, options) {
221
+ super(message, PasskeyKitErrorCode.CONTRACT_ERROR, {
222
+ context: { contractCode, contractErrorName, family, ...options?.context },
223
+ cause: options?.cause,
224
+ });
225
+ this.name = "ContractError";
226
+ this.contractCode = contractCode;
227
+ this.contractErrorName = contractErrorName;
228
+ this.family = family;
229
+ }
230
+ }
231
+ /**
232
+ * Wrap an unknown thrown value in a {@link PasskeyKitError}.
233
+ *
234
+ * Passes through values that are already {@link PasskeyKitError}s.
235
+ */
236
+ export function wrapError(err, defaultCode = PasskeyKitErrorCode.INVALID_INPUT) {
237
+ if (err instanceof PasskeyKitError) {
238
+ return err;
239
+ }
240
+ const message = err instanceof Error ? err.message : String(err);
241
+ const cause = err instanceof Error ? err : undefined;
242
+ return new PasskeyKitError(message, defaultCode, { cause });
243
+ }
244
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Typed event emitter for passkey / wallet lifecycle events.
3
+ *
4
+ * `on()` returns an unsubscribe function; a listener that throws is isolated so
5
+ * it never prevents the other listeners from running.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ import type { SignerStore } from "./types.js";
10
+ /**
11
+ * The events the kit can emit, mapped to their payload shapes.
12
+ */
13
+ export type PasskeyEventMap = {
14
+ /** A new wallet was deployed. */
15
+ walletCreated: {
16
+ contractId: string;
17
+ keyId: string;
18
+ };
19
+ /** An existing wallet was connected. */
20
+ walletConnected: {
21
+ contractId: string;
22
+ keyId: string;
23
+ };
24
+ /** The connected wallet was disconnected. */
25
+ walletDisconnected: {
26
+ contractId: string;
27
+ };
28
+ /** A signer was added to the connected wallet. */
29
+ signerAdded: {
30
+ contractId: string;
31
+ kind: "Policy" | "Ed25519" | "Secp256r1";
32
+ storage: SignerStore;
33
+ };
34
+ /** A signer was updated on the connected wallet. */
35
+ signerUpdated: {
36
+ contractId: string;
37
+ kind: "Policy" | "Ed25519" | "Secp256r1";
38
+ storage: SignerStore;
39
+ };
40
+ /** A signer was removed from the connected wallet. */
41
+ signerRemoved: {
42
+ contractId: string;
43
+ kind: "Policy" | "Ed25519" | "Secp256r1";
44
+ };
45
+ /** An authorization entry was signed. */
46
+ transactionSigned: {
47
+ contractId: string;
48
+ keyId?: string;
49
+ };
50
+ /** A transaction was submitted. */
51
+ transactionSubmitted: {
52
+ hash: string;
53
+ success: boolean;
54
+ };
55
+ };
56
+ /** The set of event names the kit emits. */
57
+ export type PasskeyEvent = keyof PasskeyEventMap;
58
+ /** An event listener. */
59
+ export type EventListener<T> = (data: T) => void;
60
+ /**
61
+ * A small typed event emitter for passkey lifecycle events.
62
+ *
63
+ * @example
64
+ * ```typescript
65
+ * const events = new PasskeyEventEmitter();
66
+ * const off = events.on("walletConnected", ({ contractId }) => {
67
+ * console.log("connected", contractId);
68
+ * });
69
+ * events.emit("walletConnected", { contractId: "C…", keyId: "…" });
70
+ * off();
71
+ * ```
72
+ */
73
+ export declare class PasskeyEventEmitter {
74
+ private listeners;
75
+ private errorHandler;
76
+ /**
77
+ * Set the handler invoked when a listener throws. Pass `undefined` to silence
78
+ * listener errors entirely.
79
+ */
80
+ setErrorHandler(handler: ((event: PasskeyEvent, error: unknown) => void) | undefined): void;
81
+ /** Subscribe to an event. Returns an unsubscribe function. */
82
+ on<E extends PasskeyEvent>(event: E, listener: EventListener<PasskeyEventMap[E]>): () => void;
83
+ /** Subscribe to an event, firing at most once. Returns an unsubscribe fn. */
84
+ once<E extends PasskeyEvent>(event: E, listener: EventListener<PasskeyEventMap[E]>): () => void;
85
+ /** Unsubscribe a specific listener from an event. */
86
+ off<E extends PasskeyEvent>(event: E, listener: EventListener<PasskeyEventMap[E]>): void;
87
+ /** Emit an event to all subscribers, isolating any that throw. */
88
+ emit<E extends PasskeyEvent>(event: E, data: PasskeyEventMap[E]): void;
89
+ /** Remove all listeners for an event, or for every event when omitted. */
90
+ removeAllListeners(event?: PasskeyEvent): void;
91
+ /** Number of listeners registered for an event. */
92
+ listenerCount(event: PasskeyEvent): number;
93
+ }
94
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,iCAAiC;IACjC,aAAa,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAErD,wCAAwC;IACxC,eAAe,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAEvD,6CAA6C;IAC7C,kBAAkB,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAE3C,kDAAkD;IAClD,WAAW,EAAE;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;QACzC,OAAO,EAAE,WAAW,CAAC;KACtB,CAAC;IAEF,oDAAoD;IACpD,aAAa,EAAE;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;QACzC,OAAO,EAAE,WAAW,CAAC;KACtB,CAAC;IAEF,sDAAsD;IACtD,aAAa,EAAE;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;KAC1C,CAAC;IAEF,yCAAyC;IACzC,iBAAiB,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAE1D,mCAAmC;IACnC,oBAAoB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;CAC1D,CAAC;AAEF,4CAA4C;AAC5C,MAAM,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC;AAEjD,yBAAyB;AACzB,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;AAajD;;;;;;;;;;;;GAYG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,SAAS,CAGH;IAEd,OAAO,CAAC,YAAY,CAEwB;IAE5C;;;OAGG;IACH,eAAe,CACb,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,SAAS,GACnE,IAAI;IAIP,8DAA8D;IAC9D,EAAE,CAAC,CAAC,SAAS,YAAY,EACvB,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAC1C,MAAM,IAAI;IAeb,6EAA6E;IAC7E,IAAI,CAAC,CAAC,SAAS,YAAY,EACzB,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAC1C,MAAM,IAAI;IAQb,qDAAqD;IACrD,GAAG,CAAC,CAAC,SAAS,YAAY,EACxB,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAC1C,IAAI;IAMP,kEAAkE;IAClE,IAAI,CAAC,CAAC,SAAS,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI;IAYtE,0EAA0E;IAC1E,kBAAkB,CAAC,KAAK,CAAC,EAAE,YAAY,GAAG,IAAI;IAQ9C,mDAAmD;IACnD,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM;CAG3C"}
package/dist/events.js ADDED
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Typed event emitter for passkey / wallet lifecycle events.
3
+ *
4
+ * `on()` returns an unsubscribe function; a listener that throws is isolated so
5
+ * it never prevents the other listeners from running.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ /**
10
+ * Default handler for errors thrown by listeners: log to the console so a
11
+ * misbehaving listener is visible rather than silently swallowed.
12
+ */
13
+ function defaultListenerErrorHandler(event, error) {
14
+ console.error(`[PasskeyKit] Listener for "${event}" threw:`, error);
15
+ }
16
+ /**
17
+ * A small typed event emitter for passkey lifecycle events.
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * const events = new PasskeyEventEmitter();
22
+ * const off = events.on("walletConnected", ({ contractId }) => {
23
+ * console.log("connected", contractId);
24
+ * });
25
+ * events.emit("walletConnected", { contractId: "C…", keyId: "…" });
26
+ * off();
27
+ * ```
28
+ */
29
+ export class PasskeyEventEmitter {
30
+ listeners = new Map();
31
+ errorHandler = defaultListenerErrorHandler;
32
+ /**
33
+ * Set the handler invoked when a listener throws. Pass `undefined` to silence
34
+ * listener errors entirely.
35
+ */
36
+ setErrorHandler(handler) {
37
+ this.errorHandler = handler;
38
+ }
39
+ /** Subscribe to an event. Returns an unsubscribe function. */
40
+ on(event, listener) {
41
+ if (!this.listeners.has(event)) {
42
+ this.listeners.set(event, new Set());
43
+ }
44
+ const listeners = this.listeners.get(event);
45
+ listeners.add(listener);
46
+ return () => {
47
+ listeners.delete(listener);
48
+ };
49
+ }
50
+ /** Subscribe to an event, firing at most once. Returns an unsubscribe fn. */
51
+ once(event, listener) {
52
+ const unsubscribe = this.on(event, (data) => {
53
+ unsubscribe();
54
+ listener(data);
55
+ });
56
+ return unsubscribe;
57
+ }
58
+ /** Unsubscribe a specific listener from an event. */
59
+ off(event, listener) {
60
+ this.listeners
61
+ .get(event)
62
+ ?.delete(listener);
63
+ }
64
+ /** Emit an event to all subscribers, isolating any that throw. */
65
+ emit(event, data) {
66
+ const listeners = this.listeners.get(event);
67
+ if (!listeners)
68
+ return;
69
+ for (const listener of listeners) {
70
+ try {
71
+ listener(data);
72
+ }
73
+ catch (err) {
74
+ this.errorHandler?.(event, err);
75
+ }
76
+ }
77
+ }
78
+ /** Remove all listeners for an event, or for every event when omitted. */
79
+ removeAllListeners(event) {
80
+ if (event) {
81
+ this.listeners.delete(event);
82
+ }
83
+ else {
84
+ this.listeners.clear();
85
+ }
86
+ }
87
+ /** Number of listeners registered for an event. */
88
+ listenerCount(event) {
89
+ return this.listeners.get(event)?.size ?? 0;
90
+ }
91
+ }
92
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAkDH;;;GAGG;AACH,SAAS,2BAA2B,CAClC,KAAmB,EACnB,KAAc;IAEd,OAAO,CAAC,KAAK,CAAC,8BAA8B,KAAK,UAAU,EAAE,KAAK,CAAC,CAAC;AACtE,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,mBAAmB;IACtB,SAAS,GAGb,IAAI,GAAG,EAAE,CAAC;IAEN,YAAY,GAEJ,2BAA2B,CAAC;IAE5C;;;OAGG;IACH,eAAe,CACb,OAAoE;QAEpE,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;IAC9B,CAAC;IAED,8DAA8D;IAC9D,EAAE,CACA,KAAQ,EACR,QAA2C;QAE3C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;QAC7C,SAAS,CAAC,GAAG,CACX,QAAwD,CACzD,CAAC;QACF,OAAO,GAAG,EAAE;YACV,SAAS,CAAC,MAAM,CACd,QAAwD,CACzD,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,IAAI,CACF,KAAQ,EACR,QAA2C;QAE3C,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;YAC1C,WAAW,EAAE,CAAC;YACd,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QACH,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,qDAAqD;IACrD,GAAG,CACD,KAAQ,EACR,QAA2C;QAE3C,IAAI,CAAC,SAAS;aACX,GAAG,CAAC,KAAK,CAAC;YACX,EAAE,MAAM,CAAC,QAAwD,CAAC,CAAC;IACvE,CAAC;IAED,kEAAkE;IAClE,IAAI,CAAyB,KAAQ,EAAE,IAAwB;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,kBAAkB,CAAC,KAAoB;QACrC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED,mDAAmD;IACnD,aAAa,CAAC,KAAmB;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC;IAC9C,CAAC;CACF"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Passkey Kit — create and use smart-wallet accounts on Stellar with WebAuthn
3
+ * passkeys.
4
+ *
5
+ * Storage adapters live under the `passkey-kit/storage` subpath; the server-only
6
+ * entrypoint lives under `passkey-kit/server`.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ export { PasskeyKit, type PasskeyKitConfig, type CreateOptions, type ConnectOptions, } from "./kit.js";
11
+ export { SACClient, buildTokenTransferHostFunction } from "./sac.js";
12
+ export { Client as PasskeyClient } from "passkey-kit-sdk";
13
+ export { PasskeySigner, Ed25519Signer, PolicySigner, type Signer, type SignerContext, type PreparedSignature, type WebAuthnAuthenticator, } from "./signers.js";
14
+ export { SignerKey, SignerStore, type SignerKeyTag, type SignerLimits, type StoredPasskey, type StorageAdapter, type CreateWalletResult, type ConnectWalletResult, type TransactionResult, type TransactionSuccess, type TransactionFailure, type SubmissionMethod, } from "./types.js";
15
+ export { PasskeyKitError, PasskeyKitErrorCode, ConfigurationError, WalletNotConnectedError, WalletOwnershipError, WebAuthnError, SigningError, SignerNotFoundError, SimulationError, SubmissionError, ValidationError, IndexerError, RelayerError, ContractError, wrapError, } from "./errors.js";
16
+ export { CONTRACT_ERROR_REGISTRY, contractErrorFromCode, decodeContractError, type ContractErrorFamily, type ContractErrorInfo, } from "./contract-errors.js";
17
+ export { MercuryIndexer, mercuryPasskeyIndexerUrl, MERCURY_PASSKEY_INDEXER_URLS, lookupWithRetry, type MercuryIndexerConfig, type SignerIndexer, type WalletSigner, type IndexerHealth, type SignerStatus, type SignerStorageClass, type FindWalletsHardeningDeps, } from "./indexer/index.js";
18
+ export { PasskeyEventEmitter, type PasskeyEvent, type PasskeyEventMap, type EventListener, } from "./events.js";
19
+ export { deriveContractAddress, extractPublicKeyFromAttestation, compactSignature, generateChallenge, } from "./utils.js";
20
+ export { validateAddress, validateAmount, validateExpiration, validateSecp256r1PublicKey, } from "./validation.js";
21
+ export { VERSION, NAME } from "./version.js";
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EACL,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,cAAc,GACpB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,SAAS,EAAE,8BAA8B,EAAE,MAAM,UAAU,CAAC;AAGrE,OAAO,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAG1D,OAAO,EACL,aAAa,EACb,aAAa,EACb,YAAY,EACZ,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,GAC3B,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,SAAS,EACT,WAAW,EACX,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,SAAS,GACV,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,GACvB,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,4BAA4B,EAC5B,eAAe,EACf,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,GAC9B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,mBAAmB,EACnB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,qBAAqB,EACrB,+BAA+B,EAC/B,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC"}