@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,4 +18,5 @@ 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";
21
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","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;AACpD,mBAAmB,qCAAqC,CAAC;AACzD,YAAY,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AAC1F,YAAY,EAAE,yBAAyB,EAAE,MAAM,qDAAqD,CAAC;AACrG,YAAY,EAAE,+BAA+B,EAAE,MAAM,4DAA4D,CAAC;AAClH,YAAY,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAGpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAChF,YAAY,EACV,uBAAuB,EACvB,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,6CAA6C,CAAC;AACrD,mBAAmB,8CAA8C,CAAC;AAClE,cAAc,8CAA8C,CAAC;AAG7D,mBAAmB,qCAAqC,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,YAAY,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,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"}
1
+ {"version":3,"file":"index.d.ts","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;AACpD,mBAAmB,qCAAqC,CAAC;AACzD,YAAY,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AAC1F,YAAY,EAAE,yBAAyB,EAAE,MAAM,qDAAqD,CAAC;AACrG,YAAY,EAAE,+BAA+B,EAAE,MAAM,4DAA4D,CAAC;AAClH,YAAY,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAGpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAChF,YAAY,EACV,uBAAuB,EACvB,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,6CAA6C,CAAC;AACrD,mBAAmB,8CAA8C,CAAC;AAClE,cAAc,8CAA8C,CAAC;AAG7D,mBAAmB,qCAAqC,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,YAAY,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,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"}
@@ -0,0 +1,9 @@
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>;
9
+ //# sourceMappingURL=getCustodialOwner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCustodialOwner.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/owner/getCustodialOwner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAM3D,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,EACE,iBAAiB,EACjB,UAAU,EACV,SAAS,EACT,KAAK,EACL,MAAgB,GACjB,EAAE;IACD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAoDzC"}
@@ -0,0 +1,3 @@
1
+ import type { SmartAccountSigner } from "@alchemy/aa-core";
2
+ export declare function getRPCProviderOwner(web3Provider: any): SmartAccountSigner;
3
+ //# sourceMappingURL=getRPCProviderOwner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getRPCProviderOwner.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/owner/getRPCProviderOwner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAKhF,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,GAAG,GAAG,kBAAkB,CAgBzE"}
@@ -0,0 +1,3 @@
1
+ export { getCustodialOwner } from "./getCustodialOwner.js";
2
+ export { getRPCProviderOwner } from "./getRPCProviderOwner.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","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"}
@@ -0,0 +1,8 @@
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>;
8
+ //# sourceMappingURL=createPasskeyOwner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createPasskeyOwner.d.ts","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/createPasskeyOwner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAuB,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAYhF,wBAAsB,kBAAkB,CAAC,EACvC,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,MAAgB,GACjB,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAAC;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAyE1C"}
@@ -0,0 +1,7 @@
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>;
7
+ //# sourceMappingURL=getOrCreatePasskeyOwner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getOrCreatePasskeyOwner.d.ts","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAM3D,wBAAsB,uBAAuB,CAAC,EAC5C,IAAI,EACJ,SAAS,EACT,MAAgB,GACjB,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAO1C"}
@@ -0,0 +1,6 @@
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>;
6
+ //# sourceMappingURL=getPasskeyOwner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPasskeyOwner.d.ts","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/getPasskeyOwner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAuB,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAUhF,wBAAsB,eAAe,CAAC,EACpC,SAAS,EACT,MAAgB,GACjB,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAkD1C"}
@@ -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.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","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"}
@@ -0,0 +1,14 @@
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 data representation of the message. */
7
+ raw: Hex | ByteArray;
8
+ };
9
+ export type Signature = {
10
+ r: Hex;
11
+ s: Hex;
12
+ v: bigint;
13
+ };
14
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC;AACnC,MAAM,MAAM,GAAG,GAAG,KAAK,MAAM,EAAE,CAAC;AAChC,MAAM,MAAM,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;AACjC,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC;AAC1C,MAAM,MAAM,eAAe,GACvB,MAAM,GACN;IACE,8CAA8C;IAC9C,GAAG,EAAE,GAAG,GAAG,SAAS,CAAC;CACtB,CAAC;AACN,MAAM,MAAM,SAAS,GAAG;IAEtB,CAAC,EAAE,GAAG,CAAC;IAEP,CAAC,EAAE,GAAG,CAAC;IAEP,CAAC,EAAE,MAAM,CAAC;CACX,CAAC"}
@@ -0,0 +1,12 @@
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;
12
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAO5D,eAAO,MAAM,SAAS,eAAe,CAAC;AAEtC,eAAO,MAAM,KAAK,KAAK,CAAC;AAExB,eAAO,MAAM,oBAAoB,QAAO,WAKvC,CAAC;AAEF,eAAO,MAAM,eAAe,cAAe,WAAW,KAAG,MAMxD,CAAC;AAWF,wBAAgB,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,GAAG,GAAG,CAO1D;AAED,eAAO,MAAM,WAAW,QACjB,MAAM,GAAG,UAAU,MACpB,MAAM,YACA,MAAM,aACL,MAAM,gBACH,MAAM,4CA8CrB,CAAC;AAEF,eAAO,MAAM,aAAa,WAChB,mBAAmB,MACvB,MAAM,YACA,MAAM,aACL,MAAM,gBACH,MAAM,4CAYrB,CAAC;AAEF,eAAO,MAAM,cAAc,cAAqB,MAAM,kCAOrD,CAAC;AAGF,wBAAgB,uBAAuB,CAAC,eAAe,EAAE,MAAM,GAAG,WAAW,CAyB5E"}
@@ -12,13 +12,5 @@ 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;
24
16
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/kernel-zerodev/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,GAAG,EACR,KAAK,YAAY,EAElB,MAAM,MAAM,CAAC;AACd,OAAO,KAAK,EAEV,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAuB,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAG/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,MAAM,MAAM,iCAAiC,GAAG,qBAAqB,GAAG;IACtE,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,sCAAsC,GAChD,iCAAiC,EAAE,CAAC;AAgBtC,eAAO,MAAM,eAAe,oDAEzB,GAEF,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,EAAE,MAAM,GACd,GAAG,GAAG,SAAS,CAKjB;AAED,eAAO,MAAM,kCAAkC,WACrC,YAAY,KACnB,kBAiBF,CAAC;AAEF,eAAO,MAAM,QAAQ,WAAY,GAAG,qBACW,CAAC;AAEhD,eAAO,MAAM,kCAAkC,WACrC,MAAM,GAAG,MAAM,KACtB,kBAiBF,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,GAAG,GAAG,kBAAkB,CAgBzE;AAED,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,EACE,iBAAiB,EACjB,UAAU,EACV,SAAS,EACT,KAAK,EACL,MAAgB,GACjB,EAAE;IACD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAoDzC;AAED,eAAO,MAAM,eAAe,WAAY,MAAM,KAAG,GAK9C,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/kernel-zerodev/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,GAAG,EACR,KAAK,YAAY,EAElB,MAAM,MAAM,CAAC;AACd,OAAO,KAAK,EAEV,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAuB,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,MAAM,MAAM,iCAAiC,GAAG,qBAAqB,GAAG;IACtE,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,sCAAsC,GAChD,iCAAiC,EAAE,CAAC;AAgBtC,eAAO,MAAM,eAAe,oDAEzB,GAEF,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,EAAE,MAAM,GACd,GAAG,GAAG,SAAS,CAKjB;AAED,eAAO,MAAM,kCAAkC,WACrC,YAAY,KACnB,kBAiBF,CAAC;AAEF,eAAO,MAAM,QAAQ,WAAY,GAAG,qBACW,CAAC;AAEhD,eAAO,MAAM,kCAAkC,WACrC,MAAM,GAAG,MAAM,KACtB,kBAiBF,CAAC;AAEF,eAAO,MAAM,eAAe,WAAY,MAAM,KAAG,GAK9C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zerodev/sdk",
3
- "version": "4.0.2-alpha.25",
3
+ "version": "4.0.2-passkey.0",
4
4
  "description": "A collection of ERC-4337 compliant smart contract account interfaces",
