@solana/mpp 0.1.0 → 0.2.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 (92) hide show
  1. package/README.md +212 -0
  2. package/dist/Methods.d.ts +1 -213
  3. package/dist/Methods.d.ts.map +1 -1
  4. package/dist/Methods.js +1 -158
  5. package/dist/Methods.js.map +1 -1
  6. package/dist/client/Methods.d.ts +0 -2
  7. package/dist/client/Methods.d.ts.map +1 -1
  8. package/dist/client/Methods.js +0 -2
  9. package/dist/client/Methods.js.map +1 -1
  10. package/dist/client/index.d.ts +0 -1
  11. package/dist/client/index.d.ts.map +1 -1
  12. package/dist/client/index.js +0 -1
  13. package/dist/client/index.js.map +1 -1
  14. package/dist/index.d.ts +0 -3
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +0 -2
  17. package/dist/index.js.map +1 -1
  18. package/dist/server/Charge.d.ts +2 -2
  19. package/dist/server/Charge.d.ts.map +1 -1
  20. package/dist/server/Charge.js +4 -0
  21. package/dist/server/Charge.js.map +1 -1
  22. package/dist/server/Methods.d.ts +0 -2
  23. package/dist/server/Methods.d.ts.map +1 -1
  24. package/dist/server/Methods.js +0 -2
  25. package/dist/server/Methods.js.map +1 -1
  26. package/dist/server/index.d.ts +0 -1
  27. package/dist/server/index.d.ts.map +1 -1
  28. package/dist/server/index.js +0 -1
  29. package/dist/server/index.js.map +1 -1
  30. package/package.json +1 -9
  31. package/src/Methods.ts +1 -171
  32. package/src/client/Methods.ts +0 -3
  33. package/src/client/index.ts +0 -1
  34. package/src/index.ts +0 -29
  35. package/src/server/Charge.ts +7 -2
  36. package/src/server/Methods.ts +0 -3
  37. package/src/server/index.ts +0 -1
  38. package/dist/client/Session.d.ts +0 -195
  39. package/dist/client/Session.d.ts.map +0 -1
  40. package/dist/client/Session.js +0 -411
  41. package/dist/client/Session.js.map +0 -1
  42. package/dist/server/Session.d.ts +0 -171
  43. package/dist/server/Session.d.ts.map +0 -1
  44. package/dist/server/Session.js +0 -430
  45. package/dist/server/Session.js.map +0 -1
  46. package/dist/session/ChannelStore.d.ts +0 -12
  47. package/dist/session/ChannelStore.d.ts.map +0 -1
  48. package/dist/session/ChannelStore.js +0 -88
  49. package/dist/session/ChannelStore.js.map +0 -1
  50. package/dist/session/Types.d.ts +0 -179
  51. package/dist/session/Types.d.ts.map +0 -1
  52. package/dist/session/Types.js +0 -2
  53. package/dist/session/Types.js.map +0 -1
  54. package/dist/session/Voucher.d.ts +0 -7
  55. package/dist/session/Voucher.d.ts.map +0 -1
  56. package/dist/session/Voucher.js +0 -118
  57. package/dist/session/Voucher.js.map +0 -1
  58. package/dist/session/authorizers/BudgetAuthorizer.d.ts +0 -90
  59. package/dist/session/authorizers/BudgetAuthorizer.d.ts.map +0 -1
  60. package/dist/session/authorizers/BudgetAuthorizer.js +0 -398
  61. package/dist/session/authorizers/BudgetAuthorizer.js.map +0 -1
  62. package/dist/session/authorizers/SwigSessionAuthorizer.d.ts +0 -104
  63. package/dist/session/authorizers/SwigSessionAuthorizer.d.ts.map +0 -1
  64. package/dist/session/authorizers/SwigSessionAuthorizer.js +0 -522
  65. package/dist/session/authorizers/SwigSessionAuthorizer.js.map +0 -1
  66. package/dist/session/authorizers/UnboundedAuthorizer.d.ts +0 -36
  67. package/dist/session/authorizers/UnboundedAuthorizer.d.ts.map +0 -1
  68. package/dist/session/authorizers/UnboundedAuthorizer.js +0 -204
  69. package/dist/session/authorizers/UnboundedAuthorizer.js.map +0 -1
  70. package/dist/session/authorizers/index.d.ts +0 -5
  71. package/dist/session/authorizers/index.d.ts.map +0 -1
  72. package/dist/session/authorizers/index.js +0 -5
  73. package/dist/session/authorizers/index.js.map +0 -1
  74. package/dist/session/authorizers/makeSessionAuthorizer.d.ts +0 -19
  75. package/dist/session/authorizers/makeSessionAuthorizer.d.ts.map +0 -1
  76. package/dist/session/authorizers/makeSessionAuthorizer.js +0 -72
  77. package/dist/session/authorizers/makeSessionAuthorizer.js.map +0 -1
  78. package/dist/session/index.d.ts +0 -5
  79. package/dist/session/index.d.ts.map +0 -1
  80. package/dist/session/index.js +0 -5
  81. package/dist/session/index.js.map +0 -1
  82. package/src/client/Session.ts +0 -630
  83. package/src/server/Session.ts +0 -687
  84. package/src/session/ChannelStore.ts +0 -128
  85. package/src/session/Types.ts +0 -189
  86. package/src/session/Voucher.ts +0 -158
  87. package/src/session/authorizers/BudgetAuthorizer.ts +0 -574
  88. package/src/session/authorizers/SwigSessionAuthorizer.ts +0 -767
  89. package/src/session/authorizers/UnboundedAuthorizer.ts +0 -284
  90. package/src/session/authorizers/index.ts +0 -4
  91. package/src/session/authorizers/makeSessionAuthorizer.ts +0 -104
  92. package/src/session/index.ts +0 -4
