@crossmint/client-sdk-smart-wallet 0.1.21 → 0.1.23
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/SmartWalletSDK.cjs +34 -1
- package/dist/SmartWalletSDK.cjs.map +1 -0
- package/dist/SmartWalletSDK.js +34 -1
- package/dist/SmartWalletSDK.js.map +1 -0
- package/dist/api/CrossmintWalletService.cjs +13 -1
- package/dist/api/CrossmintWalletService.cjs.map +1 -0
- package/dist/api/CrossmintWalletService.js +13 -1
- package/dist/api/CrossmintWalletService.js.map +1 -0
- package/dist/blockchain/chains.cjs +23 -1
- package/dist/blockchain/chains.cjs.map +1 -0
- package/dist/blockchain/chains.js +23 -1
- package/dist/blockchain/chains.js.map +1 -0
- package/dist/blockchain/rpc.cjs +11 -1
- package/dist/blockchain/rpc.cjs.map +1 -0
- package/dist/blockchain/rpc.js +11 -1
- package/dist/blockchain/rpc.js.map +1 -0
- package/dist/blockchain/transfer.cjs +7 -1
- package/dist/blockchain/transfer.cjs.map +1 -0
- package/dist/blockchain/transfer.js +7 -1
- package/dist/blockchain/transfer.js.map +1 -0
- package/dist/blockchain/wallets/EVMSmartWallet.cjs +10 -1
- package/dist/blockchain/wallets/EVMSmartWallet.cjs.map +1 -0
- package/dist/blockchain/wallets/EVMSmartWallet.js +10 -1
- package/dist/blockchain/wallets/EVMSmartWallet.js.map +1 -0
- package/dist/blockchain/wallets/SendTransactionService.cjs +11 -1
- package/dist/blockchain/wallets/SendTransactionService.cjs.map +1 -0
- package/dist/blockchain/wallets/SendTransactionService.js +11 -1
- package/dist/blockchain/wallets/SendTransactionService.js.map +1 -0
- package/dist/blockchain/wallets/account/cache.cjs +9 -1
- package/dist/blockchain/wallets/account/cache.cjs.map +1 -0
- package/dist/blockchain/wallets/account/cache.js +9 -1
- package/dist/blockchain/wallets/account/cache.js.map +1 -0
- package/dist/blockchain/wallets/account/config.cjs +9 -1
- package/dist/blockchain/wallets/account/config.cjs.map +1 -0
- package/dist/blockchain/wallets/account/config.js +9 -1
- package/dist/blockchain/wallets/account/config.js.map +1 -0
- package/dist/blockchain/wallets/account/creator.cjs +10 -1
- package/dist/blockchain/wallets/account/creator.cjs.map +1 -0
- package/dist/blockchain/wallets/account/creator.js +10 -1
- package/dist/blockchain/wallets/account/creator.js.map +1 -0
- package/dist/blockchain/wallets/account/eoa.cjs +11 -1
- package/dist/blockchain/wallets/account/eoa.cjs.map +1 -0
- package/dist/blockchain/wallets/account/eoa.js +11 -1
- package/dist/blockchain/wallets/account/eoa.js.map +1 -0
- package/dist/blockchain/wallets/account/passkey.cjs +9 -1
- package/dist/blockchain/wallets/account/passkey.cjs.map +1 -0
- package/dist/blockchain/wallets/account/passkey.js +9 -1
- package/dist/blockchain/wallets/account/passkey.js.map +1 -0
- package/dist/blockchain/wallets/account/signer.cjs +9 -1
- package/dist/blockchain/wallets/account/signer.cjs.map +1 -0
- package/dist/blockchain/wallets/account/signer.js +9 -1
- package/dist/blockchain/wallets/account/signer.js.map +1 -0
- package/dist/blockchain/wallets/account/strategy.cjs +1 -1
- package/dist/blockchain/wallets/account/strategy.cjs.map +1 -0
- package/dist/blockchain/wallets/account/strategy.js +1 -0
- package/dist/blockchain/wallets/account/strategy.js.map +1 -0
- package/dist/blockchain/wallets/clientDecorator.cjs +12 -1
- package/dist/blockchain/wallets/clientDecorator.cjs.map +1 -0
- package/dist/blockchain/wallets/clientDecorator.js +12 -1
- package/dist/blockchain/wallets/clientDecorator.js.map +1 -0
- package/dist/blockchain/wallets/index.cjs +10 -1
- package/dist/blockchain/wallets/index.cjs.map +1 -0
- package/dist/blockchain/wallets/index.js +10 -1
- package/dist/blockchain/wallets/index.js.map +1 -0
- package/dist/blockchain/wallets/paymaster.cjs +10 -1
- package/dist/blockchain/wallets/paymaster.cjs.map +1 -0
- package/dist/blockchain/wallets/paymaster.js +10 -1
- package/dist/blockchain/wallets/paymaster.js.map +1 -0
- package/dist/blockchain/wallets/service.cjs +16 -1
- package/dist/blockchain/wallets/service.cjs.map +1 -0
- package/dist/blockchain/wallets/service.js +16 -1
- package/dist/blockchain/wallets/service.js.map +1 -0
- package/dist/chunk-2HB65Y7D.js +79 -0
- package/dist/chunk-2HB65Y7D.js.map +1 -0
- package/dist/chunk-3EQHAQXO.js +112 -0
- package/dist/chunk-3EQHAQXO.js.map +1 -0
- package/dist/chunk-3R6PW6HY.js +30 -0
- package/dist/chunk-3R6PW6HY.js.map +1 -0
- package/dist/{chunk-XJGFG3RT.cjs → chunk-5MG5CIEX.cjs} +13 -1
- package/dist/chunk-5MG5CIEX.cjs.map +1 -0
- package/dist/chunk-5URMCCO6.js +9 -0
- package/dist/chunk-5URMCCO6.js.map +1 -0
- package/dist/chunk-5VHMVO22.js +39 -0
- package/dist/chunk-5VHMVO22.js.map +1 -0
- package/dist/chunk-5W4NYW72.js +44 -0
- package/dist/chunk-5W4NYW72.js.map +1 -0
- package/dist/chunk-5WVQ7J3E.cjs +369 -0
- package/dist/chunk-5WVQ7J3E.cjs.map +1 -0
- package/dist/chunk-6NJVFL2X.js +60 -0
- package/dist/chunk-6NJVFL2X.js.map +1 -0
- package/dist/chunk-77GT6B5L.cjs +79 -0
- package/dist/chunk-77GT6B5L.cjs.map +1 -0
- package/dist/chunk-7AT3QDQV.js +36 -0
- package/dist/chunk-7AT3QDQV.js.map +1 -0
- package/dist/chunk-7B2CZEJG.cjs +66 -0
- package/dist/chunk-7B2CZEJG.cjs.map +1 -0
- package/dist/chunk-7G2SBZTE.js +93 -0
- package/dist/chunk-7G2SBZTE.js.map +1 -0
- package/dist/chunk-7KTQNIAZ.cjs +112 -0
- package/dist/chunk-7KTQNIAZ.cjs.map +1 -0
- package/dist/chunk-ASIPMVRQ.js +90 -0
- package/dist/chunk-ASIPMVRQ.js.map +1 -0
- package/dist/chunk-BARW756O.js +27 -0
- package/dist/chunk-BARW756O.js.map +1 -0
- package/dist/chunk-BSFIJZ5X.js +41 -0
- package/dist/chunk-BSFIJZ5X.js.map +1 -0
- package/dist/chunk-BXSAJOIV.cjs +90 -0
- package/dist/chunk-BXSAJOIV.cjs.map +1 -0
- package/dist/chunk-C5ZRYSCP.cjs +14 -0
- package/dist/chunk-C5ZRYSCP.cjs.map +1 -0
- package/dist/chunk-DTEA33DF.cjs +59 -0
- package/dist/chunk-DTEA33DF.cjs.map +1 -0
- package/dist/chunk-DYO4HODM.cjs +36 -0
- package/dist/chunk-DYO4HODM.cjs.map +1 -0
- package/dist/chunk-EPEGJY6N.cjs +9 -0
- package/dist/chunk-EPEGJY6N.cjs.map +1 -0
- package/dist/chunk-EQSMHR77.js +30 -0
- package/dist/chunk-EQSMHR77.js.map +1 -0
- package/dist/chunk-EUQLY4SC.cjs +82 -0
- package/dist/chunk-EUQLY4SC.cjs.map +1 -0
- package/dist/chunk-FSIMJYXR.js +36 -0
- package/dist/chunk-FSIMJYXR.js.map +1 -0
- package/dist/chunk-FXGOVLZW.cjs +9 -0
- package/dist/chunk-FXGOVLZW.cjs.map +1 -0
- package/dist/chunk-GLHQIT4Q.cjs +36 -0
- package/dist/chunk-GLHQIT4Q.cjs.map +1 -0
- package/dist/chunk-IDNF4BNP.cjs +44 -0
- package/dist/chunk-IDNF4BNP.cjs.map +1 -0
- package/dist/chunk-JOB7STIS.js +9 -0
- package/dist/chunk-JOB7STIS.js.map +1 -0
- package/dist/chunk-KEY2LM72.cjs +93 -0
- package/dist/chunk-KEY2LM72.cjs.map +1 -0
- package/dist/chunk-KHROQTVY.js +1 -0
- package/dist/chunk-KHROQTVY.js.map +1 -0
- package/dist/chunk-MAID7XYG.js +14 -0
- package/dist/chunk-MAID7XYG.js.map +1 -0
- package/dist/chunk-MJZ2DXMN.cjs +123 -0
- package/dist/chunk-MJZ2DXMN.cjs.map +1 -0
- package/dist/chunk-N6DG5EZG.cjs +156 -0
- package/dist/chunk-N6DG5EZG.cjs.map +1 -0
- package/dist/chunk-NXDZHR5C.js +99 -0
- package/dist/chunk-NXDZHR5C.js.map +1 -0
- package/dist/chunk-O6IFYHDP.cjs +36 -0
- package/dist/chunk-O6IFYHDP.cjs.map +1 -0
- package/dist/chunk-OCG67QSU.cjs +41 -0
- package/dist/chunk-OCG67QSU.cjs.map +1 -0
- package/dist/chunk-OGA3YDWS.cjs +112 -0
- package/dist/chunk-OGA3YDWS.cjs.map +1 -0
- package/dist/chunk-ON4DOYVD.js +369 -0
- package/dist/chunk-ON4DOYVD.js.map +1 -0
- package/dist/chunk-OYKL3RNL.js +66 -0
- package/dist/chunk-OYKL3RNL.js.map +1 -0
- package/dist/chunk-PVFA6PBX.cjs +60 -0
- package/dist/chunk-PVFA6PBX.cjs.map +1 -0
- package/dist/chunk-QJ3BSVGV.js +36 -0
- package/dist/chunk-QJ3BSVGV.js.map +1 -0
- package/dist/chunk-RB4JSPZH.cjs +99 -0
- package/dist/chunk-RB4JSPZH.cjs.map +1 -0
- package/dist/chunk-SMDX2MXU.js +13 -0
- package/dist/chunk-SMDX2MXU.js.map +1 -0
- package/dist/chunk-TDJDKTRS.js +156 -0
- package/dist/chunk-TDJDKTRS.js.map +1 -0
- package/dist/chunk-TK3ZLI22.cjs +39 -0
- package/dist/chunk-TK3ZLI22.cjs.map +1 -0
- package/dist/chunk-TUVECZA7.cjs +22 -0
- package/dist/chunk-TUVECZA7.cjs.map +1 -0
- package/dist/chunk-U4OBHCIP.js +59 -0
- package/dist/chunk-U4OBHCIP.js.map +1 -0
- package/dist/chunk-UDDYHPSW.js +22 -0
- package/dist/chunk-UDDYHPSW.js.map +1 -0
- package/dist/chunk-UNP5V2AB.js +82 -0
- package/dist/chunk-UNP5V2AB.js.map +1 -0
- package/dist/chunk-UQKE6R5W.cjs +27 -0
- package/dist/chunk-UQKE6R5W.cjs.map +1 -0
- package/dist/chunk-UZGHOTKZ.js +112 -0
- package/dist/chunk-UZGHOTKZ.js.map +1 -0
- package/dist/chunk-XZTGDSSL.js +123 -0
- package/dist/chunk-XZTGDSSL.js.map +1 -0
- package/dist/chunk-YWCXHOSD.cjs +30 -0
- package/dist/chunk-YWCXHOSD.cjs.map +1 -0
- package/dist/chunk-ZN42AA2G.cjs +1 -0
- package/dist/chunk-ZN42AA2G.cjs.map +1 -0
- package/dist/chunk-ZOXKITU4.cjs +30 -0
- package/dist/chunk-ZOXKITU4.cjs.map +1 -0
- package/dist/error/index.cjs +25 -1
- package/dist/error/index.cjs.map +1 -0
- package/dist/error/index.js +25 -1
- package/dist/error/index.js.map +1 -0
- package/dist/error/processor.cjs +9 -1
- package/dist/error/processor.cjs.map +1 -0
- package/dist/error/processor.js +9 -1
- package/dist/error/processor.js.map +1 -0
- package/dist/index.cjs +86 -1
- package/dist/index.cjs.map +1 -0
- package/dist/index.js +86 -1
- package/dist/index.js.map +1 -0
- package/dist/services/index.cjs +11 -1
- package/dist/services/index.cjs.map +1 -0
- package/dist/services/index.js +11 -1
- package/dist/services/index.js.map +1 -0
- package/dist/services/logger.cjs +10 -1
- package/dist/services/logger.cjs.map +1 -0
- package/dist/services/logger.js +10 -1
- package/dist/services/logger.js.map +1 -0
- package/dist/types/internal.cjs +18 -1
- package/dist/types/internal.cjs.map +1 -0
- package/dist/types/internal.js +18 -1
- package/dist/types/internal.js.map +1 -0
- package/dist/types/params.cjs +1 -1
- package/dist/types/params.cjs.map +1 -0
- package/dist/types/params.js +1 -0
- package/dist/types/params.js.map +1 -0
- package/dist/types/schema.cjs +16 -1
- package/dist/types/schema.cjs.map +1 -0
- package/dist/types/schema.js +16 -1
- package/dist/types/schema.js.map +1 -0
- package/dist/types/service.cjs +1 -1
- package/dist/types/service.cjs.map +1 -0
- package/dist/types/service.js +1 -0
- package/dist/types/service.js.map +1 -0
- package/dist/types/token.cjs +1 -1
- package/dist/types/token.cjs.map +1 -0
- package/dist/types/token.js +1 -0
- package/dist/types/token.js.map +1 -0
- package/dist/utils/api.cjs +9 -1
- package/dist/utils/api.cjs.map +1 -0
- package/dist/utils/api.js +9 -1
- package/dist/utils/api.js.map +1 -0
- package/dist/utils/blockchain.cjs +7 -1
- package/dist/utils/blockchain.cjs.map +1 -0
- package/dist/utils/blockchain.js +7 -1
- package/dist/utils/blockchain.js.map +1 -0
- package/dist/utils/constants.cjs +19 -1
- package/dist/utils/constants.cjs.map +1 -0
- package/dist/utils/constants.js +19 -1
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/environment.cjs +7 -1
- package/dist/utils/environment.cjs.map +1 -0
- package/dist/utils/environment.js +7 -1
- package/dist/utils/environment.js.map +1 -0
- package/dist/utils/helpers.cjs +9 -1
- package/dist/utils/helpers.cjs.map +1 -0
- package/dist/utils/helpers.js +9 -1
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/signer.cjs +10 -1
- package/dist/utils/signer.cjs.map +1 -0
- package/dist/utils/signer.js +10 -1
- package/dist/utils/signer.js.map +1 -0
- package/dist/utils/test.cjs +27 -1
- package/dist/utils/test.cjs.map +1 -0
- package/dist/utils/test.js +27 -1
- package/dist/utils/test.js.map +1 -0
- package/package.json +4 -4
- package/dist/chunk-27US7ZBX.js +0 -1
- package/dist/chunk-2GS5TXEY.cjs +0 -1
- package/dist/chunk-2R6HK64N.cjs +0 -1
- package/dist/chunk-3F6P4HUZ.js +0 -1
- package/dist/chunk-4SPA557P.js +0 -0
- package/dist/chunk-5M3MSPHK.cjs +0 -1
- package/dist/chunk-6DE5YEO5.cjs +0 -1
- package/dist/chunk-7AVDZZGD.cjs +0 -1
- package/dist/chunk-7FXFOOQU.cjs +0 -1
- package/dist/chunk-7JAT6GQU.js +0 -1
- package/dist/chunk-ATQ4WGCW.js +0 -1
- package/dist/chunk-B3LJJZXD.cjs +0 -2
- package/dist/chunk-BJZQA5VC.js +0 -1
- package/dist/chunk-BXXREMNR.cjs +0 -1
- package/dist/chunk-C3VZY7VJ.js +0 -1
- package/dist/chunk-CPYNP4XI.js +0 -1
- package/dist/chunk-CUTQYF3F.js +0 -1
- package/dist/chunk-D4NDUT36.js +0 -1
- package/dist/chunk-DIDKPOO2.cjs +0 -1
- package/dist/chunk-ETVJGLNY.js +0 -1
- package/dist/chunk-FHNNZVNU.js +0 -1
- package/dist/chunk-FIJ3CBJ4.js +0 -3
- package/dist/chunk-G57LROTD.js +0 -1
- package/dist/chunk-GB35YMN4.cjs +0 -1
- package/dist/chunk-H4CMXNVK.js +0 -1
- package/dist/chunk-IQTGPM2U.cjs +0 -1
- package/dist/chunk-KYPTGHC6.cjs +0 -1
- package/dist/chunk-LMVY4C4Y.js +0 -1
- package/dist/chunk-M4K3IZTT.cjs +0 -1
- package/dist/chunk-NLGILHJS.js +0 -1
- package/dist/chunk-O2ACORII.cjs +0 -1
- package/dist/chunk-OCJYX5QF.cjs +0 -1
- package/dist/chunk-ODAUWGUU.cjs +0 -1
- package/dist/chunk-PBUJXVQT.js +0 -1
- package/dist/chunk-PLRQBDYS.cjs +0 -1
- package/dist/chunk-PPTSNCSQ.cjs +0 -1
- package/dist/chunk-PZ6Q22YJ.js +0 -1
- package/dist/chunk-Q44P7MO7.cjs +0 -1
- package/dist/chunk-QVB3HE6Q.js +0 -2
- package/dist/chunk-S2XBSAGM.js +0 -1
- package/dist/chunk-SCXFZMLR.cjs +0 -1
- package/dist/chunk-STH2LE35.cjs +0 -1
- package/dist/chunk-SWWOVT47.cjs +0 -1
- package/dist/chunk-TZG6MROQ.js +0 -1
- package/dist/chunk-UG47CBKR.js +0 -1
- package/dist/chunk-UPURFW46.js +0 -1
- package/dist/chunk-WDM7PN4O.js +0 -1
- package/dist/chunk-WJ6XJMRD.cjs +0 -1
- package/dist/chunk-WTPE2I2Q.cjs +0 -1
- package/dist/chunk-XHSA4YTO.cjs +0 -3
- package/dist/chunk-XP6ESWVJ.js +0 -1
- package/dist/chunk-XQ2K2K23.cjs +0 -1
- package/dist/chunk-YBHSEZMB.js +0 -1
- package/dist/chunk-YZQJV2KA.cjs +0 -1
- package/dist/chunk-Z22H3MJS.js +0 -1
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunkDYO4HODMcjs = require('./chunk-DYO4HODM.cjs');
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
var _chunkOGA3YDWScjs = require('./chunk-OGA3YDWS.cjs');
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
var _chunkPVFA6PBXcjs = require('./chunk-PVFA6PBX.cjs');
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
var _chunkUQKE6R5Wcjs = require('./chunk-UQKE6R5W.cjs');
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
var _chunkTUVECZA7cjs = require('./chunk-TUVECZA7.cjs');
|
|
19
|
+
|
|
20
|
+
// src/blockchain/wallets/service.ts
|
|
21
|
+
var _permissionless = require('permissionless');
|
|
22
|
+
var _pimlico = require('permissionless/clients/pimlico');
|
|
23
|
+
var _viem = require('viem');
|
|
24
|
+
var _commonsdkbase = require('@crossmint/common-sdk-base');
|
|
25
|
+
var SmartWalletService = class {
|
|
26
|
+
constructor(crossmintService, accountConfigService, accountCreator, clientDecorator) {
|
|
27
|
+
this.crossmintService = crossmintService;
|
|
28
|
+
this.accountConfigService = accountConfigService;
|
|
29
|
+
this.accountCreator = accountCreator;
|
|
30
|
+
this.clientDecorator = clientDecorator;
|
|
31
|
+
}
|
|
32
|
+
async getOrCreate(user, chain, walletParams) {
|
|
33
|
+
const {
|
|
34
|
+
config: { entryPointVersion, kernelVersion, existing, userWithId },
|
|
35
|
+
cached
|
|
36
|
+
} = await this.accountConfigService.get(user, chain);
|
|
37
|
+
const publicClient = _viem.createPublicClient.call(void 0, { transport: _viem.http.call(void 0, _chunkUQKE6R5Wcjs.getAlchemyRPC.call(void 0, chain)) });
|
|
38
|
+
const { account, signerConfig } = await this.accountCreator.get({
|
|
39
|
+
chain,
|
|
40
|
+
walletParams,
|
|
41
|
+
publicClient,
|
|
42
|
+
user: userWithId,
|
|
43
|
+
entryPoint: entryPointVersion === "v0.6" ? _permissionless.ENTRYPOINT_ADDRESS_V06 : _permissionless.ENTRYPOINT_ADDRESS_V07,
|
|
44
|
+
kernelVersion,
|
|
45
|
+
existing
|
|
46
|
+
});
|
|
47
|
+
if (existing == null) {
|
|
48
|
+
await this.crossmintService.idempotentCreateSmartWallet(user, {
|
|
49
|
+
type: _chunkTUVECZA7cjs.ZERO_DEV_TYPE,
|
|
50
|
+
smartContractWalletAddress: account.address,
|
|
51
|
+
signerData: signerConfig.data,
|
|
52
|
+
version: _chunkTUVECZA7cjs.CURRENT_VERSION,
|
|
53
|
+
baseLayer: "evm",
|
|
54
|
+
chainId: _commonsdkbase.blockchainToChainId.call(void 0, chain),
|
|
55
|
+
entryPointVersion,
|
|
56
|
+
kernelVersion
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
if (!cached) {
|
|
60
|
+
this.accountConfigService.cache({
|
|
61
|
+
entryPointVersion,
|
|
62
|
+
kernelVersion,
|
|
63
|
+
user: userWithId,
|
|
64
|
+
existing: { address: account.address, signerConfig }
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
return new (0, _chunkOGA3YDWScjs.EVMSmartWallet)(
|
|
68
|
+
{ wallet: this.smartAccountClient(chain, account, user), public: publicClient },
|
|
69
|
+
chain,
|
|
70
|
+
this.crossmintService
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
smartAccountClient(chain, account, user) {
|
|
74
|
+
const transport = _viem.http.call(void 0, _chunkUQKE6R5Wcjs.getPimlicoBundlerRPC.call(void 0, chain));
|
|
75
|
+
const bundlerConfig = { chain: _chunkPVFA6PBXcjs.viemNetworks[chain], entryPoint: account.entryPoint };
|
|
76
|
+
const bundlerClient = _pimlico.createPimlicoBundlerClient.call(void 0, { ...bundlerConfig, transport });
|
|
77
|
+
const smartAccountClient = _permissionless.createSmartAccountClient.call(void 0, {
|
|
78
|
+
account,
|
|
79
|
+
bundlerTransport: transport,
|
|
80
|
+
...bundlerConfig,
|
|
81
|
+
..._chunkDYO4HODMcjs.usePaymaster.call(void 0, chain) && _chunkDYO4HODMcjs.paymasterMiddleware.call(void 0, {
|
|
82
|
+
bundlerClient,
|
|
83
|
+
entryPoint: account.entryPoint,
|
|
84
|
+
chain,
|
|
85
|
+
walletService: this.crossmintService,
|
|
86
|
+
user
|
|
87
|
+
})
|
|
88
|
+
});
|
|
89
|
+
return this.clientDecorator.decorate({
|
|
90
|
+
crossmintChain: chain,
|
|
91
|
+
smartAccountClient
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
exports.SmartWalletService = SmartWalletService;
|
|
99
|
+
//# sourceMappingURL=chunk-RB4JSPZH.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/blockchain/wallets/service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AACA,SAAS,wBAAwB,wBAAwB,gCAAgC;AACzF,SAAS,kCAAkC;AAE3C,SAA6B,oBAAoB,YAAY;AAE7D,SAAS,2BAA2B;AAc7B,IAAM,qBAAN,MAAyB;AAAA,EAC5B,YACqB,kBACA,sBACA,gBACA,iBACnB;AAJmB;AACA;AACA;AACA;AAAA,EAClB;AAAA,EAEH,MAAa,YACT,MACA,OACA,cACuB;AACvB,UAAM;AAAA,MACF,QAAQ,EAAE,mBAAmB,eAAe,UAAU,WAAW;AAAA,MACjE;AAAA,IACJ,IAAI,MAAM,KAAK,qBAAqB,IAAI,MAAM,KAAK;AAEnD,UAAM,eAAe,mBAAmB,EAAE,WAAW,KAAK,cAAc,KAAK,CAAC,EAAE,CAAC;AAEjF,UAAM,EAAE,SAAS,aAAa,IAAI,MAAM,KAAK,eAAe,IAAI;AAAA,MAC5D;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN,YAAY,sBAAsB,SAAS,yBAAyB;AAAA,MACpE;AAAA,MACA;AAAA,IACJ,CAAC;AAED,QAAI,YAAY,MAAM;AAClB,YAAM,KAAK,iBAAiB,4BAA4B,MAAM;AAAA,QAC1D,MAAM;AAAA,QACN,4BAA4B,QAAQ;AAAA,QACpC,YAAY,aAAa;AAAA,QACzB,SAAS;AAAA,QACT,WAAW;AAAA,QACX,SAAS,oBAAoB,KAAK;AAAA,QAClC;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,IACL;AAEA,QAAI,CAAC,QAAQ;AACT,WAAK,qBAAqB,MAAM;AAAA,QAC5B;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN,UAAU,EAAE,SAAS,QAAQ,SAAS,aAAa;AAAA,MACvD,CAAC;AAAA,IACL;AAEA,WAAO,IAAI;AAAA,MACP,EAAE,QAAQ,KAAK,mBAAmB,OAAO,SAAS,IAAI,GAAG,QAAQ,aAAa;AAAA,MAC9E;AAAA,MACA,KAAK;AAAA,IACT;AAAA,EACJ;AAAA,EAEQ,mBACJ,OACA,SACA,MACiB;AACjB,UAAM,YAAY,KAAK,qBAAqB,KAAK,CAAC;AAClD,UAAM,gBAAgB,EAAE,OAAO,aAAa,KAAK,GAAG,YAAY,QAAQ,WAAW;AACnF,UAAM,gBAAgB,2BAA2B,EAAE,GAAG,eAAe,UAAU,CAAC;AAChF,UAAM,qBAAwC,yBAAyB;AAAA,MACnE;AAAA,MACA,kBAAkB;AAAA,MAClB,GAAG;AAAA,MACH,GAAI,aAAa,KAAK,KAClB,oBAAoB;AAAA,QAChB;AAAA,QACA,YAAY,QAAQ;AAAA,QACpB;AAAA,QACA,eAAe,KAAK;AAAA,QACpB;AAAA,MACJ,CAAC;AAAA,IACT,CAAC;AAED,WAAO,KAAK,gBAAgB,SAAS;AAAA,MACjC,gBAAgB;AAAA,MAChB;AAAA,IACJ,CAAC;AAAA,EACL;AACJ","sourcesContent":["import type { KernelSmartAccount } from \"@zerodev/sdk\";\nimport { ENTRYPOINT_ADDRESS_V06, ENTRYPOINT_ADDRESS_V07, createSmartAccountClient } from \"permissionless\";\nimport { createPimlicoBundlerClient } from \"permissionless/clients/pimlico\";\nimport type { EntryPoint } from \"permissionless/types/entrypoint\";\nimport { type HttpTransport, createPublicClient, http } from \"viem\";\n\nimport { blockchainToChainId } from \"@crossmint/common-sdk-base\";\n\nimport type { CrossmintWalletService } from \"../../api/CrossmintWalletService\";\nimport type { SmartWalletClient } from \"../../types/internal\";\nimport type { UserParams, WalletParams } from \"../../types/params\";\nimport { CURRENT_VERSION, ZERO_DEV_TYPE } from \"../../utils/constants\";\nimport { type SmartWalletChain, viemNetworks } from \"../chains\";\nimport { getAlchemyRPC, getPimlicoBundlerRPC } from \"../rpc\";\nimport { EVMSmartWallet } from \"./EVMSmartWallet\";\nimport type { AccountConfigService } from \"./account/config\";\nimport type { AccountCreator } from \"./account/creator\";\nimport type { ClientDecorator } from \"./clientDecorator\";\nimport { paymasterMiddleware, usePaymaster } from \"./paymaster\";\n\nexport class SmartWalletService {\n constructor(\n private readonly crossmintService: CrossmintWalletService,\n private readonly accountConfigService: AccountConfigService,\n private readonly accountCreator: AccountCreator,\n private readonly clientDecorator: ClientDecorator\n ) {}\n\n public async getOrCreate(\n user: UserParams,\n chain: SmartWalletChain,\n walletParams: WalletParams\n ): Promise<EVMSmartWallet> {\n const {\n config: { entryPointVersion, kernelVersion, existing, userWithId },\n cached,\n } = await this.accountConfigService.get(user, chain);\n\n const publicClient = createPublicClient({ transport: http(getAlchemyRPC(chain)) });\n\n const { account, signerConfig } = await this.accountCreator.get({\n chain,\n walletParams,\n publicClient,\n user: userWithId,\n entryPoint: entryPointVersion === \"v0.6\" ? ENTRYPOINT_ADDRESS_V06 : ENTRYPOINT_ADDRESS_V07,\n kernelVersion,\n existing,\n });\n\n if (existing == null) {\n await this.crossmintService.idempotentCreateSmartWallet(user, {\n type: ZERO_DEV_TYPE,\n smartContractWalletAddress: account.address,\n signerData: signerConfig.data,\n version: CURRENT_VERSION,\n baseLayer: \"evm\",\n chainId: blockchainToChainId(chain),\n entryPointVersion,\n kernelVersion,\n });\n }\n\n if (!cached) {\n this.accountConfigService.cache({\n entryPointVersion,\n kernelVersion,\n user: userWithId,\n existing: { address: account.address, signerConfig },\n });\n }\n\n return new EVMSmartWallet(\n { wallet: this.smartAccountClient(chain, account, user), public: publicClient },\n chain,\n this.crossmintService\n );\n }\n\n private smartAccountClient(\n chain: SmartWalletChain,\n account: KernelSmartAccount<EntryPoint, HttpTransport>,\n user: UserParams\n ): SmartWalletClient {\n const transport = http(getPimlicoBundlerRPC(chain));\n const bundlerConfig = { chain: viemNetworks[chain], entryPoint: account.entryPoint };\n const bundlerClient = createPimlicoBundlerClient({ ...bundlerConfig, transport });\n const smartAccountClient: SmartWalletClient = createSmartAccountClient({\n account,\n bundlerTransport: transport,\n ...bundlerConfig,\n ...(usePaymaster(chain) &&\n paymasterMiddleware({\n bundlerClient,\n entryPoint: account.entryPoint,\n chain,\n walletService: this.crossmintService,\n user,\n })),\n });\n\n return this.clientDecorator.decorate({\n crossmintChain: chain,\n smartAccountClient,\n });\n }\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// src/utils/helpers.ts
|
|
2
|
+
function isEmpty(str) {
|
|
3
|
+
return !str || str.length === 0 || str.trim().length === 0;
|
|
4
|
+
}
|
|
5
|
+
function equalsIgnoreCase(a, b) {
|
|
6
|
+
return a?.toLowerCase() === b?.toLowerCase();
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export {
|
|
10
|
+
isEmpty,
|
|
11
|
+
equalsIgnoreCase
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=chunk-SMDX2MXU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/helpers.ts"],"sourcesContent":["export function isEmpty(str: string | undefined | null): str is undefined | null {\n return !str || str.length === 0 || str.trim().length === 0;\n}\n\nexport function equalsIgnoreCase(a?: string, b?: string): boolean {\n return a?.toLowerCase() === b?.toLowerCase();\n}\n"],"mappings":";AAAO,SAAS,QAAQ,KAAyD;AAC7E,SAAO,CAAC,OAAO,IAAI,WAAW,KAAK,IAAI,KAAK,EAAE,WAAW;AAC7D;AAEO,SAAS,iBAAiB,GAAY,GAAqB;AAC9D,SAAO,GAAG,YAAY,MAAM,GAAG,YAAY;AAC/C;","names":[]}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import {
|
|
2
|
+
PasskeySignerConfig
|
|
3
|
+
} from "./chunk-3R6PW6HY.js";
|
|
4
|
+
import {
|
|
5
|
+
PasskeyIncompatibleAuthenticatorError,
|
|
6
|
+
PasskeyMismatchError,
|
|
7
|
+
PasskeyPromptError,
|
|
8
|
+
PasskeyRegistrationError
|
|
9
|
+
} from "./chunk-ASIPMVRQ.js";
|
|
10
|
+
|
|
11
|
+
// src/blockchain/wallets/account/passkey.ts
|
|
12
|
+
import { PasskeyValidatorContractVersion, WebAuthnMode, toPasskeyValidator } from "@zerodev/passkey-validator";
|
|
13
|
+
import { createKernelAccount } from "@zerodev/sdk";
|
|
14
|
+
import { toWebAuthnKey } from "@zerodev/webauthn-key";
|
|
15
|
+
var PasskeyCreationStrategy = class {
|
|
16
|
+
constructor(passkeyServerUrl, apiKey) {
|
|
17
|
+
this.passkeyServerUrl = passkeyServerUrl;
|
|
18
|
+
this.apiKey = apiKey;
|
|
19
|
+
}
|
|
20
|
+
async create({
|
|
21
|
+
user,
|
|
22
|
+
publicClient,
|
|
23
|
+
walletParams,
|
|
24
|
+
entryPoint,
|
|
25
|
+
kernelVersion,
|
|
26
|
+
existing
|
|
27
|
+
}) {
|
|
28
|
+
const inputPasskeyName = walletParams.signer.passkeyName ?? user.id;
|
|
29
|
+
if (existing != null && existing.signerConfig.data.passkeyName !== inputPasskeyName) {
|
|
30
|
+
throw new PasskeyMismatchError(
|
|
31
|
+
`User '${user.id}' has an existing wallet created with a passkey named '${existing.signerConfig.data.passkeyName}', this does match input passkey name '${inputPasskeyName}'.`,
|
|
32
|
+
existing.signerConfig.display()
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
if (existing == null && walletParams.signer.onPrePasskeyRegistration != null) {
|
|
37
|
+
await walletParams.signer.onPrePasskeyRegistration();
|
|
38
|
+
}
|
|
39
|
+
const passkey = await this.getPasskey(user, inputPasskeyName, existing?.signerConfig.data);
|
|
40
|
+
const latestValidatorVersion = PasskeyValidatorContractVersion.V0_0_2;
|
|
41
|
+
const validatorContractVersion = existing == null ? latestValidatorVersion : existing.signerConfig.data.validatorContractVersion;
|
|
42
|
+
const validator = await toPasskeyValidator(publicClient, {
|
|
43
|
+
webAuthnKey: passkey,
|
|
44
|
+
entryPoint,
|
|
45
|
+
validatorContractVersion,
|
|
46
|
+
kernelVersion
|
|
47
|
+
});
|
|
48
|
+
const kernelAccount = await createKernelAccount(publicClient, {
|
|
49
|
+
plugins: { sudo: validator },
|
|
50
|
+
entryPoint,
|
|
51
|
+
kernelVersion,
|
|
52
|
+
deployedAccountAddress: existing?.address
|
|
53
|
+
});
|
|
54
|
+
return {
|
|
55
|
+
signerConfig: this.getSignerConfig(validator, validatorContractVersion, inputPasskeyName),
|
|
56
|
+
account: this.decorate(kernelAccount, inputPasskeyName, walletParams)
|
|
57
|
+
};
|
|
58
|
+
} catch (error) {
|
|
59
|
+
if (walletParams.signer.onPasskeyRegistrationError != null) {
|
|
60
|
+
walletParams.signer.onPasskeyRegistrationError(error);
|
|
61
|
+
}
|
|
62
|
+
throw this.mapError(error, inputPasskeyName);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
async getPasskey(user, passkeyName, existing) {
|
|
66
|
+
if (existing != null) {
|
|
67
|
+
return {
|
|
68
|
+
pubX: BigInt(existing.pubKeyX),
|
|
69
|
+
pubY: BigInt(existing.pubKeyY),
|
|
70
|
+
authenticatorId: existing.authenticatorId,
|
|
71
|
+
authenticatorIdHash: existing.authenticatorIdHash
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return toWebAuthnKey({
|
|
75
|
+
passkeyName,
|
|
76
|
+
passkeyServerUrl: this.passkeyServerUrl,
|
|
77
|
+
mode: WebAuthnMode.Register,
|
|
78
|
+
passkeyServerHeaders: this.createPasskeysServerHeaders(user)
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
getSignerConfig(validator, validatorContractVersion, passkeyName) {
|
|
82
|
+
return new PasskeySignerConfig({
|
|
83
|
+
...deserializePasskeyValidatorData(validator.getSerializedData()),
|
|
84
|
+
passkeyName,
|
|
85
|
+
validatorContractVersion,
|
|
86
|
+
domain: window.location.hostname,
|
|
87
|
+
type: "passkeys"
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
createPasskeysServerHeaders(user) {
|
|
91
|
+
return {
|
|
92
|
+
"x-api-key": this.apiKey,
|
|
93
|
+
Authorization: `Bearer ${user.jwt}`
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
mapError(error, passkeyName) {
|
|
97
|
+
if (error.code === 0 && error.name === "DataError") {
|
|
98
|
+
return new PasskeyIncompatibleAuthenticatorError(passkeyName);
|
|
99
|
+
}
|
|
100
|
+
if (error.message === "Registration not verified") {
|
|
101
|
+
return new PasskeyRegistrationError(passkeyName);
|
|
102
|
+
}
|
|
103
|
+
if (error.code === "ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY" && error.name === "NotAllowedError") {
|
|
104
|
+
return new PasskeyPromptError(passkeyName);
|
|
105
|
+
}
|
|
106
|
+
return error;
|
|
107
|
+
}
|
|
108
|
+
decorate(account, passkeyName, walletParams) {
|
|
109
|
+
return new Proxy(account, {
|
|
110
|
+
get: (target, prop, receiver) => {
|
|
111
|
+
const original = Reflect.get(target, prop, receiver);
|
|
112
|
+
if (typeof original !== "function" || typeof prop !== "string" || !isAccountSigningMethod(prop)) {
|
|
113
|
+
return original;
|
|
114
|
+
}
|
|
115
|
+
const signer = walletParams.signer;
|
|
116
|
+
return async (...args) => {
|
|
117
|
+
const isFirstTransaction = args?.[0]?.factoryData != null;
|
|
118
|
+
if (isFirstTransaction && prop === "signUserOperation" && signer.type === "PASSKEY" && signer.onFirstTimePasskeySigning != null) {
|
|
119
|
+
await signer.onFirstTimePasskeySigning();
|
|
120
|
+
}
|
|
121
|
+
try {
|
|
122
|
+
return await original.call(target, ...args);
|
|
123
|
+
} catch (error) {
|
|
124
|
+
if (signer.onFirstTimePasskeySigningError != null) {
|
|
125
|
+
await signer.onFirstTimePasskeySigningError(error);
|
|
126
|
+
}
|
|
127
|
+
throw this.mapError(error, passkeyName);
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
var accountSigningMethods = [
|
|
135
|
+
"signMessage",
|
|
136
|
+
"signTypedData",
|
|
137
|
+
"signUserOperation",
|
|
138
|
+
"signTransaction"
|
|
139
|
+
];
|
|
140
|
+
function isAccountSigningMethod(method) {
|
|
141
|
+
return accountSigningMethods.includes(method);
|
|
142
|
+
}
|
|
143
|
+
var deserializePasskeyValidatorData = (params) => {
|
|
144
|
+
const uint8Array = base64ToBytes(params);
|
|
145
|
+
const jsonString = new TextDecoder().decode(uint8Array);
|
|
146
|
+
return JSON.parse(jsonString);
|
|
147
|
+
};
|
|
148
|
+
function base64ToBytes(base64) {
|
|
149
|
+
const binString = atob(base64);
|
|
150
|
+
return Uint8Array.from(binString, (m) => m.codePointAt(0));
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
export {
|
|
154
|
+
PasskeyCreationStrategy
|
|
155
|
+
};
|
|
156
|
+
//# sourceMappingURL=chunk-TDJDKTRS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/blockchain/wallets/account/passkey.ts"],"sourcesContent":["import { PasskeyValidatorContractVersion, WebAuthnMode, toPasskeyValidator } from \"@zerodev/passkey-validator\";\nimport { type KernelSmartAccount, type KernelValidator, createKernelAccount } from \"@zerodev/sdk\";\nimport { type WebAuthnKey, toWebAuthnKey } from \"@zerodev/webauthn-key\";\nimport type { SmartAccount } from \"permissionless/accounts\";\nimport type { EntryPoint } from \"permissionless/types/entrypoint\";\n\nimport {\n PasskeyIncompatibleAuthenticatorError,\n PasskeyMismatchError,\n PasskeyPromptError,\n PasskeyRegistrationError,\n} from \"../../../error\";\nimport type { AccountAndSigner, PasskeyCreationContext } from \"../../../types/internal\";\nimport type { PasskeySigner, UserParams, WalletParams } from \"../../../types/params\";\nimport type { PasskeySignerData, PasskeyValidatorSerializedData } from \"../../../types/service\";\nimport { PasskeySignerConfig } from \"./signer\";\nimport type { AccountCreationStrategy } from \"./strategy\";\n\ntype PasskeyValidator = KernelValidator<EntryPoint, \"WebAuthnValidator\"> & {\n getSerializedData: () => string;\n};\nexport class PasskeyCreationStrategy implements AccountCreationStrategy {\n constructor(\n private readonly passkeyServerUrl: string,\n private readonly apiKey: string\n ) {}\n\n public async create({\n user,\n publicClient,\n walletParams,\n entryPoint,\n kernelVersion,\n existing,\n }: PasskeyCreationContext): Promise<AccountAndSigner> {\n const inputPasskeyName = walletParams.signer.passkeyName ?? user.id;\n if (existing != null && existing.signerConfig.data.passkeyName !== inputPasskeyName) {\n throw new PasskeyMismatchError(\n `User '${user.id}' has an existing wallet created with a passkey named '${existing.signerConfig.data.passkeyName}', this does match input passkey name '${inputPasskeyName}'.`,\n existing.signerConfig.display()\n );\n }\n\n try {\n if (existing == null && walletParams.signer.onPrePasskeyRegistration != null) {\n await walletParams.signer.onPrePasskeyRegistration();\n }\n\n const passkey = await this.getPasskey(user, inputPasskeyName, existing?.signerConfig.data);\n\n const latestValidatorVersion = PasskeyValidatorContractVersion.V0_0_2;\n const validatorContractVersion =\n existing == null ? latestValidatorVersion : existing.signerConfig.data.validatorContractVersion;\n\n const validator = await toPasskeyValidator(publicClient, {\n webAuthnKey: passkey,\n entryPoint,\n validatorContractVersion,\n kernelVersion,\n });\n\n const kernelAccount = await createKernelAccount(publicClient, {\n plugins: { sudo: validator },\n entryPoint,\n kernelVersion,\n deployedAccountAddress: existing?.address,\n });\n\n return {\n signerConfig: this.getSignerConfig(validator, validatorContractVersion, inputPasskeyName),\n account: this.decorate(kernelAccount, inputPasskeyName, walletParams),\n };\n } catch (error) {\n if (walletParams.signer.onPasskeyRegistrationError != null) {\n walletParams.signer.onPasskeyRegistrationError(error);\n }\n throw this.mapError(error, inputPasskeyName);\n }\n }\n\n private async getPasskey(\n user: UserParams,\n passkeyName: string,\n existing?: PasskeySignerData\n ): Promise<WebAuthnKey> {\n if (existing != null) {\n return {\n pubX: BigInt(existing.pubKeyX),\n pubY: BigInt(existing.pubKeyY),\n authenticatorId: existing.authenticatorId,\n authenticatorIdHash: existing.authenticatorIdHash,\n };\n }\n\n return toWebAuthnKey({\n passkeyName,\n passkeyServerUrl: this.passkeyServerUrl,\n mode: WebAuthnMode.Register,\n passkeyServerHeaders: this.createPasskeysServerHeaders(user),\n });\n }\n\n private getSignerConfig(\n validator: PasskeyValidator,\n validatorContractVersion: PasskeyValidatorContractVersion,\n passkeyName: string\n ): PasskeySignerConfig {\n return new PasskeySignerConfig({\n ...deserializePasskeyValidatorData(validator.getSerializedData()),\n passkeyName,\n validatorContractVersion,\n domain: window.location.hostname,\n type: \"passkeys\",\n });\n }\n\n private createPasskeysServerHeaders(user: UserParams) {\n return {\n \"x-api-key\": this.apiKey,\n Authorization: `Bearer ${user.jwt}`,\n };\n }\n\n private mapError(error: any, passkeyName: string) {\n if (error.code === 0 && error.name === \"DataError\") {\n return new PasskeyIncompatibleAuthenticatorError(passkeyName);\n }\n\n if (error.message === \"Registration not verified\") {\n return new PasskeyRegistrationError(passkeyName);\n }\n\n if (error.code === \"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY\" && error.name === \"NotAllowedError\") {\n return new PasskeyPromptError(passkeyName);\n }\n\n return error;\n }\n\n private decorate<Account extends KernelSmartAccount<EntryPoint>>(\n account: Account,\n passkeyName: string,\n walletParams: WalletParams\n ): Account {\n return new Proxy(account, {\n get: (target, prop, receiver) => {\n const original = Reflect.get(target, prop, receiver);\n if (typeof original !== \"function\" || typeof prop !== \"string\" || !isAccountSigningMethod(prop)) {\n return original;\n }\n\n const signer = walletParams.signer as PasskeySigner;\n return async (...args: any[]) => {\n const isFirstTransaction = args?.[0]?.factoryData != null;\n if (\n isFirstTransaction &&\n prop === \"signUserOperation\" &&\n signer.type === \"PASSKEY\" &&\n signer.onFirstTimePasskeySigning != null\n ) {\n await signer.onFirstTimePasskeySigning();\n }\n try {\n return await original.call(target, ...args);\n } catch (error) {\n if (signer.onFirstTimePasskeySigningError != null) {\n await signer.onFirstTimePasskeySigningError(error);\n }\n throw this.mapError(error, passkeyName);\n }\n };\n },\n });\n }\n}\n\nconst accountSigningMethods = [\n \"signMessage\",\n \"signTypedData\",\n \"signUserOperation\",\n \"signTransaction\",\n] as const satisfies readonly (keyof SmartAccount<EntryPoint>)[];\n\nfunction isAccountSigningMethod(method: string): method is (typeof accountSigningMethods)[number] {\n return accountSigningMethods.includes(method as any);\n}\n\nconst deserializePasskeyValidatorData = (params: string) => {\n const uint8Array = base64ToBytes(params);\n const jsonString = new TextDecoder().decode(uint8Array);\n\n return JSON.parse(jsonString) as PasskeyValidatorSerializedData;\n};\n\nfunction base64ToBytes(base64: string) {\n const binString = atob(base64);\n return Uint8Array.from(binString, (m) => m.codePointAt(0) as number);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
var _chunkTUVECZA7cjs = require('./chunk-TUVECZA7.cjs');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunkBXSAJOIVcjs = require('./chunk-BXSAJOIV.cjs');
|
|
7
|
+
|
|
8
|
+
// src/error/processor.ts
|
|
9
|
+
var _viem = require('viem');
|
|
10
|
+
var ErrorProcessor = class {
|
|
11
|
+
constructor(logger) {
|
|
12
|
+
this.logger = logger;
|
|
13
|
+
}
|
|
14
|
+
map(error, fallback) {
|
|
15
|
+
this.record(error);
|
|
16
|
+
if (error instanceof _chunkBXSAJOIVcjs.SmartWalletError) {
|
|
17
|
+
return error;
|
|
18
|
+
}
|
|
19
|
+
if (error instanceof _viem.BaseError) {
|
|
20
|
+
return error;
|
|
21
|
+
}
|
|
22
|
+
return fallback;
|
|
23
|
+
}
|
|
24
|
+
record(error) {
|
|
25
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
26
|
+
this.logger.error(`Smart Wallet SDK Error: ${message}`, {
|
|
27
|
+
stack: error instanceof Error ? error.stack : void 0,
|
|
28
|
+
name: error instanceof Error ? error.name : "UnknownError",
|
|
29
|
+
details: _viem.stringify.call(void 0, error),
|
|
30
|
+
domain: window.location.hostname,
|
|
31
|
+
sdk_version: _chunkTUVECZA7cjs.SDK_VERSION
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
exports.ErrorProcessor = ErrorProcessor;
|
|
39
|
+
//# sourceMappingURL=chunk-TK3ZLI22.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/error/processor.ts"],"names":[],"mappings":";;;;;;;;AAAA,SAAS,WAAW,iBAAiB;AAO9B,IAAM,iBAAN,MAAqB;AAAA,EACxB,YAA6B,QAAmB;AAAnB;AAAA,EAAoB;AAAA,EAE1C,IAAI,OAAgB,UAA0D;AACjF,SAAK,OAAO,KAAK;AAEjB,QAAI,iBAAiB,kBAAkB;AACnC,aAAO;AAAA,IACX;AAGA,QAAI,iBAAiB,WAAW;AAC5B,aAAO;AAAA,IACX;AAEA,WAAO;AAAA,EACX;AAAA,EAEQ,OAAO,OAAgB;AAC3B,UAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,SAAK,OAAO,MAAM,2BAA2B,OAAO,IAAI;AAAA,MACpD,OAAO,iBAAiB,QAAQ,MAAM,QAAQ;AAAA,MAC9C,MAAM,iBAAiB,QAAQ,MAAM,OAAO;AAAA,MAC5C,SAAS,UAAU,KAAK;AAAA,MACxB,QAAQ,OAAO,SAAS;AAAA,MACxB,aAAa;AAAA,IACjB,CAAC;AAAA,EACL;AACJ","sourcesContent":["import { BaseError, stringify } from \"viem\";\n\nimport type { SDKLogger } from \"@crossmint/client-sdk-base\";\n\nimport { SmartWalletError } from \".\";\nimport { SDK_VERSION } from \"../utils/constants\";\n\nexport class ErrorProcessor {\n constructor(private readonly logger: SDKLogger) {}\n\n public map(error: unknown, fallback: SmartWalletError): SmartWalletError | BaseError {\n this.record(error);\n\n if (error instanceof SmartWalletError) {\n return error;\n }\n\n // Allow viem errors, which are generally pretty friendly.\n if (error instanceof BaseError) {\n return error;\n }\n\n return fallback;\n }\n\n private record(error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger.error(`Smart Wallet SDK Error: ${message}`, {\n stack: error instanceof Error ? error.stack : undefined,\n name: error instanceof Error ? error.name : \"UnknownError\",\n details: stringify(error),\n domain: window.location.hostname,\n sdk_version: SDK_VERSION,\n });\n }\n}\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// package.json
|
|
2
|
+
var version = "0.1.23";
|
|
3
|
+
|
|
4
|
+
// src/utils/constants.ts
|
|
5
|
+
var ZERO_DEV_TYPE = "ZeroDev";
|
|
6
|
+
var CURRENT_VERSION = 0;
|
|
7
|
+
var SCW_SERVICE = "SCW_SDK";
|
|
8
|
+
var SDK_VERSION = version;
|
|
9
|
+
var API_VERSION = "2024-06-09";
|
|
10
|
+
var SUPPORTED_KERNEL_VERSIONS = ["0.3.1", "0.3.0", "0.2.4"];
|
|
11
|
+
var SUPPORTED_ENTRYPOINT_VERSIONS = ["v0.6", "v0.7"];
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
exports.ZERO_DEV_TYPE = ZERO_DEV_TYPE; exports.CURRENT_VERSION = CURRENT_VERSION; exports.SCW_SERVICE = SCW_SERVICE; exports.SDK_VERSION = SDK_VERSION; exports.API_VERSION = API_VERSION; exports.SUPPORTED_KERNEL_VERSIONS = SUPPORTED_KERNEL_VERSIONS; exports.SUPPORTED_ENTRYPOINT_VERSIONS = SUPPORTED_ENTRYPOINT_VERSIONS;
|
|
22
|
+
//# sourceMappingURL=chunk-TUVECZA7.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/utils/constants.ts"],"names":[],"mappings":";AAEI,cAAW;;;ACAR,IAAM,gBAAgB;AACtB,IAAM,kBAAkB;AACxB,IAAM,cAAc;AACpB,IAAM,cAAc;AACpB,IAAM,cAAc;AACpB,IAAM,4BAA4B,CAAC,SAAS,SAAS,OAAO;AAC5D,IAAM,gCAAgC,CAAC,QAAQ,MAAM","sourcesContent":["{\n \"name\": \"@crossmint/client-sdk-smart-wallet\",\n \"version\": \"0.1.23\",\n \"repository\": \"https://github.com/Crossmint/crossmint-sdk\",\n \"license\": \"Apache-2.0\",\n \"author\": \"Paella Labs Inc\",\n \"sideEffects\": false,\n \"type\": \"module\",\n \"exports\": {\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"files\": [\"dist\", \"src\", \"LICENSE\"],\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"test:vitest\": \"vitest run\"\n },\n \"dependencies\": {\n \"@crossmint/client-sdk-base\": \"workspace:*\",\n \"@crossmint/common-sdk-base\": \"workspace:*\",\n \"@zerodev/ecdsa-validator\": \"5.3.1\",\n \"@zerodev/passkey-validator\": \"5.4.0\",\n \"@zerodev/sdk\": \"5.3.3\",\n \"@zerodev/webauthn-key\": \"5.3.1\",\n \"permissionless\": \"0.1.36\",\n \"viem\": \"2.17.5\",\n \"zod\": \"3.22.4\"\n },\n \"devDependencies\": {\n \"typedoc\": \"0.26.5\",\n \"typedoc-plugin-frontmatter\": \"1.0.0\",\n \"typedoc-plugin-markdown\": \"4.2.3\"\n }\n}\n","import { version } from \"../../package.json\";\n\nexport const ZERO_DEV_TYPE = \"ZeroDev\";\nexport const CURRENT_VERSION = 0;\nexport const SCW_SERVICE = \"SCW_SDK\";\nexport const SDK_VERSION = version;\nexport const API_VERSION = \"2024-06-09\";\nexport const SUPPORTED_KERNEL_VERSIONS = [\"0.3.1\", \"0.3.0\", \"0.2.4\"] as const;\nexport const SUPPORTED_ENTRYPOINT_VERSIONS = [\"v0.6\", \"v0.7\"] as const;\n"]}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import {
|
|
2
|
+
EOASignerConfig
|
|
3
|
+
} from "./chunk-3R6PW6HY.js";
|
|
4
|
+
import {
|
|
5
|
+
equalsIgnoreCase
|
|
6
|
+
} from "./chunk-SMDX2MXU.js";
|
|
7
|
+
import {
|
|
8
|
+
createOwnerSigner
|
|
9
|
+
} from "./chunk-EQSMHR77.js";
|
|
10
|
+
import {
|
|
11
|
+
AdminMismatchError
|
|
12
|
+
} from "./chunk-ASIPMVRQ.js";
|
|
13
|
+
|
|
14
|
+
// src/blockchain/wallets/account/eoa.ts
|
|
15
|
+
import { signerToEcdsaValidator } from "@zerodev/ecdsa-validator";
|
|
16
|
+
import { createKernelAccount } from "@zerodev/sdk";
|
|
17
|
+
var EOACreationStrategy = class {
|
|
18
|
+
async create({
|
|
19
|
+
chain,
|
|
20
|
+
publicClient,
|
|
21
|
+
entryPoint,
|
|
22
|
+
walletParams,
|
|
23
|
+
kernelVersion,
|
|
24
|
+
user,
|
|
25
|
+
existing
|
|
26
|
+
}) {
|
|
27
|
+
const eoa = await createOwnerSigner({
|
|
28
|
+
chain,
|
|
29
|
+
walletParams
|
|
30
|
+
});
|
|
31
|
+
if (existing != null && !equalsIgnoreCase(eoa.address, existing.signerConfig.data.eoaAddress)) {
|
|
32
|
+
throw new AdminMismatchError(
|
|
33
|
+
`User '${user.id}' has an existing wallet with an eoa signer '${existing.signerConfig.data.eoaAddress}', this does not match input eoa signer '${eoa.address}'.`,
|
|
34
|
+
existing.signerConfig.display(),
|
|
35
|
+
{ type: "eoa", eoaAddress: existing.signerConfig.data.eoaAddress }
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
const ecdsaValidator = await signerToEcdsaValidator(publicClient, {
|
|
39
|
+
signer: eoa,
|
|
40
|
+
entryPoint,
|
|
41
|
+
kernelVersion
|
|
42
|
+
});
|
|
43
|
+
const account = await createKernelAccount(publicClient, {
|
|
44
|
+
plugins: {
|
|
45
|
+
sudo: ecdsaValidator
|
|
46
|
+
},
|
|
47
|
+
index: 0n,
|
|
48
|
+
entryPoint,
|
|
49
|
+
kernelVersion,
|
|
50
|
+
deployedAccountAddress: existing?.address
|
|
51
|
+
});
|
|
52
|
+
return { account, signerConfig: new EOASignerConfig({ eoaAddress: eoa.address, type: "eoa" }) };
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
export {
|
|
57
|
+
EOACreationStrategy
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=chunk-U4OBHCIP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/blockchain/wallets/account/eoa.ts"],"sourcesContent":["import { signerToEcdsaValidator } from \"@zerodev/ecdsa-validator\";\nimport { createKernelAccount } from \"@zerodev/sdk\";\n\nimport { AdminMismatchError } from \"../../../error\";\nimport type { AccountAndSigner, EOACreationContext } from \"../../../types/internal\";\nimport { equalsIgnoreCase } from \"../../../utils/helpers\";\nimport { createOwnerSigner } from \"../../../utils/signer\";\nimport { EOASignerConfig } from \"./signer\";\nimport type { AccountCreationStrategy } from \"./strategy\";\n\nexport class EOACreationStrategy implements AccountCreationStrategy {\n public async create({\n chain,\n publicClient,\n entryPoint,\n walletParams,\n kernelVersion,\n user,\n existing,\n }: EOACreationContext): Promise<AccountAndSigner> {\n const eoa = await createOwnerSigner({\n chain,\n walletParams,\n });\n\n if (existing != null && !equalsIgnoreCase(eoa.address, existing.signerConfig.data.eoaAddress)) {\n throw new AdminMismatchError(\n `User '${user.id}' has an existing wallet with an eoa signer '${existing.signerConfig.data.eoaAddress}', this does not match input eoa signer '${eoa.address}'.`,\n existing.signerConfig.display(),\n { type: \"eoa\", eoaAddress: existing.signerConfig.data.eoaAddress }\n );\n }\n\n const ecdsaValidator = await signerToEcdsaValidator(publicClient, {\n signer: eoa,\n entryPoint,\n kernelVersion,\n });\n const account = await createKernelAccount(publicClient, {\n plugins: {\n sudo: ecdsaValidator,\n },\n index: 0n,\n entryPoint,\n kernelVersion,\n deployedAccountAddress: existing?.address,\n });\n\n return { account, signerConfig: new EOASignerConfig({ eoaAddress: eoa.address, type: \"eoa\" }) };\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA,SAAS,8BAA8B;AACvC,SAAS,2BAA2B;AAS7B,IAAM,sBAAN,MAA6D;AAAA,EAChE,MAAa,OAAO;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,GAAkD;AAC9C,UAAM,MAAM,MAAM,kBAAkB;AAAA,MAChC;AAAA,MACA;AAAA,IACJ,CAAC;AAED,QAAI,YAAY,QAAQ,CAAC,iBAAiB,IAAI,SAAS,SAAS,aAAa,KAAK,UAAU,GAAG;AAC3F,YAAM,IAAI;AAAA,QACN,SAAS,KAAK,EAAE,gDAAgD,SAAS,aAAa,KAAK,UAAU,4CAA4C,IAAI,OAAO;AAAA,QAC5J,SAAS,aAAa,QAAQ;AAAA,QAC9B,EAAE,MAAM,OAAO,YAAY,SAAS,aAAa,KAAK,WAAW;AAAA,MACrE;AAAA,IACJ;AAEA,UAAM,iBAAiB,MAAM,uBAAuB,cAAc;AAAA,MAC9D,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,IACJ,CAAC;AACD,UAAM,UAAU,MAAM,oBAAoB,cAAc;AAAA,MACpD,SAAS;AAAA,QACL,MAAM;AAAA,MACV;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA,wBAAwB,UAAU;AAAA,IACtC,CAAC;AAED,WAAO,EAAE,SAAS,cAAc,IAAI,gBAAgB,EAAE,YAAY,IAAI,SAAS,MAAM,MAAM,CAAC,EAAE;AAAA,EAClG;AACJ;","names":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// package.json
|
|
2
|
+
var version = "0.1.23";
|
|
3
|
+
|
|
4
|
+
// src/utils/constants.ts
|
|
5
|
+
var ZERO_DEV_TYPE = "ZeroDev";
|
|
6
|
+
var CURRENT_VERSION = 0;
|
|
7
|
+
var SCW_SERVICE = "SCW_SDK";
|
|
8
|
+
var SDK_VERSION = version;
|
|
9
|
+
var API_VERSION = "2024-06-09";
|
|
10
|
+
var SUPPORTED_KERNEL_VERSIONS = ["0.3.1", "0.3.0", "0.2.4"];
|
|
11
|
+
var SUPPORTED_ENTRYPOINT_VERSIONS = ["v0.6", "v0.7"];
|
|
12
|
+
|
|
13
|
+
export {
|
|
14
|
+
ZERO_DEV_TYPE,
|
|
15
|
+
CURRENT_VERSION,
|
|
16
|
+
SCW_SERVICE,
|
|
17
|
+
SDK_VERSION,
|
|
18
|
+
API_VERSION,
|
|
19
|
+
SUPPORTED_KERNEL_VERSIONS,
|
|
20
|
+
SUPPORTED_ENTRYPOINT_VERSIONS
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=chunk-UDDYHPSW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/utils/constants.ts"],"sourcesContent":["{\n \"name\": \"@crossmint/client-sdk-smart-wallet\",\n \"version\": \"0.1.23\",\n \"repository\": \"https://github.com/Crossmint/crossmint-sdk\",\n \"license\": \"Apache-2.0\",\n \"author\": \"Paella Labs Inc\",\n \"sideEffects\": false,\n \"type\": \"module\",\n \"exports\": {\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"files\": [\"dist\", \"src\", \"LICENSE\"],\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"test:vitest\": \"vitest run\"\n },\n \"dependencies\": {\n \"@crossmint/client-sdk-base\": \"workspace:*\",\n \"@crossmint/common-sdk-base\": \"workspace:*\",\n \"@zerodev/ecdsa-validator\": \"5.3.1\",\n \"@zerodev/passkey-validator\": \"5.4.0\",\n \"@zerodev/sdk\": \"5.3.3\",\n \"@zerodev/webauthn-key\": \"5.3.1\",\n \"permissionless\": \"0.1.36\",\n \"viem\": \"2.17.5\",\n \"zod\": \"3.22.4\"\n },\n \"devDependencies\": {\n \"typedoc\": \"0.26.5\",\n \"typedoc-plugin-frontmatter\": \"1.0.0\",\n \"typedoc-plugin-markdown\": \"4.2.3\"\n }\n}\n","import { version } from \"../../package.json\";\n\nexport const ZERO_DEV_TYPE = \"ZeroDev\";\nexport const CURRENT_VERSION = 0;\nexport const SCW_SERVICE = \"SCW_SDK\";\nexport const SDK_VERSION = version;\nexport const API_VERSION = \"2024-06-09\";\nexport const SUPPORTED_KERNEL_VERSIONS = [\"0.3.1\", \"0.3.0\", \"0.2.4\"] as const;\nexport const SUPPORTED_ENTRYPOINT_VERSIONS = [\"v0.6\", \"v0.7\"] as const;\n"],"mappings":";AAEI,cAAW;;;ACAR,IAAM,gBAAgB;AACtB,IAAM,kBAAkB;AACxB,IAAM,cAAc;AACpB,IAAM,cAAc;AACpB,IAAM,cAAc;AACpB,IAAM,4BAA4B,CAAC,SAAS,SAAS,OAAO;AAC5D,IAAM,gCAAgC,CAAC,QAAQ,MAAM;","names":[]}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import {
|
|
2
|
+
scwLogger
|
|
3
|
+
} from "./chunk-MAID7XYG.js";
|
|
4
|
+
import {
|
|
5
|
+
SmartWalletConfigSchema
|
|
6
|
+
} from "./chunk-OYKL3RNL.js";
|
|
7
|
+
import {
|
|
8
|
+
bigintsToHex,
|
|
9
|
+
parseBigintAPIResponse
|
|
10
|
+
} from "./chunk-FSIMJYXR.js";
|
|
11
|
+
import {
|
|
12
|
+
API_VERSION
|
|
13
|
+
} from "./chunk-UDDYHPSW.js";
|
|
14
|
+
import {
|
|
15
|
+
AdminAlreadyUsedError,
|
|
16
|
+
SmartWalletsNotEnabledError,
|
|
17
|
+
UserWalletAlreadyCreatedError
|
|
18
|
+
} from "./chunk-ASIPMVRQ.js";
|
|
19
|
+
|
|
20
|
+
// src/api/CrossmintWalletService.ts
|
|
21
|
+
import { APIErrorService, BaseCrossmintService, CrossmintServiceError } from "@crossmint/client-sdk-base";
|
|
22
|
+
import { blockchainToChainId } from "@crossmint/common-sdk-base";
|
|
23
|
+
var CrossmintWalletService = class extends BaseCrossmintService {
|
|
24
|
+
constructor() {
|
|
25
|
+
super(...arguments);
|
|
26
|
+
this.logger = scwLogger;
|
|
27
|
+
this.apiErrorService = new APIErrorService({
|
|
28
|
+
ERROR_USER_WALLET_ALREADY_CREATED: ({ userId }) => new UserWalletAlreadyCreatedError(userId),
|
|
29
|
+
ERROR_ADMIN_SIGNER_ALREADY_USED: () => new AdminAlreadyUsedError(),
|
|
30
|
+
ERROR_PROJECT_NONCUSTODIAL_WALLETS_NOT_ENABLED: () => new SmartWalletsNotEnabledError()
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
async idempotentCreateSmartWallet(user, input) {
|
|
34
|
+
await this.fetchCrossmintAPI(
|
|
35
|
+
`${API_VERSION}/sdk/smart-wallet`,
|
|
36
|
+
{ method: "PUT", body: JSON.stringify(input) },
|
|
37
|
+
"Error creating abstract wallet. Please contact support",
|
|
38
|
+
user.jwt
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
async sponsorUserOperation(user, userOp, entryPoint, chain) {
|
|
42
|
+
const chainId = blockchainToChainId(chain);
|
|
43
|
+
const result = await this.fetchCrossmintAPI(
|
|
44
|
+
`${API_VERSION}/sdk/paymaster`,
|
|
45
|
+
{ method: "POST", body: JSON.stringify({ userOp: bigintsToHex(userOp), entryPoint, chainId }) },
|
|
46
|
+
"Error sponsoring user operation. Please contact support",
|
|
47
|
+
user.jwt
|
|
48
|
+
);
|
|
49
|
+
return parseBigintAPIResponse(result);
|
|
50
|
+
}
|
|
51
|
+
async getSmartWalletConfig(user, chain) {
|
|
52
|
+
const data = await this.fetchCrossmintAPI(
|
|
53
|
+
`${API_VERSION}/sdk/smart-wallet/config?chain=${chain}`,
|
|
54
|
+
{ method: "GET" },
|
|
55
|
+
"Error getting smart wallet version configuration. Please contact support",
|
|
56
|
+
user.jwt
|
|
57
|
+
);
|
|
58
|
+
const result = SmartWalletConfigSchema.safeParse(data);
|
|
59
|
+
if (!result.success) {
|
|
60
|
+
throw new CrossmintServiceError(
|
|
61
|
+
`Invalid smart wallet config, please contact support. Details below:
|
|
62
|
+
${result.error.toString()}`
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
return result.data;
|
|
66
|
+
}
|
|
67
|
+
async fetchNFTs(address, chain) {
|
|
68
|
+
return this.fetchCrossmintAPI(
|
|
69
|
+
`v1-alpha1/wallets/${chain}:${address}/nfts`,
|
|
70
|
+
{ method: "GET" },
|
|
71
|
+
`Error fetching NFTs for wallet: ${address}`
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
getPasskeyServerUrl() {
|
|
75
|
+
return this.crossmintBaseUrl + "api/internal/passkeys";
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
export {
|
|
80
|
+
CrossmintWalletService
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=chunk-UNP5V2AB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/api/CrossmintWalletService.ts"],"sourcesContent":["import type { UserOperation } from \"permissionless\";\nimport type { EntryPoint, GetEntryPointVersion } from \"permissionless/types/entrypoint\";\n\nimport { APIErrorService, BaseCrossmintService, CrossmintServiceError } from \"@crossmint/client-sdk-base\";\nimport { blockchainToChainId } from \"@crossmint/common-sdk-base\";\n\nimport type { SmartWalletChain } from \"../blockchain/chains\";\nimport { AdminAlreadyUsedError, SmartWalletsNotEnabledError, UserWalletAlreadyCreatedError } from \"../error\";\nimport { scwLogger } from \"../services\";\nimport type { UserParams } from \"../types/params\";\nimport { SmartWalletConfigSchema } from \"../types/schema\";\nimport type { SmartWalletConfig, StoreSmartWalletParams } from \"../types/service\";\nimport { bigintsToHex, parseBigintAPIResponse } from \"../utils/api\";\nimport { API_VERSION } from \"../utils/constants\";\n\ntype WalletsAPIErrorCodes =\n | \"ERROR_USER_WALLET_ALREADY_CREATED\"\n | \"ERROR_ADMIN_SIGNER_ALREADY_USED\"\n | \"ERROR_PROJECT_NONCUSTODIAL_WALLETS_NOT_ENABLED\";\n\nexport class CrossmintWalletService extends BaseCrossmintService {\n logger = scwLogger;\n protected apiErrorService = new APIErrorService<WalletsAPIErrorCodes>({\n ERROR_USER_WALLET_ALREADY_CREATED: ({ userId }: { userId: string }) =>\n new UserWalletAlreadyCreatedError(userId),\n ERROR_ADMIN_SIGNER_ALREADY_USED: () => new AdminAlreadyUsedError(),\n ERROR_PROJECT_NONCUSTODIAL_WALLETS_NOT_ENABLED: () => new SmartWalletsNotEnabledError(),\n });\n\n async idempotentCreateSmartWallet(user: UserParams, input: StoreSmartWalletParams): Promise<void> {\n await this.fetchCrossmintAPI(\n `${API_VERSION}/sdk/smart-wallet`,\n { method: \"PUT\", body: JSON.stringify(input) },\n \"Error creating abstract wallet. Please contact support\",\n user.jwt\n );\n }\n\n async sponsorUserOperation<E extends EntryPoint>(\n user: UserParams,\n userOp: UserOperation<GetEntryPointVersion<E>>,\n entryPoint: E,\n chain: SmartWalletChain\n ): Promise<{ sponsorUserOpParams: UserOperation<GetEntryPointVersion<E>> }> {\n const chainId = blockchainToChainId(chain);\n const result = await this.fetchCrossmintAPI(\n `${API_VERSION}/sdk/paymaster`,\n { method: \"POST\", body: JSON.stringify({ userOp: bigintsToHex(userOp), entryPoint, chainId }) },\n \"Error sponsoring user operation. Please contact support\",\n user.jwt\n );\n return parseBigintAPIResponse(result);\n }\n\n async getSmartWalletConfig(user: UserParams, chain: SmartWalletChain): Promise<SmartWalletConfig> {\n const data: unknown = await this.fetchCrossmintAPI(\n `${API_VERSION}/sdk/smart-wallet/config?chain=${chain}`,\n { method: \"GET\" },\n \"Error getting smart wallet version configuration. Please contact support\",\n user.jwt\n );\n\n const result = SmartWalletConfigSchema.safeParse(data);\n if (!result.success) {\n throw new CrossmintServiceError(\n `Invalid smart wallet config, please contact support. Details below:\\n${result.error.toString()}`\n );\n }\n\n return result.data;\n }\n\n async fetchNFTs(address: string, chain: SmartWalletChain) {\n return this.fetchCrossmintAPI(\n `v1-alpha1/wallets/${chain}:${address}/nfts`,\n { method: \"GET\" },\n `Error fetching NFTs for wallet: ${address}`\n );\n }\n\n public getPasskeyServerUrl(): string {\n return this.crossmintBaseUrl + \"api/internal/passkeys\";\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAGA,SAAS,iBAAiB,sBAAsB,6BAA6B;AAC7E,SAAS,2BAA2B;AAgB7B,IAAM,yBAAN,cAAqC,qBAAqB;AAAA,EAA1D;AAAA;AACH,kBAAS;AACT,SAAU,kBAAkB,IAAI,gBAAsC;AAAA,MAClE,mCAAmC,CAAC,EAAE,OAAO,MACzC,IAAI,8BAA8B,MAAM;AAAA,MAC5C,iCAAiC,MAAM,IAAI,sBAAsB;AAAA,MACjE,gDAAgD,MAAM,IAAI,4BAA4B;AAAA,IAC1F,CAAC;AAAA;AAAA,EAED,MAAM,4BAA4B,MAAkB,OAA8C;AAC9F,UAAM,KAAK;AAAA,MACP,GAAG,WAAW;AAAA,MACd,EAAE,QAAQ,OAAO,MAAM,KAAK,UAAU,KAAK,EAAE;AAAA,MAC7C;AAAA,MACA,KAAK;AAAA,IACT;AAAA,EACJ;AAAA,EAEA,MAAM,qBACF,MACA,QACA,YACA,OACwE;AACxE,UAAM,UAAU,oBAAoB,KAAK;AACzC,UAAM,SAAS,MAAM,KAAK;AAAA,MACtB,GAAG,WAAW;AAAA,MACd,EAAE,QAAQ,QAAQ,MAAM,KAAK,UAAU,EAAE,QAAQ,aAAa,MAAM,GAAG,YAAY,QAAQ,CAAC,EAAE;AAAA,MAC9F;AAAA,MACA,KAAK;AAAA,IACT;AACA,WAAO,uBAAuB,MAAM;AAAA,EACxC;AAAA,EAEA,MAAM,qBAAqB,MAAkB,OAAqD;AAC9F,UAAM,OAAgB,MAAM,KAAK;AAAA,MAC7B,GAAG,WAAW,kCAAkC,KAAK;AAAA,MACrD,EAAE,QAAQ,MAAM;AAAA,MAChB;AAAA,MACA,KAAK;AAAA,IACT;AAEA,UAAM,SAAS,wBAAwB,UAAU,IAAI;AACrD,QAAI,CAAC,OAAO,SAAS;AACjB,YAAM,IAAI;AAAA,QACN;AAAA,EAAwE,OAAO,MAAM,SAAS,CAAC;AAAA,MACnG;AAAA,IACJ;AAEA,WAAO,OAAO;AAAA,EAClB;AAAA,EAEA,MAAM,UAAU,SAAiB,OAAyB;AACtD,WAAO,KAAK;AAAA,MACR,qBAAqB,KAAK,IAAI,OAAO;AAAA,MACrC,EAAE,QAAQ,MAAM;AAAA,MAChB,mCAAmC,OAAO;AAAA,IAC9C;AAAA,EACJ;AAAA,EAEO,sBAA8B;AACjC,WAAO,KAAK,mBAAmB;AAAA,EACnC;AACJ;","names":[]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/blockchain/rpc.ts
|
|
2
|
+
var _commonsdkbase = require('@crossmint/common-sdk-base');
|
|
3
|
+
var ALCHEMY_API_KEY = "-7M6vRDBDknwvMxnqah_jbcieWg0qad9";
|
|
4
|
+
var PIMLICO_API_KEY = "pim_9dKmQPxiTCvtbUNF7XFBbA";
|
|
5
|
+
var ALCHEMY_RPC_SUBDOMAIN = {
|
|
6
|
+
polygon: "polygon-mainnet",
|
|
7
|
+
"polygon-amoy": "polygon-amoy",
|
|
8
|
+
base: "base-mainnet",
|
|
9
|
+
"base-sepolia": "base-sepolia",
|
|
10
|
+
optimism: "opt-mainnet",
|
|
11
|
+
"optimism-sepolia": "opt-sepolia",
|
|
12
|
+
arbitrum: "arb-mainnet",
|
|
13
|
+
"arbitrum-sepolia": "arb-sepolia"
|
|
14
|
+
};
|
|
15
|
+
function getAlchemyRPC(chain) {
|
|
16
|
+
return `https://${ALCHEMY_RPC_SUBDOMAIN[chain]}.g.alchemy.com/v2/${ALCHEMY_API_KEY}`;
|
|
17
|
+
}
|
|
18
|
+
function getPimlicoBundlerRPC(chain) {
|
|
19
|
+
return `https://api.pimlico.io/v2/${_commonsdkbase.blockchainToChainId.call(void 0, chain)}/rpc?apikey=${PIMLICO_API_KEY}`;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
exports.ALCHEMY_RPC_SUBDOMAIN = ALCHEMY_RPC_SUBDOMAIN; exports.getAlchemyRPC = getAlchemyRPC; exports.getPimlicoBundlerRPC = getPimlicoBundlerRPC;
|
|
27
|
+
//# sourceMappingURL=chunk-UQKE6R5W.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/blockchain/rpc.ts"],"names":[],"mappings":";AAAA,SAAS,2BAA2B;AAIpC,IAAM,kBAAkB;AACxB,IAAM,kBAAkB;AAEjB,IAAM,wBAA0D;AAAA,EACnE,SAAS;AAAA,EACT,gBAAgB;AAAA,EAChB,MAAM;AAAA,EACN,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,oBAAoB;AAAA,EACpB,UAAU;AAAA,EACV,oBAAoB;AACxB;AAEO,SAAS,cAAc,OAAiC;AAC3D,SAAO,WAAW,sBAAsB,KAAK,CAAC,qBAAqB,eAAe;AACtF;AAEO,SAAS,qBAAqB,OAAiC;AAClE,SAAO,6BAA6B,oBAAoB,KAAK,CAAC,eAAe,eAAe;AAChG","sourcesContent":["import { blockchainToChainId } from \"@crossmint/common-sdk-base\";\n\nimport type { SmartWalletChain } from \"./chains\";\n\nconst ALCHEMY_API_KEY = \"-7M6vRDBDknwvMxnqah_jbcieWg0qad9\";\nconst PIMLICO_API_KEY = \"pim_9dKmQPxiTCvtbUNF7XFBbA\";\n\nexport const ALCHEMY_RPC_SUBDOMAIN: Record<SmartWalletChain, string> = {\n polygon: \"polygon-mainnet\",\n \"polygon-amoy\": \"polygon-amoy\",\n base: \"base-mainnet\",\n \"base-sepolia\": \"base-sepolia\",\n optimism: \"opt-mainnet\",\n \"optimism-sepolia\": \"opt-sepolia\",\n arbitrum: \"arb-mainnet\",\n \"arbitrum-sepolia\": \"arb-sepolia\",\n};\n\nexport function getAlchemyRPC(chain: SmartWalletChain): string {\n return `https://${ALCHEMY_RPC_SUBDOMAIN[chain]}.g.alchemy.com/v2/${ALCHEMY_API_KEY}`;\n}\n\nexport function getPimlicoBundlerRPC(chain: SmartWalletChain): string {\n return `https://api.pimlico.io/v2/${blockchainToChainId(chain)}/rpc?apikey=${PIMLICO_API_KEY}`;\n}\n"]}
|