5
5
  "author": "ZeroDev",
6
6
  "license": "MIT",
@@ -12,6 +12,7 @@
12
12
  "typings": "./dist/types/index.d.ts",
13
13
  "sideEffects": false,
14
14
  "files": [
15
+ "passkey",
15
16
  "dist",
16
17
  "src/**/*.ts",
17
18
  "!dist/**/*.tsbuildinfo",
@@ -26,6 +27,11 @@
26
27
  "import": "./dist/esm/index.js",
27
28
  "default": "./dist/cjs/index.js"
28
29
  },
30
+ "./passkey": {
31
+ "import": "./dist/esm/kernel-zerodev/owner/passkey/index.js",
32
+ "default": "./dist/cjs/kernel-zerodev/owner/passkey/index.js",
33
+ "types": "./dist/types/kernel-zerodev/owner/passkey/index.d.ts"
34
+ },
29
35
  "./package.json": "./package.json"
30
36
  },
31
37
  "scripts": {
@@ -0,0 +1,5 @@
1
+ {
2
+ "main": "../dist/cjs/kernel-zerodev/owner/passkey/index.js",
3
+ "module": "../dist/esm/kernel-zerodev/owner/passkey/index.js",
4
+ "types": "../dist/types/kernel-zerodev/owner/passkey/index.d.ts"
5
+ }
package/src/index.ts CHANGED
@@ -38,3 +38,6 @@ export { getChainId } from "./kernel-zerodev/api/index.js";
38
38
  export { ZeroDevEthersProvider } from "./kernel-zerodev/ethers-provider/ethers-provider.js";
39
39
 
40
40
  export * as constants from "./kernel-zerodev/constants.js";
41
+
42
+ // Owner exports
43
+ export * from "./kernel-zerodev/owner/index.js";
@@ -0,0 +1,74 @@
1
+ import type { SmartAccountSigner } from "@alchemy/aa-core";
2
+ import { API_URL } from "../constants.js";
3
+ import axios from "axios";
4
+ import type { Hex } from "viem";
5
+ import type { SignTypedDataParams } from "@alchemy/aa-core";
6
+
7
+ export async function getCustodialOwner(
8
+ identifier: string,
9
+ {
10
+ custodialFilePath,
11
+ privateKey,
12
+ publicKey,
13
+ keyId,
14
+ apiUrl = API_URL,
15
+ }: {
16
+ privateKey?: string;
17
+ publicKey?: string;
18
+ keyId?: string;
19
+ custodialFilePath?: string;
20
+ apiUrl?: string;
21
+ }
22
+ ): Promise<SmartAccountSigner | undefined> {
23
+ if (custodialFilePath) {
24
+ let fsModule;
25
+ try {
26
+ fsModule = require.resolve("fs") && require("fs");
27
+ } catch (error) {
28
+ console.log("FS module not available. Skipping FS operation...");
29
+ return;
30
+ }
31
+ const data = fsModule.readFileSync(custodialFilePath, "utf8");
32
+ const values = data.split("\n");
33
+ [privateKey, publicKey, keyId] = values;
34
+ }
35
+ let TurnkeySigner;
36
+ try {
37
+ TurnkeySigner =
38
+ require.resolve("@turnkey/ethers") &&
39
+ require("@turnkey/ethers").TurnkeySigner;
40
+ } catch (error) {
41
+ console.log(
42
+ "@turnkey/ethers module not available. Skipping FS operation..."
43
+ );
44
+ return;
45
+ }
46
+ if (!privateKey || !publicKey || !keyId) {
47
+ throw new Error(
48
+ "Must provide custodialFilePath or privateKey, publicKey, and keyId."
49
+ );
50
+ }
51
+
52
+ const response = await axios.post(`${apiUrl}/wallets/${identifier}`, {
53
+ keyId,
54
+ });
55
+
56
+ const turnkeySigner = new TurnkeySigner({
57
+ apiPublicKey: publicKey,
58
+ apiPrivateKey: privateKey,
59
+ baseUrl: "https://coordinator-beta.turnkey.io",
60
+ organizationId: keyId,
61
+ privateKeyId: response.data.walletId,
62
+ });
63
+ return {
64
+ getAddress: async () => (await turnkeySigner.getAddress()) as `0x${string}`,
65
+ signMessage: async (msg: Uint8Array | string) =>
66
+ (await turnkeySigner.signMessage(msg)) as `0x${string}`,
67
+ signTypedData: async (params: SignTypedDataParams) =>
68
+ (await turnkeySigner.signTypedData(
69
+ params.domain,
70
+ params.types,
71
+ params.message
72
+ )) as Hex,
73
+ };
74
+ }
@@ -0,0 +1,22 @@
1
+ import type { SignTypedDataParams, SmartAccountSigner } from "@alchemy/aa-core";
2
+ import { Web3Provider, type ExternalProvider } from "@ethersproject/providers";
3
+ import { type TypedDataField } from "@ethersproject/abstract-signer";
4
+ import type { Hex } from "viem";
5
+
6
+ export function getRPCProviderOwner(web3Provider: any): SmartAccountSigner {
7
+ const provider = new Web3Provider(web3Provider as ExternalProvider);
8
+ const signer = provider.getSigner();
9
+
10
+ return {
11
+ getAddress: async () =>
12
+ Promise.resolve((await signer.getAddress()) as `0x${string}`),
13
+ signMessage: async (msg: Uint8Array | string) =>
14
+ (await signer.signMessage(msg)) as `0x${string}`,
15
+ signTypedData: async (params: SignTypedDataParams) =>
16
+ (await signer._signTypedData(
17
+ params.domain!,
18
+ params.types as unknown as Record<string, TypedDataField[]>,
19
+ params.message
20
+ )) as Hex,
21
+ };
22
+ }
@@ -0,0 +1,2 @@
1
+ export { getCustodialOwner } from "./getCustodialOwner.js";
2
+ export { getRPCProviderOwner } from "./getRPCProviderOwner.js";
@@ -0,0 +1,98 @@
1
+ import { getWebAuthnAttestation } from "@turnkey/http";
2
+ import axios from "axios";
3
+ import type { SignTypedDataParams, SmartAccountSigner } from "@alchemy/aa-core";
4
+ import {
5
+ base64UrlEncode,
6
+ es256,
7
+ generateRandomBuffer,
8
+ getCredentials,
9
+ publicKey,
10
+ signMessage,
11
+ signTypedData,
12
+ } from "./utils.js";
13
+ import { API_URL } from "../../constants.js";
14
+
15
+ export async function createPasskeyOwner({
16
+ name,
17
+ projectId,
18
+ fallback,
19
+ apiUrl = API_URL,
20
+ }: {
21
+ name: string;
22
+ projectId: string;
23
+ fallback?: () => Promise<SmartAccountSigner | undefined>;
24
+ apiUrl?: string;
25
+ }): Promise<SmartAccountSigner | undefined> {
26
+ //@ts-expect-error
27
+ if (typeof window !== "undefined") {
28
+ const challenge = generateRandomBuffer();
29
+ try {
30
+ const attestation = await getWebAuthnAttestation({
31
+ publicKey: {
32
+ rp: {
33
+ //@ts-expect-error
34
+ id: window.location.hostname,
35
+ //@ts-expect-error
36
+ name: window.location.hostname,
37
+ },
38
+ authenticatorSelection: {
39
+ residentKey: "required", // or 'preferred', 'discouraged'
40
+ userVerification: "required",
41
+ },
42
+ excludeCredentials: await getCredentials(projectId),
43
+ extensions: { credProps: true },
44
+ challenge,
45
+ pubKeyCredParams: [
46
+ {
47
+ type: publicKey,
48
+ alg: es256,
49
+ },
50
+ ],
51
+ user: {
52
+ id: Uint8Array.from(name, (c) => c.charCodeAt(0)),
53
+ name,
54
+ displayName: name,
55
+ },
56
+ },
57
+ });
58
+ const response = await axios.post(
59
+ `${apiUrl}/projects/${projectId}/wallets`,
60
+ {
61
+ challenge: base64UrlEncode(challenge),
62
+ name,
63
+ attestation,
64
+ }
65
+ );
66
+ const { id, walletId, address } = await response.data;
67
+ const owner: SmartAccountSigner = {
68
+ getAddress: async () => address,
69
+ signMessage: (msg) =>
70
+ signMessage(
71
+ msg,
72
+ id,
73
+ walletId,
74
+ projectId,
75
+ attestation.credentialId,
76
+ apiUrl
77
+ ),
78
+ signTypedData: (params: SignTypedDataParams) =>
79
+ signTypedData(
80
+ params,
81
+ id,
82
+ walletId,
83
+ projectId,
84
+ attestation.credentialId,
85
+ apiUrl
86
+ ),
87
+ };
88
+ return owner;
89
+ } catch (e) {
90
+ //@ts-expect-error
91
+ if (e instanceof DOMException && e.name === "InvalidStateError") {
92
+ if (fallback) return await fallback();
93
+ }
94
+ console.log(e);
95
+ }
96
+ }
97
+ return;
98
+ }
@@ -0,0 +1,22 @@
1
+ import type { SmartAccountSigner } from "@alchemy/aa-core";
2
+ import { API_URL } from "../../constants.js";
3
+ // import { getPasskeyOwner } from "./getPasskeyOwner.js";
4
+ import { createPasskeyOwner } from "./createPasskeyOwner.js";
5
+ import { getPasskeyOwner } from "./getPasskeyOwner.js";
6
+
7
+ export async function getOrCreatePasskeyOwner({
8
+ name,
9
+ projectId,
10
+ apiUrl = API_URL,
11
+ }: {
12
+ name: string;
13
+ projectId: string;
14
+ apiUrl?: string;
15
+ }): Promise<SmartAccountSigner | undefined> {
16
+ return await createPasskeyOwner({
17
+ name,
18
+ projectId,
19
+ apiUrl,
20
+ fallback: () => getPasskeyOwner({ projectId, apiUrl }),
21
+ });
22
+ }
@@ -0,0 +1,69 @@
1
+ import { getWebAuthnAssertion } from "@turnkey/http/dist/webauthn";
2
+ import axios from "axios";
3
+ import type { SignTypedDataParams, SmartAccountSigner } from "@alchemy/aa-core";
4
+ import {
5
+ base64UrlEncode,
6
+ generateRandomBuffer,
7
+ getCredentials,
8
+ signMessage,
9
+ signTypedData,
10
+ } from "./utils.js";
11
+ import { API_URL } from "../../constants.js";
12
+
13
+ export async function getPasskeyOwner({
14
+ projectId,
15
+ apiUrl = API_URL,
16
+ }: {
17
+ projectId: string;
18
+ apiUrl?: string;
19
+ }): Promise<SmartAccountSigner | undefined> {
20
+ //@ts-expect-error
21
+ if (typeof window !== "undefined") {
22
+ const challenge = generateRandomBuffer();
23
+ try {
24
+ const assertion = JSON.parse(
25
+ await getWebAuthnAssertion(base64UrlEncode(challenge), {
26
+ publicKey: {
27
+ //@ts-expect-error
28
+ rpId: window.location.hostname,
29
+ userVerification: "required",
30
+ allowCredentials: await getCredentials(projectId),
31
+ },
32
+ })
33
+ );
34
+ const response = await axios.post(
35
+ `${apiUrl}/projects/${projectId}/wallets/${assertion.credentialId}`,
36
+ {
37
+ challenge: base64UrlEncode(challenge),
38
+ assertion,
39
+ }
40
+ );
41
+ const { id, walletId, address } = await response.data;
42
+ const owner: SmartAccountSigner = {
43
+ getAddress: async () => address,
44
+ signMessage: (msg) =>
45
+ signMessage(
46
+ msg,
47
+ id,
48
+ walletId,
49
+ projectId,
50
+ assertion.credentialId,
51
+ apiUrl
52
+ ),
53
+ signTypedData: (params: SignTypedDataParams) =>
54
+ signTypedData(
55
+ params,
56
+ id,
57
+ walletId,
58
+ projectId,
59
+ assertion.credentialId,
60
+ apiUrl
61
+ ),
62
+ };
63
+ return owner;
64
+ } catch (e) {
65
+ console.log(e);
66
+ }
67
+ }
68
+ return;
69
+ }
@@ -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,18 @@
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 =
6
+ | string
7
+ | {
8
+ /** Raw data representation of the message. */
9
+ raw: Hex | ByteArray;
10
+ };
11
+ export type Signature = {
12
+ // TODO(v2): Make `bigint`
13
+ r: Hex;
14
+ // TODO(v2): Make `bigint`
15
+ s: Hex;
16
+ // TODO(v2): `v` to `recovery`
17
+ v: bigint;
18
+ };