@crossmint/wallets-sdk 0.18.3 → 0.18.6

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 (197) hide show
  1. package/dist/api/client.cjs +10 -1
  2. package/dist/api/client.js +10 -1
  3. package/dist/api/gen/client.gen.cjs +7 -1
  4. package/dist/api/gen/client.gen.js +7 -1
  5. package/dist/api/gen/index.cjs +179 -1
  6. package/dist/api/gen/index.js +179 -1
  7. package/dist/api/gen/sdk.gen.cjs +178 -1
  8. package/dist/api/gen/sdk.gen.js +178 -1
  9. package/dist/api/gen/types.gen.js +1 -1
  10. package/dist/api/index.cjs +12 -1
  11. package/dist/api/index.js +12 -1
  12. package/dist/api/types.js +1 -1
  13. package/dist/chains/chains.cjs +9 -1
  14. package/dist/chains/chains.js +9 -1
  15. package/dist/chains/definitions/story.cjs +7 -1
  16. package/dist/chains/definitions/story.js +7 -1
  17. package/dist/chains/definitions/storyTestnet.cjs +7 -1
  18. package/dist/chains/definitions/storyTestnet.js +7 -1
  19. package/dist/chunk-2T5HHKUI.js +19 -0
  20. package/dist/chunk-34FDYDOM.cjs +87 -0
  21. package/dist/chunk-3U6UAYOV.js +25 -0
  22. package/dist/chunk-454RYNSZ.js +80 -0
  23. package/dist/chunk-455NK5LB.js +0 -0
  24. package/dist/chunk-55V4VMTX.cjs +25 -0
  25. package/dist/chunk-5BP6CVYY.cjs +58 -0
  26. package/dist/chunk-5YR2ILEW.js +69 -0
  27. package/dist/chunk-6G7ZWCCG.js +247 -0
  28. package/dist/chunk-7ECQJFYM.cjs +63 -0
  29. package/dist/chunk-7JFVG4IY.js +59 -0
  30. package/dist/chunk-AL77JANE.js +36 -0
  31. package/dist/chunk-B6JOIWRH.cjs +289 -0
  32. package/dist/chunk-BSC55MYK.cjs +43 -0
  33. package/dist/chunk-CCIGWTAO.cjs +1 -0
  34. package/dist/chunk-CHGPNMRL.cjs +36 -0
  35. package/dist/chunk-CL44FTXR.js +289 -0
  36. package/dist/chunk-CN2GVFBU.cjs +138 -0
  37. package/dist/chunk-DQCXGBZM.js +59 -0
  38. package/dist/chunk-E3OS753T.js +175 -0
  39. package/dist/chunk-EYJQSDDI.js +43 -0
  40. package/dist/chunk-F6E3ZDRG.cjs +175 -0
  41. package/dist/chunk-FPMW7Q5O.js +55 -0
  42. package/dist/chunk-G3LEJR3P.cjs +53 -0
  43. package/dist/chunk-G5NYLGM5.cjs +55 -0
  44. package/dist/chunk-GLRDLJS5.js +92 -0
  45. package/dist/chunk-GNF2U7IX.cjs +69 -0
  46. package/dist/chunk-GQIZWD4F.cjs +301 -0
  47. package/dist/chunk-HYKMSBCT.cjs +75 -0
  48. package/dist/chunk-IVNYZDI5.cjs +73 -0
  49. package/dist/chunk-K3HFAPSV.js +73 -0
  50. package/dist/chunk-KS63YEQ4.js +138 -0
  51. package/dist/chunk-KT3CVXFG.js +9 -0
  52. package/dist/chunk-LGONZW4W.cjs +629 -0
  53. package/dist/chunk-LHYSCUKJ.cjs +16 -0
  54. package/dist/chunk-LKAO2MV2.cjs +80 -0
  55. package/dist/chunk-LLFD22UQ.cjs +36 -0
  56. package/dist/chunk-MZBFXUHT.js +63 -0
  57. package/dist/chunk-NIBKCMQ2.cjs +19 -0
  58. package/dist/chunk-OKXSUK63.js +87 -0
  59. package/dist/chunk-R2OY54EJ.cjs +59 -0
  60. package/dist/chunk-RAWKXOHR.js +53 -0
  61. package/dist/chunk-RBHGZDDX.cjs +58 -0
  62. package/dist/chunk-RHR6P2KP.cjs +15 -0
  63. package/dist/chunk-RTRDZB52.js +778 -0
  64. package/dist/chunk-S5YXROL6.js +301 -0
  65. package/dist/chunk-SGINWAB6.js +155 -0
  66. package/dist/chunk-TK3EUCQ4.cjs +59 -0
  67. package/dist/chunk-TOHXQVLS.js +58 -0
  68. package/dist/chunk-UKBWSQ7R.js +629 -0
  69. package/dist/chunk-UMGB3Q7I.cjs +92 -0
  70. package/dist/chunk-V3QJQUT7.cjs +778 -0
  71. package/dist/chunk-WC7T2CR4.js +44 -0
  72. package/dist/chunk-WJUPOCKJ.js +15 -0
  73. package/dist/chunk-WQVJM3PG.js +16 -0
  74. package/dist/chunk-XC2V34TS.cjs +155 -0
  75. package/dist/chunk-XRA5GFH3.js +75 -0
  76. package/dist/chunk-YBA7WO32.cjs +44 -0
  77. package/dist/chunk-ZP4ZZCIE.js +58 -0
  78. package/dist/chunk-ZT7EGOCI.cjs +9 -0
  79. package/dist/chunk-ZTGRDOOH.js +36 -0
  80. package/dist/chunk-ZZJ7U5G3.cjs +247 -0
  81. package/dist/index.cjs +57 -1
  82. package/dist/index.js +57 -1
  83. package/dist/logger/index.cjs +11 -0
  84. package/dist/logger/index.d.cts +2 -0
  85. package/dist/logger/index.d.ts +2 -0
  86. package/dist/logger/index.js +11 -0
  87. package/dist/logger/init.cjs +10 -0
  88. package/dist/logger/init.d.cts +15 -0
  89. package/dist/logger/init.d.ts +15 -0
  90. package/dist/logger/init.js +10 -0
  91. package/dist/sdk.cjs +33 -1
  92. package/dist/sdk.js +33 -1
  93. package/dist/signers/evm-api-key.cjs +7 -1
  94. package/dist/signers/evm-api-key.js +7 -1
  95. package/dist/signers/evm-external-wallet.cjs +7 -1
  96. package/dist/signers/evm-external-wallet.js +7 -1
  97. package/dist/signers/index.cjs +21 -1
  98. package/dist/signers/index.js +21 -1
  99. package/dist/signers/non-custodial/index.cjs +24 -1
  100. package/dist/signers/non-custodial/index.js +24 -1
  101. package/dist/signers/non-custodial/ncs-evm-signer.cjs +10 -1
  102. package/dist/signers/non-custodial/ncs-evm-signer.js +10 -1
  103. package/dist/signers/non-custodial/ncs-iframe-manager.cjs +7 -1
  104. package/dist/signers/non-custodial/ncs-iframe-manager.js +7 -1
  105. package/dist/signers/non-custodial/ncs-signer.cjs +11 -1
  106. package/dist/signers/non-custodial/ncs-signer.js +11 -1
  107. package/dist/signers/non-custodial/ncs-solana-signer.cjs +10 -1
  108. package/dist/signers/non-custodial/ncs-solana-signer.js +10 -1
  109. package/dist/signers/non-custodial/ncs-stellar-signer.cjs +10 -1
  110. package/dist/signers/non-custodial/ncs-stellar-signer.js +10 -1
  111. package/dist/signers/passkey.cjs +7 -1
  112. package/dist/signers/passkey.js +7 -1
  113. package/dist/signers/solana-api-key.cjs +7 -1
  114. package/dist/signers/solana-api-key.js +7 -1
  115. package/dist/signers/solana-external-wallet.cjs +8 -1
  116. package/dist/signers/solana-external-wallet.js +8 -1
  117. package/dist/signers/stellar-external-wallet.cjs +7 -1
  118. package/dist/signers/stellar-external-wallet.js +7 -1
  119. package/dist/signers/types.cjs +9 -1
  120. package/dist/signers/types.js +9 -1
  121. package/dist/utils/constants.cjs +13 -1
  122. package/dist/utils/constants.js +13 -1
  123. package/dist/utils/errors.cjs +55 -1
  124. package/dist/utils/errors.js +55 -1
  125. package/dist/utils/signer-validation.cjs +10 -1
  126. package/dist/utils/signer-validation.d.cts +7 -1
  127. package/dist/utils/signer-validation.d.ts +7 -1
  128. package/dist/utils/signer-validation.js +10 -1
  129. package/dist/wallets/evm.cjs +20 -1
  130. package/dist/wallets/evm.js +20 -1
  131. package/dist/wallets/solana.cjs +18 -1
  132. package/dist/wallets/solana.js +18 -1
  133. package/dist/wallets/stellar.cjs +17 -1
  134. package/dist/wallets/stellar.js +17 -1
  135. package/dist/wallets/wallet-factory.cjs +27 -1
  136. package/dist/wallets/wallet-factory.js +27 -1
  137. package/dist/wallets/wallet.cjs +16 -1
  138. package/dist/wallets/wallet.js +16 -1
  139. package/package.json +6 -5
  140. package/dist/chunk-2SHDBC47.js +0 -1
  141. package/dist/chunk-2XVV7Z43.cjs +0 -1
  142. package/dist/chunk-2YH3NVVK.cjs +0 -1
  143. package/dist/chunk-3APSOOE3.js +0 -1
  144. package/dist/chunk-3SW6AJSG.cjs +0 -1
  145. package/dist/chunk-4KXOWU5E.cjs +0 -1
  146. package/dist/chunk-5M7IRODB.js +0 -1
  147. package/dist/chunk-5QIW67NU.cjs +0 -1
  148. package/dist/chunk-6PVKL5RC.js +0 -1
  149. package/dist/chunk-7HTB7WKD.cjs +0 -1
  150. package/dist/chunk-7JIPYRKX.js +0 -1
  151. package/dist/chunk-BQZES4ST.js +0 -1
  152. package/dist/chunk-BW7YYVZE.js +0 -1
  153. package/dist/chunk-C3T63EC7.cjs +0 -1
  154. package/dist/chunk-CXTC3YDL.cjs +0 -1
  155. package/dist/chunk-DV6ZRFKV.js +0 -1
  156. package/dist/chunk-DX7VVXY5.cjs +0 -1
  157. package/dist/chunk-FATVK26C.js +0 -1
  158. package/dist/chunk-GEY574TH.cjs +0 -1
  159. package/dist/chunk-GKZFI322.js +0 -1
  160. package/dist/chunk-H4T4IXCF.js +0 -1
  161. package/dist/chunk-HJ5EDMTA.js +0 -1
  162. package/dist/chunk-HPHVJ6BA.cjs +0 -1
  163. package/dist/chunk-HQAKCIYM.js +0 -1
  164. package/dist/chunk-HRSVFJND.cjs +0 -1
  165. package/dist/chunk-IGBQEAD5.js +0 -1
  166. package/dist/chunk-IR5WN6FQ.cjs +0 -1
  167. package/dist/chunk-JUSY5XEE.js +0 -1
  168. package/dist/chunk-KFJLRIY7.js +0 -1
  169. package/dist/chunk-KKQBZXFE.js +0 -1
  170. package/dist/chunk-KO6QYKDX.cjs +0 -1
  171. package/dist/chunk-KRV3IXJU.cjs +0 -1
  172. package/dist/chunk-LW6JSI4J.js +0 -1
  173. package/dist/chunk-M2UBZY5S.cjs +0 -1
  174. package/dist/chunk-M4TOGGLV.cjs +0 -1
  175. package/dist/chunk-MQP5VZCA.cjs +0 -1
  176. package/dist/chunk-NP32UO2G.cjs +0 -1
  177. package/dist/chunk-O4FVTK7X.cjs +0 -1
  178. package/dist/chunk-P6JJHAAV.js +0 -1
  179. package/dist/chunk-PONCGT2H.cjs +0 -1
  180. package/dist/chunk-PSXRNSOE.js +0 -1
  181. package/dist/chunk-QMXG67T3.cjs +0 -1
  182. package/dist/chunk-RJZV72YF.js +0 -1
  183. package/dist/chunk-S3DYQVRD.js +0 -1
  184. package/dist/chunk-SLG7HGGL.js +0 -1
  185. package/dist/chunk-STYSP6KL.cjs +0 -1
  186. package/dist/chunk-UBOWSXW3.js +0 -1
  187. package/dist/chunk-UNBXKCNN.js +0 -1
  188. package/dist/chunk-VY634F3J.js +0 -1
  189. package/dist/chunk-WQP2FSVI.js +0 -1
  190. package/dist/chunk-WYYAPI4G.cjs +0 -1
  191. package/dist/chunk-WZFHEUWT.cjs +0 -1
  192. package/dist/chunk-XALFCQKD.cjs +0 -1
  193. package/dist/chunk-YWPTI2QO.cjs +0 -1
  194. package/dist/chunk-YWXQIFVZ.js +0 -3
  195. package/dist/chunk-YZ4HRYSL.cjs +0 -1
  196. package/dist/chunk-Z54LVUDS.js +0 -1
  197. package/dist/chunk-ZWMB3QLR.cjs +0 -3
