@aspect-wallet/sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/LICENSE +21 -0
- package/README.md +708 -0
- package/dist/audit/history.d.ts +44 -0
- package/dist/audit/history.d.ts.map +1 -0
- package/dist/audit/history.js +80 -0
- package/dist/audit/history.js.map +1 -0
- package/dist/auth/email.d.ts +52 -0
- package/dist/auth/email.d.ts.map +1 -0
- package/dist/auth/email.js +66 -0
- package/dist/auth/email.js.map +1 -0
- package/dist/auth/oauth.d.ts +47 -0
- package/dist/auth/oauth.d.ts.map +1 -0
- package/dist/auth/oauth.js +103 -0
- package/dist/auth/oauth.js.map +1 -0
- package/dist/auth/passkey-auth.d.ts +39 -0
- package/dist/auth/passkey-auth.d.ts.map +1 -0
- package/dist/auth/passkey-auth.js +108 -0
- package/dist/auth/passkey-auth.js.map +1 -0
- package/dist/auth/session.d.ts +30 -0
- package/dist/auth/session.d.ts.map +1 -0
- package/dist/auth/session.js +61 -0
- package/dist/auth/session.js.map +1 -0
- package/dist/chain/registry.d.ts +25 -0
- package/dist/chain/registry.d.ts.map +1 -0
- package/dist/chain/registry.js +46 -0
- package/dist/chain/registry.js.map +1 -0
- package/dist/core/client.d.ts +78 -0
- package/dist/core/client.d.ts.map +1 -0
- package/dist/core/client.js +129 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/config.d.ts +22 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +91 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/errors.d.ts +32 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +95 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/index.d.ts +55 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +64 -0
- package/dist/index.js.map +1 -0
- package/dist/mfa/guardian.d.ts +27 -0
- package/dist/mfa/guardian.d.ts.map +1 -0
- package/dist/mfa/guardian.js +37 -0
- package/dist/mfa/guardian.js.map +1 -0
- package/dist/mfa/multisig.d.ts +28 -0
- package/dist/mfa/multisig.d.ts.map +1 -0
- package/dist/mfa/multisig.js +40 -0
- package/dist/mfa/multisig.js.map +1 -0
- package/dist/mfa/tiers.d.ts +34 -0
- package/dist/mfa/tiers.d.ts.map +1 -0
- package/dist/mfa/tiers.js +66 -0
- package/dist/mfa/tiers.js.map +1 -0
- package/dist/mfa/timelock.d.ts +32 -0
- package/dist/mfa/timelock.d.ts.map +1 -0
- package/dist/mfa/timelock.js +47 -0
- package/dist/mfa/timelock.js.map +1 -0
- package/dist/recovery/devices.d.ts +31 -0
- package/dist/recovery/devices.d.ts.map +1 -0
- package/dist/recovery/devices.js +33 -0
- package/dist/recovery/devices.js.map +1 -0
- package/dist/recovery/export.d.ts +33 -0
- package/dist/recovery/export.d.ts.map +1 -0
- package/dist/recovery/export.js +44 -0
- package/dist/recovery/export.js.map +1 -0
- package/dist/recovery/rotation.d.ts +26 -0
- package/dist/recovery/rotation.d.ts.map +1 -0
- package/dist/recovery/rotation.js +31 -0
- package/dist/recovery/rotation.js.map +1 -0
- package/dist/recovery/social.d.ts +33 -0
- package/dist/recovery/social.d.ts.map +1 -0
- package/dist/recovery/social.js +36 -0
- package/dist/recovery/social.js.map +1 -0
- package/dist/security/freeze.d.ts +34 -0
- package/dist/security/freeze.d.ts.map +1 -0
- package/dist/security/freeze.js +42 -0
- package/dist/security/freeze.js.map +1 -0
- package/dist/security/revoke.d.ts +27 -0
- package/dist/security/revoke.d.ts.map +1 -0
- package/dist/security/revoke.js +27 -0
- package/dist/security/revoke.js.map +1 -0
- package/dist/security/watchtower.d.ts +34 -0
- package/dist/security/watchtower.d.ts.map +1 -0
- package/dist/security/watchtower.js +38 -0
- package/dist/security/watchtower.js.map +1 -0
- package/dist/session-keys/manager.d.ts +40 -0
- package/dist/session-keys/manager.d.ts.map +1 -0
- package/dist/session-keys/manager.js +65 -0
- package/dist/session-keys/manager.js.map +1 -0
- package/dist/session-keys/permissions.d.ts +44 -0
- package/dist/session-keys/permissions.d.ts.map +1 -0
- package/dist/session-keys/permissions.js +63 -0
- package/dist/session-keys/permissions.js.map +1 -0
- package/dist/session-keys/templates.d.ts +49 -0
- package/dist/session-keys/templates.d.ts.map +1 -0
- package/dist/session-keys/templates.js +65 -0
- package/dist/session-keys/templates.js.map +1 -0
- package/dist/signer/eoa.d.ts +24 -0
- package/dist/signer/eoa.d.ts.map +1 -0
- package/dist/signer/eoa.js +32 -0
- package/dist/signer/eoa.js.map +1 -0
- package/dist/signer/interface.d.ts +60 -0
- package/dist/signer/interface.d.ts.map +1 -0
- package/dist/signer/interface.js +47 -0
- package/dist/signer/interface.js.map +1 -0
- package/dist/signer/multisig.d.ts +38 -0
- package/dist/signer/multisig.d.ts.map +1 -0
- package/dist/signer/multisig.js +56 -0
- package/dist/signer/multisig.js.map +1 -0
- package/dist/signer/passkey.d.ts +35 -0
- package/dist/signer/passkey.d.ts.map +1 -0
- package/dist/signer/passkey.js +112 -0
- package/dist/signer/passkey.js.map +1 -0
- package/dist/signer/session.d.ts +24 -0
- package/dist/signer/session.d.ts.map +1 -0
- package/dist/signer/session.js +32 -0
- package/dist/signer/session.js.map +1 -0
- package/dist/sponsor/paymaster.d.ts +27 -0
- package/dist/sponsor/paymaster.d.ts.map +1 -0
- package/dist/sponsor/paymaster.js +43 -0
- package/dist/sponsor/paymaster.js.map +1 -0
- package/dist/transport/api.d.ts +25 -0
- package/dist/transport/api.d.ts.map +1 -0
- package/dist/transport/api.js +79 -0
- package/dist/transport/api.js.map +1 -0
- package/dist/transport/bundler.d.ts +52 -0
- package/dist/transport/bundler.d.ts.map +1 -0
- package/dist/transport/bundler.js +109 -0
- package/dist/transport/bundler.js.map +1 -0
- package/dist/transport/iframe.d.ts +33 -0
- package/dist/transport/iframe.d.ts.map +1 -0
- package/dist/transport/iframe.js +131 -0
- package/dist/transport/iframe.js.map +1 -0
- package/dist/types.d.ts +366 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/userop/builder.d.ts +75 -0
- package/dist/userop/builder.d.ts.map +1 -0
- package/dist/userop/builder.js +150 -0
- package/dist/userop/builder.js.map +1 -0
- package/dist/userop/encoding.d.ts +44 -0
- package/dist/userop/encoding.d.ts.map +1 -0
- package/dist/userop/encoding.js +99 -0
- package/dist/userop/encoding.js.map +1 -0
- package/dist/userop/gas.d.ts +35 -0
- package/dist/userop/gas.d.ts.map +1 -0
- package/dist/userop/gas.js +53 -0
- package/dist/userop/gas.js.map +1 -0
- package/dist/userop/hash.d.ts +34 -0
- package/dist/userop/hash.d.ts.map +1 -0
- package/dist/userop/hash.js +55 -0
- package/dist/userop/hash.js.map +1 -0
- package/dist/userop/nonce.d.ts +53 -0
- package/dist/userop/nonce.d.ts.map +1 -0
- package/dist/userop/nonce.js +79 -0
- package/dist/userop/nonce.js.map +1 -0
- package/dist/wallet/factory.d.ts +63 -0
- package/dist/wallet/factory.d.ts.map +1 -0
- package/dist/wallet/factory.js +63 -0
- package/dist/wallet/factory.js.map +1 -0
- package/package.json +70 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @aspect-wallet/sdk - FcxWallet SDK for ERC-4337 smart wallets.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```ts
|
|
6
|
+
* import { FcxWalletClient } from '@aspect-wallet/sdk';
|
|
7
|
+
*
|
|
8
|
+
* const client = new FcxWalletClient({
|
|
9
|
+
* apiKey: 'fcx_live_abc123...',
|
|
10
|
+
* chain: 'arbitrum-one',
|
|
11
|
+
* });
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export { FcxWalletClient } from './core/client.js';
|
|
15
|
+
export { FcxError } from './core/errors.js';
|
|
16
|
+
export type { FcxErrorCode } from './core/errors.js';
|
|
17
|
+
export { ENTRYPOINT_V06, RIP7212_PRECOMPILE, ERC1967_IMPLEMENTATION_SLOT, P256_N, GAS_SAFETY_MARGIN, FEE_SAFETY_MARGIN, CHAIN_IDS, } from './core/config.js';
|
|
18
|
+
export { getUserOpHash } from './userop/hash.js';
|
|
19
|
+
export { UserOpBuilder } from './userop/builder.js';
|
|
20
|
+
export { encodeCallData, encodeBatchCallData, encodeInitCode } from './userop/encoding.js';
|
|
21
|
+
export { NonceManager } from './userop/nonce.js';
|
|
22
|
+
export { estimateGas, applyGasSafetyMargin } from './userop/gas.js';
|
|
23
|
+
export type { ISigner } from './signer/interface.js';
|
|
24
|
+
export { EoaSigner } from './signer/eoa.js';
|
|
25
|
+
export { PasskeySigner } from './signer/passkey.js';
|
|
26
|
+
export { SessionKeySigner } from './signer/session.js';
|
|
27
|
+
export { MultiSigCollector } from './signer/multisig.js';
|
|
28
|
+
export { encodeModuleSignature } from './signer/interface.js';
|
|
29
|
+
export { WalletFactory, computeWalletAddress } from './wallet/factory.js';
|
|
30
|
+
export { PaymasterClient } from './sponsor/paymaster.js';
|
|
31
|
+
export { AuthClient } from './auth/email.js';
|
|
32
|
+
export { OAuthClient } from './auth/oauth.js';
|
|
33
|
+
export { PasskeyAuthClient } from './auth/passkey-auth.js';
|
|
34
|
+
export { SessionManager } from './auth/session.js';
|
|
35
|
+
export { GuardianManager } from './mfa/guardian.js';
|
|
36
|
+
export { MultiSigManager } from './mfa/multisig.js';
|
|
37
|
+
export { TimelockManager } from './mfa/timelock.js';
|
|
38
|
+
export { TierSelector } from './mfa/tiers.js';
|
|
39
|
+
export { SessionKeyManager } from './session-keys/manager.js';
|
|
40
|
+
export { PermissionBuilder } from './session-keys/permissions.js';
|
|
41
|
+
export { SessionKeyTemplates } from './session-keys/templates.js';
|
|
42
|
+
export { SocialRecovery } from './recovery/social.js';
|
|
43
|
+
export { KeyRotation } from './recovery/rotation.js';
|
|
44
|
+
export { KeyExport } from './recovery/export.js';
|
|
45
|
+
export { DeviceManager } from './recovery/devices.js';
|
|
46
|
+
export { FreezeManager } from './security/freeze.js';
|
|
47
|
+
export { WatchtowerClient } from './security/watchtower.js';
|
|
48
|
+
export { RevokeManager } from './security/revoke.js';
|
|
49
|
+
export { AuditClient } from './audit/history.js';
|
|
50
|
+
export { ChainRegistry } from './chain/registry.js';
|
|
51
|
+
export { BundlerClient } from './transport/bundler.js';
|
|
52
|
+
export { ApiClient } from './transport/api.js';
|
|
53
|
+
export { IframeBridge } from './transport/iframe.js';
|
|
54
|
+
export type * from './types.js';
|
|
55
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,2BAA2B,EAC3B,MAAM,EACN,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,GACV,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAGpE,YAAY,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG1E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAGlE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,mBAAmB,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @aspect-wallet/sdk - FcxWallet SDK for ERC-4337 smart wallets.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```ts
|
|
6
|
+
* import { FcxWalletClient } from '@aspect-wallet/sdk';
|
|
7
|
+
*
|
|
8
|
+
* const client = new FcxWalletClient({
|
|
9
|
+
* apiKey: 'fcx_live_abc123...',
|
|
10
|
+
* chain: 'arbitrum-one',
|
|
11
|
+
* });
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
// Core
|
|
15
|
+
export { FcxWalletClient } from './core/client.js';
|
|
16
|
+
export { FcxError } from './core/errors.js';
|
|
17
|
+
export { ENTRYPOINT_V06, RIP7212_PRECOMPILE, ERC1967_IMPLEMENTATION_SLOT, P256_N, GAS_SAFETY_MARGIN, FEE_SAFETY_MARGIN, CHAIN_IDS, } from './core/config.js';
|
|
18
|
+
// UserOp
|
|
19
|
+
export { getUserOpHash } from './userop/hash.js';
|
|
20
|
+
export { UserOpBuilder } from './userop/builder.js';
|
|
21
|
+
export { encodeCallData, encodeBatchCallData, encodeInitCode } from './userop/encoding.js';
|
|
22
|
+
export { NonceManager } from './userop/nonce.js';
|
|
23
|
+
export { estimateGas, applyGasSafetyMargin } from './userop/gas.js';
|
|
24
|
+
export { EoaSigner } from './signer/eoa.js';
|
|
25
|
+
export { PasskeySigner } from './signer/passkey.js';
|
|
26
|
+
export { SessionKeySigner } from './signer/session.js';
|
|
27
|
+
export { MultiSigCollector } from './signer/multisig.js';
|
|
28
|
+
export { encodeModuleSignature } from './signer/interface.js';
|
|
29
|
+
// Wallet
|
|
30
|
+
export { WalletFactory, computeWalletAddress } from './wallet/factory.js';
|
|
31
|
+
// Sponsor
|
|
32
|
+
export { PaymasterClient } from './sponsor/paymaster.js';
|
|
33
|
+
// Auth
|
|
34
|
+
export { AuthClient } from './auth/email.js';
|
|
35
|
+
export { OAuthClient } from './auth/oauth.js';
|
|
36
|
+
export { PasskeyAuthClient } from './auth/passkey-auth.js';
|
|
37
|
+
export { SessionManager } from './auth/session.js';
|
|
38
|
+
// MFA
|
|
39
|
+
export { GuardianManager } from './mfa/guardian.js';
|
|
40
|
+
export { MultiSigManager } from './mfa/multisig.js';
|
|
41
|
+
export { TimelockManager } from './mfa/timelock.js';
|
|
42
|
+
export { TierSelector } from './mfa/tiers.js';
|
|
43
|
+
// Session Keys
|
|
44
|
+
export { SessionKeyManager } from './session-keys/manager.js';
|
|
45
|
+
export { PermissionBuilder } from './session-keys/permissions.js';
|
|
46
|
+
export { SessionKeyTemplates } from './session-keys/templates.js';
|
|
47
|
+
// Recovery
|
|
48
|
+
export { SocialRecovery } from './recovery/social.js';
|
|
49
|
+
export { KeyRotation } from './recovery/rotation.js';
|
|
50
|
+
export { KeyExport } from './recovery/export.js';
|
|
51
|
+
export { DeviceManager } from './recovery/devices.js';
|
|
52
|
+
// Security
|
|
53
|
+
export { FreezeManager } from './security/freeze.js';
|
|
54
|
+
export { WatchtowerClient } from './security/watchtower.js';
|
|
55
|
+
export { RevokeManager } from './security/revoke.js';
|
|
56
|
+
// Audit
|
|
57
|
+
export { AuditClient } from './audit/history.js';
|
|
58
|
+
// Chain
|
|
59
|
+
export { ChainRegistry } from './chain/registry.js';
|
|
60
|
+
// Transport
|
|
61
|
+
export { BundlerClient } from './transport/bundler.js';
|
|
62
|
+
export { ApiClient } from './transport/api.js';
|
|
63
|
+
export { IframeBridge } from './transport/iframe.js';
|
|
64
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO;AACP,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,2BAA2B,EAC3B,MAAM,EACN,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,GACV,MAAM,kBAAkB,CAAC;AAE1B,SAAS;AACT,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAIpE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,SAAS;AACT,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE1E,UAAU;AACV,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO;AACP,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM;AACN,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,eAAe;AACf,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,WAAW;AACX,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,WAAW;AACX,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,QAAQ;AACR,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,QAAQ;AACR,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,YAAY;AACZ,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guardian co-signing management.
|
|
3
|
+
* Corresponds to SPEC-013 Section 8.2.
|
|
4
|
+
*/
|
|
5
|
+
import type { Address, GuardianInfo } from '../types.js';
|
|
6
|
+
import { ApiClient } from '../transport/api.js';
|
|
7
|
+
/**
|
|
8
|
+
* Manages guardian relationships for MFA and recovery.
|
|
9
|
+
*/
|
|
10
|
+
export declare class GuardianManager {
|
|
11
|
+
private readonly api;
|
|
12
|
+
constructor(api: ApiClient);
|
|
13
|
+
/** Add a guardian (requires owner signature) */
|
|
14
|
+
addGuardian(params: {
|
|
15
|
+
guardian: Address;
|
|
16
|
+
label: string;
|
|
17
|
+
}): Promise<void>;
|
|
18
|
+
/** Remove a guardian (requires owner signature, must stay above threshold) */
|
|
19
|
+
removeGuardian(guardian: Address): Promise<void>;
|
|
20
|
+
/** List all guardians for a wallet */
|
|
21
|
+
listGuardians(walletAddress: Address): Promise<GuardianInfo[]>;
|
|
22
|
+
/** Set the guardian threshold (K-of-N) */
|
|
23
|
+
setThreshold(threshold: number): Promise<void>;
|
|
24
|
+
/** Get the current threshold */
|
|
25
|
+
getThreshold(walletAddress: Address): Promise<number>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=guardian.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guardian.d.ts","sourceRoot":"","sources":["../../src/mfa/guardian.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD;;GAEG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,SAAS;IAE3C,gDAAgD;IAC1C,WAAW,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9E,8EAA8E;IACxE,cAAc,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,sCAAsC;IAChC,aAAa,CAAC,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAIpE,0CAA0C;IACpC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,gCAAgC;IAC1B,YAAY,CAAC,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;CAM5D"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guardian co-signing management.
|
|
3
|
+
* Corresponds to SPEC-013 Section 8.2.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Manages guardian relationships for MFA and recovery.
|
|
7
|
+
*/
|
|
8
|
+
export class GuardianManager {
|
|
9
|
+
api;
|
|
10
|
+
constructor(api) {
|
|
11
|
+
this.api = api;
|
|
12
|
+
}
|
|
13
|
+
/** Add a guardian (requires owner signature) */
|
|
14
|
+
async addGuardian(params) {
|
|
15
|
+
await this.api.post('/mfa/guardians', params);
|
|
16
|
+
}
|
|
17
|
+
/** Remove a guardian (requires owner signature, must stay above threshold) */
|
|
18
|
+
async removeGuardian(guardian) {
|
|
19
|
+
await this.api.delete(`/mfa/guardians/${guardian}`);
|
|
20
|
+
}
|
|
21
|
+
/** List all guardians for a wallet */
|
|
22
|
+
async listGuardians(walletAddress) {
|
|
23
|
+
return this.api.get('/mfa/guardians', { wallet: walletAddress });
|
|
24
|
+
}
|
|
25
|
+
/** Set the guardian threshold (K-of-N) */
|
|
26
|
+
async setThreshold(threshold) {
|
|
27
|
+
await this.api.post('/mfa/threshold', { threshold });
|
|
28
|
+
}
|
|
29
|
+
/** Get the current threshold */
|
|
30
|
+
async getThreshold(walletAddress) {
|
|
31
|
+
const result = await this.api.get('/mfa/threshold', {
|
|
32
|
+
wallet: walletAddress,
|
|
33
|
+
});
|
|
34
|
+
return result.threshold;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=guardian.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guardian.js","sourceRoot":"","sources":["../../src/mfa/guardian.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,MAAM,OAAO,eAAe;IACG;IAA7B,YAA6B,GAAc;QAAd,QAAG,GAAH,GAAG,CAAW;IAAG,CAAC;IAE/C,gDAAgD;IAChD,KAAK,CAAC,WAAW,CAAC,MAA4C;QAC5D,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,8EAA8E;IAC9E,KAAK,CAAC,cAAc,CAAC,QAAiB;QACpC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,kBAAkB,QAAQ,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,sCAAsC;IACtC,KAAK,CAAC,aAAa,CAAC,aAAsB;QACxC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAiB,gBAAgB,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,0CAA0C;IAC1C,KAAK,CAAC,YAAY,CAAC,SAAiB;QAClC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,gCAAgC;IAChC,KAAK,CAAC,YAAY,CAAC,aAAsB;QACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAwB,gBAAgB,EAAE;YACzE,MAAM,EAAE,aAAa;SACtB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,SAAS,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-sig operations for MFA.
|
|
3
|
+
* Corresponds to SPEC-013 Section 8.3.
|
|
4
|
+
*/
|
|
5
|
+
import type { Address, MultiSigProposal, CallRequest } from '../types.js';
|
|
6
|
+
import { ApiClient } from '../transport/api.js';
|
|
7
|
+
/**
|
|
8
|
+
* Manages multi-sig transaction proposals and approvals.
|
|
9
|
+
*/
|
|
10
|
+
export declare class MultiSigManager {
|
|
11
|
+
private readonly api;
|
|
12
|
+
constructor(api: ApiClient);
|
|
13
|
+
/**
|
|
14
|
+
* Propose a multi-sig transaction (owner signs first).
|
|
15
|
+
* Returns the proposal with current signature count.
|
|
16
|
+
*/
|
|
17
|
+
proposeMultiSig(call: CallRequest): Promise<MultiSigProposal>;
|
|
18
|
+
/**
|
|
19
|
+
* Approve a multi-sig proposal (co-signer).
|
|
20
|
+
* If threshold is met, the UserOp is submitted automatically.
|
|
21
|
+
*/
|
|
22
|
+
approveMultiSig(proposalId: string): Promise<MultiSigProposal>;
|
|
23
|
+
/** Get the status of a multi-sig proposal */
|
|
24
|
+
getProposal(proposalId: string): Promise<MultiSigProposal>;
|
|
25
|
+
/** List pending multi-sig proposals for a wallet */
|
|
26
|
+
listPending(walletAddress: Address): Promise<MultiSigProposal[]>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=multisig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multisig.d.ts","sourceRoot":"","sources":["../../src/mfa/multisig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAO,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD;;GAEG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,SAAS;IAE3C;;;OAGG;IACG,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAQnE;;;OAGG;IACG,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAIpE,6CAA6C;IACvC,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAIhE,oDAAoD;IAC9C,WAAW,CAAC,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;CAGvE"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-sig operations for MFA.
|
|
3
|
+
* Corresponds to SPEC-013 Section 8.3.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Manages multi-sig transaction proposals and approvals.
|
|
7
|
+
*/
|
|
8
|
+
export class MultiSigManager {
|
|
9
|
+
api;
|
|
10
|
+
constructor(api) {
|
|
11
|
+
this.api = api;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Propose a multi-sig transaction (owner signs first).
|
|
15
|
+
* Returns the proposal with current signature count.
|
|
16
|
+
*/
|
|
17
|
+
async proposeMultiSig(call) {
|
|
18
|
+
return this.api.post('/mfa/multisig/propose', {
|
|
19
|
+
target: call.target,
|
|
20
|
+
value: call.value.toString(),
|
|
21
|
+
data: call.data,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Approve a multi-sig proposal (co-signer).
|
|
26
|
+
* If threshold is met, the UserOp is submitted automatically.
|
|
27
|
+
*/
|
|
28
|
+
async approveMultiSig(proposalId) {
|
|
29
|
+
return this.api.post(`/mfa/multisig/${proposalId}/approve`, {});
|
|
30
|
+
}
|
|
31
|
+
/** Get the status of a multi-sig proposal */
|
|
32
|
+
async getProposal(proposalId) {
|
|
33
|
+
return this.api.get(`/mfa/multisig/${proposalId}`);
|
|
34
|
+
}
|
|
35
|
+
/** List pending multi-sig proposals for a wallet */
|
|
36
|
+
async listPending(walletAddress) {
|
|
37
|
+
return this.api.get('/mfa/multisig', { wallet: walletAddress });
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=multisig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multisig.js","sourceRoot":"","sources":["../../src/mfa/multisig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,MAAM,OAAO,eAAe;IACG;IAA7B,YAA6B,GAAc;QAAd,QAAG,GAAH,GAAG,CAAW;IAAG,CAAC;IAE/C;;;OAGG;IACH,KAAK,CAAC,eAAe,CAAC,IAAiB;QACrC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAmB,uBAAuB,EAAE;YAC9D,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,eAAe,CAAC,UAAkB;QACtC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAmB,iBAAiB,UAAU,UAAU,EAAE,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,6CAA6C;IAC7C,KAAK,CAAC,WAAW,CAAC,UAAkB;QAClC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAmB,iBAAiB,UAAU,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,oDAAoD;IACpD,KAAK,CAAC,WAAW,CAAC,aAAsB;QACtC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAqB,eAAe,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IACtF,CAAC;CACF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Step-up auth tier selection.
|
|
3
|
+
* Corresponds to SPEC-013 Section 8.1.
|
|
4
|
+
*
|
|
5
|
+
* Tier 1: Session key (value < 0.01 ETH + target in allowlist)
|
|
6
|
+
* Tier 2: Owner key (value < 1 ETH)
|
|
7
|
+
* Tier 3: Device + Guardian (value < 10 ETH)
|
|
8
|
+
* Tier 4: Multi-sig + Timelock (account management OR value >= 10 ETH)
|
|
9
|
+
*/
|
|
10
|
+
import type { Address, Hex, SessionKeyPermissions } from '../types.js';
|
|
11
|
+
/** Auth tier levels */
|
|
12
|
+
export type AuthTier = 1 | 2 | 3 | 4;
|
|
13
|
+
/**
|
|
14
|
+
* Automatically selects the appropriate auth tier based on
|
|
15
|
+
* transaction value, target, and active session key permissions.
|
|
16
|
+
*/
|
|
17
|
+
export declare class TierSelector {
|
|
18
|
+
/**
|
|
19
|
+
* Determine the required auth tier for a transaction.
|
|
20
|
+
*
|
|
21
|
+
* @param value - Transaction value in wei
|
|
22
|
+
* @param target - Target contract address
|
|
23
|
+
* @param selector - Function selector (first 4 bytes of callData)
|
|
24
|
+
* @param activeSessionPermissions - Permissions of any active session key
|
|
25
|
+
* @returns The required auth tier
|
|
26
|
+
*/
|
|
27
|
+
static select(params: {
|
|
28
|
+
value: bigint;
|
|
29
|
+
target?: Address;
|
|
30
|
+
selector?: Hex;
|
|
31
|
+
activeSessionPermissions?: SessionKeyPermissions;
|
|
32
|
+
}): AuthTier;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=tiers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiers.d.ts","sourceRoot":"","sources":["../../src/mfa/tiers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEvE,uBAAuB;AACvB,MAAM,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAiBrC;;;GAGG;AACH,qBAAa,YAAY;IACvB;;;;;;;;OAQG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,GAAG,CAAC;QACf,wBAAwB,CAAC,EAAE,qBAAqB,CAAC;KAClD,GAAG,QAAQ;CAoCb"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Step-up auth tier selection.
|
|
3
|
+
* Corresponds to SPEC-013 Section 8.1.
|
|
4
|
+
*
|
|
5
|
+
* Tier 1: Session key (value < 0.01 ETH + target in allowlist)
|
|
6
|
+
* Tier 2: Owner key (value < 1 ETH)
|
|
7
|
+
* Tier 3: Device + Guardian (value < 10 ETH)
|
|
8
|
+
* Tier 4: Multi-sig + Timelock (account management OR value >= 10 ETH)
|
|
9
|
+
*/
|
|
10
|
+
/** Tier thresholds in wei */
|
|
11
|
+
const TIER_THRESHOLDS = {
|
|
12
|
+
TIER_1_MAX: 10000000000000000n, // 0.01 ETH
|
|
13
|
+
TIER_2_MAX: 1000000000000000000n, // 1 ETH
|
|
14
|
+
TIER_3_MAX: 10000000000000000000n, // 10 ETH
|
|
15
|
+
};
|
|
16
|
+
/** Account management selectors that always require Tier 4 */
|
|
17
|
+
const TIER_4_SELECTORS = new Set([
|
|
18
|
+
'0xf2fde38b', // transferOwnership(address)
|
|
19
|
+
'0x79ba5097', // acceptOwnership()
|
|
20
|
+
'0x3659cfe6', // upgradeTo(address)
|
|
21
|
+
'0x4f1ef286', // upgradeToAndCall(address,bytes)
|
|
22
|
+
]);
|
|
23
|
+
/**
|
|
24
|
+
* Automatically selects the appropriate auth tier based on
|
|
25
|
+
* transaction value, target, and active session key permissions.
|
|
26
|
+
*/
|
|
27
|
+
export class TierSelector {
|
|
28
|
+
/**
|
|
29
|
+
* Determine the required auth tier for a transaction.
|
|
30
|
+
*
|
|
31
|
+
* @param value - Transaction value in wei
|
|
32
|
+
* @param target - Target contract address
|
|
33
|
+
* @param selector - Function selector (first 4 bytes of callData)
|
|
34
|
+
* @param activeSessionPermissions - Permissions of any active session key
|
|
35
|
+
* @returns The required auth tier
|
|
36
|
+
*/
|
|
37
|
+
static select(params) {
|
|
38
|
+
const { value, target, selector, activeSessionPermissions } = params;
|
|
39
|
+
// Tier 4: Account management operations always
|
|
40
|
+
if (selector && TIER_4_SELECTORS.has(selector.slice(0, 10).toLowerCase())) {
|
|
41
|
+
return 4;
|
|
42
|
+
}
|
|
43
|
+
// Tier 4: Very high value (>= 10 ETH)
|
|
44
|
+
if (value >= TIER_THRESHOLDS.TIER_3_MAX) {
|
|
45
|
+
return 4;
|
|
46
|
+
}
|
|
47
|
+
// Tier 3: High value (< 10 ETH, >= 1 ETH)
|
|
48
|
+
if (value >= TIER_THRESHOLDS.TIER_2_MAX) {
|
|
49
|
+
return 3;
|
|
50
|
+
}
|
|
51
|
+
// Tier 2: Medium value (< 1 ETH, >= 0.01 ETH)
|
|
52
|
+
if (value >= TIER_THRESHOLDS.TIER_1_MAX) {
|
|
53
|
+
return 2;
|
|
54
|
+
}
|
|
55
|
+
// Tier 1: Low value + target in session allowlist
|
|
56
|
+
if (activeSessionPermissions && target && selector) {
|
|
57
|
+
const isAllowed = activeSessionPermissions.allowlist.some((entry) => entry.target.toLowerCase() === target.toLowerCase() &&
|
|
58
|
+
(entry.selector === '0xffffffff' || entry.selector.toLowerCase() === selector.slice(0, 10).toLowerCase()));
|
|
59
|
+
if (isAllowed)
|
|
60
|
+
return 1;
|
|
61
|
+
}
|
|
62
|
+
// Default to Tier 2 for low-value without active session
|
|
63
|
+
return 2;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=tiers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiers.js","sourceRoot":"","sources":["../../src/mfa/tiers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,6BAA6B;AAC7B,MAAM,eAAe,GAAG;IACtB,UAAU,EAAE,kBAAuB,EAAQ,WAAW;IACtD,UAAU,EAAE,oBAA0B,EAAM,QAAQ;IACpD,UAAU,EAAE,qBAA2B,EAAK,SAAS;CACtD,CAAC;AAEF,8DAA8D;AAC9D,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAS;IACvC,YAAY,EAAE,6BAA6B;IAC3C,YAAY,EAAE,oBAAoB;IAClC,YAAY,EAAE,qBAAqB;IACnC,YAAY,EAAE,kCAAkC;CACjD,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,OAAO,YAAY;IACvB;;;;;;;;OAQG;IACH,MAAM,CAAC,MAAM,CAAC,MAKb;QACC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,wBAAwB,EAAE,GAAG,MAAM,CAAC;QAErE,+CAA+C;QAC/C,IAAI,QAAQ,IAAI,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YAC1E,OAAO,CAAC,CAAC;QACX,CAAC;QAED,sCAAsC;QACtC,IAAI,KAAK,IAAI,eAAe,CAAC,UAAU,EAAE,CAAC;YACxC,OAAO,CAAC,CAAC;QACX,CAAC;QAED,0CAA0C;QAC1C,IAAI,KAAK,IAAI,eAAe,CAAC,UAAU,EAAE,CAAC;YACxC,OAAO,CAAC,CAAC;QACX,CAAC;QAED,8CAA8C;QAC9C,IAAI,KAAK,IAAI,eAAe,CAAC,UAAU,EAAE,CAAC;YACxC,OAAO,CAAC,CAAC;QACX,CAAC;QAED,kDAAkD;QAClD,IAAI,wBAAwB,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;YACnD,MAAM,SAAS,GAAG,wBAAwB,CAAC,SAAS,CAAC,IAAI,CACvD,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,WAAW,EAAE;gBACnD,CAAC,KAAK,CAAC,QAAQ,KAAK,YAAY,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAC5G,CAAC;YACF,IAAI,SAAS;gBAAE,OAAO,CAAC,CAAC;QAC1B,CAAC;QAED,yDAAyD;QACzD,OAAO,CAAC,CAAC;IACX,CAAC;CACF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timelock operations for high-value MFA (Tier 4).
|
|
3
|
+
* Corresponds to SPEC-013 Section 8.3.
|
|
4
|
+
*/
|
|
5
|
+
import type { Address, TimelockOperation, CallRequest } from '../types.js';
|
|
6
|
+
import { ApiClient } from '../transport/api.js';
|
|
7
|
+
/**
|
|
8
|
+
* Manages timelocked operations that require a delay before execution.
|
|
9
|
+
* Used for Tier 4 operations (account management, high-value transfers).
|
|
10
|
+
*/
|
|
11
|
+
export declare class TimelockManager {
|
|
12
|
+
private readonly api;
|
|
13
|
+
constructor(api: ApiClient);
|
|
14
|
+
/**
|
|
15
|
+
* Propose a timelocked operation (multi-sig + delay).
|
|
16
|
+
* The operation can only be executed after the timelock expires.
|
|
17
|
+
*/
|
|
18
|
+
proposeWithTimelock(call: CallRequest, timelockDelay: number): Promise<TimelockOperation>;
|
|
19
|
+
/**
|
|
20
|
+
* Execute a timelocked operation after the delay has passed.
|
|
21
|
+
*/
|
|
22
|
+
executeTimelocked(operationId: string): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Cancel a pending timelocked operation (owner only).
|
|
25
|
+
*/
|
|
26
|
+
cancelTimelocked(operationId: string): Promise<void>;
|
|
27
|
+
/** Get the status of a timelocked operation */
|
|
28
|
+
getStatus(operationId: string): Promise<TimelockOperation>;
|
|
29
|
+
/** List all pending timelocked operations for a wallet */
|
|
30
|
+
listPending(walletAddress: Address): Promise<TimelockOperation[]>;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=timelock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timelock.d.ts","sourceRoot":"","sources":["../../src/mfa/timelock.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAO,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD;;;GAGG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,SAAS;IAE3C;;;OAGG;IACG,mBAAmB,CACvB,IAAI,EAAE,WAAW,EACjB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,iBAAiB,CAAC;IAS7B;;OAEG;IACG,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D;;OAEG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D,+CAA+C;IACzC,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIhE,0DAA0D;IACpD,WAAW,CAAC,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;CAGxE"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timelock operations for high-value MFA (Tier 4).
|
|
3
|
+
* Corresponds to SPEC-013 Section 8.3.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Manages timelocked operations that require a delay before execution.
|
|
7
|
+
* Used for Tier 4 operations (account management, high-value transfers).
|
|
8
|
+
*/
|
|
9
|
+
export class TimelockManager {
|
|
10
|
+
api;
|
|
11
|
+
constructor(api) {
|
|
12
|
+
this.api = api;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Propose a timelocked operation (multi-sig + delay).
|
|
16
|
+
* The operation can only be executed after the timelock expires.
|
|
17
|
+
*/
|
|
18
|
+
async proposeWithTimelock(call, timelockDelay) {
|
|
19
|
+
return this.api.post('/mfa/timelock/propose', {
|
|
20
|
+
target: call.target,
|
|
21
|
+
value: call.value.toString(),
|
|
22
|
+
data: call.data,
|
|
23
|
+
timelockDelay,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Execute a timelocked operation after the delay has passed.
|
|
28
|
+
*/
|
|
29
|
+
async executeTimelocked(operationId) {
|
|
30
|
+
await this.api.post(`/mfa/timelock/${operationId}/execute`, {});
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Cancel a pending timelocked operation (owner only).
|
|
34
|
+
*/
|
|
35
|
+
async cancelTimelocked(operationId) {
|
|
36
|
+
await this.api.post(`/mfa/timelock/${operationId}/cancel`, {});
|
|
37
|
+
}
|
|
38
|
+
/** Get the status of a timelocked operation */
|
|
39
|
+
async getStatus(operationId) {
|
|
40
|
+
return this.api.get(`/mfa/timelock/${operationId}`);
|
|
41
|
+
}
|
|
42
|
+
/** List all pending timelocked operations for a wallet */
|
|
43
|
+
async listPending(walletAddress) {
|
|
44
|
+
return this.api.get('/mfa/timelock', { wallet: walletAddress });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=timelock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timelock.js","sourceRoot":"","sources":["../../src/mfa/timelock.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;;GAGG;AACH,MAAM,OAAO,eAAe;IACG;IAA7B,YAA6B,GAAc;QAAd,QAAG,GAAH,GAAG,CAAW;IAAG,CAAC;IAE/C;;;OAGG;IACH,KAAK,CAAC,mBAAmB,CACvB,IAAiB,EACjB,aAAqB;QAErB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAoB,uBAAuB,EAAE;YAC/D,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,aAAa;SACd,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,WAAmB;QACzC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,WAAW,UAAU,EAAE,EAAE,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,WAAmB;QACxC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,WAAW,SAAS,EAAE,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,+CAA+C;IAC/C,KAAK,CAAC,SAAS,CAAC,WAAmB;QACjC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAoB,iBAAiB,WAAW,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,0DAA0D;IAC1D,KAAK,CAAC,WAAW,CAAC,aAAsB;QACtC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAsB,eAAe,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IACvF,CAAC;CACF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-device management.
|
|
3
|
+
* Corresponds to SPEC-013 Section 10.3.
|
|
4
|
+
*/
|
|
5
|
+
import type { Address, DeviceInfo } from '../types.js';
|
|
6
|
+
import { ApiClient } from '../transport/api.js';
|
|
7
|
+
/**
|
|
8
|
+
* Device management module.
|
|
9
|
+
* Add/remove devices (passkeys) as validation modules on the smart account.
|
|
10
|
+
*/
|
|
11
|
+
export declare class DeviceManager {
|
|
12
|
+
private readonly api;
|
|
13
|
+
constructor(api: ApiClient);
|
|
14
|
+
/**
|
|
15
|
+
* Add a new device (e.g., passkey on phone).
|
|
16
|
+
* Prompts passkey creation, installs WebAuthn validation module on-chain.
|
|
17
|
+
*/
|
|
18
|
+
addDevice(params: {
|
|
19
|
+
name: string;
|
|
20
|
+
type: 'passkey' | 'turnkey';
|
|
21
|
+
moduleId: number;
|
|
22
|
+
}): Promise<DeviceInfo>;
|
|
23
|
+
/** List all registered devices for a wallet */
|
|
24
|
+
listDevices(walletAddress: Address): Promise<DeviceInfo[]>;
|
|
25
|
+
/**
|
|
26
|
+
* Remove a lost device (from any remaining device).
|
|
27
|
+
* Uninstalls the validation module -- device can no longer sign.
|
|
28
|
+
*/
|
|
29
|
+
removeDevice(moduleId: number): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=devices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devices.d.ts","sourceRoot":"","sources":["../../src/recovery/devices.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD;;;GAGG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,SAAS;IAE3C;;;OAGG;IACG,SAAS,CAAC,MAAM,EAAE;QACtB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;QAC5B,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,UAAU,CAAC;IAIvB,+CAA+C;IACzC,WAAW,CAAC,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAIhE;;;OAGG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGpD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-device management.
|
|
3
|
+
* Corresponds to SPEC-013 Section 10.3.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Device management module.
|
|
7
|
+
* Add/remove devices (passkeys) as validation modules on the smart account.
|
|
8
|
+
*/
|
|
9
|
+
export class DeviceManager {
|
|
10
|
+
api;
|
|
11
|
+
constructor(api) {
|
|
12
|
+
this.api = api;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Add a new device (e.g., passkey on phone).
|
|
16
|
+
* Prompts passkey creation, installs WebAuthn validation module on-chain.
|
|
17
|
+
*/
|
|
18
|
+
async addDevice(params) {
|
|
19
|
+
return this.api.post('/recovery/devices', params);
|
|
20
|
+
}
|
|
21
|
+
/** List all registered devices for a wallet */
|
|
22
|
+
async listDevices(walletAddress) {
|
|
23
|
+
return this.api.get('/recovery/devices', { wallet: walletAddress });
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Remove a lost device (from any remaining device).
|
|
27
|
+
* Uninstalls the validation module -- device can no longer sign.
|
|
28
|
+
*/
|
|
29
|
+
async removeDevice(moduleId) {
|
|
30
|
+
await this.api.delete(`/recovery/devices/${moduleId}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=devices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devices.js","sourceRoot":"","sources":["../../src/recovery/devices.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;;GAGG;AACH,MAAM,OAAO,aAAa;IACK;IAA7B,YAA6B,GAAc;QAAd,QAAG,GAAH,GAAG,CAAW;IAAG,CAAC;IAE/C;;;OAGG;IACH,KAAK,CAAC,SAAS,CAAC,MAIf;QACC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAa,mBAAmB,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC;IAED,+CAA+C;IAC/C,KAAK,CAAC,WAAW,CAAC,aAAsB;QACtC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAe,mBAAmB,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IACpF,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY,CAAC,QAAgB;QACjC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;IACzD,CAAC;CACF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Key export from Turnkey enclave.
|
|
3
|
+
* Corresponds to SPEC-013 Section 10.4.
|
|
4
|
+
*
|
|
5
|
+
* Non-custodial guarantee: user can always export their private key,
|
|
6
|
+
* even if the app backend is down.
|
|
7
|
+
*/
|
|
8
|
+
import type { KeyExportResult } from '../types.js';
|
|
9
|
+
import { ApiClient } from '../transport/api.js';
|
|
10
|
+
import { IframeBridge } from '../transport/iframe.js';
|
|
11
|
+
/**
|
|
12
|
+
* Key export module.
|
|
13
|
+
* Exports private keys from the Turnkey enclave via the signer iframe.
|
|
14
|
+
*/
|
|
15
|
+
export declare class KeyExport {
|
|
16
|
+
private readonly api;
|
|
17
|
+
private readonly iframe;
|
|
18
|
+
constructor(api: ApiClient, iframe: IframeBridge | null);
|
|
19
|
+
/**
|
|
20
|
+
* Export the private key from the Turnkey enclave.
|
|
21
|
+
*
|
|
22
|
+
* Process:
|
|
23
|
+
* 1. SDK generates one-time keypair in browser
|
|
24
|
+
* 2. Sends public key to Turnkey enclave (via iframe)
|
|
25
|
+
* 3. Enclave encrypts user's key, returns blob
|
|
26
|
+
* 4. SDK decrypts locally
|
|
27
|
+
* 5. Returns raw private key
|
|
28
|
+
*
|
|
29
|
+
* Works even if the app backend is down (direct Turnkey communication).
|
|
30
|
+
*/
|
|
31
|
+
exportKey(): Promise<KeyExportResult>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/recovery/export.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD;;;GAGG;AACH,qBAAa,SAAS;IAElB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,YAAY,GAAG,IAAI;IAG9C;;;;;;;;;;;OAWG;IACG,SAAS,IAAI,OAAO,CAAC,eAAe,CAAC;CAa5C"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Key export from Turnkey enclave.
|
|
3
|
+
* Corresponds to SPEC-013 Section 10.4.
|
|
4
|
+
*
|
|
5
|
+
* Non-custodial guarantee: user can always export their private key,
|
|
6
|
+
* even if the app backend is down.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Key export module.
|
|
10
|
+
* Exports private keys from the Turnkey enclave via the signer iframe.
|
|
11
|
+
*/
|
|
12
|
+
export class KeyExport {
|
|
13
|
+
api;
|
|
14
|
+
iframe;
|
|
15
|
+
constructor(api, iframe) {
|
|
16
|
+
this.api = api;
|
|
17
|
+
this.iframe = iframe;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Export the private key from the Turnkey enclave.
|
|
21
|
+
*
|
|
22
|
+
* Process:
|
|
23
|
+
* 1. SDK generates one-time keypair in browser
|
|
24
|
+
* 2. Sends public key to Turnkey enclave (via iframe)
|
|
25
|
+
* 3. Enclave encrypts user's key, returns blob
|
|
26
|
+
* 4. SDK decrypts locally
|
|
27
|
+
* 5. Returns raw private key
|
|
28
|
+
*
|
|
29
|
+
* Works even if the app backend is down (direct Turnkey communication).
|
|
30
|
+
*/
|
|
31
|
+
async exportKey() {
|
|
32
|
+
if (this.iframe) {
|
|
33
|
+
const privateKey = await this.iframe.exportKey();
|
|
34
|
+
return {
|
|
35
|
+
privateKey,
|
|
36
|
+
address: '0x0000000000000000000000000000000000000000', // Will be resolved by iframe
|
|
37
|
+
warning: 'Store this securely. Anyone with this key can sign for your wallet.',
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
// Fallback: request via API
|
|
41
|
+
return this.api.post('/recovery/export', {});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/recovery/export.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;;GAGG;AACH,MAAM,OAAO,SAAS;IAED;IACA;IAFnB,YACmB,GAAc,EACd,MAA2B;QAD3B,QAAG,GAAH,GAAG,CAAW;QACd,WAAM,GAAN,MAAM,CAAqB;IAC3C,CAAC;IAEJ;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,SAAS;QACb,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACjD,OAAO;gBACL,UAAU;gBACV,OAAO,EAAE,4CAA4C,EAAE,6BAA6B;gBACpF,OAAO,EAAE,qEAAqE;aAC/E,CAAC;QACJ,CAAC;QAED,4BAA4B;QAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAkB,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAChE,CAAC;CACF"}
|