w3s-web-core-sdk-test
Version:
Serverless Typescript SDK
1,480 lines (1,447 loc) • 88.6 kB
JavaScript
// src/utils/address/computeAddress.ts
import {
encodeAbiParameters as encodeAbiParameters3,
encodePacked,
getContractAddress,
keccak256 as keccak2562,
parseAbiParameters
} from "viem";
// src/constants/provider.ts
var DEFAULT_RPC_URL = "https://modular-sdk.circle.com/v1/rpc/w3s/buidl";
var MODULAR_WALLETS_TRANSPORT_KEY = "Modular wallets transport";
var MODULAR_WALLETS_TRANSPORT_NAME = "Modular wallets transport";
// src/constants/smartAccount.ts
import { entryPoint07Abi, entryPoint07Address } from "viem/account-abstraction";
// src/abis/authenticatorData.ts
var AUTHENTICATOR_DATA = [
{
components: [
{
components: [
{
internalType: "bytes",
name: "authenticatorData",
type: "bytes"
},
{
internalType: "string",
name: "clientDataJSON",
type: "bytes"
},
{
internalType: "uint256",
name: "challengeIndex",
type: "uint256"
},
{
internalType: "uint256",
name: "typeIndex",
type: "uint256"
},
{
internalType: "bool",
name: "requireUserVerification",
type: "bool"
}
],
internalType: "struct WebAuthnData",
name: "webAuthnData",
type: "tuple"
},
{
internalType: "uint256",
name: "r",
type: "uint256"
},
{
internalType: "uint256",
name: "s",
type: "uint256"
}
],
name: "WebAuthnSigDynamicPart",
type: "tuple"
}
];
// src/abis/factory.ts
var CIRCLE_MSCA_6900_V1_EP07_FACTORY_ABI = [
{
type: "constructor",
inputs: [
{
name: "_owner",
type: "address",
internalType: "address"
},
{
name: "_entryPointAddr",
type: "address",
internalType: "address"
},
{
name: "_pluginManagerAddr",
type: "address",
internalType: "address"
}
],
stateMutability: "nonpayable"
},
{
type: "receive",
stateMutability: "payable"
},
{
type: "function",
name: "acceptOwnership",
inputs: [],
outputs: [],
stateMutability: "nonpayable"
},
{
type: "function",
name: "accountImplementation",
inputs: [],
outputs: [
{
name: "",
type: "address",
internalType: "contract UpgradableMSCA"
}
],
stateMutability: "view"
},
{
type: "function",
name: "addStake",
inputs: [
{
name: "_unstakeDelaySec",
type: "uint32",
internalType: "uint32"
}
],
outputs: [],
stateMutability: "payable"
},
{
type: "function",
name: "createAccount",
inputs: [
{
name: "_sender",
type: "bytes32",
internalType: "bytes32"
},
{
name: "_salt",
type: "bytes32",
internalType: "bytes32"
},
{
name: "_initializingData",
type: "bytes",
internalType: "bytes"
}
],
outputs: [
{
name: "account",
type: "address",
internalType: "contract UpgradableMSCA"
}
],
stateMutability: "nonpayable"
},
{
type: "function",
name: "entryPoint",
inputs: [],
outputs: [
{
name: "",
type: "address",
internalType: "contract IEntryPoint"
}
],
stateMutability: "view"
},
{
type: "function",
name: "getAddress",
inputs: [
{
name: "_sender",
type: "bytes32",
internalType: "bytes32"
},
{
name: "_salt",
type: "bytes32",
internalType: "bytes32"
},
{
name: "_initializingData",
type: "bytes",
internalType: "bytes"
}
],
outputs: [
{
name: "addr",
type: "address",
internalType: "address"
},
{
name: "mixedSalt",
type: "bytes32",
internalType: "bytes32"
}
],
stateMutability: "view"
},
{
type: "function",
name: "isPluginAllowed",
inputs: [
{
name: "",
type: "address",
internalType: "address"
}
],
outputs: [
{
name: "",
type: "bool",
internalType: "bool"
}
],
stateMutability: "view"
},
{
type: "function",
name: "owner",
inputs: [],
outputs: [
{
name: "",
type: "address",
internalType: "address"
}
],
stateMutability: "view"
},
{
type: "function",
name: "pendingOwner",
inputs: [],
outputs: [
{
name: "",
type: "address",
internalType: "address"
}
],
stateMutability: "view"
},
{
type: "function",
name: "renounceOwnership",
inputs: [],
outputs: [],
stateMutability: "nonpayable"
},
{
type: "function",
name: "setPlugins",
inputs: [
{
name: "_plugins",
type: "address[]",
internalType: "address[]"
},
{
name: "_permissions",
type: "bool[]",
internalType: "bool[]"
}
],
outputs: [],
stateMutability: "nonpayable"
},
{
type: "function",
name: "transferOwnership",
inputs: [
{
name: "newOwner",
type: "address",
internalType: "address"
}
],
outputs: [],
stateMutability: "nonpayable"
},
{
type: "function",
name: "unlockStake",
inputs: [],
outputs: [],
stateMutability: "nonpayable"
},
{
type: "function",
name: "withdrawStake",
inputs: [
{
name: "_withdrawAddress",
type: "address",
internalType: "address payable"
}
],
outputs: [],
stateMutability: "nonpayable"
},
{
type: "event",
name: "AccountCreated",
inputs: [
{
name: "proxy",
type: "address",
indexed: true,
internalType: "address"
},
{
name: "sender",
type: "bytes32",
indexed: false,
internalType: "bytes32"
},
{
name: "salt",
type: "bytes32",
indexed: false,
internalType: "bytes32"
}
],
anonymous: false
},
{
type: "event",
name: "FactoryDeployed",
inputs: [
{
name: "factory",
type: "address",
indexed: true,
internalType: "address"
},
{
name: "accountImplementation",
type: "address",
indexed: false,
internalType: "address"
},
{
name: "entryPoint",
type: "address",
indexed: false,
internalType: "address"
}
],
anonymous: false
},
{
type: "event",
name: "OwnershipTransferStarted",
inputs: [
{
name: "previousOwner",
type: "address",
indexed: true,
internalType: "address"
},
{
name: "newOwner",
type: "address",
indexed: true,
internalType: "address"
}
],
anonymous: false
},
{
type: "event",
name: "OwnershipTransferred",
inputs: [
{
name: "previousOwner",
type: "address",
indexed: true,
internalType: "address"
},
{
name: "newOwner",
type: "address",
indexed: true,
internalType: "address"
}
],
anonymous: false
},
{
type: "error",
name: "Create2FailedDeployment",
inputs: []
},
{
type: "error",
name: "InvalidInitializationInput",
inputs: []
},
{
type: "error",
name: "InvalidLength",
inputs: []
},
{
type: "error",
name: "OwnableInvalidOwner",
inputs: [
{
name: "owner",
type: "address",
internalType: "address"
}
]
},
{
type: "error",
name: "OwnableUnauthorizedAccount",
inputs: [
{
name: "account",
type: "address",
internalType: "address"
}
]
},
{
type: "error",
name: "PluginIsNotAllowed",
inputs: [
{
name: "plugin",
type: "address",
internalType: "address"
}
]
}
];
// src/abis/initializingData.ts
var INITIALIZING_DATA_ABI_PARAMS = [
{ name: "plugins", type: "address[]" },
{ name: "manifestHashes", type: "bytes32[]" },
{ name: "pluginInstallData", type: "bytes[]" }
];
// src/abis/plugin.ts
var CIRCLE_PLUGIN_INSTALL_DATA_ABI = [
{ name: "initialOwners", type: "address[]" },
{ name: "ownerWeights", type: "uint256[]" },
{
name: "initialPublicKeyOwners",
type: "tuple[]",
components: [
{ name: "x", type: "uint256" },
{ name: "y", type: "uint256" }
]
},
{ name: "publicKeyOwnerWeights", type: "uint256[]" },
{ name: "thresholdWeight", type: "uint256" }
];
// src/abis/publicKeyCoordinates.ts
var PUBLIC_KEY_COORDINATES_ABI = [
{ name: "x", type: "uint256" },
{ name: "y", type: "uint256" }
];
// src/abis/upgradableMsca.ts
var CIRCLE_MSCA_6900_V1_EP07_ABI = [
{
inputs: [
{
internalType: "contract IEntryPoint",
name: "_newEntryPoint",
type: "address"
},
{
internalType: "contract PluginManager",
name: "_newPluginManager",
type: "address"
}
],
stateMutability: "nonpayable",
type: "constructor"
},
{
inputs: [{ internalType: "address", name: "target", type: "address" }],
name: "AddressEmptyCode",
type: "error"
},
{
inputs: [
{ internalType: "address", name: "implementation", type: "address" }
],
name: "ERC1967InvalidImplementation",
type: "error"
},
{ inputs: [], name: "ERC1967NonPayable", type: "error" },
{
inputs: [
{ internalType: "address", name: "plugin", type: "address" },
{ internalType: "bytes4", name: "selector", type: "bytes4" }
],
name: "ExecFromPluginToSelectorNotPermitted",
type: "error"
},
{
inputs: [],
name: "ExecuteFromPluginToExternalNotPermitted",
type: "error"
},
{ inputs: [], name: "FailedInnerCall", type: "error" },
{ inputs: [], name: "InvalidAuthorizer", type: "error" },
{
inputs: [{ internalType: "bytes4", name: "selector", type: "bytes4" }],
name: "InvalidExecutionFunction",
type: "error"
},
{
inputs: [{ internalType: "uint8", name: "functionId", type: "uint8" }],
name: "InvalidHookFunctionId",
type: "error"
},
{ inputs: [], name: "InvalidInitialization", type: "error" },
{ inputs: [], name: "InvalidInitializationInput", type: "error" },
{ inputs: [], name: "InvalidLimit", type: "error" },
{
inputs: [{ internalType: "uint8", name: "functionId", type: "uint8" }],
name: "InvalidValidationFunctionId",
type: "error"
},
{
inputs: [{ internalType: "address", name: "plugin", type: "address" }],
name: "NativeTokenSpendingNotPermitted",
type: "error"
},
{ inputs: [], name: "NotFoundSelector", type: "error" },
{ inputs: [], name: "NotInitializing", type: "error" },
{
inputs: [{ internalType: "bytes4", name: "selector", type: "bytes4" }],
name: "NotNativeFunctionSelector",
type: "error"
},
{
inputs: [
{ internalType: "address", name: "plugin", type: "address" },
{ internalType: "uint8", name: "functionId", type: "uint8" },
{ internalType: "bytes", name: "revertReason", type: "bytes" }
],
name: "PostExecHookFailed",
type: "error"
},
{
inputs: [
{ internalType: "address", name: "plugin", type: "address" },
{ internalType: "uint8", name: "functionId", type: "uint8" },
{ internalType: "bytes", name: "revertReason", type: "bytes" }
],
name: "PreExecHookFailed",
type: "error"
},
{
inputs: [
{ internalType: "address", name: "plugin", type: "address" },
{ internalType: "uint8", name: "functionId", type: "uint8" },
{ internalType: "bytes", name: "revertReason", type: "bytes" }
],
name: "PreRuntimeValidationHookFailed",
type: "error"
},
{
inputs: [
{ internalType: "address", name: "plugin", type: "address" },
{ internalType: "uint8", name: "functionId", type: "uint8" },
{ internalType: "bytes", name: "revertReason", type: "bytes" }
],
name: "RuntimeValidationFailed",
type: "error"
},
{
inputs: [{ internalType: "address", name: "plugin", type: "address" }],
name: "TargetIsPlugin",
type: "error"
},
{ inputs: [], name: "UUPSUnauthorizedCallContext", type: "error" },
{
inputs: [{ internalType: "bytes32", name: "slot", type: "bytes32" }],
name: "UUPSUnsupportedProxiableUUID",
type: "error"
},
{ inputs: [], name: "UnauthorizedCaller", type: "error" },
{ inputs: [], name: "WalletStorageIsInitialized", type: "error" },
{ inputs: [], name: "WalletStorageIsInitializing", type: "error" },
{ inputs: [], name: "WalletStorageIsNotInitializing", type: "error" },
{ inputs: [], name: "WrongTimeBounds", type: "error" },
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "uint64",
name: "version",
type: "uint64"
}
],
name: "Initialized",
type: "event"
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "plugin",
type: "address"
},
{
indexed: false,
internalType: "bytes32",
name: "manifestHash",
type: "bytes32"
},
{
components: [
{ internalType: "address", name: "plugin", type: "address" },
{ internalType: "uint8", name: "functionId", type: "uint8" }
],
indexed: false,
internalType: "struct FunctionReference[]",
name: "dependencies",
type: "tuple[]"
}
],
name: "PluginInstalled",
type: "event"
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "plugin",
type: "address"
},
{
indexed: true,
internalType: "bool",
name: "onUninstallSucceeded",
type: "bool"
}
],
name: "PluginUninstalled",
type: "event"
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "account",
type: "address"
},
{
indexed: true,
internalType: "address",
name: "entryPointAddress",
type: "address"
}
],
name: "UpgradableMSCAInitialized",
type: "event"
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "implementation",
type: "address"
}
],
name: "Upgraded",
type: "event"
},
{
anonymous: false,
inputs: [],
name: "WalletStorageInitialized",
type: "event"
},
{ stateMutability: "payable", type: "fallback" },
{
inputs: [],
name: "UPGRADE_INTERFACE_VERSION",
outputs: [{ internalType: "string", name: "", type: "string" }],
stateMutability: "view",
type: "function"
},
{
inputs: [],
name: "addDeposit",
outputs: [],
stateMutability: "payable",
type: "function"
},
{
inputs: [],
name: "author",
outputs: [{ internalType: "string", name: "", type: "string" }],
stateMutability: "view",
type: "function"
},
{
inputs: [],
name: "entryPoint",
outputs: [
{ internalType: "contract IEntryPoint", name: "", type: "address" }
],
stateMutability: "view",
type: "function"
},
{
inputs: [
{ internalType: "address", name: "target", type: "address" },
{ internalType: "uint256", name: "value", type: "uint256" },
{ internalType: "bytes", name: "data", type: "bytes" }
],
name: "execute",
outputs: [{ internalType: "bytes", name: "returnData", type: "bytes" }],
stateMutability: "payable",
type: "function"
},
{
inputs: [
{
components: [
{ internalType: "address", name: "target", type: "address" },
{ internalType: "uint256", name: "value", type: "uint256" },
{ internalType: "bytes", name: "data", type: "bytes" }
],
internalType: "struct Call[]",
name: "calls",
type: "tuple[]"
}
],
name: "executeBatch",
outputs: [{ internalType: "bytes[]", name: "returnData", type: "bytes[]" }],
stateMutability: "payable",
type: "function"
},
{
inputs: [{ internalType: "bytes", name: "data", type: "bytes" }],
name: "executeFromPlugin",
outputs: [{ internalType: "bytes", name: "", type: "bytes" }],
stateMutability: "payable",
type: "function"
},
{
inputs: [
{ internalType: "address", name: "target", type: "address" },
{ internalType: "uint256", name: "value", type: "uint256" },
{ internalType: "bytes", name: "data", type: "bytes" }
],
name: "executeFromPluginExternal",
outputs: [{ internalType: "bytes", name: "", type: "bytes" }],
stateMutability: "payable",
type: "function"
},
{
inputs: [],
name: "getDeposit",
outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
stateMutability: "view",
type: "function"
},
{
inputs: [],
name: "getEntryPoint",
outputs: [
{ internalType: "contract IEntryPoint", name: "", type: "address" }
],
stateMutability: "view",
type: "function"
},
{
inputs: [{ internalType: "bytes4", name: "selector", type: "bytes4" }],
name: "getExecutionFunctionConfig",
outputs: [
{
components: [
{ internalType: "address", name: "plugin", type: "address" },
{
components: [
{ internalType: "address", name: "plugin", type: "address" },
{ internalType: "uint8", name: "functionId", type: "uint8" }
],
internalType: "struct FunctionReference",
name: "userOpValidationFunction",
type: "tuple"
},
{
components: [
{ internalType: "address", name: "plugin", type: "address" },
{ internalType: "uint8", name: "functionId", type: "uint8" }
],
internalType: "struct FunctionReference",
name: "runtimeValidationFunction",
type: "tuple"
}
],
internalType: "struct ExecutionFunctionConfig",
name: "executionFunctionConfig",
type: "tuple"
}
],
stateMutability: "view",
type: "function"
},
{
inputs: [{ internalType: "bytes4", name: "selector", type: "bytes4" }],
name: "getExecutionHooks",
outputs: [
{
components: [
{
components: [
{ internalType: "address", name: "plugin", type: "address" },
{ internalType: "uint8", name: "functionId", type: "uint8" }
],
internalType: "struct FunctionReference",
name: "preExecHook",
type: "tuple"
},
{
components: [
{ internalType: "address", name: "plugin", type: "address" },
{ internalType: "uint8", name: "functionId", type: "uint8" }
],
internalType: "struct FunctionReference",
name: "postExecHook",
type: "tuple"
}
],
internalType: "struct ExecutionHooks[]",
name: "executionHooks",
type: "tuple[]"
}
],
stateMutability: "view",
type: "function"
},
{
inputs: [],
name: "getInstalledPlugins",
outputs: [
{ internalType: "address[]", name: "pluginAddresses", type: "address[]" }
],
stateMutability: "view",
type: "function"
},
{
inputs: [],
name: "getNonce",
outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
stateMutability: "view",
type: "function"
},
{
inputs: [{ internalType: "bytes4", name: "selector", type: "bytes4" }],
name: "getPreValidationHooks",
outputs: [
{
components: [
{ internalType: "address", name: "plugin", type: "address" },
{ internalType: "uint8", name: "functionId", type: "uint8" }
],
internalType: "struct FunctionReference[]",
name: "preUserOpValidationHooks",
type: "tuple[]"
},
{
components: [
{ internalType: "address", name: "plugin", type: "address" },
{ internalType: "uint8", name: "functionId", type: "uint8" }
],
internalType: "struct FunctionReference[]",
name: "preRuntimeValidationHooks",
type: "tuple[]"
}
],
stateMutability: "view",
type: "function"
},
{
inputs: [
{ internalType: "address[]", name: "plugins", type: "address[]" },
{ internalType: "bytes32[]", name: "manifestHashes", type: "bytes32[]" },
{ internalType: "bytes[]", name: "pluginInstallData", type: "bytes[]" }
],
name: "initializeUpgradableMSCA",
outputs: [],
stateMutability: "nonpayable",
type: "function"
},
{
inputs: [
{ internalType: "address", name: "plugin", type: "address" },
{ internalType: "bytes32", name: "manifestHash", type: "bytes32" },
{ internalType: "bytes", name: "pluginInstallData", type: "bytes" },
{
components: [
{ internalType: "address", name: "plugin", type: "address" },
{ internalType: "uint8", name: "functionId", type: "uint8" }
],
internalType: "struct FunctionReference[]",
name: "dependencies",
type: "tuple[]"
}
],
name: "installPlugin",
outputs: [],
stateMutability: "nonpayable",
type: "function"
},
{
inputs: [],
name: "pluginManager",
outputs: [
{ internalType: "contract PluginManager", name: "", type: "address" }
],
stateMutability: "view",
type: "function"
},
{
inputs: [],
name: "proxiableUUID",
outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }],
stateMutability: "view",
type: "function"
},
{
inputs: [{ internalType: "bytes4", name: "interfaceId", type: "bytes4" }],
name: "supportsInterface",
outputs: [{ internalType: "bool", name: "", type: "bool" }],
stateMutability: "view",
type: "function"
},
{
inputs: [
{ internalType: "address", name: "plugin", type: "address" },
{ internalType: "bytes", name: "config", type: "bytes" },
{ internalType: "bytes", name: "pluginUninstallData", type: "bytes" }
],
name: "uninstallPlugin",
outputs: [],
stateMutability: "nonpayable",
type: "function"
},
{
inputs: [
{ internalType: "address", name: "newImplementation", type: "address" },
{ internalType: "bytes", name: "data", type: "bytes" }
],
name: "upgradeToAndCall",
outputs: [],
stateMutability: "payable",
type: "function"
},
{
inputs: [
{
components: [
{ internalType: "address", name: "sender", type: "address" },
{ internalType: "uint256", name: "nonce", type: "uint256" },
{ internalType: "bytes", name: "initCode", type: "bytes" },
{ internalType: "bytes", name: "callData", type: "bytes" },
{
internalType: "bytes32",
name: "accountGasLimits",
type: "bytes32"
},
{
internalType: "uint256",
name: "preVerificationGas",
type: "uint256"
},
{ internalType: "bytes32", name: "gasFees", type: "bytes32" },
{ internalType: "bytes", name: "paymasterAndData", type: "bytes" },
{ internalType: "bytes", name: "signature", type: "bytes" }
],
internalType: "struct PackedUserOperation",
name: "userOp",
type: "tuple"
},
{ internalType: "bytes32", name: "userOpHash", type: "bytes32" },
{ internalType: "uint256", name: "missingAccountFunds", type: "uint256" }
],
name: "validateUserOp",
outputs: [
{ internalType: "uint256", name: "validationData", type: "uint256" }
],
stateMutability: "nonpayable",
type: "function"
},
{
inputs: [],
name: "version",
outputs: [{ internalType: "string", name: "", type: "string" }],
stateMutability: "view",
type: "function"
},
{
inputs: [
{
internalType: "address payable",
name: "withdrawAddress",
type: "address"
},
{ internalType: "uint256", name: "amount", type: "uint256" }
],
name: "withdrawDepositTo",
outputs: [],
stateMutability: "nonpayable",
type: "function"
},
{ stateMutability: "payable", type: "receive" }
];
// src/bytecode/factory.ts
var CIRCLE_MSCA_6900_V07_FACTORY_BYTECODE = "0x6040608081526004803610156200001557600080fd5b600091823560e01c9081630396cb60146200060257816311464fbe14620005bc578163715018a6146200055257816379ba509714620004c157816381d0dff1146200048f5781638da5cb5b1462000465578163a50833cd1462000422578163acf85fc114620003d5578163b0d691fe146200038f57838263bb9fe6bf1462000310578263c23a5cea146200025f57508163e034b090146200016e578163e30c39781462000143575063f2fde38b14620000cd57600080fd5b346200013f5760203660031901126200013f57356001600160a01b03818116918290036200013b57620000ff62000c62565b600180546001600160a01b031916831790558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b8280fd5b5080fd5b8390346200013f57816003193601126200013f5760015490516001600160a01b039091168152602090f35b9050346200013b57806003193601126200013b5767ffffffffffffffff9082358281116200025b57620001a5903690850162000783565b90926024359081116200025757620001c1903690860162000783565b9094620001cd62000c62565b818303620002495750855b828110620001e4578680f35b620001f181838862000c3b565b359081151580920362000245576200020b81858862000c3b565b356001600160a01b03811692908390036200024157600192895260026020528589209060ff8019835416911617905501620001d8565b8880fd5b8780fd5b835163251f56a160e21b8152fd5b8580fd5b8480fd5b929150346200030c5760203660031901126200030c5781356001600160a01b0381811693918490036200025b576200029662000c62565b7f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0321692833b156200025b5760248592838551968794859363611d2e7560e11b85528401525af1908115620003035750620002ed5750f35b620002f8906200069a565b620003005780f35b80fd5b513d84823e3d90fd5b5050fd5b929150346200030c57826003193601126200030c576200032f62000c62565b7f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0326001600160a01b031691823b156200038a57815163bb9fe6bf60e01b81529284918491829084905af1908115620003035750620002ed5750f35b505050fd5b8390346200013f57816003193601126200013f57517f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0326001600160a01b03168152602090f35b83346200030057506200040c62000403620003f03662000705565b60208082959395518301019101620007f5565b93909262000ca4565b82516001600160a01b0390921682526020820152f35b919050346200013b5760203660031901126200013b57356001600160a01b038116908190036200013b57818360ff92602095526002855220541690519015158152f35b8390346200013f57816003193601126200013f57905490516001600160a01b039091168152602090f35b8390346200013f57602090620004b0620004a93662000705565b9162000afd565b90516001600160a01b039091168152f35b9050346200013b57826003193601126200013b57600154916001600160a01b039133838516036200053b5750506bffffffffffffffffffffffff60a01b8092166001556000549133908316176000553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a380f35b60249250519063118cdaa760e01b82523390820152fd5b833462000300578060031936011262000300576200056f62000c62565b600180546001600160a01b0319908116909155600080549182168155906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b8390346200013f57816003193601126200013f57517f000000000000000000000000d3987990b728a8f62819ef2fb58180188fb266a76001600160a01b03168152602090f35b905060203660031901126200013b5782823563ffffffff81168091036200013f576200062d62000c62565b7f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0326001600160a01b031693843b156200013b5760249084519586938492621cb65b60e51b845283015234905af19081156200030357506200068c575080f35b62000697906200069a565b80f35b67ffffffffffffffff8111620006af57604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117620006af57604052565b67ffffffffffffffff8111620006af57601f01601f191660200190565b60606003198201126200077e57600435916024359160443567ffffffffffffffff81116200077e57816023820112156200077e578060040135906200074a82620006e8565b926200075a6040519485620006c5565b828452602483830101116200077e5781600092602460209301838601378301015290565b600080fd5b9181601f840112156200077e5782359167ffffffffffffffff83116200077e576020808501948460051b0101116200077e57565b67ffffffffffffffff8111620006af5760051b60200190565b60005b838110620007e45750506000910152565b8181015183820152602001620007d3565b90916060828403126200077e57815167ffffffffffffffff908181116200077e57830184601f820112156200077e578051946020916200083587620007b7565b906040976200084789519384620006c5565b808352848084019160051b830101918483116200077e578501905b828210620009ae5750505095828601518481116200077e57860182601f820112156200077e578051906200089682620007b7565b91620008a584519384620006c5565b808352858084019160051b830101918583116200077e5786809101915b8383106200099d57505050509581810151908582116200077e57019180601f840112156200077e57825190620008f882620007b7565b956200090784519788620006c5565b828752858088019360051b860101948286116200077e57868101935b8685106200093657505050505050505090565b84518381116200077e5782019084603f830112156200077e5788820151906200095f82620006e8565b6200096d89519182620006c5565b828152868984860101116200077e57620009918b949385948b8685019101620007d0565b81520194019362000923565b8251815291810191879101620008c2565b81516001600160a01b03811681036200077e57815290850190850162000862565b90602091620009ea81518092818552858086019101620007d0565b601f01601f1916010190565b60608101606082528251809152608082019060208094019060005b8582821062000ab857505050508181038383015282808551928381520194019060005b81811062000aa35750505060408184039101528251908183528083019281808460051b8301019501936000915b84831062000a725750505050505090565b909192939495848062000a92600193601f198682030187528a51620009cf565b980193019301919493929062000a61565b82518652948401949184019160010162000a34565b83516001600160a01b03168552938401939092019160010162000a11565b6001600160a01b03909116815260406020820181905262000afa92910190620009cf565b90565b929162000b149060208082518301019101620007f5565b9162000b26838383878a969a62000ca4565b9096873b62000c275762000b6d60018060a01b039362000b5e60409788519485936370c321eb60e01b602086015260248501620009f6565b03601f198101835282620006c5565b8451906102d38083019183831067ffffffffffffffff841117620006af57839262000bc29262000e9a8539867f000000000000000000000000d3987990b728a8f62819ef2fb58180188fb266a7169062000ad6565b03906000f5801562000c1c57811695169283860362000c0b57825191825260208201527f934abbffb6906db60a85b076f1e41da9667dfa53c7724f4fe2333298d7b1db8c9190a2565b8251633a0ba96160e11b8152600490fd5b83513d6000823e3d90fd5b50506001600160a01b039095169450505050565b919081101562000c4c5760051b0190565b634e487b7160e01b600052603260045260246000fd5b6000546001600160a01b0316330362000c7757565b60405163118cdaa760e01b8152336004820152602490fd5b805182101562000c4c5760209160051b010190565b91939492908451801590811562000e8c575b811562000e7f575b5062000e6d5760005b855181101562000d2f576001600160a01b038062000ce6838962000c8f565b5116600052600260205260409060ff8260002054161562000d0c57505060010162000cc7565b62000d1a6024938962000c8f565b519151625e27f360e81b815291166004820152fd5b509091929394604091825160209182820196875284820152838152606081019481861067ffffffffffffffff871117620006af5762000e54838762000e479362000dbc9c60559b600b9b8b52875190209d8e9960806102d39962000d96888c0188620006c5565b8a8752019862000e9a8a398b516370c321eb60e01b8782015293849360248501620009f6565b0362000dd1601f1991828101845283620006c5565b62000e1e8a51918262000e118782019560018060a01b037f000000000000000000000000d3987990b728a8f62819ef2fb58180188fb266a7168762000ad6565b03908101835282620006c5565b895195869362000e37868601998a9251928391620007d0565b84019151809386840190620007d0565b01038084520182620006c5565b5190208351938401528201523081520160ff8153209190565b604051635297bbdb60e11b8152600490fd5b9050865114153862000cbe565b8351811415915062000cb656fe60806040526102d38038038061001481610194565b92833981019060408183031261018f5780516001600160a01b03811680820361018f5760208381015190936001600160401b03821161018f570184601f8201121561018f5780519061006d610068836101cf565b610194565b9582875285838301011161018f57849060005b83811061017b57505060009186010152813b15610163577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b03191682179055604051907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28351156101455750600080848461012c96519101845af4903d1561013c573d61011c610068826101cf565b908152600081943d92013e6101ea565b505b6040516085908161024e8239f35b606092506101ea565b9250505034610154575061012e565b63b398979f60e01b8152600490fd5b60249060405190634c9c8ce360e01b82526004820152fd5b818101830151888201840152869201610080565b600080fd5b6040519190601f01601f191682016001600160401b038111838210176101b957604052565b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101b957601f01601f191660200190565b9061021157508051156101ff57805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580610244575b610222575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b1561021a56fe60806040527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54600090819081906001600160a01b0316368280378136915af43d82803e15604b573d90f35b3d90fdfea26469706673582212202b867e05fada64e8389ea34fca4e9048d8dde9af33f4fdd783dd16f9ba5fcf9c64736f6c63430008180033a264697066735822122092daff5db426464b06d1b690c6f5ffb5bb1e6a2d5c94602ef7595a14039390b564736f6c63430008180033";
// src/constants/smartAccount.ts
var ENTRY_POINT_07 = {
abi: entryPoint07Abi,
address: entryPoint07Address,
version: "0.7"
};
var FACTORY = {
abi: CIRCLE_MSCA_6900_V1_EP07_FACTORY_ABI,
address: "0xc83d88C018D143d08AFE910221D445189Fc6817a",
bytecode: CIRCLE_MSCA_6900_V07_FACTORY_BYTECODE
};
var UPGRADABLE_MSCA = {
abi: CIRCLE_MSCA_6900_V1_EP07_ABI,
/**
* The address of the upgradable MSCA account implementation.
* @remarks This address is from https://sepolia.etherscan.io/address/0xc83d88c018d143d08afe910221d445189fc6817a#readContract `accountImplementation` value.
*/
address: "0xd3987990b728a8F62819ef2Fb58180188fb266a7"
};
var CIRCLE_WEIGHTED_WEB_AUTHN_MULTISIG_PLUGIN = {
address: "0x5a2262d58eB72B84701D6efBf6bB6586C793A65b",
manifestHash: "0xa043327d77a74c1c55cfa799284b831fe09535a88b9f5fa4173d334e5ba0fd91"
};
var CIRCLE_DEFAULT_TOKEN_CALLBACK_PLUGIN = {
address: "0x03431Fb00fB2e26b5bC502DFeF8dA30E1C8643b8",
manifestHash: "0xd892482cc7e665eca1d358d318d38aa3a63c10247d473d04fc3538f4069ce4ae",
installData: "0x"
};
var ERC1769_PROXY = {
creationCode: "0x60806040526102d38038038061001481610194565b92833981019060408183031261018f5780516001600160a01b03811680820361018f5760208381015190936001600160401b03821161018f570184601f8201121561018f5780519061006d610068836101cf565b610194565b9582875285838301011161018f57849060005b83811061017b57505060009186010152813b15610163577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b03191682179055604051907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28351156101455750600080848461012c96519101845af4903d1561013c573d61011c610068826101cf565b908152600081943d92013e6101ea565b505b6040516085908161024e8239f35b606092506101ea565b9250505034610154575061012e565b63b398979f60e01b8152600490fd5b60249060405190634c9c8ce360e01b82526004820152fd5b818101830151888201840152869201610080565b600080fd5b6040519190601f01601f191682016001600160401b038111838210176101b957604052565b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101b957601f01601f191660200190565b9061021157508051156101ff57805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580610244575b610222575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b1561021a56fe60806040527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54600090819081906001600160a01b0316368280378136915af43d82803e15604b573d90f35b3d90fdfea26469706673582212202b867e05fada64e8389ea34fca4e9048d8dde9af33f4fdd783dd16f9ba5fcf9c64736f6c63430008180033"
};
var PUBLIC_KEY_OWN_WEIGHTS = [1n];
var THRESHOLD_WEIGHT = 1n;
var STUB_SIGNATURE = "0x0000be58786f7ae825e097256fc83a4749b95189e03e9963348373e9c595b15200000000000000000000000000000000000000000000000000000000000000412200000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006091077742edaf8be2fa866827236532ec2a5547fe2721e606ba591d1ffae7a15c022e5f8fe5614bbf65ea23ad3781910eb04a1a60fae88190001ecf46e5f5680a00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002549960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d9763050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000867b2274797065223a22776562617574686e2e676574222c226368616c6c656e6765223a224b6d62474d316a4d554b57794d6352414c6774553953537144384841744867486178564b6547516b503541222c226f726967696e223a22687474703a2f2f6c6f63616c686f73743a35313733222c2263726f73734f726967696e223a66616c73657d0000000000000000000000000000000000000000000000000000";
var REPLAY_SAFE_HASH_V1 = {
name: "Weighted Multisig Webauthn Plugin",
primaryType: "CircleWeightedWebauthnMultisigMessage",
domainSeparatorType: "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract,bytes32 salt)",
moduleType: "CircleWeightedWebauthnMultisigMessage(bytes32 hash)",
version: "1.0.0"
};
var EIP712_PREFIX = "0x1901";
var MINIMUM_VERIFICATION_GAS_LIMIT = 6e5;
var MINIMUM_UNDEPLOY_VERIFICATION_GAS_LIMIT = 15e5;
var SEPOLIA_MINIMUM_VERIFICATION_GAS_LIMIT = 6e5;
var SEPOLIA_MINIMUM_UNDEPLOY_VERIFICATION_GAS_LIMIT = 2e6;
var MAINNET_MINIMUM_VERIFICATION_GAS_LIMIT = 1e6;
var MAINNET_MINIMUM_UNDEPLOY_VERIFICATION_GAS_LIMIT = 25e5;
// src/utils/address/getPublicKeyParamsFromOwner.ts
import { encodeAbiParameters, keccak256 } from "viem";
import { parsePublicKey } from "webauthn-p256";
function getPublicKeyParamsFromOwner(owner) {
const publicKey = parsePublicKey(owner.publicKey);
const initialPublicKeyOwners = [publicKey];
const sender = keccak256(
encodeAbiParameters(PUBLIC_KEY_COORDINATES_ABI, [
initialPublicKeyOwners[0].x,
initialPublicKeyOwners[0].y
])
);
return { sender, initialPublicKeyOwners };
}
// src/utils/address/getSalt.ts
import { pad } from "viem";
function getSalt() {
return pad("0x", { size: 32 });
}
// src/utils/address/initializeUpgradableMSCA.ts
import { encodeAbiParameters as encodeAbiParameters2, encodeFunctionData } from "viem";
function getInitializeUpgradableMSCAData(owner) {
const { initialPublicKeyOwners } = getPublicKeyParamsFromOwner(owner);
const pluginInstallParams = encodeAbiParameters2(
CIRCLE_PLUGIN_INSTALL_DATA_ABI,
[[], [], initialPublicKeyOwners, PUBLIC_KEY_OWN_WEIGHTS, THRESHOLD_WEIGHT]
);
const initializeUpgradableMSCAData = encodeFunctionData({
abi: UPGRADABLE_MSCA.abi,
functionName: "initializeUpgradableMSCA",
args: [
[
CIRCLE_WEIGHTED_WEB_AUTHN_MULTISIG_PLUGIN.address,
CIRCLE_DEFAULT_TOKEN_CALLBACK_PLUGIN.address
],
[
CIRCLE_WEIGHTED_WEB_AUTHN_MULTISIG_PLUGIN.manifestHash,
CIRCLE_DEFAULT_TOKEN_CALLBACK_PLUGIN.manifestHash
],
[pluginInstallParams, CIRCLE_DEFAULT_TOKEN_CALLBACK_PLUGIN.installData]
]
});
return initializeUpgradableMSCAData;
}
function getInitializeUpgradableMSCAParams(owner) {
const { initialPublicKeyOwners } = getPublicKeyParamsFromOwner(owner);
const pluginInstallParams = encodeAbiParameters2(
CIRCLE_PLUGIN_INSTALL_DATA_ABI,
[[], [], initialPublicKeyOwners, PUBLIC_KEY_OWN_WEIGHTS, THRESHOLD_WEIGHT]
);
const initializeUpgradableMSCAParams = encodeAbiParameters2(
INITIALIZING_DATA_ABI_PARAMS,
[
[
CIRCLE_WEIGHTED_WEB_AUTHN_MULTISIG_PLUGIN.address,
CIRCLE_DEFAULT_TOKEN_CALLBACK_PLUGIN.address
],
[
CIRCLE_WEIGHTED_WEB_AUTHN_MULTISIG_PLUGIN.manifestHash,
CIRCLE_DEFAULT_TOKEN_CALLBACK_PLUGIN.manifestHash
],
[pluginInstallParams, CIRCLE_DEFAULT_TOKEN_CALLBACK_PLUGIN.installData]
]
);
return initializeUpgradableMSCAParams;
}
// src/utils/address/computeAddress.ts
function computeAddress(owner) {
const { sender } = getPublicKeyParamsFromOwner(owner);
const salt = getSalt();
const initializeUpgradableMSCAData = getInitializeUpgradableMSCAData(owner);
const mixedSalt = keccak2562(
encodeAbiParameters3(
[{ type: "bytes32" }, { type: "bytes32" }],
[sender, salt]
)
);
const bytecode = encodePacked(
["bytes", "bytes"],
[
ERC1769_PROXY.creationCode,
encodeAbiParameters3(parseAbiParameters("address, bytes"), [
UPGRADABLE_MSCA.address,
initializeUpgradableMSCAData
])
]
);
const address = getContractAddress({
bytecode,
from: FACTORY.address,
opcode: "CREATE2",
salt: mixedSalt
});
return address;
}
// src/utils/mock/getJsonRpcResponse.ts
function getJsonRpcResponse(payload, result) {
return Promise.resolve({
id: payload.id,
jsonrpc: "2.0",
result
});
}
// src/utils/mock/getJsonRpcStringifyResponse.ts
function getJsonRpcStringifyResponse(result, id = 1) {
const mockResponse = {
id,
jsonrpc: "2.0",
result
};
return JSON.stringify(mockResponse);
}
// src/utils/publicKey/parseBase64EncodedPublicKey.ts
import {
base64UrlToBytes,
bytesToCryptoKey,
cryptoKeyToBytes,
parsePublicKey as parsePublicKey2
} from "webauthn-p256";
async function parseBase64EncodedPublicKey(base64Url) {
const bytes = base64UrlToBytes(base64Url);
const cryptoKey = await bytesToCryptoKey(bytes);
const publicKey = await cryptoKeyToBytes(cryptoKey);
return parsePublicKey2(publicKey);
}
// src/utils/rpc/fetchFromApi.ts
import { v4 as uuidv4 } from "uuid";
import { EIP1193ProviderRpcError } from "viem";
import { ResponseError } from "web3";
async function fetchFromApi(clientUrl, clientKey, payload, requestOptions) {
const fetchResponse = await fetch(clientUrl, {
...requestOptions,
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${clientKey}`,
"X-AppInfo": `platform=web;version=${"1.0.0"};uri=${window?.location?.hostname}`
},
body: JSON.stringify({
...payload,
jsonrpc: "2.0",
id: payload?.id ?? uuidv4()
})
});
if (!fetchResponse.ok) {
const errorResponse = await fetchResponse.json();
throw new ResponseError(
errorResponse,
void 0,
void 0,
fetchResponse.status
);
}
const jsonResponse = await fetchResponse.json();
if ("error" in jsonResponse) {
const errorResponse = jsonResponse;
throw new EIP1193ProviderRpcError(
errorResponse.error.code,
errorResponse.error.message
);
}
return jsonResponse;
}
// src/utils/rpc/isCircleUrl.ts
function isCircleUrl(url) {
try {
const parsedUrl = new URL(url);
const allowedHosts = [
"modular-sdk.circle.com",
"modular-sdk-staging.circle.com"
];
return allowedHosts.includes(parsedUrl.host);
} catch {
return false;
}
}
// src/utils/rpc/validateClientUrl.ts
function validateClientUrl(clientUrl) {
try {
const url = new URL(clientUrl);
const urlPattern = /^(https?:\/\/)([\da-zA-Z.-]+)(:[\d]{1,5})?([/\w .-]*)*(\?[^\s]*)?$/;
if (!urlPattern.test(clientUrl)) {
return false;
}
return url.protocol === "http:" || url.protocol === "https:";
} catch {
return false;
}
}
// src/utils/signature/toReplaySafeHash.ts
import { encodePacked as encodePacked2, keccak256 as keccak2563, pad as pad2 } from "viem";
function toReplaySafeHash({
address,
chainId,
hash
}) {
const textEncoder = new TextEncoder();
const { name, version, domainSeparatorType, moduleType } = REPLAY_SAFE_HASH_V1;
const domainSeparatorTypeHash = keccak2563(
textEncoder.encode(domainSeparatorType)
);
const moduleIdHash = keccak2563(
encodePacked2(["string", "string"], [name, version])
);
const moduleTypeHash = keccak2563(textEncoder.encode(moduleType));
const domainSeparator = encodePacked2(
["bytes", "bytes", "uint256", "bytes32", "bytes32"],
[
domainSeparatorTypeHash,
moduleIdHash,
BigInt(chainId),
pad2(CIRCLE_WEIGHTED_WEB_AUTHN_MULTISIG_PLUGIN.address),
pad2(address, {
dir: "right"
})
]
);
const structHash = encodePacked2(["bytes", "bytes"], [moduleTypeHash, hash]);
return keccak2563(
EIP712_PREFIX + keccak2563(domainSeparator).slice(2) + keccak2563(structHash).slice(2)
);
}
// src/utils/signature/toWebAuthnSignature.ts
import { encodeAbiParameters as encodeAbiParameters4, stringToHex } from "viem";
import {
parseSignature as parseP256Signature
} from "webauthn-p256";
function toWebAuthnSignature({
webauthn,
signature
}) {
const { r, s } = parseP256Signature(signature);
return encodeAbiParameters4(AUTHENTICATOR_DATA, [
{
webAuthnData: {
authenticatorData: webauthn.authenticatorData,
clientDataJSON: stringToHex(webauthn.clientDataJSON),
challengeIndex: BigInt(webauthn.challengeIndex),
typeIndex: BigInt(webauthn.typeIndex),
requireUserVerification: true
},
r,
s
}
]);
}
// src/utils/signature/wrapSignature.ts
import { encodePacked as encodePacked3, size } from "viem";
function wrapSignature({
sender,
signature,
hasUserOpGas
}) {
const sigType = hasUserOpGas ? 34 : 2;
return encodePacked3(
["bytes32", "uint256", "uint8", "uint256", "bytes"],
[sender, 65n, sigType, BigInt(size(signature)), signature]
);
}
// src/utils/smartAccount/getMinimumVerificationGasLimit.ts
import { mainnet, sepolia } from "viem/chains";
var getMinimumVerificationGasLimit = (deployed, chainId) => {
const chainSpecificLimits = {
// Ethereum Sepolia specific gas limits
[sepolia.id]: {
deployed: SEPOLIA_MINIMUM_VERIFICATION_GAS_LIMIT,
undeployed: SEPOLIA_MINIMUM_UNDEPLOY_VERIFICATION_GAS_LIMIT
},
// Ethereum Mainnet specific gas limits
[mainnet.id]: {
deployed: MAINNET_MINIMUM_VERIFICATION_GAS_LIMIT,
undeployed: MAINNET_MINIMUM_UNDEPLOY_VERIFICATION_GAS_LIMIT
}
};
const defaultLimits = {
deployed: MINIMUM_VERIFICATION_GAS_LIMIT,
undeployed: MINIMUM_UNDEPLOY_VERIFICATION_GAS_LIMIT
};
const chainLimits = chainId !== void 0 && chainId in chainSpecificLimits ? chainSpecificLimits[chainId] : defaultLimits;
return deployed ? chainLimits.deployed : chainLimits.undeployed;
};
// src/accounts/implementations/getModularWalletAddress.ts
async function getModularWalletAddress({
client,
owner,
name = `passkey-${(/* @__PURE__ */ new Date()).toISOString()}`
}) {
const { initialPublicKeyOwners } = getPublicKeyParamsFromOwner(owner);
const publicKeyX = initialPublicKeyOwners[0].x.toString();
const publicKeyY = initialPublicKeyOwners[0].y.toString();
return await client.getAddress([
{
scaConfiguration: {
initialOwnershipConfiguration: {
weightedMultisig: {
webauthnOwners: [
{
publicKeyX,
publicKeyY,
weight: 1
}
],
thresholdWeight: 1
}
},
scaCore: "circle_6900_v1"
},
metadata: {
name
}
}
]);
}
// src/accounts/implementations/toCircleSmartAccount.ts
import {
encodeFunctionData as encodeFunctionData2,
hashMessage,
hashTypedData,
pad as pad3,
publicActions,
slice
} from "viem";
import {
entryPoint07Abi as abi,
getUserOperationHash,
toSmartAccount
} from "viem/account-abstraction";
// src/clients/createRpClient.ts
import { createClient } from "viem";
// src/actions/modularWallets/getAddress.ts
async function getAddress(client, params) {
return await client.request({
method: "circle_getAddress",
params
});
}
// src/actions/rp/getLoginOptions.ts
async function getLoginOptions(client, { userId }) {
return await client.request({
method: "rp_getLoginOptions",
params: [userId]
});
}
// src/actions/rp/getLoginVerification.ts
async function getLoginVerification(client, { credential }) {
return await client.request({
method: "rp_getLoginVerification",
params: [credential]
});
}
// src/actions/rp/getRegistrationOptions.ts
async function getRegistrationOptions(client, { username }) {
return await client.request({
method: "rp_getRegistrationOptions",
params: [username]
});
}
// src/actions/rp/getRegistrationVerification.ts
async function getRegistrationVerification(client, { credential }) {
return await client.request({
method: "rp_getRegistrationVerification",
params: [credential]
});
}
// src/clients/decorators/modularWallet.ts
func