@oobe-protocol-labs/synapse-sap-sdk 0.6.3 → 0.7.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 (125) hide show
  1. package/dist/cjs/constants/seeds.js +7 -0
  2. package/dist/cjs/constants/seeds.js.map +1 -1
  3. package/dist/cjs/core/client.js +42 -0
  4. package/dist/cjs/core/client.js.map +1 -1
  5. package/dist/cjs/idl/synapse_agent_sap.json +7545 -3501
  6. package/dist/cjs/index.js +25 -3
  7. package/dist/cjs/index.js.map +1 -1
  8. package/dist/cjs/modules/escrow-v2.js +241 -0
  9. package/dist/cjs/modules/escrow-v2.js.map +1 -0
  10. package/dist/cjs/modules/escrow.js +4 -0
  11. package/dist/cjs/modules/escrow.js.map +1 -1
  12. package/dist/cjs/modules/index.js +7 -1
  13. package/dist/cjs/modules/index.js.map +1 -1
  14. package/dist/cjs/modules/staking.js +94 -0
  15. package/dist/cjs/modules/staking.js.map +1 -0
  16. package/dist/cjs/modules/subscription.js +96 -0
  17. package/dist/cjs/modules/subscription.js.map +1 -0
  18. package/dist/cjs/pda/index.js +143 -1
  19. package/dist/cjs/pda/index.js.map +1 -1
  20. package/dist/cjs/registries/x402.js +88 -51
  21. package/dist/cjs/registries/x402.js.map +1 -1
  22. package/dist/cjs/types/enums.js +51 -1
  23. package/dist/cjs/types/enums.js.map +1 -1
  24. package/dist/cjs/types/index.js +4 -1
  25. package/dist/cjs/types/index.js.map +1 -1
  26. package/dist/cjs/types/instructions.js.map +1 -1
  27. package/dist/cjs/utils/escrow-validation.js +219 -0
  28. package/dist/cjs/utils/escrow-validation.js.map +1 -0
  29. package/dist/cjs/utils/index.js +12 -1
  30. package/dist/cjs/utils/index.js.map +1 -1
  31. package/dist/cjs/utils/merchant-validator.js +246 -0
  32. package/dist/cjs/utils/merchant-validator.js.map +1 -0
  33. package/dist/cjs/utils/x402-direct.js +231 -0
  34. package/dist/cjs/utils/x402-direct.js.map +1 -0
  35. package/dist/esm/constants/seeds.js +7 -0
  36. package/dist/esm/constants/seeds.js.map +1 -1
  37. package/dist/esm/core/client.js +42 -0
  38. package/dist/esm/core/client.js.map +1 -1
  39. package/dist/esm/idl/synapse_agent_sap.json +7545 -3501
  40. package/dist/esm/index.js +5 -3
  41. package/dist/esm/index.js.map +1 -1
  42. package/dist/esm/modules/escrow-v2.js +237 -0
  43. package/dist/esm/modules/escrow-v2.js.map +1 -0
  44. package/dist/esm/modules/escrow.js +4 -0
  45. package/dist/esm/modules/escrow.js.map +1 -1
  46. package/dist/esm/modules/index.js +3 -0
  47. package/dist/esm/modules/index.js.map +1 -1
  48. package/dist/esm/modules/staking.js +90 -0
  49. package/dist/esm/modules/staking.js.map +1 -0
  50. package/dist/esm/modules/subscription.js +92 -0
  51. package/dist/esm/modules/subscription.js.map +1 -0
  52. package/dist/esm/pda/index.js +135 -0
  53. package/dist/esm/pda/index.js.map +1 -1
  54. package/dist/esm/registries/x402.js +89 -52
  55. package/dist/esm/registries/x402.js.map +1 -1
  56. package/dist/esm/types/enums.js +50 -0
  57. package/dist/esm/types/enums.js.map +1 -1
  58. package/dist/esm/types/index.js +1 -1
  59. package/dist/esm/types/index.js.map +1 -1
  60. package/dist/esm/types/instructions.js.map +1 -1
  61. package/dist/esm/utils/escrow-validation.js +212 -0
  62. package/dist/esm/utils/escrow-validation.js.map +1 -0
  63. package/dist/esm/utils/index.js +4 -0
  64. package/dist/esm/utils/index.js.map +1 -1
  65. package/dist/esm/utils/merchant-validator.js +241 -0
  66. package/dist/esm/utils/merchant-validator.js.map +1 -0
  67. package/dist/esm/utils/x402-direct.js +228 -0
  68. package/dist/esm/utils/x402-direct.js.map +1 -0
  69. package/dist/types/constants/seeds.d.ts +7 -0
  70. package/dist/types/constants/seeds.d.ts.map +1 -1
  71. package/dist/types/core/client.d.ts +33 -0
  72. package/dist/types/core/client.d.ts.map +1 -1
  73. package/dist/types/index.d.ts +6 -4
  74. package/dist/types/index.d.ts.map +1 -1
  75. package/dist/types/modules/escrow-v2.d.ts +51 -0
  76. package/dist/types/modules/escrow-v2.d.ts.map +1 -0
  77. package/dist/types/modules/escrow.d.ts +4 -0
  78. package/dist/types/modules/escrow.d.ts.map +1 -1
  79. package/dist/types/modules/index.d.ts +3 -0
  80. package/dist/types/modules/index.d.ts.map +1 -1
  81. package/dist/types/modules/staking.d.ts +32 -0
  82. package/dist/types/modules/staking.d.ts.map +1 -0
  83. package/dist/types/modules/subscription.d.ts +33 -0
  84. package/dist/types/modules/subscription.d.ts.map +1 -0
  85. package/dist/types/pda/index.d.ts +99 -0
  86. package/dist/types/pda/index.d.ts.map +1 -1
  87. package/dist/types/plugin/schemas.d.ts +2 -2
  88. package/dist/types/registries/x402.d.ts +14 -12
  89. package/dist/types/registries/x402.d.ts.map +1 -1
  90. package/dist/types/types/accounts.d.ts +157 -1
  91. package/dist/types/types/accounts.d.ts.map +1 -1
  92. package/dist/types/types/enums.d.ts +64 -0
  93. package/dist/types/types/enums.d.ts.map +1 -1
  94. package/dist/types/types/index.d.ts +4 -4
  95. package/dist/types/types/index.d.ts.map +1 -1
  96. package/dist/types/types/instructions.d.ts +34 -0
  97. package/dist/types/types/instructions.d.ts.map +1 -1
  98. package/dist/types/utils/escrow-validation.d.ts +145 -0
  99. package/dist/types/utils/escrow-validation.d.ts.map +1 -0
  100. package/dist/types/utils/index.d.ts +6 -0
  101. package/dist/types/utils/index.d.ts.map +1 -1
  102. package/dist/types/utils/merchant-validator.d.ts +176 -0
  103. package/dist/types/utils/merchant-validator.d.ts.map +1 -0
  104. package/dist/types/utils/x402-direct.d.ts +114 -0
  105. package/dist/types/utils/x402-direct.d.ts.map +1 -0
  106. package/package.json +1 -1
  107. package/src/constants/seeds.ts +7 -0
  108. package/src/core/client.ts +45 -0
  109. package/src/idl/synapse_agent_sap.json +7545 -3501
  110. package/src/index.ts +47 -0
  111. package/src/modules/escrow-v2.ts +396 -0
  112. package/src/modules/escrow.ts +4 -0
  113. package/src/modules/index.ts +3 -0
  114. package/src/modules/staking.ts +122 -0
  115. package/src/modules/subscription.ts +147 -0
  116. package/src/pda/index.ts +196 -0
  117. package/src/registries/x402.ts +108 -69
  118. package/src/types/accounts.ts +192 -1
  119. package/src/types/enums.ts +65 -0
  120. package/src/types/index.ts +15 -0
  121. package/src/types/instructions.ts +40 -0
  122. package/src/utils/escrow-validation.ts +301 -0
  123. package/src/utils/index.ts +28 -0
  124. package/src/utils/merchant-validator.ts +359 -0
  125. package/src/utils/x402-direct.ts +370 -0
