@zerodev/sdk 4.0.2-alpha.25 → 4.0.2-passkey.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/cjs/index.d.ts +1 -0
  2. package/dist/cjs/index.js +1 -0
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/cjs/kernel-zerodev/owner/getCustodialOwner.d.ts +8 -0
  5. package/dist/cjs/kernel-zerodev/owner/getCustodialOwner.js +53 -0
  6. package/dist/cjs/kernel-zerodev/owner/getCustodialOwner.js.map +1 -0
  7. package/dist/cjs/kernel-zerodev/owner/getRPCProviderOwner.d.ts +2 -0
  8. package/dist/cjs/kernel-zerodev/owner/getRPCProviderOwner.js +15 -0
  9. package/dist/cjs/kernel-zerodev/owner/getRPCProviderOwner.js.map +1 -0
  10. package/dist/cjs/kernel-zerodev/owner/index.d.ts +2 -0
  11. package/dist/cjs/kernel-zerodev/owner/index.js +8 -0
  12. package/dist/cjs/kernel-zerodev/owner/index.js.map +1 -0
  13. package/dist/cjs/kernel-zerodev/owner/passkey/createPasskeyOwner.d.ts +7 -0
  14. package/dist/cjs/kernel-zerodev/owner/passkey/createPasskeyOwner.js +65 -0
  15. package/dist/cjs/kernel-zerodev/owner/passkey/createPasskeyOwner.js.map +1 -0
  16. package/dist/cjs/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.d.ts +6 -0
  17. package/dist/cjs/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.js +16 -0
  18. package/dist/cjs/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.js.map +1 -0
  19. package/dist/cjs/kernel-zerodev/owner/passkey/getPasskeyOwner.d.ts +5 -0
  20. package/dist/cjs/kernel-zerodev/owner/passkey/getPasskeyOwner.js +41 -0
  21. package/dist/cjs/kernel-zerodev/owner/passkey/getPasskeyOwner.js.map +1 -0
  22. package/dist/cjs/kernel-zerodev/owner/passkey/index.d.ts +3 -0
  23. package/dist/cjs/kernel-zerodev/owner/passkey/index.js +10 -0
  24. package/dist/cjs/kernel-zerodev/owner/passkey/index.js.map +1 -0
  25. package/dist/cjs/kernel-zerodev/owner/passkey/types.d.ts +12 -0
  26. package/dist/cjs/kernel-zerodev/owner/passkey/types.js +3 -0
  27. package/dist/cjs/kernel-zerodev/owner/passkey/types.js.map +1 -0
  28. package/dist/cjs/kernel-zerodev/owner/passkey/utils.d.ts +11 -0
  29. package/dist/cjs/kernel-zerodev/owner/passkey/utils.js +105 -0
  30. package/dist/cjs/kernel-zerodev/owner/passkey/utils.js.map +1 -0
  31. package/dist/cjs/kernel-zerodev/utils.d.ts +0 -8
  32. package/dist/cjs/kernel-zerodev/utils.js +1 -60
  33. package/dist/cjs/kernel-zerodev/utils.js.map +1 -1
  34. package/dist/esm/index.d.ts +1 -0
  35. package/dist/esm/index.js +1 -0
  36. package/dist/esm/index.js.map +1 -1
  37. package/dist/esm/kernel-zerodev/owner/getCustodialOwner.d.ts +8 -0
  38. package/dist/esm/kernel-zerodev/owner/getCustodialOwner.js +46 -0
  39. package/dist/esm/kernel-zerodev/owner/getCustodialOwner.js.map +1 -0
  40. package/dist/esm/kernel-zerodev/owner/getRPCProviderOwner.d.ts +2 -0
  41. package/dist/esm/kernel-zerodev/owner/getRPCProviderOwner.js +12 -0
  42. package/dist/esm/kernel-zerodev/owner/getRPCProviderOwner.js.map +1 -0
  43. package/dist/esm/kernel-zerodev/owner/index.d.ts +2 -0
  44. package/dist/esm/kernel-zerodev/owner/index.js +3 -0
  45. package/dist/esm/kernel-zerodev/owner/index.js.map +1 -0
  46. package/dist/esm/kernel-zerodev/owner/passkey/createPasskeyOwner.d.ts +7 -0
  47. package/dist/esm/kernel-zerodev/owner/passkey/createPasskeyOwner.js +58 -0
  48. package/dist/esm/kernel-zerodev/owner/passkey/createPasskeyOwner.js.map +1 -0
  49. package/dist/esm/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.d.ts +6 -0
  50. package/dist/esm/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.js +12 -0
  51. package/dist/esm/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.js.map +1 -0
  52. package/dist/esm/kernel-zerodev/owner/passkey/getPasskeyOwner.d.ts +5 -0
  53. package/dist/esm/kernel-zerodev/owner/passkey/getPasskeyOwner.js +34 -0
  54. package/dist/esm/kernel-zerodev/owner/passkey/getPasskeyOwner.js.map +1 -0
  55. package/dist/esm/kernel-zerodev/owner/passkey/index.d.ts +3 -0
  56. package/dist/esm/kernel-zerodev/owner/passkey/index.js +4 -0
  57. package/dist/esm/kernel-zerodev/owner/passkey/index.js.map +1 -0
  58. package/dist/esm/kernel-zerodev/owner/passkey/types.d.ts +12 -0
  59. package/dist/esm/kernel-zerodev/owner/passkey/types.js +2 -0
  60. package/dist/esm/kernel-zerodev/owner/passkey/types.js.map +1 -0
  61. package/dist/esm/kernel-zerodev/owner/passkey/utils.d.ts +11 -0
  62. package/dist/esm/kernel-zerodev/owner/passkey/utils.js +92 -0
  63. package/dist/esm/kernel-zerodev/owner/passkey/utils.js.map +1 -0
  64. package/dist/esm/kernel-zerodev/utils.d.ts +0 -8
  65. package/dist/esm/kernel-zerodev/utils.js +1 -55
  66. package/dist/esm/kernel-zerodev/utils.js.map +1 -1
  67. package/dist/types/index.d.ts +1 -0
  68. package/dist/types/index.d.ts.map +1 -1
  69. package/dist/types/kernel-zerodev/owner/getCustodialOwner.d.ts +9 -0
  70. package/dist/types/kernel-zerodev/owner/getCustodialOwner.d.ts.map +1 -0
  71. package/dist/types/kernel-zerodev/owner/getRPCProviderOwner.d.ts +3 -0
  72. package/dist/types/kernel-zerodev/owner/getRPCProviderOwner.d.ts.map +1 -0
  73. package/dist/types/kernel-zerodev/owner/index.d.ts +3 -0
  74. package/dist/types/kernel-zerodev/owner/index.d.ts.map +1 -0
  75. package/dist/types/kernel-zerodev/owner/passkey/createPasskeyOwner.d.ts +8 -0
  76. package/dist/types/kernel-zerodev/owner/passkey/createPasskeyOwner.d.ts.map +1 -0
  77. package/dist/types/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.d.ts +7 -0
  78. package/dist/types/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.d.ts.map +1 -0
  79. package/dist/types/kernel-zerodev/owner/passkey/getPasskeyOwner.d.ts +6 -0
  80. package/dist/types/kernel-zerodev/owner/passkey/getPasskeyOwner.d.ts.map +1 -0
  81. package/dist/types/kernel-zerodev/owner/passkey/index.d.ts +4 -0
  82. package/dist/types/kernel-zerodev/owner/passkey/index.d.ts.map +1 -0
  83. package/dist/types/kernel-zerodev/owner/passkey/types.d.ts +14 -0
  84. package/dist/types/kernel-zerodev/owner/passkey/types.d.ts.map +1 -0
  85. package/dist/types/kernel-zerodev/owner/passkey/utils.d.ts +12 -0
  86. package/dist/types/kernel-zerodev/owner/passkey/utils.d.ts.map +1 -0
  87. package/dist/types/kernel-zerodev/utils.d.ts +0 -8
  88. package/dist/types/kernel-zerodev/utils.d.ts.map +1 -1
  89. package/package.json +7 -1
  90. package/passkey/package.json +5 -0
  91. package/src/index.ts +3 -0
  92. package/src/kernel-zerodev/owner/getCustodialOwner.ts +74 -0
  93. package/src/kernel-zerodev/owner/getRPCProviderOwner.ts +22 -0
  94. package/src/kernel-zerodev/owner/index.ts +2 -0
  95. package/src/kernel-zerodev/owner/passkey/createPasskeyOwner.ts +98 -0
  96. package/src/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.ts +22 -0
  97. package/src/kernel-zerodev/owner/passkey/getPasskeyOwner.ts +69 -0
  98. package/src/kernel-zerodev/owner/passkey/index.ts +3 -0
  99. package/src/kernel-zerodev/owner/passkey/types.ts +18 -0
  100. package/src/kernel-zerodev/owner/passkey/utils.ts +157 -0
  101. package/src/kernel-zerodev/utils.ts +1 -90
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n encodePacked,\n fromBytes,\n toBytes,\n type Hex,\n type WalletClient,\n toHex,\n} from \"viem\";\nimport type {\n SignTypedDataParams,\n SmartAccountSigner,\n UserOperationCallData,\n} from \"@alchemy/aa-core\";\nimport { Signer, type TypedDataField } from \"@ethersproject/abstract-signer\";\nimport { Wallet } from \"@ethersproject/wallet\";\nimport { Web3Provider, type ExternalProvider } from \"@ethersproject/providers\";\nimport { API_URL, gasTokenChainAddresses } from \"./constants.js\";\nimport type { SupportedGasToken } from \"./paymaster/types.js\";\nimport axios from \"axios\";\n\nexport type UserOperationCallDataWithDelegate = UserOperationCallData & {\n delegateCall?: boolean;\n};\n\nexport type BatchUserOperationCallDataWithDelegate =\n UserOperationCallDataWithDelegate[];\n\nconst encodeCall = (_tx: UserOperationCallDataWithDelegate): string => {\n const data = toBytes(_tx.data);\n const encoded = encodePacked(\n [\"uint8\", \"address\", \"uint256\", \"uint256\", \"bytes\"],\n [\n _tx.delegateCall ? 1 : 0,\n _tx.target,\n _tx.value || BigInt(0),\n BigInt(data.length),\n fromBytes(data, \"hex\"),\n ]\n );\n return encoded.slice(2);\n};\nexport const encodeMultiSend = (\n _txs: BatchUserOperationCallDataWithDelegate\n): Hex => {\n return (\"0x\" + _txs.map((tx) => encodeCall(tx)).join(\"\")) as Hex;\n};\n\nexport function getGasTokenAddress(\n gasToken: SupportedGasToken,\n chainId: number\n): Hex | undefined {\n if (gasToken === \"TEST_ERC20\") {\n return \"0x3870419Ba2BBf0127060bCB37f69A1b1C090992B\";\n }\n return gasTokenChainAddresses[gasToken][chainId] || undefined;\n}\n\nexport const convertWalletClientToAccountSigner = (\n client: WalletClient\n): SmartAccountSigner => {\n return {\n getAddress: async () =>\n Promise.resolve((await client.getAddresses())[0] as `0x${string}`),\n signMessage: async (message: Uint8Array | string) =>\n (await client.signMessage({\n account: client.account!,\n message:\n typeof message === \"string\"\n ? message\n : {\n raw: message,\n },\n })) as `0x${string}`,\n signTypedData: async (params: SignTypedDataParams) =>\n await client.signTypedData({ ...params, account: client.account! }),\n };\n};\n\nexport const isWallet = (signer: any): signer is Wallet =>\n signer && signer._signTypedData !== undefined;\n\nexport const convertEthersSignerToAccountSigner = (\n signer: Signer | Wallet\n): SmartAccountSigner => {\n return {\n getAddress: async () =>\n Promise.resolve((await signer.getAddress()) as `0x${string}`),\n signMessage: async (msg: Uint8Array | string) =>\n (await signer.signMessage(msg)) as `0x${string}`,\n signTypedData: async (params: SignTypedDataParams) => {\n if (!isWallet(signer)) {\n throw Error(\"signTypedData method not implemented in signer\");\n }\n return (await signer._signTypedData(\n params.domain!,\n params.types as unknown as Record<string, TypedDataField[]>,\n params.message\n )) as Hex;\n },\n };\n};\n\nexport function getRPCProviderOwner(web3Provider: any): SmartAccountSigner {\n const provider = new Web3Provider(web3Provider as ExternalProvider);\n const signer = provider.getSigner();\n\n return {\n getAddress: async () =>\n Promise.resolve((await signer.getAddress()) as `0x${string}`),\n signMessage: async (msg: Uint8Array | string) =>\n (await signer.signMessage(msg)) as `0x${string}`,\n signTypedData: async (params: SignTypedDataParams) =>\n (await signer._signTypedData(\n params.domain!,\n params.types as unknown as Record<string, TypedDataField[]>,\n params.message\n )) as Hex,\n };\n}\n\nexport async function getCustodialOwner(\n identifier: string,\n {\n custodialFilePath,\n privateKey,\n publicKey,\n keyId,\n apiUrl = API_URL,\n }: {\n privateKey?: string;\n publicKey?: string;\n keyId?: string;\n custodialFilePath?: string;\n apiUrl?: string;\n }\n): Promise<SmartAccountSigner | undefined> {\n if (custodialFilePath) {\n let fsModule;\n try {\n fsModule = require.resolve(\"fs\") && require(\"fs\");\n } catch (error) {\n console.log(\"FS module not available. Skipping FS operation...\");\n return;\n }\n const data = fsModule.readFileSync(custodialFilePath, \"utf8\");\n const values = data.split(\"\\n\");\n [privateKey, publicKey, keyId] = values;\n }\n let TurnkeySigner;\n try {\n TurnkeySigner =\n require.resolve(\"@turnkey/ethers\") &&\n require(\"@turnkey/ethers\").TurnkeySigner;\n } catch (error) {\n console.log(\n \"@turnkey/ethers module not available. Skipping FS operation...\"\n );\n return;\n }\n if (!privateKey || !publicKey || !keyId) {\n throw new Error(\n \"Must provide custodialFilePath or privateKey, publicKey, and keyId.\"\n );\n }\n\n const response = await axios.post(`${apiUrl}/wallets/${identifier}`, {\n keyId,\n });\n\n const turnkeySigner = new TurnkeySigner({\n apiPublicKey: publicKey,\n apiPrivateKey: privateKey,\n baseUrl: \"https://coordinator-beta.turnkey.io\",\n organizationId: keyId,\n privateKeyId: response.data.walletId,\n });\n return {\n getAddress: async () => (await turnkeySigner.getAddress()) as `0x${string}`,\n signMessage: async (msg: Uint8Array | string) =>\n (await turnkeySigner.signMessage(msg)) as `0x${string}`,\n signTypedData: async (params: SignTypedDataParams) =>\n (await turnkeySigner.signTypedData(\n params.domain,\n params.types,\n params.message\n )) as Hex,\n };\n}\n\nexport const randomHexString = (length: number): Hex =>\n toHex(\n Array.from({ length }, () =>\n Math.floor(Math.random() * 16).toString(16)\n ).join(\"\")\n );\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n encodePacked,\n fromBytes,\n toBytes,\n type Hex,\n type WalletClient,\n toHex,\n} from \"viem\";\nimport type {\n SignTypedDataParams,\n SmartAccountSigner,\n UserOperationCallData,\n} from \"@alchemy/aa-core\";\nimport { Signer, type TypedDataField } from \"@ethersproject/abstract-signer\";\nimport { Wallet } from \"@ethersproject/wallet\";\nimport type { SupportedGasToken } from \"./paymaster/types.js\";\nimport { gasTokenChainAddresses } from \"./constants.js\";\n\nexport type UserOperationCallDataWithDelegate = UserOperationCallData & {\n delegateCall?: boolean;\n};\n\nexport type BatchUserOperationCallDataWithDelegate =\n UserOperationCallDataWithDelegate[];\n\nconst encodeCall = (_tx: UserOperationCallDataWithDelegate): string => {\n const data = toBytes(_tx.data);\n const encoded = encodePacked(\n [\"uint8\", \"address\", \"uint256\", \"uint256\", \"bytes\"],\n [\n _tx.delegateCall ? 1 : 0,\n _tx.target,\n _tx.value || BigInt(0),\n BigInt(data.length),\n fromBytes(data, \"hex\"),\n ]\n );\n return encoded.slice(2);\n};\nexport const encodeMultiSend = (\n _txs: BatchUserOperationCallDataWithDelegate\n): Hex => {\n return (\"0x\" + _txs.map((tx) => encodeCall(tx)).join(\"\")) as Hex;\n};\n\nexport function getGasTokenAddress(\n gasToken: SupportedGasToken,\n chainId: number\n): Hex | undefined {\n if (gasToken === \"TEST_ERC20\") {\n return \"0x3870419Ba2BBf0127060bCB37f69A1b1C090992B\";\n }\n return gasTokenChainAddresses[gasToken][chainId] || undefined;\n}\n\nexport const convertWalletClientToAccountSigner = (\n client: WalletClient\n): SmartAccountSigner => {\n return {\n getAddress: async () =>\n Promise.resolve((await client.getAddresses())[0] as `0x${string}`),\n signMessage: async (message: Uint8Array | string) =>\n (await client.signMessage({\n account: client.account!,\n message:\n typeof message === \"string\"\n ? message\n : {\n raw: message,\n },\n })) as `0x${string}`,\n signTypedData: async (params: SignTypedDataParams) =>\n await client.signTypedData({ ...params, account: client.account! }),\n };\n};\n\nexport const isWallet = (signer: any): signer is Wallet =>\n signer && signer._signTypedData !== undefined;\n\nexport const convertEthersSignerToAccountSigner = (\n signer: Signer | Wallet\n): SmartAccountSigner => {\n return {\n getAddress: async () =>\n Promise.resolve((await signer.getAddress()) as `0x${string}`),\n signMessage: async (msg: Uint8Array | string) =>\n (await signer.signMessage(msg)) as `0x${string}`,\n signTypedData: async (params: SignTypedDataParams) => {\n if (!isWallet(signer)) {\n throw Error(\"signTypedData method not implemented in signer\");\n }\n return (await signer._signTypedData(\n params.domain!,\n params.types as unknown as Record<string, TypedDataField[]>,\n params.message\n )) as Hex;\n },\n };\n};\n\nexport const randomHexString = (length: number): Hex =>\n toHex(\n Array.from({ length }, () =>\n Math.floor(Math.random() * 16).toString(16)\n ).join(\"\")\n );\n"]}
@@ -18,3 +18,4 @@ export * from "./kernel-zerodev/utils.js";
18
18
  export { getChainId } from "./kernel-zerodev/api/index.js";