@@ -0,0 +1,301 @@
1
+ import {
2
+ compareSignerConfigs,
3
+ normalizeValueForComparison
4
+ } from "./chunk-ZP4ZZCIE.js";
5
+ import {
6
+ Wallet
7
+ } from "./chunk-UKBWSQ7R.js";
8
+ import {
9
+ assembleSigner
10
+ } from "./chunk-TOHXQVLS.js";
11
+ import {
12
+ WalletCreationError,
13
+ WalletNotAvailableError
14
+ } from "./chunk-SGINWAB6.js";
15
+ import {
16
+ walletsLogger
17
+ } from "./chunk-RAWKXOHR.js";
18
+ import {
19
+ __async,
20
+ __spreadValues
21
+ } from "./chunk-FPMW7Q5O.js";
22
+
23
+ // src/wallets/wallet-factory.ts
24
+ import { WebAuthnP256 } from "ox";
25
+ var DELEGATED_SIGNER_MISMATCH_ERROR = "When 'delegatedSigners' is provided to a method that may fetch an existing wallet, each specified delegated signer must exist in that wallet's configuration.";
26
+ var WalletFactory = class {
27
+ constructor(apiClient) {
28
+ this.apiClient = apiClient;
29
+ }
30
+ getOrCreateWallet(args) {
31
+ return __async(this, null, function* () {
32
+ if (this.apiClient.isServerSide) {
33
+ throw new WalletCreationError(
34
+ "getOrCreateWallet can only be called from client-side code.\n- Make sure you're running this in the browser (or another client environment), not on your server.\n- Use your Crossmint Client API Key (not a server key)."
35
+ );
36
+ }
37
+ const locator = this.getWalletLocator(args);
38
+ walletsLogger.info("wallet.getOrCreate.start", {
39
+ chain: args.chain,
40
+ signerType: args.signer.type
41
+ });
42
+ const existingWallet = yield this.apiClient.getWallet(locator);
43
+ if (existingWallet != null && !("error" in existingWallet)) {
44
+ walletsLogger.info("wallet.getOrCreate.existing", {
45
+ chain: args.chain,
46
+ address: existingWallet.address
47
+ });
48
+ return this.createWalletInstance(existingWallet, args);
49
+ }
50
+ walletsLogger.info("wallet.getOrCreate.creating", {
51
+ chain: args.chain
52
+ });
53
+ return this.createWallet(args);
54
+ });
55
+ }
56
+ getWallet(walletLocator, args) {
57
+ return __async(this, null, function* () {
58
+ if (!this.apiClient.isServerSide) {
59
+ throw new WalletCreationError("getWallet is not supported on client side, use getOrCreateWallet instead");
60
+ }
61
+ walletsLogger.info("wallet.get.start", {
62
+ walletLocator,
63
+ chain: args.chain
64
+ });
65
+ const existingWallet = yield this.apiClient.getWallet(walletLocator);
66
+ if ("error" in existingWallet) {
67
+ walletsLogger.warn("wallet.get.notFound", {
68
+ walletLocator,
69
+ error: existingWallet.error
70
+ });
71
+ throw new WalletNotAvailableError(JSON.stringify(existingWallet));
72
+ }
73
+ walletsLogger.info("wallet.get.success", {
74
+ walletLocator,
75
+ address: existingWallet.address
76
+ });
77
+ return this.createWalletInstance(existingWallet, args);
78
+ });
79
+ }
80
+ createWallet(args) {
81
+ return __async(this, null, function* () {
82
+ var _a, _b, _c, _d, _e;
83
+ yield (_c = (_b = (_a = args.options) == null ? void 0 : _a.experimental_callbacks) == null ? void 0 : _b.onWalletCreationStart) == null ? void 0 : _c.call(_b);
84
+ walletsLogger.info("wallet.create.start", {
85
+ chain: args.chain,
86
+ signerType: args.signer.type
87
+ });
88
+ this.mutateSignerFromCustomAuth(args, true);
89
+ const adminSigner = args.signer.type === "passkey" ? yield this.createPasskeyAdminSigner(args.signer) : args.signer;
90
+ const walletResponse = yield this.apiClient.createWallet({
91
+ type: "smart",
92
+ chainType: this.getChainType(args.chain),
93
+ config: __spreadValues(__spreadValues({
94
+ adminSigner
95
+ }, (args == null ? void 0 : args.plugins) ? { plugins: args.plugins } : {}), args.delegatedSigners != null ? { delegatedSigners: args.delegatedSigners } : {}),
96
+ owner: (_d = args.owner) != null ? _d : void 0,
97
+ alias: (_e = args.alias) != null ? _e : void 0
98
+ });
99
+ if ("error" in walletResponse) {
100
+ walletsLogger.error("wallet.create.error", {
101
+ chain: args.chain,
102
+ error: walletResponse.error
103
+ });
104
+ throw new WalletCreationError(JSON.stringify(walletResponse));
105
+ }
106
+ walletsLogger.info("wallet.create.success", {
107
+ chain: args.chain,
108
+ address: walletResponse.address
109
+ });
110
+ return this.createWalletInstance(walletResponse, args);
111
+ });
112
+ }
113
+ createWalletInstance(walletResponse, args) {
114
+ this.validateExistingWalletConfig(walletResponse, args);
115
+ const signerConfig = this.toInternalSignerConfig(walletResponse, args.signer, args.options);
116
+ return new Wallet(
117
+ {
118
+ chain: args.chain,
119
+ address: walletResponse.address,
120
+ owner: walletResponse.owner,
121
+ signer: assembleSigner(args.chain, signerConfig),
122
+ options: args.options,
123
+ alias: args.alias
124
+ },
125
+ this.apiClient
126
+ );
127
+ }
128
+ toInternalSignerConfig(walletResponse, signerArgs, options) {
129
+ var _a, _b, _c, _d, _e, _f;
130
+ if (!(walletResponse.chainType === "evm" || walletResponse.chainType === "solana" || walletResponse.chainType === "stellar")) {
131
+ throw new WalletCreationError(`Wallet type ${walletResponse.chainType} is not supported`);
132
+ }
133
+ if (signerArgs == null && ((_a = walletResponse.config) == null ? void 0 : _a.adminSigner) == null) {
134
+ throw new WalletCreationError("Signer is required to create a wallet");
135
+ }
136
+ switch (signerArgs.type) {
137
+ case "api-key": {
138
+ if (((_b = walletResponse.config) == null ? void 0 : _b.adminSigner.type) !== "api-key") {
139
+ throw new WalletCreationError("API key signer does not match the wallet's signer type");
140
+ }
141
+ return {
142
+ type: "api-key",
143
+ address: walletResponse.config.adminSigner.address,
144
+ locator: walletResponse.config.adminSigner.locator
145
+ };
146
+ }
147
+ case "external-wallet":
148
+ if (((_c = walletResponse.config) == null ? void 0 : _c.adminSigner.type) !== "external-wallet") {
149
+ throw new WalletCreationError("External wallet signer does not match the wallet's signer type");
150
+ }
151
+ return __spreadValues(__spreadValues({}, walletResponse.config.adminSigner), signerArgs);
152
+ case "passkey":
153
+ if (((_d = walletResponse.config) == null ? void 0 : _d.adminSigner.type) !== "passkey") {
154
+ throw new WalletCreationError("Passkey signer does not match the wallet's signer type");
155
+ }
156
+ return {
157
+ type: "passkey",
158
+ id: walletResponse.config.adminSigner.id,
159
+ name: walletResponse.config.adminSigner.name,
160
+ locator: walletResponse.config.adminSigner.locator,
161
+ onCreatePasskey: signerArgs.onCreatePasskey,
162
+ onSignWithPasskey: signerArgs.onSignWithPasskey
163
+ };
164
+ case "email": {
165
+ if (((_e = walletResponse.config) == null ? void 0 : _e.adminSigner.type) !== "email") {
166
+ throw new WalletCreationError("Email signer does not match the wallet's signer type");
167
+ }
168
+ const { locator, email, address } = walletResponse.config.adminSigner;
169
+ return {
170
+ type: "email",
171
+ email,
172
+ locator,
173
+ address,
174
+ crossmint: this.apiClient.crossmint,
175
+ onAuthRequired: signerArgs.onAuthRequired,
176
+ clientTEEConnection: options == null ? void 0 : options.clientTEEConnection
177
+ };
178
+ }
179
+ case "phone": {
180
+ if (((_f = walletResponse.config) == null ? void 0 : _f.adminSigner.type) !== "phone") {
181
+ throw new WalletCreationError("Phone signer does not match the wallet's signer type");
182
+ }
183
+ const { locator, phone, address } = walletResponse.config.adminSigner;
184
+ return {
185
+ type: "phone",
186
+ phone,
187
+ locator,
188
+ address,
189
+ crossmint: this.apiClient.crossmint,
190
+ onAuthRequired: signerArgs.onAuthRequired,
191
+ clientTEEConnection: options == null ? void 0 : options.clientTEEConnection
192
+ };
193
+ }
194
+ default:
195
+ throw new Error("Invalid signer type");
196
+ }
197
+ }
198
+ getWalletLocator(args) {
199
+ return `me:${this.getChainType(args.chain)}:smart` + (args.alias != null ? `:alias:${args.alias}` : "");
200
+ }
201
+ createPasskeyAdminSigner(signer) {
202
+ return __async(this, null, function* () {
203
+ var _a;
204
+ if (signer.type !== "passkey") {
205
+ throw new Error("Signer is not a passkey");
206
+ }
207
+ const passkeyName = (_a = signer.name) != null ? _a : `Crossmint Wallet ${Date.now()}`;
208
+ const passkeyCredential = signer.onCreatePasskey ? yield signer.onCreatePasskey(passkeyName) : yield WebAuthnP256.createCredential({ name: passkeyName });
209
+ return {
210
+ type: "passkey",
211
+ id: passkeyCredential.id,
212
+ name: passkeyName,
213
+ publicKey: {
214
+ x: passkeyCredential.publicKey.x.toString(),
215
+ y: passkeyCredential.publicKey.y.toString()
216
+ }
217
+ };
218
+ });
219
+ }
220
+ mutateSignerFromCustomAuth(args, isNewWalletSigner = false) {
221
+ var _a, _b;
222
+ const { experimental_customAuth } = this.apiClient.crossmint;
223
+ if (args.signer.type === "email" && (experimental_customAuth == null ? void 0 : experimental_customAuth.email) != null) {
224
+ args.signer.email = (_a = args.signer.email) != null ? _a : experimental_customAuth.email;
225
+ }
226
+ if (args.signer.type === "phone" && (experimental_customAuth == null ? void 0 : experimental_customAuth.phone) != null) {
227
+ args.signer.phone = (_b = args.signer.phone) != null ? _b : experimental_customAuth.phone;
228
+ }
229
+ if (args.signer.type === "external-wallet" && (experimental_customAuth == null ? void 0 : experimental_customAuth.externalWalletSigner) != null) {
230
+ args.signer = isNewWalletSigner ? {
231
+ type: "external-wallet",
232
+ address: experimental_customAuth.externalWalletSigner.address
233
+ } : experimental_customAuth.externalWalletSigner;
234
+ }
235
+ return;
236
+ }
237
+ validateExistingWalletConfig(existingWallet, args) {
238
+ var _a;
239
+ this.mutateSignerFromCustomAuth(args);
240
+ if (args.owner != null && existingWallet.owner != null && normalizeValueForComparison(args.owner) !== normalizeValueForComparison(existingWallet.owner)) {
241
+ throw new WalletCreationError("Wallet owner does not match existing wallet's linked user");
242
+ }
243
+ if (args.chain === "solana" && existingWallet.chainType !== "solana" || args.chain !== "solana" && existingWallet.chainType === "solana" || args.chain === "stellar" && existingWallet.chainType !== "stellar" || args.chain !== "stellar" && existingWallet.chainType === "stellar") {
244
+ throw new WalletCreationError(
245
+ `Wallet chain does not match existing wallet's chain. You must use chain: ${existingWallet.chainType}.`
246
+ );
247
+ }
248
+ if (existingWallet.type !== "smart") {
249
+ return;
250
+ }
251
+ const adminSignerArgs = args.signer;
252
+ const existingWalletSigner = (_a = existingWallet == null ? void 0 : existingWallet.config) == null ? void 0 : _a.adminSigner;
253
+ if (adminSignerArgs != null && existingWalletSigner != null) {
254
+ if (adminSignerArgs.type !== existingWalletSigner.type) {
255
+ throw new WalletCreationError(
256
+ "The wallet signer type provided in the wallet config does not match the existing wallet's adminSigner type"
257
+ );
258
+ }
259
+ compareSignerConfigs(adminSignerArgs, existingWalletSigner);
260
+ }
261
+ if (args.delegatedSigners != null) {
262
+ this.validateDelegatedSigners(existingWallet, args.delegatedSigners);
263
+ }
264
+ }
265
+ validateDelegatedSigners(existingWallet, inputDelegatedSigners) {
266
+ var _a;
267
+ const existingDelegatedSigners = (_a = existingWallet == null ? void 0 : existingWallet.config) == null ? void 0 : _a.delegatedSigners;
268
+ if (inputDelegatedSigners.length === 0) {
269
+ return;
270
+ }
271
+ if (existingDelegatedSigners == null || existingDelegatedSigners.length === 0) {
272
+ throw new WalletCreationError(
273
+ `${inputDelegatedSigners.length} delegated signer(s) specified, but wallet "${existingWallet.address}" has no delegated signers. ${DELEGATED_SIGNER_MISMATCH_ERROR}`
274
+ );
275
+ }
276
+ for (const argSigner of inputDelegatedSigners) {
277
+ const matchingExistingSigner = existingDelegatedSigners.find(
278
+ (existingSigner) => existingSigner.locator === argSigner.signer
279
+ );
280
+ if (matchingExistingSigner == null) {
281
+ const walletSigners = existingDelegatedSigners.map((s) => s.locator).join(", ");
282
+ throw new WalletCreationError(
283
+ `Delegated signer '${argSigner.signer}' does not exist in wallet "${existingWallet.address}". Available delegated signers: ${walletSigners}. ${DELEGATED_SIGNER_MISMATCH_ERROR}`
284
+ );
285
+ }
286
+ }
287
+ }
288
+ getChainType(chain) {
289
+ if (chain === "solana") {
290
+ return "solana";
291
+ }
292
+ if (chain === "stellar") {
293
+ return "stellar";
294
+ }
295
+ return "evm";
296
+ }
297
+ };
298
+
299
+ export {
300
+ WalletFactory
301
+ };
@@ -0,0 +1,155 @@
1
+ // src/utils/errors.ts
2
+ import { CrossmintSDKError, WalletErrorCode } from "@crossmint/common-sdk-base";
3
+ var InvalidApiKeyError = class extends CrossmintSDKError {
4
+ constructor(message, details) {
5
+ super(message, WalletErrorCode.API_KEY_INVALID, details);
6
+ }
7
+ };
8
+ var InvalidEnvironmentError = class extends CrossmintSDKError {
9
+ constructor(message, details) {
10
+ super(message, WalletErrorCode.ENVIRONMENT_INVALID, details);
11
+ }
12
+ };
13
+ var WalletTypeNotSupportedError = class extends CrossmintSDKError {
14
+ constructor(message, details) {
15
+ super(message, WalletErrorCode.WALLET_TYPE_INVALID, details);
16
+ }
17
+ };
18
+ var WalletNotAvailableError = class extends CrossmintSDKError {
19
+ constructor(message, details) {
20
+ super(message, WalletErrorCode.WALLET_NOT_AVAILABLE, details);
21
+ }
22
+ };
23
+ var InvalidWalletConfigError = class extends CrossmintSDKError {
24
+ constructor(message, details) {
25
+ super(message, WalletErrorCode.WALLET_NOT_AVAILABLE, details);
26
+ }
27
+ };
28
+ var WalletCreationError = class extends CrossmintSDKError {
29
+ constructor(message, details) {
30
+ super(message, WalletErrorCode.WALLET_CREATION_FAILED, details);
31
+ }
32
+ };
33
+ var WalletTypeMismatchError = class extends CrossmintSDKError {
34
+ constructor(message, details) {
35
+ super(message, WalletErrorCode.WALLET_TYPE_INVALID, details);
36
+ }
37
+ };
38
+ var SignerTypeMismatchError = class extends CrossmintSDKError {
39
+ constructor(message, details) {
40
+ super(message, WalletErrorCode.SIGNER_INVALID, details);
41
+ }
42
+ };
43
+ var InvalidSignerError = class extends CrossmintSDKError {
44
+ constructor(message, details) {
45
+ super(message, WalletErrorCode.SIGNER_INVALID, details);
46
+ }
47
+ };
48
+ var InvalidMessageFormatError = class extends CrossmintSDKError {
49
+ constructor(message, details) {
50
+ super(message, WalletErrorCode.MESSAGE_INVALID, details);
51
+ }
52
+ };
53
+ var InvalidTypedDataError = class extends CrossmintSDKError {
54
+ constructor(message, details) {
55
+ super(message, WalletErrorCode.MESSAGE_INVALID, details);
56
+ }
57
+ };
58
+ var SignatureNotFoundError = class extends CrossmintSDKError {
59
+ constructor(message, details) {
60
+ super(message, WalletErrorCode.SIGNING_FAILED, details);
61
+ }
62
+ };
63
+ var SigningFailedError = class extends CrossmintSDKError {
64
+ constructor(message, details) {
65
+ super(message, WalletErrorCode.SIGNING_FAILED, details);
66
+ }
67
+ };
68
+ var MessageSigningNotSupportedError = class extends CrossmintSDKError {
69
+ constructor(message, details) {
70
+ super(message, WalletErrorCode.SIGNING_FAILED, details);
71
+ }
72
+ };
73
+ var SignatureNotCreatedError = class extends CrossmintSDKError {
74
+ constructor(message, details) {
75
+ super(message, WalletErrorCode.NO_SIGNATURE, details);
76
+ }
77
+ };
78
+ var SignatureNotAvailableError = class extends CrossmintSDKError {
79
+ constructor(message, details) {
80
+ super(message, WalletErrorCode.NO_SIGNATURE, details);
81
+ }
82
+ };
83
+ var SignatureFailedError = class extends CrossmintSDKError {
84
+ constructor(message, details) {
85
+ super(message, WalletErrorCode.SIGNING_FAILED, details);
86
+ }
87
+ };
88
+ var TransactionNotCreatedError = class extends CrossmintSDKError {
89
+ constructor(message, details) {
90
+ super(message, WalletErrorCode.NO_TRANSACTION, details);
91
+ }
92
+ };
93
+ var TransactionNotAvailableError = class extends CrossmintSDKError {
94
+ constructor(message, details) {
95
+ super(message, WalletErrorCode.NO_TRANSACTION, details);
96
+ }
97
+ };
98
+ var TransactionConfirmationTimeoutError = class extends CrossmintSDKError {
99
+ constructor(message, details) {
100
+ super(message, WalletErrorCode.TRANSACTION_FAILED, details);
101
+ }
102
+ };
103
+ var TransactionSendingFailedError = class extends CrossmintSDKError {
104
+ constructor(message, details) {
105
+ super(message, WalletErrorCode.TRANSACTION_FAILED, details);
106
+ }
107
+ };
108
+ var TransactionAwaitingApprovalError = class extends CrossmintSDKError {
109
+ constructor(message, details) {
110
+ super(message, WalletErrorCode.TRANSACTION_FAILED, details);
111
+ }
112
+ };
113
+ var TransactionHashNotFoundError = class extends CrossmintSDKError {
114
+ constructor(message, details) {
115
+ super(message, WalletErrorCode.TRANSACTION_FAILED, details);
116
+ }
117
+ };
118
+ var TransactionFailedError = class extends CrossmintSDKError {
119
+ constructor(message, details) {
120
+ super(message, WalletErrorCode.TRANSACTION_FAILED, details);
121
+ }
122
+ };
123
+ var PendingApprovalsError = class extends CrossmintSDKError {
124
+ constructor(message, details) {
125
+ super(message, WalletErrorCode.TRANSACTION_FAILED, details);
126
+ }
127
+ };
128
+
129
+ export {
130
+ InvalidApiKeyError,
131
+ InvalidEnvironmentError,
132
+ WalletTypeNotSupportedError,
133
+ WalletNotAvailableError,
134
+ InvalidWalletConfigError,
135
+ WalletCreationError,
136
+ WalletTypeMismatchError,
137
+ SignerTypeMismatchError,
138
+ InvalidSignerError,
139
+ InvalidMessageFormatError,
140
+ InvalidTypedDataError,
141
+ SignatureNotFoundError,
142
+ SigningFailedError,
143
+ MessageSigningNotSupportedError,
144
+ SignatureNotCreatedError,
145
+ SignatureNotAvailableError,
146
+ SignatureFailedError,
147
+ TransactionNotCreatedError,
148
+ TransactionNotAvailableError,
149
+ TransactionConfirmationTimeoutError,
150
+ TransactionSendingFailedError,
151
+ TransactionAwaitingApprovalError,
152
+ TransactionHashNotFoundError,
153
+ TransactionFailedError,
154
+ PendingApprovalsError
155
+ };
@@ -0,0 +1,59 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkG5NYLGM5cjs = require('./chunk-G5NYLGM5.cjs');
4
+
5
+ // src/signers/non-custodial/ncs-iframe-manager.ts
6
+ var _clientsdkwindow = require('@crossmint/client-sdk-window');
7
+ var _clientsigners = require('@crossmint/client-signers');
8
+ var NcsIframeManager = class {
9
+ constructor(config) {
10
+ this.config = config;
11
+ this.handshakeParent = null;
12
+ }
13
+ initialize() {
14
+ return _chunkG5NYLGM5cjs.__async.call(void 0, this, null, function* () {
15
+ if (this.handshakeParent) {
16
+ return this.handshakeParent;
17
+ }
18
+ const iframeUrl = new URL(_clientsigners.environmentUrlConfig[this.config.environment]);
19
+ iframeUrl.searchParams.set("targetOrigin", window.location.origin);
20
+ const iframeElement = yield this.createInvisibleIFrame(iframeUrl.toString());
21
+ this.handshakeParent = yield _clientsdkwindow.IFrameWindow.init(
22
+ iframeElement,
23
+ {
24
+ targetOrigin: iframeUrl.origin,
25
+ incomingEvents: _clientsigners.signerOutboundEvents,
26
+ outgoingEvents: _clientsigners.signerInboundEvents
27
+ },
28
+ _clientsdkwindow.SignersWindowTransport
29
+ );
30
+ yield this.handshakeParent.handshakeWithChild();
31
+ return this.handshakeParent;
32
+ });
33
+ }
34
+ createInvisibleIFrame(url) {
35
+ return _chunkG5NYLGM5cjs.__async.call(void 0, this, null, function* () {
36
+ const iframe = document.createElement("iframe");
37
+ iframe.src = url;
38
+ Object.assign(iframe.style, {
39
+ position: "absolute",
40
+ opacity: "0",
41
+ pointerEvents: "none",
42
+ width: "0",
43
+ height: "0",
44
+ border: "none",
45
+ top: "-9999px",
46
+ left: "-9999px"
47
+ });
48
+ return new Promise((resolve, reject) => {
49
+ iframe.onload = () => resolve(iframe);
50
+ iframe.onerror = () => reject(new Error("Failed to load iframe content"));
51
+ document.body.appendChild(iframe);
52
+ });
53
+ });
54
+ }
55
+ };
56
+
57
+
58
+
59
+ exports.NcsIframeManager = NcsIframeManager;
@@ -0,0 +1,58 @@
1
+ import {
2
+ EVMNonCustodialSigner
3
+ } from "./chunk-454RYNSZ.js";
4
+ import {
5
+ SolanaNonCustodialSigner
6
+ } from "./chunk-XRA5GFH3.js";
7
+ import {
8
+ StellarNonCustodialSigner
9
+ } from "./chunk-K3HFAPSV.js";
10
+ import {
11
+ EVMApiKeySigner
12
+ } from "./chunk-AL77JANE.js";
13
+ import {
14
+ EVMExternalWalletSigner
15
+ } from "./chunk-MZBFXUHT.js";
16
+ import {
17
+ PasskeySigner
18
+ } from "./chunk-EYJQSDDI.js";
19
+ import {
20
+ SolanaApiKeySigner
21
+ } from "./chunk-ZTGRDOOH.js";
22
+ import {
23
+ SolanaExternalWalletSigner
24
+ } from "./chunk-DQCXGBZM.js";
25
+ import {
26
+ StellarExternalWalletSigner
27
+ } from "./chunk-WC7T2CR4.js";
28
+
29
+ // src/signers/index.ts
30
+ function assembleSigner(chain, config) {
31
+ switch (config.type) {
32
+ case "email":
33
+ case "phone":
34
+ if (chain === "solana") {
35
+ return new SolanaNonCustodialSigner(config);
36
+ }
37
+ if (chain === "stellar") {
38
+ return new StellarNonCustodialSigner(config);
39
+ }
40
+ return new EVMNonCustodialSigner(config);
41
+ case "api-key":
42
+ return chain === "solana" ? new SolanaApiKeySigner(config) : new EVMApiKeySigner(config);
43
+ case "external-wallet":
44
+ if (chain === "solana") {
45
+ return new SolanaExternalWalletSigner(config);
46
+ }
47
+ if (chain === "stellar") {
48
+ return new StellarExternalWalletSigner(config);
49
+ }
50
+ return new EVMExternalWalletSigner(config);
51
+ case "passkey":
52
+ return new PasskeySigner(config);
53
+ }
54
+ }
55
+
56
+ export {
57
+ assembleSigner
58
+ };