zksync-sso 0.5.0-beta.3 → 1.0.0-beta.2
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/dist/_cjs/abi/SessionKeyValidator.js +729 -993
- package/dist/_cjs/abi/SessionKeyValidator.js.map +1 -1
- package/dist/_cjs/abi/{WebAuthValidator.js → WebAuthnValidator.js} +273 -306
- package/dist/_cjs/abi/WebAuthnValidator.js.map +1 -0
- package/dist/_cjs/abi/index.js +17 -15
- package/dist/_cjs/abi/index.js.map +1 -1
- package/dist/_cjs/actions/sendUserOperation.js +14 -0
- package/dist/_cjs/actions/sendUserOperation.js.map +1 -0
- package/dist/_cjs/client/actions/deploy.js +53 -0
- package/dist/_cjs/client/actions/deploy.js.map +1 -0
- package/dist/_cjs/client/actions/index.js +22 -0
- package/dist/_cjs/client/actions/index.js.map +1 -0
- package/dist/_cjs/client/actions/modules.js +42 -0
- package/dist/_cjs/client/actions/modules.js.map +1 -0
- package/dist/_cjs/client/actions/passkey.js +89 -0
- package/dist/_cjs/client/actions/passkey.js.map +1 -0
- package/dist/_cjs/client/actions/sessions.js +178 -0
- package/dist/_cjs/client/actions/sessions.js.map +1 -0
- package/dist/_cjs/client/actions/utils.js +8 -0
- package/dist/_cjs/client/actions/utils.js.map +1 -0
- package/dist/_cjs/client/common/smart-account-client-actions.js +173 -0
- package/dist/_cjs/client/common/smart-account-client-actions.js.map +1 -0
- package/dist/_cjs/client/ecdsa/account.js +75 -30
- package/dist/_cjs/client/ecdsa/account.js.map +1 -1
- package/dist/_cjs/client/ecdsa/client-actions.js +14 -0
- package/dist/_cjs/client/ecdsa/client-actions.js.map +1 -0
- package/dist/_cjs/client/ecdsa/client.js +29 -23
- package/dist/_cjs/client/ecdsa/client.js.map +1 -1
- package/dist/_cjs/client/ecdsa/index.js +5 -5
- package/dist/_cjs/client/ecdsa/index.js.map +1 -1
- package/dist/_cjs/client/index.js +7 -82
- package/dist/_cjs/client/index.js.map +1 -1
- package/dist/_cjs/client/passkey/account.js +88 -33
- package/dist/_cjs/client/passkey/account.js.map +1 -1
- package/dist/_cjs/client/passkey/client-actions.js +42 -0
- package/dist/_cjs/client/passkey/client-actions.js.map +1 -0
- package/dist/_cjs/client/passkey/client.js +32 -41
- package/dist/_cjs/client/passkey/client.js.map +1 -1
- package/dist/_cjs/client/passkey/index.js +14 -18
- package/dist/_cjs/client/passkey/index.js.map +1 -1
- package/dist/_cjs/client/passkey/webauthn.js +381 -0
- package/dist/_cjs/client/passkey/webauthn.js.map +1 -0
- package/dist/_cjs/client/session/account.js +91 -34
- package/dist/_cjs/client/session/account.js.map +1 -1
- package/dist/_cjs/client/session/client-actions.js +19 -0
- package/dist/_cjs/client/session/client-actions.js.map +1 -0
- package/dist/_cjs/client/session/client.js +29 -83
- package/dist/_cjs/client/session/client.js.map +1 -1
- package/dist/_cjs/client/session/formatSessionPreferences.js +263 -0
- package/dist/_cjs/client/session/formatSessionPreferences.js.map +1 -0
- package/dist/_cjs/client/session/index.js +5 -0
- package/dist/_cjs/client/session/index.js.map +1 -1
- package/dist/_cjs/client/session/monitor.js +138 -0
- package/dist/_cjs/client/session/monitor.js.map +1 -0
- package/dist/_cjs/client/session/types.js +83 -0
- package/dist/_cjs/client/session/types.js.map +1 -0
- package/dist/_cjs/client/session/utils.js +95 -0
- package/dist/_cjs/client/session/utils.js.map +1 -0
- package/dist/_cjs/client-auth-server/Signer.js +67 -43
- package/dist/_cjs/client-auth-server/Signer.js.map +1 -1
- package/dist/_cjs/client-auth-server/WalletProvider.js +6 -7
- package/dist/_cjs/client-auth-server/WalletProvider.js.map +1 -1
- package/dist/_cjs/client-auth-server/session/index.js +36 -21
- package/dist/_cjs/client-auth-server/session/index.js.map +1 -1
- package/dist/_cjs/client-auth-server/session/utils.js.map +1 -1
- package/dist/_cjs/client-auth-server/utils/helpers.js.map +1 -0
- package/dist/_cjs/{client/recovery → client-auth-server/utils}/index.js +2 -2
- package/dist/_cjs/client-auth-server/utils/index.js.map +1 -0
- package/dist/_cjs/client-auth-server/utils/storage.js.map +1 -0
- package/dist/_cjs/connector/index.js +92 -13
- package/dist/_cjs/connector/index.js.map +1 -1
- package/dist/_cjs/index.js +19 -3
- package/dist/_cjs/index.js.map +1 -1
- package/dist/_esm/abi/SessionKeyValidator.js +729 -993
- package/dist/_esm/abi/SessionKeyValidator.js.map +1 -1
- package/dist/_esm/abi/{WebAuthValidator.js → WebAuthnValidator.js} +272 -305
- package/dist/_esm/abi/WebAuthnValidator.js.map +1 -0
- package/dist/_esm/abi/index.js +3 -7
- package/dist/_esm/abi/index.js.map +1 -1
- package/dist/_esm/actions/sendUserOperation.js +26 -0
- package/dist/_esm/actions/sendUserOperation.js.map +1 -0
- package/dist/_esm/client/actions/deploy.js +114 -0
- package/dist/_esm/client/actions/deploy.js.map +1 -0
- package/dist/_esm/client/actions/index.js +7 -0
- package/dist/_esm/client/actions/index.js.map +1 -0
- package/dist/_esm/client/actions/modules.js +75 -0
- package/dist/_esm/client/actions/modules.js.map +1 -0
- package/dist/_esm/client/actions/passkey.js +200 -0
- package/dist/_esm/client/actions/passkey.js.map +1 -0
- package/dist/_esm/client/actions/sessions.js +279 -0
- package/dist/_esm/client/actions/sessions.js.map +1 -0
- package/dist/_esm/client/actions/utils.js +27 -0
- package/dist/_esm/client/actions/utils.js.map +1 -0
- package/dist/_esm/client/common/smart-account-client-actions.js +209 -0
- package/dist/_esm/client/common/smart-account-client-actions.js.map +1 -0
- package/dist/_esm/client/ecdsa/account.js +91 -29
- package/dist/_esm/client/ecdsa/account.js.map +1 -1
- package/dist/_esm/client/ecdsa/client-actions.js +16 -0
- package/dist/_esm/client/ecdsa/client-actions.js.map +1 -0
- package/dist/_esm/client/ecdsa/client.js +90 -23
- package/dist/_esm/client/ecdsa/client.js.map +1 -1
- package/dist/_esm/client/ecdsa/index.js +2 -5
- package/dist/_esm/client/ecdsa/index.js.map +1 -1
- package/dist/_esm/client/index.js +6 -77
- package/dist/_esm/client/index.js.map +1 -1
- package/dist/_esm/client/passkey/account.js +118 -32
- package/dist/_esm/client/passkey/account.js.map +1 -1
- package/dist/_esm/client/passkey/client-actions.js +51 -0
- package/dist/_esm/client/passkey/client-actions.js.map +1 -0
- package/dist/_esm/client/passkey/client.js +99 -42
- package/dist/_esm/client/passkey/client.js.map +1 -1
- package/dist/_esm/client/passkey/index.js +4 -4
- package/dist/_esm/client/passkey/index.js.map +1 -1
- package/dist/_esm/client/passkey/webauthn.js +493 -0
- package/dist/_esm/client/passkey/webauthn.js.map +1 -0
- package/dist/_esm/client/session/account.js +114 -33
- package/dist/_esm/client/session/account.js.map +1 -1
- package/dist/_esm/client/session/client-actions.js +20 -0
- package/dist/_esm/client/session/client-actions.js.map +1 -0
- package/dist/_esm/client/session/client.js +34 -84
- package/dist/_esm/client/session/client.js.map +1 -1
- package/dist/_esm/client/session/formatSessionPreferences.js +283 -0
- package/dist/_esm/client/session/formatSessionPreferences.js.map +1 -0
- package/dist/_esm/client/session/index.js +5 -0
- package/dist/_esm/client/session/index.js.map +1 -1
- package/dist/_esm/client/session/monitor.js +195 -0
- package/dist/_esm/client/session/monitor.js.map +1 -0
- package/dist/_esm/client/session/types.js +110 -0
- package/dist/_esm/client/session/types.js.map +1 -0
- package/dist/_esm/client/session/utils.js +115 -0
- package/dist/_esm/client/session/utils.js.map +1 -0
- package/dist/_esm/client-auth-server/Signer.js +84 -43
- package/dist/_esm/client-auth-server/Signer.js.map +1 -1
- package/dist/_esm/client-auth-server/WalletProvider.js +6 -5
- package/dist/_esm/client-auth-server/WalletProvider.js.map +1 -1
- package/dist/_esm/client-auth-server/session/index.js +2 -1
- package/dist/_esm/client-auth-server/session/index.js.map +1 -1
- package/dist/_esm/client-auth-server/session/utils.js.map +1 -1
- package/dist/_esm/client-auth-server/utils/helpers.js.map +1 -0
- package/dist/_esm/client-auth-server/utils/index.js +3 -0
- package/dist/_esm/client-auth-server/utils/index.js.map +1 -0
- package/dist/_esm/client-auth-server/utils/storage.js.map +1 -0
- package/dist/_esm/connector/index.js +105 -11
- package/dist/_esm/connector/index.js.map +1 -1
- package/dist/_esm/index.js +9 -1
- package/dist/_esm/index.js.map +1 -1
- package/dist/_types/abi/SessionKeyValidator.d.ts +612 -602
- package/dist/_types/abi/SessionKeyValidator.d.ts.map +1 -1
- package/dist/_types/abi/{WebAuthValidator.d.ts → WebAuthnValidator.d.ts} +234 -186
- package/dist/_types/abi/WebAuthnValidator.d.ts.map +1 -0
- package/dist/_types/abi/index.d.ts +3 -7
- package/dist/_types/abi/index.d.ts.map +1 -1
- package/dist/_types/actions/sendUserOperation.d.ts +49 -0
- package/dist/_types/actions/sendUserOperation.d.ts.map +1 -0
- package/dist/_types/client/actions/deploy.d.ts +108 -0
- package/dist/_types/client/actions/deploy.d.ts.map +1 -0
- package/dist/_types/client/actions/index.d.ts +10 -0
- package/dist/_types/client/actions/index.d.ts.map +1 -0
- package/dist/_types/client/actions/modules.d.ts +65 -0
- package/dist/_types/client/actions/modules.d.ts.map +1 -0
- package/dist/_types/client/actions/passkey.d.ts +192 -0
- package/dist/_types/client/actions/passkey.d.ts.map +1 -0
- package/dist/_types/client/actions/sessions.d.ts +225 -0
- package/dist/_types/client/actions/sessions.d.ts.map +1 -0
- package/dist/_types/client/actions/utils.d.ts +25 -0
- package/dist/_types/client/actions/utils.d.ts.map +1 -0
- package/dist/_types/client/common/smart-account-client-actions.d.ts +50 -0
- package/dist/_types/client/common/smart-account-client-actions.d.ts.map +1 -0
- package/dist/_types/client/ecdsa/account.d.ts +16 -11
- package/dist/_types/client/ecdsa/account.d.ts.map +1 -1
- package/dist/_types/client/ecdsa/client-actions.d.ts +25 -0
- package/dist/_types/client/ecdsa/client-actions.d.ts.map +1 -0
- package/dist/_types/client/ecdsa/client.d.ts +92 -22
- package/dist/_types/client/ecdsa/client.d.ts.map +1 -1
- package/dist/_types/client/ecdsa/index.d.ts +2 -5
- package/dist/_types/client/ecdsa/index.d.ts.map +1 -1
- package/dist/_types/client/index.d.ts +7 -31
- package/dist/_types/client/index.d.ts.map +1 -1
- package/dist/_types/client/passkey/account.d.ts +22 -15
- package/dist/_types/client/passkey/account.d.ts.map +1 -1
- package/dist/_types/client/passkey/client-actions.d.ts +54 -0
- package/dist/_types/client/passkey/client-actions.d.ts.map +1 -0
- package/dist/_types/client/passkey/client.d.ts +103 -32
- package/dist/_types/client/passkey/client.d.ts.map +1 -1
- package/dist/_types/client/passkey/index.d.ts +4 -4
- package/dist/_types/client/passkey/index.d.ts.map +1 -1
- package/dist/_types/client/passkey/webauthn.d.ts +123 -0
- package/dist/_types/client/passkey/webauthn.d.ts.map +1 -0
- package/dist/_types/client/session/account.d.ts +26 -13
- package/dist/_types/client/session/account.d.ts.map +1 -1
- package/dist/_types/client/session/client-actions.d.ts +26 -0
- package/dist/_types/client/session/client-actions.d.ts.map +1 -0
- package/dist/_types/client/session/client.d.ts +38 -36
- package/dist/_types/client/session/client.d.ts.map +1 -1
- package/dist/_types/client/session/formatSessionPreferences.d.ts +101 -0
- package/dist/_types/client/session/formatSessionPreferences.d.ts.map +1 -0
- package/dist/_types/client/session/index.d.ts +5 -0
- package/dist/_types/client/session/index.d.ts.map +1 -1
- package/dist/_types/client/session/monitor.d.ts +93 -0
- package/dist/_types/client/session/monitor.d.ts.map +1 -0
- package/dist/_types/client/session/types.d.ts +133 -0
- package/dist/_types/client/session/types.d.ts.map +1 -0
- package/dist/_types/client/session/utils.d.ts +47 -0
- package/dist/_types/client/session/utils.d.ts.map +1 -0
- package/dist/_types/client-auth-server/Signer.d.ts +241 -245
- package/dist/_types/client-auth-server/Signer.d.ts.map +1 -1
- package/dist/_types/client-auth-server/WalletProvider.d.ts +236 -241
- package/dist/_types/client-auth-server/WalletProvider.d.ts.map +1 -1
- package/dist/_types/client-auth-server/interface.d.ts +2 -2
- package/dist/_types/client-auth-server/interface.d.ts.map +1 -1
- package/dist/_types/client-auth-server/rpc.d.ts +4 -0
- package/dist/_types/client-auth-server/rpc.d.ts.map +1 -1
- package/dist/_types/client-auth-server/session/index.d.ts +5 -4
- package/dist/_types/client-auth-server/session/index.d.ts.map +1 -1
- package/dist/_types/client-auth-server/session/utils.d.ts +3 -3
- package/dist/_types/client-auth-server/session/utils.d.ts.map +1 -1
- package/dist/_types/client-auth-server/utils/helpers.d.ts.map +1 -0
- package/dist/_types/client-auth-server/utils/index.d.ts +3 -0
- package/dist/_types/client-auth-server/utils/index.d.ts.map +1 -0
- package/dist/_types/client-auth-server/utils/storage.d.ts.map +1 -0
- package/dist/_types/communicator/interface.d.ts +5 -0
- package/dist/_types/communicator/interface.d.ts.map +1 -1
- package/dist/_types/connector/index.d.ts +11 -9
- package/dist/_types/connector/index.d.ts.map +1 -1
- package/dist/_types/index.d.ts +5 -3
- package/dist/_types/index.d.ts.map +1 -1
- package/package.json +36 -55
- package/prepare-package.mjs +8 -0
- package/project.json +7 -7
- package/src/abi/SessionKeyValidator.ts +861 -1125
- package/src/abi/WebAuthnValidator.ts +324 -0
- package/src/abi/index.ts +3 -7
- package/src/actions/sendUserOperation.ts +98 -0
- package/src/client/actions/deploy.ts +225 -0
- package/src/client/actions/index.ts +39 -0
- package/src/client/actions/modules.ts +112 -0
- package/src/client/actions/passkey.ts +344 -0
- package/src/client/actions/sessions.ts +457 -0
- package/src/client/actions/utils.ts +30 -0
- package/src/client/common/smart-account-client-actions.ts +317 -0
- package/src/client/ecdsa/account.ts +146 -42
- package/src/client/ecdsa/client-actions.ts +54 -0
- package/src/client/ecdsa/client.ts +177 -75
- package/src/client/ecdsa/index.ts +9 -5
- package/src/client/index.ts +10 -122
- package/src/client/passkey/account.ts +180 -55
- package/src/client/passkey/client-actions.ts +117 -0
- package/src/client/passkey/client.ts +194 -108
- package/src/client/passkey/index.ts +21 -4
- package/src/client/passkey/webauthn.ts +638 -0
- package/src/client/session/account.ts +211 -46
- package/src/client/session/client-actions.ts +62 -0
- package/src/client/session/client.ts +121 -160
- package/src/client/session/formatSessionPreferences.ts +444 -0
- package/src/client/session/index.ts +5 -0
- package/src/client/session/monitor.ts +292 -0
- package/src/client/session/types.ts +205 -0
- package/src/client/session/utils.ts +160 -0
- package/src/client-auth-server/Signer.ts +91 -41
- package/src/client-auth-server/WalletProvider.ts +12 -11
- package/src/client-auth-server/interface.ts +2 -2
- package/src/client-auth-server/rpc.ts +4 -0
- package/src/client-auth-server/session/index.ts +6 -4
- package/src/client-auth-server/session/utils.ts +4 -4
- package/src/client-auth-server/utils/index.ts +2 -0
- package/src/communicator/interface.ts +6 -0
- package/src/connector/index.ts +137 -24
- package/src/index.ts +12 -3
- package/tsconfig.json +1 -1
- package/dist/_cjs/abi/GuardianRecoveryModule.js +0 -767
- package/dist/_cjs/abi/GuardianRecoveryModule.js.map +0 -1
- package/dist/_cjs/abi/GuardianRecoveryValidator.js +0 -813
- package/dist/_cjs/abi/GuardianRecoveryValidator.js.map +0 -1
- package/dist/_cjs/abi/OidcKeyRegistry.js +0 -492
- package/dist/_cjs/abi/OidcKeyRegistry.js.map +0 -1
- package/dist/_cjs/abi/OidcRecoveryValidator.js +0 -650
- package/dist/_cjs/abi/OidcRecoveryValidator.js.map +0 -1
- package/dist/_cjs/abi/SsoAccount.js +0 -1354
- package/dist/_cjs/abi/SsoAccount.js.map +0 -1
- package/dist/_cjs/abi/WebAuthValidator.js.map +0 -1
- package/dist/_cjs/client/ecdsa/actions/account.js +0 -83
- package/dist/_cjs/client/ecdsa/actions/account.js.map +0 -1
- package/dist/_cjs/client/ecdsa/decorators/ecdsa.js +0 -22
- package/dist/_cjs/client/ecdsa/decorators/ecdsa.js.map +0 -1
- package/dist/_cjs/client/ecdsa/decorators/wallet.js +0 -53
- package/dist/_cjs/client/ecdsa/decorators/wallet.js.map +0 -1
- package/dist/_cjs/client/ecdsa/types.js +0 -63
- package/dist/_cjs/client/ecdsa/types.js.map +0 -1
- package/dist/_cjs/client/oidc/account.js +0 -43
- package/dist/_cjs/client/oidc/account.js.map +0 -1
- package/dist/_cjs/client/oidc/actions/addNewPasskeyViaOidc.js +0 -28
- package/dist/_cjs/client/oidc/actions/addNewPasskeyViaOidc.js.map +0 -1
- package/dist/_cjs/client/oidc/actions/index.js +0 -12
- package/dist/_cjs/client/oidc/actions/index.js.map +0 -1
- package/dist/_cjs/client/oidc/client.js +0 -46
- package/dist/_cjs/client/oidc/client.js.map +0 -1
- package/dist/_cjs/client/oidc/decorators/actions.js +0 -3
- package/dist/_cjs/client/oidc/decorators/actions.js.map +0 -1
- package/dist/_cjs/client/oidc/index.js +0 -20
- package/dist/_cjs/client/oidc/index.js.map +0 -1
- package/dist/_cjs/client/oidc/serialize.js +0 -3
- package/dist/_cjs/client/oidc/serialize.js.map +0 -1
- package/dist/_cjs/client/passkey/actions/account.js +0 -169
- package/dist/_cjs/client/passkey/actions/account.js.map +0 -1
- package/dist/_cjs/client/passkey/actions/passkey.js +0 -151
- package/dist/_cjs/client/passkey/actions/passkey.js.map +0 -1
- package/dist/_cjs/client/passkey/decorators/passkey.js +0 -52
- package/dist/_cjs/client/passkey/decorators/passkey.js.map +0 -1
- package/dist/_cjs/client/passkey/decorators/wallet.js +0 -54
- package/dist/_cjs/client/passkey/decorators/wallet.js.map +0 -1
- package/dist/_cjs/client/recovery/account.js +0 -46
- package/dist/_cjs/client/recovery/account.js.map +0 -1
- package/dist/_cjs/client/recovery/actions/oidc.js +0 -69
- package/dist/_cjs/client/recovery/actions/oidc.js.map +0 -1
- package/dist/_cjs/client/recovery/actions/recovery.js +0 -114
- package/dist/_cjs/client/recovery/actions/recovery.js.map +0 -1
- package/dist/_cjs/client/recovery/actions/sendEip712Transaction.js +0 -45
- package/dist/_cjs/client/recovery/actions/sendEip712Transaction.js.map +0 -1
- package/dist/_cjs/client/recovery/client.js +0 -49
- package/dist/_cjs/client/recovery/client.js.map +0 -1
- package/dist/_cjs/client/recovery/decorators/publicActionsRewrite.js +0 -33
- package/dist/_cjs/client/recovery/decorators/publicActionsRewrite.js.map +0 -1
- package/dist/_cjs/client/recovery/decorators/recovery.js +0 -15
- package/dist/_cjs/client/recovery/decorators/recovery.js.map +0 -1
- package/dist/_cjs/client/recovery/decorators/wallet.js +0 -46
- package/dist/_cjs/client/recovery/decorators/wallet.js.map +0 -1
- package/dist/_cjs/client/recovery/index.js.map +0 -1
- package/dist/_cjs/client/session/actions/sendEip712Transaction.js +0 -45
- package/dist/_cjs/client/session/actions/sendEip712Transaction.js.map +0 -1
- package/dist/_cjs/client/session/actions/session.js +0 -116
- package/dist/_cjs/client/session/actions/session.js.map +0 -1
- package/dist/_cjs/client/session/decorators/publicActionsRewrite.js +0 -58
- package/dist/_cjs/client/session/decorators/publicActionsRewrite.js.map +0 -1
- package/dist/_cjs/client/session/decorators/wallet.js +0 -93
- package/dist/_cjs/client/session/decorators/wallet.js.map +0 -1
- package/dist/_cjs/client/utils/assertEip712Transaction.js +0 -44
- package/dist/_cjs/client/utils/assertEip712Transaction.js.map +0 -1
- package/dist/_cjs/client/utils/getEip712Domain.js +0 -57
- package/dist/_cjs/client/utils/getEip712Domain.js.map +0 -1
- package/dist/_cjs/client/utils/isEip712Transaction.js +0 -16
- package/dist/_cjs/client/utils/isEip712Transaction.js.map +0 -1
- package/dist/_cjs/paymaster/handlers/general.js +0 -13
- package/dist/_cjs/paymaster/handlers/general.js.map +0 -1
- package/dist/_cjs/paymaster/handlers/index.js +0 -19
- package/dist/_cjs/paymaster/handlers/index.js.map +0 -1
- package/dist/_cjs/paymaster/handlers/zyfi.js +0 -57
- package/dist/_cjs/paymaster/handlers/zyfi.js.map +0 -1
- package/dist/_cjs/paymaster/index.js +0 -54
- package/dist/_cjs/paymaster/index.js.map +0 -1
- package/dist/_cjs/utils/encoding.js +0 -56
- package/dist/_cjs/utils/encoding.js.map +0 -1
- package/dist/_cjs/utils/helpers.js.map +0 -1
- package/dist/_cjs/utils/index.js +0 -20
- package/dist/_cjs/utils/index.js.map +0 -1
- package/dist/_cjs/utils/passkey.js +0 -245
- package/dist/_cjs/utils/passkey.js.map +0 -1
- package/dist/_cjs/utils/session.js +0 -346
- package/dist/_cjs/utils/session.js.map +0 -1
- package/dist/_cjs/utils/storage.js.map +0 -1
- package/dist/_esm/abi/GuardianRecoveryModule.js +0 -764
- package/dist/_esm/abi/GuardianRecoveryModule.js.map +0 -1
- package/dist/_esm/abi/GuardianRecoveryValidator.js +0 -810
- package/dist/_esm/abi/GuardianRecoveryValidator.js.map +0 -1
- package/dist/_esm/abi/OidcKeyRegistry.js +0 -489
- package/dist/_esm/abi/OidcKeyRegistry.js.map +0 -1
- package/dist/_esm/abi/OidcRecoveryValidator.js +0 -647
- package/dist/_esm/abi/OidcRecoveryValidator.js.map +0 -1
- package/dist/_esm/abi/SsoAccount.js +0 -1351
- package/dist/_esm/abi/SsoAccount.js.map +0 -1
- package/dist/_esm/abi/WebAuthValidator.js.map +0 -1
- package/dist/_esm/client/ecdsa/actions/account.js +0 -82
- package/dist/_esm/client/ecdsa/actions/account.js.map +0 -1
- package/dist/_esm/client/ecdsa/decorators/ecdsa.js +0 -19
- package/dist/_esm/client/ecdsa/decorators/ecdsa.js.map +0 -1
- package/dist/_esm/client/ecdsa/decorators/wallet.js +0 -54
- package/dist/_esm/client/ecdsa/decorators/wallet.js.map +0 -1
- package/dist/_esm/client/ecdsa/types.js +0 -61
- package/dist/_esm/client/ecdsa/types.js.map +0 -1
- package/dist/_esm/client/oidc/account.js +0 -40
- package/dist/_esm/client/oidc/account.js.map +0 -1
- package/dist/_esm/client/oidc/actions/addNewPasskeyViaOidc.js +0 -26
- package/dist/_esm/client/oidc/actions/addNewPasskeyViaOidc.js.map +0 -1
- package/dist/_esm/client/oidc/actions/index.js +0 -9
- package/dist/_esm/client/oidc/actions/index.js.map +0 -1
- package/dist/_esm/client/oidc/client.js +0 -41
- package/dist/_esm/client/oidc/client.js.map +0 -1
- package/dist/_esm/client/oidc/decorators/actions.js +0 -2
- package/dist/_esm/client/oidc/decorators/actions.js.map +0 -1
- package/dist/_esm/client/oidc/index.js +0 -4
- package/dist/_esm/client/oidc/index.js.map +0 -1
- package/dist/_esm/client/oidc/serialize.js +0 -2
- package/dist/_esm/client/oidc/serialize.js.map +0 -1
- package/dist/_esm/client/passkey/actions/account.js +0 -165
- package/dist/_esm/client/passkey/actions/account.js.map +0 -1
- package/dist/_esm/client/passkey/actions/passkey.js +0 -148
- package/dist/_esm/client/passkey/actions/passkey.js.map +0 -1
- package/dist/_esm/client/passkey/decorators/passkey.js +0 -50
- package/dist/_esm/client/passkey/decorators/passkey.js.map +0 -1
- package/dist/_esm/client/passkey/decorators/wallet.js +0 -54
- package/dist/_esm/client/passkey/decorators/wallet.js.map +0 -1
- package/dist/_esm/client/recovery/account.js +0 -43
- package/dist/_esm/client/recovery/account.js.map +0 -1
- package/dist/_esm/client/recovery/actions/oidc.js +0 -69
- package/dist/_esm/client/recovery/actions/oidc.js.map +0 -1
- package/dist/_esm/client/recovery/actions/recovery.js +0 -111
- package/dist/_esm/client/recovery/actions/recovery.js.map +0 -1
- package/dist/_esm/client/recovery/actions/sendEip712Transaction.js +0 -93
- package/dist/_esm/client/recovery/actions/sendEip712Transaction.js.map +0 -1
- package/dist/_esm/client/recovery/client.js +0 -45
- package/dist/_esm/client/recovery/client.js.map +0 -1
- package/dist/_esm/client/recovery/decorators/publicActionsRewrite.js +0 -31
- package/dist/_esm/client/recovery/decorators/publicActionsRewrite.js.map +0 -1
- package/dist/_esm/client/recovery/decorators/recovery.js +0 -13
- package/dist/_esm/client/recovery/decorators/recovery.js.map +0 -1
- package/dist/_esm/client/recovery/decorators/wallet.js +0 -45
- package/dist/_esm/client/recovery/decorators/wallet.js.map +0 -1
- package/dist/_esm/client/recovery/index.js +0 -3
- package/dist/_esm/client/recovery/index.js.map +0 -1
- package/dist/_esm/client/session/actions/sendEip712Transaction.js +0 -93
- package/dist/_esm/client/session/actions/sendEip712Transaction.js.map +0 -1
- package/dist/_esm/client/session/actions/session.js +0 -119
- package/dist/_esm/client/session/actions/session.js.map +0 -1
- package/dist/_esm/client/session/decorators/publicActionsRewrite.js +0 -55
- package/dist/_esm/client/session/decorators/publicActionsRewrite.js.map +0 -1
- package/dist/_esm/client/session/decorators/wallet.js +0 -100
- package/dist/_esm/client/session/decorators/wallet.js.map +0 -1
- package/dist/_esm/client/utils/assertEip712Transaction.js +0 -39
- package/dist/_esm/client/utils/assertEip712Transaction.js.map +0 -1
- package/dist/_esm/client/utils/getEip712Domain.js +0 -57
- package/dist/_esm/client/utils/getEip712Domain.js.map +0 -1
- package/dist/_esm/client/utils/isEip712Transaction.js +0 -13
- package/dist/_esm/client/utils/isEip712Transaction.js.map +0 -1
- package/dist/_esm/paymaster/handlers/general.js +0 -11
- package/dist/_esm/paymaster/handlers/general.js.map +0 -1
- package/dist/_esm/paymaster/handlers/index.js +0 -3
- package/dist/_esm/paymaster/handlers/index.js.map +0 -1
- package/dist/_esm/paymaster/handlers/zyfi.js +0 -54
- package/dist/_esm/paymaster/handlers/zyfi.js.map +0 -1
- package/dist/_esm/paymaster/index.js +0 -37
- package/dist/_esm/paymaster/index.js.map +0 -1
- package/dist/_esm/utils/encoding.js +0 -49
- package/dist/_esm/utils/encoding.js.map +0 -1
- package/dist/_esm/utils/helpers.js.map +0 -1
- package/dist/_esm/utils/index.js +0 -4
- package/dist/_esm/utils/index.js.map +0 -1
- package/dist/_esm/utils/passkey.js +0 -296
- package/dist/_esm/utils/passkey.js.map +0 -1
- package/dist/_esm/utils/session.js +0 -358
- package/dist/_esm/utils/session.js.map +0 -1
- package/dist/_esm/utils/storage.js.map +0 -1
- package/dist/_types/abi/GuardianRecoveryModule.d.ts +0 -590
- package/dist/_types/abi/GuardianRecoveryModule.d.ts.map +0 -1
- package/dist/_types/abi/GuardianRecoveryValidator.d.ts +0 -626
- package/dist/_types/abi/GuardianRecoveryValidator.d.ts.map +0 -1
- package/dist/_types/abi/OidcKeyRegistry.d.ts +0 -375
- package/dist/_types/abi/OidcKeyRegistry.d.ts.map +0 -1
- package/dist/_types/abi/OidcRecoveryValidator.d.ts +0 -501
- package/dist/_types/abi/OidcRecoveryValidator.d.ts.map +0 -1
- package/dist/_types/abi/SsoAccount.d.ts +0 -1044
- package/dist/_types/abi/SsoAccount.d.ts.map +0 -1
- package/dist/_types/abi/WebAuthValidator.d.ts.map +0 -1
- package/dist/_types/client/ecdsa/actions/account.d.ts +0 -38
- package/dist/_types/client/ecdsa/actions/account.d.ts.map +0 -1
- package/dist/_types/client/ecdsa/decorators/ecdsa.d.ts +0 -16
- package/dist/_types/client/ecdsa/decorators/ecdsa.d.ts.map +0 -1
- package/dist/_types/client/ecdsa/decorators/wallet.d.ts +0 -5
- package/dist/_types/client/ecdsa/decorators/wallet.d.ts.map +0 -1
- package/dist/_types/client/ecdsa/types.d.ts +0 -10
- package/dist/_types/client/ecdsa/types.d.ts.map +0 -1
- package/dist/_types/client/oidc/account.d.ts +0 -13
- package/dist/_types/client/oidc/account.d.ts.map +0 -1
- package/dist/_types/client/oidc/actions/addNewPasskeyViaOidc.d.ts +0 -12
- package/dist/_types/client/oidc/actions/addNewPasskeyViaOidc.d.ts.map +0 -1
- package/dist/_types/client/oidc/actions/index.d.ts +0 -5
- package/dist/_types/client/oidc/actions/index.d.ts.map +0 -1
- package/dist/_types/client/oidc/client.d.ts +0 -24
- package/dist/_types/client/oidc/client.d.ts.map +0 -1
- package/dist/_types/client/oidc/decorators/actions.d.ts +0 -5
- package/dist/_types/client/oidc/decorators/actions.d.ts.map +0 -1
- package/dist/_types/client/oidc/index.d.ts +0 -4
- package/dist/_types/client/oidc/index.d.ts.map +0 -1
- package/dist/_types/client/oidc/serialize.d.ts +0 -10
- package/dist/_types/client/oidc/serialize.d.ts.map +0 -1
- package/dist/_types/client/passkey/actions/account.d.ts +0 -48
- package/dist/_types/client/passkey/actions/account.d.ts.map +0 -1
- package/dist/_types/client/passkey/actions/passkey.d.ts +0 -55
- package/dist/_types/client/passkey/actions/passkey.d.ts.map +0 -1
- package/dist/_types/client/passkey/decorators/passkey.d.ts +0 -16
- package/dist/_types/client/passkey/decorators/passkey.d.ts.map +0 -1
- package/dist/_types/client/passkey/decorators/wallet.d.ts +0 -5
- package/dist/_types/client/passkey/decorators/wallet.d.ts.map +0 -1
- package/dist/_types/client/recovery/account.d.ts +0 -14
- package/dist/_types/client/recovery/account.d.ts.map +0 -1
- package/dist/_types/client/recovery/actions/oidc.d.ts +0 -24
- package/dist/_types/client/recovery/actions/oidc.d.ts.map +0 -1
- package/dist/_types/client/recovery/actions/recovery.d.ts +0 -50
- package/dist/_types/client/recovery/actions/recovery.d.ts.map +0 -1
- package/dist/_types/client/recovery/actions/sendEip712Transaction.d.ts +0 -60
- package/dist/_types/client/recovery/actions/sendEip712Transaction.d.ts.map +0 -1
- package/dist/_types/client/recovery/client.d.ts +0 -23
- package/dist/_types/client/recovery/client.d.ts.map +0 -1
- package/dist/_types/client/recovery/decorators/publicActionsRewrite.d.ts +0 -4
- package/dist/_types/client/recovery/decorators/publicActionsRewrite.d.ts.map +0 -1
- package/dist/_types/client/recovery/decorators/recovery.d.ts +0 -8
- package/dist/_types/client/recovery/decorators/recovery.d.ts.map +0 -1
- package/dist/_types/client/recovery/decorators/wallet.d.ts +0 -5
- package/dist/_types/client/recovery/decorators/wallet.d.ts.map +0 -1
- package/dist/_types/client/recovery/index.d.ts +0 -3
- package/dist/_types/client/recovery/index.d.ts.map +0 -1
- package/dist/_types/client/session/actions/sendEip712Transaction.d.ts +0 -60
- package/dist/_types/client/session/actions/sendEip712Transaction.d.ts.map +0 -1
- package/dist/_types/client/session/actions/session.d.ts +0 -61
- package/dist/_types/client/session/actions/session.d.ts.map +0 -1
- package/dist/_types/client/session/decorators/publicActionsRewrite.d.ts +0 -4
- package/dist/_types/client/session/decorators/publicActionsRewrite.d.ts.map +0 -1
- package/dist/_types/client/session/decorators/wallet.d.ts +0 -5
- package/dist/_types/client/session/decorators/wallet.d.ts.map +0 -1
- package/dist/_types/client/utils/assertEip712Transaction.d.ts +0 -11
- package/dist/_types/client/utils/assertEip712Transaction.d.ts.map +0 -1
- package/dist/_types/client/utils/getEip712Domain.d.ts +0 -3
- package/dist/_types/client/utils/getEip712Domain.d.ts.map +0 -1
- package/dist/_types/client/utils/isEip712Transaction.d.ts +0 -4
- package/dist/_types/client/utils/isEip712Transaction.d.ts.map +0 -1
- package/dist/_types/paymaster/handlers/general.d.ts +0 -4
- package/dist/_types/paymaster/handlers/general.d.ts.map +0 -1
- package/dist/_types/paymaster/handlers/index.d.ts +0 -3
- package/dist/_types/paymaster/handlers/index.d.ts.map +0 -1
- package/dist/_types/paymaster/handlers/zyfi.d.ts +0 -18
- package/dist/_types/paymaster/handlers/zyfi.d.ts.map +0 -1
- package/dist/_types/paymaster/index.d.ts +0 -29
- package/dist/_types/paymaster/index.d.ts.map +0 -1
- package/dist/_types/utils/encoding.d.ts +0 -19
- package/dist/_types/utils/encoding.d.ts.map +0 -1
- package/dist/_types/utils/helpers.d.ts.map +0 -1
- package/dist/_types/utils/index.d.ts +0 -4
- package/dist/_types/utils/index.d.ts.map +0 -1
- package/dist/_types/utils/passkey.d.ts +0 -47
- package/dist/_types/utils/passkey.d.ts.map +0 -1
- package/dist/_types/utils/session.d.ts +0 -179
- package/dist/_types/utils/session.d.ts.map +0 -1
- package/dist/_types/utils/storage.d.ts.map +0 -1
- package/src/abi/GuardianRecoveryModule.ts +0 -763
- package/src/abi/GuardianRecoveryValidator.ts +0 -809
- package/src/abi/OidcKeyRegistry.ts +0 -488
- package/src/abi/OidcRecoveryValidator.ts +0 -646
- package/src/abi/SsoAccount.ts +0 -1350
- package/src/abi/WebAuthValidator.ts +0 -357
- package/src/client/ecdsa/actions/account.ts +0 -146
- package/src/client/ecdsa/decorators/ecdsa.ts +0 -32
- package/src/client/ecdsa/decorators/wallet.ts +0 -80
- package/src/client/ecdsa/types.ts +0 -108
- package/src/client/oidc/account.ts +0 -65
- package/src/client/oidc/actions/addNewPasskeyViaOidc.ts +0 -54
- package/src/client/oidc/actions/index.ts +0 -16
- package/src/client/oidc/client.ts +0 -122
- package/src/client/oidc/decorators/actions.ts +0 -5
- package/src/client/oidc/index.ts +0 -3
- package/src/client/oidc/serialize.ts +0 -10
- package/src/client/passkey/actions/account.ts +0 -241
- package/src/client/passkey/actions/passkey.ts +0 -208
- package/src/client/passkey/decorators/passkey.ts +0 -77
- package/src/client/passkey/decorators/wallet.ts +0 -79
- package/src/client/recovery/account.ts +0 -61
- package/src/client/recovery/actions/oidc.ts +0 -119
- package/src/client/recovery/actions/recovery.ts +0 -176
- package/src/client/recovery/actions/sendEip712Transaction.ts +0 -149
- package/src/client/recovery/client.ts +0 -102
- package/src/client/recovery/decorators/publicActionsRewrite.ts +0 -38
- package/src/client/recovery/decorators/recovery.ts +0 -22
- package/src/client/recovery/decorators/wallet.ts +0 -59
- package/src/client/recovery/index.ts +0 -2
- package/src/client/session/actions/sendEip712Transaction.ts +0 -149
- package/src/client/session/actions/session.ts +0 -204
- package/src/client/session/decorators/publicActionsRewrite.ts +0 -63
- package/src/client/session/decorators/wallet.ts +0 -143
- package/src/client/utils/assertEip712Transaction.ts +0 -49
- package/src/client/utils/getEip712Domain.ts +0 -84
- package/src/client/utils/isEip712Transaction.ts +0 -18
- package/src/paymaster/handlers/general.ts +0 -14
- package/src/paymaster/handlers/index.ts +0 -2
- package/src/paymaster/handlers/zyfi.ts +0 -108
- package/src/paymaster/index.ts +0 -76
- package/src/types/index.d.ts +0 -9
- package/src/utils/encoding.ts +0 -70
- package/src/utils/index.ts +0 -3
- package/src/utils/passkey.ts +0 -347
- package/src/utils/session.ts +0 -524
- /package/dist/_cjs/{utils → client-auth-server/utils}/helpers.js +0 -0
- /package/dist/_cjs/{utils → client-auth-server/utils}/storage.js +0 -0
- /package/dist/_esm/{utils → client-auth-server/utils}/helpers.js +0 -0
- /package/dist/_esm/{utils → client-auth-server/utils}/storage.js +0 -0
- /package/dist/_types/{utils → client-auth-server/utils}/helpers.d.ts +0 -0
- /package/dist/_types/{utils → client-auth-server/utils}/storage.d.ts +0 -0
- /package/src/{utils → client-auth-server/utils}/helpers.ts +0 -0
- /package/src/{utils → client-auth-server/utils}/storage.ts +0 -0
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session monitoring utilities for tracking session state changes
|
|
3
|
+
*
|
|
4
|
+
* These utilities help monitor session expiration and state changes,
|
|
5
|
+
* similar to the legacy SDK's onSessionStateChange callback functionality.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { Chain, Client, PublicActions, Transport } from "viem";
|
|
9
|
+
|
|
10
|
+
import type {
|
|
11
|
+
GetSessionStateParams,
|
|
12
|
+
SessionEventType,
|
|
13
|
+
SessionState,
|
|
14
|
+
SessionStateEventCallback,
|
|
15
|
+
} from "../actions/sessions.js";
|
|
16
|
+
import { getSessionState, SessionStatus } from "../actions/sessions.js";
|
|
17
|
+
import type { SessionSpec } from "../session/types.js";
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Parameters for starting session monitoring
|
|
21
|
+
*/
|
|
22
|
+
export type StartSessionMonitoringParams = {
|
|
23
|
+
/**
|
|
24
|
+
* Callback to invoke when session state changes
|
|
25
|
+
*/
|
|
26
|
+
onSessionStateChange: SessionStateEventCallback;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Interval in milliseconds to check session state (default: 60000 = 1 minute)
|
|
30
|
+
*/
|
|
31
|
+
checkIntervalMs?: number;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Threshold in seconds for warning about session expiration (default: 3600 = 1 hour)
|
|
35
|
+
*/
|
|
36
|
+
expirationWarningThresholdSeconds?: number;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Threshold percentage for warning about fee limit (default: 80 = 80%)
|
|
40
|
+
*/
|
|
41
|
+
feeLimitWarningThresholdPercent?: number;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Session monitor handle for stopping monitoring
|
|
46
|
+
*/
|
|
47
|
+
export type SessionMonitor = {
|
|
48
|
+
/**
|
|
49
|
+
* Stop monitoring the session
|
|
50
|
+
*/
|
|
51
|
+
stop: () => void;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Force an immediate check of session state
|
|
55
|
+
*/
|
|
56
|
+
checkNow: () => Promise<void>;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Start monitoring a session for state changes
|
|
61
|
+
*
|
|
62
|
+
* This function periodically checks the session state and invokes the callback
|
|
63
|
+
* when important events occur (expiration, revocation, fee limit warnings, etc.).
|
|
64
|
+
*
|
|
65
|
+
* @param client - A viem public client with chain and transport
|
|
66
|
+
* @param sessionParams - Parameters for querying session state
|
|
67
|
+
* @param monitoringParams - Monitoring configuration
|
|
68
|
+
* @returns A SessionMonitor handle to stop monitoring
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```typescript
|
|
72
|
+
* const monitor = startSessionMonitoring(
|
|
73
|
+
* publicClient,
|
|
74
|
+
* {
|
|
75
|
+
* account: smartAccountAddress,
|
|
76
|
+
* sessionSpec: mySessionSpec,
|
|
77
|
+
* contracts: {
|
|
78
|
+
* sessionValidator: sessionValidatorAddress,
|
|
79
|
+
* },
|
|
80
|
+
* },
|
|
81
|
+
* {
|
|
82
|
+
* onSessionStateChange: (event) => {
|
|
83
|
+
* if (event.type === SessionEventType.Expired) {
|
|
84
|
+
* console.error("Session expired!");
|
|
85
|
+
* } else if (event.type === SessionEventType.Warning) {
|
|
86
|
+
* console.warn(event.message);
|
|
87
|
+
* }
|
|
88
|
+
* },
|
|
89
|
+
* checkIntervalMs: 30000, // Check every 30 seconds
|
|
90
|
+
* }
|
|
91
|
+
* );
|
|
92
|
+
*
|
|
93
|
+
* // Later, stop monitoring
|
|
94
|
+
* monitor.stop();
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
export function startSessionMonitoring<
|
|
98
|
+
TTransport extends Transport = Transport,
|
|
99
|
+
TChain extends Chain | undefined = Chain | undefined,
|
|
100
|
+
>(
|
|
101
|
+
client: Client<TTransport, TChain> & PublicActions,
|
|
102
|
+
sessionParams: GetSessionStateParams,
|
|
103
|
+
monitoringParams: StartSessionMonitoringParams,
|
|
104
|
+
): SessionMonitor {
|
|
105
|
+
const {
|
|
106
|
+
onSessionStateChange,
|
|
107
|
+
checkIntervalMs = 60000, // Default: 1 minute
|
|
108
|
+
expirationWarningThresholdSeconds = 3600, // Default: 1 hour
|
|
109
|
+
feeLimitWarningThresholdPercent = 80, // Default: 80%
|
|
110
|
+
} = monitoringParams;
|
|
111
|
+
|
|
112
|
+
let intervalHandle: ReturnType<typeof setInterval> | null = null;
|
|
113
|
+
let expirationTimeoutHandle: ReturnType<typeof setTimeout> | null = null;
|
|
114
|
+
let hasExpired = false;
|
|
115
|
+
let hasRevoked = false;
|
|
116
|
+
let lastFeeWarning = false;
|
|
117
|
+
|
|
118
|
+
const checkSessionState = async () => {
|
|
119
|
+
try {
|
|
120
|
+
const { sessionState } = await getSessionState(client, sessionParams);
|
|
121
|
+
const now = BigInt(Math.floor(Date.now() / 1000));
|
|
122
|
+
|
|
123
|
+
// Check if session has been revoked/closed
|
|
124
|
+
if (sessionState.status === SessionStatus.Closed && !hasRevoked) {
|
|
125
|
+
hasRevoked = true;
|
|
126
|
+
onSessionStateChange({
|
|
127
|
+
type: "session_revoked" as SessionEventType,
|
|
128
|
+
message: "Session has been revoked",
|
|
129
|
+
sessionState,
|
|
130
|
+
});
|
|
131
|
+
return; // Don't continue monitoring after revocation
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Check if session is inactive
|
|
135
|
+
if (sessionState.status === SessionStatus.NotInitialized) {
|
|
136
|
+
onSessionStateChange({
|
|
137
|
+
type: "session_inactive" as SessionEventType,
|
|
138
|
+
message: "Session is not initialized",
|
|
139
|
+
sessionState,
|
|
140
|
+
});
|
|
141
|
+
return; // Don't continue monitoring if not initialized
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Check if session has expired
|
|
145
|
+
if (sessionParams.sessionSpec.expiresAt <= now && !hasExpired) {
|
|
146
|
+
hasExpired = true;
|
|
147
|
+
onSessionStateChange({
|
|
148
|
+
type: "session_expired" as SessionEventType,
|
|
149
|
+
message: "Session has expired",
|
|
150
|
+
sessionState,
|
|
151
|
+
});
|
|
152
|
+
return; // Don't continue monitoring after expiration
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// Check for expiration warning
|
|
156
|
+
const timeToExpiry = sessionParams.sessionSpec.expiresAt - now;
|
|
157
|
+
if (
|
|
158
|
+
timeToExpiry > 0n
|
|
159
|
+
&& timeToExpiry <= BigInt(expirationWarningThresholdSeconds)
|
|
160
|
+
&& !hasExpired
|
|
161
|
+
) {
|
|
162
|
+
const minutes = Number(timeToExpiry) / 60;
|
|
163
|
+
onSessionStateChange({
|
|
164
|
+
type: "session_warning" as SessionEventType,
|
|
165
|
+
message: `Session will expire in ${minutes.toFixed(1)} minutes`,
|
|
166
|
+
sessionState,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Check for fee limit warning
|
|
171
|
+
if (
|
|
172
|
+
sessionState.status === SessionStatus.Active
|
|
173
|
+
&& sessionParams.sessionSpec.feeLimit.limit > 0n
|
|
174
|
+
) {
|
|
175
|
+
const feeUsedPercent = Number(
|
|
176
|
+
(sessionParams.sessionSpec.feeLimit.limit
|
|
177
|
+
- sessionState.feesRemaining)
|
|
178
|
+
* 100n
|
|
179
|
+
/ sessionParams.sessionSpec.feeLimit.limit,
|
|
180
|
+
);
|
|
181
|
+
|
|
182
|
+
if (
|
|
183
|
+
feeUsedPercent >= feeLimitWarningThresholdPercent
|
|
184
|
+
&& !lastFeeWarning
|
|
185
|
+
) {
|
|
186
|
+
lastFeeWarning = true;
|
|
187
|
+
onSessionStateChange({
|
|
188
|
+
type: "session_warning" as SessionEventType,
|
|
189
|
+
message: `Session fee limit is ${feeUsedPercent.toFixed(0)}% exhausted (${sessionState.feesRemaining} remaining)`,
|
|
190
|
+
sessionState,
|
|
191
|
+
});
|
|
192
|
+
} else if (feeUsedPercent < feeLimitWarningThresholdPercent) {
|
|
193
|
+
// Reset warning flag if usage drops below threshold
|
|
194
|
+
lastFeeWarning = false;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
} catch (error) {
|
|
198
|
+
console.error("Error checking session state:", error);
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
// Set up expiration timeout
|
|
203
|
+
const now = BigInt(Math.floor(Date.now() / 1000));
|
|
204
|
+
const timeToExpiry = sessionParams.sessionSpec.expiresAt - now;
|
|
205
|
+
if (timeToExpiry > 0n) {
|
|
206
|
+
const timeoutMs = Number(timeToExpiry) * 1000;
|
|
207
|
+
expirationTimeoutHandle = setTimeout(() => {
|
|
208
|
+
if (!hasExpired) {
|
|
209
|
+
hasExpired = true;
|
|
210
|
+
void getSessionState(client, sessionParams).then(({ sessionState }) => {
|
|
211
|
+
onSessionStateChange({
|
|
212
|
+
type: "session_expired" as SessionEventType,
|
|
213
|
+
message: "Session has expired",
|
|
214
|
+
sessionState,
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}, timeoutMs);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// Start periodic monitoring
|
|
222
|
+
intervalHandle = setInterval(() => {
|
|
223
|
+
void checkSessionState();
|
|
224
|
+
}, checkIntervalMs);
|
|
225
|
+
|
|
226
|
+
// Do an immediate check
|
|
227
|
+
void checkSessionState();
|
|
228
|
+
|
|
229
|
+
return {
|
|
230
|
+
stop: () => {
|
|
231
|
+
if (intervalHandle) {
|
|
232
|
+
clearInterval(intervalHandle);
|
|
233
|
+
intervalHandle = null;
|
|
234
|
+
}
|
|
235
|
+
if (expirationTimeoutHandle) {
|
|
236
|
+
clearTimeout(expirationTimeoutHandle);
|
|
237
|
+
expirationTimeoutHandle = null;
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
checkNow: checkSessionState,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Check if a session should show a warning based on its state
|
|
246
|
+
*/
|
|
247
|
+
export function shouldWarnAboutSession(
|
|
248
|
+
sessionSpec: SessionSpec,
|
|
249
|
+
sessionState: SessionState,
|
|
250
|
+
options: {
|
|
251
|
+
expirationWarningThresholdSeconds?: number;
|
|
252
|
+
feeLimitWarningThresholdPercent?: number;
|
|
253
|
+
} = {},
|
|
254
|
+
): { shouldWarn: boolean; reason?: string } {
|
|
255
|
+
const {
|
|
256
|
+
expirationWarningThresholdSeconds = 3600,
|
|
257
|
+
feeLimitWarningThresholdPercent = 80,
|
|
258
|
+
} = options;
|
|
259
|
+
|
|
260
|
+
const now = BigInt(Math.floor(Date.now() / 1000));
|
|
261
|
+
|
|
262
|
+
// Check expiration
|
|
263
|
+
const timeToExpiry = sessionSpec.expiresAt - now;
|
|
264
|
+
if (timeToExpiry > 0n && timeToExpiry <= BigInt(expirationWarningThresholdSeconds)) {
|
|
265
|
+
const minutes = Number(timeToExpiry) / 60;
|
|
266
|
+
return {
|
|
267
|
+
shouldWarn: true,
|
|
268
|
+
reason: `Session will expire in ${minutes.toFixed(1)} minutes`,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// Check fee limit
|
|
273
|
+
if (
|
|
274
|
+
sessionState.status === SessionStatus.Active
|
|
275
|
+
&& sessionSpec.feeLimit.limit > 0n
|
|
276
|
+
) {
|
|
277
|
+
const feeUsedPercent = Number(
|
|
278
|
+
(sessionSpec.feeLimit.limit - sessionState.feesRemaining)
|
|
279
|
+
* 100n
|
|
280
|
+
/ sessionSpec.feeLimit.limit,
|
|
281
|
+
);
|
|
282
|
+
|
|
283
|
+
if (feeUsedPercent >= feeLimitWarningThresholdPercent) {
|
|
284
|
+
return {
|
|
285
|
+
shouldWarn: true,
|
|
286
|
+
reason: `Fee limit is ${feeUsedPercent.toFixed(0)}% exhausted`,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
return { shouldWarn: false };
|
|
292
|
+
}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import type { Address, Hex } from "viem";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Limit types for usage tracking
|
|
5
|
+
* Uses numeric values to match contract enum
|
|
6
|
+
*/
|
|
7
|
+
export enum LimitType {
|
|
8
|
+
Unlimited = 0,
|
|
9
|
+
Lifetime = 1,
|
|
10
|
+
Allowance = 2,
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Period constants for time-based allowances (in seconds)
|
|
15
|
+
*/
|
|
16
|
+
export const LIMIT_PERIODS = {
|
|
17
|
+
Hourly: 3600n,
|
|
18
|
+
Daily: 86400n,
|
|
19
|
+
Weekly: 604800n,
|
|
20
|
+
Monthly: 2592000n, // 30 days
|
|
21
|
+
Yearly: 31536000n, // 365 days
|
|
22
|
+
} as const;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Usage limit structure
|
|
26
|
+
* @member limitType - Type of limit (Unlimited, Lifetime, or time-based allowance)
|
|
27
|
+
* @member limit - Maximum value allowed (as bigint for U256 compatibility)
|
|
28
|
+
* @member period - Period in seconds for allowance limits (0 for Unlimited/Lifetime)
|
|
29
|
+
*/
|
|
30
|
+
export type UsageLimit = {
|
|
31
|
+
limitType: LimitType;
|
|
32
|
+
limit: bigint;
|
|
33
|
+
period: bigint;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Constraint condition for parameter validation
|
|
38
|
+
* Uses string values to match Rust serialization format
|
|
39
|
+
*/
|
|
40
|
+
export enum ConstraintCondition {
|
|
41
|
+
Unconstrained = "Unconstrained",
|
|
42
|
+
Equal = "Equal",
|
|
43
|
+
Greater = "Greater",
|
|
44
|
+
Less = "Less",
|
|
45
|
+
GreaterEqual = "GreaterEqual",
|
|
46
|
+
LessEqual = "LessEqual",
|
|
47
|
+
NotEqual = "NotEqual",
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Constraint for validating transaction parameters
|
|
52
|
+
* @member condition - Comparison condition
|
|
53
|
+
* @member index - Parameter index in calldata
|
|
54
|
+
* @member refValue - Reference value for comparison (as hex string)
|
|
55
|
+
* @member limit - Usage limit for this constraint
|
|
56
|
+
*/
|
|
57
|
+
export type Constraint = {
|
|
58
|
+
condition: ConstraintCondition;
|
|
59
|
+
index: bigint;
|
|
60
|
+
refValue: Hex;
|
|
61
|
+
limit: UsageLimit;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Policy for contract function calls
|
|
66
|
+
* @member target - Contract address
|
|
67
|
+
* @member selector - Function selector (4 bytes)
|
|
68
|
+
* @member maxValuePerUse - Maximum value per transaction
|
|
69
|
+
* @member valueLimit - Total value limit with tracking period
|
|
70
|
+
* @member constraints - Parameter validation constraints
|
|
71
|
+
*/
|
|
72
|
+
export type CallPolicy = {
|
|
73
|
+
target: Address;
|
|
74
|
+
selector: Hex;
|
|
75
|
+
maxValuePerUse: bigint;
|
|
76
|
+
valueLimit: UsageLimit;
|
|
77
|
+
constraints: Constraint[];
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Policy for simple value transfers (no calldata)
|
|
82
|
+
* @member target - Recipient address
|
|
83
|
+
* @member maxValuePerUse - Maximum value per transaction
|
|
84
|
+
* @member valueLimit - Total value limit with tracking period
|
|
85
|
+
*/
|
|
86
|
+
export type TransferPolicy = {
|
|
87
|
+
target: Address;
|
|
88
|
+
maxValuePerUse: bigint;
|
|
89
|
+
valueLimit: UsageLimit;
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Complete session specification
|
|
94
|
+
* @member signer - Session key public address (can sign transactions within policy limits)
|
|
95
|
+
* @member expiresAt - Unix timestamp when session expires
|
|
96
|
+
* @member feeLimit - Maximum cumulative fees the session can pay
|
|
97
|
+
* @member callPolicies - Policies for contract calls (requires calldata)
|
|
98
|
+
* @member transferPolicies - Policies for value transfers (no calldata)
|
|
99
|
+
*/
|
|
100
|
+
export type SessionSpec = {
|
|
101
|
+
signer: Address;
|
|
102
|
+
expiresAt: bigint;
|
|
103
|
+
feeLimit: UsageLimit;
|
|
104
|
+
callPolicies: CallPolicy[];
|
|
105
|
+
transferPolicies: TransferPolicy[];
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Helper to create unlimited limit
|
|
110
|
+
*/
|
|
111
|
+
export const LimitUnlimited: UsageLimit = {
|
|
112
|
+
limitType: LimitType.Unlimited,
|
|
113
|
+
limit: 0n,
|
|
114
|
+
period: 0n,
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Helper to create zero (disabled) limit
|
|
119
|
+
*/
|
|
120
|
+
export const LimitZero: UsageLimit = {
|
|
121
|
+
limitType: LimitType.Lifetime,
|
|
122
|
+
limit: 0n,
|
|
123
|
+
period: 0n,
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Helper to create lifetime limit (no period tracking)
|
|
128
|
+
*/
|
|
129
|
+
export const createLifetimeLimit = (limit: bigint): UsageLimit => ({
|
|
130
|
+
limitType: LimitType.Lifetime,
|
|
131
|
+
limit,
|
|
132
|
+
period: 0n,
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Helper to create time-based allowance limit
|
|
137
|
+
* @param period - Period in seconds for the allowance window
|
|
138
|
+
* @param limit - Maximum value allowed within the period
|
|
139
|
+
*/
|
|
140
|
+
export const createAllowanceLimit = (
|
|
141
|
+
period: bigint,
|
|
142
|
+
limit: bigint,
|
|
143
|
+
): UsageLimit => ({
|
|
144
|
+
limitType: LimitType.Allowance,
|
|
145
|
+
limit,
|
|
146
|
+
period,
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
// ============================================================================
|
|
150
|
+
// Enum Conversion Helpers for Contract ABIs
|
|
151
|
+
// ============================================================================
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Convert LimitType enum to numeric value for contract calls
|
|
155
|
+
*/
|
|
156
|
+
export function limitTypeToNumber(limitType: LimitType): number {
|
|
157
|
+
switch (limitType) {
|
|
158
|
+
case LimitType.Unlimited:
|
|
159
|
+
return 0;
|
|
160
|
+
case LimitType.Lifetime:
|
|
161
|
+
return 1;
|
|
162
|
+
case LimitType.Allowance:
|
|
163
|
+
return 2;
|
|
164
|
+
default:
|
|
165
|
+
throw new Error(`Unknown LimitType: ${limitType}`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Convert ConstraintCondition enum to numeric value for contract calls
|
|
171
|
+
*/
|
|
172
|
+
export function conditionToNumber(condition: ConstraintCondition): number {
|
|
173
|
+
switch (condition) {
|
|
174
|
+
case ConstraintCondition.Unconstrained:
|
|
175
|
+
return 0;
|
|
176
|
+
case ConstraintCondition.Equal:
|
|
177
|
+
return 1;
|
|
178
|
+
case ConstraintCondition.Greater:
|
|
179
|
+
return 2;
|
|
180
|
+
case ConstraintCondition.Less:
|
|
181
|
+
return 3;
|
|
182
|
+
case ConstraintCondition.GreaterEqual:
|
|
183
|
+
return 4;
|
|
184
|
+
case ConstraintCondition.LessEqual:
|
|
185
|
+
return 5;
|
|
186
|
+
case ConstraintCondition.NotEqual:
|
|
187
|
+
return 6;
|
|
188
|
+
default:
|
|
189
|
+
throw new Error(`Unknown ConstraintCondition: ${condition}`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// ============================================================================
|
|
194
|
+
// Backward Compatibility Type Aliases (for legacy SDK migration)
|
|
195
|
+
// ============================================================================
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* @deprecated Use SessionSpec instead. Provided for backward compatibility with legacy SDK.
|
|
199
|
+
*/
|
|
200
|
+
export type SessionConfig = SessionSpec;
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* @deprecated Use UsageLimit instead. Provided for backward compatibility with legacy SDK.
|
|
204
|
+
*/
|
|
205
|
+
export type Limit = UsageLimit;
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { type Address, encodeAbiParameters, type Hex, keccak256 } from "viem";
|
|
2
|
+
|
|
3
|
+
import { SessionKeyValidatorAbi } from "../../abi/SessionKeyValidator.js";
|
|
4
|
+
import { LimitType, type SessionSpec, type UsageLimit } from "./types.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Utility type that converts all bigint values to strings recursively
|
|
8
|
+
*/
|
|
9
|
+
export type ConvertBigIntToString<T> = T extends bigint
|
|
10
|
+
? string
|
|
11
|
+
: T extends Array<infer U>
|
|
12
|
+
? Array<ConvertBigIntToString<U>>
|
|
13
|
+
: T extends object
|
|
14
|
+
? { [K in keyof T]: ConvertBigIntToString<T[K]> }
|
|
15
|
+
: T;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* SessionSpec with all bigint values converted to strings for JSON serialization
|
|
19
|
+
*/
|
|
20
|
+
export type SessionSpecJSON = ConvertBigIntToString<SessionSpec>;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Converts a SessionSpec to JSON string format expected by WASM bindings.
|
|
24
|
+
* All bigint values are converted to strings for safe serialization.
|
|
25
|
+
*/
|
|
26
|
+
export function sessionSpecToJSON(spec: SessionSpec): string {
|
|
27
|
+
const usageLimitToJSON = (limit: UsageLimit) => {
|
|
28
|
+
let limitType = "Unlimited";
|
|
29
|
+
if (limit.limitType === LimitType.Lifetime) limitType = "Lifetime";
|
|
30
|
+
else if (limit.limitType === LimitType.Allowance) limitType = "Allowance";
|
|
31
|
+
|
|
32
|
+
return {
|
|
33
|
+
limitType,
|
|
34
|
+
limit: limit.limit.toString(),
|
|
35
|
+
period: limit.period.toString(),
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
return JSON.stringify({
|
|
40
|
+
signer: spec.signer,
|
|
41
|
+
expiresAt: spec.expiresAt.toString(),
|
|
42
|
+
feeLimit: usageLimitToJSON(spec.feeLimit),
|
|
43
|
+
callPolicies: spec.callPolicies.map((policy) => ({
|
|
44
|
+
target: policy.target,
|
|
45
|
+
selector: policy.selector,
|
|
46
|
+
maxValuePerUse: policy.maxValuePerUse.toString(),
|
|
47
|
+
valueLimit: usageLimitToJSON(policy.valueLimit),
|
|
48
|
+
constraints: policy.constraints.map((constraint) => ({
|
|
49
|
+
condition: constraint.condition,
|
|
50
|
+
index: constraint.index.toString(),
|
|
51
|
+
refValue: constraint.refValue,
|
|
52
|
+
limit: usageLimitToJSON(constraint.limit),
|
|
53
|
+
})),
|
|
54
|
+
})),
|
|
55
|
+
transferPolicies: spec.transferPolicies.map((policy) => ({
|
|
56
|
+
target: policy.target,
|
|
57
|
+
maxValuePerUse: policy.maxValuePerUse.toString(),
|
|
58
|
+
valueLimit: usageLimitToJSON(policy.valueLimit),
|
|
59
|
+
})),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Extract function selector from calldata (first 4 bytes)
|
|
65
|
+
*/
|
|
66
|
+
export function extractSelector(callData: Hex): Hex | undefined {
|
|
67
|
+
if (!callData || callData.length < 10) return undefined; // 0x + 8 hex chars = 10
|
|
68
|
+
return callData.slice(0, 10) as Hex;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Find matching policy for a transaction
|
|
73
|
+
*/
|
|
74
|
+
export function findMatchingPolicy(
|
|
75
|
+
spec: SessionSpec,
|
|
76
|
+
target: Address,
|
|
77
|
+
selector?: Hex,
|
|
78
|
+
): { type: "call" | "transfer"; policy: SessionSpec["callPolicies"][0] | SessionSpec["transferPolicies"][0] } | null {
|
|
79
|
+
// If selector provided, look for call policy
|
|
80
|
+
if (selector) {
|
|
81
|
+
const callPolicy = spec.callPolicies.find(
|
|
82
|
+
(p) => p.target.toLowerCase() === target.toLowerCase() && p.selector.toLowerCase() === selector.toLowerCase(),
|
|
83
|
+
);
|
|
84
|
+
if (callPolicy) return { type: "call", policy: callPolicy };
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Otherwise look for transfer policy
|
|
88
|
+
const transferPolicy = spec.transferPolicies.find(
|
|
89
|
+
(p) => p.target.toLowerCase() === target.toLowerCase(),
|
|
90
|
+
);
|
|
91
|
+
if (transferPolicy) return { type: "transfer", policy: transferPolicy };
|
|
92
|
+
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Validates that a transaction fits within session policies
|
|
98
|
+
* Returns error message if invalid, null if valid
|
|
99
|
+
*/
|
|
100
|
+
export function validateTransactionAgainstSession(
|
|
101
|
+
spec: SessionSpec,
|
|
102
|
+
target: Address,
|
|
103
|
+
value: bigint,
|
|
104
|
+
callData?: Hex,
|
|
105
|
+
): string | null {
|
|
106
|
+
const selector = callData ? extractSelector(callData) : undefined;
|
|
107
|
+
const match = findMatchingPolicy(spec, target, selector);
|
|
108
|
+
|
|
109
|
+
if (!match) {
|
|
110
|
+
return selector
|
|
111
|
+
? `No call policy found for target ${target} with selector ${selector}`
|
|
112
|
+
: `No transfer policy found for target ${target}`;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Check max value per use
|
|
116
|
+
if (value > match.policy.maxValuePerUse) {
|
|
117
|
+
return `Value ${value} exceeds maxValuePerUse ${match.policy.maxValuePerUse}`;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return null; // Valid
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Checks if a session has expired
|
|
125
|
+
*/
|
|
126
|
+
export function isSessionExpired(
|
|
127
|
+
spec: SessionSpec,
|
|
128
|
+
currentTimestamp?: bigint,
|
|
129
|
+
): boolean {
|
|
130
|
+
const now = currentTimestamp ?? BigInt(Math.floor(Date.now() / 1000));
|
|
131
|
+
return now > spec.expiresAt;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Gets human-readable expiry time
|
|
136
|
+
*/
|
|
137
|
+
export function getSessionExpiryDate(spec: SessionSpec): Date {
|
|
138
|
+
return new Date(Number(spec.expiresAt) * 1000);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Computes the hash of a session specification.
|
|
143
|
+
* This hash is signed by the session key to prove ownership.
|
|
144
|
+
*/
|
|
145
|
+
export function getSessionHash(spec: SessionSpec): Hex {
|
|
146
|
+
const createSessionFunction = SessionKeyValidatorAbi.find(
|
|
147
|
+
(x) => x.type === "function" && x.name === "createSession",
|
|
148
|
+
);
|
|
149
|
+
if (!createSessionFunction) throw new Error("createSession function not found in SessionKeyValidator ABI");
|
|
150
|
+
|
|
151
|
+
const sessionSpecParam = createSessionFunction.inputs.find((x) => x.name === "sessionSpec");
|
|
152
|
+
if (!sessionSpecParam) throw new Error("sessionSpec parameter not found in createSession function inputs");
|
|
153
|
+
|
|
154
|
+
const encoded = encodeAbiParameters(
|
|
155
|
+
[sessionSpecParam],
|
|
156
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
157
|
+
[spec as any],
|
|
158
|
+
);
|
|
159
|
+
return keccak256(encoded);
|
|
160
|
+
}
|