@abbababa/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.
Files changed (70) hide show
  1. package/README.md +90 -0
  2. package/dist/buyer.d.ts +78 -0
  3. package/dist/buyer.d.ts.map +1 -0
  4. package/dist/buyer.js +146 -0
  5. package/dist/buyer.js.map +1 -0
  6. package/dist/checkout.d.ts +8 -0
  7. package/dist/checkout.d.ts.map +1 -0
  8. package/dist/checkout.js +10 -0
  9. package/dist/checkout.js.map +1 -0
  10. package/dist/client.d.ts +21 -0
  11. package/dist/client.d.ts.map +1 -0
  12. package/dist/client.js +103 -0
  13. package/dist/client.js.map +1 -0
  14. package/dist/errors.d.ts +22 -0
  15. package/dist/errors.d.ts.map +1 -0
  16. package/dist/errors.js +43 -0
  17. package/dist/errors.js.map +1 -0
  18. package/dist/index.d.ts +12 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +16 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/register.d.ts +21 -0
  23. package/dist/register.d.ts.map +1 -0
  24. package/dist/register.js +37 -0
  25. package/dist/register.js.map +1 -0
  26. package/dist/seller.d.ts +20 -0
  27. package/dist/seller.d.ts.map +1 -0
  28. package/dist/seller.js +62 -0
  29. package/dist/seller.js.map +1 -0
  30. package/dist/services.d.ts +14 -0
  31. package/dist/services.d.ts.map +1 -0
  32. package/dist/services.js +39 -0
  33. package/dist/services.js.map +1 -0
  34. package/dist/transactions.d.ts +14 -0
  35. package/dist/transactions.d.ts.map +1 -0
  36. package/dist/transactions.js +35 -0
  37. package/dist/transactions.js.map +1 -0
  38. package/dist/types.d.ts +276 -0
  39. package/dist/types.d.ts.map +1 -0
  40. package/dist/types.js +5 -0
  41. package/dist/types.js.map +1 -0
  42. package/dist/wallet/abi.d.ts +265 -0
  43. package/dist/wallet/abi.d.ts.map +1 -0
  44. package/dist/wallet/abi.js +181 -0
  45. package/dist/wallet/abi.js.map +1 -0
  46. package/dist/wallet/constants.d.ts +29 -0
  47. package/dist/wallet/constants.d.ts.map +1 -0
  48. package/dist/wallet/constants.js +81 -0
  49. package/dist/wallet/constants.js.map +1 -0
  50. package/dist/wallet/escrow.d.ts +45 -0
  51. package/dist/wallet/escrow.d.ts.map +1 -0
  52. package/dist/wallet/escrow.js +184 -0
  53. package/dist/wallet/escrow.js.map +1 -0
  54. package/dist/wallet/index.d.ts +6 -0
  55. package/dist/wallet/index.d.ts.map +1 -0
  56. package/dist/wallet/index.js +17 -0
  57. package/dist/wallet/index.js.map +1 -0
  58. package/dist/wallet/session-keys.d.ts +58 -0
  59. package/dist/wallet/session-keys.d.ts.map +1 -0
  60. package/dist/wallet/session-keys.js +313 -0
  61. package/dist/wallet/session-keys.js.map +1 -0
  62. package/dist/wallet/smart-account.d.ts +30 -0
  63. package/dist/wallet/smart-account.d.ts.map +1 -0
  64. package/dist/wallet/smart-account.js +126 -0
  65. package/dist/wallet/smart-account.js.map +1 -0
  66. package/dist/webhook.d.ts +15 -0
  67. package/dist/webhook.d.ts.map +1 -0
  68. package/dist/webhook.js +62 -0
  69. package/dist/webhook.js.map +1 -0
  70. package/package.json +71 -0
