@solana/mpp 0.1.1 → 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 (91) hide show
  1. package/dist/Methods.d.ts +1 -213
  2. package/dist/Methods.d.ts.map +1 -1
  3. package/dist/Methods.js +1 -158
  4. package/dist/Methods.js.map +1 -1
  5. package/dist/client/Methods.d.ts +0 -2
  6. package/dist/client/Methods.d.ts.map +1 -1
  7. package/dist/client/Methods.js +0 -2
  8. package/dist/client/Methods.js.map +1 -1
  9. package/dist/client/index.d.ts +0 -1
  10. package/dist/client/index.d.ts.map +1 -1
  11. package/dist/client/index.js +0 -1
  12. package/dist/client/index.js.map +1 -1
  13. package/dist/index.d.ts +0 -3
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +0 -2
  16. package/dist/index.js.map +1 -1
  17. package/dist/server/Charge.d.ts +2 -2
  18. package/dist/server/Charge.d.ts.map +1 -1
  19. package/dist/server/Charge.js +4 -0
  20. package/dist/server/Charge.js.map +1 -1
  21. package/dist/server/Methods.d.ts +0 -2
  22. package/dist/server/Methods.d.ts.map +1 -1
  23. package/dist/server/Methods.js +0 -2
  24. package/dist/server/Methods.js.map +1 -1
  25. package/dist/server/index.d.ts +0 -1
  26. package/dist/server/index.d.ts.map +1 -1
  27. package/dist/server/index.js +0 -1
  28. package/dist/server/index.js.map +1 -1
  29. package/package.json +1 -9
  30. package/src/Methods.ts +1 -171
  31. package/src/client/Methods.ts +0 -3
  32. package/src/client/index.ts +0 -1
  33. package/src/index.ts +0 -29
  34. package/src/server/Charge.ts +7 -2
  35. package/src/server/Methods.ts +0 -3
  36. package/src/server/index.ts +0 -1
  37. package/dist/client/Session.d.ts +0 -195
  38. package/dist/client/Session.d.ts.map +0 -1
  39. package/dist/client/Session.js +0 -411
  40. package/dist/client/Session.js.map +0 -1
  41. package/dist/server/Session.d.ts +0 -171
  42. package/dist/server/Session.d.ts.map +0 -1
  43. package/dist/server/Session.js +0 -430
  44. package/dist/server/Session.js.map +0 -1
  45. package/dist/session/ChannelStore.d.ts +0 -12
  46. package/dist/session/ChannelStore.d.ts.map +0 -1
  47. package/dist/session/ChannelStore.js +0 -88
  48. package/dist/session/ChannelStore.js.map +0 -1
  49. package/dist/session/Types.d.ts +0 -179
  50. package/dist/session/Types.d.ts.map +0 -1
  51. package/dist/session/Types.js +0 -2
  52. package/dist/session/Types.js.map +0 -1
  53. package/dist/session/Voucher.d.ts +0 -7
  54. package/dist/session/Voucher.d.ts.map +0 -1
  55. package/dist/session/Voucher.js +0 -118
  56. package/dist/session/Voucher.js.map +0 -1
  57. package/dist/session/authorizers/BudgetAuthorizer.d.ts +0 -90
  58. package/dist/session/authorizers/BudgetAuthorizer.d.ts.map +0 -1
  59. package/dist/session/authorizers/BudgetAuthorizer.js +0 -398
  60. package/dist/session/authorizers/BudgetAuthorizer.js.map +0 -1
  61. package/dist/session/authorizers/SwigSessionAuthorizer.d.ts +0 -104
  62. package/dist/session/authorizers/SwigSessionAuthorizer.d.ts.map +0 -1
  63. package/dist/session/authorizers/SwigSessionAuthorizer.js +0 -522
  64. package/dist/session/authorizers/SwigSessionAuthorizer.js.map +0 -1
  65. package/dist/session/authorizers/UnboundedAuthorizer.d.ts +0 -36
  66. package/dist/session/authorizers/UnboundedAuthorizer.d.ts.map +0 -1
  67. package/dist/session/authorizers/UnboundedAuthorizer.js +0 -204
  68. package/dist/session/authorizers/UnboundedAuthorizer.js.map +0 -1
  69. package/dist/session/authorizers/index.d.ts +0 -5
  70. package/dist/session/authorizers/index.d.ts.map +0 -1
  71. package/dist/session/authorizers/index.js +0 -5
  72. package/dist/session/authorizers/index.js.map +0 -1
  73. package/dist/session/authorizers/makeSessionAuthorizer.d.ts +0 -19
  74. package/dist/session/authorizers/makeSessionAuthorizer.d.ts.map +0 -1
  75. package/dist/session/authorizers/makeSessionAuthorizer.js +0 -72
  76. package/dist/session/authorizers/makeSessionAuthorizer.js.map +0 -1
  77. package/dist/session/index.d.ts +0 -5
  78. package/dist/session/index.d.ts.map +0 -1
  79. package/dist/session/index.js +0 -5
  80. package/dist/session/index.js.map +0 -1
  81. package/src/client/Session.ts +0 -630
  82. package/src/server/Session.ts +0 -687
  83. package/src/session/ChannelStore.ts +0 -128
  84. package/src/session/Types.ts +0 -189
  85. package/src/session/Voucher.ts +0 -158
  86. package/src/session/authorizers/BudgetAuthorizer.ts +0 -574
  87. package/src/session/authorizers/SwigSessionAuthorizer.ts +0 -767
  88. package/src/session/authorizers/UnboundedAuthorizer.ts +0 -284
  89. package/src/session/authorizers/index.ts +0 -4
  90. package/src/session/authorizers/makeSessionAuthorizer.ts +0 -104
  91. package/src/session/index.ts +0 -4
