@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,411 +0,0 @@
1
- import { Credential, Method, z } from 'mppx';
2
- import * as Methods from '../Methods.js';
3
- export const sessionContextSchema = z.object({
4
- action: z.optional(z.enum(['open', 'update', 'topup', 'close'])),
5
- additionalAmount: z.optional(z.string()),
6
- channelId: z.optional(z.string()),
7
- cumulativeAmount: z.optional(z.string()),
8
- depositAmount: z.optional(z.string()),
9
- openTx: z.optional(z.string()),
10
- sequence: z.optional(z.number()),
11
- topupTx: z.optional(z.string()),
12
- });
13
- export function session(parameters) {
14
- const { signer, authorizer, autoOpen = true, autoTopup = false, settleOnLimitHit = false, onProgress } = parameters;
15
- let activeChannel = null;
16
- return Method.toClient(Methods.session, {
17
- context: sessionContextSchema,
18
- async createCredential({ challenge, context }) {
19
- const request = challenge.request;
20
- const recipient = request.recipient;
21
- const network = request.network ?? 'mainnet-beta';
22
- const asset = request.asset;
23
- const channelProgram = request.channelProgram;
24
- const pricing = request.pricing;
25
- const sessionDefaults = request.sessionDefaults;
26
- onProgress?.({
27
- asset,
28
- network,
29
- recipient,
30
- type: 'challenge',
31
- });
32
- if (context?.action === 'topup') {
33
- return await handleTopupAction(challenge, context, authorizer, activeChannel, channelProgram, network);
34
- }
35
- if (context?.action === 'close') {
36
- const credential = await handleCloseAction(challenge, context, authorizer, activeChannel, channelProgram, recipient, network, onProgress);
37
- activeChannel = null;
38
- return credential;
39
- }
40
- if (context?.action === 'open') {
41
- if (!context.channelId) {
42
- throw new Error('channelId is required for open action');
43
- }
44
- if (!context.depositAmount) {
45
- throw new Error('depositAmount is required for open action');
46
- }
47
- const channelId = context.channelId;
48
- const depositAmount = context.depositAmount;
49
- const parsedDepositAmount = parseNonNegativeAmount(depositAmount, 'context.depositAmount');
50
- const serverNonce = crypto.randomUUID();
51
- onProgress?.({ channelId, type: 'opening' });
52
- const openResult = await authorizer.authorizeOpen({
53
- asset,
54
- channelId,
55
- channelProgram,
56
- depositAmount,
57
- network,
58
- pricing,
59
- recipient,
60
- serverNonce,
61
- });
62
- const payer = resolveOpenPayer(openResult.voucher.voucher.payer, signer);
63
- const payload = {
64
- action: 'open',
65
- authorizationMode: authorizer.getMode(),
66
- channelId,
67
- depositAmount,
68
- openTx: context.openTx ?? openResult.openTx,
69
- payer,
70
- ...(openResult.expiresAt ? { expiresAt: openResult.expiresAt } : {}),
71
- capabilities: {
72
- ...(openResult.capabilities.maxCumulativeAmount
73
- ? {
74
- maxCumulativeAmount: openResult.capabilities.maxCumulativeAmount,
75
- }
76
- : {}),
77
- ...(openResult.capabilities.allowedActions
78
- ? { allowedActions: openResult.capabilities.allowedActions }
79
- : {}),
80
- },
81
- voucher: openResult.voucher,
82
- };
83
- activeChannel = {
84
- asset: normalizeAsset(asset),
85
- channelId,
86
- channelProgram,
87
- cumulativeAmount: parseNonNegativeAmount(openResult.voucher.voucher.cumulativeAmount, 'voucher.cumulativeAmount'),
88
- depositAmount: parsedDepositAmount,
89
- network,
90
- recipient,
91
- sequence: assertNonNegativeSequence(openResult.voucher.voucher.sequence),
92
- serverNonce: openResult.voucher.voucher.serverNonce,
93
- };
94
- onProgress?.({ channelId, type: 'opened' });
95
- return Credential.serialize({
96
- challenge,
97
- payload,
98
- });
99
- }
100
- if (context?.action === 'update') {
101
- const channelId = context.channelId ?? activeChannel?.channelId;
102
- if (!channelId) {
103
- throw new Error('channelId is required for update action');
104
- }
105
- if (!activeChannel || activeChannel.channelId !== channelId) {
106
- throw new Error('Cannot update a channel that is not active');
107
- }
108
- if (!context.cumulativeAmount) {
109
- throw new Error('cumulativeAmount is required for update action');
110
- }
111
- if (context.sequence === undefined) {
112
- throw new Error('sequence is required for update action');
113
- }
114
- const nextCumulativeAmount = parseNonNegativeAmount(context.cumulativeAmount, 'context.cumulativeAmount');
115
- const nextSequence = assertNonNegativeSequence(context.sequence);
116
- onProgress?.({
117
- channelId,
118
- cumulativeAmount: nextCumulativeAmount.toString(),
119
- type: 'updating',
120
- });
121
- const updateResult = await authorizer.authorizeUpdate({
122
- channelId,
123
- channelProgram,
124
- cumulativeAmount: nextCumulativeAmount.toString(),
125
- meter: pricing?.meter ?? 'session',
126
- network,
127
- recipient,
128
- sequence: nextSequence,
129
- serverNonce: activeChannel.serverNonce,
130
- units: pricing ? '1' : '0',
131
- });
132
- const payload = {
133
- action: 'update',
134
- channelId,
135
- voucher: updateResult.voucher,
136
- };
137
- activeChannel.cumulativeAmount = parseNonNegativeAmount(updateResult.voucher.voucher.cumulativeAmount, 'voucher.cumulativeAmount');
138
- activeChannel.sequence = assertNonNegativeSequence(updateResult.voucher.voucher.sequence);
139
- activeChannel.serverNonce = updateResult.voucher.voucher.serverNonce;
140
- onProgress?.({
141
- channelId,
142
- cumulativeAmount: activeChannel.cumulativeAmount.toString(),
143
- type: 'updated',
144
- });
145
- return Credential.serialize({
146
- challenge,
147
- payload,
148
- });
149
- }
150
- const scopedActiveChannel = activeChannel &&
151
- matchesScope(activeChannel, {
152
- asset,
153
- channelProgram,
154
- network,
155
- recipient,
156
- })
157
- ? activeChannel
158
- : null;
159
- if (!scopedActiveChannel) {
160
- if (!autoOpen) {
161
- throw new Error('No active session channel for challenge scope and autoOpen is disabled');
162
- }
163
- const channelId = crypto.randomUUID();
164
- const serverNonce = crypto.randomUUID();
165
- const depositAmount = sessionDefaults?.suggestedDeposit ?? '0';
166
- const parsedDepositAmount = parseNonNegativeAmount(depositAmount, 'sessionDefaults.suggestedDeposit');
167
- onProgress?.({ channelId, type: 'opening' });
168
- const openResult = await authorizer.authorizeOpen({
169
- asset,
170
- channelId,
171
- channelProgram,
172
- depositAmount,
173
- network,
174
- pricing,
175
- recipient,
176
- serverNonce,
177
- });
178
- const payer = resolveOpenPayer(openResult.voucher.voucher.payer, signer);
179
- const payload = {
180
- action: 'open',
181
- authorizationMode: authorizer.getMode(),
182
- channelId,
183
- depositAmount,
184
- openTx: openResult.openTx,
185
- payer,
186
- ...(openResult.expiresAt ? { expiresAt: openResult.expiresAt } : {}),
187
- capabilities: {
188
- ...(openResult.capabilities.maxCumulativeAmount
189
- ? {
190
- maxCumulativeAmount: openResult.capabilities.maxCumulativeAmount,
191
- }
192
- : {}),
193
- ...(openResult.capabilities.allowedActions
194
- ? { allowedActions: openResult.capabilities.allowedActions }
195
- : {}),
196
- },
197
- voucher: openResult.voucher,
198
- };
199
- activeChannel = {
200
- asset: normalizeAsset(asset),
201
- channelId,
202
- channelProgram,
203
- cumulativeAmount: parseNonNegativeAmount(openResult.voucher.voucher.cumulativeAmount, 'voucher.cumulativeAmount'),
204
- depositAmount: parsedDepositAmount,
205
- network,
206
- recipient,
207
- sequence: assertNonNegativeSequence(openResult.voucher.voucher.sequence),
208
- serverNonce: openResult.voucher.voucher.serverNonce,
209
- };
210
- onProgress?.({ channelId, type: 'opened' });
211
- return Credential.serialize({
212
- challenge,
213
- payload,
214
- });
215
- }
216
- const debitIncrement = resolveDebitIncrement(pricing);
217
- const nextCumulativeAmount = scopedActiveChannel.cumulativeAmount + debitIncrement;
218
- const nextSequence = scopedActiveChannel.sequence + 1;
219
- if (nextCumulativeAmount > scopedActiveChannel.depositAmount) {
220
- if (!autoTopup) {
221
- if (!settleOnLimitHit) {
222
- throw new Error('Voucher cumulative amount exceeds tracked deposit and autoTopup is disabled');
223
- }
224
- const closeCredential = await handleCloseAction(challenge, {
225
- action: 'close',
226
- channelId: scopedActiveChannel.channelId,
227
- }, authorizer, scopedActiveChannel, channelProgram, recipient, network, onProgress);
228
- activeChannel = null;
229
- return closeCredential;
230
- }
231
- const additionalAmount = resolveAutoTopupAmount(sessionDefaults?.suggestedDeposit, nextCumulativeAmount, scopedActiveChannel.depositAmount);
232
- const topupResult = await authorizer.authorizeTopup({
233
- additionalAmount: additionalAmount.toString(),
234
- channelId: scopedActiveChannel.channelId,
235
- channelProgram,
236
- network,
237
- });
238
- scopedActiveChannel.depositAmount += additionalAmount;
239
- const payload = {
240
- action: 'topup',
241
- additionalAmount: additionalAmount.toString(),
242
- channelId: scopedActiveChannel.channelId,
243
- topupTx: topupResult.topupTx,
244
- };
245
- return Credential.serialize({
246
- challenge,
247
- payload,
248
- });
249
- }
250
- onProgress?.({
251
- channelId: scopedActiveChannel.channelId,
252
- cumulativeAmount: nextCumulativeAmount.toString(),
253
- type: 'updating',
254
- });
255
- const updateResult = await authorizer.authorizeUpdate({
256
- channelId: scopedActiveChannel.channelId,
257
- channelProgram,
258
- cumulativeAmount: nextCumulativeAmount.toString(),
259
- meter: pricing?.meter ?? 'session',
260
- network,
261
- recipient,
262
- sequence: nextSequence,
263
- serverNonce: scopedActiveChannel.serverNonce,
264
- units: pricing ? '1' : '0',
265
- });
266
- const payload = {
267
- action: 'update',
268
- channelId: scopedActiveChannel.channelId,
269
- voucher: updateResult.voucher,
270
- };
271
- scopedActiveChannel.cumulativeAmount = parseNonNegativeAmount(updateResult.voucher.voucher.cumulativeAmount, 'voucher.cumulativeAmount');
272
- scopedActiveChannel.sequence = assertNonNegativeSequence(updateResult.voucher.voucher.sequence);
273
- scopedActiveChannel.serverNonce = updateResult.voucher.voucher.serverNonce;
274
- onProgress?.({
275
- channelId: scopedActiveChannel.channelId,
276
- cumulativeAmount: scopedActiveChannel.cumulativeAmount.toString(),
277
- type: 'updated',
278
- });
279
- return Credential.serialize({
280
- challenge,
281
- payload,
282
- });
283
- },
284
- });
285
- }
286
- async function handleTopupAction(challenge, context, authorizer, activeChannel, channelProgram, network) {
287
- const channelId = context.channelId ?? activeChannel?.channelId;
288
- if (!channelId) {
289
- throw new Error('channelId is required for topup action');
290
- }
291
- if (!context.additionalAmount) {
292
- throw new Error('additionalAmount is required for topup action');
293
- }
294
- const additionalAmount = parseNonNegativeAmount(context.additionalAmount, 'context.additionalAmount');
295
- const topupResult = await authorizer.authorizeTopup({
296
- additionalAmount: additionalAmount.toString(),
297
- channelId,
298
- channelProgram,
299
- network,
300
- });
301
- if (activeChannel && activeChannel.channelId === channelId) {
302
- activeChannel.depositAmount += additionalAmount;
303
- }
304
- const payload = {
305
- action: 'topup',
306
- additionalAmount: additionalAmount.toString(),
307
- channelId,
308
- topupTx: topupResult.topupTx,
309
- };
310
- return Credential.serialize({ challenge, payload });
311
- }
312
- async function handleCloseAction(challenge, context, authorizer, activeChannel, channelProgram, recipient, network, onProgress) {
313
- const channelId = context.channelId ?? activeChannel?.channelId;
314
- if (!channelId) {
315
- throw new Error('channelId is required for close action');
316
- }
317
- if (!activeChannel || activeChannel.channelId !== channelId) {
318
- throw new Error('Cannot close a channel that is not active');
319
- }
320
- const finalSequence = activeChannel.sequence + 1;
321
- onProgress?.({ channelId, type: 'closing' });
322
- const closeResult = await authorizer.authorizeClose({
323
- channelId,
324
- channelProgram,
325
- finalCumulativeAmount: activeChannel.cumulativeAmount.toString(),
326
- network,
327
- recipient,
328
- sequence: finalSequence,
329
- serverNonce: activeChannel.serverNonce,
330
- });
331
- const payload = {
332
- action: 'close',
333
- channelId,
334
- ...(closeResult.closeTx ? { closeTx: closeResult.closeTx } : {}),
335
- voucher: closeResult.voucher,
336
- };
337
- onProgress?.({ channelId, type: 'closed' });
338
- return Credential.serialize({ challenge, payload });
339
- }
340
- function resolveDebitIncrement(pricing) {
341
- if (pricing?.minDebit !== undefined) {
342
- return parseNonNegativeAmount(pricing.minDebit, 'pricing.minDebit');
343
- }
344
- if (pricing?.amountPerUnit !== undefined) {
345
- return parseNonNegativeAmount(pricing.amountPerUnit, 'pricing.amountPerUnit');
346
- }
347
- return 0n;
348
- }
349
- function resolveAutoTopupAmount(suggestedDeposit, nextCumulativeAmount, depositAmount) {
350
- const shortfall = nextCumulativeAmount - depositAmount;
351
- if (shortfall <= 0n) {
352
- return 0n;
353
- }
354
- if (suggestedDeposit === undefined) {
355
- return shortfall;
356
- }
357
- const parsedSuggestedDeposit = parseNonNegativeAmount(suggestedDeposit, 'sessionDefaults.suggestedDeposit');
358
- return parsedSuggestedDeposit > shortfall ? parsedSuggestedDeposit : shortfall;
359
- }
360
- function matchesScope(active, scope) {
361
- if (active.recipient !== scope.recipient) {
362
- return false;
363
- }
364
- if (active.network !== scope.network) {
365
- return false;
366
- }
367
- if (active.channelProgram !== scope.channelProgram) {
368
- return false;
369
- }
370
- return sameAsset(active.asset, scope.asset);
371
- }
372
- function sameAsset(left, right) {
373
- return (left.kind === right.kind &&
374
- left.decimals === right.decimals &&
375
- (left.mint ?? '') === (right.mint ?? '') &&
376
- (left.symbol ?? '') === (right.symbol ?? ''));
377
- }
378
- function normalizeAsset(asset) {
379
- return {
380
- decimals: asset.decimals,
381
- kind: asset.kind,
382
- ...(asset.mint ? { mint: asset.mint } : {}),
383
- ...(asset.symbol ? { symbol: asset.symbol } : {}),
384
- };
385
- }
386
- function assertNonNegativeSequence(value) {
387
- if (!Number.isInteger(value) || value < 0) {
388
- throw new Error('voucher.sequence must be a non-negative integer');
389
- }
390
- return value;
391
- }
392
- function parseNonNegativeAmount(value, field) {
393
- let amount;
394
- try {
395
- amount = BigInt(value);
396
- }
397
- catch {
398
- throw new Error(`${field} must be a valid integer string`);
399
- }
400
- if (amount < 0n) {
401
- throw new Error(`${field} must be non-negative`);
402
- }
403
- return amount;
404
- }
405
- function resolveOpenPayer(voucherPayer, signer) {
406
- if (signer && signer.address !== voucherPayer) {
407
- throw new Error(`Open voucher payer ${voucherPayer} does not match signer address ${signer.address}`);
408
- }
409
- return voucherPayer;
410
- }
411
- //# sourceMappingURL=Session.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Session.js","sourceRoot":"","sources":["../../src/client/Session.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,MAAM,CAAC;AAE7D,OAAO,KAAK,OAAO,MAAM,eAAe,CAAC;AA2CzC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAChE,gBAAgB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACxC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACjC,gBAAgB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACxC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACrC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC9B,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAChC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;CAClC,CAAC,CAAC;AAIH,MAAM,UAAU,OAAO,CAAC,UAA8B;IAClD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,GAAG,IAAI,EAAE,SAAS,GAAG,KAAK,EAAE,gBAAgB,GAAG,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU,CAAC;IAEpH,IAAI,aAAa,GAAyB,IAAI,CAAC;IAE/C,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE;QACpC,OAAO,EAAE,oBAAoB;QAE7B,KAAK,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE;YACzC,MAAM,OAAO,GAAG,SAAS,CAAC,OAAkC,CAAC;YAC7D,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YACpC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,cAAc,CAAC;YAClD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YAC5B,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;YAC9C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YAChC,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;YAEhD,UAAU,EAAE,CAAC;gBACT,KAAK;gBACL,OAAO;gBACP,SAAS;gBACT,IAAI,EAAE,WAAW;aACpB,CAAC,CAAC;YAEH,IAAI,OAAO,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;gBAC9B,OAAO,MAAM,iBAAiB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;YAC3G,CAAC;YAED,IAAI,OAAO,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;gBAC9B,MAAM,UAAU,GAAG,MAAM,iBAAiB,CACtC,SAAS,EACT,OAAO,EACP,UAAU,EACV,aAAa,EACb,cAAc,EACd,SAAS,EACT,OAAO,EACP,UAAU,CACb,CAAC;gBAEF,aAAa,GAAG,IAAI,CAAC;gBACrB,OAAO,UAAU,CAAC;YACtB,CAAC;YAED,IAAI,OAAO,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC7B,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;oBACrB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBAC7D,CAAC;gBAED,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;oBACzB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBACjE,CAAC;gBAED,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;gBACpC,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;gBAC5C,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,aAAa,EAAE,uBAAuB,CAAC,CAAC;gBAC3F,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;gBAExC,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;gBAE7C,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC;oBAC9C,KAAK;oBACL,SAAS;oBACT,cAAc;oBACd,aAAa;oBACb,OAAO;oBACP,OAAO;oBACP,SAAS;oBACT,WAAW;iBACd,CAAC,CAAC;gBAEH,MAAM,KAAK,GAAG,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBAEzE,MAAM,OAAO,GAA6B;oBACtC,MAAM,EAAE,MAAM;oBACd,iBAAiB,EAAE,UAAU,CAAC,OAAO,EAAE;oBACvC,SAAS;oBACT,aAAa;oBACb,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM;oBAC3C,KAAK;oBACL,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpE,YAAY,EAAE;wBACV,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,mBAAmB;4BAC3C,CAAC,CAAC;gCACI,mBAAmB,EAAE,UAAU,CAAC,YAAY,CAAC,mBAAmB;6BACnE;4BACH,CAAC,CAAC,EAAE,CAAC;wBACT,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,cAAc;4BACtC,CAAC,CAAC,EAAE,cAAc,EAAE,UAAU,CAAC,YAAY,CAAC,cAAc,EAAE;4BAC5D,CAAC,CAAC,EAAE,CAAC;qBACZ;oBACD,OAAO,EAAE,UAAU,CAAC,OAAO;iBAC9B,CAAC;gBAEF,aAAa,GAAG;oBACZ,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC;oBAC5B,SAAS;oBACT,cAAc;oBACd,gBAAgB,EAAE,sBAAsB,CACpC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAC3C,0BAA0B,CAC7B;oBACD,aAAa,EAAE,mBAAmB;oBAClC,OAAO;oBACP,SAAS;oBACT,QAAQ,EAAE,yBAAyB,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;oBACxE,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW;iBACtD,CAAC;gBAEF,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAE5C,OAAO,UAAU,CAAC,SAAS,CAAC;oBACxB,SAAS;oBACT,OAAO;iBACV,CAAC,CAAC;YACP,CAAC;YAED,IAAI,OAAO,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,aAAa,EAAE,SAAS,CAAC;gBAChE,IAAI,CAAC,SAAS,EAAE,CAAC;oBACb,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBAC/D,CAAC;gBAED,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;oBAC1D,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;gBAClE,CAAC;gBAED,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;oBAC5B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;gBACtE,CAAC;gBAED,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;oBACjC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBAC9D,CAAC;gBAED,MAAM,oBAAoB,GAAG,sBAAsB,CAC/C,OAAO,CAAC,gBAAgB,EACxB,0BAA0B,CAC7B,CAAC;gBACF,MAAM,YAAY,GAAG,yBAAyB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAEjE,UAAU,EAAE,CAAC;oBACT,SAAS;oBACT,gBAAgB,EAAE,oBAAoB,CAAC,QAAQ,EAAE;oBACjD,IAAI,EAAE,UAAU;iBACnB,CAAC,CAAC;gBAEH,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,eAAe,CAAC;oBAClD,SAAS;oBACT,cAAc;oBACd,gBAAgB,EAAE,oBAAoB,CAAC,QAAQ,EAAE;oBACjD,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,SAAS;oBAClC,OAAO;oBACP,SAAS;oBACT,QAAQ,EAAE,YAAY;oBACtB,WAAW,EAAE,aAAa,CAAC,WAAW;oBACtC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;iBAC7B,CAAC,CAAC;gBAEH,MAAM,OAAO,GAA6B;oBACtC,MAAM,EAAE,QAAQ;oBAChB,SAAS;oBACT,OAAO,EAAE,YAAY,CAAC,OAAO;iBAChC,CAAC;gBAEF,aAAa,CAAC,gBAAgB,GAAG,sBAAsB,CACnD,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAC7C,0BAA0B,CAC7B,CAAC;gBACF,aAAa,CAAC,QAAQ,GAAG,yBAAyB,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC1F,aAAa,CAAC,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;gBAErE,UAAU,EAAE,CAAC;oBACT,SAAS;oBACT,gBAAgB,EAAE,aAAa,CAAC,gBAAgB,CAAC,QAAQ,EAAE;oBAC3D,IAAI,EAAE,SAAS;iBAClB,CAAC,CAAC;gBAEH,OAAO,UAAU,CAAC,SAAS,CAAC;oBACxB,SAAS;oBACT,OAAO;iBACV,CAAC,CAAC;YACP,CAAC;YAED,MAAM,mBAAmB,GACrB,aAAa;gBACb,YAAY,CAAC,aAAa,EAAE;oBACxB,KAAK;oBACL,cAAc;oBACd,OAAO;oBACP,SAAS;iBACZ,CAAC;gBACE,CAAC,CAAC,aAAa;gBACf,CAAC,CAAC,IAAI,CAAC;YAEf,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACZ,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;gBAC9F,CAAC;gBAED,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;gBACtC,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;gBACxC,MAAM,aAAa,GAAG,eAAe,EAAE,gBAAgB,IAAI,GAAG,CAAC;gBAC/D,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,aAAa,EAAE,kCAAkC,CAAC,CAAC;gBAEtG,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;gBAE7C,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC;oBAC9C,KAAK;oBACL,SAAS;oBACT,cAAc;oBACd,aAAa;oBACb,OAAO;oBACP,OAAO;oBACP,SAAS;oBACT,WAAW;iBACd,CAAC,CAAC;gBAEH,MAAM,KAAK,GAAG,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBAEzE,MAAM,OAAO,GAA6B;oBACtC,MAAM,EAAE,MAAM;oBACd,iBAAiB,EAAE,UAAU,CAAC,OAAO,EAAE;oBACvC,SAAS;oBACT,aAAa;oBACb,MAAM,EAAE,UAAU,CAAC,MAAM;oBACzB,KAAK;oBACL,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpE,YAAY,EAAE;wBACV,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,mBAAmB;4BAC3C,CAAC,CAAC;gCACI,mBAAmB,EAAE,UAAU,CAAC,YAAY,CAAC,mBAAmB;6BACnE;4BACH,CAAC,CAAC,EAAE,CAAC;wBACT,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,cAAc;4BACtC,CAAC,CAAC,EAAE,cAAc,EAAE,UAAU,CAAC,YAAY,CAAC,cAAc,EAAE;4BAC5D,CAAC,CAAC,EAAE,CAAC;qBACZ;oBACD,OAAO,EAAE,UAAU,CAAC,OAAO;iBAC9B,CAAC;gBAEF,aAAa,GAAG;oBACZ,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC;oBAC5B,SAAS;oBACT,cAAc;oBACd,gBAAgB,EAAE,sBAAsB,CACpC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAC3C,0BAA0B,CAC7B;oBACD,aAAa,EAAE,mBAAmB;oBAClC,OAAO;oBACP,SAAS;oBACT,QAAQ,EAAE,yBAAyB,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;oBACxE,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW;iBACtD,CAAC;gBAEF,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAE5C,OAAO,UAAU,CAAC,SAAS,CAAC;oBACxB,SAAS;oBACT,OAAO;iBACV,CAAC,CAAC;YACP,CAAC;YAED,MAAM,cAAc,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;YACtD,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,gBAAgB,GAAG,cAAc,CAAC;YACnF,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,GAAG,CAAC,CAAC;YAEtD,IAAI,oBAAoB,GAAG,mBAAmB,CAAC,aAAa,EAAE,CAAC;gBAC3D,IAAI,CAAC,SAAS,EAAE,CAAC;oBACb,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACpB,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;oBACnG,CAAC;oBAED,MAAM,eAAe,GAAG,MAAM,iBAAiB,CAC3C,SAAS,EACT;wBACI,MAAM,EAAE,OAAO;wBACf,SAAS,EAAE,mBAAmB,CAAC,SAAS;qBAC3C,EACD,UAAU,EACV,mBAAmB,EACnB,cAAc,EACd,SAAS,EACT,OAAO,EACP,UAAU,CACb,CAAC;oBAEF,aAAa,GAAG,IAAI,CAAC;oBACrB,OAAO,eAAe,CAAC;gBAC3B,CAAC;gBAED,MAAM,gBAAgB,GAAG,sBAAsB,CAC3C,eAAe,EAAE,gBAAgB,EACjC,oBAAoB,EACpB,mBAAmB,CAAC,aAAa,CACpC,CAAC;gBAEF,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC;oBAChD,gBAAgB,EAAE,gBAAgB,CAAC,QAAQ,EAAE;oBAC7C,SAAS,EAAE,mBAAmB,CAAC,SAAS;oBACxC,cAAc;oBACd,OAAO;iBACV,CAAC,CAAC;gBAEH,mBAAmB,CAAC,aAAa,IAAI,gBAAgB,CAAC;gBAEtD,MAAM,OAAO,GAA6B;oBACtC,MAAM,EAAE,OAAO;oBACf,gBAAgB,EAAE,gBAAgB,CAAC,QAAQ,EAAE;oBAC7C,SAAS,EAAE,mBAAmB,CAAC,SAAS;oBACxC,OAAO,EAAE,WAAW,CAAC,OAAO;iBAC/B,CAAC;gBAEF,OAAO,UAAU,CAAC,SAAS,CAAC;oBACxB,SAAS;oBACT,OAAO;iBACV,CAAC,CAAC;YACP,CAAC;YAED,UAAU,EAAE,CAAC;gBACT,SAAS,EAAE,mBAAmB,CAAC,SAAS;gBACxC,gBAAgB,EAAE,oBAAoB,CAAC,QAAQ,EAAE;gBACjD,IAAI,EAAE,UAAU;aACnB,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,eAAe,CAAC;gBAClD,SAAS,EAAE,mBAAmB,CAAC,SAAS;gBACxC,cAAc;gBACd,gBAAgB,EAAE,oBAAoB,CAAC,QAAQ,EAAE;gBACjD,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,SAAS;gBAClC,OAAO;gBACP,SAAS;gBACT,QAAQ,EAAE,YAAY;gBACtB,WAAW,EAAE,mBAAmB,CAAC,WAAW;gBAC5C,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;aAC7B,CAAC,CAAC;YAEH,MAAM,OAAO,GAA6B;gBACtC,MAAM,EAAE,QAAQ;gBAChB,SAAS,EAAE,mBAAmB,CAAC,SAAS;gBACxC,OAAO,EAAE,YAAY,CAAC,OAAO;aAChC,CAAC;YAEF,mBAAmB,CAAC,gBAAgB,GAAG,sBAAsB,CACzD,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAC7C,0BAA0B,CAC7B,CAAC;YACF,mBAAmB,CAAC,QAAQ,GAAG,yBAAyB,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAChG,mBAAmB,CAAC,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;YAE3E,UAAU,EAAE,CAAC;gBACT,SAAS,EAAE,mBAAmB,CAAC,SAAS;gBACxC,gBAAgB,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,QAAQ,EAAE;gBACjE,IAAI,EAAE,SAAS;aAClB,CAAC,CAAC;YAEH,OAAO,UAAU,CAAC,SAAS,CAAC;gBACxB,SAAS;gBACT,OAAO;aACV,CAAC,CAAC;QACP,CAAC;KACJ,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC5B,SAA8B,EAC9B,OAAuB,EACvB,UAA6B,EAC7B,aAAmC,EACnC,cAAsB,EACtB,OAAe;IAEf,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,aAAa,EAAE,SAAS,CAAC;IAChE,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,OAAO,CAAC,gBAAgB,EAAE,0BAA0B,CAAC,CAAC;IAEtG,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC;QAChD,gBAAgB,EAAE,gBAAgB,CAAC,QAAQ,EAAE;QAC7C,SAAS;QACT,cAAc;QACd,OAAO;KACV,CAAC,CAAC;IAEH,IAAI,aAAa,IAAI,aAAa,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACzD,aAAa,CAAC,aAAa,IAAI,gBAAgB,CAAC;IACpD,CAAC;IAED,MAAM,OAAO,GAA6B;QACtC,MAAM,EAAE,OAAO;QACf,gBAAgB,EAAE,gBAAgB,CAAC,QAAQ,EAAE;QAC7C,SAAS;QACT,OAAO,EAAE,WAAW,CAAC,OAAO;KAC/B,CAAC;IAEF,OAAO,UAAU,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC5B,SAA8B,EAC9B,OAAuB,EACvB,UAA6B,EAC7B,aAAmC,EACnC,cAAsB,EACtB,SAAiB,EACjB,OAAe,EACf,UAA6C;IAE7C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,aAAa,EAAE,SAAS,CAAC;IAChE,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,aAAa,GAAG,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC;IAEjD,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAE7C,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC;QAChD,SAAS;QACT,cAAc;QACd,qBAAqB,EAAE,aAAa,CAAC,gBAAgB,CAAC,QAAQ,EAAE;QAChE,OAAO;QACP,SAAS;QACT,QAAQ,EAAE,aAAa;QACvB,WAAW,EAAE,aAAa,CAAC,WAAW;KACzC,CAAC,CAAC;IAEH,MAAM,OAAO,GAA6B;QACtC,MAAM,EAAE,OAAO;QACf,SAAS;QACT,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,OAAO,EAAE,WAAW,CAAC,OAAO;KAC/B,CAAC;IAEF,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE5C,OAAO,UAAU,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAwB;IACnD,IAAI,OAAO,EAAE,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,sBAAsB,CAAC,OAAO,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,OAAO,EAAE,aAAa,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO,sBAAsB,CAAC,OAAO,CAAC,aAAa,EAAE,uBAAuB,CAAC,CAAC;IAClF,CAAC;IAED,OAAO,EAAE,CAAC;AACd,CAAC;AAED,SAAS,sBAAsB,CAC3B,gBAAoC,EACpC,oBAA4B,EAC5B,aAAqB;IAErB,MAAM,SAAS,GAAG,oBAAoB,GAAG,aAAa,CAAC;IACvD,IAAI,SAAS,IAAI,EAAE,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,sBAAsB,GAAG,sBAAsB,CAAC,gBAAgB,EAAE,kCAAkC,CAAC,CAAC;IAC5G,OAAO,sBAAsB,GAAG,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS,CAAC;AACnF,CAAC;AAED,SAAS,YAAY,CACjB,MAAqB,EACrB,KAKC;IAED,IAAI,MAAM,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,EAAE,CAAC;QACvC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;QACnC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,MAAM,CAAC,cAAc,KAAK,KAAK,CAAC,cAAc,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,SAAS,CAAC,IAAkB,EAAE,KAAmB;IACtD,OAAO,CACH,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;QACxB,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;QAChC,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QACxC,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAC/C,CAAC;AACN,CAAC;AAED,SAAS,cAAc,CAAC,KAAmB;IACvC,OAAO;QACH,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpD,CAAC;AACN,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAa;IAC5C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,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,gBAAgB,CAAC,YAAoB,EAAE,MAA0B;IACtE,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,sBAAsB,YAAY,kCAAkC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1G,CAAC;IAED,OAAO,YAAY,CAAC;AACxB,CAAC"}
@@ -1,171 +0,0 @@
1
- import { Method, Store } from 'mppx';
2
- import type { VoucherVerifier } from '../session/Types.js';
3
- type TransactionVerifier = {
4
- verifyClose?(channelId: string, closeTx: string, finalCumulativeAmount: string): Promise<void>;
5
- verifyOpen?(channelId: string, openTx: string, deposit: string): Promise<void>;
6
- verifyTopup?(channelId: string, topupTx: string, amount: string): Promise<void>;
7
- };
8
- export declare function session(parameters: session.Parameters): Method.Server<{
9
- readonly intent: "session";
10
- readonly name: "solana";
11
- readonly schema: {
12
- readonly credential: {
13
- readonly payload: import("zod/mini").ZodMiniDiscriminatedUnion<[import("zod/mini").ZodMiniObject<{
14
- action: import("zod/mini").ZodMiniLiteral<"open">;
15
- authorizationMode: import("zod/mini").ZodMiniString<string>;
16
- capabilities: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniObject<{
17
- allowedActions: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniArray<import("zod/mini").ZodMiniString<string>>>;
18
- maxCumulativeAmount: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
19
- }, import("zod/v4/core").$strip>>;
20
- channelId: import("zod/mini").ZodMiniString<string>;
21
- depositAmount: import("zod/mini").ZodMiniString<string>;
22
- expiresAt: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
23
- openTx: import("zod/mini").ZodMiniString<string>;
24
- payer: import("zod/mini").ZodMiniString<string>;
25
- voucher: import("zod/mini").ZodMiniObject<{
26
- signature: import("zod/mini").ZodMiniString<string>;
27
- signatureType: import("zod/mini").ZodMiniString<string>;
28
- signer: import("zod/mini").ZodMiniString<string>;
29
- voucher: import("zod/mini").ZodMiniObject<{
30
- chainId: import("zod/mini").ZodMiniString<string>;
31
- channelId: import("zod/mini").ZodMiniString<string>;
32
- channelProgram: import("zod/mini").ZodMiniString<string>;
33
- cumulativeAmount: import("zod/mini").ZodMiniString<string>;
34
- expiresAt: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
35
- meter: import("zod/mini").ZodMiniString<string>;
36
- payer: import("zod/mini").ZodMiniString<string>;
37
- recipient: import("zod/mini").ZodMiniString<string>;
38
- sequence: import("zod/mini").ZodMiniNumber<number>;
39
- serverNonce: import("zod/mini").ZodMiniString<string>;
40
- units: import("zod/mini").ZodMiniString<string>;
41
- }, import("zod/v4/core").$strip>;
42
- }, import("zod/v4/core").$strip>;
43
- }, import("zod/v4/core").$strip>, import("zod/mini").ZodMiniObject<{
44
- action: import("zod/mini").ZodMiniLiteral<"update">;
45
- channelId: import("zod/mini").ZodMiniString<string>;
46
- voucher: import("zod/mini").ZodMiniObject<{
47
- signature: import("zod/mini").ZodMiniString<string>;
48
- signatureType: import("zod/mini").ZodMiniString<string>;
49
- signer: import("zod/mini").ZodMiniString<string>;
50
- voucher: import("zod/mini").ZodMiniObject<{
51
- chainId: import("zod/mini").ZodMiniString<string>;
52
- channelId: import("zod/mini").ZodMiniString<string>;
53
- channelProgram: import("zod/mini").ZodMiniString<string>;
54
- cumulativeAmount: import("zod/mini").ZodMiniString<string>;
55
- expiresAt: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
56
- meter: import("zod/mini").ZodMiniString<string>;
57
- payer: import("zod/mini").ZodMiniString<string>;
58
- recipient: import("zod/mini").ZodMiniString<string>;
59
- sequence: import("zod/mini").ZodMiniNumber<number>;
60
- serverNonce: import("zod/mini").ZodMiniString<string>;
61
- units: import("zod/mini").ZodMiniString<string>;
62
- }, import("zod/v4/core").$strip>;
63
- }, import("zod/v4/core").$strip>;
64
- }, import("zod/v4/core").$strip>, import("zod/mini").ZodMiniObject<{
65
- action: import("zod/mini").ZodMiniLiteral<"topup">;
66
- additionalAmount: import("zod/mini").ZodMiniString<string>;
67
- channelId: import("zod/mini").ZodMiniString<string>;
68
- topupTx: import("zod/mini").ZodMiniString<string>;
69
- }, import("zod/v4/core").$strip>, import("zod/mini").ZodMiniObject<{
70
- action: import("zod/mini").ZodMiniLiteral<"close">;
71
- channelId: import("zod/mini").ZodMiniString<string>;
72
- closeTx: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
73
- voucher: import("zod/mini").ZodMiniObject<{
74
- signature: import("zod/mini").ZodMiniString<string>;
75
- signatureType: import("zod/mini").ZodMiniString<string>;
76
- signer: import("zod/mini").ZodMiniString<string>;
77
- voucher: import("zod/mini").ZodMiniObject<{
78
- chainId: import("zod/mini").ZodMiniString<string>;
79
- channelId: import("zod/mini").ZodMiniString<string>;
80
- channelProgram: import("zod/mini").ZodMiniString<string>;
81
- cumulativeAmount: import("zod/mini").ZodMiniString<string>;
82
- expiresAt: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
83
- meter: import("zod/mini").ZodMiniString<string>;
84
- payer: import("zod/mini").ZodMiniString<string>;
85
- recipient: import("zod/mini").ZodMiniString<string>;
86
- sequence: import("zod/mini").ZodMiniNumber<number>;
87
- serverNonce: import("zod/mini").ZodMiniString<string>;
88
- units: import("zod/mini").ZodMiniString<string>;
89
- }, import("zod/v4/core").$strip>;
90
- }, import("zod/v4/core").$strip>;
91
- }, import("zod/v4/core").$strip>], "action">;
92
- };
93
- readonly request: import("zod/mini").ZodMiniObject<{
94
- asset: import("zod/mini").ZodMiniObject<{
95
- decimals: import("zod/mini").ZodMiniNumber<number>;
96
- kind: import("zod/mini").ZodMiniString<string>;
97
- mint: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
98
- symbol: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
99
- }, import("zod/v4/core").$strip>;
100
- channelProgram: import("zod/mini").ZodMiniString<string>;
101
- network: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
102
- pricing: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniObject<{
103
- amountPerUnit: import("zod/mini").ZodMiniString<string>;
104
- meter: import("zod/mini").ZodMiniString<string>;
105
- minDebit: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
106
- unit: import("zod/mini").ZodMiniString<string>;
107
- }, import("zod/v4/core").$strip>>;
108
- recipient: import("zod/mini").ZodMiniString<string>;
109
- sessionDefaults: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniObject<{
110
- closeBehavior: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
111
- settleInterval: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniObject<{
112
- kind: import("zod/mini").ZodMiniString<string>;
113
- minIncrement: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
114
- seconds: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniNumber<number>>;
115
- }, import("zod/v4/core").$strip>>;
116
- suggestedDeposit: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniString<string>>;
117
- ttlSeconds: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniNumber<number>>;
118
- }, import("zod/v4/core").$strip>>;
119
- verifier: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniObject<{
120
- acceptAuthorizationModes: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniArray<import("zod/mini").ZodMiniString<string>>>;
121
- maxClockSkewSeconds: import("zod/mini").ZodMiniOptional<import("zod/mini").ZodMiniNumber<number>>;
122
- }, import("zod/v4/core").$strip>>;
123
- }, import("zod/v4/core").$strip>;
124
- };
125
- }, {
126
- readonly asset: {
127
- readonly decimals: 9;
128
- readonly kind: "sol";
129
- };
130
- readonly channelProgram: "";
131
- readonly recipient: "";
132
- }, undefined>;
133
- export declare namespace session {
134
- type Parameters = {
135
- asset: {
136
- decimals: number;
137
- kind: 'sol' | 'spl';
138
- mint?: string;
139
- symbol?: string;
140
- };
141
- channelProgram: string;
142
- network?: 'devnet' | 'localnet' | 'mainnet-beta' | 'surfnet' | (string & {});
143
- pricing?: {
144
- amountPerUnit: string;
145
- meter: string;
146
- minDebit?: string;
147
- unit: string;
148
- };
149
- recipient: string;
150
- rpcUrl?: string;
151
- sessionDefaults?: {
152
- closeBehavior?: 'payer_must_close' | 'server_may_finalize';
153
- settleInterval?: {
154
- kind: string;
155
- minIncrement?: string;
156
- seconds?: number;
157
- };
158
- suggestedDeposit?: string;
159
- ttlSeconds?: number;
160
- };
161
- store?: Store.Store;
162
- transactionVerifier?: TransactionVerifier;
163
- verifier?: {
164
- acceptAuthorizationModes?: Array<'regular_budget' | 'regular_unbounded' | 'swig_session'>;
165
- maxClockSkewSeconds?: number;
166
- voucherVerifier?: VoucherVerifier;
167
- };
168
- };
169
- }
170
- export {};
171
- //# sourceMappingURL=Session.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Session.d.ts","sourceRoot":"","sources":["../../src/server/Session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAW,KAAK,EAAE,MAAM,MAAM,CAAC;AAK9C,OAAO,KAAK,EAIR,eAAe,EAClB,MAAM,qBAAqB,CAAC;AA+C7B,KAAK,mBAAmB,GAAG;IACvB,WAAW,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/F,UAAU,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/E,WAAW,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnF,CAAC;AAEF,wBAAgB,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAyErD;AA2gBD,MAAM,CAAC,OAAO,WAAW,OAAO,CAAC;IAC7B,KAAK,UAAU,GAAG;QACd,KAAK,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACjF,cAAc,EAAE,MAAM,CAAC;QACvB,OAAO,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,cAAc,GAAG,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QAC7E,OAAO,CAAC,EAAE;YACN,aAAa,EAAE,MAAM,CAAC;YACtB,KAAK,EAAE,MAAM,CAAC;YACd,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,IAAI,EAAE,MAAM,CAAC;SAChB,CAAC;QACF,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,eAAe,CAAC,EAAE;YACd,aAAa,CAAC,EAAE,kBAAkB,GAAG,qBAAqB,CAAC;YAC3D,cAAc,CAAC,EAAE;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,YAAY,CAAC,EAAE,MAAM,CAAC;gBAAC,OAAO,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC;YAC3E,gBAAgB,CAAC,EAAE,MAAM,CAAC;YAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;SACvB,CAAC;QACF,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC;QACpB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;QAC1C,QAAQ,CAAC,EAAE;YACP,wBAAwB,CAAC,EAAE,KAAK,CAAC,gBAAgB,GAAG,mBAAmB,GAAG,cAAc,CAAC,CAAC;YAC1F,mBAAmB,CAAC,EAAE,MAAM,CAAC;YAC7B,eAAe,CAAC,EAAE,eAAe,CAAC;SACrC,CAAC;KACL,CAAC;CACL"}