UNPKG

startale-aa-sdk

Version:

SDK for startale account integration with support for account abstraction, ERC-7579, ERC-4337.

82 lines 3.4 kB
import { encodePacked } from "viem"; import { SMART_SESSIONS_ADDRESS, SmartSessionMode, encodeSmartSessionSignature, getOwnableValidatorMockSignature, getSmartSessionsValidator } from "../../../constants/index.js"; import { toModule } from "../../utils/toModule.js"; export const DUMMY_ECDSA_SIG = "0xe8b94748580ca0b4993c9a1b86b5be851bfc076ff5ce3a1ff65bf16392acfcb800f9b4f1aef1555c7fce5599fffb17e7c635502154a0333ba21f3ae491839af51c"; /** * Gets the initialization data for a Use Session module. * * @param _ - Optional arguments (currently unused). * @returns The module metadata including address, type, and initialization data. */ export const getUsePermissionModuleInitData = (_) => ({ address: SMART_SESSIONS_ADDRESS, type: "validator", initData: "0x" }); /** * Gets the initialization data for a Use Session. * * @param signerAddress - The address of the signer for the session. * @returns The encoded initialization data as a hexadecimal string. */ export const getUsePermissionInitData = ({ signerAddress }) => encodePacked(["address"], [signerAddress]); /** * Creates a Smart Sessions module for a modular smart account. * * This function sets up a Smart Sessions module with the specified parameters, * including session mode, permission ID, and session data. * * @param parameters - The parameters for creating the Smart Sessions module. * @returns A Module object representing the created Smart Sessions module. * * @example * ```typescript * const smartSessionsModule = toSmartSessionsValidator({ * account: mySmartAccount, * signer: mySigner, * moduleData: { * permissionId: '0x1234...', * mode: SmartSessionMode.USE, * enableSessionData: '0x5678...' * } * }); * ``` * * @remarks * - The function generates stub signatures and can sign user operation hashes. * - It uses the SmartSession address from the predefined addresses. * - The default session mode is USE if not specified. */ export const toSmartSessionsValidator = (parameters) => { const { account, signer, moduleInitData: moduleInitData_, deInitData = "0x", initData: initData_, initArgs: initArgs_ = { signerAddress: signer.address }, moduleData: { permissionIdIndex = 0, permissionIds = [], mode = SmartSessionMode.USE, enableSessionData } = {} } = parameters; const initData = initData_ ?? getUsePermissionInitData(initArgs_); const moduleInitData = moduleInitData_ ?? getSmartSessionsValidator({ useRegistry: false }); return toModule({ ...parameters, signer, accountAddress: account.address, address: SMART_SESSIONS_ADDRESS, initData, moduleInitData, deInitData, getStubSignature: async () => encodeSmartSessionSignature({ mode, permissionId: permissionIds[permissionIdIndex], enableSessionData, signature: getOwnableValidatorMockSignature({ threshold: 1 }) }), signUserOpHash: async (userOpHash) => { return encodeSmartSessionSignature({ mode, permissionId: permissionIds[permissionIdIndex], enableSessionData, signature: await signer.signMessage({ message: { raw: userOpHash } }) }); } }); }; //# sourceMappingURL=toSmartSessionsValidator.js.map