@@ -1,398 +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 `regular_budget` mode.
6
- *
7
- * Budget limits are fail-closed against a concrete on-chain Swig role:
8
- * - `authorizeOpen` reads role constraints from chain and clamps local limits.
9
- * - `authorizeUpdate`/`authorizeTopup`/`authorizeClose` require open-time state.
10
- * - Program access and spend caps are validated from Swig role actions.
11
- */
12
- export class BudgetAuthorizer {
13
- signer;
14
- maxCumulativeAmount;
15
- maxDepositAmount;
16
- validUntil;
17
- validUntilUnixMs;
18
- allowedPrograms;
19
- swig;
20
- buildOpenTx;
21
- buildTopupTx;
22
- buildCloseTx;
23
- channels = new Map();
24
- capabilities;
25
- swigLoaded = false;
26
- swigModule = null;
27
- constructor(parameters) {
28
- if (!parameters.swig) {
29
- throw new Error('BudgetAuthorizer requires `swig` configuration with on-chain role details');
30
- }
31
- if (!Number.isInteger(parameters.swig.swigRoleId) || parameters.swig.swigRoleId < 0) {
32
- throw new Error('swig.swigRoleId must be a non-negative integer');
33
- }
34
- if (parameters.swig.swigAddress.trim().length === 0) {
35
- throw new Error('swig.swigAddress must be a non-empty string');
36
- }
37
- this.signer = parameters.signer;
38
- this.maxCumulativeAmount = parseNonNegativeAmount(parameters.maxCumulativeAmount, 'maxCumulativeAmount');
39
- this.maxDepositAmount =
40
- parameters.maxDepositAmount !== undefined
41
- ? parseNonNegativeAmount(parameters.maxDepositAmount, 'maxDepositAmount')
42
- : undefined;
43
- this.validUntil = parameters.validUntil;
44
- this.validUntilUnixMs =
45
- parameters.validUntil !== undefined ? parseIsoTimestamp(parameters.validUntil, 'validUntil') : undefined;
46
- this.allowedPrograms = parameters.allowedPrograms ? new Set(parameters.allowedPrograms) : undefined;
47
- this.swig = {
48
- swigAddress: parameters.swig.swigAddress,
49
- swigRoleId: parameters.swig.swigRoleId,
50
- ...(parameters.swig.rpcUrl ? { rpcUrl: parameters.swig.rpcUrl } : {}),
51
- };
52
- if (parameters.swigModule) {
53
- this.swigModule = parameters.swigModule;
54
- this.swigLoaded = true;
55
- }
56
- this.buildOpenTx = parameters.buildOpenTx;
57
- this.buildTopupTx = parameters.buildTopupTx;
58
- this.buildCloseTx = parameters.buildCloseTx;
59
- this.capabilities = {
60
- mode: 'regular_budget',
61
- ...(this.validUntil ? { expiresAt: this.validUntil } : {}),
62
- maxCumulativeAmount: this.maxCumulativeAmount.toString(),
63
- ...(parameters.maxDepositAmount ? { maxDepositAmount: parameters.maxDepositAmount } : {}),
64
- ...(parameters.allowedPrograms ? { allowedPrograms: [...parameters.allowedPrograms] } : {}),
65
- allowedActions: ['open', 'update', 'topup', 'close'],
66
- requiresInteractiveApproval: {
67
- close: false,
68
- open: false,
69
- topup: parameters.requireApprovalOnTopup ?? false,
70
- update: false,
71
- },
72
- };
73
- }
74
- getMode() {
75
- return 'regular_budget';
76
- }
77
- getCapabilities() {
78
- return this.capabilities;
79
- }
80
- async authorizeOpen(input) {
81
- this.assertNotExpired();
82
- this.assertProgramAllowed(input.channelProgram);
83
- // Pin this channel's effective limits from on-chain role metadata.
84
- const onChainConstraints = await this.resolveOnChainConstraints(input);
85
- const deposit = parseNonNegativeAmount(input.depositAmount, 'depositAmount');
86
- const maxDepositAmount = onChainConstraints.maxDepositAmount ?? this.maxDepositAmount;
87
- if (maxDepositAmount !== undefined && deposit > maxDepositAmount) {
88
- throw new Error(`Open deposit exceeds maxDepositAmount (${maxDepositAmount.toString()})`);
89
- }
90
- const openTx = await this.resolveOpenTx(input);
91
- const voucher = await signVoucher(this.signer, {
92
- channelId: input.channelId,
93
- cumulativeAmount: '0',
94
- meter: input.pricing?.meter ?? 'session',
95
- payer: this.signer.address,
96
- recipient: input.recipient,
97
- sequence: 0,
98
- units: '0',
99
- ...(this.validUntil ? { expiresAt: this.validUntil } : {}),
100
- chainId: normalizeChainId(input.network),
101
- channelProgram: input.channelProgram,
102
- serverNonce: input.serverNonce,
103
- });
104
- this.channels.set(input.channelId, {
105
- deposited: deposit,
106
- lastCumulative: 0n,
107
- lastSequence: 0,
108
- maxCumulativeAmount: onChainConstraints.maxCumulativeAmount ?? this.maxCumulativeAmount,
109
- ...(maxDepositAmount !== undefined ? { maxDepositAmount } : {}),
110
- swigRoleId: onChainConstraints.swigRoleId,
111
- });
112
- return {
113
- capabilities: this.getCapabilities(),
114
- openTx,
115
- voucher,
116
- ...(this.validUntil ? { expiresAt: this.validUntil } : {}),
117
- };
118
- }
119
- async authorizeUpdate(input) {
120
- this.assertNotExpired();
121
- this.assertProgramAllowed(input.channelProgram);
122
- const cumulativeAmount = parseNonNegativeAmount(input.cumulativeAmount, 'cumulativeAmount');
123
- const progress = this.channels.get(input.channelId);
124
- if (!progress) {
125
- throw new Error(`Unknown channel ${input.channelId}. Call authorizeOpen before authorizeUpdate.`);
126
- }
127
- const maxCumulativeAmount = progress.maxCumulativeAmount;
128
- if (cumulativeAmount > maxCumulativeAmount) {
129
- throw new Error(`Cumulative amount exceeds maxCumulativeAmount (${maxCumulativeAmount.toString()})`);
130
- }
131
- this.assertMonotonic(input.channelId, input.sequence, cumulativeAmount, progress);
132
- const voucher = await signVoucher(this.signer, {
133
- channelId: input.channelId,
134
- cumulativeAmount: cumulativeAmount.toString(),
135
- meter: input.meter,
136
- payer: this.signer.address,
137
- recipient: input.recipient,
138
- sequence: input.sequence,
139
- units: input.units,
140
- ...(this.validUntil ? { expiresAt: this.validUntil } : {}),
141
- chainId: normalizeChainId(input.network),
142
- channelProgram: input.channelProgram,
143
- serverNonce: input.serverNonce,
144
- });
145
- this.channels.set(input.channelId, {
146
- deposited: progress.deposited,
147
- lastCumulative: cumulativeAmount,
148
- lastSequence: input.sequence,
149
- maxCumulativeAmount,
150
- ...(progress.maxDepositAmount !== undefined ? { maxDepositAmount: progress.maxDepositAmount } : {}),
151
- ...(progress.swigRoleId !== undefined ? { swigRoleId: progress.swigRoleId } : {}),
152
- });
153
- return { voucher };
154
- }
155
- async authorizeTopup(input) {
156
- this.assertNotExpired();
157
- this.assertProgramAllowed(input.channelProgram);
158
- const additionalAmount = parseNonNegativeAmount(input.additionalAmount, 'additionalAmount');
159
- const progress = this.channels.get(input.channelId);
160
- if (!progress) {
161
- throw new Error(`Unknown channel ${input.channelId}. Call authorizeOpen before authorizeTopup.`);
162
- }
163
- const nextDeposited = progress.deposited + additionalAmount;
164
- const maxDepositAmount = progress.maxDepositAmount ?? this.maxDepositAmount;
165
- if (maxDepositAmount !== undefined && nextDeposited > maxDepositAmount) {
166
- throw new Error(`Topup exceeds maxDepositAmount (${maxDepositAmount.toString()})`);
167
- }
168
- const topupTx = await this.resolveTopupTx(input);
169
- this.channels.set(input.channelId, {
170
- deposited: nextDeposited,
171
- lastCumulative: progress.lastCumulative,
172
- lastSequence: progress.lastSequence,
173
- maxCumulativeAmount: progress.maxCumulativeAmount,
174
- ...(maxDepositAmount !== undefined ? { maxDepositAmount } : {}),
175
- ...(progress.swigRoleId !== undefined ? { swigRoleId: progress.swigRoleId } : {}),
176
- });
177
- return { topupTx };
178
- }
179
- async authorizeClose(input) {
180
- this.assertNotExpired();
181
- this.assertProgramAllowed(input.channelProgram);
182
- const finalCumulativeAmount = parseNonNegativeAmount(input.finalCumulativeAmount, 'finalCumulativeAmount');
183
- const progress = this.channels.get(input.channelId);
184
- if (!progress) {
185
- throw new Error(`Unknown channel ${input.channelId}. Call authorizeOpen before authorizeClose.`);
186
- }
187
- const maxCumulativeAmount = progress.maxCumulativeAmount;
188
- if (finalCumulativeAmount > maxCumulativeAmount) {
189
- throw new Error(`Final cumulative amount exceeds maxCumulativeAmount (${maxCumulativeAmount.toString()})`);
190
- }
191
- this.assertMonotonic(input.channelId, input.sequence, finalCumulativeAmount, progress);
192
- const voucher = await signVoucher(this.signer, {
193
- channelId: input.channelId,
194
- cumulativeAmount: finalCumulativeAmount.toString(),
195
- meter: 'close',
196
- payer: this.signer.address,
197
- recipient: input.recipient,
198
- sequence: input.sequence,
199
- units: '0',
200
- ...(this.validUntil ? { expiresAt: this.validUntil } : {}),
201
- chainId: normalizeChainId(input.network),
202
- channelProgram: input.channelProgram,
203
- serverNonce: input.serverNonce,
204
- });
205
- const closeTx = await this.resolveCloseTx(input);
206
- this.channels.set(input.channelId, {
207
- deposited: progress.deposited,
208
- lastCumulative: finalCumulativeAmount,
209
- lastSequence: input.sequence,
210
- maxCumulativeAmount,
211
- ...(progress.maxDepositAmount !== undefined ? { maxDepositAmount: progress.maxDepositAmount } : {}),
212
- ...(progress.swigRoleId !== undefined ? { swigRoleId: progress.swigRoleId } : {}),
213
- });
214
- return {
215
- voucher,
216
- ...(closeTx ? { closeTx } : {}),
217
- };
218
- }
219
- assertNotExpired() {
220
- if (this.validUntilUnixMs !== undefined && Date.now() > this.validUntilUnixMs) {
221
- throw new Error('Budget authorizer policy has expired');
222
- }
223
- }
224
- assertProgramAllowed(channelProgram) {
225
- if (!this.allowedPrograms) {
226
- return;
227
- }
228
- if (!this.allowedPrograms.has(channelProgram)) {
229
- throw new Error(`Channel program is not allowed: ${channelProgram}`);
230
- }
231
- }
232
- assertMonotonic(channelId, sequence, cumulativeAmount, progress) {
233
- if (!Number.isInteger(sequence) || sequence < 0) {
234
- throw new Error('Sequence must be a non-negative integer');
235
- }
236
- if (!progress) {
237
- return;
238
- }
239
- if (sequence <= progress.lastSequence) {
240
- throw new Error(`Sequence must increase for channel ${channelId}. Last=${progress.lastSequence}, received=${sequence}`);
241
- }
242
- if (cumulativeAmount < progress.lastCumulative) {
243
- throw new Error(`Cumulative amount must not decrease for channel ${channelId}. Last=${progress.lastCumulative.toString()}, received=${cumulativeAmount.toString()}`);
244
- }
245
- }
246
- async resolveOnChainConstraints(input) {
247
- // Budget mode requires Swig action metadata at runtime.
248
- await this.ensureSwigInstalled();
249
- const swigModule = this.swigModule;
250
- if (!swigModule) {
251
- throw new Error('Swig SDK was not loaded before budget role validation');
252
- }
253
- const rpc = createSolanaRpc(this.resolveRpcUrl(input.network));
254
- const swig = await swigModule.fetchSwig(rpc, this.swig.swigAddress);
255
- const role = this.resolveSwigRole(swig);
256
- const actions = role.actions;
257
- if (!actions) {
258
- throw new Error(`Swig role ${role.id} does not expose action metadata for budget validation`);
259
- }
260
- if (!actions.canUseProgram) {
261
- throw new Error(`Swig role ${role.id} does not expose canUseProgram() for program authorization checks`);
262
- }
263
- if (!actions.canUseProgram(input.channelProgram)) {
264
- throw new Error(`Swig role ${role.id} does not allow channel program ${input.channelProgram}`);
265
- }
266
- const onChainLimit = this.resolveOnChainSpendLimit(actions, input);
267
- if (onChainLimit === null) {
268
- throw new Error(`Swig role ${role.id} has uncapped ${input.asset.kind.toUpperCase()} spending; BudgetAuthorizer requires an on-chain spend cap`);
269
- }
270
- return {
271
- maxCumulativeAmount: minBigInt(this.maxCumulativeAmount, onChainLimit),
272
- maxDepositAmount: this.maxDepositAmount !== undefined ? minBigInt(this.maxDepositAmount, onChainLimit) : onChainLimit,
273
- swigRoleId: role.id,
274
- };
275
- }
276
- resolveSwigRole(swig) {
277
- // Role ID is required by construction, so this path is deterministic.
278
- if (!swig.findRoleById) {
279
- throw new Error('Swig account object does not expose findRoleById() required for configured swigRoleId');
280
- }
281
- const role = swig.findRoleById(this.swig.swigRoleId);
282
- if (!role) {
283
- throw new Error(`Unable to locate Swig role ${this.swig.swigRoleId} for signer ${this.signer.address}`);
284
- }
285
- if (swig.findRolesByEd25519SignerPk) {
286
- const signerRoles = swig.findRolesByEd25519SignerPk(this.signer.address);
287
- const roleMatchesSigner = signerRoles.some(signerRole => signerRole.id === role.id);
288
- if (roleMatchesSigner) {
289
- return role;
290
- }
291
- }
292
- if (swig.findRoleBySessionKey) {
293
- const sessionRole = swig.findRoleBySessionKey(this.signer.address);
294
- if (sessionRole?.id === role.id) {
295
- return role;
296
- }
297
- }
298
- const authorityAddresses = collectAuthorityAddresses(role.authority);
299
- if (authorityAddresses.includes(this.signer.address)) {
300
- return role;
301
- }
302
- throw new Error(`Configured Swig role ${role.id} does not match signer ${this.signer.address}`);
303
- }
304
- resolveOnChainSpendLimit(actions, input) {
305
- if (input.asset.kind === 'spl') {
306
- if (!input.asset.mint) {
307
- throw new Error('asset.mint is required for SPL budget validation');
308
- }
309
- if (!actions.tokenSpendLimit) {
310
- throw new Error('Swig role does not expose tokenSpendLimit() for SPL budget validation');
311
- }
312
- return actions.tokenSpendLimit(input.asset.mint);
313
- }
314
- if (!actions.solSpendLimit) {
315
- throw new Error('Swig role does not expose solSpendLimit() for SOL budget validation');
316
- }
317
- return actions.solSpendLimit();
318
- }
319
- resolveRpcUrl(network) {
320
- return this.swig.rpcUrl ?? DEFAULT_RPC_URLS[network] ?? DEFAULT_RPC_URLS['mainnet-beta'];
321
- }
322
- async ensureSwigInstalled() {
323
- if (this.swigLoaded) {
324
- return;
325
- }
326
- try {
327
- const swigPackageName = '@swig-wallet/kit';
328
- const module = (await import(swigPackageName));
329
- if (typeof module.fetchSwig !== 'function') {
330
- throw new Error('Installed `@swig-wallet/kit` does not export fetchSwig() at runtime');
331
- }
332
- this.swigModule = {
333
- fetchSwig: module.fetchSwig,
334
- };
335
- this.swigLoaded = true;
336
- }
337
- catch {
338
- throw new Error('BudgetAuthorizer with `swig` config requires optional dependency `@swig-wallet/kit`. Install it with `npm install @swig-wallet/kit`.');
339
- }
340
- }
341
- async resolveOpenTx(input) {
342
- if (!this.buildOpenTx) {
343
- throw new Error('BudgetAuthorizer requires `buildOpenTx` to authorize open requests');
344
- }
345
- return await this.buildOpenTx(input);
346
- }
347
- async resolveTopupTx(input) {
348
- if (!this.buildTopupTx) {
349
- throw new Error('BudgetAuthorizer requires `buildTopupTx` to authorize topup requests');
350
- }
351
- return await this.buildTopupTx(input);
352
- }
353
- async resolveCloseTx(input) {
354
- if (!this.buildCloseTx) {
355
- return undefined;
356
- }
357
- return await this.buildCloseTx(input);
358
- }
359
- }
360
- function collectAuthorityAddresses(authority) {
361
- if (!authority) {
362
- return [];
363
- }
364
- // Some Swig authority variants expose only one of these fields.
365
- const candidates = [authority.publicKey, authority.ed25519PublicKey, authority.sessionKey];
366
- return candidates.map(candidate => candidate?.toBase58?.()).filter((candidate) => !!candidate);
367
- }
368
- function parseNonNegativeAmount(value, field) {
369
- let amount;
370
- try {
371
- amount = BigInt(value);
372
- }
373
- catch {
374
- throw new Error(`${field} must be a valid integer string`);
375
- }
376
- if (amount < 0n) {
377
- throw new Error(`${field} must be non-negative`);
378
- }
379
- return amount;
380
- }
381
- function parseIsoTimestamp(value, field) {
382
- const unixMs = Date.parse(value);
383
- if (Number.isNaN(unixMs)) {
384
- throw new Error(`${field} must be a valid ISO timestamp`);
385
- }
386
- return unixMs;
387
- }
388
- function minBigInt(a, b) {
389
- return a <= b ? a : b;
390
- }
391
- function normalizeChainId(network) {
392
- const normalized = network.trim();
393
- if (normalized.length === 0) {
394
- throw new Error('network must be a non-empty string');
395
- }
396
- return normalized.startsWith('solana:') ? normalized : `solana:${normalized}`;
397
- }
398
- //# sourceMappingURL=BudgetAuthorizer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BudgetAuthorizer.js","sourceRoot":"","sources":["../../../src/session/authorizers/BudgetAuthorizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAA6B,MAAM,aAAa,CAAC;AAEzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAatD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AA+D5C;;;;;;;GAOG;AACH,MAAM,OAAO,gBAAgB;IACR,MAAM,CAAuB;IAC7B,mBAAmB,CAAS;IAC5B,gBAAgB,CAAU;IAC1B,UAAU,CAAU;IACpB,gBAAgB,CAAU;IAC1B,eAAe,CAAe;IAC9B,IAAI,CAAwB;IAC5B,WAAW,CAA2D;IACtE,YAAY,CAA4D;IACxE,YAAY,CAA4D;IACxE,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC9C,YAAY,CAAyB;IAC9C,UAAU,GAAG,KAAK,CAAC;IACnB,UAAU,GAA4B,IAAI,CAAC;IAEnD,YAAY,UAAsC;QAC9C,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;QACjG,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YAClF,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,mBAAmB,GAAG,sBAAsB,CAAC,UAAU,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,CAAC;QACzG,IAAI,CAAC,gBAAgB;YACjB,UAAU,CAAC,gBAAgB,KAAK,SAAS;gBACrC,CAAC,CAAC,sBAAsB,CAAC,UAAU,CAAC,gBAAgB,EAAE,kBAAkB,CAAC;gBACzE,CAAC,CAAC,SAAS,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;QACxC,IAAI,CAAC,gBAAgB;YACjB,UAAU,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,UAAU,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7G,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpG,IAAI,CAAC,IAAI,GAAG;YACR,WAAW,EAAE,UAAU,CAAC,IAAI,CAAC,WAAW;YACxC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,UAAU;YACtC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxE,CAAC;QACF,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;YACxB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;YACxC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC;QAC1C,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;QAC5C,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;QAE5C,IAAI,CAAC,YAAY,GAAG;YAChB,IAAI,EAAE,gBAAgB;YACtB,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE;YACxD,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzF,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,GAAG,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3F,cAAc,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;YACpD,2BAA2B,EAAE;gBACzB,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,UAAU,CAAC,sBAAsB,IAAI,KAAK;gBACjD,MAAM,EAAE,KAAK;aAChB;SACJ,CAAC;IACN,CAAC;IAED,OAAO;QACH,OAAO,gBAAyB,CAAC;IACrC,CAAC;IAED,eAAe;QACX,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,KAAyB;QACzC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAEhD,mEAAmE;QACnE,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;QAEvE,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAC7E,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC;QACtF,IAAI,gBAAgB,KAAK,SAAS,IAAI,OAAO,GAAG,gBAAgB,EAAE,CAAC;YAC/D,MAAM,IAAI,KAAK,CAAC,0CAA0C,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC9F,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAE/C,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE;YAC3C,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,gBAAgB,EAAE,GAAG;YACrB,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,IAAI,SAAS;YACxC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;YAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ,EAAE,CAAC;YACX,KAAK,EAAE,GAAG;YACV,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC;YACxC,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,WAAW,EAAE,KAAK,CAAC,WAAW;SACjC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE;YAC/B,SAAS,EAAE,OAAO;YAClB,cAAc,EAAE,EAAE;YAClB,YAAY,EAAE,CAAC;YACf,mBAAmB,EAAE,kBAAkB,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB;YACvF,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,UAAU,EAAE,kBAAkB,CAAC,UAAU;SAC5C,CAAC,CAAC;QAEH,OAAO;YACH,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE;YACpC,MAAM;YACN,OAAO;YACP,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7D,CAAC;IACN,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,KAA2B;QAC7C,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAEhD,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,KAAK,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;QAE5F,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,SAAS,8CAA8C,CAAC,CAAC;QACtG,CAAC;QAED,MAAM,mBAAmB,GAAG,QAAQ,CAAC,mBAAmB,CAAC;QAEzD,IAAI,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,kDAAkD,mBAAmB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACzG,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAElF,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE;YAC3C,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,gBAAgB,EAAE,gBAAgB,CAAC,QAAQ,EAAE;YAC7C,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;YAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC;YACxC,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,WAAW,EAAE,KAAK,CAAC,WAAW;SACjC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE;YAC/B,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,cAAc,EAAE,gBAAgB;YAChC,YAAY,EAAE,KAAK,CAAC,QAAQ;YAC5B,mBAAmB;YACnB,GAAG,CAAC,QAAQ,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnG,GAAG,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpF,CAAC,CAAC;QAEH,OAAO,EAAE,OAAO,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAA0B;QAC3C,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAEhD,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,KAAK,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;QAC5F,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,SAAS,6CAA6C,CAAC,CAAC;QACrG,CAAC;QAED,MAAM,aAAa,GAAG,QAAQ,CAAC,SAAS,GAAG,gBAAgB,CAAC;QAC5D,MAAM,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC;QAE5E,IAAI,gBAAgB,KAAK,SAAS,IAAI,aAAa,GAAG,gBAAgB,EAAE,CAAC;YACrE,MAAM,IAAI,KAAK,CAAC,mCAAmC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACvF,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAEjD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE;YAC/B,SAAS,EAAE,aAAa;YACxB,cAAc,EAAE,QAAQ,CAAC,cAAc;YACvC,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB;YACjD,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,GAAG,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpF,CAAC,CAAC;QAEH,OAAO,EAAE,OAAO,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAA0B;QAC3C,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAEhD,MAAM,qBAAqB,GAAG,sBAAsB,CAAC,KAAK,CAAC,qBAAqB,EAAE,uBAAuB,CAAC,CAAC;QAE3G,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,SAAS,6CAA6C,CAAC,CAAC;QACrG,CAAC;QAED,MAAM,mBAAmB,GAAG,QAAQ,CAAC,mBAAmB,CAAC;QAEzD,IAAI,qBAAqB,GAAG,mBAAmB,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,wDAAwD,mBAAmB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC/G,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE,qBAAqB,EAAE,QAAQ,CAAC,CAAC;QAEvF,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE;YAC3C,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,gBAAgB,EAAE,qBAAqB,CAAC,QAAQ,EAAE;YAClD,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;YAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,KAAK,EAAE,GAAG;YACV,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC;YACxC,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,WAAW,EAAE,KAAK,CAAC,WAAW;SACjC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAEjD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE;YAC/B,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,cAAc,EAAE,qBAAqB;YACrC,YAAY,EAAE,KAAK,CAAC,QAAQ;YAC5B,mBAAmB;YACnB,GAAG,CAAC,QAAQ,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnG,GAAG,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpF,CAAC,CAAC;QAEH,OAAO;YACH,OAAO;YACP,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClC,CAAC;IACN,CAAC;IAEO,gBAAgB;QACpB,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC5D,CAAC;IACL,CAAC;IAEO,oBAAoB,CAAC,cAAsB;QAC/C,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACxB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,mCAAmC,cAAc,EAAE,CAAC,CAAC;QACzE,CAAC;IACL,CAAC;IAEO,eAAe,CACnB,SAAiB,EACjB,QAAgB,EAChB,gBAAwB,EACxB,QAAqC;QAErC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO;QACX,CAAC;QAED,IAAI,QAAQ,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CACX,sCAAsC,SAAS,UAAU,QAAQ,CAAC,YAAY,cAAc,QAAQ,EAAE,CACzG,CAAC;QACN,CAAC;QAED,IAAI,gBAAgB,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CACX,mDAAmD,SAAS,UAAU,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,gBAAgB,CAAC,QAAQ,EAAE,EAAE,CACtJ,CAAC;QACN,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,yBAAyB,CAAC,KAAyB;QAK7D,wDAAwD;QACxD,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAEjC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC7E,CAAC;QAED,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpE,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAE7B,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,EAAE,wDAAwD,CAAC,CAAC;QAClG,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,EAAE,mEAAmE,CAAC,CAAC;QAC7G,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,EAAE,mCAAmC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;QACnG,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACnE,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACX,aAAa,IAAI,CAAC,EAAE,iBAAiB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,4DAA4D,CAClI,CAAC;QACN,CAAC;QAED,OAAO;YACH,mBAAmB,EAAE,SAAS,CAAC,IAAI,CAAC,mBAAmB,EAAE,YAAY,CAAC;YACtE,gBAAgB,EACZ,IAAI,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY;YACvG,UAAU,EAAE,IAAI,CAAC,EAAE;SACtB,CAAC;IACN,CAAC;IAEO,eAAe,CAAC,IAAiB;QACrC,sEAAsE;QACtE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAC;QAC7G,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,CAAC,IAAI,CAAC,UAAU,eAAe,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5G,CAAC;QAED,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;YAClC,MAAM,WAAW,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACzE,MAAM,iBAAiB,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;YAEpF,IAAI,iBAAiB,EAAE,CAAC;gBACpB,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnE,IAAI,WAAW,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;gBAC9B,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QAED,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrE,IAAI,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,EAAE,0BAA0B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACpG,CAAC;IAEO,wBAAwB,CAAC,OAAwB,EAAE,KAAyB;QAChF,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;YACxE,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;YAC7F,CAAC;YAED,OAAO,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;QAC3F,CAAC;QAED,OAAO,OAAO,CAAC,aAAa,EAAE,CAAC;IACnC,CAAC;IAEO,aAAa,CAAC,OAAe;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,gBAAgB,CAAC,OAAO,CAAC,IAAI,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAC7F,CAAC;IAEO,KAAK,CAAC,mBAAmB;QAC7B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO;QACX,CAAC;QAED,IAAI,CAAC;YACD,MAAM,eAAe,GAAG,kBAAkB,CAAC;YAC3C,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,CAA8B,CAAC;YAC5E,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;YAC3F,CAAC;YAED,IAAI,CAAC,UAAU,GAAG;gBACd,SAAS,EAAE,MAAM,CAAC,SAAS;aAC9B,CAAC;YACF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACL,MAAM,IAAI,KAAK,CACX,sIAAsI,CACzI,CAAC;QACN,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,KAAyB;QACjD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QAC1F,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,KAA0B;QACnD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAC5F,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,KAA0B;QACnD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACrB,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;CACJ;AAED,SAAS,yBAAyB,CAAC,SAAwC;IACvE,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACd,CAAC;IAED,gEAAgE;IAChE,MAAM,UAAU,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,gBAAgB,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAE3F,OAAO,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAuB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AACxH,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa,EAAE,KAAa;IACxD,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACL,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,iCAAiC,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,MAAM,GAAG,EAAE,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,uBAAuB,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa,EAAE,KAAa;IACnD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,gCAAgC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,SAAS,CAAC,CAAS,EAAE,CAAS;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe;IACrC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAClC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,UAAU,EAAE,CAAC;AAClF,CAAC"}
@@ -1,104 +0,0 @@
1
- import { type KeyPairSigner } 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, type SessionPolicyProfile } from '../Types.js';
3
- type SwigPolicy = Extract<SessionPolicyProfile, {
4
- profile: 'swig-time-bound';
5
- }>;
6
- type SwigRoleActions = {
7
- canUseProgram?: (programId: string) => boolean;
8
- solSpendLimit?: () => bigint | null;
9
- tokenSpendLimit?: (mint: string) => bigint | null;
10
- };
11
- type SwigRole = {
12
- actions?: SwigRoleActions;
13
- id: number;
14
- };
15
- type SwigAccount = {
16
- findRoleById?: (id: number) => SwigRole | null;
17
- findRoleBySessionKey?: (sessionKey: string) => SwigRole | null;
18
- };
19
- export type SwigSessionModule = {
20
- fetchSwig: (rpc: unknown, swigAddress: string) => Promise<SwigAccount>;
21
- };
22
- export type SwigSessionKeyResult = KeyPairSigner | {
23
- createdAt?: Date | number | string;
24
- openTx?: string;
25
- signer: KeyPairSigner;
26
- swigRoleId?: number;
27
- };
28
- export interface SwigWalletAdapter {
29
- address: string;
30
- createSessionKey?: (config: {
31
- channelId: string;
32
- channelProgram: string;
33
- depositLimit?: string;
34
- network: string;
35
- recipient: string;
36
- spendLimit?: string;
37
- ttlSeconds: number;
38
- }) => Promise<SwigSessionKeyResult>;
39
- getSessionKey?: () => Promise<SwigSessionKeyResult | null | undefined>;
40
- swigAddress?: string;
41
- swigRoleId?: number;
42
- }
43
- export interface SwigSessionAuthorizerParameters {
44
- allowedPrograms?: string[];
45
- buildCloseTx?: (input: AuthorizeCloseInput) => Promise<string> | string;
46
- buildOpenTx?: (input: AuthorizeOpenInput) => Promise<string> | string;
47
- buildTopupTx?: (input: AuthorizeTopupInput) => Promise<string> | string;
48
- policy: SwigPolicy;
49
- rpcUrl?: string;
50
- swigModule?: SwigSessionModule;
51
- wallet: SwigWalletAdapter;
52
- }
53
- /**
54
- * Session authorizer for `swig_session` mode.
55
- *
56
- * This authorizer binds delegated session keys to on-chain Swig role policy
57
- * before issuing vouchers, then keeps channel state tied to that signer/role.
58
- */
59
- export declare class SwigSessionAuthorizer implements SessionAuthorizer {
60
- private readonly wallet;
61
- private readonly policy;
62
- private readonly rpcUrl?;
63
- private readonly allowedPrograms?;
64
- private readonly spendLimit?;
65
- private readonly depositLimit?;
66
- private readonly buildOpenTx?;
67
- private readonly buildTopupTx?;
68
- private readonly buildCloseTx?;
69
- private readonly channels;
70
- private swigLoaded;
71
- private swigModule;
72
- private sessionSigner;
73
- private sessionStartedAtMs;
74
- private sessionOpenTx;
75
- private sessionRoleId;
76
- private validatedPolicyForSessionSigner;
77
- constructor(parameters: SwigSessionAuthorizerParameters);
78
- getMode(): "swig_session";
79
- getCapabilities(): AuthorizerCapabilities;
80
- authorizeOpen(input: AuthorizeOpenInput): Promise<AuthorizedOpen>;
81
- authorizeUpdate(input: AuthorizeUpdateInput): Promise<AuthorizedUpdate>;
82
- authorizeTopup(input: AuthorizeTopupInput): Promise<AuthorizedTopup>;
83
- authorizeClose(input: AuthorizeCloseInput): Promise<AuthorizedClose>;
84
- private signSwigVoucher;
85
- private assertProgramAllowed;
86
- private assertMonotonic;
87
- private requireActiveSessionSigner;
88
- private ensureSessionSignerForOpen;
89
- private ensureSwigInstalled;
90
- private isSessionExpired;
91
- private getSessionExpiresAt;
92
- private resolveOpenTx;
93
- private resolveTopupTx;
94
- private resolveCloseTx;
95
- private setSessionState;
96
- private resolveRpcUrl;
97
- private assertPolicyAppliedOnChain;
98
- private resolveSessionRole;
99
- private assertRoleAllowsProgram;
100
- private resolveOnChainSpendLimit;
101
- private assertLimitAtMostPolicy;
102
- }
103
- export {};
104
- //# sourceMappingURL=SwigSessionAuthorizer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SwigSessionAuthorizer.d.ts","sourceRoot":"","sources":["../../../src/session/authorizers/SwigSessionAuthorizer.ts"],"names":[],"mappings":"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"}