@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.
- package/dist/api/client.cjs +10 -1
- package/dist/api/client.js +10 -1
- package/dist/api/gen/client.gen.cjs +7 -1
- package/dist/api/gen/client.gen.js +7 -1
- package/dist/api/gen/index.cjs +179 -1
- package/dist/api/gen/index.js +179 -1
- package/dist/api/gen/sdk.gen.cjs +178 -1
- package/dist/api/gen/sdk.gen.js +178 -1
- package/dist/api/gen/types.gen.js +1 -1
- package/dist/api/index.cjs +12 -1
- package/dist/api/index.js +12 -1
- package/dist/api/types.js +1 -1
- package/dist/chains/chains.cjs +9 -1
- package/dist/chains/chains.js +9 -1
- package/dist/chains/definitions/story.cjs +7 -1
- package/dist/chains/definitions/story.js +7 -1
- package/dist/chains/definitions/storyTestnet.cjs +7 -1
- package/dist/chains/definitions/storyTestnet.js +7 -1
- package/dist/chunk-2T5HHKUI.js +19 -0
- package/dist/chunk-34FDYDOM.cjs +87 -0
- package/dist/chunk-3U6UAYOV.js +25 -0
- package/dist/chunk-454RYNSZ.js +80 -0
- package/dist/chunk-455NK5LB.js +0 -0
- package/dist/chunk-55V4VMTX.cjs +25 -0
- package/dist/chunk-5BP6CVYY.cjs +58 -0
- package/dist/chunk-5YR2ILEW.js +69 -0
- package/dist/chunk-6G7ZWCCG.js +247 -0
- package/dist/chunk-7ECQJFYM.cjs +63 -0
- package/dist/chunk-7JFVG4IY.js +59 -0
- package/dist/chunk-AL77JANE.js +36 -0
- package/dist/chunk-B6JOIWRH.cjs +289 -0
- package/dist/chunk-BSC55MYK.cjs +43 -0
- package/dist/chunk-CCIGWTAO.cjs +1 -0
- package/dist/chunk-CHGPNMRL.cjs +36 -0
- package/dist/chunk-CL44FTXR.js +289 -0
- package/dist/chunk-CN2GVFBU.cjs +138 -0
- package/dist/chunk-DQCXGBZM.js +59 -0
- package/dist/chunk-E3OS753T.js +175 -0
- package/dist/chunk-EYJQSDDI.js +43 -0
- package/dist/chunk-F6E3ZDRG.cjs +175 -0
- package/dist/chunk-FPMW7Q5O.js +55 -0
- package/dist/chunk-G3LEJR3P.cjs +53 -0
- package/dist/chunk-G5NYLGM5.cjs +55 -0
- package/dist/chunk-GLRDLJS5.js +92 -0
- package/dist/chunk-GNF2U7IX.cjs +69 -0
- package/dist/chunk-GQIZWD4F.cjs +301 -0
- package/dist/chunk-HYKMSBCT.cjs +75 -0
- package/dist/chunk-IVNYZDI5.cjs +73 -0
- package/dist/chunk-K3HFAPSV.js +73 -0
- package/dist/chunk-KS63YEQ4.js +138 -0
- package/dist/chunk-KT3CVXFG.js +9 -0
- package/dist/chunk-LGONZW4W.cjs +629 -0
- package/dist/chunk-LHYSCUKJ.cjs +16 -0
- package/dist/chunk-LKAO2MV2.cjs +80 -0
- package/dist/chunk-LLFD22UQ.cjs +36 -0
- package/dist/chunk-MZBFXUHT.js +63 -0
- package/dist/chunk-NIBKCMQ2.cjs +19 -0
- package/dist/chunk-OKXSUK63.js +87 -0
- package/dist/chunk-R2OY54EJ.cjs +59 -0
- package/dist/chunk-RAWKXOHR.js +53 -0
- package/dist/chunk-RBHGZDDX.cjs +58 -0
- package/dist/chunk-RHR6P2KP.cjs +15 -0
- package/dist/chunk-RTRDZB52.js +778 -0
- package/dist/chunk-S5YXROL6.js +301 -0
- package/dist/chunk-SGINWAB6.js +155 -0
- package/dist/chunk-TK3EUCQ4.cjs +59 -0
- package/dist/chunk-TOHXQVLS.js +58 -0
- package/dist/chunk-UKBWSQ7R.js +629 -0
- package/dist/chunk-UMGB3Q7I.cjs +92 -0
- package/dist/chunk-V3QJQUT7.cjs +778 -0
- package/dist/chunk-WC7T2CR4.js +44 -0
- package/dist/chunk-WJUPOCKJ.js +15 -0
- package/dist/chunk-WQVJM3PG.js +16 -0
- package/dist/chunk-XC2V34TS.cjs +155 -0
- package/dist/chunk-XRA5GFH3.js +75 -0
- package/dist/chunk-YBA7WO32.cjs +44 -0
- package/dist/chunk-ZP4ZZCIE.js +58 -0
- package/dist/chunk-ZT7EGOCI.cjs +9 -0
- package/dist/chunk-ZTGRDOOH.js +36 -0
- package/dist/chunk-ZZJ7U5G3.cjs +247 -0
- package/dist/index.cjs +57 -1
- package/dist/index.js +57 -1
- package/dist/logger/index.cjs +11 -0
- package/dist/logger/index.d.cts +2 -0
- package/dist/logger/index.d.ts +2 -0
- package/dist/logger/index.js +11 -0
- package/dist/logger/init.cjs +10 -0
- package/dist/logger/init.d.cts +15 -0
- package/dist/logger/init.d.ts +15 -0
- package/dist/logger/init.js +10 -0
- package/dist/sdk.cjs +33 -1
- package/dist/sdk.js +33 -1
- package/dist/signers/evm-api-key.cjs +7 -1
- package/dist/signers/evm-api-key.js +7 -1
- package/dist/signers/evm-external-wallet.cjs +7 -1
- package/dist/signers/evm-external-wallet.js +7 -1
- package/dist/signers/index.cjs +21 -1
- package/dist/signers/index.js +21 -1
- package/dist/signers/non-custodial/index.cjs +24 -1
- package/dist/signers/non-custodial/index.js +24 -1
- package/dist/signers/non-custodial/ncs-evm-signer.cjs +10 -1
- package/dist/signers/non-custodial/ncs-evm-signer.js +10 -1
- package/dist/signers/non-custodial/ncs-iframe-manager.cjs +7 -1
- package/dist/signers/non-custodial/ncs-iframe-manager.js +7 -1
- package/dist/signers/non-custodial/ncs-signer.cjs +11 -1
- package/dist/signers/non-custodial/ncs-signer.js +11 -1
- package/dist/signers/non-custodial/ncs-solana-signer.cjs +10 -1
- package/dist/signers/non-custodial/ncs-solana-signer.js +10 -1
- package/dist/signers/non-custodial/ncs-stellar-signer.cjs +10 -1
- package/dist/signers/non-custodial/ncs-stellar-signer.js +10 -1
- package/dist/signers/passkey.cjs +7 -1
- package/dist/signers/passkey.js +7 -1
- package/dist/signers/solana-api-key.cjs +7 -1
- package/dist/signers/solana-api-key.js +7 -1
- package/dist/signers/solana-external-wallet.cjs +8 -1
- package/dist/signers/solana-external-wallet.js +8 -1
- package/dist/signers/stellar-external-wallet.cjs +7 -1
- package/dist/signers/stellar-external-wallet.js +7 -1
- package/dist/signers/types.cjs +9 -1
- package/dist/signers/types.js +9 -1
- package/dist/utils/constants.cjs +13 -1
- package/dist/utils/constants.js +13 -1
- package/dist/utils/errors.cjs +55 -1
- package/dist/utils/errors.js +55 -1
- package/dist/utils/signer-validation.cjs +10 -1
- package/dist/utils/signer-validation.d.cts +7 -1
- package/dist/utils/signer-validation.d.ts +7 -1
- package/dist/utils/signer-validation.js +10 -1
- package/dist/wallets/evm.cjs +20 -1
- package/dist/wallets/evm.js +20 -1
- package/dist/wallets/solana.cjs +18 -1
- package/dist/wallets/solana.js +18 -1
- package/dist/wallets/stellar.cjs +17 -1
- package/dist/wallets/stellar.js +17 -1
- package/dist/wallets/wallet-factory.cjs +27 -1
- package/dist/wallets/wallet-factory.js +27 -1
- package/dist/wallets/wallet.cjs +16 -1
- package/dist/wallets/wallet.js +16 -1
- package/package.json +6 -5
- package/dist/chunk-2SHDBC47.js +0 -1
- package/dist/chunk-2XVV7Z43.cjs +0 -1
- package/dist/chunk-2YH3NVVK.cjs +0 -1
- package/dist/chunk-3APSOOE3.js +0 -1
- package/dist/chunk-3SW6AJSG.cjs +0 -1
- package/dist/chunk-4KXOWU5E.cjs +0 -1
- package/dist/chunk-5M7IRODB.js +0 -1
- package/dist/chunk-5QIW67NU.cjs +0 -1
- package/dist/chunk-6PVKL5RC.js +0 -1
- package/dist/chunk-7HTB7WKD.cjs +0 -1
- package/dist/chunk-7JIPYRKX.js +0 -1
- package/dist/chunk-BQZES4ST.js +0 -1
- package/dist/chunk-BW7YYVZE.js +0 -1
- package/dist/chunk-C3T63EC7.cjs +0 -1
- package/dist/chunk-CXTC3YDL.cjs +0 -1
- package/dist/chunk-DV6ZRFKV.js +0 -1
- package/dist/chunk-DX7VVXY5.cjs +0 -1
- package/dist/chunk-FATVK26C.js +0 -1
- package/dist/chunk-GEY574TH.cjs +0 -1
- package/dist/chunk-GKZFI322.js +0 -1
- package/dist/chunk-H4T4IXCF.js +0 -1
- package/dist/chunk-HJ5EDMTA.js +0 -1
- package/dist/chunk-HPHVJ6BA.cjs +0 -1
- package/dist/chunk-HQAKCIYM.js +0 -1
- package/dist/chunk-HRSVFJND.cjs +0 -1
- package/dist/chunk-IGBQEAD5.js +0 -1
- package/dist/chunk-IR5WN6FQ.cjs +0 -1
- package/dist/chunk-JUSY5XEE.js +0 -1
- package/dist/chunk-KFJLRIY7.js +0 -1
- package/dist/chunk-KKQBZXFE.js +0 -1
- package/dist/chunk-KO6QYKDX.cjs +0 -1
- package/dist/chunk-KRV3IXJU.cjs +0 -1
- package/dist/chunk-LW6JSI4J.js +0 -1
- package/dist/chunk-M2UBZY5S.cjs +0 -1
- package/dist/chunk-M4TOGGLV.cjs +0 -1
- package/dist/chunk-MQP5VZCA.cjs +0 -1
- package/dist/chunk-NP32UO2G.cjs +0 -1
- package/dist/chunk-O4FVTK7X.cjs +0 -1
- package/dist/chunk-P6JJHAAV.js +0 -1
- package/dist/chunk-PONCGT2H.cjs +0 -1
- package/dist/chunk-PSXRNSOE.js +0 -1
- package/dist/chunk-QMXG67T3.cjs +0 -1
- package/dist/chunk-RJZV72YF.js +0 -1
- package/dist/chunk-S3DYQVRD.js +0 -1
- package/dist/chunk-SLG7HGGL.js +0 -1
- package/dist/chunk-STYSP6KL.cjs +0 -1
- package/dist/chunk-UBOWSXW3.js +0 -1
- package/dist/chunk-UNBXKCNN.js +0 -1
- package/dist/chunk-VY634F3J.js +0 -1
- package/dist/chunk-WQP2FSVI.js +0 -1
- package/dist/chunk-WYYAPI4G.cjs +0 -1
- package/dist/chunk-WZFHEUWT.cjs +0 -1
- package/dist/chunk-XALFCQKD.cjs +0 -1
- package/dist/chunk-YWPTI2QO.cjs +0 -1
- package/dist/chunk-YWXQIFVZ.js +0 -3
- package/dist/chunk-YZ4HRYSL.cjs +0 -1
- package/dist/chunk-Z54LVUDS.js +0 -1
- 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
|
+
};
|