@zerodev/sdk 4.0.26 → 4.0.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -693
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/kernel-zerodev/account.d.ts +1 -0
- package/dist/cjs/kernel-zerodev/account.js +27 -5
- package/dist/cjs/kernel-zerodev/account.js.map +1 -1
- package/dist/cjs/kernel-zerodev/api/index.d.ts +2 -0
- package/dist/cjs/kernel-zerodev/api/index.js +18 -1
- package/dist/cjs/kernel-zerodev/api/index.js.map +1 -1
- package/dist/cjs/kernel-zerodev/ethers-provider/account-signer.d.ts +1 -0
- package/dist/cjs/kernel-zerodev/ethers-provider/account-signer.js +6 -0
- package/dist/cjs/kernel-zerodev/ethers-provider/account-signer.js.map +1 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/createPasskeyOwner.js.map +1 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/exceptions.js +1 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/exceptions.js.map +1 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/getAutocompletePasskeyOwner.js +3 -3
- package/dist/cjs/kernel-zerodev/owner/passkey/getAutocompletePasskeyOwner.js.map +1 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/getPasskeyOwner.d.ts +1 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/getPasskeyOwner.js +4 -2
- package/dist/cjs/kernel-zerodev/owner/passkey/getPasskeyOwner.js.map +1 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/index.d.ts +1 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/index.js.map +1 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/utils.js +2 -2
- package/dist/cjs/kernel-zerodev/owner/passkey/utils.js.map +1 -1
- package/dist/cjs/kernel-zerodev/paymaster/token-paymaster.js +3 -1
- package/dist/cjs/kernel-zerodev/paymaster/token-paymaster.js.map +1 -1
- package/dist/cjs/kernel-zerodev/provider.js +2 -2
- package/dist/cjs/kernel-zerodev/provider.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/recovery-validator.d.ts +8 -5
- package/dist/cjs/kernel-zerodev/validator/recovery-validator.js +50 -9
- package/dist/cjs/kernel-zerodev/validator/recovery-validator.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator-provider/recovery-provider.js +20 -32
- package/dist/cjs/kernel-zerodev/validator-provider/recovery-provider.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/kernel-zerodev/account.d.ts +1 -0
- package/dist/esm/kernel-zerodev/account.js +29 -7
- package/dist/esm/kernel-zerodev/account.js.map +1 -1
- package/dist/esm/kernel-zerodev/api/index.d.ts +2 -0
- package/dist/esm/kernel-zerodev/api/index.js +16 -0
- package/dist/esm/kernel-zerodev/api/index.js.map +1 -1
- package/dist/esm/kernel-zerodev/ethers-provider/account-signer.d.ts +1 -0
- package/dist/esm/kernel-zerodev/ethers-provider/account-signer.js +6 -0
- package/dist/esm/kernel-zerodev/ethers-provider/account-signer.js.map +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/createPasskeyOwner.js.map +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/exceptions.js +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/exceptions.js.map +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/getAutocompletePasskeyOwner.js +3 -3
- package/dist/esm/kernel-zerodev/owner/passkey/getAutocompletePasskeyOwner.js.map +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/getPasskeyOwner.d.ts +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/getPasskeyOwner.js +4 -2
- package/dist/esm/kernel-zerodev/owner/passkey/getPasskeyOwner.js.map +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/index.d.ts +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/index.js +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/index.js.map +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/utils.js +2 -2
- package/dist/esm/kernel-zerodev/owner/passkey/utils.js.map +1 -1
- package/dist/esm/kernel-zerodev/paymaster/token-paymaster.js +4 -2
- package/dist/esm/kernel-zerodev/paymaster/token-paymaster.js.map +1 -1
- package/dist/esm/kernel-zerodev/provider.js +2 -2
- package/dist/esm/kernel-zerodev/provider.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/recovery-validator.d.ts +8 -5
- package/dist/esm/kernel-zerodev/validator/recovery-validator.js +52 -11
- package/dist/esm/kernel-zerodev/validator/recovery-validator.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator-provider/recovery-provider.js +23 -32
- package/dist/esm/kernel-zerodev/validator-provider/recovery-provider.js.map +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/account.d.ts +1 -0
- package/dist/types/kernel-zerodev/account.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/api/index.d.ts +2 -0
- package/dist/types/kernel-zerodev/api/index.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/ethers-provider/account-signer.d.ts +1 -0
- package/dist/types/kernel-zerodev/ethers-provider/account-signer.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/owner/passkey/exceptions.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/owner/passkey/getAutocompletePasskeyOwner.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/owner/passkey/getPasskeyOwner.d.ts +1 -1
- package/dist/types/kernel-zerodev/owner/passkey/getPasskeyOwner.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/owner/passkey/index.d.ts +1 -1
- package/dist/types/kernel-zerodev/owner/passkey/utils.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/paymaster/token-paymaster.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator/recovery-validator.d.ts +8 -5
- package/dist/types/kernel-zerodev/validator/recovery-validator.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator-provider/recovery-provider.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -0
- package/src/kernel-zerodev/account.ts +30 -9
- package/src/kernel-zerodev/api/index.ts +27 -0
- package/src/kernel-zerodev/ethers-provider/account-signer.ts +9 -0
- package/src/kernel-zerodev/owner/passkey/createPasskeyOwner.ts +4 -4
- package/src/kernel-zerodev/owner/passkey/exceptions.ts +2 -2
- package/src/kernel-zerodev/owner/passkey/getAutocompletePasskeyOwner.ts +11 -9
- package/src/kernel-zerodev/owner/passkey/getPasskeyOwner.ts +5 -3
- package/src/kernel-zerodev/owner/passkey/index.ts +1 -1
- package/src/kernel-zerodev/owner/passkey/utils.ts +11 -6
- package/src/kernel-zerodev/paymaster/token-paymaster.ts +12 -2
- package/src/kernel-zerodev/provider.ts +2 -2
- package/src/kernel-zerodev/validator/recovery-validator.ts +59 -12
- package/src/kernel-zerodev/validator-provider/recovery-provider.ts +38 -36
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,iEAA+C;AAG/C,8DAG4C;AAF1C,wGAAA,aAAa,OAAA;AACb,8GAAA,mBAAmB,OAAA;AAErB,sEAAoD;AAGpD,gGAAqF;AAA5E,0HAAA,cAAc,OAAA;AAGvB,uEAAgF;AAAvE,4GAAA,iBAAiB,OAAA;AAO1B,+EAA6D;AAI7D,0DAAyE;AAAhE,wHAAA,0BAA0B,OAAA;AAEnC,4DAA0E;AAAjE,8GAAA,eAAe,OAAA;AAAE,wGAAA,SAAS,OAAA;AAGnC,4DAA0C;AAC1C,0DAA2D;AAAlD,sGAAA,UAAU,OAAA;AACnB,0FAA4F;AAAnF,2HAAA,qBAAqB,OAAA;AAC9B,wFAA0F;AAAjF,yHAAA,oBAAoB,OAAA;AAC7B,6EAA8E;AAArE,sHAAA,kBAAkB,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,iEAA+C;AAG/C,8DAG4C;AAF1C,wGAAA,aAAa,OAAA;AACb,8GAAA,mBAAmB,OAAA;AAErB,sEAAoD;AAGpD,gGAAqF;AAA5E,0HAAA,cAAc,OAAA;AAGvB,uEAAgF;AAAvE,4GAAA,iBAAiB,OAAA;AAO1B,+EAA6D;AAI7D,0DAAyE;AAAhE,wHAAA,0BAA0B,OAAA;AAEnC,4DAA0E;AAAjE,8GAAA,eAAe,OAAA;AAAE,wGAAA,SAAS,OAAA;AAGnC,4DAA0C;AAC1C,0DAA2D;AAAlD,sGAAA,UAAU,OAAA;AACnB,0FAA4F;AAAnF,2HAAA,qBAAqB,OAAA;AAC9B,wFAA0F;AAAjF,yHAAA,oBAAoB,OAAA;AAC7B,6EAA8E;AAArE,sHAAA,kBAAkB,OAAA;AAG3B,2EAA2D;AAG3D,kEAAgD","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 { KernelBaseValidatorParams } from \"./kernel-zerodev/validator/base.js\";\nexport { ParamCondition } from \"./kernel-zerodev/validator/session-key-validator.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, Operation } 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\";\nexport { ZeroDevAccountSigner } from \"./kernel-zerodev/ethers-provider/account-signer.js\";\nexport { EmptyAccountSigner } from \"./kernel-zerodev/signer/empty-account.js\";\n\n// Constant exports\nexport * as constants from \"./kernel-zerodev/constants.js\";\n\n// Owner exports\nexport * from \"./kernel-zerodev/owner/index.js\";\n"]}
|
|
@@ -37,6 +37,7 @@ export declare class KernelSmartContractAccount<TTransport extends Transport | F
|
|
|
37
37
|
encodeExecuteDelegate(target: Hex, value: bigint, data: Hex): Promise<Hex>;
|
|
38
38
|
encodeSetExection(): Promise<`0x${string}`>;
|
|
39
39
|
signMessageWith6492(msg: string | Uint8Array): Promise<Hex>;
|
|
40
|
+
signTypedDataWith6492(params: SignTypedDataParams): Promise<Hex>;
|
|
40
41
|
signMessage(msg: Uint8Array | string): Promise<Hex>;
|
|
41
42
|
signTypedData(params: SignTypedDataParams): Promise<Hex>;
|
|
42
43
|
signUserOp(userOp: UserOperationRequest): Promise<Hex>;
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.KernelSmartContractAccount = exports.isKernelAccount = exports.DeploymentState = void 0;
|
|
4
4
|
const viem_1 = require("viem");
|
|
5
|
-
const abitype_1 = require("abitype");
|
|
6
5
|
const KernelAccountAbi_js_1 = require("./abis/KernelAccountAbi.js");
|
|
7
6
|
const KernelFactoryAbi_js_1 = require("./abis/KernelFactoryAbi.js");
|
|
8
7
|
const aa_core_1 = require("@alchemy/aa-core");
|
|
@@ -175,12 +174,35 @@ class KernelSmartContractAccount extends aa_core_1.BaseSmartContractAccount {
|
|
|
175
174
|
throw new Error("Validator not connected");
|
|
176
175
|
}
|
|
177
176
|
const formattedMessage = typeof msg === "string" ? (0, viem_1.toBytes)(msg) : msg;
|
|
178
|
-
let
|
|
177
|
+
let signature = await this.validator.signMessage((0, viem_1.toBytes)((0, viem_1.hashMessage)({ raw: formattedMessage })));
|
|
179
178
|
if (!(await this.isAccountDeployed())) {
|
|
180
|
-
|
|
181
|
-
|
|
179
|
+
signature = (0, aa_core_1.wrapWith6492)({
|
|
180
|
+
factoryAddress: this.factoryAddress,
|
|
181
|
+
initCode: await this.getFactoryInitCode(),
|
|
182
|
+
signature,
|
|
183
|
+
});
|
|
182
184
|
}
|
|
183
|
-
return
|
|
185
|
+
return signature;
|
|
186
|
+
}
|
|
187
|
+
catch (err) {
|
|
188
|
+
console.error("Got Error - ", err.message);
|
|
189
|
+
throw new Error("Message Signing with EIP6492 failed");
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
async signTypedDataWith6492(params) {
|
|
193
|
+
try {
|
|
194
|
+
if (!this.validator) {
|
|
195
|
+
throw new Error("Validator not connected");
|
|
196
|
+
}
|
|
197
|
+
let signature = await this.validator.signTypedData(params);
|
|
198
|
+
if (!(await this.isAccountDeployed())) {
|
|
199
|
+
signature = (0, aa_core_1.wrapWith6492)({
|
|
200
|
+
factoryAddress: this.factoryAddress,
|
|
201
|
+
initCode: await this.getFactoryInitCode(),
|
|
202
|
+
signature,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
return signature;
|
|
184
206
|
}
|
|
185
207
|
catch (err) {
|
|
186
208
|
console.error("Got Error - ", err.message);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/account.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Address } from \"abitype\";\nimport {\n concatHex,\n encodeAbiParameters,\n encodeFunctionData,\n type FallbackTransport,\n hashMessage,\n type Hex,\n toBytes,\n type Transport,\n} from \"viem\";\nimport { parseAbiParameters } from \"abitype\";\nimport { KernelBaseValidator } from \"./validator/base.js\";\nimport { KernelAccountAbi } from \"./abis/KernelAccountAbi.js\";\nimport { KernelFactoryAbi } from \"./abis/KernelFactoryAbi.js\";\nimport {\n type BaseSmartAccountParams,\n BaseSmartContractAccount,\n type BatchUserOperationCallData,\n type UserOperationRequest,\n defineReadOnly,\n getChain,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n BUNDLER_URL,\n ENTRYPOINT_ADDRESS,\n KERNEL_FACTORY_ADDRESS,\n KERNEL_IMPL_ADDRESS,\n MULTISEND_ADDR,\n} from \"./constants.js\";\nimport { encodeMultiSend } from \"./utils.js\";\nimport { MultiSendAbi } from \"./abis/MultiSendAbi.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { getChainId } from \"./api/index.js\";\nimport { createZeroDevPublicErc4337Client } from \"./client/create-client.js\";\nimport type { PaymasterAndBundlerProviders } from \"./paymaster/types.js\";\n\nexport enum DeploymentState {\n UNDEFINED = \"0x0\",\n NOT_DEPLOYED = \"0x1\",\n DEPLOYED = \"0x2\",\n}\nexport interface KernelSmartAccountParams<\n TTransport extends Transport | FallbackTransport = Transport\n> extends Partial<BaseSmartAccountParams<TTransport>> {\n projectId: string;\n factoryAddress?: Address;\n index?: bigint;\n validator?: KernelBaseValidator;\n bundlerProvider?: PaymasterAndBundlerProviders;\n defaultValidator?: KernelBaseValidator;\n initCode?: Hex;\n}\n\nexport function isKernelAccount(\n account: any\n): account is KernelSmartContractAccount {\n return account && account.connectValidator !== undefined;\n}\n\nexport class KernelSmartContractAccount<\n TTransport extends Transport | FallbackTransport = Transport\n> extends BaseSmartContractAccount<TTransport> {\n private readonly factoryAddress: Address;\n private readonly index: bigint;\n private initCode?: Hex;\n validator?: KernelBaseValidator;\n defaultValidator?: KernelBaseValidator;\n\n constructor(params: KernelSmartAccountParams) {\n super({\n ...params,\n entryPointAddress: params.entryPointAddress ?? ENTRYPOINT_ADDRESS,\n chain: params.chain ?? polygonMumbai,\n rpcClient: params.rpcClient ?? BUNDLER_URL,\n });\n this.index = params.index ?? 0n;\n this.factoryAddress = params.factoryAddress ?? KERNEL_FACTORY_ADDRESS;\n this.validator = params.validator;\n this.defaultValidator = params.defaultValidator;\n this.initCode = params.initCode;\n }\n\n public static async init(\n params: KernelSmartAccountParams\n ): Promise<KernelSmartContractAccount> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const rpcClient =\n typeof params.rpcClient === \"string\"\n ? createZeroDevPublicErc4337Client({\n chain,\n rpcUrl: params.rpcClient ?? BUNDLER_URL,\n projectId: params.projectId,\n bundlerProvider: params.bundlerProvider,\n })\n : params.rpcClient;\n const instance = new KernelSmartContractAccount({\n ...params,\n chain,\n rpcClient,\n });\n return instance;\n }\n\n connectValidator(validator: KernelBaseValidator): this {\n defineReadOnly(this, \"validator\", validator);\n return this;\n }\n\n getValidator(): KernelBaseValidator {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n return this.validator;\n }\n\n getDummySignature(): Hex {\n return \"0x00000000870fe151d548a1c527c3804866fab30abf28ed17b79d5fc5149f19ca0819fefc3c57f3da4fdf9b10fab3f2f3dca536467ae44943b9dbb8433efe7760ddd72aaa1c\";\n }\n\n async getInitCode(): Promise<Hex> {\n if (this.deploymentState === DeploymentState.DEPLOYED) {\n return \"0x\";\n }\n const contractCode = await this.rpcProvider.getContractCode(\n await this.getAddress()\n );\n\n if ((contractCode?.length ?? 0) > 2) {\n this.deploymentState = DeploymentState.DEPLOYED;\n return \"0x\";\n } else {\n this.deploymentState = DeploymentState.NOT_DEPLOYED;\n }\n\n return this.initCode ?? this.getAccountInitCode();\n }\n\n getIndex(): bigint {\n return this.index;\n }\n\n async approvePlugin() {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n if (this.defaultValidator && !this.validator.getEnableSignature()) {\n const { executor, selector, validAfter, validUntil } =\n this.validator.getPluginValidatorData();\n const enableSig = await this.defaultValidator.approveExecutor(\n await this.getAddress(),\n selector,\n executor,\n validUntil,\n validAfter,\n this.validator\n );\n this.validator.setEnableSignature(enableSig);\n }\n }\n\n async encodeExecute(target: Hex, value: bigint, data: Hex): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n if (\n target.toLowerCase() === (await this.getAddress()).toLowerCase() &&\n this.validator.shouldDelegateViaFallback()\n ) {\n return data;\n } else {\n return this.encodeExecuteAction(target, value, data, 0);\n }\n }\n\n async encodeBatchExecute(\n _txs: BatchUserOperationCallData\n ): Promise<`0x${string}`> {\n const multiSendCalldata = encodeFunctionData({\n abi: MultiSendAbi,\n functionName: \"multiSend\",\n args: [encodeMultiSend(_txs)],\n });\n return await this.encodeExecuteDelegate(\n MULTISEND_ADDR,\n BigInt(0),\n multiSendCalldata\n );\n }\n\n async encodeExecuteDelegate(\n target: Hex,\n value: bigint,\n data: Hex\n ): Promise<Hex> {\n return this.encodeExecuteAction(target, value, data, 1);\n }\n\n async encodeSetExection() {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n const { executor, selector, validAfter, validUntil } =\n await this.validator.getPluginValidatorData();\n const enableData = await this.validator.getEnableData();\n return encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"setExecution\",\n args: [\n selector,\n executor,\n this.validator.validatorAddress,\n validUntil,\n validAfter,\n enableData,\n ],\n });\n }\n\n async signMessageWith6492(msg: string | Uint8Array): Promise<Hex> {\n try {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n const formattedMessage = typeof msg === \"string\" ? toBytes(msg) : msg;\n let sig = await this.validator.signMessage(\n toBytes(hashMessage({ raw: formattedMessage }))\n );\n // If the account is undeployed, use ERC-6492\n if (!(await this.isAccountDeployed())) {\n sig = (encodeAbiParameters(\n parseAbiParameters(\"address, bytes, bytes\"),\n [this.factoryAddress, await this.getFactoryInitCode(), sig]\n ) +\n \"6492649264926492649264926492649264926492649264926492649264926492\") as Hex; // magic suffix\n }\n\n return sig;\n } catch (err: any) {\n console.error(\"Got Error - \", err.message);\n throw new Error(\"Message Signing with EIP6492 failed\");\n }\n }\n\n async signMessage(msg: Uint8Array | string): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n const formattedMessage = typeof msg === \"string\" ? toBytes(msg) : msg;\n return await this.validator.signMessage(formattedMessage);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n return await this.validator.signTypedData(params);\n }\n\n signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n return this.validator.signUserOp(userOp);\n }\n\n protected encodeExecuteAction(\n target: Hex,\n value: bigint,\n data: Hex,\n code: number\n ): Hex {\n return encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"execute\",\n args: [target, value, data, code],\n });\n }\n protected async getAccountInitCode(): Promise<Hex> {\n return concatHex([this.factoryAddress, await this.getFactoryInitCode()]);\n }\n\n async getNonce(): Promise<bigint> {\n if (!(await this.isAccountDeployed())) {\n return 0n;\n }\n if (!this.validator) {\n throw Error(\"Validator unintialized\");\n }\n const address = await this.getAddress();\n const key = this.validator.getNonceKey();\n return this.entryPoint.read.getNonce([address, key]);\n }\n\n protected async getFactoryInitCode(): Promise<Hex> {\n const validator = this.defaultValidator ?? this.validator;\n if (!validator) {\n throw new Error(\"Validator not connected\");\n }\n try {\n return encodeFunctionData({\n abi: KernelFactoryAbi,\n functionName: \"createAccount\",\n args: [\n KERNEL_IMPL_ADDRESS,\n encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"initialize\",\n args: [validator.getAddress(), await validator.getEnableData()],\n }),\n this.index,\n ],\n });\n } catch (err: any) {\n console.error(\"err occurred:\", err.message);\n throw new Error(\"Factory Code generation failed\");\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/account.ts"],"names":[],"mappings":";;;AACA,+BAQc;AAEd,oEAA8D;AAC9D,oEAA8D;AAC9D,8CAS0B;AAC1B,iDAMwB;AACxB,yCAA6C;AAC7C,4DAAsD;AACtD,wCAA4C;AAC5C,6CAA4C;AAC5C,gEAA6E;AAG7E,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,uCAAoB,CAAA;IACpB,mCAAgB,CAAA;AAClB,CAAC,EAJW,eAAe,+BAAf,eAAe,QAI1B;AAaD,SAAgB,eAAe,CAC7B,OAAY;IAEZ,OAAO,OAAO,IAAI,OAAO,CAAC,gBAAgB,KAAK,SAAS,CAAC;AAC3D,CAAC;AAJD,0CAIC;AAED,MAAa,0BAEX,SAAQ,kCAAoC;IAO5C,YAAY,MAAgC;QAC1C,KAAK,CAAC;YACJ,GAAG,MAAM;YACT,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,iCAAkB;YACjE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,sBAAa;YACpC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,0BAAW;SAC3C,CAAC,CAAC;QAZY;;;;;WAAwB;QACxB;;;;;WAAc;QACvB;;;;;WAAe;QACvB;;;;;WAAgC;QAChC;;;;;WAAuC;QASrC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,qCAAsB,CAAC;QACtE,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAChD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAClC,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,IAAI,CACtB,MAAgC;QAEhC,MAAM,OAAO,GAAG,MAAM,IAAA,qBAAU,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;SACtC;QACD,MAAM,KAAK,GAAG,IAAA,kBAAQ,EAAC,OAAO,CAAC,CAAC;QAChC,MAAM,SAAS,GACb,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ;YAClC,CAAC,CAAC,IAAA,mDAAgC,EAAC;gBAC/B,KAAK;gBACL,MAAM,EAAE,MAAM,CAAC,SAAS,IAAI,0BAAW;gBACvC,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,eAAe,EAAE,MAAM,CAAC,eAAe;aACxC,CAAC;YACJ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,0BAA0B,CAAC;YAC9C,GAAG,MAAM;YACT,KAAK;YACL,SAAS;SACV,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,gBAAgB,CAAC,SAA8B;QAC7C,IAAA,wBAAc,EAAC,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY;QACV,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;SAC5C;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,iBAAiB;QACf,OAAO,8IAA8I,CAAC;IACxJ,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,IAAI,CAAC,eAAe,KAAK,eAAe,CAAC,QAAQ,EAAE;YACrD,OAAO,IAAI,CAAC;SACb;QACD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CACzD,MAAM,IAAI,CAAC,UAAU,EAAE,CACxB,CAAC;QAEF,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE;YACnC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC,QAAQ,CAAC;YAChD,OAAO,IAAI,CAAC;SACb;aAAM;YACL,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC,YAAY,CAAC;SACrD;QAED,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;IACpD,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;SAC5C;QACD,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,EAAE;YACjE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,GAClD,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAC;YAC1C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAC3D,MAAM,IAAI,CAAC,UAAU,EAAE,EACvB,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,UAAU,EACV,IAAI,CAAC,SAAS,CACf,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;SAC9C;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAAW,EAAE,KAAa,EAAE,IAAS;QACvD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;SAC5C;QACD,IACE,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,WAAW,EAAE;YAChE,IAAI,CAAC,SAAS,CAAC,yBAAyB,EAAE,EAC1C;YACA,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;SACzD;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,IAAgC;QAEhC,MAAM,iBAAiB,GAAG,IAAA,yBAAkB,EAAC;YAC3C,GAAG,EAAE,8BAAY;YACjB,YAAY,EAAE,WAAW;YACzB,IAAI,EAAE,CAAC,IAAA,0BAAe,EAAC,IAAI,CAAC,CAAC;SAC9B,CAAC,CAAC;QACH,OAAO,MAAM,IAAI,CAAC,qBAAqB,CACrC,6BAAc,EACd,MAAM,CAAC,CAAC,CAAC,EACT,iBAAiB,CAClB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,qBAAqB,CACzB,MAAW,EACX,KAAa,EACb,IAAS;QAET,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;SAC5C;QACD,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,GAClD,MAAM,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAC;QAChD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;QACxD,OAAO,IAAA,yBAAkB,EAAC;YACxB,GAAG,EAAE,sCAAgB;YACrB,YAAY,EAAE,cAAc;YAC5B,IAAI,EAAE;gBACJ,QAAQ;gBACR,QAAQ;gBACR,IAAI,CAAC,SAAS,CAAC,gBAAgB;gBAC/B,UAAU;gBACV,UAAU;gBACV,UAAU;aACX;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,GAAwB;QAChD,IAAI;YACF,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACnB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;aAC5C;YACD,MAAM,gBAAgB,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAA,cAAO,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YACtE,IAAI,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAC9C,IAAA,cAAO,EAAC,IAAA,kBAAW,EAAC,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAChD,CAAC;YAEF,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE;gBACrC,SAAS,GAAG,IAAA,sBAAY,EAAC;oBACvB,cAAc,EAAE,IAAI,CAAC,cAAc;oBACnC,QAAQ,EAAE,MAAM,IAAI,CAAC,kBAAkB,EAAE;oBACzC,SAAS;iBACV,CAAC,CAAC;aACJ;YAED,OAAO,SAAS,CAAC;SAClB;QAAC,OAAO,GAAQ,EAAE;YACjB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;SACxD;IACH,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,MAA2B;QACrD,IAAI;YACF,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACnB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;aAC5C;YACD,IAAI,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAE3D,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE;gBACrC,SAAS,GAAG,IAAA,sBAAY,EAAC;oBACvB,cAAc,EAAE,IAAI,CAAC,cAAc;oBACnC,QAAQ,EAAE,MAAM,IAAI,CAAC,kBAAkB,EAAE;oBACzC,SAAS;iBACV,CAAC,CAAC;aACJ;YAED,OAAO,SAAS,CAAC;SAClB;QAAC,OAAO,GAAQ,EAAE;YACjB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;SACxD;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAAwB;QACxC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;SAC5C;QACD,MAAM,gBAAgB,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAA,cAAO,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACtE,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAA2B;QAC7C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;SAC5C;QACD,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACpD,CAAC;IAED,UAAU,CAAC,MAA4B;QACrC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;SAC5C;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAES,mBAAmB,CAC3B,MAAW,EACX,KAAa,EACb,IAAS,EACT,IAAY;QAEZ,OAAO,IAAA,yBAAkB,EAAC;YACxB,GAAG,EAAE,sCAAgB;YACrB,YAAY,EAAE,SAAS;YACvB,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;IACS,KAAK,CAAC,kBAAkB;QAChC,OAAO,IAAA,gBAAS,EAAC,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE;YACrC,OAAO,EAAE,CAAC;SACX;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAC;SACvC;QACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IACvD,CAAC;IAES,KAAK,CAAC,kBAAkB;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,SAAS,CAAC;QAC1D,IAAI,CAAC,SAAS,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;SAC5C;QACD,IAAI;YACF,OAAO,IAAA,yBAAkB,EAAC;gBACxB,GAAG,EAAE,sCAAgB;gBACrB,YAAY,EAAE,eAAe;gBAC7B,IAAI,EAAE;oBACJ,kCAAmB;oBACnB,IAAA,yBAAkB,EAAC;wBACjB,GAAG,EAAE,sCAAgB;wBACrB,YAAY,EAAE,YAAY;wBAC1B,IAAI,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,MAAM,SAAS,CAAC,aAAa,EAAE,CAAC;qBAChE,CAAC;oBACF,IAAI,CAAC,KAAK;iBACX;aACF,CAAC,CAAC;SACJ;QAAC,OAAO,GAAQ,EAAE;YACjB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;SACnD;IACH,CAAC;CACF;AA5RD,gEA4RC","sourcesContent":["import type { Address } from \"abitype\";\nimport {\n concatHex,\n encodeFunctionData,\n type FallbackTransport,\n hashMessage,\n type Hex,\n toBytes,\n type Transport,\n} from \"viem\";\nimport { KernelBaseValidator } from \"./validator/base.js\";\nimport { KernelAccountAbi } from \"./abis/KernelAccountAbi.js\";\nimport { KernelFactoryAbi } from \"./abis/KernelFactoryAbi.js\";\nimport {\n type BaseSmartAccountParams,\n BaseSmartContractAccount,\n type BatchUserOperationCallData,\n type UserOperationRequest,\n defineReadOnly,\n getChain,\n type SignTypedDataParams,\n wrapWith6492,\n} from \"@alchemy/aa-core\";\nimport {\n BUNDLER_URL,\n ENTRYPOINT_ADDRESS,\n KERNEL_FACTORY_ADDRESS,\n KERNEL_IMPL_ADDRESS,\n MULTISEND_ADDR,\n} from \"./constants.js\";\nimport { encodeMultiSend } from \"./utils.js\";\nimport { MultiSendAbi } from \"./abis/MultiSendAbi.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { getChainId } from \"./api/index.js\";\nimport { createZeroDevPublicErc4337Client } from \"./client/create-client.js\";\nimport type { PaymasterAndBundlerProviders } from \"./paymaster/types.js\";\n\nexport enum DeploymentState {\n UNDEFINED = \"0x0\",\n NOT_DEPLOYED = \"0x1\",\n DEPLOYED = \"0x2\",\n}\nexport interface KernelSmartAccountParams<\n TTransport extends Transport | FallbackTransport = Transport\n> extends Partial<BaseSmartAccountParams<TTransport>> {\n projectId: string;\n factoryAddress?: Address;\n index?: bigint;\n validator?: KernelBaseValidator;\n bundlerProvider?: PaymasterAndBundlerProviders;\n defaultValidator?: KernelBaseValidator;\n initCode?: Hex;\n}\n\nexport function isKernelAccount(\n account: any\n): account is KernelSmartContractAccount {\n return account && account.connectValidator !== undefined;\n}\n\nexport class KernelSmartContractAccount<\n TTransport extends Transport | FallbackTransport = Transport\n> extends BaseSmartContractAccount<TTransport> {\n private readonly factoryAddress: Address;\n private readonly index: bigint;\n private initCode?: Hex;\n validator?: KernelBaseValidator;\n defaultValidator?: KernelBaseValidator;\n\n constructor(params: KernelSmartAccountParams) {\n super({\n ...params,\n entryPointAddress: params.entryPointAddress ?? ENTRYPOINT_ADDRESS,\n chain: params.chain ?? polygonMumbai,\n rpcClient: params.rpcClient ?? BUNDLER_URL,\n });\n this.index = params.index ?? 0n;\n this.factoryAddress = params.factoryAddress ?? KERNEL_FACTORY_ADDRESS;\n this.validator = params.validator;\n this.defaultValidator = params.defaultValidator;\n this.initCode = params.initCode;\n }\n\n public static async init(\n params: KernelSmartAccountParams\n ): Promise<KernelSmartContractAccount> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const rpcClient =\n typeof params.rpcClient === \"string\"\n ? createZeroDevPublicErc4337Client({\n chain,\n rpcUrl: params.rpcClient ?? BUNDLER_URL,\n projectId: params.projectId,\n bundlerProvider: params.bundlerProvider,\n })\n : params.rpcClient;\n const instance = new KernelSmartContractAccount({\n ...params,\n chain,\n rpcClient,\n });\n return instance;\n }\n\n connectValidator(validator: KernelBaseValidator): this {\n defineReadOnly(this, \"validator\", validator);\n return this;\n }\n\n getValidator(): KernelBaseValidator {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n return this.validator;\n }\n\n getDummySignature(): Hex {\n return \"0x00000000870fe151d548a1c527c3804866fab30abf28ed17b79d5fc5149f19ca0819fefc3c57f3da4fdf9b10fab3f2f3dca536467ae44943b9dbb8433efe7760ddd72aaa1c\";\n }\n\n async getInitCode(): Promise<Hex> {\n if (this.deploymentState === DeploymentState.DEPLOYED) {\n return \"0x\";\n }\n const contractCode = await this.rpcProvider.getContractCode(\n await this.getAddress()\n );\n\n if ((contractCode?.length ?? 0) > 2) {\n this.deploymentState = DeploymentState.DEPLOYED;\n return \"0x\";\n } else {\n this.deploymentState = DeploymentState.NOT_DEPLOYED;\n }\n\n return this.initCode ?? this.getAccountInitCode();\n }\n\n getIndex(): bigint {\n return this.index;\n }\n\n async approvePlugin() {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n if (this.defaultValidator && !this.validator.getEnableSignature()) {\n const { executor, selector, validAfter, validUntil } =\n this.validator.getPluginValidatorData();\n const enableSig = await this.defaultValidator.approveExecutor(\n await this.getAddress(),\n selector,\n executor,\n validUntil,\n validAfter,\n this.validator\n );\n this.validator.setEnableSignature(enableSig);\n }\n }\n\n async encodeExecute(target: Hex, value: bigint, data: Hex): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n if (\n target.toLowerCase() === (await this.getAddress()).toLowerCase() &&\n this.validator.shouldDelegateViaFallback()\n ) {\n return data;\n } else {\n return this.encodeExecuteAction(target, value, data, 0);\n }\n }\n\n async encodeBatchExecute(\n _txs: BatchUserOperationCallData\n ): Promise<`0x${string}`> {\n const multiSendCalldata = encodeFunctionData({\n abi: MultiSendAbi,\n functionName: \"multiSend\",\n args: [encodeMultiSend(_txs)],\n });\n return await this.encodeExecuteDelegate(\n MULTISEND_ADDR,\n BigInt(0),\n multiSendCalldata\n );\n }\n\n async encodeExecuteDelegate(\n target: Hex,\n value: bigint,\n data: Hex\n ): Promise<Hex> {\n return this.encodeExecuteAction(target, value, data, 1);\n }\n\n async encodeSetExection() {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n const { executor, selector, validAfter, validUntil } =\n await this.validator.getPluginValidatorData();\n const enableData = await this.validator.getEnableData();\n return encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"setExecution\",\n args: [\n selector,\n executor,\n this.validator.validatorAddress,\n validUntil,\n validAfter,\n enableData,\n ],\n });\n }\n\n async signMessageWith6492(msg: string | Uint8Array): Promise<Hex> {\n try {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n const formattedMessage = typeof msg === \"string\" ? toBytes(msg) : msg;\n let signature = await this.validator.signMessage(\n toBytes(hashMessage({ raw: formattedMessage }))\n );\n // If the account is undeployed, use ERC-6492\n if (!(await this.isAccountDeployed())) {\n signature = wrapWith6492({\n factoryAddress: this.factoryAddress,\n initCode: await this.getFactoryInitCode(),\n signature,\n });\n }\n\n return signature;\n } catch (err: any) {\n console.error(\"Got Error - \", err.message);\n throw new Error(\"Message Signing with EIP6492 failed\");\n }\n }\n\n async signTypedDataWith6492(params: SignTypedDataParams): Promise<Hex> {\n try {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n let signature = await this.validator.signTypedData(params);\n // If the account is undeployed, use ERC-6492\n if (!(await this.isAccountDeployed())) {\n signature = wrapWith6492({\n factoryAddress: this.factoryAddress,\n initCode: await this.getFactoryInitCode(),\n signature,\n });\n }\n\n return signature;\n } catch (err: any) {\n console.error(\"Got Error - \", err.message);\n throw new Error(\"Message Signing with EIP6492 failed\");\n }\n }\n\n async signMessage(msg: Uint8Array | string): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n const formattedMessage = typeof msg === \"string\" ? toBytes(msg) : msg;\n return await this.validator.signMessage(formattedMessage);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n return await this.validator.signTypedData(params);\n }\n\n signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n return this.validator.signUserOp(userOp);\n }\n\n protected encodeExecuteAction(\n target: Hex,\n value: bigint,\n data: Hex,\n code: number\n ): Hex {\n return encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"execute\",\n args: [target, value, data, code],\n });\n }\n protected async getAccountInitCode(): Promise<Hex> {\n return concatHex([this.factoryAddress, await this.getFactoryInitCode()]);\n }\n\n async getNonce(): Promise<bigint> {\n if (!(await this.isAccountDeployed())) {\n return 0n;\n }\n if (!this.validator) {\n throw Error(\"Validator unintialized\");\n }\n const address = await this.getAddress();\n const key = this.validator.getNonceKey();\n return this.entryPoint.read.getNonce([address, key]);\n }\n\n protected async getFactoryInitCode(): Promise<Hex> {\n const validator = this.defaultValidator ?? this.validator;\n if (!validator) {\n throw new Error(\"Validator not connected\");\n }\n try {\n return encodeFunctionData({\n abi: KernelFactoryAbi,\n functionName: \"createAccount\",\n args: [\n KERNEL_IMPL_ADDRESS,\n encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"initialize\",\n args: [validator.getAddress(), await validator.getEnableData()],\n }),\n this.index,\n ],\n });\n } catch (err: any) {\n console.error(\"err occurred:\", err.message);\n throw new Error(\"Factory Code generation failed\");\n }\n }\n}\n"]}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { Hex } from "viem";
|
|
1
2
|
export declare const getChainId: (projectId: string, backendUrl?: string) => Promise<number | undefined>;
|
|
2
3
|
export declare const getRecoveryData: (recoveryId: string) => Promise<any>;
|
|
4
|
+
export declare const postRecoveryData: (enableData: Hex, scwAddress: Hex, recoveryConfig: string) => Promise<string | undefined>;
|
|
3
5
|
export declare const setSignatures: (recoveryId: string, signatures: string) => Promise<any>;
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.setSignatures = exports.getRecoveryData = exports.getChainId = void 0;
|
|
6
|
+
exports.setSignatures = exports.postRecoveryData = exports.getRecoveryData = exports.getChainId = void 0;
|
|
7
7
|
const axios_1 = __importDefault(require("axios"));
|
|
8
8
|
const constants_js_1 = require("../constants.js");
|
|
9
9
|
const getChainId = async (projectId, backendUrl) => {
|
|
@@ -34,6 +34,23 @@ const getRecoveryData = async (recoveryId) => {
|
|
|
34
34
|
}
|
|
35
35
|
};
|
|
36
36
|
exports.getRecoveryData = getRecoveryData;
|
|
37
|
+
const postRecoveryData = async (enableData, scwAddress, recoveryConfig) => {
|
|
38
|
+
try {
|
|
39
|
+
const { data: { recoveryId }, } = await axios_1.default.post(`${constants_js_1.BACKEND_URL}/v1/recovery`, {
|
|
40
|
+
enableData,
|
|
41
|
+
scwAddress,
|
|
42
|
+
recoveryConfig,
|
|
43
|
+
}, {
|
|
44
|
+
headers: { "Content-Type": "application/json" },
|
|
45
|
+
});
|
|
46
|
+
return recoveryId;
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
console.log(error);
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
exports.postRecoveryData = postRecoveryData;
|
|
37
54
|
const setSignatures = async (recoveryId, signatures) => {
|
|
38
55
|
try {
|
|
39
56
|
const { data } = await axios_1.default.patch(`${constants_js_1.BACKEND_URL}/v1/recovery/${recoveryId}`, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/api/index.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,kDAA8C;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/api/index.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,kDAA8C;AAGvC,MAAM,UAAU,GAAG,KAAK,EAC7B,SAAiB,EACjB,UAAmB,EACU,EAAE;IAC/B,IAAI;QACF,MAAM,EACJ,IAAI,EAAE,EAAE,OAAO,EAAE,GAClB,GAAG,MAAM,eAAK,CAAC,IAAI,CAClB,GAAG,UAAU,IAAI,0BAAW,2BAA2B,EACvD;YACE,SAAS;SACV,EACD;YACE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CACF,CAAC;QACF,OAAO,OAAO,CAAC;KAChB;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,SAAS,CAAC;KAClB;AACH,CAAC,CAAC;AArBW,QAAA,UAAU,cAqBrB;AAEK,MAAM,eAAe,GAAG,KAAK,EAAE,UAAkB,EAAE,EAAE;IAC1D,IAAI;QACF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,eAAK,CAAC,GAAG,CAC9B,GAAG,0BAAW,gBAAgB,UAAU,EAAE,EAC1C;YACE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CACF,CAAC;QACF,OAAO,IAAI,CAAC;KACb;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,SAAS,CAAC;KAClB;AACH,CAAC,CAAC;AAbW,QAAA,eAAe,mBAa1B;AAEK,MAAM,gBAAgB,GAAG,KAAK,EACnC,UAAe,EACf,UAAe,EACf,cAAsB,EACO,EAAE;IAC/B,IAAI;QACF,MAAM,EACJ,IAAI,EAAE,EAAE,UAAU,EAAE,GACrB,GAAG,MAAM,eAAK,CAAC,IAAI,CAClB,GAAG,0BAAW,cAAc,EAC5B;YACE,UAAU;YACV,UAAU;YACV,cAAc;SACf,EACD;YACE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CACF,CAAC;QACF,OAAO,UAAU,CAAC;KACnB;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,SAAS,CAAC;KAClB;AACH,CAAC,CAAC;AAxBW,QAAA,gBAAgB,oBAwB3B;AAEK,MAAM,aAAa,GAAG,KAAK,EAAE,UAAkB,EAAE,UAAkB,EAAE,EAAE;IAC5E,IAAI;QACF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,eAAK,CAAC,KAAK,CAChC,GAAG,0BAAW,gBAAgB,UAAU,EAAE,EAC1C;YACE,UAAU;SACX,EACD;YACE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CACF,CAAC;QACF,OAAO,IAAI,CAAC;KACb;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KACpB;AACH,CAAC,CAAC;AAfW,QAAA,aAAa,iBAexB","sourcesContent":["import axios from \"axios\";\nimport { BACKEND_URL } from \"../constants.js\";\nimport type { Hex } from \"viem\";\n\nexport const getChainId = async (\n projectId: string,\n backendUrl?: string\n): Promise<number | undefined> => {\n try {\n const {\n data: { chainId },\n } = await axios.post(\n `${backendUrl ?? BACKEND_URL}/v1/projects/get-chain-id`,\n {\n projectId,\n },\n {\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n return chainId;\n } catch (error) {\n console.log(error);\n return undefined;\n }\n};\n\nexport const getRecoveryData = async (recoveryId: string) => {\n try {\n const { data } = await axios.get(\n `${BACKEND_URL}/v1/recovery/${recoveryId}`,\n {\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n return data;\n } catch (error) {\n console.log(error);\n return undefined;\n }\n};\n\nexport const postRecoveryData = async (\n enableData: Hex,\n scwAddress: Hex,\n recoveryConfig: string\n): Promise<string | undefined> => {\n try {\n const {\n data: { recoveryId },\n } = await axios.post(\n `${BACKEND_URL}/v1/recovery`,\n {\n enableData,\n scwAddress,\n recoveryConfig,\n },\n {\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n return recoveryId;\n } catch (error) {\n console.log(error);\n return undefined;\n }\n};\n\nexport const setSignatures = async (recoveryId: string, signatures: string) => {\n try {\n const { data } = await axios.patch(\n `${BACKEND_URL}/v1/recovery/${recoveryId}`,\n {\n signatures,\n },\n {\n headers: { \"Content-Type\": \"application/json\" },\n }\n );\n return data;\n } catch (error) {\n console.log(error);\n }\n};\n"]}
|
|
@@ -16,6 +16,7 @@ export declare class ZeroDevAccountSigner<V extends SupportedValidators> extends
|
|
|
16
16
|
signTypedData(params: SignTypedDataParams): Promise<string>;
|
|
17
17
|
_signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string>;
|
|
18
18
|
signMessageWith6492(_msg: string | Uint8Array): Promise<Hex>;
|
|
19
|
+
signTypedDataWith6492(params: SignTypedDataParams): Promise<Hex>;
|
|
19
20
|
withPaymasterMiddleware: (overrides: {
|
|
20
21
|
dummyPaymasterDataMiddleware?: PaymasterAndDataMiddleware;
|
|
21
22
|
paymasterDataMiddleware?: PaymasterAndDataMiddleware;
|
|
@@ -117,6 +117,12 @@ class ZeroDevAccountSigner extends abstract_signer_1.Signer {
|
|
|
117
117
|
}
|
|
118
118
|
return this.account.signMessageWith6492(_msg);
|
|
119
119
|
}
|
|
120
|
+
async signTypedDataWith6492(params) {
|
|
121
|
+
if (!this.account) {
|
|
122
|
+
throw new Error("connect the signer to a provider that has a connected account");
|
|
123
|
+
}
|
|
124
|
+
return this.account.signTypedDataWith6492(params);
|
|
125
|
+
}
|
|
120
126
|
async sendTransaction(transaction) {
|
|
121
127
|
const resolved = await (0, aa_core_1.resolveProperties)(transaction);
|
|
122
128
|
const txHash = await this.provider.accountProvider.sendTransaction({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-signer.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/ethers-provider/account-signer.ts"],"names":[],"mappings":";;;AAAA,8CAQ0B;AAC1B,oEAKwC;AACxC,gDAA+C;AAC/C,8CAAwD;AAWxD,MAAM,eAAe,GAAG,CAAC,KAAU,EAA6B,EAAE;IAChE,IAAI,KAAK,IAAI,IAAI,EAAE;QACjB,OAAO,SAAS,CAAC;KAClB;IAED,OAAO,IAAA,eAAO,EAAC,KAAK,CAAkB,CAAC;AACzC,CAAC,CAAC;AAEF,MAAa,oBACX,SAAQ,wBAAM;IAQd,YAAqB,QAAkC;QACrD,KAAK,EAAE,CAAC;QADE;;;;mBAAS,QAAQ;WAA0B;QAL/C;;;;;WAAqC;QAE7C;;;;;WAAkB;QAClB;;;;;WAAgC;
|
|
1
|
+
{"version":3,"file":"account-signer.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/ethers-provider/account-signer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n resolveProperties,\n type AccountMiddlewareFn,\n type FeeDataMiddleware,\n type GasEstimatorMiddleware,\n type PaymasterAndDataMiddleware,\n type PublicErc4337Client,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n Signer,\n type TypedDataSigner,\n type TypedDataDomain,\n type TypedDataField,\n} from \"@ethersproject/abstract-signer\";\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { _TypedDataEncoder } from \"@ethersproject/hash\";\nimport type { Deferrable } from \"@ethersproject/properties\";\nimport {\n type TransactionRequest,\n type TransactionResponse,\n} from \"@ethersproject/providers\";\nimport { ZeroDevEthersProvider } from \"./ethers-provider.js\";\nimport type { SupportedValidators } from \"../validator/types.js\";\nimport type { KernelSmartContractAccount } from \"../account.js\";\nimport type { Hex } from \"viem\";\n\nconst hexlifyOptional = (value: any): `0x${string}` | undefined => {\n if (value == null) {\n return undefined;\n }\n\n return hexlify(value) as `0x${string}`;\n};\n\nexport class ZeroDevAccountSigner<V extends SupportedValidators>\n extends Signer\n implements TypedDataSigner\n{\n private account?: KernelSmartContractAccount;\n\n sendUserOperation;\n waitForUserOperationTransaction;\n\n constructor(readonly provider: ZeroDevEthersProvider<V>) {\n super();\n this.account = this.provider.accountProvider.getAccount();\n\n this.sendUserOperation =\n this.provider.accountProvider.sendUserOperation.bind(\n this.provider.accountProvider\n );\n this.waitForUserOperationTransaction =\n this.provider.accountProvider.waitForUserOperationTransaction.bind(\n this.provider.accountProvider\n );\n }\n\n getAddress(): Promise<string> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n\n return this.account.getAddress();\n }\n\n signMessage(message: string | Uint8Array): Promise<string> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n\n return this.account.signMessage(message);\n }\n\n signTypedData(params: SignTypedDataParams): Promise<string> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n if (params.types) {\n delete params.types[\"EIP712Domain\"];\n }\n\n return this.account.signTypedData(params);\n }\n\n _signTypedData(\n domain: TypedDataDomain,\n types: Record<string, Array<TypedDataField>>,\n value: Record<string, any>\n ): Promise<string> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n const params = _TypedDataEncoder.getPayload(\n domain,\n types,\n value\n ) as SignTypedDataParams;\n if (params.types) {\n delete params.types[\"EIP712Domain\"];\n }\n\n return this.signTypedData(params);\n }\n\n async signMessageWith6492(_msg: string | Uint8Array): Promise<Hex> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n return this.account.signMessageWith6492(_msg);\n }\n\n async signTypedDataWith6492(params: SignTypedDataParams): Promise<Hex> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n return this.account.signTypedDataWith6492(params);\n }\n\n withPaymasterMiddleware = (overrides: {\n dummyPaymasterDataMiddleware?: PaymasterAndDataMiddleware;\n paymasterDataMiddleware?: PaymasterAndDataMiddleware;\n }): this => {\n this.provider.withPaymasterMiddleware(overrides);\n return this;\n };\n\n withGasEstimator = (override: GasEstimatorMiddleware): this => {\n this.provider.withGasEstimator(override);\n return this;\n };\n\n withFeeDataGetter = (override: FeeDataMiddleware): this => {\n this.provider.withFeeDataGetter(override);\n return this;\n };\n\n withCustomMiddleware = (override: AccountMiddlewareFn): this => {\n this.provider.withCustomMiddleware(override);\n return this;\n };\n\n async sendTransaction(\n transaction: Deferrable<TransactionRequest>\n ): Promise<TransactionResponse> {\n const resolved = await resolveProperties(transaction);\n const txHash = await this.provider.accountProvider.sendTransaction({\n // TODO: need to support gas fields as well\n from: (await this.getAddress()) as `0x${string}`,\n to: resolved.to as `0x${string}` | undefined,\n data: hexlifyOptional(resolved.data),\n });\n\n return this.provider.getTransaction(txHash);\n }\n\n signTransaction(\n _transaction: Deferrable<TransactionRequest>\n ): Promise<string> {\n throw new Error(\n \"Transaction signing is not supported, use sendUserOperation instead\"\n );\n }\n\n getPublicErc4337Client(): PublicErc4337Client {\n return this.provider.getPublicErc4337Client();\n }\n\n connect(provider: ZeroDevEthersProvider<V>): ZeroDevAccountSigner<V> {\n return new ZeroDevAccountSigner(provider);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPasskeyOwner.js","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/createPasskeyOwner.ts"],"names":[],"mappings":";;;;;;AAAA,wCAAuD;AACvD,kDAA0B;AAE1B,yCASoB;AACpB,qDAA6C;AAC7C,mDAAwD;AAEjD,KAAK,UAAU,kBAAkB,CAAC,EACvC,IAAI,EACJ,SAAS,EACT,eAAe,GAAG,KAAK,EACvB,QAAQ,EACR,MAAM,GAAG,sBAAO,GAOjB;IAEC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACjC,MAAM,SAAS,GAAG,IAAA,+BAAoB,GAAE,CAAC;QACzC,IAAI,WAAW,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"createPasskeyOwner.js","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/createPasskeyOwner.ts"],"names":[],"mappings":";;;;;;AAAA,wCAAuD;AACvD,kDAA0B;AAE1B,yCASoB;AACpB,qDAA6C;AAC7C,mDAAwD;AAEjD,KAAK,UAAU,kBAAkB,CAAC,EACvC,IAAI,EACJ,SAAS,EACT,eAAe,GAAG,KAAK,EACvB,QAAQ,EACR,MAAM,GAAG,sBAAO,GAOjB;IAEC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACjC,MAAM,SAAS,GAAG,IAAA,+BAAoB,GAAE,CAAC;QACzC,IAAI,WAAW,GAAG,SAAS,CAAC;QAC5B,IAAI,eAAe,EAAE;YACnB,WAAW,GAAG,MAAM,IAAA,yBAAc,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC;SACrD;QACD,IAAI,WAAW,IAAI,WAAW,EAAE,MAAM,IAAI,EAAE,EAAE;YAC5C,MAAM,IAAI,qCAAqB,EAAE,CAAC;SACnC;QAED,IAAI;YACF,IAAA,wBAAa,GAAE,CAAC;YAChB,MAAM,WAAW,GAAG,MAAM,IAAA,6BAAsB,EAAC;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,WAAW;oBAC/B,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;oBAC/B,SAAS;oBACT,gBAAgB,EAAE;wBAChB;4BACE,IAAI,EAAE,oBAAS;4BACf,GAAG,EAAE,gBAAK;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,eAAK,CAAC,IAAI,CAC/B,GAAG,MAAM,aAAa,SAAS,UAAU,EACzC;gBACE,SAAS,EAAE,IAAA,0BAAe,EAAC,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,IAAA,sBAAW,EACT,GAAG,EACH,EAAE,EACF,QAAQ,EACR,SAAS,EACT,WAAW,CAAC,YAAY,EACxB,MAAM,CACP;gBACH,aAAa,EAAE,CAAC,MAA2B,EAAE,EAAE,CAC7C,IAAA,wBAAa,EACX,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;AA9FD,gDA8FC","sourcesContent":["import { getWebAuthnAttestation } from \"@turnkey/http\";\nimport axios from \"axios\";\nimport type { SignTypedDataParams, SmartAccountSigner } from \"@alchemy/aa-core\";\nimport {\n abortWebauthn,\n base64UrlEncode,\n es256,\n generateRandomBuffer,\n getCredentials,\n publicKey,\n signMessage,\n signTypedData,\n} from \"./utils.js\";\nimport { API_URL } from \"../../constants.js\";\nimport { UsernameIsAlreadyUsed } from \"./exceptions.js\";\n\nexport async function createPasskeyOwner({\n name,\n projectId,\n withCredentials = false,\n fallback,\n apiUrl = API_URL,\n}: {\n name: string;\n projectId: string;\n withCredentials?: boolean;\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 let credentials = undefined;\n if (withCredentials) {\n credentials = await getCredentials(projectId, name);\n }\n if (credentials && credentials?.length >= 64) {\n throw new UsernameIsAlreadyUsed();\n }\n\n try {\n abortWebauthn();\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: credentials,\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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exceptions.js","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/exceptions.ts"],"names":[],"mappings":";;;AAAA,MAAa,qBAAsB,SAAQ,KAAK;IAAhD;;
|
|
1
|
+
{"version":3,"file":"exceptions.js","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/exceptions.ts"],"names":[],"mappings":";;;AAAA,MAAa,qBAAsB,SAAQ,KAAK;IAAhD;;QACE;;;;mBAAkB,2BAA2B;WAAC;IAChD,CAAC;CAAA;AAFD,sDAEC","sourcesContent":["export class UsernameIsAlreadyUsed extends Error {\n message: string = \"Username is already used.\";\n}\n"]}
|
|
@@ -18,19 +18,19 @@ async function getAutocompletePasskeyOwner({ projectId, apiUrl = constants_js_1.
|
|
|
18
18
|
try {
|
|
19
19
|
(0, utils_js_1.abortWebauthn)();
|
|
20
20
|
const assertion = JSON.parse(await (0, webauthn_1.getWebAuthnAssertion)((0, utils_js_1.base64UrlEncode)(challenge), {
|
|
21
|
-
mediation:
|
|
21
|
+
mediation: "conditional",
|
|
22
22
|
publicKey: {
|
|
23
23
|
rpId: window.location.hostname,
|
|
24
24
|
userVerification: "required",
|
|
25
25
|
},
|
|
26
|
-
signal: utils_js_1.abortController.controller.signal
|
|
26
|
+
signal: utils_js_1.abortController.controller.signal,
|
|
27
27
|
}));
|
|
28
28
|
const response = await axios_1.default.post(`${apiUrl}/projects/${projectId}/wallets/${assertion.credentialId}`, {
|
|
29
29
|
challenge: (0, utils_js_1.base64UrlEncode)(challenge),
|
|
30
30
|
assertion,
|
|
31
31
|
});
|
|
32
32
|
const { id, walletId, address } = await response.data;
|
|
33
|
-
console.log(
|
|
33
|
+
console.log("owner", id, walletId, address);
|
|
34
34
|
const owner = {
|
|
35
35
|
getAddress: async () => address,
|
|
36
36
|
signMessage: (msg) => (0, utils_js_1.signMessage)(msg, id, walletId, projectId, assertion.credentialId, apiUrl),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAutocompletePasskeyOwner.js","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/getAutocompletePasskeyOwner.ts"],"names":[],"mappings":";;;;;;AAAA,0DAAmE;AACnE,kDAA0B;AAE1B,yCAOoB;AACpB,qDAA6C;AAEtC,KAAK,UAAU,2BAA2B,CAAC,EAChD,SAAS,EACT,MAAM,GAAG,sBAAO,GAKjB;
|
|
1
|
+
{"version":3,"file":"getAutocompletePasskeyOwner.js","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/getAutocompletePasskeyOwner.ts"],"names":[],"mappings":";;;;;;AAAA,0DAAmE;AACnE,kDAA0B;AAE1B,yCAOoB;AACpB,qDAA6C;AAEtC,KAAK,UAAU,2BAA2B,CAAC,EAChD,SAAS,EACT,MAAM,GAAG,sBAAO,GAKjB;IACC,IAEE,CAAC,mBAAmB,EAAE,+BAA+B;QAErD,CAAC,mBAAmB,EAAE,+BAA+B,EAAE,EACvD;QACA,OAAO;KACR;IAGD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACjC,MAAM,SAAS,GAAG,IAAA,+BAAoB,GAAE,CAAC;QACzC,IAAI;YACF,IAAA,wBAAa,GAAE,CAAC;YAChB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAC1B,MAAM,IAAA,+BAAoB,EAAC,IAAA,0BAAe,EAAC,SAAS,CAAC,EAAE;gBACrD,SAAS,EAAE,aAAa;gBACxB,SAAS,EAAE;oBAET,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;oBAC9B,gBAAgB,EAAE,UAAU;iBAC7B;gBACD,MAAM,EAAE,0BAAe,CAAC,UAAU,CAAC,MAAM;aAC1C,CAAC,CACH,CAAC;YACF,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,GAAG,MAAM,aAAa,SAAS,YAAY,SAAS,CAAC,YAAY,EAAE,EACnE;gBACE,SAAS,EAAE,IAAA,0BAAe,EAAC,SAAS,CAAC;gBACrC,SAAS;aACV,CACF,CAAC;YACF,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAuB;gBAChC,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,OAAO;gBAC/B,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CACnB,IAAA,sBAAW,EACT,GAAG,EACH,EAAE,EACF,QAAQ,EACR,SAAS,EACT,SAAS,CAAC,YAAY,EACtB,MAAM,CACP;gBACH,aAAa,EAAE,CAAC,MAA2B,EAAE,EAAE,CAC7C,IAAA,wBAAa,EACX,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;AArED,kEAqEC","sourcesContent":["import { getWebAuthnAssertion } from \"@turnkey/http/dist/webauthn\";\nimport axios from \"axios\";\nimport type { SignTypedDataParams, SmartAccountSigner } from \"@alchemy/aa-core\";\nimport {\n abortController,\n abortWebauthn,\n base64UrlEncode,\n generateRandomBuffer,\n signMessage,\n signTypedData,\n} from \"./utils.js\";\nimport { API_URL } from \"../../constants.js\";\n\nexport async function getAutocompletePasskeyOwner({\n projectId,\n apiUrl = API_URL,\n}: {\n projectId: string;\n name?: string;\n apiUrl?: string;\n}): Promise<SmartAccountSigner | undefined> {\n if (\n //@ts-ignore\n !PublicKeyCredential?.isConditionalMediationAvailable ||\n //@ts-ignore\n !PublicKeyCredential?.isConditionalMediationAvailable()\n ) {\n return;\n }\n\n //@ts-expect-error\n if (typeof window !== \"undefined\") {\n const challenge = generateRandomBuffer();\n try {\n abortWebauthn();\n const assertion = JSON.parse(\n await getWebAuthnAssertion(base64UrlEncode(challenge), {\n mediation: \"conditional\",\n publicKey: {\n //@ts-expect-error\n rpId: window.location.hostname,\n userVerification: \"required\",\n },\n signal: abortController.controller.signal,\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 console.log(\"owner\", id, walletId, address);\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"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { SmartAccountSigner } from "@alchemy/aa-core";
|
|
2
|
-
export declare function getPasskeyOwner({ projectId, name, apiUrl, withCredentials }: {
|
|
2
|
+
export declare function getPasskeyOwner({ projectId, name, apiUrl, withCredentials, }: {
|
|
3
3
|
projectId: string;
|
|
4
4
|
name?: string;
|
|
5
5
|
apiUrl?: string;
|
|
@@ -8,7 +8,7 @@ const webauthn_1 = require("@turnkey/http/dist/webauthn");
|
|
|
8
8
|
const axios_1 = __importDefault(require("axios"));
|
|
9
9
|
const utils_js_1 = require("./utils.js");
|
|
10
10
|
const constants_js_1 = require("../../constants.js");
|
|
11
|
-
async function getPasskeyOwner({ projectId, name, apiUrl = constants_js_1.API_URL, withCredentials = false }) {
|
|
11
|
+
async function getPasskeyOwner({ projectId, name, apiUrl = constants_js_1.API_URL, withCredentials = false, }) {
|
|
12
12
|
if (typeof window !== "undefined") {
|
|
13
13
|
const challenge = (0, utils_js_1.generateRandomBuffer)();
|
|
14
14
|
try {
|
|
@@ -17,7 +17,9 @@ async function getPasskeyOwner({ projectId, name, apiUrl = constants_js_1.API_UR
|
|
|
17
17
|
publicKey: {
|
|
18
18
|
rpId: window.location.hostname,
|
|
19
19
|
userVerification: "required",
|
|
20
|
-
allowCredentials: withCredentials
|
|
20
|
+
allowCredentials: withCredentials
|
|
21
|
+
? await (0, utils_js_1.getCredentials)(projectId, name)
|
|
22
|
+
: undefined,
|
|
21
23
|
},
|
|
22
24
|
}));
|
|
23
25
|
const response = await axios_1.default.post(`${apiUrl}/projects/${projectId}/wallets/${assertion.credentialId}`, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPasskeyOwner.js","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/getPasskeyOwner.ts"],"names":[],"mappings":";;;;;;AAAA,0DAAmE;AACnE,kDAA0B;AAE1B,yCAOoB;AACpB,qDAA6C;AAEtC,KAAK,UAAU,eAAe,CAAC,EACpC,SAAS,EACT,IAAI,EACJ,MAAM,GAAG,sBAAO,EAChB,eAAe,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"getPasskeyOwner.js","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/getPasskeyOwner.ts"],"names":[],"mappings":";;;;;;AAAA,0DAAmE;AACnE,kDAA0B;AAE1B,yCAOoB;AACpB,qDAA6C;AAEtC,KAAK,UAAU,eAAe,CAAC,EACpC,SAAS,EACT,IAAI,EACJ,MAAM,GAAG,sBAAO,EAChB,eAAe,GAAG,KAAK,GAMxB;IAEC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACjC,MAAM,SAAS,GAAG,IAAA,+BAAoB,GAAE,CAAC;QACzC,IAAI;YACF,IAAA,wBAAa,GAAE,CAAC;YAChB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAC1B,MAAM,IAAA,+BAAoB,EAAC,IAAA,0BAAe,EAAC,SAAS,CAAC,EAAE;gBACrD,SAAS,EAAE;oBAET,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;oBAC9B,gBAAgB,EAAE,UAAU;oBAC5B,gBAAgB,EAAE,eAAe;wBAC/B,CAAC,CAAC,MAAM,IAAA,yBAAc,EAAC,SAAS,EAAE,IAAI,CAAC;wBACvC,CAAC,CAAC,SAAS;iBACd;aACF,CAAC,CACH,CAAC;YACF,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,GAAG,MAAM,aAAa,SAAS,YAAY,SAAS,CAAC,YAAY,EAAE,EACnE;gBACE,SAAS,EAAE,IAAA,0BAAe,EAAC,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,IAAA,sBAAW,EACT,GAAG,EACH,EAAE,EACF,QAAQ,EACR,SAAS,EACT,SAAS,CAAC,YAAY,EACtB,MAAM,CACP;gBACH,aAAa,EAAE,CAAC,MAA2B,EAAE,EAAE,CAC7C,IAAA,wBAAa,EACX,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;AA/DD,0CA+DC","sourcesContent":["import { getWebAuthnAssertion } from \"@turnkey/http/dist/webauthn\";\nimport axios from \"axios\";\nimport type { SignTypedDataParams, SmartAccountSigner } from \"@alchemy/aa-core\";\nimport {\n abortWebauthn,\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 name,\n apiUrl = API_URL,\n withCredentials = false,\n}: {\n projectId: string;\n name?: string;\n apiUrl?: string;\n withCredentials?: boolean;\n}): Promise<SmartAccountSigner | undefined> {\n //@ts-expect-error\n if (typeof window !== \"undefined\") {\n const challenge = generateRandomBuffer();\n try {\n abortWebauthn();\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: withCredentials\n ? await getCredentials(projectId, name)\n : undefined,\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"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { abortWebauthn } from
|
|
1
|
+
export { abortWebauthn } from "./utils.js";
|
|
2
2
|
export { getPasskeyOwner } from "./getPasskeyOwner.js";
|
|
3
3
|
export { createPasskeyOwner } from "./createPasskeyOwner.js";
|
|
4
4
|
export { getAutocompletePasskeyOwner } from "./getAutocompletePasskeyOwner.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/index.ts"],"names":[],"mappings":";;;AAAA,uCAA2C;AAAlC,yGAAA,aAAa,OAAA;AACtB,2DAAuD;AAA9C,qHAAA,eAAe,OAAA;AACxB,iEAA6D;AAApD,2HAAA,kBAAkB,OAAA;AAC3B,mFAA+E;AAAtE,6IAAA,2BAA2B,OAAA","sourcesContent":["export { abortWebauthn } from
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/index.ts"],"names":[],"mappings":";;;AAAA,uCAA2C;AAAlC,yGAAA,aAAa,OAAA;AACtB,2DAAuD;AAA9C,qHAAA,eAAe,OAAA;AACxB,iEAA6D;AAApD,2HAAA,kBAAkB,OAAA;AAC3B,mFAA+E;AAAtE,6IAAA,2BAA2B,OAAA","sourcesContent":["export { abortWebauthn } from \"./utils.js\";\nexport { getPasskeyOwner } from \"./getPasskeyOwner.js\";\nexport { createPasskeyOwner } from \"./createPasskeyOwner.js\";\nexport { getAutocompletePasskeyOwner } from \"./getAutocompletePasskeyOwner.js\";\n"]}
|
|
@@ -15,7 +15,7 @@ exports.abortController = {
|
|
|
15
15
|
controller: new AbortController(),
|
|
16
16
|
};
|
|
17
17
|
function abortWebauthn() {
|
|
18
|
-
exports.abortController.controller.abort(
|
|
18
|
+
exports.abortController.controller.abort("ZeroDev: Reset previous Webauthn request");
|
|
19
19
|
exports.abortController.controller = new AbortController();
|
|
20
20
|
}
|
|
21
21
|
exports.abortWebauthn = abortWebauthn;
|
|
@@ -89,7 +89,7 @@ const signTypedData = async (params, id, walletId, projectId, credentialId, apiU
|
|
|
89
89
|
};
|
|
90
90
|
exports.signTypedData = signTypedData;
|
|
91
91
|
const getCredentials = async (projectId, name, apiUrl = constants_js_1.API_URL) => {
|
|
92
|
-
const url = `${apiUrl}/projects/${projectId}/wallets` + (name ? `/${name}` :
|
|
92
|
+
const url = `${apiUrl}/projects/${projectId}/wallets` + (name ? `/${name}` : "");
|
|
93
93
|
const response = await axios_1.default.get(url);
|
|
94
94
|
const credentials = response.data;
|
|
95
95
|
return credentials.map((credential) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/utils.ts"],"names":[],"mappings":";;;;;;AAAA,wCAAwD;AACxD,kDAA0B;AAC1B,qDAA6C;AAE7C,+BAAkE;AAElE,IAAA,kBAAW,EAAC;IACV,OAAO,EAAE,yBAAyB;CACnC,CAAC,CAAC;AAEU,QAAA,eAAe,GAAG;IAC7B,UAAU,EAAE,IAAI,eAAe,EAAE;CAClC,
|
|
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 { SignTypedDataParams } from \"@alchemy/aa-core\";\nimport { hashTypedData, signatureToHex, hashMessage } from \"viem\";\n\nbrowserInit({\n baseUrl: \"https://api.turnkey.com\",\n});\n\nexport const abortController = {\n controller: new AbortController(),\n};\n\nexport function abortWebauthn() {\n abortController.controller.abort(\"ZeroDev: Reset previous Webauthn request\");\n abortController.controller = new AbortController();\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\nexport const signMessageImplementation = async (\n msg: string,\n id: string,\n walletId: string,\n projectId: string,\n credentialId: string,\n apiUrl = API_URL\n) => {\n abortWebauthn();\n const signedRequest = await TurnkeyApi.signSignRawPayload(\n {\n body: {\n type: \"ACTIVITY_TYPE_SIGN_RAW_PAYLOAD\",\n organizationId: id,\n parameters: {\n privateKeyId: walletId,\n payload: 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 signatureHex = signatureToHex({\n r: `0x${result.r}`,\n s: `0x${result.s}`,\n v: result.v === \"00\" ? 27n : 28n,\n });\n if (signatureHex) {\n return signatureHex;\n }\n }\n }\n return \"0x\";\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 return await signMessageImplementation(\n hashMessage(typeof msg === \"string\" ? msg : { raw: msg }),\n id,\n walletId,\n projectId,\n credentialId,\n apiUrl\n );\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 signMessageImplementation(\n hashToSign,\n id,\n walletId,\n projectId,\n credentialId,\n apiUrl\n );\n};\n\nexport const getCredentials = async (\n projectId: string,\n name?: string,\n apiUrl = API_URL\n) => {\n const url =\n `${apiUrl}/projects/${projectId}/wallets` + (name ? `/${name}` : \"\");\n const response = await axios.get(url);\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"]}
|
|
@@ -143,7 +143,9 @@ class TokenPaymaster extends base_js_1.Paymaster {
|
|
|
143
143
|
}
|
|
144
144
|
const gasTokenAddress = (0, utils_js_1.getGasTokenAddress)(this.paymasterConfig.gasToken, chainId);
|
|
145
145
|
let paymasterAddress = await this.getPaymasterAddress(paymasterProvider);
|
|
146
|
-
if (gasTokenAddress !== undefined &&
|
|
146
|
+
if (gasTokenAddress !== undefined &&
|
|
147
|
+
paymasterAddress !== undefined &&
|
|
148
|
+
(0, viem_1.isAddress)(paymasterAddress)) {
|
|
147
149
|
const erc20UserOp = await this.getERC20UserOp(struct, mainCall, gasTokenAddress, paymasterAddress);
|
|
148
150
|
if (!erc20UserOp) {
|
|
149
151
|
return struct;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-paymaster.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/paymaster/token-paymaster.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type PromiseOrValue,\n type BytesLike,\n type UserOperationCallData,\n type UserOperationStruct,\n} from \"@alchemy/aa-core\";\nimport axios from \"axios\";\nimport { type Hex, toHex, decodeFunctionData, encodeFunctionData } from \"viem\";\nimport { ERC20Abi } from \"../abis/ERC20Abi.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { MultiSendAbi } from \"../abis/MultiSendAbi.js\";\nimport {\n PAYMASTER_URL,\n ENTRYPOINT_ADDRESS,\n MULTISEND_ADDR,\n ERC20_APPROVAL_AMOUNT,\n} from \"../constants.js\";\nimport {\n AccountNotConnected,\n IncorrectCallDataForTokenPaymaster,\n} from \"../errors.js\";\nimport type { ZeroDevProvider } from \"../provider.js\";\nimport {\n getGasTokenAddress,\n type UserOperationCallDataWithDelegate,\n} from \"../utils.js\";\nimport { Paymaster } from \"./base.js\";\nimport {\n type PaymasterAndBundlerProviders,\n type PaymasterConfig,\n} from \"./types.js\";\nimport { getChainId } from \"../api/index.js\";\n\nexport class TokenPaymaster extends Paymaster {\n constructor(\n provider: ZeroDevProvider,\n protected paymasterConfig: PaymasterConfig<\"TOKEN_PAYMASTER\">\n ) {\n super(provider);\n }\n async getPaymasterAddress(\n paymasterProvider?: PaymasterAndBundlerProviders\n ): Promise<Hex | undefined> {\n const chainId = await getChainId(this.provider.getProjectId());\n\n try {\n const { data: paymasterResp } = await axios.post(\n `${PAYMASTER_URL}/getPaymasterAddress`,\n {\n chainId,\n entryPointAddress: ENTRYPOINT_ADDRESS,\n paymasterProvider,\n },\n { headers: { \"Content-Type\": \"application/json\" } }\n );\n return paymasterResp as Hex;\n } catch (e) {\n console.log(e);\n return undefined;\n }\n }\n async decodeMainCallFromCallData(\n kernelAddress: PromiseOrValue<string>,\n callData: PromiseOrValue<BytesLike>\n ): Promise<UserOperationCallDataWithDelegate | undefined> {\n let data: Hex = \"0x\";\n if (callData instanceof Promise) {\n const _data = await callData;\n if (_data instanceof Uint8Array) {\n data = toHex(_data);\n } else {\n data = _data as Hex;\n }\n } else if (callData instanceof Uint8Array) {\n data = toHex(callData);\n } else {\n data = callData as Hex;\n }\n\n try {\n const { functionName, args } = decodeFunctionData({\n abi: KernelAccountAbi,\n data: data,\n });\n if (functionName === \"execute\") {\n const [target, value, data] = args;\n let msFuntionName;\n try {\n ({ functionName: msFuntionName } = decodeFunctionData({\n abi: MultiSendAbi,\n data,\n }));\n } catch (error) {}\n let mainCall:\n | UserOperationCallData\n | UserOperationCallDataWithDelegate = {\n target,\n value: value ?? 0n,\n data,\n };\n if (msFuntionName === \"multiSend\") {\n mainCall = {\n ...mainCall,\n target: MULTISEND_ADDR,\n delegateCall: true,\n data,\n };\n }\n return mainCall;\n }\n } catch (error) {\n return {\n target: (kernelAddress instanceof Promise\n ? await kernelAddress\n : kernelAddress) as Hex,\n data,\n value: 0n,\n delegateCall: true,\n };\n }\n return;\n }\n\n async getERC20UserOp(\n struct: UserOperationStruct,\n mainCall: UserOperationCallDataWithDelegate,\n gasTokenAddress: Hex,\n paymasterAddress: Hex\n ): Promise<UserOperationStruct | undefined> {\n try {\n const approveData: UserOperationCallData = {\n target: gasTokenAddress,\n value: BigInt(0),\n data: encodeFunctionData({\n abi: ERC20Abi,\n functionName: \"approve\",\n args: [paymasterAddress, ERC20_APPROVAL_AMOUNT[gasTokenAddress]],\n }),\n };\n if (!this.provider.account) {\n throw AccountNotConnected;\n }\n const erc20CallData = await this.provider.account.encodeBatchExecute([\n approveData,\n mainCall,\n ]);\n return {\n ...struct,\n callData: erc20CallData,\n callGasLimit: await this.provider.rpcClient.estimateGas({\n account: ENTRYPOINT_ADDRESS,\n to: await this.provider.getAddress(),\n data: erc20CallData,\n }),\n };\n } catch (error) {\n return;\n }\n }\n\n async getPaymasterResponse(\n struct: UserOperationStruct,\n paymasterProvider?: PaymasterAndBundlerProviders,\n shouldOverrideFee?: boolean\n ): Promise<UserOperationStruct | undefined> {\n try {\n const mainCall = await this.decodeMainCallFromCallData(\n struct.sender,\n struct.callData\n );\n if (!mainCall) {\n throw IncorrectCallDataForTokenPaymaster;\n }\n const chainId = await getChainId(this.provider.getProjectId());\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const gasTokenAddress = getGasTokenAddress(\n this.paymasterConfig.gasToken,\n chainId\n );\n let paymasterAddress = await this.getPaymasterAddress(paymasterProvider);\n if (gasTokenAddress !== undefined && paymasterAddress !== undefined) {\n const erc20UserOp = await this.getERC20UserOp(\n struct,\n mainCall,\n gasTokenAddress,\n paymasterAddress\n );\n if (!erc20UserOp) {\n return struct;\n }\n const paymasterResp = await this.signUserOp({\n userOp: struct,\n callData: struct.callData,\n gasTokenAddress,\n erc20UserOp,\n erc20CallData: erc20UserOp.callData,\n paymasterProvider,\n shouldOverrideFee,\n });\n if (paymasterResp) {\n return paymasterResp;\n }\n }\n } catch (error) {\n console.log(error);\n }\n return;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"token-paymaster.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/paymaster/token-paymaster.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type PromiseOrValue,\n type BytesLike,\n type UserOperationCallData,\n type UserOperationStruct,\n} from \"@alchemy/aa-core\";\nimport axios from \"axios\";\nimport {\n type Hex,\n toHex,\n decodeFunctionData,\n encodeFunctionData,\n isAddress,\n} from \"viem\";\nimport { ERC20Abi } from \"../abis/ERC20Abi.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { MultiSendAbi } from \"../abis/MultiSendAbi.js\";\nimport {\n PAYMASTER_URL,\n ENTRYPOINT_ADDRESS,\n MULTISEND_ADDR,\n ERC20_APPROVAL_AMOUNT,\n} from \"../constants.js\";\nimport {\n AccountNotConnected,\n IncorrectCallDataForTokenPaymaster,\n} from \"../errors.js\";\nimport type { ZeroDevProvider } from \"../provider.js\";\nimport {\n getGasTokenAddress,\n type UserOperationCallDataWithDelegate,\n} from \"../utils.js\";\nimport { Paymaster } from \"./base.js\";\nimport {\n type PaymasterAndBundlerProviders,\n type PaymasterConfig,\n} from \"./types.js\";\nimport { getChainId } from \"../api/index.js\";\n\nexport class TokenPaymaster extends Paymaster {\n constructor(\n provider: ZeroDevProvider,\n protected paymasterConfig: PaymasterConfig<\"TOKEN_PAYMASTER\">\n ) {\n super(provider);\n }\n async getPaymasterAddress(\n paymasterProvider?: PaymasterAndBundlerProviders\n ): Promise<Hex | undefined> {\n const chainId = await getChainId(this.provider.getProjectId());\n\n try {\n const { data: paymasterResp } = await axios.post(\n `${PAYMASTER_URL}/getPaymasterAddress`,\n {\n chainId,\n entryPointAddress: ENTRYPOINT_ADDRESS,\n paymasterProvider,\n },\n { headers: { \"Content-Type\": \"application/json\" } }\n );\n return paymasterResp as Hex;\n } catch (e) {\n console.log(e);\n return undefined;\n }\n }\n async decodeMainCallFromCallData(\n kernelAddress: PromiseOrValue<string>,\n callData: PromiseOrValue<BytesLike>\n ): Promise<UserOperationCallDataWithDelegate | undefined> {\n let data: Hex = \"0x\";\n if (callData instanceof Promise) {\n const _data = await callData;\n if (_data instanceof Uint8Array) {\n data = toHex(_data);\n } else {\n data = _data as Hex;\n }\n } else if (callData instanceof Uint8Array) {\n data = toHex(callData);\n } else {\n data = callData as Hex;\n }\n\n try {\n const { functionName, args } = decodeFunctionData({\n abi: KernelAccountAbi,\n data: data,\n });\n if (functionName === \"execute\") {\n const [target, value, data] = args;\n let msFuntionName;\n try {\n ({ functionName: msFuntionName } = decodeFunctionData({\n abi: MultiSendAbi,\n data,\n }));\n } catch (error) {}\n let mainCall:\n | UserOperationCallData\n | UserOperationCallDataWithDelegate = {\n target,\n value: value ?? 0n,\n data,\n };\n if (msFuntionName === \"multiSend\") {\n mainCall = {\n ...mainCall,\n target: MULTISEND_ADDR,\n delegateCall: true,\n data,\n };\n }\n return mainCall;\n }\n } catch (error) {\n return {\n target: (kernelAddress instanceof Promise\n ? await kernelAddress\n : kernelAddress) as Hex,\n data,\n value: 0n,\n delegateCall: true,\n };\n }\n return;\n }\n\n async getERC20UserOp(\n struct: UserOperationStruct,\n mainCall: UserOperationCallDataWithDelegate,\n gasTokenAddress: Hex,\n paymasterAddress: Hex\n ): Promise<UserOperationStruct | undefined> {\n try {\n const approveData: UserOperationCallData = {\n target: gasTokenAddress,\n value: BigInt(0),\n data: encodeFunctionData({\n abi: ERC20Abi,\n functionName: \"approve\",\n args: [paymasterAddress, ERC20_APPROVAL_AMOUNT[gasTokenAddress]],\n }),\n };\n if (!this.provider.account) {\n throw AccountNotConnected;\n }\n const erc20CallData = await this.provider.account.encodeBatchExecute([\n approveData,\n mainCall,\n ]);\n return {\n ...struct,\n callData: erc20CallData,\n callGasLimit: await this.provider.rpcClient.estimateGas({\n account: ENTRYPOINT_ADDRESS,\n to: await this.provider.getAddress(),\n data: erc20CallData,\n }),\n };\n } catch (error) {\n return;\n }\n }\n\n async getPaymasterResponse(\n struct: UserOperationStruct,\n paymasterProvider?: PaymasterAndBundlerProviders,\n shouldOverrideFee?: boolean\n ): Promise<UserOperationStruct | undefined> {\n try {\n const mainCall = await this.decodeMainCallFromCallData(\n struct.sender,\n struct.callData\n );\n if (!mainCall) {\n throw IncorrectCallDataForTokenPaymaster;\n }\n const chainId = await getChainId(this.provider.getProjectId());\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const gasTokenAddress = getGasTokenAddress(\n this.paymasterConfig.gasToken,\n chainId\n );\n let paymasterAddress = await this.getPaymasterAddress(paymasterProvider);\n if (\n gasTokenAddress !== undefined &&\n paymasterAddress !== undefined &&\n isAddress(paymasterAddress)\n ) {\n const erc20UserOp = await this.getERC20UserOp(\n struct,\n mainCall,\n gasTokenAddress,\n paymasterAddress\n );\n if (!erc20UserOp) {\n return struct;\n }\n const paymasterResp = await this.signUserOp({\n userOp: struct,\n callData: struct.callData,\n gasTokenAddress,\n erc20UserOp,\n erc20CallData: erc20UserOp.callData,\n paymasterProvider,\n shouldOverrideFee,\n });\n if (paymasterResp) {\n return paymasterResp;\n }\n }\n } catch (error) {\n console.log(error);\n }\n return;\n }\n}\n"]}
|
|
@@ -198,10 +198,10 @@ class ZeroDevProvider extends aa_core_1.SmartAccountProvider {
|
|
|
198
198
|
throw new Error("account not connected!");
|
|
199
199
|
}
|
|
200
200
|
const [data, address] = params;
|
|
201
|
-
if (address !== (await this.getAddress())) {
|
|
201
|
+
if (address.toLowerCase() !== (await this.getAddress()).toLowerCase()) {
|
|
202
202
|
throw new Error("cannot sign for address that is not the current account");
|
|
203
203
|
}
|
|
204
|
-
return this.account.
|
|
204
|
+
return this.account.signMessageWith6492(data);
|
|
205
205
|
default:
|
|
206
206
|
return this.rpcClient.request(args);
|
|
207
207
|
}
|