@@ -0,0 +1,184 @@
1
+ import { encodeFunctionData, keccak256, toBytes, createPublicClient, http, } from 'viem';
2
+ import { polygonAmoy, polygon, baseSepolia, base } from 'viem/chains';
3
+ import { SERVICE_ESCROW_V2_ABI, SERVICE_ESCROW_V3_ABI, ERC20_ABI } from './abi.js';
4
+ import { ESCROW_ADDRESSES, ESCROW_V2_ADDRESSES, USDC_ADDRESSES, POLYGON_AMOY_CHAIN_ID, POLYGON_MAINNET_CHAIN_ID, BASE_SEPOLIA_CHAIN_ID, BASE_MAINNET_CHAIN_ID, } from './constants.js';
5
+ const CHAINS = {
6
+ [POLYGON_AMOY_CHAIN_ID]: polygonAmoy,
7
+ [POLYGON_MAINNET_CHAIN_ID]: polygon,
8
+ [BASE_SEPOLIA_CHAIN_ID]: baseSepolia,
9
+ [BASE_MAINNET_CHAIN_ID]: base,
10
+ };
11
+ /**
12
+ * Client for interacting with the ServiceEscrow smart contracts.
13
+ * Supports V3 (multi-token) with automatic fallback to V2 (USDC only).
14
+ * Uses a ZeroDev Kernel account client for sending UserOperations.
15
+ */
16
+ export class EscrowClient {
17
+ kernelClient;
18
+ chainId;
19
+ escrowAddress;
20
+ escrowVersion;
21
+ tokenAddress;
22
+ tokenDecimals;
23
+ constructor(kernelClient, token, chainId = BASE_SEPOLIA_CHAIN_ID) {
24
+ this.kernelClient = kernelClient;
25
+ this.chainId = chainId;
26
+ // Resolve token (default USDC for backward compat)
27
+ if (token) {
28
+ this.tokenAddress = token.address;
29
+ this.tokenDecimals = token.decimals;
30
+ }
31
+ else {
32
+ const usdc = USDC_ADDRESSES[chainId];
33
+ if (!usdc)
34
+ throw new Error(`No USDC address for chain ${chainId}`);
35
+ this.tokenAddress = usdc;
36
+ this.tokenDecimals = 6;
37
+ }
38
+ // Try V3 first, fall back to V2
39
+ const v3 = ESCROW_ADDRESSES[chainId];
40
+ const v2 = ESCROW_V2_ADDRESSES[chainId];
41
+ if (v3) {
42
+ this.escrowAddress = v3;
43
+ this.escrowVersion = 3;
44
+ }
45
+ else if (v2) {
46
+ this.escrowAddress = v2;
47
+ this.escrowVersion = 2;
48
+ }
49
+ else {
50
+ throw new Error(`No escrow contract for chain ${chainId}`);
51
+ }
52
+ }
53
+ /**
54
+ * Convert a platform transaction ID (CUID string) to a bytes32 escrow ID.
55
+ * Uses keccak256, matching the existing backend pattern in escrow.ts (ethers.id).
56
+ */
57
+ static toEscrowId(transactionId) {
58
+ return keccak256(toBytes(transactionId));
59
+ }
60
+ /**
61
+ * Approve the escrow contract to spend the settlement token on behalf of the smart account.
62
+ * Must be called before fundEscrow.
63
+ */
64
+ async approveToken(amount) {
65
+ // Buyer fee is 1% (100 bps). Approve the total: amount + 1% fee
66
+ const buyerFee = (amount * 100n) / 10000n;
67
+ const totalApproval = amount + buyerFee;
68
+ const data = encodeFunctionData({
69
+ abi: ERC20_ABI,
70
+ functionName: 'approve',
71
+ args: [this.escrowAddress, totalApproval],
72
+ });
73
+ const txHash = await this.kernelClient.sendTransaction({
74
+ to: this.tokenAddress,
75
+ data,
76
+ });
77
+ return txHash;
78
+ }
79
+ /** @deprecated Use approveToken() instead. */
80
+ async approveUSDC(amount) {
81
+ return this.approveToken(amount);
82
+ }
83
+ /**
84
+ * Fund an escrow. Calls createEscrow on the escrow contract.
85
+ * V3: passes token address as 4th argument.
86
+ * V2 fallback: USDC only (3 arguments).
87
+ * The contract will safeTransferFrom the token (amount + 1% buyer fee) from the caller.
88
+ */
89
+ async fundEscrow(transactionId, sellerAddress, amount) {
90
+ const escrowId = EscrowClient.toEscrowId(transactionId);
91
+ let data;
92
+ if (this.escrowVersion === 3) {
93
+ data = encodeFunctionData({
94
+ abi: SERVICE_ESCROW_V3_ABI,
95
+ functionName: 'createEscrow',
96
+ args: [escrowId, sellerAddress, amount, this.tokenAddress],
97
+ });
98
+ }
99
+ else {
100
+ data = encodeFunctionData({
101
+ abi: SERVICE_ESCROW_V2_ABI,
102
+ functionName: 'createEscrow',
103
+ args: [escrowId, sellerAddress, amount],
104
+ });
105
+ }
106
+ const txHash = await this.kernelClient.sendTransaction({
107
+ to: this.escrowAddress,
108
+ data,
109
+ });
110
+ return txHash;
111
+ }
112
+ /**
113
+ * Release escrow funds to the seller.
114
+ * Callable by the buyer or an arbitrator.
115
+ */
116
+ async releaseEscrow(transactionId) {
117
+ const escrowId = EscrowClient.toEscrowId(transactionId);
118
+ const abi = this.escrowVersion === 3 ? SERVICE_ESCROW_V3_ABI : SERVICE_ESCROW_V2_ABI;
119
+ const data = encodeFunctionData({
120
+ abi,
121
+ functionName: 'release',
122
+ args: [escrowId],
123
+ });
124
+ const txHash = await this.kernelClient.sendTransaction({
125
+ to: this.escrowAddress,
126
+ data,
127
+ });
128
+ return txHash;
129
+ }
130
+ /**
131
+ * Read escrow details from the contract (view function, no gas needed).
132
+ */
133
+ async getEscrow(transactionId) {
134
+ const escrowId = EscrowClient.toEscrowId(transactionId);
135
+ const viemChain = CHAINS[this.chainId] ?? polygonAmoy;
136
+ const publicClient = createPublicClient({
137
+ chain: viemChain,
138
+ transport: http(),
139
+ });
140
+ if (this.escrowVersion === 3) {
141
+ const result = await publicClient.readContract({
142
+ address: this.escrowAddress,
143
+ abi: SERVICE_ESCROW_V3_ABI,
144
+ functionName: 'getEscrow',
145
+ args: [escrowId],
146
+ });
147
+ const [token, buyer, seller, amount, buyerFee, status, createdAt, expiresAt] = result;
148
+ if (buyer === '0x0000000000000000000000000000000000000000') {
149
+ return null;
150
+ }
151
+ return {
152
+ token,
153
+ buyer,
154
+ seller,
155
+ amount,
156
+ buyerFee,
157
+ status,
158
+ createdAt: Number(createdAt),
159
+ expiresAt: Number(expiresAt),
160
+ };
161
+ }
162
+ // V2 fallback
163
+ const result = await publicClient.readContract({
164
+ address: this.escrowAddress,
165
+ abi: SERVICE_ESCROW_V2_ABI,
166
+ functionName: 'getEscrow',
167
+ args: [escrowId],
168
+ });
169
+ const [buyer, seller, amount, buyerFee, status, createdAt, expiresAt] = result;
170
+ if (buyer === '0x0000000000000000000000000000000000000000') {
171
+ return null;
172
+ }
173
+ return {
174
+ buyer,
175
+ seller,
176
+ amount,
177
+ buyerFee,
178
+ status,
179
+ createdAt: Number(createdAt),
180
+ expiresAt: Number(expiresAt),
181
+ };
182
+ }
183
+ }
184
+ //# sourceMappingURL=escrow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escrow.js","sourceRoot":"","sources":["../../src/wallet/escrow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { createSmartAccount, buildKernelClient } from './smart-account.js';
2
+ export { EscrowClient } from './escrow.js';
3
+ export { generateSessionKey, useSessionKey, revokeSessionKey, buildEscrowPolicies, } from './session-keys.js';
4
+ export { ESCROW_ADDRESSES, ESCROW_V2_ADDRESSES, TOKEN_REGISTRY, getToken, getTokensByTier, isTokenSupported, USDC_ADDRESSES, USDC_DECIMALS, POLYGON_AMOY_CHAIN_ID, POLYGON_MAINNET_CHAIN_ID, MIN_GAS_BALANCE, } from './constants.js';
5
+ export type { TokenInfo } from './constants.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wallet/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAEL,gBAAgB,EAEhB,mBAAmB,EAEnB,cAAc,EACd,QAAQ,EACR,eAAe,EACf,gBAAgB,EAEhB,cAAc,EACd,aAAa,EAEb,qBAAqB,EACrB,wBAAwB,EAExB,eAAe,GAChB,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,17 @@
1
+ export { createSmartAccount, buildKernelClient } from './smart-account.js';
2
+ export { EscrowClient } from './escrow.js';
3
+ export { generateSessionKey, useSessionKey, revokeSessionKey, buildEscrowPolicies, } from './session-keys.js';
4
+ export {
5
+ // V3 multi-token escrow
6
+ ESCROW_ADDRESSES,
7
+ // V2 legacy (single-token USDC)
8
+ ESCROW_V2_ADDRESSES,
9
+ // Token registry
10
+ TOKEN_REGISTRY, getToken, getTokensByTier, isTokenSupported,
11
+ // Legacy compat (deprecated)
12
+ USDC_ADDRESSES, USDC_DECIMALS,
13
+ // Chain IDs
14
+ POLYGON_AMOY_CHAIN_ID, POLYGON_MAINNET_CHAIN_ID,
15
+ // Gas
16
+ MIN_GAS_BALANCE, } from './constants.js';
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wallet/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO;AACL,wBAAwB;AACxB,gBAAgB;AAChB,gCAAgC;AAChC,mBAAmB;AACnB,iBAAiB;AACjB,cAAc,EACd,QAAQ,EACR,eAAe,EACf,gBAAgB;AAChB,6BAA6B;AAC7B,cAAc,EACd,aAAa;AACb,YAAY;AACZ,qBAAqB,EACrB,wBAAwB;AACxB,MAAM;AACN,eAAe,GAChB,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,58 @@
1
+ import type { SessionKeyConfig, SessionKeyResult, UseSessionKeyConfig, RevokeSessionKeyConfig, SmartAccountResult } from '../types.js';
2
+ /**
3
+ * Build escrow-scoped policies for a session key.
4
+ *
5
+ * Creates a CallPolicy restricted to escrow operations:
6
+ * 1. ERC20.approve for each allowed token (spender must equal escrow contract)
7
+ * 2. Escrow.createEscrow (V3 with token param, or V2 fallback)
8
+ * 3. Escrow.release
9
+ *
10
+ * Plus a TimestampPolicy for time-bound expiration.
11
+ *
12
+ * @param config.tokens - Token symbols to allow (default: all tokens in registry for chain)
13
+ *
14
+ * Requires @zerodev/permissions as a peer dependency.
15
+ */
16
+ export declare function buildEscrowPolicies(config: {
17
+ chainId?: number;
18
+ validitySeconds?: number;
19
+ tokens?: string[];
20
+ }): Promise<unknown[]>;
21
+ /**
22
+ * Generate a scoped session key for an agent (owner operation).
23
+ *
24
+ * The owner calls this with their private key. A random session key is generated,
25
+ * scoped to escrow operations via CallPolicy + TimestampPolicy, and serialized
26
+ * into a single string that can be passed to the agent.
27
+ *
28
+ * Requires peer dependencies:
29
+ * - @zerodev/sdk
30
+ * - @zerodev/ecdsa-validator
31
+ * - @zerodev/permissions
32
+ */
33
+ export declare function generateSessionKey(config: SessionKeyConfig): Promise<SessionKeyResult>;
34
+ /**
35
+ * Use a serialized session key to get a working kernel client (agent operation).
36
+ *
37
+ * The agent calls this with the serialized string received from the owner.
38
+ * No owner private key is needed — the session key was embedded during serialization.
39
+ * The resulting kernel client can only perform actions allowed by the session's policies.
40
+ *
41
+ * Requires peer dependencies:
42
+ * - @zerodev/sdk
43
+ * - @zerodev/permissions
44
+ */
45
+ export declare function useSessionKey(config: UseSessionKeyConfig): Promise<SmartAccountResult>;
46
+ /**
47
+ * Revoke a session key on-chain (owner operation).
48
+ *
49
+ * The owner calls this with their private key and the serialized session key
50
+ * to reconstruct and uninstall the permission plugin from the Kernel account.
51
+ *
52
+ * Requires peer dependencies:
53
+ * - @zerodev/sdk
54
+ * - @zerodev/ecdsa-validator
55
+ * - @zerodev/permissions
56
+ */
57
+ export declare function revokeSessionKey(config: RevokeSessionKeyConfig): Promise<string>;
58
+ //# sourceMappingURL=session-keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-keys.d.ts","sourceRoot":"","sources":["../../src/wallet/session-keys.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAEnB,MAAM,aAAa,CAAA;AASpB;;;;;;;;;;;;;GAaG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE;IAChD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CA6FrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,gBAAgB,CAAC,CA2F3B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,kBAAkB,CAAC,CA0D7B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAgFjB"}
@@ -0,0 +1,313 @@
1
+ import { createPublicClient, http, } from 'viem';
2
+ import { polygonAmoy, polygon } from 'viem/chains';
3
+ import { SERVICE_ESCROW_V2_ABI, SERVICE_ESCROW_V3_ABI, ERC20_ABI } from './abi.js';
4
+ import { ESCROW_ADDRESSES, ESCROW_V2_ADDRESSES, USDC_ADDRESSES, POLYGON_AMOY_CHAIN_ID, ZERODEV_BUNDLER_URL, ZERODEV_PAYMASTER_URL, MIN_GAS_BALANCE, TOKEN_REGISTRY, } from './constants.js';
5
+ import { buildKernelClient } from './smart-account.js';
6
+ const CHAINS = {
7
+ polygon,
8
+ polygonAmoy,
9
+ };
10
+ const DEFAULT_VALIDITY_SECONDS = 86400; // 24 hours
11
+ /**
12
+ * Build escrow-scoped policies for a session key.
13
+ *
14
+ * Creates a CallPolicy restricted to escrow operations:
15
+ * 1. ERC20.approve for each allowed token (spender must equal escrow contract)
16
+ * 2. Escrow.createEscrow (V3 with token param, or V2 fallback)
17
+ * 3. Escrow.release
18
+ *
19
+ * Plus a TimestampPolicy for time-bound expiration.
20
+ *
21
+ * @param config.tokens - Token symbols to allow (default: all tokens in registry for chain)
22
+ *
23
+ * Requires @zerodev/permissions as a peer dependency.
24
+ */
25
+ export async function buildEscrowPolicies(config) {
26
+ const chainId = config.chainId ?? POLYGON_AMOY_CHAIN_ID;
27
+ const validitySeconds = config.validitySeconds ?? DEFAULT_VALIDITY_SECONDS;
28
+ const { toCallPolicy, CallPolicyVersion, ParamCondition } = await import('@zerodev/permissions/policies');
29
+ const { toTimestampPolicy } = await import('@zerodev/permissions/policies');
30
+ // Resolve escrow contract (V3 preferred, V2 fallback)
31
+ const v3Address = ESCROW_ADDRESSES[chainId];
32
+ const v2Address = ESCROW_V2_ADDRESSES[chainId];
33
+ const escrowAddress = v3Address ?? v2Address;
34
+ if (!escrowAddress)
35
+ throw new Error(`No escrow contract for chain ${chainId}`);
36
+ const isV3 = !!v3Address;
37
+ // Resolve tokens to allow
38
+ const registry = TOKEN_REGISTRY[chainId] ?? {};
39
+ const tokenSymbols = config.tokens ?? Object.keys(registry);
40
+ const tokenAddresses = [];
41
+ for (const symbol of tokenSymbols) {
42
+ const info = registry[symbol];
43
+ if (info)
44
+ tokenAddresses.push(info.address);
45
+ }
46
+ // Fallback: if no tokens resolved, use USDC
47
+ if (tokenAddresses.length === 0) {
48
+ const usdc = USDC_ADDRESSES[chainId];
49
+ if (usdc)
50
+ tokenAddresses.push(usdc);
51
+ }
52
+ if (tokenAddresses.length === 0) {
53
+ throw new Error(`No token addresses for chain ${chainId}`);
54
+ }
55
+ // Build permissions: one approve entry per token + escrow operations
56
+ const permissions = [];
57
+ for (const tokenAddr of tokenAddresses) {
58
+ permissions.push({
59
+ target: tokenAddr,
60
+ abi: ERC20_ABI,
61
+ functionName: 'approve',
62
+ args: [
63
+ {
64
+ condition: ParamCondition.EQUAL,
65
+ value: escrowAddress,
66
+ },
67
+ null, // amount — no restriction
68
+ ],
69
+ });
70
+ }
71
+ if (isV3) {
72
+ permissions.push({
73
+ target: escrowAddress,
74
+ abi: SERVICE_ESCROW_V3_ABI,
75
+ functionName: 'createEscrow',
76
+ args: [null, null, null, null], // escrowId, seller, amount, token
77
+ });
78
+ permissions.push({
79
+ target: escrowAddress,
80
+ abi: SERVICE_ESCROW_V3_ABI,
81
+ functionName: 'release',
82
+ args: [null],
83
+ });
84
+ }
85
+ else {
86
+ permissions.push({
87
+ target: escrowAddress,
88
+ abi: SERVICE_ESCROW_V2_ABI,
89
+ functionName: 'createEscrow',
90
+ args: [null, null, null], // escrowId, seller, amount
91
+ });
92
+ permissions.push({
93
+ target: escrowAddress,
94
+ abi: SERVICE_ESCROW_V2_ABI,
95
+ functionName: 'release',
96
+ args: [null],
97
+ });
98
+ }
99
+ const callPolicy = toCallPolicy({
100
+ policyVersion: CallPolicyVersion.V0_0_4,
101
+ permissions,
102
+ });
103
+ const validUntil = Math.floor(Date.now() / 1000) + validitySeconds;
104
+ const timestampPolicy = toTimestampPolicy({
105
+ validUntil,
106
+ });
107
+ return [callPolicy, timestampPolicy];
108
+ }
109
+ /**
110
+ * Generate a scoped session key for an agent (owner operation).
111
+ *
112
+ * The owner calls this with their private key. A random session key is generated,
113
+ * scoped to escrow operations via CallPolicy + TimestampPolicy, and serialized
114
+ * into a single string that can be passed to the agent.
115
+ *
116
+ * Requires peer dependencies:
117
+ * - @zerodev/sdk
118
+ * - @zerodev/ecdsa-validator
119
+ * - @zerodev/permissions
120
+ */
121
+ export async function generateSessionKey(config) {
122
+ // Dynamic imports — optional peer dependencies
123
+ const sdk = await import('@zerodev/sdk');
124
+ const { signerToEcdsaValidator } = await import('@zerodev/ecdsa-validator');
125
+ const { generatePrivateKey, privateKeyToAccount } = await import('viem/accounts');
126
+ const { toPermissionValidator, serializePermissionAccount } = await import('@zerodev/permissions');
127
+ const { toEmptyECDSASigner } = await import('@zerodev/permissions/signers');
128
+ const { createKernelAccount, createZeroDevPaymasterClient, constants, } = sdk;
129
+ const chain = CHAINS[config.chain ?? 'polygonAmoy'];
130
+ if (!chain)
131
+ throw new Error(`Unsupported chain: ${config.chain}`);
132
+ const entryPoint = constants.getEntryPoint('0.7');
133
+ const kernelVersion = constants.KERNEL_V3_1;
134
+ const bundlerUrl = `${ZERODEV_BUNDLER_URL}/${config.zeroDevProjectId}`;
135
+ const paymasterUrl = `${ZERODEV_PAYMASTER_URL}/${config.zeroDevProjectId}`;
136
+ // 1. Public client for chain reads
137
+ const publicClient = createPublicClient({
138
+ chain,
139
+ transport: http(),
140
+ });
141
+ // 2. Create the owner's EOA signer
142
+ const ownerSigner = privateKeyToAccount(config.ownerPrivateKey);
143
+ // 3. Create owner's ECDSA validator (sudo)
144
+ const ecdsaValidator = await signerToEcdsaValidator(publicClient, {
145
+ signer: ownerSigner,
146
+ entryPoint,
147
+ kernelVersion,
148
+ });
149
+ // 4. Generate a random session key
150
+ const sessionPrivateKey = generatePrivateKey();
151
+ const sessionKeyAccount = privateKeyToAccount(sessionPrivateKey);
152
+ // 5. Create an empty ECDSA signer from the session key's address
153
+ // (the owner doesn't need the session private key to authorize it)
154
+ const emptySessionSigner = toEmptyECDSASigner(sessionKeyAccount.address);
155
+ // 6. Build policies (escrow-scoped by default, or custom)
156
+ const chainId = chain.id;
157
+ const policies = config.customPolicies
158
+ ? config.customPolicies
159
+ : await buildEscrowPolicies({
160
+ chainId,
161
+ validitySeconds: config.validitySeconds ?? DEFAULT_VALIDITY_SECONDS,
162
+ });
163
+ // 7. Create permission validator (regular plugin)
164
+ const permissionPlugin = await toPermissionValidator(publicClient, {
165
+ signer: emptySessionSigner,
166
+ policies: policies,
167
+ entryPoint,
168
+ kernelVersion,
169
+ });
170
+ // 8. Create kernel account with sudo (owner) + regular (session key)
171
+ const kernelAccount = await createKernelAccount(publicClient, {
172
+ plugins: {
173
+ sudo: ecdsaValidator,
174
+ regular: permissionPlugin,
175
+ },
176
+ entryPoint,
177
+ kernelVersion,
178
+ });
179
+ // 9. Serialize the account with the session private key embedded
180
+ const serialized = await serializePermissionAccount(kernelAccount, sessionPrivateKey);
181
+ return {
182
+ serializedSessionKey: serialized,
183
+ sessionKeyAddress: sessionKeyAccount.address,
184
+ smartAccountAddress: kernelAccount.address,
185
+ };
186
+ }
187
+ /**
188
+ * Use a serialized session key to get a working kernel client (agent operation).
189
+ *
190
+ * The agent calls this with the serialized string received from the owner.
191
+ * No owner private key is needed — the session key was embedded during serialization.
192
+ * The resulting kernel client can only perform actions allowed by the session's policies.
193
+ *
194
+ * Requires peer dependencies:
195
+ * - @zerodev/sdk
196
+ * - @zerodev/permissions
197
+ */
198
+ export async function useSessionKey(config) {
199
+ const sdk = await import('@zerodev/sdk');
200
+ const { deserializePermissionAccount } = await import('@zerodev/permissions');
201
+ const { constants } = sdk;
202
+ const chain = CHAINS[config.chain ?? 'polygonAmoy'];
203
+ if (!chain)
204
+ throw new Error(`Unsupported chain: ${config.chain}`);
205
+ const entryPoint = constants.getEntryPoint('0.7');
206
+ const kernelVersion = constants.KERNEL_V3_1;
207
+ const bundlerUrl = `${ZERODEV_BUNDLER_URL}/${config.zeroDevProjectId}`;
208
+ const paymasterUrl = `${ZERODEV_PAYMASTER_URL}/${config.zeroDevProjectId}`;
209
+ // 1. Public client
210
+ const publicClient = createPublicClient({
211
+ chain,
212
+ transport: http(),
213
+ });
214
+ // 2. Deserialize the session key account
215
+ // The session private key + policies are embedded in the serialized string
216
+ const sessionKeyAccount = await deserializePermissionAccount(publicClient, entryPoint, kernelVersion, config.serializedSessionKey);
217
+ // 3. Resolve gas strategy
218
+ const strategy = config.gasStrategy ?? 'auto';
219
+ let resolvedStrategy;
220
+ if (strategy === 'auto') {
221
+ const balance = await publicClient.getBalance({
222
+ address: sessionKeyAccount.address,
223
+ });
224
+ resolvedStrategy = balance >= MIN_GAS_BALANCE ? 'self-funded' : 'erc20';
225
+ }
226
+ else {
227
+ resolvedStrategy = strategy;
228
+ }
229
+ // 4. Create kernel client with resolved gas strategy
230
+ const kernelClient = await buildKernelClient({
231
+ account: sessionKeyAccount,
232
+ chain,
233
+ bundlerUrl,
234
+ paymasterUrl,
235
+ gasStrategy: resolvedStrategy,
236
+ });
237
+ return {
238
+ address: sessionKeyAccount.address,
239
+ kernelClient,
240
+ gasStrategy: resolvedStrategy,
241
+ };
242
+ }
243
+ /**
244
+ * Revoke a session key on-chain (owner operation).
245
+ *
246
+ * The owner calls this with their private key and the serialized session key
247
+ * to reconstruct and uninstall the permission plugin from the Kernel account.
248
+ *
249
+ * Requires peer dependencies:
250
+ * - @zerodev/sdk
251
+ * - @zerodev/ecdsa-validator
252
+ * - @zerodev/permissions
253
+ */
254
+ export async function revokeSessionKey(config) {
255
+ const sdk = await import('@zerodev/sdk');
256
+ const { signerToEcdsaValidator } = await import('@zerodev/ecdsa-validator');
257
+ const { privateKeyToAccount } = await import('viem/accounts');
258
+ const { deserializePermissionAccount } = await import('@zerodev/permissions');
259
+ const { createKernelAccount, constants, } = sdk;
260
+ const chain = CHAINS[config.chain ?? 'polygonAmoy'];
261
+ if (!chain)
262
+ throw new Error(`Unsupported chain: ${config.chain}`);
263
+ const entryPoint = constants.getEntryPoint('0.7');
264
+ const kernelVersion = constants.KERNEL_V3_1;
265
+ const bundlerUrl = `${ZERODEV_BUNDLER_URL}/${config.zeroDevProjectId}`;
266
+ const paymasterUrl = `${ZERODEV_PAYMASTER_URL}/${config.zeroDevProjectId}`;
267
+ // 1. Public client
268
+ const publicClient = createPublicClient({
269
+ chain,
270
+ transport: http(),
271
+ });
272
+ // 2. Reconstruct the owner's sudo validator
273
+ const ownerSigner = privateKeyToAccount(config.ownerPrivateKey);
274
+ const ecdsaValidator = await signerToEcdsaValidator(publicClient, {
275
+ signer: ownerSigner,
276
+ entryPoint,
277
+ kernelVersion,
278
+ });
279
+ // 3. Deserialize the session key to get the permission plugin
280
+ const sessionKeyAccount = await deserializePermissionAccount(publicClient, entryPoint, kernelVersion, config.serializedSessionKey);
281
+ // 4. Create the sudo kernel account (owner has full control)
282
+ const sudoAccount = await createKernelAccount(publicClient, {
283
+ plugins: { sudo: ecdsaValidator },
284
+ entryPoint,
285
+ kernelVersion,
286
+ });
287
+ // 5. Resolve gas strategy
288
+ const strategy = config.gasStrategy ?? 'auto';
289
+ let resolvedStrategy;
290
+ if (strategy === 'auto') {
291
+ const balance = await publicClient.getBalance({
292
+ address: sudoAccount.address,
293
+ });
294
+ resolvedStrategy = balance >= MIN_GAS_BALANCE ? 'self-funded' : 'erc20';
295
+ }
296
+ else {
297
+ resolvedStrategy = strategy;
298
+ }
299
+ // 6. Create sudo kernel client with resolved gas strategy
300
+ const sudoClient = await buildKernelClient({
301
+ account: sudoAccount,
302
+ chain,
303
+ bundlerUrl,
304
+ paymasterUrl,
305
+ gasStrategy: resolvedStrategy,
306
+ });
307
+ // 7. Uninstall the permission plugin
308
+ const userOpHash = await sudoClient.uninstallPlugin({
309
+ plugin: sessionKeyAccount,
310
+ });
311
+ return userOpHash;
312
+ }
313
+ //# sourceMappingURL=session-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-keys.js","sourceRoot":"","sources":["../../src/wallet/session-keys.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { type Chain } from 'viem';
2
+ import type { SmartAccountConfig, SmartAccountResult } from '../types.js';
3
+ /**
4
+ * Build a kernel account client with the appropriate gas strategy.
5
+ *
6
+ * Shared by createSmartAccount() and session-keys.ts to avoid duplicating
7
+ * paymaster configuration logic.
8
+ */
9
+ export declare function buildKernelClient(opts: {
10
+ account: unknown;
11
+ chain: Chain;
12
+ bundlerUrl: string;
13
+ paymasterUrl: string;
14
+ gasStrategy: 'self-funded' | 'erc20';
15
+ }): Promise<unknown>;
16
+ /**
17
+ * Create a ZeroDev Kernel smart account (ERC-7579).
18
+ *
19
+ * Gas strategy:
20
+ * - 'self-funded': Agent pays gas with native POL.
21
+ * - 'erc20': Agent pays gas in USDC via ZeroDev's ERC-20 paymaster.
22
+ * - 'auto' (default): Checks POL balance — uses self-funded if >= 0.01 POL,
23
+ * otherwise falls back to ERC-20 paymaster.
24
+ *
25
+ * Requires peer dependencies:
26
+ * - @zerodev/sdk
27
+ * - @zerodev/ecdsa-validator
28
+ */
29
+ export declare function createSmartAccount(config: SmartAccountConfig): Promise<SmartAccountResult>;
30
+ //# sourceMappingURL=smart-account.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smart-account.d.ts","sourceRoot":"","sources":["../../src/wallet/smart-account.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,KAAK,EACX,MAAM,MAAM,CAAA;AAEb,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAe,MAAM,aAAa,CAAA;AAsCtF;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,KAAK,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,aAAa,GAAG,OAAO,CAAA;CACrC,GAAG,OAAO,CAAC,OAAO,CAAC,CAqCnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,kBAAkB,CAAC,CAkE7B"}