@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,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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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=Types.js.map
@@ -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"}
@@ -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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"}