@@ -1,522 +0,0 @@
1
- import { createSolanaRpc } from '@solana/kit';
2
- import { DEFAULT_RPC_URLS } from '../../constants.js';
3
- import { signVoucher } from '../Voucher.js';
4
- /**
5
- * Session authorizer for `swig_session` mode.
6
- *
7
- * This authorizer binds delegated session keys to on-chain Swig role policy
8
- * before issuing vouchers, then keeps channel state tied to that signer/role.
9
- */
10
- export class SwigSessionAuthorizer {
11
- wallet;
12
- policy;
13
- rpcUrl;
14
- allowedPrograms;
15
- spendLimit;
16
- depositLimit;
17
- buildOpenTx;
18
- buildTopupTx;
19
- buildCloseTx;
20
- channels = new Map();
21
- swigLoaded = false;
22
- swigModule = null;
23
- sessionSigner = null;
24
- sessionStartedAtMs = null;
25
- sessionOpenTx = null;
26
- sessionRoleId = null;
27
- validatedPolicyForSessionSigner = null;
28
- constructor(parameters) {
29
- if (!Number.isInteger(parameters.policy.ttlSeconds) || parameters.policy.ttlSeconds <= 0) {
30
- throw new Error('Swig policy `ttlSeconds` must be a positive integer');
31
- }
32
- this.wallet = parameters.wallet;
33
- this.policy = parameters.policy;
34
- this.rpcUrl = parameters.rpcUrl;
35
- if (parameters.swigModule) {
36
- this.swigModule = parameters.swigModule;
37
- this.swigLoaded = true;
38
- }
39
- this.allowedPrograms = parameters.allowedPrograms ? new Set(parameters.allowedPrograms) : undefined;
40
- this.spendLimit =
41
- this.policy.spendLimit !== undefined
42
- ? parseNonNegativeAmount(this.policy.spendLimit, 'spendLimit')
43
- : undefined;
44
- this.depositLimit =
45
- this.policy.depositLimit !== undefined
46
- ? parseNonNegativeAmount(this.policy.depositLimit, 'depositLimit')
47
- : undefined;
48
- this.buildOpenTx = parameters.buildOpenTx;
49
- this.buildTopupTx = parameters.buildTopupTx;
50
- this.buildCloseTx = parameters.buildCloseTx;
51
- }
52
- getMode() {
53
- return 'swig_session';
54
- }
55
- getCapabilities() {
56
- return {
57
- expiresAt: this.getSessionExpiresAt(),
58
- mode: 'swig_session',
59
- ...(this.policy.spendLimit ? { maxCumulativeAmount: this.policy.spendLimit } : {}),
60
- ...(this.policy.depositLimit ? { maxDepositAmount: this.policy.depositLimit } : {}),
61
- ...(this.allowedPrograms ? { allowedPrograms: [...this.allowedPrograms] } : {}),
62
- allowedActions: ['open', 'update', 'topup', 'close'],
63
- requiresInteractiveApproval: {
64
- close: false,
65
- open: true,
66
- topup: !this.policy.autoTopup?.enabled,
67
- update: false,
68
- },
69
- };
70
- }
71
- async authorizeOpen(input) {
72
- await this.ensureSwigInstalled();
73
- this.assertProgramAllowed(input.channelProgram);
74
- const deposit = parseNonNegativeAmount(input.depositAmount, 'depositAmount');
75
- if (this.depositLimit !== undefined && deposit > this.depositLimit) {
76
- throw new Error(`Open deposit exceeds depositLimit (${this.depositLimit.toString()})`);
77
- }
78
- const session = await this.ensureSessionSignerForOpen(input);
79
- await this.assertPolicyAppliedOnChain(input, session);
80
- const sessionSigner = session.signer;
81
- const openTx = await this.resolveOpenTx(input, session);
82
- const expiresAt = this.getSessionExpiresAt();
83
- const voucher = await this.signSwigVoucher(sessionSigner, {
84
- chainId: normalizeChainId(input.network),
85
- channelId: input.channelId,
86
- channelProgram: input.channelProgram,
87
- cumulativeAmount: '0',
88
- expiresAt,
89
- meter: input.pricing?.meter ?? 'session',
90
- payer: this.wallet.address,
91
- recipient: input.recipient,
92
- sequence: 0,
93
- serverNonce: input.serverNonce,
94
- units: '0',
95
- });
96
- this.channels.set(input.channelId, {
97
- deposited: deposit,
98
- lastCumulative: 0n,
99
- lastSequence: 0,
100
- signerAddress: sessionSigner.address,
101
- ...(session.swigRoleId !== undefined ? { swigRoleId: session.swigRoleId } : {}),
102
- });
103
- return {
104
- capabilities: this.getCapabilities(),
105
- expiresAt,
106
- openTx,
107
- voucher,
108
- };
109
- }
110
- async authorizeUpdate(input) {
111
- await this.ensureSwigInstalled();
112
- this.assertProgramAllowed(input.channelProgram);
113
- const cumulativeAmount = parseNonNegativeAmount(input.cumulativeAmount, 'cumulativeAmount');
114
- if (this.spendLimit !== undefined && cumulativeAmount > this.spendLimit) {
115
- throw new Error(`Cumulative amount exceeds spendLimit (${this.spendLimit.toString()})`);
116
- }
117
- const progress = this.channels.get(input.channelId);
118
- const sessionSigner = this.requireActiveSessionSigner(input.channelId, progress);
119
- this.assertMonotonic(input.channelId, input.sequence, cumulativeAmount, progress);
120
- const voucher = await this.signSwigVoucher(sessionSigner, {
121
- chainId: normalizeChainId(input.network),
122
- channelId: input.channelId,
123
- channelProgram: input.channelProgram,
124
- cumulativeAmount: cumulativeAmount.toString(),
125
- expiresAt: this.getSessionExpiresAt(),
126
- meter: input.meter,
127
- payer: this.wallet.address,
128
- recipient: input.recipient,
129
- sequence: input.sequence,
130
- serverNonce: input.serverNonce,
131
- units: input.units,
132
- });
133
- this.channels.set(input.channelId, {
134
- deposited: progress?.deposited ?? 0n,
135
- lastCumulative: cumulativeAmount,
136
- lastSequence: input.sequence,
137
- signerAddress: sessionSigner.address,
138
- ...(progress?.swigRoleId !== undefined
139
- ? { swigRoleId: progress.swigRoleId }
140
- : this.sessionRoleId !== null
141
- ? { swigRoleId: this.sessionRoleId }
142
- : {}),
143
- });
144
- return { voucher };
145
- }
146
- async authorizeTopup(input) {
147
- await this.ensureSwigInstalled();
148
- this.assertProgramAllowed(input.channelProgram);
149
- const progress = this.channels.get(input.channelId);
150
- const sessionSigner = this.requireActiveSessionSigner(input.channelId, progress);
151
- const additionalAmount = parseNonNegativeAmount(input.additionalAmount, 'additionalAmount');
152
- const nextDeposited = (progress?.deposited ?? 0n) + additionalAmount;
153
- if (this.depositLimit !== undefined && nextDeposited > this.depositLimit) {
154
- throw new Error(`Topup exceeds depositLimit (${this.depositLimit.toString()})`);
155
- }
156
- const topupTx = await this.resolveTopupTx(input);
157
- this.channels.set(input.channelId, {
158
- deposited: nextDeposited,
159
- lastCumulative: progress?.lastCumulative ?? 0n,
160
- lastSequence: progress?.lastSequence ?? 0,
161
- signerAddress: sessionSigner.address,
162
- ...(progress?.swigRoleId !== undefined
163
- ? { swigRoleId: progress.swigRoleId }
164
- : this.sessionRoleId !== null
165
- ? { swigRoleId: this.sessionRoleId }
166
- : {}),
167
- });
168
- return { topupTx };
169
- }
170
- async authorizeClose(input) {
171
- await this.ensureSwigInstalled();
172
- this.assertProgramAllowed(input.channelProgram);
173
- const finalCumulativeAmount = parseNonNegativeAmount(input.finalCumulativeAmount, 'finalCumulativeAmount');
174
- if (this.spendLimit !== undefined && finalCumulativeAmount > this.spendLimit) {
175
- throw new Error(`Final cumulative amount exceeds spendLimit (${this.spendLimit.toString()})`);
176
- }
177
- const progress = this.channels.get(input.channelId);
178
- const sessionSigner = this.requireActiveSessionSigner(input.channelId, progress);
179
- this.assertMonotonic(input.channelId, input.sequence, finalCumulativeAmount, progress);
180
- const voucher = await this.signSwigVoucher(sessionSigner, {
181
- chainId: normalizeChainId(input.network),
182
- channelId: input.channelId,
183
- channelProgram: input.channelProgram,
184
- cumulativeAmount: finalCumulativeAmount.toString(),
185
- expiresAt: this.getSessionExpiresAt(),
186
- meter: 'close',
187
- payer: this.wallet.address,
188
- recipient: input.recipient,
189
- sequence: input.sequence,
190
- serverNonce: input.serverNonce,
191
- units: '0',
192
- });
193
- const closeTx = await this.resolveCloseTx(input);
194
- this.channels.set(input.channelId, {
195
- deposited: progress?.deposited ?? 0n,
196
- lastCumulative: finalCumulativeAmount,
197
- lastSequence: input.sequence,
198
- signerAddress: sessionSigner.address,
199
- ...(progress?.swigRoleId !== undefined
200
- ? { swigRoleId: progress.swigRoleId }
201
- : this.sessionRoleId !== null
202
- ? { swigRoleId: this.sessionRoleId }
203
- : {}),
204
- });
205
- return {
206
- voucher,
207
- ...(closeTx ? { closeTx } : {}),
208
- };
209
- }
210
- async signSwigVoucher(signer, voucher) {
211
- const signed = await signVoucher(signer, voucher);
212
- return {
213
- ...signed,
214
- signatureType: 'swig-session',
215
- };
216
- }
217
- assertProgramAllowed(channelProgram) {
218
- if (!this.allowedPrograms) {
219
- return;
220
- }
221
- if (!this.allowedPrograms.has(channelProgram)) {
222
- throw new Error(`Channel program is not allowed: ${channelProgram}`);
223
- }
224
- }
225
- assertMonotonic(channelId, sequence, cumulativeAmount, progress) {
226
- if (!Number.isInteger(sequence) || sequence < 0) {
227
- throw new Error('Sequence must be a non-negative integer');
228
- }
229
- if (!progress) {
230
- return;
231
- }
232
- if (sequence <= progress.lastSequence) {
233
- throw new Error(`Sequence must increase for channel ${channelId}. Last=${progress.lastSequence}, received=${sequence}`);
234
- }
235
- if (cumulativeAmount < progress.lastCumulative) {
236
- throw new Error(`Cumulative amount must not decrease for channel ${channelId}. Last=${progress.lastCumulative.toString()}, received=${cumulativeAmount.toString()}`);
237
- }
238
- }
239
- requireActiveSessionSigner(channelId, progress) {
240
- if (!this.sessionSigner || this.sessionStartedAtMs === null) {
241
- throw new Error(`No active Swig session key for channel ${channelId}. Call authorizeOpen first.`);
242
- }
243
- if (this.isSessionExpired()) {
244
- throw new Error('Swig session key has expired. Re-open the channel to create a fresh session key.');
245
- }
246
- if (progress && progress.signerAddress !== this.sessionSigner.address) {
247
- throw new Error(`Session signer changed for channel ${channelId}; expected ${progress.signerAddress}, active ${this.sessionSigner.address}`);
248
- }
249
- if (progress?.swigRoleId !== undefined &&
250
- this.sessionRoleId !== null &&
251
- progress.swigRoleId !== this.sessionRoleId) {
252
- throw new Error(`Swig role changed for channel ${channelId}; expected ${progress.swigRoleId}, active ${this.sessionRoleId}`);
253
- }
254
- return this.sessionSigner;
255
- }
256
- async ensureSessionSignerForOpen(input) {
257
- if (this.sessionSigner && !this.isSessionExpired()) {
258
- return {
259
- signer: this.sessionSigner,
260
- ...(this.sessionOpenTx ? { openTx: this.sessionOpenTx } : {}),
261
- ...(this.sessionRoleId !== null ? { swigRoleId: this.sessionRoleId } : {}),
262
- ...(this.sessionStartedAtMs !== null ? { createdAtMs: this.sessionStartedAtMs } : {}),
263
- };
264
- }
265
- const existingResult = this.wallet.getSessionKey ? await this.wallet.getSessionKey() : null;
266
- if (existingResult) {
267
- const existing = normalizeSessionSignerState(existingResult, 'getSessionKey');
268
- // Reuse only when wallet can prove when this session actually started.
269
- if (existing.createdAtMs !== undefined) {
270
- this.setSessionState(existing);
271
- return existing;
272
- }
273
- if (!this.wallet.createSessionKey) {
274
- throw new Error('Swig wallet getSessionKey() must include `createdAt` when createSessionKey() is unavailable, so session TTL can be validated safely');
275
- }
276
- }
277
- if (!this.wallet.createSessionKey) {
278
- throw new Error('Swig wallet must implement createSessionKey() or getSessionKey() to use SwigSessionAuthorizer');
279
- }
280
- const createdResult = await this.wallet.createSessionKey({
281
- ttlSeconds: this.policy.ttlSeconds,
282
- ...(this.policy.spendLimit ? { spendLimit: this.policy.spendLimit } : {}),
283
- ...(this.policy.depositLimit ? { depositLimit: this.policy.depositLimit } : {}),
284
- channelId: input.channelId,
285
- channelProgram: input.channelProgram,
286
- network: input.network,
287
- recipient: input.recipient,
288
- });
289
- const created = normalizeSessionSignerState(createdResult, 'createSessionKey');
290
- const resolvedCreated = {
291
- ...created,
292
- createdAtMs: created.createdAtMs ?? Date.now(),
293
- };
294
- this.setSessionState(resolvedCreated);
295
- return resolvedCreated;
296
- }
297
- async ensureSwigInstalled() {
298
- if (this.swigLoaded) {
299
- return;
300
- }
301
- try {
302
- const swigPackageName = '@swig-wallet/kit';
303
- const module = (await import(swigPackageName));
304
- if (typeof module.fetchSwig !== 'function') {
305
- throw new Error('Installed `@swig-wallet/kit` does not export fetchSwig() at runtime');
306
- }
307
- this.swigModule = {
308
- fetchSwig: module.fetchSwig,
309
- };
310
- this.swigLoaded = true;
311
- }
312
- catch {
313
- throw new Error('SwigSessionAuthorizer requires the optional dependency `@swig-wallet/kit`. Install it with `npm install @swig-wallet/kit` to use `swig_session` mode.');
314
- }
315
- }
316
- isSessionExpired() {
317
- if (this.sessionStartedAtMs === null) {
318
- return true;
319
- }
320
- return Date.now() > this.sessionStartedAtMs + this.policy.ttlSeconds * 1000;
321
- }
322
- getSessionExpiresAt() {
323
- const start = this.sessionStartedAtMs ?? Date.now();
324
- return new Date(start + this.policy.ttlSeconds * 1000).toISOString();
325
- }
326
- async resolveOpenTx(input, session) {
327
- if (!this.buildOpenTx) {
328
- if (!session.openTx) {
329
- throw new Error('SwigSessionAuthorizer requires `buildOpenTx` or a session setup result that includes `openTx` from `createSessionKey()`/`getSessionKey()`');
330
- }
331
- return session.openTx;
332
- }
333
- return await this.buildOpenTx(input);
334
- }
335
- async resolveTopupTx(input) {
336
- if (!this.buildTopupTx) {
337
- throw new Error('SwigSessionAuthorizer requires `buildTopupTx` to authorize topup requests');
338
- }
339
- return await this.buildTopupTx(input);
340
- }
341
- async resolveCloseTx(input) {
342
- if (!this.buildCloseTx) {
343
- return undefined;
344
- }
345
- return await this.buildCloseTx(input);
346
- }
347
- setSessionState(state) {
348
- this.sessionSigner = state.signer;
349
- this.sessionStartedAtMs = state.createdAtMs ?? Date.now();
350
- this.sessionOpenTx = state.openTx ?? null;
351
- this.sessionRoleId = state.swigRoleId ?? this.wallet.swigRoleId ?? null;
352
- this.validatedPolicyForSessionSigner = null;
353
- }
354
- resolveRpcUrl(network) {
355
- return this.rpcUrl ?? DEFAULT_RPC_URLS[network] ?? DEFAULT_RPC_URLS['mainnet-beta'];
356
- }
357
- async assertPolicyAppliedOnChain(input, session) {
358
- // Cache by delegated signer to avoid repeating RPC lookups on every open.
359
- if (this.validatedPolicyForSessionSigner === session.signer.address) {
360
- return;
361
- }
362
- if (!this.wallet.swigAddress) {
363
- throw new Error('Swig wallet adapter must provide `swigAddress` to validate on-chain session policy limits');
364
- }
365
- const swigModule = this.swigModule;
366
- if (!swigModule) {
367
- throw new Error('Swig SDK was not loaded before on-chain validation');
368
- }
369
- const rpcUrl = this.resolveRpcUrl(input.network);
370
- const rpc = createSolanaRpc(rpcUrl);
371
- const swig = await swigModule.fetchSwig(rpc, this.wallet.swigAddress);
372
- const role = this.resolveSessionRole(swig, session);
373
- const actions = role.actions;
374
- if (!actions) {
375
- throw new Error(`Swig role ${role.id} does not expose action metadata for policy validation`);
376
- }
377
- this.assertRoleAllowsProgram(actions, input.channelProgram, role.id);
378
- const onChainSpendLimit = this.resolveOnChainSpendLimit(actions, input);
379
- this.assertLimitAtMostPolicy(onChainSpendLimit, this.spendLimit, 'spendLimit', role.id, input.asset);
380
- this.assertLimitAtMostPolicy(onChainSpendLimit, this.depositLimit, 'depositLimit', role.id, input.asset);
381
- this.sessionRoleId = role.id;
382
- this.validatedPolicyForSessionSigner = session.signer.address;
383
- }
384
- resolveSessionRole(swig, session) {
385
- // Prefer explicit role binding, then validate it against session key lookup.
386
- const preferredRoleId = session.swigRoleId ?? this.sessionRoleId ?? this.wallet.swigRoleId;
387
- if (preferredRoleId !== undefined && preferredRoleId !== null && swig.findRoleById) {
388
- const roleById = swig.findRoleById(preferredRoleId);
389
- if (roleById) {
390
- if (swig.findRoleBySessionKey) {
391
- const roleBySessionKey = swig.findRoleBySessionKey(session.signer.address);
392
- if (!roleBySessionKey) {
393
- throw new Error(`Unable to locate a Swig role for delegated session key ${session.signer.address}`);
394
- }
395
- if (roleBySessionKey.id !== roleById.id) {
396
- throw new Error(`Swig role ${preferredRoleId} does not match delegated session key role ${roleBySessionKey.id}`);
397
- }
398
- }
399
- return roleById;
400
- }
401
- throw new Error(`Unable to locate Swig role ${preferredRoleId} for session key ${session.signer.address}`);
402
- }
403
- if (!swig.findRoleBySessionKey) {
404
- throw new Error('Swig account object does not expose findRoleBySessionKey() required for policy validation');
405
- }
406
- const roleBySessionKey = swig.findRoleBySessionKey(session.signer.address);
407
- if (!roleBySessionKey) {
408
- throw new Error(`Unable to locate a Swig role for delegated session key ${session.signer.address}`);
409
- }
410
- return roleBySessionKey;
411
- }
412
- assertRoleAllowsProgram(actions, channelProgram, roleId) {
413
- if (!actions.canUseProgram) {
414
- return;
415
- }
416
- if (!actions.canUseProgram(channelProgram)) {
417
- throw new Error(`Swig role ${roleId} does not allow channel program ${channelProgram}`);
418
- }
419
- }
420
- resolveOnChainSpendLimit(actions, input) {
421
- if (input.asset.kind === 'spl') {
422
- if (!input.asset.mint) {
423
- throw new Error('asset.mint is required for SPL session policy validation');
424
- }
425
- if (!actions.tokenSpendLimit) {
426
- throw new Error('Swig role does not expose tokenSpendLimit() for SPL policy validation');
427
- }
428
- return actions.tokenSpendLimit(input.asset.mint);
429
- }
430
- if (!actions.solSpendLimit) {
431
- throw new Error('Swig role does not expose solSpendLimit() for SOL policy validation');
432
- }
433
- return actions.solSpendLimit();
434
- }
435
- assertLimitAtMostPolicy(onChainLimit, policyLimit, field, roleId, asset) {
436
- if (policyLimit === undefined) {
437
- return;
438
- }
439
- if (onChainLimit === null) {
440
- throw new Error(`Swig role ${roleId} has uncapped ${asset.kind.toUpperCase()} spending, but policy ${field}=${policyLimit.toString()} requires an on-chain cap`);
441
- }
442
- if (onChainLimit > policyLimit) {
443
- throw new Error(`Swig role ${roleId} on-chain limit ${onChainLimit.toString()} exceeds policy ${field}=${policyLimit.toString()}`);
444
- }
445
- }
446
- }
447
- function normalizeSessionSignerState(value, source) {
448
- // Backward compatibility: some wallet adapters return a signer directly.
449
- if (isSignerLike(value)) {
450
- return { signer: value };
451
- }
452
- if (!value || typeof value !== 'object') {
453
- throw new Error(`Swig wallet ${source}() must return a signer or an object containing { signer }`);
454
- }
455
- const signer = value.signer;
456
- if (!isSignerLike(signer)) {
457
- throw new Error(`Swig wallet ${source}() returned an invalid signer`);
458
- }
459
- const openTx = value.openTx;
460
- if (openTx !== undefined && typeof openTx !== 'string') {
461
- throw new Error(`Swig wallet ${source}() returned invalid openTx; expected string`);
462
- }
463
- const swigRoleIdRaw = value.swigRoleId;
464
- let swigRoleId;
465
- if (swigRoleIdRaw !== undefined) {
466
- if (typeof swigRoleIdRaw !== 'number') {
467
- throw new Error(`Swig wallet ${source}() returned invalid swigRoleId; expected a non-negative integer`);
468
- }
469
- if (!Number.isInteger(swigRoleIdRaw) || swigRoleIdRaw < 0) {
470
- throw new Error(`Swig wallet ${source}() returned invalid swigRoleId; expected a non-negative integer`);
471
- }
472
- swigRoleId = swigRoleIdRaw;
473
- }
474
- const createdAtRaw = value.createdAt;
475
- let createdAtMs;
476
- if (createdAtRaw !== undefined) {
477
- createdAtMs = parseCreatedAt(createdAtRaw, source);
478
- }
479
- return {
480
- signer,
481
- ...(openTx !== undefined && openTx.trim().length > 0 ? { openTx } : {}),
482
- ...(swigRoleId !== undefined ? { swigRoleId } : {}),
483
- ...(createdAtMs !== undefined ? { createdAtMs } : {}),
484
- };
485
- }
486
- function isSignerLike(value) {
487
- return !!value && typeof value === 'object' && typeof value.address === 'string';
488
- }
489
- function parseCreatedAt(value, source) {
490
- const unixMs = value instanceof Date
491
- ? value.getTime()
492
- : typeof value === 'number'
493
- ? value
494
- : typeof value === 'string'
495
- ? Date.parse(value)
496
- : Number.NaN;
497
- if (!Number.isFinite(unixMs) || unixMs <= 0) {
498
- throw new Error(`Swig wallet ${source}() returned invalid createdAt; expected Date, unix milliseconds, or ISO timestamp string`);
499
- }
500
- return unixMs;
501
- }
502
- function parseNonNegativeAmount(value, field) {
503
- let amount;
504
- try {
505
- amount = BigInt(value);
506
- }
507
- catch {
508
- throw new Error(`${field} must be a valid integer string`);
509
- }
510
- if (amount < 0n) {
511
- throw new Error(`${field} must be non-negative`);
512
- }
513
- return amount;
514
- }
515
- function normalizeChainId(network) {
516
- const normalized = network.trim();
517
- if (normalized.length === 0) {
518
- throw new Error('network must be a non-empty string');
519
- }
520
- return normalized.startsWith('solana:') ? normalized : `solana:${normalized}`;
521
- }
522
- //# sourceMappingURL=SwigSessionAuthorizer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SwigSessionAuthorizer.js","sourceRoot":"","sources":["../../../src/session/authorizers/SwigSessionAuthorizer.ts"],"names":[],"mappings":"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"}
@@ -1,36 +0,0 @@
1
- import type { MessagePartialSigner } from '@solana/kit';
2
- import { type AuthorizeCloseInput, type AuthorizedClose, type AuthorizedOpen, type AuthorizedTopup, type AuthorizedUpdate, type AuthorizeOpenInput, type AuthorizerCapabilities, type AuthorizeTopupInput, type AuthorizeUpdateInput, type SessionAuthorizer } from '../Types.js';
3
- export interface UnboundedAuthorizerParameters {
4
- allowedPrograms?: string[];
5
- buildCloseTx?: (input: AuthorizeCloseInput) => Promise<string> | string;
6
- buildOpenTx?: (input: AuthorizeOpenInput) => Promise<string> | string;
7
- buildTopupTx?: (input: AuthorizeTopupInput) => Promise<string> | string;
8
- expiresAt?: string;
9
- requiresInteractiveApproval?: Partial<AuthorizerCapabilities['requiresInteractiveApproval']>;
10
- signer: MessagePartialSigner;
11
- }
12
- export declare class UnboundedAuthorizer implements SessionAuthorizer {
13
- private readonly signer;
14
- private readonly allowedPrograms?;
15
- private readonly expiresAt?;
16
- private readonly expiresAtUnixMs?;
17
- private readonly buildOpenTx?;
18
- private readonly buildTopupTx?;
19
- private readonly buildCloseTx?;
20
- private readonly channels;
21
- private readonly capabilities;
22
- constructor(parameters: UnboundedAuthorizerParameters);
23
- getMode(): "regular_unbounded";
24
- getCapabilities(): AuthorizerCapabilities;
25
- authorizeOpen(input: AuthorizeOpenInput): Promise<AuthorizedOpen>;
26
- authorizeUpdate(input: AuthorizeUpdateInput): Promise<AuthorizedUpdate>;
27
- authorizeTopup(input: AuthorizeTopupInput): Promise<AuthorizedTopup>;
28
- authorizeClose(input: AuthorizeCloseInput): Promise<AuthorizedClose>;
29
- private assertNotExpired;
30
- private assertProgramAllowed;
31
- private assertMonotonic;
32
- private resolveOpenTx;
33
- private resolveTopupTx;
34
- private resolveCloseTx;
35
- }
36
- //# sourceMappingURL=UnboundedAuthorizer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UnboundedAuthorizer.d.ts","sourceRoot":"","sources":["../../../src/session/authorizers/UnboundedAuthorizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,EACH,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACzB,MAAM,aAAa,CAAC;AAQrB,MAAM,WAAW,6BAA6B;IAC1C,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IACxE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IACtE,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAC7F,MAAM,EAAE,oBAAoB,CAAC;CAChC;AAED,qBAAa,mBAAoB,YAAW,iBAAiB;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAc;IAC/C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAA0D;IACvF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAA2D;IACzF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAA2D;IACzF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsC;IAC/D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyB;gBAE1C,UAAU,EAAE,6BAA6B;IA0BrD,OAAO,IACI,mBAAmB;IAG9B,eAAe,IAAI,sBAAsB;IAInC,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC;IAiCjE,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA+BvE,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC;IAUpE,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC;IAoC1E,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,eAAe;YA2BT,aAAa;YAQb,cAAc;YAQd,cAAc;CAO/B"}