@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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ChannelStore.d.ts","sourceRoot":"","sources":["../../src/session/ChannelStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAE7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAK/C,MAAM,WAAW,YAAY;IACzB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC5D,aAAa,CACT,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,KAAK,YAAY,GAAG,IAAI,GAC/D,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;CACnC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,YAAY,CAsD1D;AAED,wBAAsB,iBAAiB,CACnC,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,OAAO,EAAE,YAAY,CAAC;IAAC,EAAE,EAAE,OAAO,CAAA;CAAE,CAAC,CAwCjD"}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
const CHANNEL_KEY_PREFIX = 'solana-session:channel:';
|
|
2
|
-
const storeCache = new WeakMap();
|
|
3
|
-
export function fromStore(store) {
|
|
4
|
-
const cached = storeCache.get(store);
|
|
5
|
-
if (cached) {
|
|
6
|
-
return cached;
|
|
7
|
-
}
|
|
8
|
-
const locks = new Map();
|
|
9
|
-
async function update(channelId, updater) {
|
|
10
|
-
const key = toStoreKey(channelId);
|
|
11
|
-
while (locks.has(key)) {
|
|
12
|
-
await locks.get(key);
|
|
13
|
-
}
|
|
14
|
-
let release;
|
|
15
|
-
locks.set(key, new Promise(resolve => {
|
|
16
|
-
release = resolve;
|
|
17
|
-
}));
|
|
18
|
-
try {
|
|
19
|
-
const current = await store.get(key);
|
|
20
|
-
const next = updater(current);
|
|
21
|
-
if (next) {
|
|
22
|
-
await store.put(key, next);
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
await store.delete(key);
|
|
26
|
-
}
|
|
27
|
-
return next;
|
|
28
|
-
}
|
|
29
|
-
finally {
|
|
30
|
-
locks.delete(key);
|
|
31
|
-
release();
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
const channelStore = {
|
|
35
|
-
async getChannel(channelId) {
|
|
36
|
-
return await store.get(toStoreKey(channelId));
|
|
37
|
-
},
|
|
38
|
-
async updateChannel(channelId, updater) {
|
|
39
|
-
return await update(channelId, updater);
|
|
40
|
-
},
|
|
41
|
-
};
|
|
42
|
-
storeCache.set(store, channelStore);
|
|
43
|
-
return channelStore;
|
|
44
|
-
}
|
|
45
|
-
export async function deductFromChannel(store, channelId, amount) {
|
|
46
|
-
if (amount < 0n) {
|
|
47
|
-
throw new Error('Deduction amount must be non-negative');
|
|
48
|
-
}
|
|
49
|
-
let deducted = false;
|
|
50
|
-
const channel = await store.updateChannel(channelId, current => {
|
|
51
|
-
deducted = false;
|
|
52
|
-
if (!current) {
|
|
53
|
-
return null;
|
|
54
|
-
}
|
|
55
|
-
const settledAmount = parseAtomicAmount(current.settledAmount, 'settledAmount');
|
|
56
|
-
const authorizedAmount = parseAtomicAmount(current.lastAuthorizedAmount, 'lastAuthorizedAmount');
|
|
57
|
-
const escrowedAmount = parseAtomicAmount(current.escrowedAmount, 'escrowedAmount');
|
|
58
|
-
const spendCeiling = authorizedAmount < escrowedAmount ? authorizedAmount : escrowedAmount;
|
|
59
|
-
const nextSettledAmount = settledAmount + amount;
|
|
60
|
-
if (nextSettledAmount > spendCeiling) {
|
|
61
|
-
return current;
|
|
62
|
-
}
|
|
63
|
-
deducted = true;
|
|
64
|
-
return {
|
|
65
|
-
...current,
|
|
66
|
-
settledAmount: nextSettledAmount.toString(),
|
|
67
|
-
};
|
|
68
|
-
});
|
|
69
|
-
if (!channel) {
|
|
70
|
-
throw new Error('channel not found');
|
|
71
|
-
}
|
|
72
|
-
return {
|
|
73
|
-
channel,
|
|
74
|
-
ok: deducted,
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
function toStoreKey(channelId) {
|
|
78
|
-
return `${CHANNEL_KEY_PREFIX}${channelId}`;
|
|
79
|
-
}
|
|
80
|
-
function parseAtomicAmount(value, field) {
|
|
81
|
-
try {
|
|
82
|
-
return BigInt(value);
|
|
83
|
-
}
|
|
84
|
-
catch {
|
|
85
|
-
throw new Error(`Invalid atomic amount in ${field}: ${value}`);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
//# sourceMappingURL=ChannelStore.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ChannelStore.js","sourceRoot":"","sources":["../../src/session/ChannelStore.ts"],"names":[],"mappings":"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"}
|
package/dist/session/Types.d.ts
DELETED
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
export type AuthorizationMode = 'regular_budget' | 'regular_unbounded' | 'swig_session';
|
|
2
|
-
export interface SessionVoucher {
|
|
3
|
-
chainId: string;
|
|
4
|
-
channelId: string;
|
|
5
|
-
channelProgram: string;
|
|
6
|
-
cumulativeAmount: string;
|
|
7
|
-
expiresAt?: string;
|
|
8
|
-
meter: string;
|
|
9
|
-
payer: string;
|
|
10
|
-
recipient: string;
|
|
11
|
-
sequence: number;
|
|
12
|
-
serverNonce: string;
|
|
13
|
-
units: string;
|
|
14
|
-
}
|
|
15
|
-
export interface SignedSessionVoucher {
|
|
16
|
-
signature: string;
|
|
17
|
-
signatureType: 'ed25519' | 'swig-session';
|
|
18
|
-
signer: string;
|
|
19
|
-
voucher: SessionVoucher;
|
|
20
|
-
}
|
|
21
|
-
export interface ChannelState {
|
|
22
|
-
asset: {
|
|
23
|
-
decimals: number;
|
|
24
|
-
kind: 'sol' | 'spl';
|
|
25
|
-
mint?: string;
|
|
26
|
-
};
|
|
27
|
-
authority: {
|
|
28
|
-
delegatedSessionKey?: string;
|
|
29
|
-
swigRoleId?: number;
|
|
30
|
-
wallet: string;
|
|
31
|
-
};
|
|
32
|
-
authorizationMode: AuthorizationMode;
|
|
33
|
-
channelId: string;
|
|
34
|
-
createdAt: string;
|
|
35
|
-
escrowedAmount: string;
|
|
36
|
-
expiresAtUnix: number | null;
|
|
37
|
-
lastAuthorizedAmount: string;
|
|
38
|
-
lastSequence: number;
|
|
39
|
-
openSlot: number;
|
|
40
|
-
payer: string;
|
|
41
|
-
recipient: string;
|
|
42
|
-
serverNonce: string;
|
|
43
|
-
settledAmount: string;
|
|
44
|
-
status: 'closed' | 'closing' | 'expired' | 'open';
|
|
45
|
-
}
|
|
46
|
-
export type SessionCredentialPayload = {
|
|
47
|
-
action: 'close';
|
|
48
|
-
channelId: string;
|
|
49
|
-
closeTx?: string;
|
|
50
|
-
voucher: SignedSessionVoucher;
|
|
51
|
-
} | {
|
|
52
|
-
action: 'open';
|
|
53
|
-
authorizationMode: AuthorizationMode;
|
|
54
|
-
capabilities?: {
|
|
55
|
-
allowedActions?: string[];
|
|
56
|
-
maxCumulativeAmount?: string;
|
|
57
|
-
};
|
|
58
|
-
channelId: string;
|
|
59
|
-
depositAmount: string;
|
|
60
|
-
expiresAt?: string;
|
|
61
|
-
openTx: string;
|
|
62
|
-
payer: string;
|
|
63
|
-
voucher: SignedSessionVoucher;
|
|
64
|
-
} | {
|
|
65
|
-
action: 'topup';
|
|
66
|
-
additionalAmount: string;
|
|
67
|
-
channelId: string;
|
|
68
|
-
topupTx: string;
|
|
69
|
-
} | {
|
|
70
|
-
action: 'update';
|
|
71
|
-
channelId: string;
|
|
72
|
-
voucher: SignedSessionVoucher;
|
|
73
|
-
};
|
|
74
|
-
export interface VoucherVerifier {
|
|
75
|
-
verify(voucher: SignedSessionVoucher, channel: ChannelState): Promise<boolean>;
|
|
76
|
-
}
|
|
77
|
-
export interface SessionAuthorizer {
|
|
78
|
-
authorizeClose(input: AuthorizeCloseInput): Promise<AuthorizedClose>;
|
|
79
|
-
authorizeOpen(input: AuthorizeOpenInput): Promise<AuthorizedOpen>;
|
|
80
|
-
authorizeTopup(input: AuthorizeTopupInput): Promise<AuthorizedTopup>;
|
|
81
|
-
authorizeUpdate(input: AuthorizeUpdateInput): Promise<AuthorizedUpdate>;
|
|
82
|
-
getCapabilities(): AuthorizerCapabilities;
|
|
83
|
-
getMode(): AuthorizationMode;
|
|
84
|
-
}
|
|
85
|
-
export interface AuthorizeOpenInput {
|
|
86
|
-
asset: {
|
|
87
|
-
decimals: number;
|
|
88
|
-
kind: 'sol' | 'spl';
|
|
89
|
-
mint?: string;
|
|
90
|
-
};
|
|
91
|
-
channelId: string;
|
|
92
|
-
channelProgram: string;
|
|
93
|
-
depositAmount: string;
|
|
94
|
-
network: string;
|
|
95
|
-
pricing?: {
|
|
96
|
-
amountPerUnit: string;
|
|
97
|
-
meter: string;
|
|
98
|
-
unit: string;
|
|
99
|
-
};
|
|
100
|
-
recipient: string;
|
|
101
|
-
serverNonce: string;
|
|
102
|
-
}
|
|
103
|
-
export interface AuthorizedOpen {
|
|
104
|
-
capabilities: AuthorizerCapabilities;
|
|
105
|
-
expiresAt?: string;
|
|
106
|
-
openTx: string;
|
|
107
|
-
voucher: SignedSessionVoucher;
|
|
108
|
-
}
|
|
109
|
-
export interface AuthorizeUpdateInput {
|
|
110
|
-
channelId: string;
|
|
111
|
-
channelProgram: string;
|
|
112
|
-
cumulativeAmount: string;
|
|
113
|
-
meter: string;
|
|
114
|
-
network: string;
|
|
115
|
-
recipient: string;
|
|
116
|
-
sequence: number;
|
|
117
|
-
serverNonce: string;
|
|
118
|
-
units: string;
|
|
119
|
-
}
|
|
120
|
-
export interface AuthorizedUpdate {
|
|
121
|
-
voucher: SignedSessionVoucher;
|
|
122
|
-
}
|
|
123
|
-
export interface AuthorizeTopupInput {
|
|
124
|
-
additionalAmount: string;
|
|
125
|
-
channelId: string;
|
|
126
|
-
channelProgram: string;
|
|
127
|
-
network: string;
|
|
128
|
-
}
|
|
129
|
-
export interface AuthorizedTopup {
|
|
130
|
-
topupTx: string;
|
|
131
|
-
}
|
|
132
|
-
export interface AuthorizeCloseInput {
|
|
133
|
-
channelId: string;
|
|
134
|
-
channelProgram: string;
|
|
135
|
-
finalCumulativeAmount: string;
|
|
136
|
-
network: string;
|
|
137
|
-
recipient: string;
|
|
138
|
-
sequence: number;
|
|
139
|
-
serverNonce: string;
|
|
140
|
-
}
|
|
141
|
-
export interface AuthorizedClose {
|
|
142
|
-
closeTx?: string;
|
|
143
|
-
voucher: SignedSessionVoucher;
|
|
144
|
-
}
|
|
145
|
-
export interface AuthorizerCapabilities {
|
|
146
|
-
allowedActions?: Array<'close' | 'open' | 'topup' | 'update'>;
|
|
147
|
-
allowedPrograms?: string[];
|
|
148
|
-
expiresAt?: string;
|
|
149
|
-
maxCumulativeAmount?: string;
|
|
150
|
-
maxDepositAmount?: string;
|
|
151
|
-
mode: AuthorizationMode;
|
|
152
|
-
requiresInteractiveApproval: {
|
|
153
|
-
close: boolean;
|
|
154
|
-
open: boolean;
|
|
155
|
-
topup: boolean;
|
|
156
|
-
update: boolean;
|
|
157
|
-
};
|
|
158
|
-
}
|
|
159
|
-
export type SessionPolicyProfile = {
|
|
160
|
-
autoTopup?: {
|
|
161
|
-
amount: string;
|
|
162
|
-
enabled: boolean;
|
|
163
|
-
triggerBelow: string;
|
|
164
|
-
};
|
|
165
|
-
depositLimit?: string;
|
|
166
|
-
profile: 'swig-time-bound';
|
|
167
|
-
spendLimit?: string;
|
|
168
|
-
ttlSeconds: number;
|
|
169
|
-
} | {
|
|
170
|
-
maxCumulativeAmount: string;
|
|
171
|
-
maxDepositAmount?: string;
|
|
172
|
-
profile: 'wallet-budget';
|
|
173
|
-
requireApprovalOnTopup?: boolean;
|
|
174
|
-
validUntil?: string;
|
|
175
|
-
} | {
|
|
176
|
-
profile: 'wallet-manual';
|
|
177
|
-
requireApprovalOnEveryUpdate: boolean;
|
|
178
|
-
};
|
|
179
|
-
//# sourceMappingURL=Types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Types.d.ts","sourceRoot":"","sources":["../../src/session/Types.ts"],"names":[],"mappings":"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"}
|
package/dist/session/Types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Types.js","sourceRoot":"","sources":["../../src/session/Types.ts"],"names":[],"mappings":""}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { type MessagePartialSigner } from '@solana/kit';
|
|
2
|
-
import type { SessionVoucher, SignedSessionVoucher } from './Types.js';
|
|
3
|
-
export declare function serializeVoucher(voucher: SessionVoucher): Uint8Array;
|
|
4
|
-
export declare function signVoucher(signer: MessagePartialSigner, voucher: SessionVoucher): Promise<SignedSessionVoucher>;
|
|
5
|
-
export declare function verifyVoucherSignature(signed: SignedSessionVoucher): Promise<boolean>;
|
|
6
|
-
export declare function parseVoucherFromPayload(payload: unknown): SignedSessionVoucher;
|
|
7
|
-
//# sourceMappingURL=Voucher.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Voucher.d.ts","sourceRoot":"","sources":["../../src/session/Voucher.ts"],"names":[],"mappings":"AAAA,OAAO,EAMH,KAAK,oBAAoB,EAG5B,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAOvE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,UAAU,CAGpE;AAED,wBAAsB,WAAW,CAC7B,MAAM,EAAE,oBAAoB,EAC5B,OAAO,EAAE,cAAc,GACxB,OAAO,CAAC,oBAAoB,CAAC,CAe/B;AAED,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CAa3F;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,oBAAoB,CAiC9E"}
|
package/dist/session/Voucher.js
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { address, createSignableMessage, getBase58Decoder, getBase58Encoder, getPublicKeyFromAddress, signatureBytes, verifySignature, } from '@solana/kit';
|
|
2
|
-
const DOMAIN_SEPARATOR = 'solana-mpp-session-voucher-v1:';
|
|
3
|
-
const textEncoder = new TextEncoder();
|
|
4
|
-
const base58Encoder = getBase58Encoder();
|
|
5
|
-
const base58Decoder = getBase58Decoder();
|
|
6
|
-
export function serializeVoucher(voucher) {
|
|
7
|
-
const canonical = JSON.stringify(canonicalize(voucher));
|
|
8
|
-
return textEncoder.encode(`${DOMAIN_SEPARATOR}${canonical}`);
|
|
9
|
-
}
|
|
10
|
-
export async function signVoucher(signer, voucher) {
|
|
11
|
-
const signable = createSignableMessage(serializeVoucher(voucher));
|
|
12
|
-
const [signatureDictionary] = await signer.signMessages([signable]);
|
|
13
|
-
const signatureValue = signatureDictionary[signer.address];
|
|
14
|
-
if (!signatureValue) {
|
|
15
|
-
throw new Error('Signer did not produce a voucher signature');
|
|
16
|
-
}
|
|
17
|
-
return {
|
|
18
|
-
signature: base58Decoder.decode(signatureValue),
|
|
19
|
-
signatureType: 'ed25519',
|
|
20
|
-
signer: signer.address,
|
|
21
|
-
voucher,
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
export async function verifyVoucherSignature(signed) {
|
|
25
|
-
if (signed.signatureType !== 'ed25519' && signed.signatureType !== 'swig-session') {
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
try {
|
|
29
|
-
const publicKey = await getPublicKeyFromAddress(address(signed.signer));
|
|
30
|
-
const signature = signatureBytes(base58Encoder.encode(signed.signature));
|
|
31
|
-
const serialized = serializeVoucher(signed.voucher);
|
|
32
|
-
return await verifySignature(publicKey, signature, serialized);
|
|
33
|
-
}
|
|
34
|
-
catch {
|
|
35
|
-
return false;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
export function parseVoucherFromPayload(payload) {
|
|
39
|
-
const maybeRoot = asRecord(payload, 'Session payload must be an object');
|
|
40
|
-
const source = hasSignedVoucherEnvelope(maybeRoot)
|
|
41
|
-
? maybeRoot
|
|
42
|
-
: asRecord(maybeRoot.voucher, 'Payload must include a signed voucher in `voucher`');
|
|
43
|
-
const rawVoucher = asRecord(source.voucher, 'Signed voucher must include `voucher` object');
|
|
44
|
-
const signatureTypeRaw = readString(source, 'signatureType');
|
|
45
|
-
if (signatureTypeRaw !== 'ed25519' && signatureTypeRaw !== 'swig-session') {
|
|
46
|
-
throw new Error('Signed voucher `signatureType` must be "ed25519" or "swig-session"');
|
|
47
|
-
}
|
|
48
|
-
const expiresAt = readOptionalString(rawVoucher, 'expiresAt');
|
|
49
|
-
return {
|
|
50
|
-
signature: readString(source, 'signature'),
|
|
51
|
-
signatureType: signatureTypeRaw,
|
|
52
|
-
signer: readString(source, 'signer'),
|
|
53
|
-
voucher: {
|
|
54
|
-
channelId: readString(rawVoucher, 'channelId'),
|
|
55
|
-
cumulativeAmount: readString(rawVoucher, 'cumulativeAmount'),
|
|
56
|
-
meter: readString(rawVoucher, 'meter'),
|
|
57
|
-
payer: readString(rawVoucher, 'payer'),
|
|
58
|
-
recipient: readString(rawVoucher, 'recipient'),
|
|
59
|
-
sequence: readInteger(rawVoucher, 'sequence'),
|
|
60
|
-
units: readString(rawVoucher, 'units'),
|
|
61
|
-
...(expiresAt !== undefined ? { expiresAt } : {}),
|
|
62
|
-
chainId: readString(rawVoucher, 'chainId'),
|
|
63
|
-
channelProgram: readString(rawVoucher, 'channelProgram'),
|
|
64
|
-
serverNonce: readString(rawVoucher, 'serverNonce'),
|
|
65
|
-
},
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
function canonicalize(value) {
|
|
69
|
-
if (Array.isArray(value)) {
|
|
70
|
-
return value.map(item => canonicalize(item));
|
|
71
|
-
}
|
|
72
|
-
if (value && typeof value === 'object') {
|
|
73
|
-
const record = value;
|
|
74
|
-
const normalized = {};
|
|
75
|
-
for (const key of Object.keys(record).sort()) {
|
|
76
|
-
const item = record[key];
|
|
77
|
-
if (item !== undefined) {
|
|
78
|
-
normalized[key] = canonicalize(item);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
return normalized;
|
|
82
|
-
}
|
|
83
|
-
return value;
|
|
84
|
-
}
|
|
85
|
-
function hasSignedVoucherEnvelope(value) {
|
|
86
|
-
return 'voucher' in value && 'signer' in value && 'signature' in value && 'signatureType' in value;
|
|
87
|
-
}
|
|
88
|
-
function asRecord(value, message) {
|
|
89
|
-
if (!value || typeof value !== 'object') {
|
|
90
|
-
throw new Error(message);
|
|
91
|
-
}
|
|
92
|
-
return value;
|
|
93
|
-
}
|
|
94
|
-
function readString(record, key) {
|
|
95
|
-
const value = record[key];
|
|
96
|
-
if (typeof value !== 'string') {
|
|
97
|
-
throw new Error(`Expected string field: ${key}`);
|
|
98
|
-
}
|
|
99
|
-
return value;
|
|
100
|
-
}
|
|
101
|
-
function readOptionalString(record, key) {
|
|
102
|
-
const value = record[key];
|
|
103
|
-
if (value === undefined) {
|
|
104
|
-
return undefined;
|
|
105
|
-
}
|
|
106
|
-
if (typeof value !== 'string') {
|
|
107
|
-
throw new Error(`Expected optional string field: ${key}`);
|
|
108
|
-
}
|
|
109
|
-
return value;
|
|
110
|
-
}
|
|
111
|
-
function readInteger(record, key) {
|
|
112
|
-
const value = record[key];
|
|
113
|
-
if (!Number.isInteger(value)) {
|
|
114
|
-
throw new Error(`Expected integer field: ${key}`);
|
|
115
|
-
}
|
|
116
|
-
return value;
|
|
117
|
-
}
|
|
118
|
-
//# sourceMappingURL=Voucher.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Voucher.js","sourceRoot":"","sources":["../../src/session/Voucher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { type MessagePartialSigner } from '@solana/kit';
|
|
2
|
-
import { type AuthorizeCloseInput, type AuthorizedClose, type AuthorizedOpen, type AuthorizedTopup, type AuthorizedUpdate, type AuthorizeOpenInput, type AuthorizerCapabilities, type AuthorizeTopupInput, type AuthorizeUpdateInput, type SessionAuthorizer } from '../Types.js';
|
|
3
|
-
type SwigRoleActions = {
|
|
4
|
-
canUseProgram?: (programId: string) => boolean;
|
|
5
|
-
solSpendLimit?: () => bigint | null;
|
|
6
|
-
tokenSpendLimit?: (mint: string) => bigint | null;
|
|
7
|
-
};
|
|
8
|
-
type SwigAddressLike = {
|
|
9
|
-
toBase58?: () => string;
|
|
10
|
-
};
|
|
11
|
-
type SwigRoleAuthority = {
|
|
12
|
-
ed25519PublicKey?: SwigAddressLike;
|
|
13
|
-
publicKey?: SwigAddressLike;
|
|
14
|
-
sessionKey?: SwigAddressLike;
|
|
15
|
-
};
|
|
16
|
-
type SwigRole = {
|
|
17
|
-
actions?: SwigRoleActions;
|
|
18
|
-
authority?: SwigRoleAuthority;
|
|
19
|
-
id: number;
|
|
20
|
-
};
|
|
21
|
-
type SwigAccount = {
|
|
22
|
-
findRoleById?: (id: number) => SwigRole | null;
|
|
23
|
-
findRoleBySessionKey?: (sessionKey: string) => SwigRole | null;
|
|
24
|
-
findRolesByEd25519SignerPk?: (signerPk: string) => SwigRole[];
|
|
25
|
-
};
|
|
26
|
-
export type BudgetSwigModule = {
|
|
27
|
-
fetchSwig: (rpc: unknown, swigAddress: string) => Promise<SwigAccount>;
|
|
28
|
-
};
|
|
29
|
-
type SwigOnChainRoleConfig = {
|
|
30
|
-
rpcUrl?: string;
|
|
31
|
-
swigAddress: string;
|
|
32
|
-
swigRoleId: number;
|
|
33
|
-
};
|
|
34
|
-
export interface BudgetAuthorizerParameters {
|
|
35
|
-
allowedPrograms?: string[];
|
|
36
|
-
buildCloseTx?: (input: AuthorizeCloseInput) => Promise<string> | string;
|
|
37
|
-
buildOpenTx?: (input: AuthorizeOpenInput) => Promise<string> | string;
|
|
38
|
-
buildTopupTx?: (input: AuthorizeTopupInput) => Promise<string> | string;
|
|
39
|
-
maxCumulativeAmount: string;
|
|
40
|
-
maxDepositAmount?: string;
|
|
41
|
-
requireApprovalOnTopup?: boolean;
|
|
42
|
-
signer: MessagePartialSigner;
|
|
43
|
-
swig: SwigOnChainRoleConfig;
|
|
44
|
-
swigModule?: BudgetSwigModule;
|
|
45
|
-
validUntil?: string;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Session authorizer for `regular_budget` mode.
|
|
49
|
-
*
|
|
50
|
-
* Budget limits are fail-closed against a concrete on-chain Swig role:
|
|
51
|
-
* - `authorizeOpen` reads role constraints from chain and clamps local limits.
|
|
52
|
-
* - `authorizeUpdate`/`authorizeTopup`/`authorizeClose` require open-time state.
|
|
53
|
-
* - Program access and spend caps are validated from Swig role actions.
|
|
54
|
-
*/
|
|
55
|
-
export declare class BudgetAuthorizer implements SessionAuthorizer {
|
|
56
|
-
private readonly signer;
|
|
57
|
-
private readonly maxCumulativeAmount;
|
|
58
|
-
private readonly maxDepositAmount?;
|
|
59
|
-
private readonly validUntil?;
|
|
60
|
-
private readonly validUntilUnixMs?;
|
|
61
|
-
private readonly allowedPrograms?;
|
|
62
|
-
private readonly swig;
|
|
63
|
-
private readonly buildOpenTx?;
|
|
64
|
-
private readonly buildTopupTx?;
|
|
65
|
-
private readonly buildCloseTx?;
|
|
66
|
-
private readonly channels;
|
|
67
|
-
private readonly capabilities;
|
|
68
|
-
private swigLoaded;
|
|
69
|
-
private swigModule;
|
|
70
|
-
constructor(parameters: BudgetAuthorizerParameters);
|
|
71
|
-
getMode(): "regular_budget";
|
|
72
|
-
getCapabilities(): AuthorizerCapabilities;
|
|
73
|
-
authorizeOpen(input: AuthorizeOpenInput): Promise<AuthorizedOpen>;
|
|
74
|
-
authorizeUpdate(input: AuthorizeUpdateInput): Promise<AuthorizedUpdate>;
|
|
75
|
-
authorizeTopup(input: AuthorizeTopupInput): Promise<AuthorizedTopup>;
|
|
76
|
-
authorizeClose(input: AuthorizeCloseInput): Promise<AuthorizedClose>;
|
|
77
|
-
private assertNotExpired;
|
|
78
|
-
private assertProgramAllowed;
|
|
79
|
-
private assertMonotonic;
|
|
80
|
-
private resolveOnChainConstraints;
|
|
81
|
-
private resolveSwigRole;
|
|
82
|
-
private resolveOnChainSpendLimit;
|
|
83
|
-
private resolveRpcUrl;
|
|
84
|
-
private ensureSwigInstalled;
|
|
85
|
-
private resolveOpenTx;
|
|
86
|
-
private resolveTopupTx;
|
|
87
|
-
private resolveCloseTx;
|
|
88
|
-
}
|
|
89
|
-
export {};
|
|
90
|
-
//# sourceMappingURL=BudgetAuthorizer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BudgetAuthorizer.d.ts","sourceRoot":"","sources":["../../../src/session/authorizers/BudgetAuthorizer.ts"],"names":[],"mappings":"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"}
|