@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.
- package/README.md +212 -0
- package/dist/Methods.d.ts +1 -213
- package/dist/Methods.d.ts.map +1 -1
- package/dist/Methods.js +1 -158
- package/dist/Methods.js.map +1 -1
- package/dist/client/Methods.d.ts +0 -2
- package/dist/client/Methods.d.ts.map +1 -1
- package/dist/client/Methods.js +0 -2
- package/dist/client/Methods.js.map +1 -1
- package/dist/client/index.d.ts +0 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +0 -1
- package/dist/client/index.js.map +1 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +1 -1
- package/dist/server/Charge.d.ts +2 -2
- package/dist/server/Charge.d.ts.map +1 -1
- package/dist/server/Charge.js +4 -0
- package/dist/server/Charge.js.map +1 -1
- package/dist/server/Methods.d.ts +0 -2
- package/dist/server/Methods.d.ts.map +1 -1
- package/dist/server/Methods.js +0 -2
- package/dist/server/Methods.js.map +1 -1
- package/dist/server/index.d.ts +0 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +0 -1
- package/dist/server/index.js.map +1 -1
- package/package.json +1 -9
- package/src/Methods.ts +1 -171
- package/src/client/Methods.ts +0 -3
- package/src/client/index.ts +0 -1
- package/src/index.ts +0 -29
- package/src/server/Charge.ts +7 -2
- package/src/server/Methods.ts +0 -3
- package/src/server/index.ts +0 -1
- package/dist/client/Session.d.ts +0 -195
- package/dist/client/Session.d.ts.map +0 -1
- package/dist/client/Session.js +0 -411
- package/dist/client/Session.js.map +0 -1
- package/dist/server/Session.d.ts +0 -171
- package/dist/server/Session.d.ts.map +0 -1
- package/dist/server/Session.js +0 -430
- package/dist/server/Session.js.map +0 -1
- package/dist/session/ChannelStore.d.ts +0 -12
- package/dist/session/ChannelStore.d.ts.map +0 -1
- package/dist/session/ChannelStore.js +0 -88
- package/dist/session/ChannelStore.js.map +0 -1
- package/dist/session/Types.d.ts +0 -179
- package/dist/session/Types.d.ts.map +0 -1
- package/dist/session/Types.js +0 -2
- package/dist/session/Types.js.map +0 -1
- package/dist/session/Voucher.d.ts +0 -7
- package/dist/session/Voucher.d.ts.map +0 -1
- package/dist/session/Voucher.js +0 -118
- package/dist/session/Voucher.js.map +0 -1
- package/dist/session/authorizers/BudgetAuthorizer.d.ts +0 -90
- package/dist/session/authorizers/BudgetAuthorizer.d.ts.map +0 -1
- package/dist/session/authorizers/BudgetAuthorizer.js +0 -398
- package/dist/session/authorizers/BudgetAuthorizer.js.map +0 -1
- package/dist/session/authorizers/SwigSessionAuthorizer.d.ts +0 -104
- package/dist/session/authorizers/SwigSessionAuthorizer.d.ts.map +0 -1
- package/dist/session/authorizers/SwigSessionAuthorizer.js +0 -522
- package/dist/session/authorizers/SwigSessionAuthorizer.js.map +0 -1
- package/dist/session/authorizers/UnboundedAuthorizer.d.ts +0 -36
- package/dist/session/authorizers/UnboundedAuthorizer.d.ts.map +0 -1
- package/dist/session/authorizers/UnboundedAuthorizer.js +0 -204
- package/dist/session/authorizers/UnboundedAuthorizer.js.map +0 -1
- package/dist/session/authorizers/index.d.ts +0 -5
- package/dist/session/authorizers/index.d.ts.map +0 -1
- package/dist/session/authorizers/index.js +0 -5
- package/dist/session/authorizers/index.js.map +0 -1
- package/dist/session/authorizers/makeSessionAuthorizer.d.ts +0 -19
- package/dist/session/authorizers/makeSessionAuthorizer.d.ts.map +0 -1
- package/dist/session/authorizers/makeSessionAuthorizer.js +0 -72
- package/dist/session/authorizers/makeSessionAuthorizer.js.map +0 -1
- package/dist/session/index.d.ts +0 -5
- package/dist/session/index.d.ts.map +0 -1
- package/dist/session/index.js +0 -5
- package/dist/session/index.js.map +0 -1
- package/src/client/Session.ts +0 -630
- package/src/server/Session.ts +0 -687
- package/src/session/ChannelStore.ts +0 -128
- package/src/session/Types.ts +0 -189
- package/src/session/Voucher.ts +0 -158
- package/src/session/authorizers/BudgetAuthorizer.ts +0 -574
- package/src/session/authorizers/SwigSessionAuthorizer.ts +0 -767
- package/src/session/authorizers/UnboundedAuthorizer.ts +0 -284
- package/src/session/authorizers/index.ts +0 -4
- package/src/session/authorizers/makeSessionAuthorizer.ts +0 -104
- package/src/session/index.ts +0 -4
package/dist/server/Session.d.ts
DELETED
|
@@ -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"}
|
package/dist/server/Session.js
DELETED
|
@@ -1,430 +0,0 @@
|
|
|
1
|
-
import { Method, Receipt, Store } from 'mppx';
|
|
2
|
-
import { DEFAULT_RPC_URLS } from '../constants.js';
|
|
3
|
-
import * as Methods from '../Methods.js';
|
|
4
|
-
import * as ChannelStore from '../session/ChannelStore.js';
|
|
5
|
-
import { parseVoucherFromPayload, verifyVoucherSignature } from '../session/Voucher.js';
|
|
6
|
-
export function session(parameters) {
|
|
7
|
-
const { recipient, network = 'mainnet-beta', asset, channelProgram, store = Store.memory() } = parameters;
|
|
8
|
-
assertSessionParameters(parameters);
|
|
9
|
-
const resolvedRpcUrl = parameters.rpcUrl ?? DEFAULT_RPC_URLS[network] ?? DEFAULT_RPC_URLS['mainnet-beta'];
|
|
10
|
-
if (!resolvedRpcUrl) {
|
|
11
|
-
throw new Error(`Unable to resolve RPC URL for network: ${network}`);
|
|
12
|
-
}
|
|
13
|
-
const channelStore = ChannelStore.fromStore(store);
|
|
14
|
-
return Method.toServer(Methods.session, {
|
|
15
|
-
defaults: {
|
|
16
|
-
asset: { decimals: 9, kind: 'sol' },
|
|
17
|
-
channelProgram: '',
|
|
18
|
-
recipient: '',
|
|
19
|
-
},
|
|
20
|
-
request({ credential, request }) {
|
|
21
|
-
if (credential) {
|
|
22
|
-
return credential.challenge.request;
|
|
23
|
-
}
|
|
24
|
-
const verifierRequest = toVerifierRequest(parameters.verifier);
|
|
25
|
-
return {
|
|
26
|
-
...request,
|
|
27
|
-
asset,
|
|
28
|
-
channelProgram,
|
|
29
|
-
network,
|
|
30
|
-
recipient,
|
|
31
|
-
...(parameters.pricing ? { pricing: parameters.pricing } : {}),
|
|
32
|
-
...(parameters.sessionDefaults ? { sessionDefaults: parameters.sessionDefaults } : {}),
|
|
33
|
-
...(verifierRequest ? { verifier: verifierRequest } : {}),
|
|
34
|
-
};
|
|
35
|
-
},
|
|
36
|
-
respond({ credential }) {
|
|
37
|
-
const payload = credential.payload;
|
|
38
|
-
if (payload.action === 'close') {
|
|
39
|
-
return new Response(null, { status: 204 });
|
|
40
|
-
}
|
|
41
|
-
if (payload.action === 'topup') {
|
|
42
|
-
return new Response(null, { status: 204 });
|
|
43
|
-
}
|
|
44
|
-
return undefined;
|
|
45
|
-
},
|
|
46
|
-
async verify({ credential }) {
|
|
47
|
-
const payload = credential.payload;
|
|
48
|
-
const challenge = credential.challenge;
|
|
49
|
-
const challengeId = challenge.id;
|
|
50
|
-
switch (payload.action) {
|
|
51
|
-
case 'open':
|
|
52
|
-
return await handleOpen(channelStore, payload, challenge, recipient, parameters, challengeId);
|
|
53
|
-
case 'update':
|
|
54
|
-
return await handleUpdate(channelStore, payload, challenge, parameters, challengeId);
|
|
55
|
-
case 'topup':
|
|
56
|
-
return await handleTopup(channelStore, payload, parameters, challengeId);
|
|
57
|
-
case 'close':
|
|
58
|
-
return await handleClose(channelStore, payload, challenge, parameters, challengeId);
|
|
59
|
-
default: {
|
|
60
|
-
const exhaustive = payload;
|
|
61
|
-
throw new Error(`Unknown session action: ${exhaustive.action}`);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
},
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
async function handleOpen(channelStore, payload, challenge, configuredRecipient, parameters, challengeId) {
|
|
68
|
-
const request = challenge.request;
|
|
69
|
-
const voucher = parseVoucherFromPayload(payload);
|
|
70
|
-
const depositAmount = parseNonNegativeAmount(payload.depositAmount, 'depositAmount');
|
|
71
|
-
const cumulativeAmount = parseNonNegativeAmount(voucher.voucher.cumulativeAmount, 'voucher.cumulativeAmount');
|
|
72
|
-
if (!payload.openTx.trim()) {
|
|
73
|
-
throw new Error('openTx is required for session open');
|
|
74
|
-
}
|
|
75
|
-
await parameters.transactionVerifier?.verifyOpen?.(payload.channelId, payload.openTx, payload.depositAmount);
|
|
76
|
-
if (voucher.voucher.channelId !== payload.channelId) {
|
|
77
|
-
throw new Error('Voucher channelId mismatch for open action');
|
|
78
|
-
}
|
|
79
|
-
if (voucher.voucher.payer !== payload.payer) {
|
|
80
|
-
throw new Error('Voucher payer mismatch for open action');
|
|
81
|
-
}
|
|
82
|
-
if (voucher.voucher.recipient !== configuredRecipient) {
|
|
83
|
-
throw new Error('Voucher recipient does not match configured recipient');
|
|
84
|
-
}
|
|
85
|
-
if (voucher.voucher.recipient !== request.recipient) {
|
|
86
|
-
throw new Error('Voucher recipient does not match challenge recipient');
|
|
87
|
-
}
|
|
88
|
-
if (voucher.voucher.channelProgram !== request.channelProgram) {
|
|
89
|
-
throw new Error('Voucher channelProgram mismatch');
|
|
90
|
-
}
|
|
91
|
-
const expectedChainId = normalizeChainId(request.network ?? 'mainnet-beta');
|
|
92
|
-
if (voucher.voucher.chainId !== expectedChainId) {
|
|
93
|
-
throw new Error(`Voucher chainId mismatch: expected ${expectedChainId}, received ${voucher.voucher.chainId}`);
|
|
94
|
-
}
|
|
95
|
-
if (cumulativeAmount > depositAmount) {
|
|
96
|
-
throw new Error('Voucher cumulative amount exceeds channel deposit');
|
|
97
|
-
}
|
|
98
|
-
if (parameters.verifier?.acceptAuthorizationModes &&
|
|
99
|
-
!parameters.verifier.acceptAuthorizationModes.includes(payload.authorizationMode)) {
|
|
100
|
-
throw new Error(`Authorization mode not accepted: ${payload.authorizationMode}`);
|
|
101
|
-
}
|
|
102
|
-
assertVoucherNotExpired(voucher, parameters.verifier?.maxClockSkewSeconds);
|
|
103
|
-
const createdAt = new Date().toISOString();
|
|
104
|
-
const expiresAtUnix = toUnixSeconds(payload.expiresAt ?? voucher.voucher.expiresAt);
|
|
105
|
-
const nextState = {
|
|
106
|
-
asset: {
|
|
107
|
-
decimals: request.asset.decimals,
|
|
108
|
-
kind: request.asset.kind,
|
|
109
|
-
...(request.asset.mint ? { mint: request.asset.mint } : {}),
|
|
110
|
-
},
|
|
111
|
-
authority: {
|
|
112
|
-
wallet: payload.payer,
|
|
113
|
-
...(payload.authorizationMode === 'swig_session' ? { delegatedSessionKey: voucher.signer } : {}),
|
|
114
|
-
},
|
|
115
|
-
authorizationMode: payload.authorizationMode,
|
|
116
|
-
channelId: payload.channelId,
|
|
117
|
-
createdAt,
|
|
118
|
-
escrowedAmount: depositAmount.toString(),
|
|
119
|
-
expiresAtUnix,
|
|
120
|
-
lastAuthorizedAmount: cumulativeAmount.toString(),
|
|
121
|
-
lastSequence: voucher.voucher.sequence,
|
|
122
|
-
openSlot: Date.now(),
|
|
123
|
-
payer: payload.payer,
|
|
124
|
-
recipient: request.recipient,
|
|
125
|
-
serverNonce: voucher.voucher.serverNonce,
|
|
126
|
-
settledAmount: '0',
|
|
127
|
-
status: 'open',
|
|
128
|
-
};
|
|
129
|
-
await verifySignedVoucher(voucher, nextState, parameters.verifier?.voucherVerifier);
|
|
130
|
-
await channelStore.updateChannel(payload.channelId, current => {
|
|
131
|
-
if (current) {
|
|
132
|
-
throw new Error(`Channel already exists: ${payload.channelId}`);
|
|
133
|
-
}
|
|
134
|
-
return nextState;
|
|
135
|
-
});
|
|
136
|
-
return toSuccessReceipt(payload.channelId, challengeId);
|
|
137
|
-
}
|
|
138
|
-
async function handleUpdate(channelStore, payload, challenge, parameters, challengeId) {
|
|
139
|
-
const channel = await channelStore.getChannel(payload.channelId);
|
|
140
|
-
if (!channel) {
|
|
141
|
-
throw new Error(`Channel not found: ${payload.channelId}`);
|
|
142
|
-
}
|
|
143
|
-
assertChannelOpen(channel, parameters.verifier?.maxClockSkewSeconds);
|
|
144
|
-
const voucher = parseVoucherFromPayload(payload);
|
|
145
|
-
assertVoucherMatchesChannel(voucher, channel, challenge);
|
|
146
|
-
assertVoucherNotExpired(voucher, parameters.verifier?.maxClockSkewSeconds);
|
|
147
|
-
const cumulativeAmount = parseNonNegativeAmount(voucher.voucher.cumulativeAmount, 'voucher.cumulativeAmount');
|
|
148
|
-
const escrowedAmount = parseNonNegativeAmount(channel.escrowedAmount, 'channel.escrowedAmount');
|
|
149
|
-
const lastAuthorizedAmount = parseNonNegativeAmount(channel.lastAuthorizedAmount, 'channel.lastAuthorizedAmount');
|
|
150
|
-
if (voucher.voucher.sequence <= channel.lastSequence) {
|
|
151
|
-
throw new Error(`Voucher sequence replay detected. Last=${channel.lastSequence}, received=${voucher.voucher.sequence}`);
|
|
152
|
-
}
|
|
153
|
-
if (cumulativeAmount < lastAuthorizedAmount) {
|
|
154
|
-
throw new Error('Voucher cumulative amount must be monotonically non-decreasing');
|
|
155
|
-
}
|
|
156
|
-
if (cumulativeAmount > escrowedAmount) {
|
|
157
|
-
throw new Error('Voucher cumulative amount exceeds channel deposit');
|
|
158
|
-
}
|
|
159
|
-
await verifySignedVoucher(voucher, channel, parameters.verifier?.voucherVerifier);
|
|
160
|
-
await channelStore.updateChannel(payload.channelId, current => {
|
|
161
|
-
if (!current) {
|
|
162
|
-
throw new Error(`Channel not found: ${payload.channelId}`);
|
|
163
|
-
}
|
|
164
|
-
assertChannelOpen(current, parameters.verifier?.maxClockSkewSeconds);
|
|
165
|
-
if (voucher.voucher.sequence <= current.lastSequence) {
|
|
166
|
-
throw new Error(`Voucher sequence replay detected. Last=${current.lastSequence}, received=${voucher.voucher.sequence}`);
|
|
167
|
-
}
|
|
168
|
-
const currentEscrowed = parseNonNegativeAmount(current.escrowedAmount, 'channel.escrowedAmount');
|
|
169
|
-
const currentLastAuthorized = parseNonNegativeAmount(current.lastAuthorizedAmount, 'channel.lastAuthorizedAmount');
|
|
170
|
-
if (cumulativeAmount < currentLastAuthorized) {
|
|
171
|
-
throw new Error('Voucher cumulative amount must be monotonically non-decreasing');
|
|
172
|
-
}
|
|
173
|
-
if (cumulativeAmount > currentEscrowed) {
|
|
174
|
-
throw new Error('Voucher cumulative amount exceeds channel deposit');
|
|
175
|
-
}
|
|
176
|
-
return {
|
|
177
|
-
...current,
|
|
178
|
-
lastAuthorizedAmount: cumulativeAmount.toString(),
|
|
179
|
-
lastSequence: voucher.voucher.sequence,
|
|
180
|
-
};
|
|
181
|
-
});
|
|
182
|
-
return toSuccessReceipt(payload.channelId, challengeId);
|
|
183
|
-
}
|
|
184
|
-
async function handleTopup(channelStore, payload, parameters, challengeId) {
|
|
185
|
-
const current = await channelStore.getChannel(payload.channelId);
|
|
186
|
-
if (!current) {
|
|
187
|
-
throw new Error(`Channel not found: ${payload.channelId}`);
|
|
188
|
-
}
|
|
189
|
-
assertChannelOpen(current);
|
|
190
|
-
if (!payload.topupTx.trim()) {
|
|
191
|
-
throw new Error('topupTx is required for session topup');
|
|
192
|
-
}
|
|
193
|
-
const additionalAmount = parseNonNegativeAmount(payload.additionalAmount, 'additionalAmount');
|
|
194
|
-
await parameters.transactionVerifier?.verifyTopup?.(payload.channelId, payload.topupTx, payload.additionalAmount);
|
|
195
|
-
await channelStore.updateChannel(payload.channelId, channel => {
|
|
196
|
-
if (!channel) {
|
|
197
|
-
throw new Error(`Channel not found: ${payload.channelId}`);
|
|
198
|
-
}
|
|
199
|
-
assertChannelOpen(channel);
|
|
200
|
-
if (channel.channelId !== payload.channelId) {
|
|
201
|
-
throw new Error('Channel id mismatch for topup action');
|
|
202
|
-
}
|
|
203
|
-
const escrowedAmount = parseNonNegativeAmount(channel.escrowedAmount, 'channel.escrowedAmount');
|
|
204
|
-
const nextEscrowed = escrowedAmount + additionalAmount;
|
|
205
|
-
return {
|
|
206
|
-
...channel,
|
|
207
|
-
escrowedAmount: nextEscrowed.toString(),
|
|
208
|
-
};
|
|
209
|
-
});
|
|
210
|
-
return toSuccessReceipt(payload.channelId, challengeId);
|
|
211
|
-
}
|
|
212
|
-
async function handleClose(channelStore, payload, challenge, parameters, challengeId) {
|
|
213
|
-
const channel = await channelStore.getChannel(payload.channelId);
|
|
214
|
-
if (!channel) {
|
|
215
|
-
throw new Error(`Channel not found: ${payload.channelId}`);
|
|
216
|
-
}
|
|
217
|
-
if (channel.status === 'closed') {
|
|
218
|
-
throw new Error(`Channel already closed: ${payload.channelId}`);
|
|
219
|
-
}
|
|
220
|
-
assertChannelOpen(channel, parameters.verifier?.maxClockSkewSeconds);
|
|
221
|
-
const voucher = parseVoucherFromPayload(payload);
|
|
222
|
-
assertVoucherMatchesChannel(voucher, channel, challenge);
|
|
223
|
-
assertVoucherNotExpired(voucher, parameters.verifier?.maxClockSkewSeconds);
|
|
224
|
-
const cumulativeAmount = parseNonNegativeAmount(voucher.voucher.cumulativeAmount, 'voucher.cumulativeAmount');
|
|
225
|
-
const escrowedAmount = parseNonNegativeAmount(channel.escrowedAmount, 'channel.escrowedAmount');
|
|
226
|
-
const lastAuthorizedAmount = parseNonNegativeAmount(channel.lastAuthorizedAmount, 'channel.lastAuthorizedAmount');
|
|
227
|
-
if (voucher.voucher.sequence <= channel.lastSequence) {
|
|
228
|
-
throw new Error(`Voucher sequence replay detected. Last=${channel.lastSequence}, received=${voucher.voucher.sequence}`);
|
|
229
|
-
}
|
|
230
|
-
if (cumulativeAmount < lastAuthorizedAmount) {
|
|
231
|
-
throw new Error('Voucher cumulative amount must be monotonically non-decreasing');
|
|
232
|
-
}
|
|
233
|
-
if (cumulativeAmount > escrowedAmount) {
|
|
234
|
-
throw new Error('Voucher cumulative amount exceeds channel deposit');
|
|
235
|
-
}
|
|
236
|
-
if (parameters.transactionVerifier?.verifyClose) {
|
|
237
|
-
if (!payload.closeTx?.trim()) {
|
|
238
|
-
throw new Error('closeTx is required for session close');
|
|
239
|
-
}
|
|
240
|
-
await parameters.transactionVerifier.verifyClose(payload.channelId, payload.closeTx, voucher.voucher.cumulativeAmount);
|
|
241
|
-
}
|
|
242
|
-
await verifySignedVoucher(voucher, channel, parameters.verifier?.voucherVerifier);
|
|
243
|
-
await channelStore.updateChannel(payload.channelId, current => {
|
|
244
|
-
if (!current) {
|
|
245
|
-
throw new Error(`Channel not found: ${payload.channelId}`);
|
|
246
|
-
}
|
|
247
|
-
if (current.status === 'closed') {
|
|
248
|
-
throw new Error(`Channel already closed: ${payload.channelId}`);
|
|
249
|
-
}
|
|
250
|
-
assertChannelOpen(current, parameters.verifier?.maxClockSkewSeconds);
|
|
251
|
-
if (voucher.voucher.sequence <= current.lastSequence) {
|
|
252
|
-
throw new Error(`Voucher sequence replay detected. Last=${current.lastSequence}, received=${voucher.voucher.sequence}`);
|
|
253
|
-
}
|
|
254
|
-
const currentEscrowed = parseNonNegativeAmount(current.escrowedAmount, 'channel.escrowedAmount');
|
|
255
|
-
const currentLastAuthorized = parseNonNegativeAmount(current.lastAuthorizedAmount, 'channel.lastAuthorizedAmount');
|
|
256
|
-
if (cumulativeAmount < currentLastAuthorized) {
|
|
257
|
-
throw new Error('Voucher cumulative amount must be monotonically non-decreasing');
|
|
258
|
-
}
|
|
259
|
-
if (cumulativeAmount > currentEscrowed) {
|
|
260
|
-
throw new Error('Voucher cumulative amount exceeds channel deposit');
|
|
261
|
-
}
|
|
262
|
-
return {
|
|
263
|
-
...current,
|
|
264
|
-
lastAuthorizedAmount: cumulativeAmount.toString(),
|
|
265
|
-
lastSequence: voucher.voucher.sequence,
|
|
266
|
-
status: 'closed',
|
|
267
|
-
};
|
|
268
|
-
});
|
|
269
|
-
return toSuccessReceipt(payload.closeTx ?? payload.channelId, challengeId);
|
|
270
|
-
}
|
|
271
|
-
function assertSessionParameters(parameters) {
|
|
272
|
-
if (!parameters.recipient.trim()) {
|
|
273
|
-
throw new Error('recipient is required');
|
|
274
|
-
}
|
|
275
|
-
if (!parameters.channelProgram.trim()) {
|
|
276
|
-
throw new Error('channelProgram is required');
|
|
277
|
-
}
|
|
278
|
-
if (!Number.isInteger(parameters.asset.decimals) || parameters.asset.decimals < 0) {
|
|
279
|
-
throw new Error('asset.decimals must be a non-negative integer');
|
|
280
|
-
}
|
|
281
|
-
if (parameters.asset.kind !== 'sol' && parameters.asset.kind !== 'spl') {
|
|
282
|
-
throw new Error('asset.kind must be "sol" or "spl"');
|
|
283
|
-
}
|
|
284
|
-
if (parameters.asset.kind === 'spl' && !parameters.asset.mint) {
|
|
285
|
-
throw new Error('asset.mint is required when asset.kind is "spl"');
|
|
286
|
-
}
|
|
287
|
-
if (parameters.verifier?.maxClockSkewSeconds !== undefined &&
|
|
288
|
-
(!Number.isInteger(parameters.verifier.maxClockSkewSeconds) || parameters.verifier.maxClockSkewSeconds < 0)) {
|
|
289
|
-
throw new Error('verifier.maxClockSkewSeconds must be a non-negative integer');
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
function toVerifierRequest(verifier) {
|
|
293
|
-
if (!verifier) {
|
|
294
|
-
return undefined;
|
|
295
|
-
}
|
|
296
|
-
const requestVerifier = {
|
|
297
|
-
...(verifier.acceptAuthorizationModes ? { acceptAuthorizationModes: verifier.acceptAuthorizationModes } : {}),
|
|
298
|
-
...(verifier.maxClockSkewSeconds !== undefined ? { maxClockSkewSeconds: verifier.maxClockSkewSeconds } : {}),
|
|
299
|
-
};
|
|
300
|
-
if (!requestVerifier.acceptAuthorizationModes && requestVerifier.maxClockSkewSeconds === undefined) {
|
|
301
|
-
return undefined;
|
|
302
|
-
}
|
|
303
|
-
return requestVerifier;
|
|
304
|
-
}
|
|
305
|
-
function normalizeChainId(network) {
|
|
306
|
-
const normalized = network.trim();
|
|
307
|
-
if (normalized.length === 0) {
|
|
308
|
-
throw new Error('network must be a non-empty string');
|
|
309
|
-
}
|
|
310
|
-
return normalized.startsWith('solana:') ? normalized : `solana:${normalized}`;
|
|
311
|
-
}
|
|
312
|
-
function toUnixSeconds(expiresAt) {
|
|
313
|
-
if (!expiresAt) {
|
|
314
|
-
return null;
|
|
315
|
-
}
|
|
316
|
-
const unixMs = Date.parse(expiresAt);
|
|
317
|
-
if (Number.isNaN(unixMs)) {
|
|
318
|
-
throw new Error('expiresAt must be a valid ISO timestamp');
|
|
319
|
-
}
|
|
320
|
-
return Math.floor(unixMs / 1000);
|
|
321
|
-
}
|
|
322
|
-
function assertChannelOpen(channel, maxClockSkewSeconds = 0) {
|
|
323
|
-
if (channel.status === 'closed') {
|
|
324
|
-
throw new Error(`Channel is closed: ${channel.channelId}`);
|
|
325
|
-
}
|
|
326
|
-
if (channel.status === 'expired') {
|
|
327
|
-
throw new Error(`Channel has expired: ${channel.channelId}`);
|
|
328
|
-
}
|
|
329
|
-
if (channel.status !== 'open') {
|
|
330
|
-
throw new Error(`Channel must be open to accept this action. Current status=${channel.status}`);
|
|
331
|
-
}
|
|
332
|
-
if (channel.expiresAtUnix !== null) {
|
|
333
|
-
const nowUnix = Math.floor(Date.now() / 1000);
|
|
334
|
-
if (nowUnix > channel.expiresAtUnix + maxClockSkewSeconds) {
|
|
335
|
-
throw new Error(`Channel has expired: ${channel.channelId}`);
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
function assertVoucherMatchesChannel(voucher, channel, challenge) {
|
|
340
|
-
if (voucher.voucher.channelId !== channel.channelId) {
|
|
341
|
-
throw new Error('Voucher channelId mismatch');
|
|
342
|
-
}
|
|
343
|
-
if (voucher.voucher.payer !== channel.payer) {
|
|
344
|
-
throw new Error('Voucher payer mismatch');
|
|
345
|
-
}
|
|
346
|
-
if (voucher.voucher.recipient !== channel.recipient) {
|
|
347
|
-
throw new Error('Voucher recipient mismatch');
|
|
348
|
-
}
|
|
349
|
-
if (voucher.voucher.serverNonce !== channel.serverNonce) {
|
|
350
|
-
throw new Error('Voucher serverNonce mismatch');
|
|
351
|
-
}
|
|
352
|
-
if (voucher.voucher.channelProgram !== challenge.request.channelProgram) {
|
|
353
|
-
throw new Error('Voucher channelProgram mismatch');
|
|
354
|
-
}
|
|
355
|
-
const expectedChainId = normalizeChainId(challenge.request.network ?? 'mainnet-beta');
|
|
356
|
-
if (voucher.voucher.chainId !== expectedChainId) {
|
|
357
|
-
throw new Error(`Voucher chainId mismatch: expected ${expectedChainId}, received ${voucher.voucher.chainId}`);
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
function assertVoucherNotExpired(voucher, maxClockSkewSeconds = 0) {
|
|
361
|
-
if (!voucher.voucher.expiresAt) {
|
|
362
|
-
return;
|
|
363
|
-
}
|
|
364
|
-
const unixMs = Date.parse(voucher.voucher.expiresAt);
|
|
365
|
-
if (Number.isNaN(unixMs)) {
|
|
366
|
-
throw new Error('voucher.expiresAt must be a valid ISO timestamp');
|
|
367
|
-
}
|
|
368
|
-
if (Date.now() > unixMs + maxClockSkewSeconds * 1000) {
|
|
369
|
-
throw new Error('Voucher has expired');
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
async function verifySignedVoucher(voucher, channel, customVerifier) {
|
|
373
|
-
// Bind signer to channel authority — reject rogue signers
|
|
374
|
-
assertSignerAuthorized(voucher, channel);
|
|
375
|
-
if (voucher.signatureType === 'ed25519' || voucher.signatureType === 'swig-session') {
|
|
376
|
-
const valid = await verifyVoucherSignature(voucher);
|
|
377
|
-
if (!valid) {
|
|
378
|
-
throw new Error('Invalid voucher signature');
|
|
379
|
-
}
|
|
380
|
-
return;
|
|
381
|
-
}
|
|
382
|
-
if (!customVerifier) {
|
|
383
|
-
throw new Error(`Unsupported voucher signatureType without custom verifier: ${String(voucher.signatureType)}`);
|
|
384
|
-
}
|
|
385
|
-
const valid = await customVerifier.verify(voucher, channel);
|
|
386
|
-
if (!valid) {
|
|
387
|
-
throw new Error('Invalid voucher signature');
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
function assertSignerAuthorized(voucher, channel) {
|
|
391
|
-
const signer = voucher.signer;
|
|
392
|
-
if (channel.authorizationMode === 'swig_session') {
|
|
393
|
-
// For swig_session mode, the signer must be the delegated session key
|
|
394
|
-
const expectedKey = channel.authority.delegatedSessionKey;
|
|
395
|
-
if (!expectedKey) {
|
|
396
|
-
throw new Error('Channel uses swig_session authorization but no delegated session key is recorded');
|
|
397
|
-
}
|
|
398
|
-
if (signer !== expectedKey) {
|
|
399
|
-
throw new Error(`Voucher signer ${signer} does not match delegated session key ${expectedKey}`);
|
|
400
|
-
}
|
|
401
|
-
return;
|
|
402
|
-
}
|
|
403
|
-
// For regular_budget and regular_unbounded, the signer must be the channel payer
|
|
404
|
-
if (signer !== channel.payer && signer !== channel.authority.wallet) {
|
|
405
|
-
throw new Error(`Voucher signer ${signer} does not match channel payer ${channel.payer}`);
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
function parseNonNegativeAmount(value, field) {
|
|
409
|
-
let parsed;
|
|
410
|
-
try {
|
|
411
|
-
parsed = BigInt(value);
|
|
412
|
-
}
|
|
413
|
-
catch {
|
|
414
|
-
throw new Error(`${field} must be a valid integer string`);
|
|
415
|
-
}
|
|
416
|
-
if (parsed < 0n) {
|
|
417
|
-
throw new Error(`${field} must be non-negative`);
|
|
418
|
-
}
|
|
419
|
-
return parsed;
|
|
420
|
-
}
|
|
421
|
-
function toSuccessReceipt(channelId, challengeId) {
|
|
422
|
-
return Receipt.from({
|
|
423
|
-
method: 'solana',
|
|
424
|
-
...(challengeId ? { challengeId } : {}),
|
|
425
|
-
reference: channelId,
|
|
426
|
-
status: 'success',
|
|
427
|
-
timestamp: new Date().toISOString(),
|
|
428
|
-
});
|
|
429
|
-
}
|
|
430
|
-
//# sourceMappingURL=Session.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Session.js","sourceRoot":"","sources":["../../src/server/Session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,OAAO,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,YAAY,MAAM,4BAA4B,CAAC;AAO3D,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAoDxF,MAAM,UAAU,OAAO,CAAC,UAA8B;IAClD,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,GAAG,UAAU,CAAC;IAE1G,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAEpC,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,IAAI,gBAAgB,CAAC,OAAO,CAAC,IAAI,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAC1G,IAAI,CAAC,cAAc,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,0CAA0C,OAAO,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,YAAY,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAEnD,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE;QACpC,QAAQ,EAAE;YACN,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,KAAc,EAAE;YAC5C,cAAc,EAAE,EAAE;YAClB,SAAS,EAAE,EAAE;SAChB;QAED,OAAO,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE;YAC3B,IAAI,UAAU,EAAE,CAAC;gBACb,OAAO,UAAU,CAAC,SAAS,CAAC,OAAyB,CAAC;YAC1D,CAAC;YAED,MAAM,eAAe,GAAG,iBAAiB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAE/D,OAAO;gBACH,GAAG,OAAO;gBACV,KAAK;gBACL,cAAc;gBACd,OAAO;gBACP,SAAS;gBACT,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9D,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtF,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5D,CAAC;QACN,CAAC;QAED,OAAO,CAAC,EAAE,UAAU,EAAE;YAClB,MAAM,OAAO,GAAG,UAAU,CAAC,OAAmC,CAAC;YAE/D,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBAC7B,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAC/C,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBAC7B,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAC/C,CAAC;YAED,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE;YACvB,MAAM,OAAO,GAAG,UAAU,CAAC,OAAmC,CAAC;YAC/D,MAAM,SAAS,GAAG,UAAU,CAAC,SAA6B,CAAC;YAC3D,MAAM,WAAW,GAAG,SAAS,CAAC,EAAE,CAAC;YAEjC,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;gBACrB,KAAK,MAAM;oBACP,OAAO,MAAM,UAAU,CAAC,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;gBAClG,KAAK,QAAQ;oBACT,OAAO,MAAM,YAAY,CAAC,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;gBACzF,KAAK,OAAO;oBACR,OAAO,MAAM,WAAW,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;gBAC7E,KAAK,OAAO;oBACR,OAAO,MAAM,WAAW,CAAC,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;gBACxF,OAAO,CAAC,CAAC,CAAC;oBACN,MAAM,UAAU,GAAU,OAAO,CAAC;oBAClC,MAAM,IAAI,KAAK,CAAC,2BAA4B,UAAkC,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC7F,CAAC;YACL,CAAC;QACL,CAAC;KACJ,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,UAAU,CACrB,YAAuC,EACvC,OAAoB,EACpB,SAA2B,EAC3B,mBAA2B,EAC3B,UAA8B,EAC9B,WAAoB;IAEpB,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;IAClC,MAAM,OAAO,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAEjD,MAAM,aAAa,GAAG,sBAAsB,CAAC,OAAO,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;IACrF,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,0BAA0B,CAAC,CAAC;IAE9G,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,UAAU,CAAC,mBAAmB,EAAE,UAAU,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAE7G,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,mBAAmB,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,CAAC,cAAc,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,eAAe,GAAG,gBAAgB,CAAC,OAAO,CAAC,OAAO,IAAI,cAAc,CAAC,CAAC;IAC5E,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,KAAK,eAAe,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,sCAAsC,eAAe,cAAc,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAClH,CAAC;IAED,IAAI,gBAAgB,GAAG,aAAa,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACzE,CAAC;IAED,IACI,UAAU,CAAC,QAAQ,EAAE,wBAAwB;QAC7C,CAAC,UAAU,CAAC,QAAQ,CAAC,wBAAwB,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,EACnF,CAAC;QACC,MAAM,IAAI,KAAK,CAAC,oCAAoC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,uBAAuB,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAE3E,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEpF,MAAM,SAAS,GAAiB;QAC5B,KAAK,EAAE;YACH,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ;YAChC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;YACxB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9D;QACD,SAAS,EAAE;YACP,MAAM,EAAE,OAAO,CAAC,KAAK;YACrB,GAAG,CAAC,OAAO,CAAC,iBAAiB,KAAK,cAAc,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnG;QACD,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS;QACT,cAAc,EAAE,aAAa,CAAC,QAAQ,EAAE;QACxC,aAAa;QACb,oBAAoB,EAAE,gBAAgB,CAAC,QAAQ,EAAE;QACjD,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ;QACtC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;QACpB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW;QACxC,aAAa,EAAE,GAAG;QAClB,MAAM,EAAE,MAAM;KACjB,CAAC;IAEF,MAAM,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAEpF,MAAM,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE;QAC1D,IAAI,OAAO,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,OAAO,gBAAgB,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAC5D,CAAC;AAED,KAAK,UAAU,YAAY,CACvB,YAAuC,EACvC,OAAsB,EACtB,SAA2B,EAC3B,UAA8B,EAC9B,WAAoB;IAEpB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACjE,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,sBAAsB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAErE,MAAM,OAAO,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjD,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACzD,uBAAuB,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAE3E,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,0BAA0B,CAAC,CAAC;IAC9G,MAAM,cAAc,GAAG,sBAAsB,CAAC,OAAO,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;IAChG,MAAM,oBAAoB,GAAG,sBAAsB,CAAC,OAAO,CAAC,oBAAoB,EAAE,8BAA8B,CAAC,CAAC;IAElH,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CACX,0CAA0C,OAAO,CAAC,YAAY,cAAc,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CACzG,CAAC;IACN,CAAC;IAED,IAAI,gBAAgB,GAAG,oBAAoB,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACtF,CAAC;IAED,IAAI,gBAAgB,GAAG,cAAc,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAElF,MAAM,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE;QAC1D,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,sBAAsB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;QAErE,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CACX,0CAA0C,OAAO,CAAC,YAAY,cAAc,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CACzG,CAAC;QACN,CAAC;QAED,MAAM,eAAe,GAAG,sBAAsB,CAAC,OAAO,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;QACjG,MAAM,qBAAqB,GAAG,sBAAsB,CAChD,OAAO,CAAC,oBAAoB,EAC5B,8BAA8B,CACjC,CAAC;QAEF,IAAI,gBAAgB,GAAG,qBAAqB,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACtF,CAAC;QAED,IAAI,gBAAgB,GAAG,eAAe,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACzE,CAAC;QAED,OAAO;YACH,GAAG,OAAO;YACV,oBAAoB,EAAE,gBAAgB,CAAC,QAAQ,EAAE;YACjD,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ;SACzC,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,OAAO,gBAAgB,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAC5D,CAAC;AAED,KAAK,UAAU,WAAW,CACtB,YAAuC,EACvC,OAAqB,EACrB,UAA8B,EAC9B,WAAoB;IAEpB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACjE,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,sBAAsB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAE3B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,OAAO,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;IAE9F,MAAM,UAAU,CAAC,mBAAmB,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAElH,MAAM,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE;QAC1D,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,sBAAsB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAE3B,IAAI,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,cAAc,GAAG,sBAAsB,CAAC,OAAO,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;QAChG,MAAM,YAAY,GAAG,cAAc,GAAG,gBAAgB,CAAC;QAEvD,OAAO;YACH,GAAG,OAAO;YACV,cAAc,EAAE,YAAY,CAAC,QAAQ,EAAE;SAC1C,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,OAAO,gBAAgB,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAC5D,CAAC;AAED,KAAK,UAAU,WAAW,CACtB,YAAuC,EACvC,OAAqB,EACrB,SAA2B,EAC3B,UAA8B,EAC9B,WAAoB;IAEpB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACjE,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,sBAAsB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAErE,MAAM,OAAO,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjD,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACzD,uBAAuB,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAE3E,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,0BAA0B,CAAC,CAAC;IAC9G,MAAM,cAAc,GAAG,sBAAsB,CAAC,OAAO,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;IAChG,MAAM,oBAAoB,GAAG,sBAAsB,CAAC,OAAO,CAAC,oBAAoB,EAAE,8BAA8B,CAAC,CAAC;IAElH,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CACX,0CAA0C,OAAO,CAAC,YAAY,cAAc,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CACzG,CAAC;IACN,CAAC;IAED,IAAI,gBAAgB,GAAG,oBAAoB,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACtF,CAAC;IAED,IAAI,gBAAgB,GAAG,cAAc,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,UAAU,CAAC,mBAAmB,EAAE,WAAW,EAAE,CAAC;QAC9C,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,UAAU,CAAC,mBAAmB,CAAC,WAAW,CAC5C,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,OAAO,CAAC,gBAAgB,CACnC,CAAC;IACN,CAAC;IAED,MAAM,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAElF,MAAM,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE;QAC1D,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,sBAAsB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;QAErE,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CACX,0CAA0C,OAAO,CAAC,YAAY,cAAc,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CACzG,CAAC;QACN,CAAC;QAED,MAAM,eAAe,GAAG,sBAAsB,CAAC,OAAO,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;QACjG,MAAM,qBAAqB,GAAG,sBAAsB,CAChD,OAAO,CAAC,oBAAoB,EAC5B,8BAA8B,CACjC,CAAC;QAEF,IAAI,gBAAgB,GAAG,qBAAqB,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACtF,CAAC;QAED,IAAI,gBAAgB,GAAG,eAAe,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACzE,CAAC;QAED,OAAO;YACH,GAAG,OAAO;YACV,oBAAoB,EAAE,gBAAgB,CAAC,QAAQ,EAAE;YACjD,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ;YACtC,MAAM,EAAE,QAAQ;SACnB,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,OAAO,gBAAgB,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,uBAAuB,CAAC,UAA8B;IAC3D,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;QAChF,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACvE,CAAC;IAED,IACI,UAAU,CAAC,QAAQ,EAAE,mBAAmB,KAAK,SAAS;QACtD,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,mBAAmB,GAAG,CAAC,CAAC,EAC7G,CAAC;QACC,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACnF,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAwC;IAC/D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,eAAe,GAA+B;QAChD,GAAG,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,wBAAwB,EAAE,QAAQ,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7G,GAAG,CAAC,QAAQ,CAAC,mBAAmB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/G,CAAC;IAEF,IAAI,CAAC,eAAe,CAAC,wBAAwB,IAAI,eAAe,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;QACjG,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,eAAe,CAAC;AAC3B,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;IAED,OAAO,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,UAAU,EAAE,CAAC;AAClF,CAAC;AAED,SAAS,aAAa,CAAC,SAAkB;IACrC,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAqB,EAAE,mBAAmB,GAAG,CAAC;IACrE,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,sBAAsB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,8DAA8D,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACpG,CAAC;IAED,IAAI,OAAO,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC9C,IAAI,OAAO,GAAG,OAAO,CAAC,aAAa,GAAG,mBAAmB,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QACjE,CAAC;IACL,CAAC;AACL,CAAC;AAED,SAAS,2BAA2B,CAChC,OAA6B,EAC7B,OAAqB,EACrB,SAA2B;IAE3B,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,CAAC,WAAW,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,eAAe,GAAG,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,IAAI,cAAc,CAAC,CAAC;IACtF,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,KAAK,eAAe,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,sCAAsC,eAAe,cAAc,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAClH,CAAC;AACL,CAAC;AAED,SAAS,uBAAuB,CAAC,OAA6B,EAAE,mBAAmB,GAAG,CAAC;IACnF,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC7B,OAAO;IACX,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACrD,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,GAAG,mBAAmB,GAAG,IAAI,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC3C,CAAC;AACL,CAAC;AAED,KAAK,UAAU,mBAAmB,CAC9B,OAA6B,EAC7B,OAAqB,EACrB,cAAgC;IAEhC,0DAA0D;IAC1D,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAEzC,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,IAAI,OAAO,CAAC,aAAa,KAAK,cAAc,EAAE,CAAC;QAClF,MAAM,KAAK,GAAG,MAAM,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACjD,CAAC;QACD,OAAO;IACX,CAAC;IAED,IAAI,CAAC,cAAc,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,8DAA8D,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACnH,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACjD,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,OAA6B,EAAE,OAAqB;IAChF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAE9B,IAAI,OAAO,CAAC,iBAAiB,KAAK,cAAc,EAAE,CAAC;QAC/C,sEAAsE;QACtE,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,mBAAmB,CAAC;QAC1D,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC;QACxG,CAAC;QACD,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,kBAAkB,MAAM,yCAAyC,WAAW,EAAE,CAAC,CAAC;QACpG,CAAC;QACD,OAAO;IACX,CAAC;IAED,iFAAiF;IACjF,IAAI,MAAM,KAAK,OAAO,CAAC,KAAK,IAAI,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,kBAAkB,MAAM,iCAAiC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9F,CAAC;AACL,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,SAAiB,EAAE,WAAoB;IAC7D,OAAO,OAAO,CAAC,IAAI,CAAC;QAChB,MAAM,EAAE,QAAQ;QAChB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,SAAS,EAAE,SAAS;QACpB,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { Store } from 'mppx';
|
|
2
|
-
import type { ChannelState } from './Types.js';
|
|
3
|
-
export interface ChannelStore {
|
|
4
|
-
getChannel(channelId: string): Promise<ChannelState | null>;
|
|
5
|
-
updateChannel(channelId: string, updater: (current: ChannelState | null) => ChannelState | null): Promise<ChannelState | null>;
|
|
6
|
-
}
|
|
7
|
-
export declare function fromStore(store: Store.Store): ChannelStore;
|
|
8
|
-
export declare function deductFromChannel(store: ChannelStore, channelId: string, amount: bigint): Promise<{
|
|
9
|
-
channel: ChannelState;
|
|
10
|
-
ok: boolean;
|
|
11
|
-
}>;
|
|
12
|
-
//# sourceMappingURL=ChannelStore.d.ts.map
|