package/src/index.ts CHANGED
@@ -59,6 +59,9 @@ export type {
59
59
  DelegatePermissionBit,
60
60
  SchemaTypeValue,
61
61
  CompressionTypeValue,
62
+ SettlementSecurityKind,
63
+ DisputeOutcomeKind,
64
+ BillingIntervalKind,
62
65
  // Helper structs
63
66
  Capability,
64
67
  VolumeCurveBreakpoint,
@@ -83,6 +86,14 @@ export type {
83
86
  AgentAttestationData,
84
87
  MemoryLedgerData,
85
88
  LedgerPageData,
89
+ // V2.1 account data
90
+ EscrowAccountV2Data,
91
+ PendingSettlementData,
92
+ DisputeRecordData,
93
+ AgentStakeData,
94
+ SubscriptionData,
95
+ CounterShardData,
96
+ IndexPageData,
86
97
  // Instruction args
87
98
  RegisterAgentArgs,
88
99
  UpdateAgentArgs,
@@ -95,6 +106,9 @@ export type {
95
106
  CreateEscrowArgs,
96
107
  CreateAttestationArgs,
97
108
  InscribeToolSchemaArgs,
109
+ // V2.1 instruction args
110
+ CreateEscrowV2Args,
111
+ CreateSubscriptionArgs,
98
112
  // v0.6.0 — Endpoint & Manifest types
99
113
  EndpointDescriptor,
100
114
  HealthCheckDescriptor,
@@ -112,6 +126,9 @@ export {
112
126
  DelegatePermission,
113
127
  SchemaType,
114
128
  CompressionType,
129
+ SettlementSecurity,
130
+ DisputeOutcome,
131
+ BillingInterval,
115
132
  } from "./types";
116
133
 
117
134
  // ── Constants ────────────────────────────────────────
@@ -151,6 +168,13 @@ export {
151
168
  deriveCheckpoint,
152
169
  deriveTool,
153
170
  deriveEscrow,
171
+ deriveEscrowV2,
172
+ derivePendingSettlement,
173
+ deriveDispute,
174
+ deriveStake,
175
+ deriveSubscription,
176
+ deriveShard,
177
+ deriveIndexPage,
154
178
  deriveAttestation,
155
179
  deriveLedger,
156
180
  deriveLedgerPage,
@@ -216,6 +240,26 @@ export type {
216
240
  PriorityFeeConfig,
217
241
  } from "./utils";
218
242
 
243
+ // v0.6.4 — Escrow validation, merchant middleware, x402 direct
244
+ export {
245
+ validateEscrowState,
246
+ attachSplAccounts,
247
+ toAccountMetas,
248
+ MissingEscrowAtaError,
249
+ SapMerchantValidator,
250
+ parseX402Headers,
251
+ getX402DirectPayments,
252
+ } from "./utils";
253
+ export type {
254
+ SplAccountMeta,
255
+ EscrowValidationResult,
256
+ ParsedX402Headers,
257
+ MerchantValidationResult,
258
+ X402DirectPayment,
259
+ SettlementPayload,
260
+ GetX402DirectOptions,
261
+ } from "./utils";
262
+
219
263
  // ── Errors ───────────────────────────────────────────
220
264
  export {
221
265
  SapError,
@@ -252,6 +296,9 @@ export {
252
296
  ToolsModule,
253
297
  VaultModule,
254
298
  EscrowModule,
299
+ EscrowV2Module,
300
+ StakingModule,
301
+ SubscriptionModule,
255
302
  AttestationModule,
256
303
  LedgerModule,
257
304
  BaseModule,
@@ -0,0 +1,396 @@
1
+ /**
2
+ * @module escrow-v2
3
+ * @description V2 escrow settlement layer — supports settlement security
4
+ * modes (SelfReport, CoSigned, DisputeWindow), dispute resolution,
5
+ * pending settlements, and migration from V1.
6
+ *
7
+ * @category Modules
8
+ * @since v0.7.0
9
+ * @packageDocumentation
10
+ */
11
+
12
+ import {
13
+ SystemProgram,
14
+ type PublicKey,
15
+ type TransactionSignature,
16
+ type AccountMeta,
17
+ } from "@solana/web3.js";
18
+ import { BN } from "@coral-xyz/anchor";
19
+ import { BaseModule } from "./base";
20
+ import {
21
+ deriveAgent,
22
+ deriveAgentStats,
23
+ deriveEscrow,
24
+ deriveEscrowV2,
25
+ derivePendingSettlement as derivePendingPda,
26
+ deriveDispute as deriveDisputePda,
27
+ } from "../pda";
28
+ import type {
29
+ EscrowAccountV2Data,
30
+ PendingSettlementData,
31
+ DisputeRecordData,
32
+ CreateEscrowV2Args,
33
+ } from "../types";
34
+ import {
35
+ buildPriorityFeeIxs,
36
+ buildRpcOptions,
37
+ } from "../utils/priority-fee";
38
+ import type { SettleOptions } from "../utils/priority-fee";
39
+
40
+ /**
41
+ * @name EscrowV2Module
42
+ * @description Manages V2 escrow accounts with settlement security modes,
43
+ * dispute windows, and pending settlement flows.
44
+ *
45
+ * @category Modules
46
+ * @since v0.7.0
47
+ * @extends BaseModule
48
+ */
49
+ export class EscrowV2Module extends BaseModule {
50
+ // ── Helpers ──────────────────────────────────────────
51
+
52
+ /** Convert BN | number | bigint → number for PDA seed functions. */
53
+ private toNum(v: BN | number | bigint): number {
54
+ return BN.isBN(v) ? v.toNumber() : Number(v);
55
+ }
56
+
57
+ // ── PDA helpers ──────────────────────────────────────
58
+
59
+ deriveEscrow(
60
+ agentPda: PublicKey,
61
+ depositor?: PublicKey,
62
+ nonce: BN | number | bigint = 0,
63
+ ): readonly [PublicKey, number] {
64
+ return deriveEscrowV2(agentPda, depositor ?? this.walletPubkey, this.toNum(nonce));
65
+ }
66
+
67
+ derivePendingSettlement(
68
+ escrowV2Pda: PublicKey,
69
+ settlementIndex: BN | number | bigint,
70
+ ): readonly [PublicKey, number] {
71
+ return derivePendingPda(escrowV2Pda, this.toNum(settlementIndex));
72
+ }
73
+
74
+ deriveDispute(
75
+ pendingSettlementPda: PublicKey,
76
+ ): readonly [PublicKey, number] {
77
+ return deriveDisputePda(pendingSettlementPda);
78
+ }
79
+
80
+ // ── Instructions ─────────────────────────────────────
81
+
82
+ async create(
83
+ agentWallet: PublicKey,
84
+ args: CreateEscrowV2Args,
85
+ splAccounts: AccountMeta[] = [],
86
+ ): Promise<TransactionSignature> {
87
+ const [agentPda] = deriveAgent(agentWallet);
88
+ const [escrowPda] = this.deriveEscrow(agentPda, undefined, args.escrowNonce);
89
+
90
+ return this.methods
91
+ .createEscrowV2(
92
+ this.bn(args.escrowNonce),
93
+ this.bn(args.pricePerCall),
94
+ this.bn(args.maxCalls),
95
+ this.bn(args.initialDeposit),
96
+ args.expiresAt,
97
+ args.volumeCurve,
98
+ args.tokenMint,
99
+ args.tokenDecimals,
100
+ args.settlementSecurity,
101
+ this.bn(args.disputeWindowSlots),
102
+ args.coSigner,
103
+ args.arbiter,
104
+ )
105
+ .accounts({
106
+ depositor: this.walletPubkey,
107
+ agent: agentPda,
108
+ escrow: escrowPda,
109
+ systemProgram: SystemProgram.programId,
110
+ })
111
+ .remainingAccounts(splAccounts)
112
+ .rpc();
113
+ }
114
+
115
+ async deposit(
116
+ agentWallet: PublicKey,
117
+ nonce: BN | number | bigint,
118
+ amount: BN | number | bigint,
119
+ splAccounts: AccountMeta[] = [],
120
+ ): Promise<TransactionSignature> {
121
+ const [agentPda] = deriveAgent(agentWallet);
122
+ const [escrowPda] = this.deriveEscrow(agentPda, undefined, nonce);
123
+
124
+ return this.methods
125
+ .depositEscrowV2(this.bn(nonce), this.bn(amount))
126
+ .accounts({
127
+ depositor: this.walletPubkey,
128
+ escrow: escrowPda,
129
+ systemProgram: SystemProgram.programId,
130
+ })
131
+ .remainingAccounts(splAccounts)
132
+ .rpc();
133
+ }
134
+
135
+ async settle(
136
+ depositorWallet: PublicKey,
137
+ nonce: BN | number | bigint,
138
+ callsToSettle: BN | number | bigint,
139
+ serviceHash: number[],
140
+ splAccounts: AccountMeta[] = [],
141
+ opts?: SettleOptions,
142
+ ): Promise<TransactionSignature> {
143
+ const [agentPda] = deriveAgent(this.walletPubkey);
144
+ const [escrowPda] = this.deriveEscrow(agentPda, depositorWallet, nonce);
145
+ const [statsPda] = deriveAgentStats(agentPda);
146
+
147
+ const preIxs = buildPriorityFeeIxs(opts);
148
+ const rpcOpts = buildRpcOptions(opts);
149
+
150
+ let builder = this.methods
151
+ .settleCallsV2(this.bn(nonce), this.bn(callsToSettle), serviceHash)
152
+ .accounts({
153
+ wallet: this.walletPubkey,
154
+ agent: agentPda,
155
+ agentStats: statsPda,
156
+ escrow: escrowPda,
157
+ systemProgram: SystemProgram.programId,
158
+ })
159
+ .remainingAccounts(splAccounts);
160
+
161
+ if (preIxs.length > 0) {
162
+ builder = builder.preInstructions(preIxs);
163
+ }
164
+
165
+ return builder.rpc(rpcOpts);
166
+ }
167
+
168
+ async createPendingSettlement(
169
+ agentWallet: PublicKey,
170
+ depositorWallet: PublicKey,
171
+ nonce: BN | number | bigint,
172
+ settlementIndex: BN | number | bigint,
173
+ callsToSettle: BN | number | bigint,
174
+ amount: BN | number | bigint,
175
+ serviceHash: number[],
176
+ ): Promise<TransactionSignature> {
177
+ const [agentPda] = deriveAgent(agentWallet);
178
+ const [escrowPda] = this.deriveEscrow(agentPda, depositorWallet, nonce);
179
+ const [pendingPda] = this.derivePendingSettlement(escrowPda, settlementIndex);
180
+
181
+ return this.methods
182
+ .createPendingSettlement(
183
+ this.bn(settlementIndex),
184
+ this.bn(callsToSettle),
185
+ this.bn(amount),
186
+ serviceHash,
187
+ )
188
+ .accounts({
189
+ wallet: this.walletPubkey,
190
+ agent: agentPda,
191
+ escrow: escrowPda,
192
+ pendingSettlement: pendingPda,
193
+ systemProgram: SystemProgram.programId,
194
+ })
195
+ .rpc();
196
+ }
197
+
198
+ async finalizeSettlement(
199
+ agentWallet: PublicKey,
200
+ depositorWallet: PublicKey,
201
+ nonce: BN | number | bigint,
202
+ settlementIndex: BN | number | bigint,
203
+ ): Promise<TransactionSignature> {
204
+ const [agentPda] = deriveAgent(agentWallet);
205
+ const [escrowPda] = this.deriveEscrow(agentPda, depositorWallet, nonce);
206
+ const [pendingPda] = this.derivePendingSettlement(escrowPda, settlementIndex);
207
+ const [statsPda] = deriveAgentStats(agentPda);
208
+
209
+ return this.methods
210
+ .finalizeSettlement()
211
+ .accounts({
212
+ payer: this.walletPubkey,
213
+ agentWallet,
214
+ escrow: escrowPda,
215
+ pendingSettlement: pendingPda,
216
+ agentStats: statsPda,
217
+ })
218
+ .rpc();
219
+ }
220
+
221
+ async fileDispute(
222
+ agentWallet: PublicKey,
223
+ nonce: BN | number | bigint,
224
+ settlementIndex: BN | number | bigint,
225
+ evidenceHash: number[],
226
+ ): Promise<TransactionSignature> {
227
+ const [agentPda] = deriveAgent(agentWallet);
228
+ const [escrowPda] = this.deriveEscrow(agentPda, undefined, nonce);
229
+ const [pendingPda] = this.derivePendingSettlement(escrowPda, settlementIndex);
230
+ const [disputePda] = this.deriveDispute(pendingPda);
231
+
232
+ return this.methods
233
+ .fileDispute(evidenceHash)
234
+ .accounts({
235
+ depositor: this.walletPubkey,
236
+ escrow: escrowPda,
237
+ pendingSettlement: pendingPda,
238
+ dispute: disputePda,
239
+ systemProgram: SystemProgram.programId,
240
+ })
241
+ .rpc();
242
+ }
243
+
244
+ async resolveDispute(
245
+ depositorWallet: PublicKey,
246
+ agentWallet: PublicKey,
247
+ nonce: BN | number | bigint,
248
+ settlementIndex: BN | number | bigint,
249
+ outcome: number,
250
+ ): Promise<TransactionSignature> {
251
+ const [agentPda] = deriveAgent(agentWallet);
252
+ const [escrowPda] = this.deriveEscrow(agentPda, depositorWallet, nonce);
253
+ const [pendingPda] = this.derivePendingSettlement(escrowPda, settlementIndex);
254
+ const [disputePda] = this.deriveDispute(pendingPda);
255
+ const [statsPda] = deriveAgentStats(agentPda);
256
+
257
+ return this.methods
258
+ .resolveDispute(outcome)
259
+ .accounts({
260
+ arbiter: this.walletPubkey,
261
+ depositor: depositorWallet,
262
+ agentWallet,
263
+ escrow: escrowPda,
264
+ pendingSettlement: pendingPda,
265
+ dispute: disputePda,
266
+ agentStats: statsPda,
267
+ })
268
+ .rpc();
269
+ }
270
+
271
+ async closeDispute(
272
+ pendingSettlementPda: PublicKey,
273
+ ): Promise<TransactionSignature> {
274
+ const [disputePda] = this.deriveDispute(pendingSettlementPda);
275
+
276
+ return this.methods
277
+ .closeDispute()
278
+ .accounts({
279
+ depositor: this.walletPubkey,
280
+ dispute: disputePda,
281
+ })
282
+ .rpc();
283
+ }
284
+
285
+ async closePendingSettlement(
286
+ pendingSettlementPda: PublicKey,
287
+ ): Promise<TransactionSignature> {
288
+ return this.methods
289
+ .closePendingSettlement()
290
+ .accounts({
291
+ payer: this.walletPubkey,
292
+ pendingSettlement: pendingSettlementPda,
293
+ })
294
+ .rpc();
295
+ }
296
+
297
+ async withdraw(
298
+ agentWallet: PublicKey,
299
+ nonce: BN | number | bigint,
300
+ amount: BN | number | bigint,
301
+ ): Promise<TransactionSignature> {
302
+ const [agentPda] = deriveAgent(agentWallet);
303
+ const [escrowPda] = this.deriveEscrow(agentPda, undefined, nonce);
304
+
305
+ return this.methods
306
+ .withdrawEscrowV2(this.bn(amount))
307
+ .accounts({
308
+ depositor: this.walletPubkey,
309
+ escrow: escrowPda,
310
+ })
311
+ .rpc();
312
+ }
313
+
314
+ async close(
315
+ agentWallet: PublicKey,
316
+ nonce: BN | number | bigint = 0,
317
+ ): Promise<TransactionSignature> {
318
+ const [agentPda] = deriveAgent(agentWallet);
319
+ const [escrowPda] = this.deriveEscrow(agentPda, undefined, nonce);
320
+
321
+ return this.methods
322
+ .closeEscrowV2()
323
+ .accounts({
324
+ depositor: this.walletPubkey,
325
+ escrow: escrowPda,
326
+ })
327
+ .rpc();
328
+ }
329
+
330
+ async migrateFromV1(
331
+ agentWallet: PublicKey,
332
+ ): Promise<TransactionSignature> {
333
+ const [agentPda] = deriveAgent(agentWallet);
334
+ const [escrowV1Pda] = deriveEscrow(agentPda, this.walletPubkey);
335
+ const [escrowV2Pda] = this.deriveEscrow(agentPda, undefined, 0);
336
+
337
+ return this.methods
338
+ .migrateEscrowV1ToV2()
339
+ .accounts({
340
+ depositor: this.walletPubkey,
341
+ agent: agentPda,
342
+ escrowV1: escrowV1Pda,
343
+ escrowV2: escrowV2Pda,
344
+ systemProgram: SystemProgram.programId,
345
+ })
346
+ .rpc();
347
+ }
348
+
349
+ // ── Fetchers ─────────────────────────────────────────
350
+
351
+ async fetch(
352
+ agentPda: PublicKey,
353
+ depositor?: PublicKey,
354
+ nonce: BN | number | bigint = 0,
355
+ ): Promise<EscrowAccountV2Data> {
356
+ const [pda] = this.deriveEscrow(agentPda, depositor, nonce);
357
+ return this.fetchAccount<EscrowAccountV2Data>("escrowAccountV2", pda);
358
+ }
359
+
360
+ async fetchNullable(
361
+ agentPda: PublicKey,
362
+ depositor?: PublicKey,
363
+ nonce: BN | number | bigint = 0,
364
+ ): Promise<EscrowAccountV2Data | null> {
365
+ const [pda] = this.deriveEscrow(agentPda, depositor, nonce);
366
+ return this.fetchAccountNullable<EscrowAccountV2Data>("escrowAccountV2", pda);
367
+ }
368
+
369
+ async fetchByPda(escrowPda: PublicKey): Promise<EscrowAccountV2Data> {
370
+ return this.fetchAccount<EscrowAccountV2Data>("escrowAccountV2", escrowPda);
371
+ }
372
+
373
+ async fetchPendingSettlement(
374
+ pendingPda: PublicKey,
375
+ ): Promise<PendingSettlementData> {
376
+ return this.fetchAccount<PendingSettlementData>("pendingSettlement", pendingPda);
377
+ }
378
+
379
+ async fetchPendingSettlementNullable(
380
+ pendingPda: PublicKey,
381
+ ): Promise<PendingSettlementData | null> {
382
+ return this.fetchAccountNullable<PendingSettlementData>("pendingSettlement", pendingPda);
383
+ }
384
+
385
+ async fetchDispute(
386
+ disputePda: PublicKey,
387
+ ): Promise<DisputeRecordData> {
388
+ return this.fetchAccount<DisputeRecordData>("disputeRecord", disputePda);
389
+ }
390
+
391
+ async fetchDisputeNullable(
392
+ disputePda: PublicKey,
393
+ ): Promise<DisputeRecordData | null> {
394
+ return this.fetchAccountNullable<DisputeRecordData>("disputeRecord", disputePda);
395
+ }
396
+ }
@@ -59,6 +59,10 @@ import type { SettleOptions } from "../utils/priority-fee";
59
59
  * tokenDecimals: null,
60
60
  * });
61
61
  * ```
62
+ *
63
+ * @deprecated Since v0.7.0 — Use {@link EscrowV2Module} (`client.escrowV2`) instead.
64
+ * V1 escrows lack settlement security, dispute resolution, and staking integration.
65
+ * Existing V1 escrows can be migrated via `client.escrowV2.migrateFromV1()`.
62
66
  */
63
67
  export class EscrowModule extends BaseModule {
64
68
  // ── PDA helpers ──────────────────────────────────────
@@ -18,6 +18,9 @@ export { IndexingModule } from "./indexing";
18
18
  export { ToolsModule } from "./tools";
19
19
  export { VaultModule } from "./vault";
20
20
  export { EscrowModule } from "./escrow";
21
+ export { EscrowV2Module } from "./escrow-v2";
22
+ export { StakingModule } from "./staking";
23
+ export { SubscriptionModule } from "./subscription";
21
24
  export { AttestationModule } from "./attestation";
22
25
  export { LedgerModule } from "./ledger";
23
26
  export { BaseModule } from "./base";
@@ -0,0 +1,122 @@
1
+ /**
2
+ * @module staking
3
+ * @description Agent staking lifecycle — init, deposit, request unstake,
4
+ * complete unstake, and fetch stake accounts.
5
+ *
6
+ * @category Modules
7
+ * @since v0.7.0
8
+ * @packageDocumentation
9
+ */
10
+
11
+ import {
12
+ SystemProgram,
13
+ type PublicKey,
14
+ type TransactionSignature,
15
+ } from "@solana/web3.js";
16
+ import { BN } from "@coral-xyz/anchor";
17
+ import { BaseModule } from "./base";
18
+ import { deriveAgent, deriveStake } from "../pda";
19
+ import type { AgentStakeData } from "../types";
20
+
21
+ /**
22
+ * @name StakingModule
23
+ * @description Manages agent stake accounts — init, deposit, unstake, and fetch.
24
+ *
25
+ * @category Modules
26
+ * @since v0.7.0
27
+ * @extends BaseModule
28
+ */
29
+ export class StakingModule extends BaseModule {
30
+ // ── PDA helpers ──────────────────────────────────────
31
+
32
+ deriveStake(agentPda: PublicKey): readonly [PublicKey, number] {
33
+ return deriveStake(agentPda);
34
+ }
35
+
36
+ // ── Instructions ─────────────────────────────────────
37
+
38
+ async initStake(
39
+ agentWallet: PublicKey,
40
+ initialDeposit: BN | number | bigint,
41
+ ): Promise<TransactionSignature> {
42
+ const [agentPda] = deriveAgent(agentWallet);
43
+ const [stakePda] = this.deriveStake(agentPda);
44
+
45
+ return this.methods
46
+ .initStake(this.bn(initialDeposit))
47
+ .accounts({
48
+ wallet: this.walletPubkey,
49
+ agent: agentPda,
50
+ stake: stakePda,
51
+ systemProgram: SystemProgram.programId,
52
+ })
53
+ .rpc();
54
+ }
55
+
56
+ async deposit(
57
+ agentWallet: PublicKey,
58
+ amount: BN | number | bigint,
59
+ ): Promise<TransactionSignature> {
60
+ const [agentPda] = deriveAgent(agentWallet);
61
+ const [stakePda] = this.deriveStake(agentPda);
62
+
63
+ return this.methods
64
+ .depositStake(this.bn(amount))
65
+ .accounts({
66
+ wallet: this.walletPubkey,
67
+ agent: agentPda,
68
+ stake: stakePda,
69
+ systemProgram: SystemProgram.programId,
70
+ })
71
+ .rpc();
72
+ }
73
+
74
+ async requestUnstake(
75
+ agentWallet: PublicKey,
76
+ amount: BN | number | bigint,
77
+ ): Promise<TransactionSignature> {
78
+ const [agentPda] = deriveAgent(agentWallet);
79
+ const [stakePda] = this.deriveStake(agentPda);
80
+
81
+ return this.methods
82
+ .requestUnstake(this.bn(amount))
83
+ .accounts({
84
+ wallet: this.walletPubkey,
85
+ agent: agentPda,
86
+ stake: stakePda,
87
+ })
88
+ .rpc();
89
+ }
90
+
91
+ async completeUnstake(
92
+ agentWallet: PublicKey,
93
+ ): Promise<TransactionSignature> {
94
+ const [agentPda] = deriveAgent(agentWallet);
95
+ const [stakePda] = this.deriveStake(agentPda);
96
+
97
+ return this.methods
98
+ .completeUnstake()
99
+ .accounts({
100
+ wallet: this.walletPubkey,
101
+ agent: agentPda,
102
+ stake: stakePda,
103
+ })
104
+ .rpc();
105
+ }
106
+
107
+ // ── Fetchers ─────────────────────────────────────────
108
+
109
+ async fetch(agentPda: PublicKey): Promise<AgentStakeData> {
110
+ const [pda] = this.deriveStake(agentPda);
111
+ return this.fetchAccount<AgentStakeData>("agentStake", pda);
112
+ }
113
+
114
+ async fetchNullable(agentPda: PublicKey): Promise<AgentStakeData | null> {
115
+ const [pda] = this.deriveStake(agentPda);
116
+ return this.fetchAccountNullable<AgentStakeData>("agentStake", pda);
117
+ }
118
+
119
+ async fetchByPda(stakePda: PublicKey): Promise<AgentStakeData> {
120
+ return this.fetchAccount<AgentStakeData>("agentStake", stakePda);
121
+ }
122
+ }