19
19
  export { ZeroDevEthersProvider } from "./kernel-zerodev/ethers-provider/ethers-provider.js";
20
20
  export * as constants from "./kernel-zerodev/constants.js";
21
+ export * from "./kernel-zerodev/owner/index.js";
package/dist/esm/index.js CHANGED
@@ -9,4 +9,5 @@ export * from "./kernel-zerodev/utils.js";
9
9
  export { getChainId } from "./kernel-zerodev/api/index.js";
10
10
  export { ZeroDevEthersProvider } from "./kernel-zerodev/ethers-provider/ethers-provider.js";
11
11
  export * as constants from "./kernel-zerodev/constants.js";
12
+ export * from "./kernel-zerodev/owner/index.js";
12
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,gCAAgC,CAAC;AAG/C,OAAO,EACL,aAAa,EACb,mBAAmB,GACpB,MAAM,oCAAoC,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AAQpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAOhF,cAAc,8CAA8C,CAAC;AAI7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAEzE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAG/D,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AAE5F,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAC","sourcesContent":["// Add you exports here, make sure to export types separately from impls and use the `type` keyword when exporting them\n// Don't use wildcard exports, instead use named exports\n\n//kernel exports\nexport * from \"./kernel-zerodev/abis/index.js\";\n\n// Validator exports\nexport {\n ValidatorMode,\n KernelBaseValidator,\n} from \"./kernel-zerodev/validator/base.js\";\nexport * from \"./kernel-zerodev/validator/index.js\";\nexport type * from \"./kernel-zerodev/validator/types.js\";\nexport type { ECDSAValidatorParams } from \"./kernel-zerodev/validator/ecdsa-validator.js\";\nexport type { KillSwitchValidatorParams } from \"./kernel-zerodev/validator/kill-switch-validator.js\";\nexport type { ERC165SessionKeyValidatorParams } from \"./kernel-zerodev/validator/erc165-session-key-validator.js\";\nexport type { KernelBaseValidatorParams } from \"./kernel-zerodev/validator/base.js\";\n\n// Validator Provider exports\nexport { ValidatorProvider } from \"./kernel-zerodev/validator-provider/base.js\";\nexport type {\n ValidatorProviderParams,\n ValidatorProviderParamsOpts,\n ExtendedValidatorProviderParams,\n} from \"./kernel-zerodev/validator-provider/base.js\";\nexport type * from \"./kernel-zerodev/validator-provider/types.js\";\nexport * from \"./kernel-zerodev/validator-provider/index.js\";\n\n// Core exports\nexport type * from \"./kernel-zerodev/paymaster/types.js\";\nexport { KernelSmartContractAccount } from \"./kernel-zerodev/account.js\";\nexport type { KernelSmartAccountParams } from \"./kernel-zerodev/account.js\";\nexport { ZeroDevProvider } from \"./kernel-zerodev/provider.js\";\n\n// Utils exports\nexport * from \"./kernel-zerodev/utils.js\";\nexport { getChainId } from \"./kernel-zerodev/api/index.js\";\nexport { ZeroDevEthersProvider } from \"./kernel-zerodev/ethers-provider/ethers-provider.js\";\n\nexport * as constants from \"./kernel-zerodev/constants.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,gCAAgC,CAAC;AAG/C,OAAO,EACL,aAAa,EACb,mBAAmB,GACpB,MAAM,oCAAoC,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AAQpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAOhF,cAAc,8CAA8C,CAAC;AAI7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAEzE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAG/D,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AAE5F,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAC;AAG3D,cAAc,iCAAiC,CAAC","sourcesContent":["// Add you exports here, make sure to export types separately from impls and use the `type` keyword when exporting them\n// Don't use wildcard exports, instead use named exports\n\n//kernel exports\nexport * from \"./kernel-zerodev/abis/index.js\";\n\n// Validator exports\nexport {\n ValidatorMode,\n KernelBaseValidator,\n} from \"./kernel-zerodev/validator/base.js\";\nexport * from \"./kernel-zerodev/validator/index.js\";\nexport type * from \"./kernel-zerodev/validator/types.js\";\nexport type { ECDSAValidatorParams } from \"./kernel-zerodev/validator/ecdsa-validator.js\";\nexport type { KillSwitchValidatorParams } from \"./kernel-zerodev/validator/kill-switch-validator.js\";\nexport type { ERC165SessionKeyValidatorParams } from \"./kernel-zerodev/validator/erc165-session-key-validator.js\";\nexport type { KernelBaseValidatorParams } from \"./kernel-zerodev/validator/base.js\";\n\n// Validator Provider exports\nexport { ValidatorProvider } from \"./kernel-zerodev/validator-provider/base.js\";\nexport type {\n ValidatorProviderParams,\n ValidatorProviderParamsOpts,\n ExtendedValidatorProviderParams,\n} from \"./kernel-zerodev/validator-provider/base.js\";\nexport type * from \"./kernel-zerodev/validator-provider/types.js\";\nexport * from \"./kernel-zerodev/validator-provider/index.js\";\n\n// Core exports\nexport type * from \"./kernel-zerodev/paymaster/types.js\";\nexport { KernelSmartContractAccount } from \"./kernel-zerodev/account.js\";\nexport type { KernelSmartAccountParams } from \"./kernel-zerodev/account.js\";\nexport { ZeroDevProvider } from \"./kernel-zerodev/provider.js\";\n\n// Utils exports\nexport * from \"./kernel-zerodev/utils.js\";\nexport { getChainId } from \"./kernel-zerodev/api/index.js\";\nexport { ZeroDevEthersProvider } from \"./kernel-zerodev/ethers-provider/ethers-provider.js\";\n\nexport * as constants from \"./kernel-zerodev/constants.js\";\n\n// Owner exports\nexport * from \"./kernel-zerodev/owner/index.js\";\n"]}
@@ -0,0 +1,8 @@
1
+ import type { SmartAccountSigner } from "@alchemy/aa-core";
2
+ export declare function getCustodialOwner(identifier: string, { custodialFilePath, privateKey, publicKey, keyId, apiUrl, }: {
3
+ privateKey?: string;
4
+ publicKey?: string;
5
+ keyId?: string;
6
+ custodialFilePath?: string;
7
+ apiUrl?: string;
8
+ }): Promise<SmartAccountSigner | undefined>;
@@ -0,0 +1,46 @@
1
+ import { API_URL } from "../constants.js";
2
+ import axios from "axios";
3
+ export async function getCustodialOwner(identifier, { custodialFilePath, privateKey, publicKey, keyId, apiUrl = API_URL, }) {
4
+ if (custodialFilePath) {
5
+ let fsModule;
6
+ try {
7
+ fsModule = require.resolve("fs") && require("fs");
8
+ }
9
+ catch (error) {
10
+ console.log("FS module not available. Skipping FS operation...");
11
+ return;
12
+ }
13
+ const data = fsModule.readFileSync(custodialFilePath, "utf8");
14
+ const values = data.split("\n");
15
+ [privateKey, publicKey, keyId] = values;
16
+ }
17
+ let TurnkeySigner;
18
+ try {
19
+ TurnkeySigner =
20
+ require.resolve("@turnkey/ethers") &&
21
+ require("@turnkey/ethers").TurnkeySigner;
22
+ }
23
+ catch (error) {
24
+ console.log("@turnkey/ethers module not available. Skipping FS operation...");
25
+ return;
26
+ }
27
+ if (!privateKey || !publicKey || !keyId) {
28
+ throw new Error("Must provide custodialFilePath or privateKey, publicKey, and keyId.");
29
+ }
30
+ const response = await axios.post(`${apiUrl}/wallets/${identifier}`, {
31
+ keyId,
32
+ });
33
+ const turnkeySigner = new TurnkeySigner({
34
+ apiPublicKey: publicKey,
35
+ apiPrivateKey: privateKey,
36
+ baseUrl: "https://coordinator-beta.turnkey.io",
37
+ organizationId: keyId,
38
+ privateKeyId: response.data.walletId,
39
+ });
40
+ return {
41
+ getAddress: async () => (await turnkeySigner.getAddress()),
42
+ signMessage: async (msg) => (await turnkeySigner.signMessage(msg)),
43
+ signTypedData: async (params) => (await turnkeySigner.signTypedData(params.domain, params.types, params.message)),
44
+ };
45
+ }
46
+ //# sourceMappingURL=getCustodialOwner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCustodialOwner.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/owner/getCustodialOwner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAAkB,EAClB,EACE,iBAAiB,EACjB,UAAU,EACV,SAAS,EACT,KAAK,EACL,MAAM,GAAG,OAAO,GAOjB;IAED,IAAI,iBAAiB,EAAE;QACrB,IAAI,QAAQ,CAAC;QACb,IAAI;YACF,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;SACnD;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;YACjE,OAAO;SACR;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC;KACzC;IACD,IAAI,aAAa,CAAC;IAClB,IAAI;QACF,aAAa;YACX,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC;gBAClC,OAAO,CAAC,iBAAiB,CAAC,CAAC,aAAa,CAAC;KAC5C;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,GAAG,CACT,gEAAgE,CACjE,CAAC;QACF,OAAO;KACR;IACD,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE;QACvC,MAAM,IAAI,KAAK,CACb,qEAAqE,CACtE,CAAC;KACH;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,YAAY,UAAU,EAAE,EAAE;QACnE,KAAK;KACN,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC;QACtC,YAAY,EAAE,SAAS;QACvB,aAAa,EAAE,UAAU;QACzB,OAAO,EAAE,qCAAqC;QAC9C,cAAc,EAAE,KAAK;QACrB,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ;KACrC,CAAC,CAAC;IACH,OAAO;QACL,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,aAAa,CAAC,UAAU,EAAE,CAAkB;QAC3E,WAAW,EAAE,KAAK,EAAE,GAAwB,EAAE,EAAE,CAC9C,CAAC,MAAM,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,CAAkB;QACzD,aAAa,EAAE,KAAK,EAAE,MAA2B,EAAE,EAAE,CACnD,CAAC,MAAM,aAAa,CAAC,aAAa,CAChC,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,OAAO,CACf,CAAQ;KACZ,CAAC;AACJ,CAAC","sourcesContent":["import type { SmartAccountSigner } from \"@alchemy/aa-core\";\nimport { API_URL } from \"../constants.js\";\nimport axios from \"axios\";\nimport type { Hex } from \"viem\";\nimport type { SignTypedDataParams } from \"@alchemy/aa-core\";\n\nexport async function getCustodialOwner(\n identifier: string,\n {\n custodialFilePath,\n privateKey,\n publicKey,\n keyId,\n apiUrl = API_URL,\n }: {\n privateKey?: string;\n publicKey?: string;\n keyId?: string;\n custodialFilePath?: string;\n apiUrl?: string;\n }\n): Promise<SmartAccountSigner | undefined> {\n if (custodialFilePath) {\n let fsModule;\n try {\n fsModule = require.resolve(\"fs\") && require(\"fs\");\n } catch (error) {\n console.log(\"FS module not available. Skipping FS operation...\");\n return;\n }\n const data = fsModule.readFileSync(custodialFilePath, \"utf8\");\n const values = data.split(\"\\n\");\n [privateKey, publicKey, keyId] = values;\n }\n let TurnkeySigner;\n try {\n TurnkeySigner =\n require.resolve(\"@turnkey/ethers\") &&\n require(\"@turnkey/ethers\").TurnkeySigner;\n } catch (error) {\n console.log(\n \"@turnkey/ethers module not available. Skipping FS operation...\"\n );\n return;\n }\n if (!privateKey || !publicKey || !keyId) {\n throw new Error(\n \"Must provide custodialFilePath or privateKey, publicKey, and keyId.\"\n );\n }\n\n const response = await axios.post(`${apiUrl}/wallets/${identifier}`, {\n keyId,\n });\n\n const turnkeySigner = new TurnkeySigner({\n apiPublicKey: publicKey,\n apiPrivateKey: privateKey,\n baseUrl: \"https://coordinator-beta.turnkey.io\",\n organizationId: keyId,\n privateKeyId: response.data.walletId,\n });\n return {\n getAddress: async () => (await turnkeySigner.getAddress()) as `0x${string}`,\n signMessage: async (msg: Uint8Array | string) =>\n (await turnkeySigner.signMessage(msg)) as `0x${string}`,\n signTypedData: async (params: SignTypedDataParams) =>\n (await turnkeySigner.signTypedData(\n params.domain,\n params.types,\n params.message\n )) as Hex,\n };\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import type { SmartAccountSigner } from "@alchemy/aa-core";
2
+ export declare function getRPCProviderOwner(web3Provider: any): SmartAccountSigner;
@@ -0,0 +1,12 @@
1
+ import { Web3Provider } from "@ethersproject/providers";
2
+ import {} from "@ethersproject/abstract-signer";
3
+ export function getRPCProviderOwner(web3Provider) {
4
+ const provider = new Web3Provider(web3Provider);
5
+ const signer = provider.getSigner();
6
+ return {
7
+ getAddress: async () => Promise.resolve((await signer.getAddress())),
8
+ signMessage: async (msg) => (await signer.signMessage(msg)),
9
+ signTypedData: async (params) => (await signer._signTypedData(params.domain, params.types, params.message)),
10
+ };
11
+ }
12
+ //# sourceMappingURL=getRPCProviderOwner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getRPCProviderOwner.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/owner/getRPCProviderOwner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAyB,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAuB,MAAM,gCAAgC,CAAC;AAGrE,MAAM,UAAU,mBAAmB,CAAC,YAAiB;IACnD,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,YAAgC,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;IAEpC,OAAO;QACL,UAAU,EAAE,KAAK,IAAI,EAAE,CACrB,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,MAAM,CAAC,UAAU,EAAE,CAAkB,CAAC;QAC/D,WAAW,EAAE,KAAK,EAAE,GAAwB,EAAE,EAAE,CAC9C,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAkB;QAClD,aAAa,EAAE,KAAK,EAAE,MAA2B,EAAE,EAAE,CACnD,CAAC,MAAM,MAAM,CAAC,cAAc,CAC1B,MAAM,CAAC,MAAO,EACd,MAAM,CAAC,KAAoD,EAC3D,MAAM,CAAC,OAAO,CACf,CAAQ;KACZ,CAAC;AACJ,CAAC","sourcesContent":["import type { SignTypedDataParams, SmartAccountSigner } from \"@alchemy/aa-core\";\nimport { Web3Provider, type ExternalProvider } from \"@ethersproject/providers\";\nimport { type TypedDataField } from \"@ethersproject/abstract-signer\";\nimport type { Hex } from \"viem\";\n\nexport function getRPCProviderOwner(web3Provider: any): SmartAccountSigner {\n const provider = new Web3Provider(web3Provider as ExternalProvider);\n const signer = provider.getSigner();\n\n return {\n getAddress: async () =>\n Promise.resolve((await signer.getAddress()) as `0x${string}`),\n signMessage: async (msg: Uint8Array | string) =>\n (await signer.signMessage(msg)) as `0x${string}`,\n signTypedData: async (params: SignTypedDataParams) =>\n (await signer._signTypedData(\n params.domain!,\n params.types as unknown as Record<string, TypedDataField[]>,\n params.message\n )) as Hex,\n };\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export { getCustodialOwner } from "./getCustodialOwner.js";
2
+ export { getRPCProviderOwner } from "./getRPCProviderOwner.js";
@@ -0,0 +1,3 @@
1
+ export { getCustodialOwner } from "./getCustodialOwner.js";
2
+ export { getRPCProviderOwner } from "./getRPCProviderOwner.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/owner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC","sourcesContent":["export { getCustodialOwner } from \"./getCustodialOwner.js\";\nexport { getRPCProviderOwner } from \"./getRPCProviderOwner.js\";\n"]}
@@ -0,0 +1,7 @@
1
+ import type { SmartAccountSigner } from "@alchemy/aa-core";
2
+ export declare function createPasskeyOwner({ name, projectId, fallback, apiUrl, }: {
3
+ name: string;
4
+ projectId: string;
5
+ fallback?: () => Promise<SmartAccountSigner | undefined>;
6
+ apiUrl?: string;
7
+ }): Promise<SmartAccountSigner | undefined>;
@@ -0,0 +1,58 @@
1
+ import { getWebAuthnAttestation } from "@turnkey/http";
2
+ import axios from "axios";
3
+ import { base64UrlEncode, es256, generateRandomBuffer, getCredentials, publicKey, signMessage, signTypedData, } from "./utils.js";
4
+ import { API_URL } from "../../constants.js";
5
+ export async function createPasskeyOwner({ name, projectId, fallback, apiUrl = API_URL, }) {
6
+ if (typeof window !== "undefined") {
7
+ const challenge = generateRandomBuffer();
8
+ try {
9
+ const attestation = await getWebAuthnAttestation({
10
+ publicKey: {
11
+ rp: {
12
+ id: window.location.hostname,
13
+ name: window.location.hostname,
14
+ },
15
+ authenticatorSelection: {
16
+ residentKey: "required",
17
+ userVerification: "required",
18
+ },
19
+ excludeCredentials: await getCredentials(projectId),
20
+ extensions: { credProps: true },
21
+ challenge,
22
+ pubKeyCredParams: [
23
+ {
24
+ type: publicKey,
25
+ alg: es256,
26
+ },
27
+ ],
28
+ user: {
29
+ id: Uint8Array.from(name, (c) => c.charCodeAt(0)),
30
+ name,
31
+ displayName: name,
32
+ },
33
+ },
34
+ });
35
+ const response = await axios.post(`${apiUrl}/projects/${projectId}/wallets`, {
36
+ challenge: base64UrlEncode(challenge),
37
+ name,
38
+ attestation,
39
+ });
40
+ const { id, walletId, address } = await response.data;
41
+ const owner = {
42
+ getAddress: async () => address,
43
+ signMessage: (msg) => signMessage(msg, id, walletId, projectId, attestation.credentialId, apiUrl),
44
+ signTypedData: (params) => signTypedData(params, id, walletId, projectId, attestation.credentialId, apiUrl),
45
+ };
46
+ return owner;
47
+ }
48
+ catch (e) {
49
+ if (e instanceof DOMException && e.name === "InvalidStateError") {
50
+ if (fallback)
51
+ return await fallback();
52
+ }
53
+ console.log(e);
54
+ }
55
+ }
56
+ return;
57
+ }
58
+ //# sourceMappingURL=createPasskeyOwner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createPasskeyOwner.js","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/createPasskeyOwner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EACL,eAAe,EACf,KAAK,EACL,oBAAoB,EACpB,cAAc,EACd,SAAS,EACT,WAAW,EACX,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EACvC,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,MAAM,GAAG,OAAO,GAMjB;IAEC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACjC,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;QACzC,IAAI;YACF,MAAM,WAAW,GAAG,MAAM,sBAAsB,CAAC;gBAC/C,SAAS,EAAE;oBACT,EAAE,EAAE;wBAEF,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;wBAE5B,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;qBAC/B;oBACD,sBAAsB,EAAE;wBACtB,WAAW,EAAE,UAAU;wBACvB,gBAAgB,EAAE,UAAU;qBAC7B;oBACD,kBAAkB,EAAE,MAAM,cAAc,CAAC,SAAS,CAAC;oBACnD,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;oBAC/B,SAAS;oBACT,gBAAgB,EAAE;wBAChB;4BACE,IAAI,EAAE,SAAS;4BACf,GAAG,EAAE,KAAK;yBACX;qBACF;oBACD,IAAI,EAAE;wBACJ,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;wBACjD,IAAI;wBACJ,WAAW,EAAE,IAAI;qBAClB;iBACF;aACF,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAC/B,GAAG,MAAM,aAAa,SAAS,UAAU,EACzC;gBACE,SAAS,EAAE,eAAe,CAAC,SAAS,CAAC;gBACrC,IAAI;gBACJ,WAAW;aACZ,CACF,CAAC;YACF,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC;YACtD,MAAM,KAAK,GAAuB;gBAChC,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,OAAO;gBAC/B,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CACnB,WAAW,CACT,GAAG,EACH,EAAE,EACF,QAAQ,EACR,SAAS,EACT,WAAW,CAAC,YAAY,EACxB,MAAM,CACP;gBACH,aAAa,EAAE,CAAC,MAA2B,EAAE,EAAE,CAC7C,aAAa,CACX,MAAM,EACN,EAAE,EACF,QAAQ,EACR,SAAS,EACT,WAAW,CAAC,YAAY,EACxB,MAAM,CACP;aACJ,CAAC;YACF,OAAO,KAAK,CAAC;SACd;QAAC,OAAO,CAAC,EAAE;YAEV,IAAI,CAAC,YAAY,YAAY,IAAI,CAAC,CAAC,IAAI,KAAK,mBAAmB,EAAE;gBAC/D,IAAI,QAAQ;oBAAE,OAAO,MAAM,QAAQ,EAAE,CAAC;aACvC;YACD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAChB;KACF;IACD,OAAO;AACT,CAAC","sourcesContent":["import { getWebAuthnAttestation } from \"@turnkey/http\";\nimport axios from \"axios\";\nimport type { SignTypedDataParams, SmartAccountSigner } from \"@alchemy/aa-core\";\nimport {\n base64UrlEncode,\n es256,\n generateRandomBuffer,\n getCredentials,\n publicKey,\n signMessage,\n signTypedData,\n} from \"./utils.js\";\nimport { API_URL } from \"../../constants.js\";\n\nexport async function createPasskeyOwner({\n name,\n projectId,\n fallback,\n apiUrl = API_URL,\n}: {\n name: string;\n projectId: string;\n fallback?: () => Promise<SmartAccountSigner | undefined>;\n apiUrl?: string;\n}): Promise<SmartAccountSigner | undefined> {\n //@ts-expect-error\n if (typeof window !== \"undefined\") {\n const challenge = generateRandomBuffer();\n try {\n const attestation = await getWebAuthnAttestation({\n publicKey: {\n rp: {\n //@ts-expect-error\n id: window.location.hostname,\n //@ts-expect-error\n name: window.location.hostname,\n },\n authenticatorSelection: {\n residentKey: \"required\", // or 'preferred', 'discouraged'\n userVerification: \"required\",\n },\n excludeCredentials: await getCredentials(projectId),\n extensions: { credProps: true },\n challenge,\n pubKeyCredParams: [\n {\n type: publicKey,\n alg: es256,\n },\n ],\n user: {\n id: Uint8Array.from(name, (c) => c.charCodeAt(0)),\n name,\n displayName: name,\n },\n },\n });\n const response = await axios.post(\n `${apiUrl}/projects/${projectId}/wallets`,\n {\n challenge: base64UrlEncode(challenge),\n name,\n attestation,\n }\n );\n const { id, walletId, address } = await response.data;\n const owner: SmartAccountSigner = {\n getAddress: async () => address,\n signMessage: (msg) =>\n signMessage(\n msg,\n id,\n walletId,\n projectId,\n attestation.credentialId,\n apiUrl\n ),\n signTypedData: (params: SignTypedDataParams) =>\n signTypedData(\n params,\n id,\n walletId,\n projectId,\n attestation.credentialId,\n apiUrl\n ),\n };\n return owner;\n } catch (e) {\n //@ts-expect-error\n if (e instanceof DOMException && e.name === \"InvalidStateError\") {\n if (fallback) return await fallback();\n }\n console.log(e);\n }\n }\n return;\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import type { SmartAccountSigner } from "@alchemy/aa-core";
2
+ export declare function getOrCreatePasskeyOwner({ name, projectId, apiUrl, }: {
3
+ name: string;
4
+ projectId: string;
5
+ apiUrl?: string;
6
+ }): Promise<SmartAccountSigner | undefined>;
@@ -0,0 +1,12 @@
1
+ import { API_URL } from "../../constants.js";
2
+ import { createPasskeyOwner } from "./createPasskeyOwner.js";
3
+ import { getPasskeyOwner } from "./getPasskeyOwner.js";
4
+ export async function getOrCreatePasskeyOwner({ name, projectId, apiUrl = API_URL, }) {
5
+ return await createPasskeyOwner({
6
+ name,
7
+ projectId,
8
+ apiUrl,
9
+ fallback: () => getPasskeyOwner({ projectId, apiUrl }),
10
+ });
11
+ }
12
+ //# sourceMappingURL=getOrCreatePasskeyOwner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getOrCreatePasskeyOwner.js","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,EAC5C,IAAI,EACJ,SAAS,EACT,MAAM,GAAG,OAAO,GAKjB;IACC,OAAO,MAAM,kBAAkB,CAAC;QAC9B,IAAI;QACJ,SAAS;QACT,MAAM;QACN,QAAQ,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;KACvD,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { SmartAccountSigner } from \"@alchemy/aa-core\";\nimport { API_URL } from \"../../constants.js\";\n// import { getPasskeyOwner } from \"./getPasskeyOwner.js\";\nimport { createPasskeyOwner } from \"./createPasskeyOwner.js\";\nimport { getPasskeyOwner } from \"./getPasskeyOwner.js\";\n\nexport async function getOrCreatePasskeyOwner({\n name,\n projectId,\n apiUrl = API_URL,\n}: {\n name: string;\n projectId: string;\n apiUrl?: string;\n}): Promise<SmartAccountSigner | undefined> {\n return await createPasskeyOwner({\n name,\n projectId,\n apiUrl,\n fallback: () => getPasskeyOwner({ projectId, apiUrl }),\n });\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import type { SmartAccountSigner } from "@alchemy/aa-core";
2
+ export declare function getPasskeyOwner({ projectId, apiUrl, }: {
3
+ projectId: string;
4
+ apiUrl?: string;
5
+ }): Promise<SmartAccountSigner | undefined>;
@@ -0,0 +1,34 @@
1
+ import { getWebAuthnAssertion } from "@turnkey/http/dist/webauthn";
2
+ import axios from "axios";
3
+ import { base64UrlEncode, generateRandomBuffer, getCredentials, signMessage, signTypedData, } from "./utils.js";
4
+ import { API_URL } from "../../constants.js";
5
+ export async function getPasskeyOwner({ projectId, apiUrl = API_URL, }) {
6
+ if (typeof window !== "undefined") {
7
+ const challenge = generateRandomBuffer();
8
+ try {
9
+ const assertion = JSON.parse(await getWebAuthnAssertion(base64UrlEncode(challenge), {
10
+ publicKey: {
11
+ rpId: window.location.hostname,
12
+ userVerification: "required",
13
+ allowCredentials: await getCredentials(projectId),
14
+ },
15
+ }));
16
+ const response = await axios.post(`${apiUrl}/projects/${projectId}/wallets/${assertion.credentialId}`, {
17
+ challenge: base64UrlEncode(challenge),
18
+ assertion,
19
+ });
20
+ const { id, walletId, address } = await response.data;
21
+ const owner = {
22
+ getAddress: async () => address,
23
+ signMessage: (msg) => signMessage(msg, id, walletId, projectId, assertion.credentialId, apiUrl),
24
+ signTypedData: (params) => signTypedData(params, id, walletId, projectId, assertion.credentialId, apiUrl),
25
+ };
26
+ return owner;
27
+ }
28
+ catch (e) {
29
+ console.log(e);
30
+ }
31
+ }
32
+ return;
33
+ }
34
+ //# sourceMappingURL=getPasskeyOwner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPasskeyOwner.js","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/getPasskeyOwner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,WAAW,EACX,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EACpC,SAAS,EACT,MAAM,GAAG,OAAO,GAIjB;IAEC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACjC,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;QACzC,IAAI;YACF,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAC1B,MAAM,oBAAoB,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE;gBACrD,SAAS,EAAE;oBAET,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;oBAC9B,gBAAgB,EAAE,UAAU;oBAC5B,gBAAgB,EAAE,MAAM,cAAc,CAAC,SAAS,CAAC;iBAClD;aACF,CAAC,CACH,CAAC;YACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAC/B,GAAG,MAAM,aAAa,SAAS,YAAY,SAAS,CAAC,YAAY,EAAE,EACnE;gBACE,SAAS,EAAE,eAAe,CAAC,SAAS,CAAC;gBACrC,SAAS;aACV,CACF,CAAC;YACF,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC;YACtD,MAAM,KAAK,GAAuB;gBAChC,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,OAAO;gBAC/B,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CACnB,WAAW,CACT,GAAG,EACH,EAAE,EACF,QAAQ,EACR,SAAS,EACT,SAAS,CAAC,YAAY,EACtB,MAAM,CACP;gBACH,aAAa,EAAE,CAAC,MAA2B,EAAE,EAAE,CAC7C,aAAa,CACX,MAAM,EACN,EAAE,EACF,QAAQ,EACR,SAAS,EACT,SAAS,CAAC,YAAY,EACtB,MAAM,CACP;aACJ,CAAC;YACF,OAAO,KAAK,CAAC;SACd;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAChB;KACF;IACD,OAAO;AACT,CAAC","sourcesContent":["import { getWebAuthnAssertion } from \"@turnkey/http/dist/webauthn\";\nimport axios from \"axios\";\nimport type { SignTypedDataParams, SmartAccountSigner } from \"@alchemy/aa-core\";\nimport {\n base64UrlEncode,\n generateRandomBuffer,\n getCredentials,\n signMessage,\n signTypedData,\n} from \"./utils.js\";\nimport { API_URL } from \"../../constants.js\";\n\nexport async function getPasskeyOwner({\n projectId,\n apiUrl = API_URL,\n}: {\n projectId: string;\n apiUrl?: string;\n}): Promise<SmartAccountSigner | undefined> {\n //@ts-expect-error\n if (typeof window !== \"undefined\") {\n const challenge = generateRandomBuffer();\n try {\n const assertion = JSON.parse(\n await getWebAuthnAssertion(base64UrlEncode(challenge), {\n publicKey: {\n //@ts-expect-error\n rpId: window.location.hostname,\n userVerification: \"required\",\n allowCredentials: await getCredentials(projectId),\n },\n })\n );\n const response = await axios.post(\n `${apiUrl}/projects/${projectId}/wallets/${assertion.credentialId}`,\n {\n challenge: base64UrlEncode(challenge),\n assertion,\n }\n );\n const { id, walletId, address } = await response.data;\n const owner: SmartAccountSigner = {\n getAddress: async () => address,\n signMessage: (msg) =>\n signMessage(\n msg,\n id,\n walletId,\n projectId,\n assertion.credentialId,\n apiUrl\n ),\n signTypedData: (params: SignTypedDataParams) =>\n signTypedData(\n params,\n id,\n walletId,\n projectId,\n assertion.credentialId,\n apiUrl\n ),\n };\n return owner;\n } catch (e) {\n console.log(e);\n }\n }\n return;\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export { getPasskeyOwner } from "./getPasskeyOwner.js";
2
+ export { createPasskeyOwner } from "./createPasskeyOwner.js";
3
+ export { getOrCreatePasskeyOwner } from "./getOrCreatePasskeyOwner.js";
@@ -0,0 +1,4 @@
1
+ export { getPasskeyOwner } from "./getPasskeyOwner.js";
2
+ export { createPasskeyOwner } from "./createPasskeyOwner.js";
3
+ export { getOrCreatePasskeyOwner } from "./getOrCreatePasskeyOwner.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC","sourcesContent":["export { getPasskeyOwner } from \"./getPasskeyOwner.js\";\nexport { createPasskeyOwner } from \"./createPasskeyOwner.js\";\nexport { getOrCreatePasskeyOwner } from \"./getOrCreatePasskeyOwner.js\";\n"]}
@@ -0,0 +1,12 @@
1
+ export type ByteArray = Uint8Array;
2
+ export type Hex = `0x${string}`;
3
+ export type Hash = `0x${string}`;
4
+ export type LogTopic = Hex | Hex[] | null;
5
+ export type SignableMessage = string | {
6
+ raw: Hex | ByteArray;
7
+ };
8
+ export type Signature = {
9
+ r: Hex;
10
+ s: Hex;
11
+ v: bigint;
12
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/types.ts"],"names":[],"mappings":"","sourcesContent":["export type ByteArray = Uint8Array;\nexport type Hex = `0x${string}`;\nexport type Hash = `0x${string}`;\nexport type LogTopic = Hex | Hex[] | null;\nexport type SignableMessage =\n | string\n | {\n /** Raw data representation of the message. */\n raw: Hex | ByteArray;\n };\nexport type Signature = {\n // TODO(v2): Make `bigint`\n r: Hex;\n // TODO(v2): Make `bigint`\n s: Hex;\n // TODO(v2): `v` to `recovery`\n v: bigint;\n};\n"]}
@@ -0,0 +1,11 @@
1
+ import type { Hex, Signature } from "./types.js";
2
+ import type { SignTypedDataParams } from "@alchemy/aa-core";
3
+ export declare const publicKey = "public-key";
4
+ export declare const es256 = -7;
5
+ export declare const generateRandomBuffer: () => ArrayBuffer;
6
+ export declare const base64UrlEncode: (challenge: ArrayBuffer) => string;
7
+ export declare function signatureToHex({ r, s, v }: Signature): Hex;
8
+ export declare const signMessage: (msg: string | Uint8Array, id: string, walletId: string, projectId: string, credentialId: string, apiUrl?: string) => Promise<`0x${string}`>;
9
+ export declare const signTypedData: (params: SignTypedDataParams, id: string, walletId: string, projectId: string, credentialId: string, apiUrl?: string) => Promise<`0x${string}`>;
10
+ export declare const getCredentials: (projectId: string, apiUrl?: string) => Promise<any>;
11
+ export declare function base64URLStringToBuffer(base64URLString: string): ArrayBuffer;
@@ -0,0 +1,92 @@
1
+ import { browserInit, TurnkeyApi } from "@turnkey/http";
2
+ import axios from "axios";
3
+ import { API_URL } from "../../constants.js";
4
+ import { ethers } from "ethers";
5
+ import { hashTypedData } from "viem";
6
+ browserInit({
7
+ baseUrl: "https://coordinator-beta.turnkey.io",
8
+ });
9
+ export const publicKey = "public-key";
10
+ export const es256 = -7;
11
+ export const generateRandomBuffer = () => {
12
+ const arr = new Uint8Array(32);
13
+ crypto.getRandomValues(arr);
14
+ return arr.buffer;
15
+ };
16
+ export const base64UrlEncode = (challenge) => {
17
+ return Buffer.from(challenge)
18
+ .toString("base64")
19
+ .replace(/\+/g, "-")
20
+ .replace(/\//g, "_")
21
+ .replace(/=/g, "");
22
+ };
23
+ export function signatureToHex({ r, s, v }) {
24
+ return ethers.utils.joinSignature({
25
+ r: `0x${r}`,
26
+ s: `0x${s}`,
27
+ v: parseInt(v) + 27,
28
+ });
29
+ }
30
+ export const signMessage = async (msg, id, walletId, projectId, credentialId, apiUrl = API_URL) => {
31
+ const signedRequest = await TurnkeyApi.federatedPostSignRawPayload({
32
+ body: {
33
+ type: "ACTIVITY_TYPE_SIGN_RAW_PAYLOAD",
34
+ organizationId: id,
35
+ parameters: {
36
+ privateKeyId: walletId,
37
+ payload: ethers.utils.hashMessage(msg),
38
+ encoding: "PAYLOAD_ENCODING_HEXADECIMAL",
39
+ hashFunction: "HASH_FUNCTION_NO_OP",
40
+ },
41
+ timestampMs: String(Date.now()),
42
+ },
43
+ }, {
44
+ publicKey: {
45
+ allowCredentials: [
46
+ {
47
+ id: base64URLStringToBuffer(credentialId),
48
+ type: publicKey,
49
+ },
50
+ ],
51
+ },
52
+ });
53
+ const proxyResponse = await axios.post(`${apiUrl}/projects/${projectId}/wallets/proxy`, {
54
+ signedRequest,
55
+ });
56
+ const { activity } = await proxyResponse.data;
57
+ if (activity.status === "ACTIVITY_STATUS_COMPLETED") {
58
+ let result = activity?.result?.signRawPayloadResult;
59
+ if (result) {
60
+ const assembled = signatureToHex(result);
61
+ if (assembled) {
62
+ return assembled;
63
+ }
64
+ }
65
+ }
66
+ return "0x";
67
+ };
68
+ export const signTypedData = async (params, id, walletId, projectId, credentialId, apiUrl = API_URL) => {
69
+ const hashToSign = hashTypedData(params);
70
+ return await signMessage(hashToSign, id, walletId, projectId, credentialId, apiUrl);
71
+ };
72
+ export const getCredentials = async (projectId, apiUrl = API_URL) => {
73
+ const response = await axios.get(`${apiUrl}/projects/${projectId}/wallets`);
74
+ const credentials = response.data;
75
+ return credentials.map((credential) => ({
76
+ id: base64URLStringToBuffer(credential),
77
+ type: "public-key",
78
+ }));
79
+ };
80
+ export function base64URLStringToBuffer(base64URLString) {
81
+ const base64 = base64URLString.replace(/-/g, "+").replace(/_/g, "/");
82
+ const padLength = (4 - (base64.length % 4)) % 4;
83
+ const padded = base64.padEnd(base64.length + padLength, "=");
84
+ const binary = atob(padded);
85
+ const buffer = new ArrayBuffer(binary.length);
86
+ const bytes = new Uint8Array(buffer);
87
+ for (let i = 0; i < binary.length; i++) {
88
+ bytes[i] = binary.charCodeAt(i);
89
+ }
90
+ return buffer;
91
+ }
92
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { browserInit, TurnkeyApi } from \"@turnkey/http\";\nimport axios from \"axios\";\nimport { API_URL } from \"../../constants.js\";\nimport type { Hex, Signature } from \"./types.js\";\nimport { ethers } from \"ethers\";\nimport type { SignTypedDataParams } from \"@alchemy/aa-core\";\nimport { hashTypedData } from \"viem\";\n\nbrowserInit({\n baseUrl: \"https://coordinator-beta.turnkey.io\",\n});\n\nexport const publicKey = \"public-key\";\n\nexport const es256 = -7;\n\nexport const generateRandomBuffer = (): ArrayBuffer => {\n const arr = new Uint8Array(32);\n //@ts-expect-error\n crypto.getRandomValues(arr);\n return arr.buffer;\n};\n\nexport const base64UrlEncode = (challenge: ArrayBuffer): string => {\n return Buffer.from(challenge)\n .toString(\"base64\")\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=/g, \"\");\n};\n\n// VIEM\n// export function signatureToHex({ r, s, v }: Signature): Hex {\n// return `0x${new secp256k1.Signature(\n// hexToBigInt(r),\n// hexToBigInt(s),\n// ).toCompactHex()}${toHex(v).slice(2)}`\n// }\n\n//ETHERS\nexport function signatureToHex({ r, s, v }: Signature): Hex {\n return ethers.utils.joinSignature({\n r: `0x${r}`,\n s: `0x${s}`,\n //@ts-expect-error\n v: parseInt(v) + 27,\n }) as Hex;\n}\n\nexport const signMessage = async (\n msg: string | Uint8Array,\n id: string,\n walletId: string,\n projectId: string,\n credentialId: string,\n apiUrl = API_URL\n) => {\n const signedRequest = await TurnkeyApi.federatedPostSignRawPayload(\n {\n body: {\n type: \"ACTIVITY_TYPE_SIGN_RAW_PAYLOAD\",\n organizationId: id,\n parameters: {\n privateKeyId: walletId,\n payload: ethers.utils.hashMessage(msg),\n encoding: \"PAYLOAD_ENCODING_HEXADECIMAL\",\n hashFunction: \"HASH_FUNCTION_NO_OP\",\n },\n timestampMs: String(Date.now()),\n },\n },\n {\n publicKey: {\n allowCredentials: [\n {\n id: base64URLStringToBuffer(credentialId),\n type: publicKey,\n },\n ],\n },\n }\n );\n const proxyResponse = await axios.post(\n `${apiUrl}/projects/${projectId}/wallets/proxy`,\n {\n signedRequest,\n }\n );\n const { activity } = await proxyResponse.data;\n if (activity.status === \"ACTIVITY_STATUS_COMPLETED\") {\n let result = activity?.result?.signRawPayloadResult;\n\n if (result) {\n const assembled = signatureToHex(result);\n if (assembled) {\n return assembled;\n }\n }\n }\n return \"0x\";\n};\n\nexport const signTypedData = async (\n params: SignTypedDataParams,\n id: string,\n walletId: string,\n projectId: string,\n credentialId: string,\n apiUrl = API_URL\n) => {\n const hashToSign = hashTypedData(params);\n return await signMessage(\n hashToSign,\n id,\n walletId,\n projectId,\n credentialId,\n apiUrl\n );\n};\n\nexport const getCredentials = async (projectId: string, apiUrl = API_URL) => {\n const response = await axios.get(`${apiUrl}/projects/${projectId}/wallets`);\n const credentials = response.data;\n return credentials.map((credential: string) => ({\n id: base64URLStringToBuffer(credential),\n type: \"public-key\",\n }));\n};\n\n// https://github.com/MasterKale/SimpleWebAuthn/blob/master/packages/browser/src/helpers/base64URLStringToBuffer.ts#L8\nexport function base64URLStringToBuffer(base64URLString: string): ArrayBuffer {\n // Convert from Base64URL to Base64\n const base64 = base64URLString.replace(/-/g, \"+\").replace(/_/g, \"/\");\n /**\n * Pad with '=' until it's a multiple of four\n * (4 - (85 % 4 = 1) = 3) % 4 = 3 padding\n * (4 - (86 % 4 = 2) = 2) % 4 = 2 padding\n * (4 - (87 % 4 = 3) = 1) % 4 = 1 padding\n * (4 - (88 % 4 = 0) = 4) % 4 = 0 padding\n */\n const padLength = (4 - (base64.length % 4)) % 4;\n const padded = base64.padEnd(base64.length + padLength, \"=\");\n\n // Convert to a binary string\n const binary = atob(padded);\n\n // Convert binary string to buffer\n const buffer = new ArrayBuffer(binary.length);\n const bytes = new Uint8Array(buffer);\n\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n\n return buffer;\n}\n"]}
@@ -12,12 +12,4 @@ export declare function getGasTokenAddress(gasToken: SupportedGasToken, chainId:
12
12
  export declare const convertWalletClientToAccountSigner: (client: WalletClient) => SmartAccountSigner;
13
13
  export declare const isWallet: (signer: any) => signer is Wallet;
14
14
  export declare const convertEthersSignerToAccountSigner: (signer: Signer | Wallet) => SmartAccountSigner;
15
- export declare function getRPCProviderOwner(web3Provider: any): SmartAccountSigner;
16
- export declare function getCustodialOwner(identifier: string, { custodialFilePath, privateKey, publicKey, keyId, apiUrl, }: {
17
- privateKey?: string;
18
- publicKey?: string;
19
- keyId?: string;
20
- custodialFilePath?: string;
21
- apiUrl?: string;
22
- }): Promise<SmartAccountSigner | undefined>;
23
15
  export declare const randomHexString: (length: number) => Hex;
@@ -1,9 +1,7 @@
1
1
  import { encodePacked, fromBytes, toBytes, toHex, } from "viem";
2
2
  import { Signer } from "@ethersproject/abstract-signer";
3
3
  import { Wallet } from "@ethersproject/wallet";
4
- import { Web3Provider } from "@ethersproject/providers";
5
- import { API_URL, gasTokenChainAddresses } from "./constants.js";
6
- import axios from "axios";
4
+ import { gasTokenChainAddresses } from "./constants.js";
7
5
  const encodeCall = (_tx) => {
8
6
  const data = toBytes(_tx.data);
9
7
  const encoded = encodePacked(["uint8", "address", "uint256", "uint256", "bytes"], [
@@ -51,57 +49,5 @@ export const convertEthersSignerToAccountSigner = (signer) => {
51
49
  },
52
50
  };
53
51
  };
54
- export function getRPCProviderOwner(web3Provider) {
55
- const provider = new Web3Provider(web3Provider);
56
- const signer = provider.getSigner();
57
- return {
58
- getAddress: async () => Promise.resolve((await signer.getAddress())),
59
- signMessage: async (msg) => (await signer.signMessage(msg)),
60
- signTypedData: async (params) => (await signer._signTypedData(params.domain, params.types, params.message)),
61
- };
62
- }
63
- export async function getCustodialOwner(identifier, { custodialFilePath, privateKey, publicKey, keyId, apiUrl = API_URL, }) {
64
- if (custodialFilePath) {
65
- let fsModule;
66
- try {
67
- fsModule = require.resolve("fs") && require("fs");
68
- }
69
- catch (error) {
70
- console.log("FS module not available. Skipping FS operation...");
71
- return;
72
- }
73
- const data = fsModule.readFileSync(custodialFilePath, "utf8");
74
- const values = data.split("\n");
75
- [privateKey, publicKey, keyId] = values;
76
- }
77
- let TurnkeySigner;
78
- try {
79
- TurnkeySigner =
80
- require.resolve("@turnkey/ethers") &&
81
- require("@turnkey/ethers").TurnkeySigner;
82
- }
83
- catch (error) {
84
- console.log("@turnkey/ethers module not available. Skipping FS operation...");
85
- return;
86
- }
87
- if (!privateKey || !publicKey || !keyId) {
88
- throw new Error("Must provide custodialFilePath or privateKey, publicKey, and keyId.");
89
- }
90
- const response = await axios.post(`${apiUrl}/wallets/${identifier}`, {
91
- keyId,
92
- });
93
- const turnkeySigner = new TurnkeySigner({
94
- apiPublicKey: publicKey,
95
- apiPrivateKey: privateKey,
96
- baseUrl: "https://coordinator-beta.turnkey.io",
97
- organizationId: keyId,
98
- privateKeyId: response.data.walletId,
99
- });
100
- return {
101
- getAddress: async () => (await turnkeySigner.getAddress()),
102
- signMessage: async (msg) => (await turnkeySigner.signMessage(msg)),
103
- signTypedData: async (params) => (await turnkeySigner.signTypedData(params.domain, params.types, params.message)),
104
- };
105
- }
106
52
  export const randomHexString = (length) => toHex(Array.from({ length }, () => Math.floor(Math.random() * 16).toString(16)).join(""));
107
53
  //# sourceMappingURL=utils.js.map