@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 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types/schema.ts"],"names":[],"mappings":";;;;;;AAAA,SAAS,uCAAuC;AAChD,SAAS,WAAW,aAAa;AACjC,SAAS,SAAS;AAIlB,IAAM,YAAY,EAAE,OAAsB,CAAC,QAA8B,MAAM,GAAa,GAAG;AAAA,EAC3F,SAAS;AACb,CAAC;AAED,IAAM,mBAAmB,EAAE,OAAsB,CAAC,QAA8B,UAAU,GAAa,GAAG;AAAA,EACtG,SAAS;AACb,CAAC;AAEM,IAAM,sBAAsB,EAAE,OAAO;AAAA,EACxC,YAAY;AAAA,EACZ,MAAM,EAAE,QAAQ,KAAK;AACzB,CAAC;AAEM,IAAM,uCAAuC,EAAE,OAAO;AAAA,EACzD,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,SAAS,EAAE,OAAO;AAAA,EAClB,SAAS,EAAE,OAAO;AAAA,EAClB,qBAAqB;AAAA,EACrB,iBAAiB,EAAE,OAAO;AAC9B,CAAC;AAEM,IAAM,0BAA0B,qCAAqC,OAAO;AAAA,EAC/E,aAAa,EAAE,OAAO;AAAA,EACtB,0BAA0B,EAAE,WAAW,+BAA+B;AAAA,EACtE,QAAQ,EAAE,OAAO;AAAA,EACjB,MAAM,EAAE,QAAQ,UAAU;AAC9B,CAAC;AAEM,IAAM,mBAAmB,EAAE,mBAAmB,QAAQ,CAAC,yBAAyB,mBAAmB,CAAC;AAEpG,IAAM,0BAA0B,EAAE,OAAO;AAAA,EAC5C,eAAe,EAAE,KAAK,2BAA2B;AAAA,IAC7C,UAAU,CAAC,GAAG,SAAS;AAAA,MACnB,SAAS,mDAAmD,0BAA0B;AAAA,QAClF;AAAA,MACJ,CAAC,mBAAmB,IAAI,IAAI;AAAA,IAChC;AAAA,EACJ,CAAC;AAAA,EACD,mBAAmB,EAAE,KAAK,+BAA+B;AAAA,IACrD,UAAU,CAAC,GAAG,SAAS;AAAA,MACnB,SAAS,wDAAwD,8BAA8B;AAAA,QAC3F;AAAA,MACJ,CAAC,mBAAmB,IAAI,IAAI;AAAA,IAChC;AAAA,EACJ,CAAC;AAAA,EACD,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACxB,SAAS,EACJ;AAAA,IACG,EAAE,OAAO;AAAA,MACL,YAAY;AAAA,IAChB,CAAC;AAAA,EACL,EACC,IAAI,CAAC,EACL,IAAI,GAAG,6DAA6D;AAAA,EACzE,4BAA4B,iBAAiB,SAAS;AAC1D,CAAC","sourcesContent":["import { PasskeyValidatorContractVersion } from \"@zerodev/passkey-validator\";\nimport { isAddress, isHex } from \"viem\";\nimport { z } from \"zod\";\n\nimport { SUPPORTED_ENTRYPOINT_VERSIONS, SUPPORTED_KERNEL_VERSIONS } from \"../utils/constants\";\n\nconst HexSchema = z.custom<`0x${string}`>((val): val is `0x${string}` => isHex(val as string), {\n message: \"Invalid hex string\",\n});\n\nconst evmAddressSchema = z.custom<`0x${string}`>((val): val is `0x${string}` => isAddress(val as string), {\n message: \"Invalid evm address\",\n});\n\nexport const EOASignerDataSchema = z.object({\n eoaAddress: evmAddressSchema,\n type: z.literal(\"eoa\"),\n});\n\nexport const PasskeyValidatorSerializedDataSchema = z.object({\n entryPoint: evmAddressSchema,\n validatorAddress: evmAddressSchema,\n pubKeyX: z.string(),\n pubKeyY: z.string(),\n authenticatorIdHash: HexSchema,\n authenticatorId: z.string(),\n});\n\nexport const PasskeySignerDataSchema = PasskeyValidatorSerializedDataSchema.extend({\n passkeyName: z.string(),\n validatorContractVersion: z.nativeEnum(PasskeyValidatorContractVersion),\n domain: z.string(),\n type: z.literal(\"passkeys\"),\n});\n\nexport const SignerDataSchema = z.discriminatedUnion(\"type\", [PasskeySignerDataSchema, EOASignerDataSchema]);\n\nexport const SmartWalletConfigSchema = z.object({\n kernelVersion: z.enum(SUPPORTED_KERNEL_VERSIONS, {\n errorMap: (_, ctx) => ({\n message: `Unsupported kernel version. Supported versions: ${SUPPORTED_KERNEL_VERSIONS.join(\n \", \"\n )}. Version used: ${ctx.data}. Please contact support`,\n }),\n }),\n entryPointVersion: z.enum(SUPPORTED_ENTRYPOINT_VERSIONS, {\n errorMap: (_, ctx) => ({\n message: `Unsupported entry point version. Supported versions: ${SUPPORTED_ENTRYPOINT_VERSIONS.join(\n \", \"\n )}. Version used: ${ctx.data}. Please contact support`,\n }),\n }),\n userId: z.string().min(1),\n signers: z\n .array(\n z.object({\n signerData: SignerDataSchema,\n })\n )\n .min(0)\n .max(1, \"Invalid wallet signer configuration. Please contact support\"),\n smartContractWalletAddress: evmAddressSchema.optional(),\n});\n"]}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import {
|
|
2
|
+
usesGelatoBundler
|
|
3
|
+
} from "./chunk-JOB7STIS.js";
|
|
4
|
+
import {
|
|
5
|
+
scwLogger
|
|
6
|
+
} from "./chunk-MAID7XYG.js";
|
|
7
|
+
import {
|
|
8
|
+
SmartWalletError
|
|
9
|
+
} from "./chunk-ASIPMVRQ.js";
|
|
10
|
+
|
|
11
|
+
// src/blockchain/wallets/clientDecorator.ts
|
|
12
|
+
import { stringify } from "viem";
|
|
13
|
+
var transactionMethods = [
|
|
14
|
+
"sendTransaction",
|
|
15
|
+
"writeContract",
|
|
16
|
+
"sendUserOperation"
|
|
17
|
+
];
|
|
18
|
+
var signingMethods = [
|
|
19
|
+
"signMessage",
|
|
20
|
+
"signTypedData"
|
|
21
|
+
];
|
|
22
|
+
function isTxnMethod(method) {
|
|
23
|
+
return transactionMethods.includes(method);
|
|
24
|
+
}
|
|
25
|
+
function isSignMethod(method) {
|
|
26
|
+
return signingMethods.includes(method);
|
|
27
|
+
}
|
|
28
|
+
var ClientDecorator = class {
|
|
29
|
+
constructor(errorProcessor, logger = scwLogger) {
|
|
30
|
+
this.errorProcessor = errorProcessor;
|
|
31
|
+
this.logger = logger;
|
|
32
|
+
}
|
|
33
|
+
decorate({
|
|
34
|
+
crossmintChain,
|
|
35
|
+
smartAccountClient
|
|
36
|
+
}) {
|
|
37
|
+
return new Proxy(smartAccountClient, {
|
|
38
|
+
get: (target, prop, receiver) => {
|
|
39
|
+
const originalMethod = Reflect.get(target, prop, receiver);
|
|
40
|
+
if (typeof originalMethod !== "function" || typeof prop !== "string" || !(isSignMethod(prop) || isTxnMethod(prop))) {
|
|
41
|
+
return originalMethod;
|
|
42
|
+
}
|
|
43
|
+
return (...args) => this.logger.logPerformance(
|
|
44
|
+
`CrossmintSmartWallet.${prop}`,
|
|
45
|
+
() => this.execute(target, prop, originalMethod, args, crossmintChain)
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
async execute(target, prop, originalMethod, args, crossmintChain) {
|
|
51
|
+
try {
|
|
52
|
+
this.logger.log(`[CrossmintSmartWallet.${prop}] - params: ${stringify(args)}`);
|
|
53
|
+
const processed = isTxnMethod(prop) ? this.processTxnArgs(prop, crossmintChain, args) : args;
|
|
54
|
+
return await originalMethod.call(target, ...processed);
|
|
55
|
+
} catch (error) {
|
|
56
|
+
const description = isTxnMethod(prop) ? "signing" : "sending transaction";
|
|
57
|
+
throw this.errorProcessor.map(
|
|
58
|
+
error,
|
|
59
|
+
new SmartWalletError(`Error ${description}: ${error.message}`, stringify(error))
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
processTxnArgs(prop, crossmintChain, args) {
|
|
64
|
+
if (prop === "sendUserOperation") {
|
|
65
|
+
const [{ userOperation, middleware, account }] = args;
|
|
66
|
+
return [
|
|
67
|
+
{
|
|
68
|
+
middleware,
|
|
69
|
+
account,
|
|
70
|
+
userOperation: this.addGelatoBundlerProperties(crossmintChain, userOperation)
|
|
71
|
+
},
|
|
72
|
+
...args.slice(1)
|
|
73
|
+
];
|
|
74
|
+
}
|
|
75
|
+
const [txn] = args;
|
|
76
|
+
return [this.addGelatoBundlerProperties(crossmintChain, txn), ...args.slice(1)];
|
|
77
|
+
}
|
|
78
|
+
/*
|
|
79
|
+
* Chain that ZD uses Gelato as for bundler require special parameters:
|
|
80
|
+
* https://docs.zerodev.app/sdk/faqs/use-with-gelato#transaction-configuration
|
|
81
|
+
*/
|
|
82
|
+
addGelatoBundlerProperties(crossmintChain, txnParams) {
|
|
83
|
+
if (usesGelatoBundler(crossmintChain)) {
|
|
84
|
+
return { ...txnParams, maxFeePerGas: "0x0", maxPriorityFeePerGas: "0x0" };
|
|
85
|
+
}
|
|
86
|
+
return txnParams;
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export {
|
|
91
|
+
ClientDecorator
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=chunk-7G2SBZTE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/blockchain/wallets/clientDecorator.ts"],"sourcesContent":["import type { SmartAccountClient } from \"permissionless\";\nimport type { EntryPoint } from \"permissionless/types/entrypoint\";\nimport { stringify } from \"viem\";\n\nimport { SmartWalletError } from \"../../error\";\nimport type { ErrorProcessor } from \"../../error/processor\";\nimport { scwLogger } from \"../../services\";\nimport { usesGelatoBundler } from \"../../utils/blockchain\";\nimport type { SmartWalletChain } from \"../chains\";\n\nconst transactionMethods = [\n \"sendTransaction\",\n \"writeContract\",\n \"sendUserOperation\",\n] as const satisfies readonly (keyof SmartAccountClient<EntryPoint>)[];\n\nconst signingMethods = [\n \"signMessage\",\n \"signTypedData\",\n] as const satisfies readonly (keyof SmartAccountClient<EntryPoint>)[];\n\ntype TxnMethod = (typeof transactionMethods)[number];\ntype SignMethod = (typeof signingMethods)[number];\n\nfunction isTxnMethod(method: string): method is TxnMethod {\n return transactionMethods.includes(method as any);\n}\n\nfunction isSignMethod(method: string): method is SignMethod {\n return signingMethods.includes(method as any);\n}\n\n/**\n * A decorator class for SmartAccountClient instances. It enhances the client with:\n * - Error handling & logging.\n * - Performance metrics.\n * - Automatic formatting of transactions for Gelato bundler compatibility.\n * */\nexport class ClientDecorator {\n constructor(\n private readonly errorProcessor: ErrorProcessor,\n protected logger = scwLogger\n ) {}\n\n public decorate<Client extends SmartAccountClient<EntryPoint>>({\n crossmintChain,\n smartAccountClient,\n }: {\n crossmintChain: SmartWalletChain;\n smartAccountClient: Client;\n }): Client {\n return new Proxy(smartAccountClient, {\n get: (target, prop, receiver) => {\n const originalMethod = Reflect.get(target, prop, receiver);\n\n if (\n typeof originalMethod !== \"function\" ||\n typeof prop !== \"string\" ||\n !(isSignMethod(prop) || isTxnMethod(prop))\n ) {\n return originalMethod;\n }\n\n return (...args: any[]) =>\n this.logger.logPerformance(`CrossmintSmartWallet.${prop}`, () =>\n this.execute(target, prop, originalMethod, args, crossmintChain)\n );\n },\n }) as Client;\n }\n\n private async execute<M extends TxnMethod | SignMethod>(\n target: SmartAccountClient<EntryPoint>,\n prop: M,\n originalMethod: Function,\n args: any[],\n crossmintChain: SmartWalletChain\n ) {\n try {\n this.logger.log(`[CrossmintSmartWallet.${prop}] - params: ${stringify(args)}`);\n const processed = isTxnMethod(prop) ? this.processTxnArgs(prop, crossmintChain, args) : args;\n return await originalMethod.call(target, ...processed);\n } catch (error: any) {\n const description = isTxnMethod(prop) ? \"signing\" : \"sending transaction\";\n throw this.errorProcessor.map(\n error,\n new SmartWalletError(`Error ${description}: ${error.message}`, stringify(error))\n );\n }\n }\n\n private processTxnArgs(prop: TxnMethod, crossmintChain: SmartWalletChain, args: any[]): any[] {\n if (prop === \"sendUserOperation\") {\n const [{ userOperation, middleware, account }] = args as Parameters<\n SmartAccountClient<EntryPoint>[\"sendUserOperation\"]\n >;\n return [\n {\n middleware,\n account,\n userOperation: this.addGelatoBundlerProperties(crossmintChain, userOperation),\n },\n ...args.slice(1),\n ];\n }\n\n const [txn] = args as\n | Parameters<SmartAccountClient<EntryPoint>[\"sendTransaction\"]>\n | Parameters<SmartAccountClient<EntryPoint>[\"writeContract\"]>;\n\n return [this.addGelatoBundlerProperties(crossmintChain, txn), ...args.slice(1)];\n }\n\n /*\n * Chain that ZD uses Gelato as for bundler require special parameters:\n * https://docs.zerodev.app/sdk/faqs/use-with-gelato#transaction-configuration\n */\n private addGelatoBundlerProperties(\n crossmintChain: SmartWalletChain,\n txnParams: { maxFeePerGas?: bigint; maxPriorityFeePerGas?: bigint }\n ) {\n if (usesGelatoBundler(crossmintChain)) {\n return { ...txnParams, maxFeePerGas: \"0x0\" as any, maxPriorityFeePerGas: \"0x0\" as any };\n }\n\n return txnParams;\n }\n}\n"],"mappings":";;;;;;;;;;;AAEA,SAAS,iBAAiB;AAQ1B,IAAM,qBAAqB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AACJ;AAEA,IAAM,iBAAiB;AAAA,EACnB;AAAA,EACA;AACJ;AAKA,SAAS,YAAY,QAAqC;AACtD,SAAO,mBAAmB,SAAS,MAAa;AACpD;AAEA,SAAS,aAAa,QAAsC;AACxD,SAAO,eAAe,SAAS,MAAa;AAChD;AAQO,IAAM,kBAAN,MAAsB;AAAA,EACzB,YACqB,gBACP,SAAS,WACrB;AAFmB;AACP;AAAA,EACX;AAAA,EAEI,SAAwD;AAAA,IAC3D;AAAA,IACA;AAAA,EACJ,GAGW;AACP,WAAO,IAAI,MAAM,oBAAoB;AAAA,MACjC,KAAK,CAAC,QAAQ,MAAM,aAAa;AAC7B,cAAM,iBAAiB,QAAQ,IAAI,QAAQ,MAAM,QAAQ;AAEzD,YACI,OAAO,mBAAmB,cAC1B,OAAO,SAAS,YAChB,EAAE,aAAa,IAAI,KAAK,YAAY,IAAI,IAC1C;AACE,iBAAO;AAAA,QACX;AAEA,eAAO,IAAI,SACP,KAAK,OAAO;AAAA,UAAe,wBAAwB,IAAI;AAAA,UAAI,MACvD,KAAK,QAAQ,QAAQ,MAAM,gBAAgB,MAAM,cAAc;AAAA,QACnE;AAAA,MACR;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EAEA,MAAc,QACV,QACA,MACA,gBACA,MACA,gBACF;AACE,QAAI;AACA,WAAK,OAAO,IAAI,yBAAyB,IAAI,eAAe,UAAU,IAAI,CAAC,EAAE;AAC7E,YAAM,YAAY,YAAY,IAAI,IAAI,KAAK,eAAe,MAAM,gBAAgB,IAAI,IAAI;AACxF,aAAO,MAAM,eAAe,KAAK,QAAQ,GAAG,SAAS;AAAA,IACzD,SAAS,OAAY;AACjB,YAAM,cAAc,YAAY,IAAI,IAAI,YAAY;AACpD,YAAM,KAAK,eAAe;AAAA,QACtB;AAAA,QACA,IAAI,iBAAiB,SAAS,WAAW,KAAK,MAAM,OAAO,IAAI,UAAU,KAAK,CAAC;AAAA,MACnF;AAAA,IACJ;AAAA,EACJ;AAAA,EAEQ,eAAe,MAAiB,gBAAkC,MAAoB;AAC1F,QAAI,SAAS,qBAAqB;AAC9B,YAAM,CAAC,EAAE,eAAe,YAAY,QAAQ,CAAC,IAAI;AAGjD,aAAO;AAAA,QACH;AAAA,UACI;AAAA,UACA;AAAA,UACA,eAAe,KAAK,2BAA2B,gBAAgB,aAAa;AAAA,QAChF;AAAA,QACA,GAAG,KAAK,MAAM,CAAC;AAAA,MACnB;AAAA,IACJ;AAEA,UAAM,CAAC,GAAG,IAAI;AAId,WAAO,CAAC,KAAK,2BAA2B,gBAAgB,GAAG,GAAG,GAAG,KAAK,MAAM,CAAC,CAAC;AAAA,EAClF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,2BACJ,gBACA,WACF;AACE,QAAI,kBAAkB,cAAc,GAAG;AACnC,aAAO,EAAE,GAAG,WAAW,cAAc,OAAc,sBAAsB,MAAa;AAAA,IAC1F;AAEA,WAAO;AAAA,EACX;AACJ;","names":[]}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/blockchain/wallets/SendTransactionService.ts
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
var _viem = require('viem');
|
|
6
|
+
var _clientsdkbase = require('@crossmint/client-sdk-base');
|
|
7
|
+
var EVMSendTransactionError = class extends _clientsdkbase.CrossmintSDKError {
|
|
8
|
+
constructor(message, viemError, stage, code = _clientsdkbase.WalletErrorCode.SEND_TRANSACTION_FAILED) {
|
|
9
|
+
super(message, code);
|
|
10
|
+
this.viemError = viemError;
|
|
11
|
+
this.stage = stage;
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
var EVMSendTransactionExecutionRevertedError = class extends EVMSendTransactionError {
|
|
15
|
+
constructor(message, viemError, revertError, txId, stage, data = revertError.data, reason = revertError.reason) {
|
|
16
|
+
super(message, viemError, stage, _clientsdkbase.WalletErrorCode.SEND_TRANSACTION_EXECUTION_REVERTED);
|
|
17
|
+
this.viemError = viemError;
|
|
18
|
+
this.txId = txId;
|
|
19
|
+
this.stage = stage;
|
|
20
|
+
this.data = data;
|
|
21
|
+
this.reason = reason;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
var SendTransactionService = class {
|
|
25
|
+
constructor(client, defaultSendTransactionOptions = {
|
|
26
|
+
confirmations: 2,
|
|
27
|
+
transactionConfirmationTimeout: 3e4
|
|
28
|
+
}) {
|
|
29
|
+
this.client = client;
|
|
30
|
+
this.defaultSendTransactionOptions = defaultSendTransactionOptions;
|
|
31
|
+
}
|
|
32
|
+
async sendTransaction(request, config = {}) {
|
|
33
|
+
const { confirmations, transactionConfirmationTimeout } = this.getConfig(config);
|
|
34
|
+
await this.simulateCall(request, void 0, "simulation");
|
|
35
|
+
let hash;
|
|
36
|
+
try {
|
|
37
|
+
hash = await this.client.wallet.writeContract({
|
|
38
|
+
...request,
|
|
39
|
+
account: this.client.wallet.account,
|
|
40
|
+
chain: this.client.wallet.chain
|
|
41
|
+
});
|
|
42
|
+
} catch (e) {
|
|
43
|
+
if (e instanceof _viem.BaseError) {
|
|
44
|
+
throw new EVMSendTransactionError(e.message, e, "send");
|
|
45
|
+
}
|
|
46
|
+
throw e;
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
const receipt = await this.client.public.waitForTransactionReceipt({
|
|
50
|
+
hash,
|
|
51
|
+
confirmations,
|
|
52
|
+
timeout: transactionConfirmationTimeout
|
|
53
|
+
});
|
|
54
|
+
return await this.handleReceipt(receipt, request);
|
|
55
|
+
} catch (e) {
|
|
56
|
+
if (e instanceof _viem.BaseError) {
|
|
57
|
+
throw new EVMSendTransactionError(e.message, e, "confirmation");
|
|
58
|
+
}
|
|
59
|
+
throw e;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
getConfig(config) {
|
|
63
|
+
return {
|
|
64
|
+
...this.defaultSendTransactionOptions,
|
|
65
|
+
...config
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
async handleReceipt(receipt, request) {
|
|
69
|
+
if (receipt.status === "reverted") {
|
|
70
|
+
await this.simulateCall(request, receipt.transactionHash, "execution");
|
|
71
|
+
throw new EVMSendTransactionExecutionRevertedError(
|
|
72
|
+
"Transaction reverted but unable to detect the reason",
|
|
73
|
+
new (0, _viem.ContractFunctionRevertedError)({ abi: request.abi, functionName: request.functionName }),
|
|
74
|
+
new (0, _viem.ContractFunctionRevertedError)({ abi: request.abi, functionName: request.functionName }),
|
|
75
|
+
receipt.transactionHash,
|
|
76
|
+
"execution"
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
return receipt.transactionHash;
|
|
80
|
+
}
|
|
81
|
+
async simulateCall(request, passthroughTxId, stage) {
|
|
82
|
+
try {
|
|
83
|
+
await this.client.public.simulateContract({
|
|
84
|
+
...request,
|
|
85
|
+
account: this.client.wallet.account.address,
|
|
86
|
+
chain: this.client.public.chain
|
|
87
|
+
});
|
|
88
|
+
} catch (e) {
|
|
89
|
+
if (e instanceof _viem.BaseError) {
|
|
90
|
+
const revertError = e.walk((err) => err instanceof _viem.ContractFunctionRevertedError);
|
|
91
|
+
if (revertError instanceof _viem.ContractFunctionRevertedError) {
|
|
92
|
+
throw new EVMSendTransactionExecutionRevertedError(
|
|
93
|
+
revertError.message,
|
|
94
|
+
e,
|
|
95
|
+
revertError,
|
|
96
|
+
passthroughTxId,
|
|
97
|
+
stage
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
throw new EVMSendTransactionError(e.message, e, stage);
|
|
101
|
+
}
|
|
102
|
+
throw e;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
exports.EVMSendTransactionError = EVMSendTransactionError; exports.EVMSendTransactionExecutionRevertedError = EVMSendTransactionExecutionRevertedError; exports.SendTransactionService = SendTransactionService;
|
|
112
|
+
//# sourceMappingURL=chunk-7KTQNIAZ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/blockchain/wallets/SendTransactionService.ts"],"names":[],"mappings":";AAGA;AAAA,EAGI;AAAA,EAEA;AAAA,OAKG;AAEP,SAAS,mBAAmB,uBAAuB;AAgB5C,IAAM,0BAAN,cAAsC,kBAAkB;AAAA,EAC3D,YACI,SACgB,WACA,OAChB,OAAO,gBAAgB,yBACzB;AACE,UAAM,SAAS,IAAI;AAJH;AACA;AAAA,EAIpB;AACJ;AAsBO,IAAM,2CAAN,cAAuD,wBAAwB;AAAA,EAClF,YACI,SACgB,WAChB,aACgB,MACA,OACA,OAAO,YAAY,MACnB,SAAS,YAAY,QACvC;AACE,UAAM,SAAS,WAAW,OAAO,gBAAgB,mCAAmC;AAPpE;AAEA;AACA;AACA;AACA;AAAA,EAGpB;AACJ;AAaO,IAAM,yBAAN,MAA6B;AAAA,EAChC,YACqB,QAIA,gCAAwD;AAAA,IACrE,eAAe;AAAA,IACf,gCAAgC;AAAA,EACpC,GACF;AARmB;AAIA;AAAA,EAIlB;AAAA,EAEH,MAAM,gBACF,SACA,SAA0C,CAAC,GAC/B;AACZ,UAAM,EAAE,eAAe,+BAA+B,IAAI,KAAK,UAAU,MAAM;AAE/E,UAAM,KAAK,aAAa,SAAS,QAAW,YAAY;AAExD,QAAI;AACJ,QAAI;AACA,aAAO,MAAM,KAAK,OAAO,OAAO,cAAc;AAAA,QAC1C,GAAG;AAAA,QACH,SAAS,KAAK,OAAO,OAAO;AAAA,QAC5B,OAAO,KAAK,OAAO,OAAO;AAAA,MAC9B,CAAC;AAAA,IACL,SAAS,GAAG;AACR,UAAI,aAAa,WAAW;AACxB,cAAM,IAAI,wBAAwB,EAAE,SAAS,GAAG,MAAM;AAAA,MAC1D;AACA,YAAM;AAAA,IACV;AAEA,QAAI;AACA,YAAM,UAAU,MAAM,KAAK,OAAO,OAAO,0BAA0B;AAAA,QAC/D;AAAA,QACA;AAAA,QACA,SAAS;AAAA,MACb,CAAC;AACD,aAAO,MAAM,KAAK,cAAc,SAAS,OAAO;AAAA,IACpD,SAAS,GAAG;AACR,UAAI,aAAa,WAAW;AACxB,cAAM,IAAI,wBAAwB,EAAE,SAAS,GAAG,cAAc;AAAA,MAClE;AACA,YAAM;AAAA,IACV;AAAA,EACJ;AAAA,EAEQ,UAAU,QAAiE;AAC/E,WAAO;AAAA,MACH,GAAG,KAAK;AAAA,MACR,GAAG;AAAA,IACP;AAAA,EACJ;AAAA,EAEA,MAAc,cAAc,SAA6B,SAA+C;AACpG,QAAI,QAAQ,WAAW,YAAY;AAE/B,YAAM,KAAK,aAAa,SAAS,QAAQ,iBAAiB,WAAW;AAErE,YAAM,IAAI;AAAA,QACN;AAAA,QACA,IAAI,8BAA8B,EAAE,KAAK,QAAQ,KAAY,cAAc,QAAQ,aAAa,CAAC;AAAA,QACjG,IAAI,8BAA8B,EAAE,KAAK,QAAQ,KAAY,cAAc,QAAQ,aAAa,CAAC;AAAA,QACjG,QAAQ;AAAA,QACR;AAAA,MACJ;AAAA,IACJ;AACA,WAAO,QAAQ;AAAA,EACnB;AAAA,EAEA,MAAc,aACV,SACA,iBACA,OACF;AACE,QAAI;AACA,YAAM,KAAK,OAAO,OAAO,iBAAiB;AAAA,QACtC,GAAG;AAAA,QACH,SAAS,KAAK,OAAO,OAAO,QAAQ;AAAA,QACpC,OAAO,KAAK,OAAO,OAAO;AAAA,MAC9B,CAAC;AAAA,IACL,SAAS,GAAG;AACR,UAAI,aAAa,WAAW;AACxB,cAAM,cAAc,EAAE,KAAK,CAAC,QAAQ,eAAe,6BAA6B;AAChF,YAAI,uBAAuB,+BAA+B;AACtD,gBAAM,IAAI;AAAA,YACN,YAAY;AAAA,YACZ;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ;AAAA,QACJ;AACA,cAAM,IAAI,wBAAwB,EAAE,SAAS,GAAG,KAAK;AAAA,MACzD;AACA,YAAM;AAAA,IACV;AAAA,EACJ;AACJ","sourcesContent":["import type { SmartAccountClient } from \"permissionless\";\nimport type { EntryPoint } from \"permissionless/_types/types\";\nimport type { SmartAccount } from \"permissionless/accounts\";\nimport {\n type Abi,\n type Address,\n BaseError,\n type Chain,\n ContractFunctionRevertedError,\n type Hex,\n type PublicClient,\n type TransactionReceipt,\n type Transport,\n} from \"viem\";\n\nimport { CrossmintSDKError, WalletErrorCode } from \"@crossmint/client-sdk-base\";\n\nexport type TransactionServiceTransactionRequest = {\n address: Address;\n abi: Abi;\n functionName: string;\n args: any;\n value?: bigint;\n};\n\nexport type SendTransactionFailureStage = \"simulation\" | \"send\" | \"confirmation\" | \"execution\";\n\n/**\n * Error thrown when a transaction fails to send.\n * @param viemError The error thrown by the viem client. See https://viem.sh/docs/glossary/errors.html\n */\nexport class EVMSendTransactionError extends CrossmintSDKError {\n constructor(\n message: string,\n public readonly viemError: BaseError,\n public readonly stage: SendTransactionFailureStage,\n code = WalletErrorCode.SEND_TRANSACTION_FAILED\n ) {\n super(message, code);\n }\n}\n\n/**\n * Error thrown when a transaction fails due to a contract execution error.\n * @param viemError The error thrown by the viem client. See https://viem.sh/docs/glossary/errors.html\n * @param data The name and arguments of the revert error from the provided ABI\n * @param reason The revert error if it is a string and not an ABI error\n * @example\n * try {\n * await wallet.executeContract({\n * address: contractAddress,\n * abi,\n * functionName: \"mintNFT\",\n * args: [recipientAddress],\n * });\n * } catch (e) {\n * if (e instanceof SendTransactionExecutionRevertedError) {\n * alert(`Transaction reverted: ${e.message}`);\n * }\n * throw e;\n * }\n */\nexport class EVMSendTransactionExecutionRevertedError extends EVMSendTransactionError {\n constructor(\n message: string,\n public readonly viemError: BaseError,\n revertError: ContractFunctionRevertedError,\n public readonly txId: string | undefined,\n public readonly stage: SendTransactionFailureStage,\n public readonly data = revertError.data,\n public readonly reason = revertError.reason\n ) {\n super(message, viemError, stage, WalletErrorCode.SEND_TRANSACTION_EXECUTION_REVERTED);\n }\n}\n\nexport interface SendTransactionOptions {\n /**\n * The number of confirmations to wait for before yielding the transaction hash.\n */\n confirmations: number;\n /**\n * The timeout in milliseconds to wait for a transaction to confirm before throwing an error.\n */\n transactionConfirmationTimeout: number;\n}\n\nexport class SendTransactionService {\n constructor(\n private readonly client: {\n public: PublicClient;\n wallet: SmartAccountClient<EntryPoint, Transport, Chain, SmartAccount<EntryPoint>>;\n },\n private readonly defaultSendTransactionOptions: SendTransactionOptions = {\n confirmations: 2,\n transactionConfirmationTimeout: 30_000,\n }\n ) {}\n\n async sendTransaction(\n request: TransactionServiceTransactionRequest,\n config: Partial<SendTransactionOptions> = {}\n ): Promise<Hex> {\n const { confirmations, transactionConfirmationTimeout } = this.getConfig(config);\n\n await this.simulateCall(request, undefined, \"simulation\");\n\n let hash;\n try {\n hash = await this.client.wallet.writeContract({\n ...request,\n account: this.client.wallet.account,\n chain: this.client.wallet.chain,\n });\n } catch (e) {\n if (e instanceof BaseError) {\n throw new EVMSendTransactionError(e.message, e, \"send\");\n }\n throw e;\n }\n\n try {\n const receipt = await this.client.public.waitForTransactionReceipt({\n hash,\n confirmations,\n timeout: transactionConfirmationTimeout,\n });\n return await this.handleReceipt(receipt, request);\n } catch (e) {\n if (e instanceof BaseError) {\n throw new EVMSendTransactionError(e.message, e, \"confirmation\");\n }\n throw e;\n }\n }\n\n private getConfig(config: Partial<SendTransactionOptions>): SendTransactionOptions {\n return {\n ...this.defaultSendTransactionOptions,\n ...config,\n };\n }\n\n private async handleReceipt(receipt: TransactionReceipt, request: TransactionServiceTransactionRequest) {\n if (receipt.status === \"reverted\") {\n // This should revert and throw the full reason\n await this.simulateCall(request, receipt.transactionHash, \"execution\");\n // Otherwise, throw a generic error (this should practically never happen)\n throw new EVMSendTransactionExecutionRevertedError(\n \"Transaction reverted but unable to detect the reason\",\n new ContractFunctionRevertedError({ abi: request.abi as Abi, functionName: request.functionName }),\n new ContractFunctionRevertedError({ abi: request.abi as Abi, functionName: request.functionName }),\n receipt.transactionHash,\n \"execution\"\n );\n }\n return receipt.transactionHash;\n }\n\n private async simulateCall(\n request: TransactionServiceTransactionRequest,\n passthroughTxId: string | undefined,\n stage: SendTransactionFailureStage\n ) {\n try {\n await this.client.public.simulateContract({\n ...request,\n account: this.client.wallet.account.address,\n chain: this.client.public.chain,\n });\n } catch (e) {\n if (e instanceof BaseError) {\n const revertError = e.walk((err) => err instanceof ContractFunctionRevertedError);\n if (revertError instanceof ContractFunctionRevertedError) {\n throw new EVMSendTransactionExecutionRevertedError(\n revertError.message,\n e,\n revertError,\n passthroughTxId,\n stage\n );\n }\n throw new EVMSendTransactionError(e.message, e, stage);\n }\n throw e;\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// src/error/index.ts
|
|
2
|
+
import { CrossmintSDKError, SmartWalletErrorCode } from "@crossmint/client-sdk-base";
|
|
3
|
+
var SmartWalletError = class extends CrossmintSDKError {
|
|
4
|
+
constructor(message, details, code = SmartWalletErrorCode.UNCATEGORIZED) {
|
|
5
|
+
super(message, code, details);
|
|
6
|
+
}
|
|
7
|
+
};
|
|
8
|
+
var AdminMismatchError = class extends SmartWalletError {
|
|
9
|
+
constructor(message, required, used) {
|
|
10
|
+
super(message, SmartWalletErrorCode.ADMIN_MISMATCH);
|
|
11
|
+
this.required = required;
|
|
12
|
+
this.used = used;
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
var PasskeyMismatchError = class extends SmartWalletError {
|
|
16
|
+
constructor(message, required, used) {
|
|
17
|
+
super(message, SmartWalletErrorCode.PASSKEY_MISMATCH);
|
|
18
|
+
this.required = required;
|
|
19
|
+
this.used = used;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
var UserWalletAlreadyCreatedError = class extends SmartWalletError {
|
|
23
|
+
constructor(userId) {
|
|
24
|
+
super(`The user with userId ${userId.toString()} already has a wallet created for this project`);
|
|
25
|
+
this.code = SmartWalletErrorCode.USER_WALLET_ALREADY_CREATED;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
var PasskeyPromptError = class extends SmartWalletError {
|
|
29
|
+
constructor(passkeyName) {
|
|
30
|
+
super(
|
|
31
|
+
`Prompt was either cancelled or timed out for passkey ${passkeyName}`,
|
|
32
|
+
void 0,
|
|
33
|
+
SmartWalletErrorCode.PASSKEY_PROMPT
|
|
34
|
+
);
|
|
35
|
+
this.passkeyName = passkeyName;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var PasskeyRegistrationError = class extends SmartWalletError {
|
|
39
|
+
constructor(passkeyName) {
|
|
40
|
+
super(
|
|
41
|
+
`Registration for passkey ${passkeyName} failed, either the registration took too long, or passkey signature vaildation failed.`,
|
|
42
|
+
void 0,
|
|
43
|
+
SmartWalletErrorCode.PASSKEY_REGISTRATION
|
|
44
|
+
);
|
|
45
|
+
this.passkeyName = passkeyName;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
var PasskeyIncompatibleAuthenticatorError = class extends SmartWalletError {
|
|
49
|
+
constructor(passkeyName) {
|
|
50
|
+
super(
|
|
51
|
+
`User selected authenticator for passkey ${passkeyName} is not compatible with Crossmint's Smart Wallets.`,
|
|
52
|
+
void 0,
|
|
53
|
+
SmartWalletErrorCode.PASSKEY_INCOMPATIBLE_AUTHENTICATOR
|
|
54
|
+
);
|
|
55
|
+
this.passkeyName = passkeyName;
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
var ConfigError = class extends SmartWalletError {
|
|
59
|
+
constructor(message) {
|
|
60
|
+
super(message, void 0, SmartWalletErrorCode.WALLET_CONFIG);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
var AdminAlreadyUsedError = class extends ConfigError {
|
|
64
|
+
constructor() {
|
|
65
|
+
super("This signer was already used to create another wallet. Please use a different signer.");
|
|
66
|
+
this.code = SmartWalletErrorCode.ADMIN_SIGNER_ALREADY_USED;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
var SmartWalletsNotEnabledError = class extends ConfigError {
|
|
70
|
+
constructor() {
|
|
71
|
+
super(
|
|
72
|
+
"Smart wallets are not enabled for this project. They can be enabled on the project settings page in the developer console."
|
|
73
|
+
);
|
|
74
|
+
this.code = SmartWalletErrorCode.SMART_WALLETS_NOT_ENABLED;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
export {
|
|
79
|
+
SmartWalletError,
|
|
80
|
+
AdminMismatchError,
|
|
81
|
+
PasskeyMismatchError,
|
|
82
|
+
UserWalletAlreadyCreatedError,
|
|
83
|
+
PasskeyPromptError,
|
|
84
|
+
PasskeyRegistrationError,
|
|
85
|
+
PasskeyIncompatibleAuthenticatorError,
|
|
86
|
+
ConfigError,
|
|
87
|
+
AdminAlreadyUsedError,
|
|
88
|
+
SmartWalletsNotEnabledError
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=chunk-ASIPMVRQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/error/index.ts"],"sourcesContent":["import { CrossmintSDKError, SmartWalletErrorCode } from \"@crossmint/client-sdk-base\";\n\nimport type { PasskeyDisplay, SignerDisplay } from \"../types/service\";\n\nexport class SmartWalletError extends CrossmintSDKError {\n constructor(message: string, details?: string, code: SmartWalletErrorCode = SmartWalletErrorCode.UNCATEGORIZED) {\n super(message, code, details);\n }\n}\n\nexport class AdminMismatchError extends SmartWalletError {\n public readonly required: SignerDisplay;\n public readonly used?: SignerDisplay;\n\n constructor(message: string, required: SignerDisplay, used?: SignerDisplay) {\n super(message, SmartWalletErrorCode.ADMIN_MISMATCH);\n this.required = required;\n this.used = used;\n }\n}\n\nexport class PasskeyMismatchError extends SmartWalletError {\n public readonly required: PasskeyDisplay;\n public readonly used?: PasskeyDisplay;\n\n constructor(message: string, required: PasskeyDisplay, used?: PasskeyDisplay) {\n super(message, SmartWalletErrorCode.PASSKEY_MISMATCH);\n this.required = required;\n this.used = used;\n }\n}\n\nexport class UserWalletAlreadyCreatedError extends SmartWalletError {\n public readonly code = SmartWalletErrorCode.USER_WALLET_ALREADY_CREATED;\n\n constructor(userId: string) {\n super(`The user with userId ${userId.toString()} already has a wallet created for this project`);\n }\n}\n\nexport class PasskeyPromptError extends SmartWalletError {\n public passkeyName: string;\n\n constructor(passkeyName: string) {\n super(\n `Prompt was either cancelled or timed out for passkey ${passkeyName}`,\n undefined,\n SmartWalletErrorCode.PASSKEY_PROMPT\n );\n this.passkeyName = passkeyName;\n }\n}\n\nexport class PasskeyRegistrationError extends SmartWalletError {\n public passkeyName: string;\n\n constructor(passkeyName: string) {\n super(\n `Registration for passkey ${passkeyName} failed, either the registration took too long, or passkey signature vaildation failed.`,\n undefined,\n SmartWalletErrorCode.PASSKEY_REGISTRATION\n );\n this.passkeyName = passkeyName;\n }\n}\n\nexport class PasskeyIncompatibleAuthenticatorError extends SmartWalletError {\n public passkeyName: string;\n\n constructor(passkeyName: string) {\n super(\n `User selected authenticator for passkey ${passkeyName} is not compatible with Crossmint's Smart Wallets.`,\n undefined,\n SmartWalletErrorCode.PASSKEY_INCOMPATIBLE_AUTHENTICATOR\n );\n this.passkeyName = passkeyName;\n }\n}\n\nexport class ConfigError extends SmartWalletError {\n constructor(message: string) {\n super(message, undefined, SmartWalletErrorCode.WALLET_CONFIG);\n }\n}\n\nexport class AdminAlreadyUsedError extends ConfigError {\n public readonly code = SmartWalletErrorCode.ADMIN_SIGNER_ALREADY_USED;\n constructor() {\n super(\"This signer was already used to create another wallet. Please use a different signer.\");\n }\n}\n\nexport class SmartWalletsNotEnabledError extends ConfigError {\n public readonly code = SmartWalletErrorCode.SMART_WALLETS_NOT_ENABLED;\n constructor() {\n super(\n \"Smart wallets are not enabled for this project. They can be enabled on the project settings page in the developer console.\"\n );\n }\n}\n"],"mappings":";AAAA,SAAS,mBAAmB,4BAA4B;AAIjD,IAAM,mBAAN,cAA+B,kBAAkB;AAAA,EACpD,YAAY,SAAiB,SAAkB,OAA6B,qBAAqB,eAAe;AAC5G,UAAM,SAAS,MAAM,OAAO;AAAA,EAChC;AACJ;AAEO,IAAM,qBAAN,cAAiC,iBAAiB;AAAA,EAIrD,YAAY,SAAiB,UAAyB,MAAsB;AACxE,UAAM,SAAS,qBAAqB,cAAc;AAClD,SAAK,WAAW;AAChB,SAAK,OAAO;AAAA,EAChB;AACJ;AAEO,IAAM,uBAAN,cAAmC,iBAAiB;AAAA,EAIvD,YAAY,SAAiB,UAA0B,MAAuB;AAC1E,UAAM,SAAS,qBAAqB,gBAAgB;AACpD,SAAK,WAAW;AAChB,SAAK,OAAO;AAAA,EAChB;AACJ;AAEO,IAAM,gCAAN,cAA4C,iBAAiB;AAAA,EAGhE,YAAY,QAAgB;AACxB,UAAM,wBAAwB,OAAO,SAAS,CAAC,gDAAgD;AAHnG,SAAgB,OAAO,qBAAqB;AAAA,EAI5C;AACJ;AAEO,IAAM,qBAAN,cAAiC,iBAAiB;AAAA,EAGrD,YAAY,aAAqB;AAC7B;AAAA,MACI,wDAAwD,WAAW;AAAA,MACnE;AAAA,MACA,qBAAqB;AAAA,IACzB;AACA,SAAK,cAAc;AAAA,EACvB;AACJ;AAEO,IAAM,2BAAN,cAAuC,iBAAiB;AAAA,EAG3D,YAAY,aAAqB;AAC7B;AAAA,MACI,4BAA4B,WAAW;AAAA,MACvC;AAAA,MACA,qBAAqB;AAAA,IACzB;AACA,SAAK,cAAc;AAAA,EACvB;AACJ;AAEO,IAAM,wCAAN,cAAoD,iBAAiB;AAAA,EAGxE,YAAY,aAAqB;AAC7B;AAAA,MACI,2CAA2C,WAAW;AAAA,MACtD;AAAA,MACA,qBAAqB;AAAA,IACzB;AACA,SAAK,cAAc;AAAA,EACvB;AACJ;AAEO,IAAM,cAAN,cAA0B,iBAAiB;AAAA,EAC9C,YAAY,SAAiB;AACzB,UAAM,SAAS,QAAW,qBAAqB,aAAa;AAAA,EAChE;AACJ;AAEO,IAAM,wBAAN,cAAoC,YAAY;AAAA,EAEnD,cAAc;AACV,UAAM,uFAAuF;AAFjG,SAAgB,OAAO,qBAAqB;AAAA,EAG5C;AACJ;AAEO,IAAM,8BAAN,cAA0C,YAAY;AAAA,EAEzD,cAAc;AACV;AAAA,MACI;AAAA,IACJ;AAJJ,SAAgB,OAAO,qBAAqB;AAAA,EAK5C;AACJ;","names":[]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// src/blockchain/rpc.ts
|
|
2
|
+
import { blockchainToChainId } from "@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/${blockchainToChainId(chain)}/rpc?apikey=${PIMLICO_API_KEY}`;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export {
|
|
23
|
+
ALCHEMY_RPC_SUBDOMAIN,
|
|
24
|
+
getAlchemyRPC,
|
|
25
|
+
getPimlicoBundlerRPC
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=chunk-BARW756O.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/blockchain/rpc.ts"],"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"],"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;","names":[]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isEOACreationContext,
|
|
3
|
+
isPasskeyCreationContext,
|
|
4
|
+
isPasskeyWalletParams
|
|
5
|
+
} from "./chunk-7AT3QDQV.js";
|
|
6
|
+
import {
|
|
7
|
+
AdminMismatchError,
|
|
8
|
+
ConfigError
|
|
9
|
+
} from "./chunk-ASIPMVRQ.js";
|
|
10
|
+
|
|
11
|
+
// src/blockchain/wallets/account/creator.ts
|
|
12
|
+
var AccountCreator = class {
|
|
13
|
+
constructor(eoaStrategy, passkeyStrategy) {
|
|
14
|
+
this.eoaStrategy = eoaStrategy;
|
|
15
|
+
this.passkeyStrategy = passkeyStrategy;
|
|
16
|
+
}
|
|
17
|
+
get(context) {
|
|
18
|
+
if (isPasskeyCreationContext(context)) {
|
|
19
|
+
return this.passkeyStrategy.create(context);
|
|
20
|
+
}
|
|
21
|
+
if (isEOACreationContext(context)) {
|
|
22
|
+
return this.eoaStrategy.create(context);
|
|
23
|
+
}
|
|
24
|
+
if (context.existing == null) {
|
|
25
|
+
throw new ConfigError(`Unsupported wallet params:
|
|
26
|
+
${context.walletParams}`);
|
|
27
|
+
}
|
|
28
|
+
const display = context.existing.signerConfig.display();
|
|
29
|
+
const inputSignerType = isPasskeyWalletParams(context.walletParams) ? "passkey" : "eoa";
|
|
30
|
+
throw new AdminMismatchError(
|
|
31
|
+
`Cannot create wallet with ${inputSignerType} signer for user ${context.user.id}', they already have a wallet with signer:
|
|
32
|
+
'${JSON.stringify(display, null, 2)}'`,
|
|
33
|
+
display
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export {
|
|
39
|
+
AccountCreator
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=chunk-BSFIJZ5X.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/blockchain/wallets/account/creator.ts"],"sourcesContent":["import { AdminMismatchError, ConfigError } from \"../../../error\";\nimport {\n type AccountAndSigner,\n type WalletCreationContext,\n isEOACreationContext,\n isPasskeyCreationContext,\n isPasskeyWalletParams,\n} from \"../../../types/internal\";\nimport type { EOACreationStrategy } from \"./eoa\";\nimport type { PasskeyCreationStrategy } from \"./passkey\";\n\nexport class AccountCreator {\n constructor(\n private readonly eoaStrategy: EOACreationStrategy,\n private readonly passkeyStrategy: PasskeyCreationStrategy\n ) {}\n\n public get(context: WalletCreationContext): Promise<AccountAndSigner> {\n if (isPasskeyCreationContext(context)) {\n return this.passkeyStrategy.create(context);\n }\n\n if (isEOACreationContext(context)) {\n return this.eoaStrategy.create(context);\n }\n\n if (context.existing == null) {\n throw new ConfigError(`Unsupported wallet params:\\n${context.walletParams}`);\n }\n\n const display = context.existing.signerConfig.display();\n const inputSignerType = isPasskeyWalletParams(context.walletParams) ? \"passkey\" : \"eoa\";\n throw new AdminMismatchError(\n `Cannot create wallet with ${inputSignerType} signer for user ${\n context.user.id\n }', they already have a wallet with signer:\\n'${JSON.stringify(display, null, 2)}'`,\n display\n );\n }\n}\n"],"mappings":";;;;;;;;;;;AAWO,IAAM,iBAAN,MAAqB;AAAA,EACxB,YACqB,aACA,iBACnB;AAFmB;AACA;AAAA,EAClB;AAAA,EAEI,IAAI,SAA2D;AAClE,QAAI,yBAAyB,OAAO,GAAG;AACnC,aAAO,KAAK,gBAAgB,OAAO,OAAO;AAAA,IAC9C;AAEA,QAAI,qBAAqB,OAAO,GAAG;AAC/B,aAAO,KAAK,YAAY,OAAO,OAAO;AAAA,IAC1C;AAEA,QAAI,QAAQ,YAAY,MAAM;AAC1B,YAAM,IAAI,YAAY;AAAA,EAA+B,QAAQ,YAAY,EAAE;AAAA,IAC/E;AAEA,UAAM,UAAU,QAAQ,SAAS,aAAa,QAAQ;AACtD,UAAM,kBAAkB,sBAAsB,QAAQ,YAAY,IAAI,YAAY;AAClF,UAAM,IAAI;AAAA,MACN,6BAA6B,eAAe,oBACxC,QAAQ,KAAK,EACjB;AAAA,GAAgD,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAAA,MAChF;AAAA,IACJ;AAAA,EACJ;AACJ;","names":[]}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/error/index.ts
|
|
2
|
+
var _clientsdkbase = require('@crossmint/client-sdk-base');
|
|
3
|
+
var SmartWalletError = class extends _clientsdkbase.CrossmintSDKError {
|
|
4
|
+
constructor(message, details, code = _clientsdkbase.SmartWalletErrorCode.UNCATEGORIZED) {
|
|
5
|
+
super(message, code, details);
|
|
6
|
+
}
|
|
7
|
+
};
|
|
8
|
+
var AdminMismatchError = class extends SmartWalletError {
|
|
9
|
+
constructor(message, required, used) {
|
|
10
|
+
super(message, _clientsdkbase.SmartWalletErrorCode.ADMIN_MISMATCH);
|
|
11
|
+
this.required = required;
|
|
12
|
+
this.used = used;
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
var PasskeyMismatchError = class extends SmartWalletError {
|
|
16
|
+
constructor(message, required, used) {
|
|
17
|
+
super(message, _clientsdkbase.SmartWalletErrorCode.PASSKEY_MISMATCH);
|
|
18
|
+
this.required = required;
|
|
19
|
+
this.used = used;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
var UserWalletAlreadyCreatedError = class extends SmartWalletError {
|
|
23
|
+
constructor(userId) {
|
|
24
|
+
super(`The user with userId ${userId.toString()} already has a wallet created for this project`);
|
|
25
|
+
this.code = _clientsdkbase.SmartWalletErrorCode.USER_WALLET_ALREADY_CREATED;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
var PasskeyPromptError = class extends SmartWalletError {
|
|
29
|
+
constructor(passkeyName) {
|
|
30
|
+
super(
|
|
31
|
+
`Prompt was either cancelled or timed out for passkey ${passkeyName}`,
|
|
32
|
+
void 0,
|
|
33
|
+
_clientsdkbase.SmartWalletErrorCode.PASSKEY_PROMPT
|
|
34
|
+
);
|
|
35
|
+
this.passkeyName = passkeyName;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var PasskeyRegistrationError = class extends SmartWalletError {
|
|
39
|
+
constructor(passkeyName) {
|
|
40
|
+
super(
|
|
41
|
+
`Registration for passkey ${passkeyName} failed, either the registration took too long, or passkey signature vaildation failed.`,
|
|
42
|
+
void 0,
|
|
43
|
+
_clientsdkbase.SmartWalletErrorCode.PASSKEY_REGISTRATION
|
|
44
|
+
);
|
|
45
|
+
this.passkeyName = passkeyName;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
var PasskeyIncompatibleAuthenticatorError = class extends SmartWalletError {
|
|
49
|
+
constructor(passkeyName) {
|
|
50
|
+
super(
|
|
51
|
+
`User selected authenticator for passkey ${passkeyName} is not compatible with Crossmint's Smart Wallets.`,
|
|
52
|
+
void 0,
|
|
53
|
+
_clientsdkbase.SmartWalletErrorCode.PASSKEY_INCOMPATIBLE_AUTHENTICATOR
|
|
54
|
+
);
|
|
55
|
+
this.passkeyName = passkeyName;
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
var ConfigError = class extends SmartWalletError {
|
|
59
|
+
constructor(message) {
|
|
60
|
+
super(message, void 0, _clientsdkbase.SmartWalletErrorCode.WALLET_CONFIG);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
var AdminAlreadyUsedError = class extends ConfigError {
|
|
64
|
+
constructor() {
|
|
65
|
+
super("This signer was already used to create another wallet. Please use a different signer.");
|
|
66
|
+
this.code = _clientsdkbase.SmartWalletErrorCode.ADMIN_SIGNER_ALREADY_USED;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
var SmartWalletsNotEnabledError = class extends ConfigError {
|
|
70
|
+
constructor() {
|
|
71
|
+
super(
|
|
72
|
+
"Smart wallets are not enabled for this project. They can be enabled on the project settings page in the developer console."
|
|
73
|
+
);
|
|
74
|
+
this.code = _clientsdkbase.SmartWalletErrorCode.SMART_WALLETS_NOT_ENABLED;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
exports.SmartWalletError = SmartWalletError; exports.AdminMismatchError = AdminMismatchError; exports.PasskeyMismatchError = PasskeyMismatchError; exports.UserWalletAlreadyCreatedError = UserWalletAlreadyCreatedError; exports.PasskeyPromptError = PasskeyPromptError; exports.PasskeyRegistrationError = PasskeyRegistrationError; exports.PasskeyIncompatibleAuthenticatorError = PasskeyIncompatibleAuthenticatorError; exports.ConfigError = ConfigError; exports.AdminAlreadyUsedError = AdminAlreadyUsedError; exports.SmartWalletsNotEnabledError = SmartWalletsNotEnabledError;
|
|
90
|
+
//# sourceMappingURL=chunk-BXSAJOIV.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/error/index.ts"],"names":[],"mappings":";AAAA,SAAS,mBAAmB,4BAA4B;AAIjD,IAAM,mBAAN,cAA+B,kBAAkB;AAAA,EACpD,YAAY,SAAiB,SAAkB,OAA6B,qBAAqB,eAAe;AAC5G,UAAM,SAAS,MAAM,OAAO;AAAA,EAChC;AACJ;AAEO,IAAM,qBAAN,cAAiC,iBAAiB;AAAA,EAIrD,YAAY,SAAiB,UAAyB,MAAsB;AACxE,UAAM,SAAS,qBAAqB,cAAc;AAClD,SAAK,WAAW;AAChB,SAAK,OAAO;AAAA,EAChB;AACJ;AAEO,IAAM,uBAAN,cAAmC,iBAAiB;AAAA,EAIvD,YAAY,SAAiB,UAA0B,MAAuB;AAC1E,UAAM,SAAS,qBAAqB,gBAAgB;AACpD,SAAK,WAAW;AAChB,SAAK,OAAO;AAAA,EAChB;AACJ;AAEO,IAAM,gCAAN,cAA4C,iBAAiB;AAAA,EAGhE,YAAY,QAAgB;AACxB,UAAM,wBAAwB,OAAO,SAAS,CAAC,gDAAgD;AAHnG,SAAgB,OAAO,qBAAqB;AAAA,EAI5C;AACJ;AAEO,IAAM,qBAAN,cAAiC,iBAAiB;AAAA,EAGrD,YAAY,aAAqB;AAC7B;AAAA,MACI,wDAAwD,WAAW;AAAA,MACnE;AAAA,MACA,qBAAqB;AAAA,IACzB;AACA,SAAK,cAAc;AAAA,EACvB;AACJ;AAEO,IAAM,2BAAN,cAAuC,iBAAiB;AAAA,EAG3D,YAAY,aAAqB;AAC7B;AAAA,MACI,4BAA4B,WAAW;AAAA,MACvC;AAAA,MACA,qBAAqB;AAAA,IACzB;AACA,SAAK,cAAc;AAAA,EACvB;AACJ;AAEO,IAAM,wCAAN,cAAoD,iBAAiB;AAAA,EAGxE,YAAY,aAAqB;AAC7B;AAAA,MACI,2CAA2C,WAAW;AAAA,MACtD;AAAA,MACA,qBAAqB;AAAA,IACzB;AACA,SAAK,cAAc;AAAA,EACvB;AACJ;AAEO,IAAM,cAAN,cAA0B,iBAAiB;AAAA,EAC9C,YAAY,SAAiB;AACzB,UAAM,SAAS,QAAW,qBAAqB,aAAa;AAAA,EAChE;AACJ;AAEO,IAAM,wBAAN,cAAoC,YAAY;AAAA,EAEnD,cAAc;AACV,UAAM,uFAAuF;AAFjG,SAAgB,OAAO,qBAAqB;AAAA,EAG5C;AACJ;AAEO,IAAM,8BAAN,cAA0C,YAAY;AAAA,EAEzD,cAAc;AACV;AAAA,MACI;AAAA,IACJ;AAJJ,SAAgB,OAAO,qBAAqB;AAAA,EAK5C;AACJ","sourcesContent":["import { CrossmintSDKError, SmartWalletErrorCode } from \"@crossmint/client-sdk-base\";\n\nimport type { PasskeyDisplay, SignerDisplay } from \"../types/service\";\n\nexport class SmartWalletError extends CrossmintSDKError {\n constructor(message: string, details?: string, code: SmartWalletErrorCode = SmartWalletErrorCode.UNCATEGORIZED) {\n super(message, code, details);\n }\n}\n\nexport class AdminMismatchError extends SmartWalletError {\n public readonly required: SignerDisplay;\n public readonly used?: SignerDisplay;\n\n constructor(message: string, required: SignerDisplay, used?: SignerDisplay) {\n super(message, SmartWalletErrorCode.ADMIN_MISMATCH);\n this.required = required;\n this.used = used;\n }\n}\n\nexport class PasskeyMismatchError extends SmartWalletError {\n public readonly required: PasskeyDisplay;\n public readonly used?: PasskeyDisplay;\n\n constructor(message: string, required: PasskeyDisplay, used?: PasskeyDisplay) {\n super(message, SmartWalletErrorCode.PASSKEY_MISMATCH);\n this.required = required;\n this.used = used;\n }\n}\n\nexport class UserWalletAlreadyCreatedError extends SmartWalletError {\n public readonly code = SmartWalletErrorCode.USER_WALLET_ALREADY_CREATED;\n\n constructor(userId: string) {\n super(`The user with userId ${userId.toString()} already has a wallet created for this project`);\n }\n}\n\nexport class PasskeyPromptError extends SmartWalletError {\n public passkeyName: string;\n\n constructor(passkeyName: string) {\n super(\n `Prompt was either cancelled or timed out for passkey ${passkeyName}`,\n undefined,\n SmartWalletErrorCode.PASSKEY_PROMPT\n );\n this.passkeyName = passkeyName;\n }\n}\n\nexport class PasskeyRegistrationError extends SmartWalletError {\n public passkeyName: string;\n\n constructor(passkeyName: string) {\n super(\n `Registration for passkey ${passkeyName} failed, either the registration took too long, or passkey signature vaildation failed.`,\n undefined,\n SmartWalletErrorCode.PASSKEY_REGISTRATION\n );\n this.passkeyName = passkeyName;\n }\n}\n\nexport class PasskeyIncompatibleAuthenticatorError extends SmartWalletError {\n public passkeyName: string;\n\n constructor(passkeyName: string) {\n super(\n `User selected authenticator for passkey ${passkeyName} is not compatible with Crossmint's Smart Wallets.`,\n undefined,\n SmartWalletErrorCode.PASSKEY_INCOMPATIBLE_AUTHENTICATOR\n );\n this.passkeyName = passkeyName;\n }\n}\n\nexport class ConfigError extends SmartWalletError {\n constructor(message: string) {\n super(message, undefined, SmartWalletErrorCode.WALLET_CONFIG);\n }\n}\n\nexport class AdminAlreadyUsedError extends ConfigError {\n public readonly code = SmartWalletErrorCode.ADMIN_SIGNER_ALREADY_USED;\n constructor() {\n super(\"This signer was already used to create another wallet. Please use a different signer.\");\n }\n}\n\nexport class SmartWalletsNotEnabledError extends ConfigError {\n public readonly code = SmartWalletErrorCode.SMART_WALLETS_NOT_ENABLED;\n constructor() {\n super(\n \"Smart wallets are not enabled for this project. They can be enabled on the project settings page in the developer console.\"\n );\n }\n}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
var _chunkTUVECZA7cjs = require('./chunk-TUVECZA7.cjs');
|
|
4
|
+
|
|
5
|
+
// src/services/logger.ts
|
|
6
|
+
var _clientsdkbase = require('@crossmint/client-sdk-base');
|
|
7
|
+
var scwLogger = new (0, _clientsdkbase.SDKLogger)(_chunkTUVECZA7cjs.SCW_SERVICE);
|
|
8
|
+
var scwDatadogLogger = new (0, _clientsdkbase.SDKLogger)(_chunkTUVECZA7cjs.SCW_SERVICE, _clientsdkbase.getBrowserLogger.call(void 0, _chunkTUVECZA7cjs.SCW_SERVICE, { onlyDatadog: true }));
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
exports.scwLogger = scwLogger; exports.scwDatadogLogger = scwDatadogLogger;
|
|
14
|
+
//# sourceMappingURL=chunk-C5ZRYSCP.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/services/logger.ts"],"names":[],"mappings":";;;;;AAAA,SAAS,WAAW,wBAAwB;AAIrC,IAAM,YAAY,IAAI,UAAU,WAAW;AAC3C,IAAM,mBAAmB,IAAI,UAAU,aAAa,iBAAiB,aAAa,EAAE,aAAa,KAAK,CAAC,CAAC","sourcesContent":["import { SDKLogger, getBrowserLogger } from \"@crossmint/client-sdk-base\";\n\nimport { SCW_SERVICE } from \"../utils/constants\";\n\nexport const scwLogger = new SDKLogger(SCW_SERVICE);\nexport const scwDatadogLogger = new SDKLogger(SCW_SERVICE, getBrowserLogger(SCW_SERVICE, { onlyDatadog: true }));\n"]}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
|
+
|
|
3
|
+
var _chunkZOXKITU4cjs = require('./chunk-ZOXKITU4.cjs');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunk5MG5CIEXcjs = require('./chunk-5MG5CIEX.cjs');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
var _chunkYWCXHOSDcjs = require('./chunk-YWCXHOSD.cjs');
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
var _chunkBXSAJOIVcjs = require('./chunk-BXSAJOIV.cjs');
|
|
13
|
+
|
|
14
|
+
// src/blockchain/wallets/account/eoa.ts
|
|
15
|
+
var _ecdsavalidator = require('@zerodev/ecdsa-validator');
|
|
16
|
+
var _sdk = require('@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 _chunkYWCXHOSDcjs.createOwnerSigner.call(void 0, {
|
|
28
|
+
chain,
|
|
29
|
+
walletParams
|
|
30
|
+
});
|
|
31
|
+
if (existing != null && !_chunk5MG5CIEXcjs.equalsIgnoreCase.call(void 0, eoa.address, existing.signerConfig.data.eoaAddress)) {
|
|
32
|
+
throw new (0, _chunkBXSAJOIVcjs.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 _ecdsavalidator.signerToEcdsaValidator.call(void 0, publicClient, {
|
|
39
|
+
signer: eoa,
|
|
40
|
+
entryPoint,
|
|
41
|
+
kernelVersion
|
|
42
|
+
});
|
|
43
|
+
const account = await _sdk.createKernelAccount.call(void 0, publicClient, {
|
|
44
|
+
plugins: {
|
|
45
|
+
sudo: ecdsaValidator
|
|
46
|
+
},
|
|
47
|
+
index: 0n,
|
|
48
|
+
entryPoint,
|
|
49
|
+
kernelVersion,
|
|
50
|
+
deployedAccountAddress: _optionalChain([existing, 'optionalAccess', _ => _.address])
|
|
51
|
+
});
|
|
52
|
+
return { account, signerConfig: new (0, _chunkZOXKITU4cjs.EOASignerConfig)({ eoaAddress: eoa.address, type: "eoa" }) };
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
exports.EOACreationStrategy = EOACreationStrategy;
|
|
59
|
+
//# sourceMappingURL=chunk-DTEA33DF.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/blockchain/wallets/account/eoa.ts"],"names":[],"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","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"]}
|