@shunt-network/sdk 1.0.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 (96) hide show
  1. package/dist/clients/typescript/src/__tests__/instruction-parsers.test.d.ts +1 -0
  2. package/dist/clients/typescript/src/__tests__/voucher-numeric-safety.test.d.ts +1 -0
  3. package/dist/clients/typescript/src/__tests__/voucher-types.test-d.d.ts +1 -0
  4. package/dist/clients/typescript/src/generated/accounts/channel.d.ts +59 -0
  5. package/dist/clients/typescript/src/generated/accounts/index.d.ts +8 -0
  6. package/dist/clients/typescript/src/generated/errors/index.d.ts +8 -0
  7. package/dist/clients/typescript/src/generated/errors/paymentChannels.d.ts +84 -0
  8. package/dist/clients/typescript/src/generated/index.d.ts +13 -0
  9. package/dist/clients/typescript/src/generated/instructions/distribute.d.ts +90 -0
  10. package/dist/clients/typescript/src/generated/instructions/emitEvent.d.ts +42 -0
  11. package/dist/clients/typescript/src/generated/instructions/index.d.ts +17 -0
  12. package/dist/clients/typescript/src/generated/instructions/open.d.ts +100 -0
  13. package/dist/clients/typescript/src/generated/instructions/reclaim.d.ts +39 -0
  14. package/dist/clients/typescript/src/generated/instructions/requestClose.d.ts +39 -0
  15. package/dist/clients/typescript/src/generated/instructions/seal.d.ts +36 -0
  16. package/dist/clients/typescript/src/generated/instructions/settle.d.ts +39 -0
  17. package/dist/clients/typescript/src/generated/instructions/settleAndSeal.d.ts +47 -0
  18. package/dist/clients/typescript/src/generated/instructions/topUp.d.ts +56 -0
  19. package/dist/clients/typescript/src/generated/instructions/withdrawPayer.d.ts +51 -0
  20. package/dist/clients/typescript/src/generated/pdas/eventAuthority.d.ts +11 -0
  21. package/dist/clients/typescript/src/generated/pdas/index.d.ts +8 -0
  22. package/dist/clients/typescript/src/generated/programs/index.d.ts +8 -0
  23. package/dist/clients/typescript/src/generated/programs/paymentChannels.d.ts +80 -0
  24. package/dist/clients/typescript/src/generated/types/accountDiscriminator.d.ts +16 -0
  25. package/dist/clients/typescript/src/generated/types/channelStatus.d.ts +18 -0
  26. package/dist/clients/typescript/src/generated/types/distributeArgs.d.ts +18 -0
  27. package/dist/clients/typescript/src/generated/types/distributionEntry.d.ts +16 -0
  28. package/dist/clients/typescript/src/generated/types/index.d.ts +20 -0
  29. package/dist/clients/typescript/src/generated/types/openArgs.d.ts +26 -0
  30. package/dist/clients/typescript/src/generated/types/opened.d.ts +19 -0
  31. package/dist/clients/typescript/src/generated/types/payoutBeneficiary.d.ts +17 -0
  32. package/dist/clients/typescript/src/generated/types/payoutRedirected.d.ts +26 -0
  33. package/dist/clients/typescript/src/generated/types/redirectReason.d.ts +18 -0
  34. package/dist/clients/typescript/src/generated/types/settleAndSealArgs.d.ts +15 -0
  35. package/dist/clients/typescript/src/generated/types/settlementWatermarks.d.ts +19 -0
  36. package/dist/clients/typescript/src/generated/types/topUpArgs.d.ts +17 -0
  37. package/dist/clients/typescript/src/generated/types/voucherArgs.d.ts +23 -0
  38. package/dist/clients/typescript/src/index.d.ts +1 -0
  39. package/dist/clients/typescript/src/safe-codecs.d.ts +6 -0
  40. package/dist/clients/typescript/tsup.config.d.ts +2 -0
  41. package/dist/index.cjs +1399 -0
  42. package/dist/index.d.ts +4 -0
  43. package/dist/index.js +1549 -0
  44. package/dist/sdk/channel.d.ts +10 -0
  45. package/dist/sdk/client.d.ts +31 -0
  46. package/dist/sdk/utils.d.ts +3 -0
  47. package/dist/sdk/voucher.d.ts +14 -0
  48. package/package.json +36 -0
  49. package/src/clients/typescript/package.json +32 -0
  50. package/src/clients/typescript/src/__tests__/instruction-parsers.test.ts +81 -0
  51. package/src/clients/typescript/src/__tests__/voucher-numeric-safety.test.ts +176 -0
  52. package/src/clients/typescript/src/__tests__/voucher-types.test-d.ts +8 -0
  53. package/src/clients/typescript/src/generated/accounts/channel.ts +192 -0
  54. package/src/clients/typescript/src/generated/accounts/index.ts +9 -0
  55. package/src/clients/typescript/src/generated/errors/index.ts +9 -0
  56. package/src/clients/typescript/src/generated/errors/paymentChannels.ts +251 -0
  57. package/src/clients/typescript/src/generated/index.ts +14 -0
  58. package/src/clients/typescript/src/generated/instructions/distribute.ts +517 -0
  59. package/src/clients/typescript/src/generated/instructions/emitEvent.ts +194 -0
  60. package/src/clients/typescript/src/generated/instructions/index.ts +18 -0
  61. package/src/clients/typescript/src/generated/instructions/open.ts +577 -0
  62. package/src/clients/typescript/src/generated/instructions/reclaim.ts +165 -0
  63. package/src/clients/typescript/src/generated/instructions/requestClose.ts +173 -0
  64. package/src/clients/typescript/src/generated/instructions/seal.ts +151 -0
  65. package/src/clients/typescript/src/generated/instructions/settle.ts +180 -0
  66. package/src/clients/typescript/src/generated/instructions/settleAndSeal.ts +224 -0
  67. package/src/clients/typescript/src/generated/instructions/topUp.ts +267 -0
  68. package/src/clients/typescript/src/generated/instructions/withdrawPayer.ts +246 -0
  69. package/src/clients/typescript/src/generated/pdas/eventAuthority.ts +26 -0
  70. package/src/clients/typescript/src/generated/pdas/index.ts +9 -0
  71. package/src/clients/typescript/src/generated/programs/index.ts +9 -0
  72. package/src/clients/typescript/src/generated/programs/paymentChannels.ts +366 -0
  73. package/src/clients/typescript/src/generated/types/accountDiscriminator.ts +41 -0
  74. package/src/clients/typescript/src/generated/types/channelStatus.ts +40 -0
  75. package/src/clients/typescript/src/generated/types/distributeArgs.ts +47 -0
  76. package/src/clients/typescript/src/generated/types/distributionEntry.ts +48 -0
  77. package/src/clients/typescript/src/generated/types/index.ts +21 -0
  78. package/src/clients/typescript/src/generated/types/openArgs.ts +70 -0
  79. package/src/clients/typescript/src/generated/types/opened.ts +42 -0
  80. package/src/clients/typescript/src/generated/types/payoutBeneficiary.ts +42 -0
  81. package/src/clients/typescript/src/generated/types/payoutRedirected.ts +76 -0
  82. package/src/clients/typescript/src/generated/types/redirectReason.ts +40 -0
  83. package/src/clients/typescript/src/generated/types/settleAndSealArgs.ts +39 -0
  84. package/src/clients/typescript/src/generated/types/settlementWatermarks.ts +48 -0
  85. package/src/clients/typescript/src/generated/types/topUpArgs.ts +33 -0
  86. package/src/clients/typescript/src/generated/types/voucherArgs.ts +68 -0
  87. package/src/clients/typescript/src/index.ts +1 -0
  88. package/src/clients/typescript/src/safe-codecs.ts +82 -0
  89. package/src/clients/typescript/tsconfig.json +11 -0
  90. package/src/clients/typescript/tsup.config.ts +9 -0
  91. package/src/index.ts +4 -0
  92. package/src/sdk/channel.ts +128 -0
  93. package/src/sdk/client.ts +22 -0
  94. package/src/sdk/utils.ts +29 -0
  95. package/src/sdk/voucher.ts +50 -0
  96. package/tsconfig.json +15 -0
@@ -0,0 +1,18 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the Codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun Codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+
9
+ export * from "./distribute";
10
+ export * from "./emitEvent";
11
+ export * from "./open";
12
+ export * from "./reclaim";
13
+ export * from "./requestClose";
14
+ export * from "./seal";
15
+ export * from "./settle";
16
+ export * from "./settleAndSeal";
17
+ export * from "./topUp";
18
+ export * from "./withdrawPayer";
@@ -0,0 +1,577 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the Codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun Codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+
9
+ import {
10
+ combineCodec,
11
+ getStructDecoder,
12
+ getStructEncoder,
13
+ SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,
14
+ SolanaError,
15
+ transformEncoder,
16
+ type AccountMeta,
17
+ type AccountSignerMeta,
18
+ type Address,
19
+ type Codec,
20
+ type Decoder,
21
+ type Encoder,
22
+ type Instruction,
23
+ type InstructionWithAccounts,
24
+ type InstructionWithData,
25
+ type ReadonlyAccount,
26
+ type ReadonlyUint8Array,
27
+ type TransactionSigner,
28
+ type WritableAccount,
29
+ type WritableSignerAccount,
30
+ } from "@solana/kit";
31
+ import {
32
+ getAccountMetaFactory,
33
+ type ResolvedInstructionAccount,
34
+ } from "@solana/program-client-core";
35
+ import { getU8Decoder, getU8Encoder } from "../../safe-codecs.js";
36
+ import { findEventAuthorityPda } from "../pdas";
37
+ import { PAYMENT_CHANNELS_PROGRAM_ADDRESS } from "../programs";
38
+ import {
39
+ getOpenArgsDecoder,
40
+ getOpenArgsEncoder,
41
+ type OpenArgs,
42
+ type OpenArgsArgs,
43
+ } from "../types";
44
+
45
+ export const OPEN_DISCRIMINATOR = 1;
46
+
47
+ export function getOpenDiscriminatorBytes(): ReadonlyUint8Array {
48
+ return getU8Encoder().encode(OPEN_DISCRIMINATOR);
49
+ }
50
+
51
+ export type OpenInstruction<
52
+ TProgram extends string = typeof PAYMENT_CHANNELS_PROGRAM_ADDRESS,
53
+ TAccountPayer extends string | AccountMeta<string> = string,
54
+ TAccountRentPayer extends string | AccountMeta<string> = string,
55
+ TAccountPayee extends string | AccountMeta<string> = string,
56
+ TAccountMint extends string | AccountMeta<string> = string,
57
+ TAccountAuthorizedSigner extends string | AccountMeta<string> = string,
58
+ TAccountChannel extends string | AccountMeta<string> = string,
59
+ TAccountPayerTokenAccount extends string | AccountMeta<string> = string,
60
+ TAccountChannelTokenAccount extends string | AccountMeta<string> = string,
61
+ TAccountTokenProgram extends string | AccountMeta<string> = string,
62
+ TAccountSystemProgram extends string | AccountMeta<string> =
63
+ "11111111111111111111111111111111",
64
+ TAccountRent extends string | AccountMeta<string> = string,
65
+ TAccountAssociatedTokenProgram extends string | AccountMeta<string> = string,
66
+ TAccountEventAuthority extends string | AccountMeta<string> = string,
67
+ TAccountSelfProgram extends string | AccountMeta<string> =
68
+ "CHNLxYvVA28MJP9PrFuDXccuoGXAx7jBacfLEkahyGsX",
69
+ TRemainingAccounts extends readonly AccountMeta<string>[] = [],
70
+ > = Instruction<TProgram> &
71
+ InstructionWithData<ReadonlyUint8Array> &
72
+ InstructionWithAccounts<
73
+ [
74
+ TAccountPayer extends string
75
+ ? WritableSignerAccount<TAccountPayer> &
76
+ AccountSignerMeta<TAccountPayer>
77
+ : TAccountPayer,
78
+ TAccountRentPayer extends string
79
+ ? WritableSignerAccount<TAccountRentPayer> &
80
+ AccountSignerMeta<TAccountRentPayer>
81
+ : TAccountRentPayer,
82
+ TAccountPayee extends string
83
+ ? ReadonlyAccount<TAccountPayee>
84
+ : TAccountPayee,
85
+ TAccountMint extends string
86
+ ? ReadonlyAccount<TAccountMint>
87
+ : TAccountMint,
88
+ TAccountAuthorizedSigner extends string
89
+ ? ReadonlyAccount<TAccountAuthorizedSigner>
90
+ : TAccountAuthorizedSigner,
91
+ TAccountChannel extends string
92
+ ? WritableAccount<TAccountChannel>
93
+ : TAccountChannel,
94
+ TAccountPayerTokenAccount extends string
95
+ ? WritableAccount<TAccountPayerTokenAccount>
96
+ : TAccountPayerTokenAccount,
97
+ TAccountChannelTokenAccount extends string
98
+ ? WritableAccount<TAccountChannelTokenAccount>
99
+ : TAccountChannelTokenAccount,
100
+ TAccountTokenProgram extends string
101
+ ? ReadonlyAccount<TAccountTokenProgram>
102
+ : TAccountTokenProgram,
103
+ TAccountSystemProgram extends string
104
+ ? ReadonlyAccount<TAccountSystemProgram>
105
+ : TAccountSystemProgram,
106
+ TAccountRent extends string
107
+ ? ReadonlyAccount<TAccountRent>
108
+ : TAccountRent,
109
+ TAccountAssociatedTokenProgram extends string
110
+ ? ReadonlyAccount<TAccountAssociatedTokenProgram>
111
+ : TAccountAssociatedTokenProgram,
112
+ TAccountEventAuthority extends string
113
+ ? ReadonlyAccount<TAccountEventAuthority>
114
+ : TAccountEventAuthority,
115
+ TAccountSelfProgram extends string
116
+ ? ReadonlyAccount<TAccountSelfProgram>
117
+ : TAccountSelfProgram,
118
+ ...TRemainingAccounts,
119
+ ]
120
+ >;
121
+
122
+ export type OpenInstructionData = { discriminator: number; openArgs: OpenArgs };
123
+
124
+ export type OpenInstructionDataArgs = { openArgs: OpenArgsArgs };
125
+
126
+ export function getOpenInstructionDataEncoder(): Encoder<OpenInstructionDataArgs> {
127
+ return transformEncoder(
128
+ getStructEncoder([
129
+ ["discriminator", getU8Encoder()],
130
+ ["openArgs", getOpenArgsEncoder()],
131
+ ]),
132
+ (value) => ({ ...value, discriminator: OPEN_DISCRIMINATOR }),
133
+ );
134
+ }
135
+
136
+ export function getOpenInstructionDataDecoder(): Decoder<OpenInstructionData> {
137
+ return getStructDecoder([
138
+ ["discriminator", getU8Decoder()],
139
+ ["openArgs", getOpenArgsDecoder()],
140
+ ]);
141
+ }
142
+
143
+ export function getOpenInstructionDataCodec(): Codec<
144
+ OpenInstructionDataArgs,
145
+ OpenInstructionData
146
+ > {
147
+ return combineCodec(
148
+ getOpenInstructionDataEncoder(),
149
+ getOpenInstructionDataDecoder(),
150
+ );
151
+ }
152
+
153
+ export type OpenAsyncInput<
154
+ TAccountPayer extends string = string,
155
+ TAccountRentPayer extends string = string,
156
+ TAccountPayee extends string = string,
157
+ TAccountMint extends string = string,
158
+ TAccountAuthorizedSigner extends string = string,
159
+ TAccountChannel extends string = string,
160
+ TAccountPayerTokenAccount extends string = string,
161
+ TAccountChannelTokenAccount extends string = string,
162
+ TAccountTokenProgram extends string = string,
163
+ TAccountSystemProgram extends string = string,
164
+ TAccountRent extends string = string,
165
+ TAccountAssociatedTokenProgram extends string = string,
166
+ TAccountEventAuthority extends string = string,
167
+ TAccountSelfProgram extends string = string,
168
+ > = {
169
+ payer: TransactionSigner<TAccountPayer>;
170
+ rentPayer: TransactionSigner<TAccountRentPayer>;
171
+ payee: Address<TAccountPayee>;
172
+ mint: Address<TAccountMint>;
173
+ authorizedSigner: Address<TAccountAuthorizedSigner>;
174
+ channel: Address<TAccountChannel>;
175
+ payerTokenAccount: Address<TAccountPayerTokenAccount>;
176
+ channelTokenAccount: Address<TAccountChannelTokenAccount>;
177
+ tokenProgram: Address<TAccountTokenProgram>;
178
+ systemProgram?: Address<TAccountSystemProgram>;
179
+ rent: Address<TAccountRent>;
180
+ associatedTokenProgram: Address<TAccountAssociatedTokenProgram>;
181
+ eventAuthority?: Address<TAccountEventAuthority>;
182
+ selfProgram?: Address<TAccountSelfProgram>;
183
+ openArgs: OpenInstructionDataArgs["openArgs"];
184
+ };
185
+
186
+ export async function getOpenInstructionAsync<
187
+ TAccountPayer extends string,
188
+ TAccountRentPayer extends string,
189
+ TAccountPayee extends string,
190
+ TAccountMint extends string,
191
+ TAccountAuthorizedSigner extends string,
192
+ TAccountChannel extends string,
193
+ TAccountPayerTokenAccount extends string,
194
+ TAccountChannelTokenAccount extends string,
195
+ TAccountTokenProgram extends string,
196
+ TAccountSystemProgram extends string,
197
+ TAccountRent extends string,
198
+ TAccountAssociatedTokenProgram extends string,
199
+ TAccountEventAuthority extends string,
200
+ TAccountSelfProgram extends string,
201
+ TProgramAddress extends Address = typeof PAYMENT_CHANNELS_PROGRAM_ADDRESS,
202
+ >(
203
+ input: OpenAsyncInput<
204
+ TAccountPayer,
205
+ TAccountRentPayer,
206
+ TAccountPayee,
207
+ TAccountMint,
208
+ TAccountAuthorizedSigner,
209
+ TAccountChannel,
210
+ TAccountPayerTokenAccount,
211
+ TAccountChannelTokenAccount,
212
+ TAccountTokenProgram,
213
+ TAccountSystemProgram,
214
+ TAccountRent,
215
+ TAccountAssociatedTokenProgram,
216
+ TAccountEventAuthority,
217
+ TAccountSelfProgram
218
+ >,
219
+ config?: { programAddress?: TProgramAddress },
220
+ ): Promise<
221
+ OpenInstruction<
222
+ TProgramAddress,
223
+ TAccountPayer,
224
+ TAccountRentPayer,
225
+ TAccountPayee,
226
+ TAccountMint,
227
+ TAccountAuthorizedSigner,
228
+ TAccountChannel,
229
+ TAccountPayerTokenAccount,
230
+ TAccountChannelTokenAccount,
231
+ TAccountTokenProgram,
232
+ TAccountSystemProgram,
233
+ TAccountRent,
234
+ TAccountAssociatedTokenProgram,
235
+ TAccountEventAuthority,
236
+ TAccountSelfProgram
237
+ >
238
+ > {
239
+ // Program address.
240
+ const programAddress =
241
+ config?.programAddress ?? PAYMENT_CHANNELS_PROGRAM_ADDRESS;
242
+
243
+ // Original accounts.
244
+ const originalAccounts = {
245
+ payer: { value: input.payer ?? null, isWritable: true },
246
+ rentPayer: { value: input.rentPayer ?? null, isWritable: true },
247
+ payee: { value: input.payee ?? null, isWritable: false },
248
+ mint: { value: input.mint ?? null, isWritable: false },
249
+ authorizedSigner: {
250
+ value: input.authorizedSigner ?? null,
251
+ isWritable: false,
252
+ },
253
+ channel: { value: input.channel ?? null, isWritable: true },
254
+ payerTokenAccount: {
255
+ value: input.payerTokenAccount ?? null,
256
+ isWritable: true,
257
+ },
258
+ channelTokenAccount: {
259
+ value: input.channelTokenAccount ?? null,
260
+ isWritable: true,
261
+ },
262
+ tokenProgram: { value: input.tokenProgram ?? null, isWritable: false },
263
+ systemProgram: { value: input.systemProgram ?? null, isWritable: false },
264
+ rent: { value: input.rent ?? null, isWritable: false },
265
+ associatedTokenProgram: {
266
+ value: input.associatedTokenProgram ?? null,
267
+ isWritable: false,
268
+ },
269
+ eventAuthority: { value: input.eventAuthority ?? null, isWritable: false },
270
+ selfProgram: { value: input.selfProgram ?? null, isWritable: false },
271
+ };
272
+ const accounts = originalAccounts as Record<
273
+ keyof typeof originalAccounts,
274
+ ResolvedInstructionAccount
275
+ >;
276
+
277
+ // Original args.
278
+ const args = { ...input };
279
+
280
+ // Resolve default values.
281
+ if (!accounts.systemProgram.value) {
282
+ accounts.systemProgram.value =
283
+ "11111111111111111111111111111111" as Address<"11111111111111111111111111111111">;
284
+ }
285
+ if (!accounts.eventAuthority.value) {
286
+ accounts.eventAuthority.value = await findEventAuthorityPda();
287
+ }
288
+ if (!accounts.selfProgram.value) {
289
+ accounts.selfProgram.value =
290
+ "CHNLxYvVA28MJP9PrFuDXccuoGXAx7jBacfLEkahyGsX" as Address<"CHNLxYvVA28MJP9PrFuDXccuoGXAx7jBacfLEkahyGsX">;
291
+ }
292
+
293
+ const getAccountMeta = getAccountMetaFactory(programAddress, "programId");
294
+ return Object.freeze({
295
+ accounts: [
296
+ getAccountMeta("payer", accounts.payer),
297
+ getAccountMeta("rentPayer", accounts.rentPayer),
298
+ getAccountMeta("payee", accounts.payee),
299
+ getAccountMeta("mint", accounts.mint),
300
+ getAccountMeta("authorizedSigner", accounts.authorizedSigner),
301
+ getAccountMeta("channel", accounts.channel),
302
+ getAccountMeta("payerTokenAccount", accounts.payerTokenAccount),
303
+ getAccountMeta("channelTokenAccount", accounts.channelTokenAccount),
304
+ getAccountMeta("tokenProgram", accounts.tokenProgram),
305
+ getAccountMeta("systemProgram", accounts.systemProgram),
306
+ getAccountMeta("rent", accounts.rent),
307
+ getAccountMeta("associatedTokenProgram", accounts.associatedTokenProgram),
308
+ getAccountMeta("eventAuthority", accounts.eventAuthority),
309
+ getAccountMeta("selfProgram", accounts.selfProgram),
310
+ ],
311
+ data: getOpenInstructionDataEncoder().encode(
312
+ args as OpenInstructionDataArgs,
313
+ ),
314
+ programAddress,
315
+ } as OpenInstruction<
316
+ TProgramAddress,
317
+ TAccountPayer,
318
+ TAccountRentPayer,
319
+ TAccountPayee,
320
+ TAccountMint,
321
+ TAccountAuthorizedSigner,
322
+ TAccountChannel,
323
+ TAccountPayerTokenAccount,
324
+ TAccountChannelTokenAccount,
325
+ TAccountTokenProgram,
326
+ TAccountSystemProgram,
327
+ TAccountRent,
328
+ TAccountAssociatedTokenProgram,
329
+ TAccountEventAuthority,
330
+ TAccountSelfProgram
331
+ >);
332
+ }
333
+
334
+ export type OpenInput<
335
+ TAccountPayer extends string = string,
336
+ TAccountRentPayer extends string = string,
337
+ TAccountPayee extends string = string,
338
+ TAccountMint extends string = string,
339
+ TAccountAuthorizedSigner extends string = string,
340
+ TAccountChannel extends string = string,
341
+ TAccountPayerTokenAccount extends string = string,
342
+ TAccountChannelTokenAccount extends string = string,
343
+ TAccountTokenProgram extends string = string,
344
+ TAccountSystemProgram extends string = string,
345
+ TAccountRent extends string = string,
346
+ TAccountAssociatedTokenProgram extends string = string,
347
+ TAccountEventAuthority extends string = string,
348
+ TAccountSelfProgram extends string = string,
349
+ > = {
350
+ payer: TransactionSigner<TAccountPayer>;
351
+ rentPayer: TransactionSigner<TAccountRentPayer>;
352
+ payee: Address<TAccountPayee>;
353
+ mint: Address<TAccountMint>;
354
+ authorizedSigner: Address<TAccountAuthorizedSigner>;
355
+ channel: Address<TAccountChannel>;
356
+ payerTokenAccount: Address<TAccountPayerTokenAccount>;
357
+ channelTokenAccount: Address<TAccountChannelTokenAccount>;
358
+ tokenProgram: Address<TAccountTokenProgram>;
359
+ systemProgram?: Address<TAccountSystemProgram>;
360
+ rent: Address<TAccountRent>;
361
+ associatedTokenProgram: Address<TAccountAssociatedTokenProgram>;
362
+ eventAuthority: Address<TAccountEventAuthority>;
363
+ selfProgram?: Address<TAccountSelfProgram>;
364
+ openArgs: OpenInstructionDataArgs["openArgs"];
365
+ };
366
+
367
+ export function getOpenInstruction<
368
+ TAccountPayer extends string,
369
+ TAccountRentPayer extends string,
370
+ TAccountPayee extends string,
371
+ TAccountMint extends string,
372
+ TAccountAuthorizedSigner extends string,
373
+ TAccountChannel extends string,
374
+ TAccountPayerTokenAccount extends string,
375
+ TAccountChannelTokenAccount extends string,
376
+ TAccountTokenProgram extends string,
377
+ TAccountSystemProgram extends string,
378
+ TAccountRent extends string,
379
+ TAccountAssociatedTokenProgram extends string,
380
+ TAccountEventAuthority extends string,
381
+ TAccountSelfProgram extends string,
382
+ TProgramAddress extends Address = typeof PAYMENT_CHANNELS_PROGRAM_ADDRESS,
383
+ >(
384
+ input: OpenInput<
385
+ TAccountPayer,
386
+ TAccountRentPayer,
387
+ TAccountPayee,
388
+ TAccountMint,
389
+ TAccountAuthorizedSigner,
390
+ TAccountChannel,
391
+ TAccountPayerTokenAccount,
392
+ TAccountChannelTokenAccount,
393
+ TAccountTokenProgram,
394
+ TAccountSystemProgram,
395
+ TAccountRent,
396
+ TAccountAssociatedTokenProgram,
397
+ TAccountEventAuthority,
398
+ TAccountSelfProgram
399
+ >,
400
+ config?: { programAddress?: TProgramAddress },
401
+ ): OpenInstruction<
402
+ TProgramAddress,
403
+ TAccountPayer,
404
+ TAccountRentPayer,
405
+ TAccountPayee,
406
+ TAccountMint,
407
+ TAccountAuthorizedSigner,
408
+ TAccountChannel,
409
+ TAccountPayerTokenAccount,
410
+ TAccountChannelTokenAccount,
411
+ TAccountTokenProgram,
412
+ TAccountSystemProgram,
413
+ TAccountRent,
414
+ TAccountAssociatedTokenProgram,
415
+ TAccountEventAuthority,
416
+ TAccountSelfProgram
417
+ > {
418
+ // Program address.
419
+ const programAddress =
420
+ config?.programAddress ?? PAYMENT_CHANNELS_PROGRAM_ADDRESS;
421
+
422
+ // Original accounts.
423
+ const originalAccounts = {
424
+ payer: { value: input.payer ?? null, isWritable: true },
425
+ rentPayer: { value: input.rentPayer ?? null, isWritable: true },
426
+ payee: { value: input.payee ?? null, isWritable: false },
427
+ mint: { value: input.mint ?? null, isWritable: false },
428
+ authorizedSigner: {
429
+ value: input.authorizedSigner ?? null,
430
+ isWritable: false,
431
+ },
432
+ channel: { value: input.channel ?? null, isWritable: true },
433
+ payerTokenAccount: {
434
+ value: input.payerTokenAccount ?? null,
435
+ isWritable: true,
436
+ },
437
+ channelTokenAccount: {
438
+ value: input.channelTokenAccount ?? null,
439
+ isWritable: true,
440
+ },
441
+ tokenProgram: { value: input.tokenProgram ?? null, isWritable: false },
442
+ systemProgram: { value: input.systemProgram ?? null, isWritable: false },
443
+ rent: { value: input.rent ?? null, isWritable: false },
444
+ associatedTokenProgram: {
445
+ value: input.associatedTokenProgram ?? null,
446
+ isWritable: false,
447
+ },
448
+ eventAuthority: { value: input.eventAuthority ?? null, isWritable: false },
449
+ selfProgram: { value: input.selfProgram ?? null, isWritable: false },
450
+ };
451
+ const accounts = originalAccounts as Record<
452
+ keyof typeof originalAccounts,
453
+ ResolvedInstructionAccount
454
+ >;
455
+
456
+ // Original args.
457
+ const args = { ...input };
458
+
459
+ // Resolve default values.
460
+ if (!accounts.systemProgram.value) {
461
+ accounts.systemProgram.value =
462
+ "11111111111111111111111111111111" as Address<"11111111111111111111111111111111">;
463
+ }
464
+ if (!accounts.selfProgram.value) {
465
+ accounts.selfProgram.value =
466
+ "CHNLxYvVA28MJP9PrFuDXccuoGXAx7jBacfLEkahyGsX" as Address<"CHNLxYvVA28MJP9PrFuDXccuoGXAx7jBacfLEkahyGsX">;
467
+ }
468
+
469
+ const getAccountMeta = getAccountMetaFactory(programAddress, "programId");
470
+ return Object.freeze({
471
+ accounts: [
472
+ getAccountMeta("payer", accounts.payer),
473
+ getAccountMeta("rentPayer", accounts.rentPayer),
474
+ getAccountMeta("payee", accounts.payee),
475
+ getAccountMeta("mint", accounts.mint),
476
+ getAccountMeta("authorizedSigner", accounts.authorizedSigner),
477
+ getAccountMeta("channel", accounts.channel),
478
+ getAccountMeta("payerTokenAccount", accounts.payerTokenAccount),
479
+ getAccountMeta("channelTokenAccount", accounts.channelTokenAccount),
480
+ getAccountMeta("tokenProgram", accounts.tokenProgram),
481
+ getAccountMeta("systemProgram", accounts.systemProgram),
482
+ getAccountMeta("rent", accounts.rent),
483
+ getAccountMeta("associatedTokenProgram", accounts.associatedTokenProgram),
484
+ getAccountMeta("eventAuthority", accounts.eventAuthority),
485
+ getAccountMeta("selfProgram", accounts.selfProgram),
486
+ ],
487
+ data: getOpenInstructionDataEncoder().encode(
488
+ args as OpenInstructionDataArgs,
489
+ ),
490
+ programAddress,
491
+ } as OpenInstruction<
492
+ TProgramAddress,
493
+ TAccountPayer,
494
+ TAccountRentPayer,
495
+ TAccountPayee,
496
+ TAccountMint,
497
+ TAccountAuthorizedSigner,
498
+ TAccountChannel,
499
+ TAccountPayerTokenAccount,
500
+ TAccountChannelTokenAccount,
501
+ TAccountTokenProgram,
502
+ TAccountSystemProgram,
503
+ TAccountRent,
504
+ TAccountAssociatedTokenProgram,
505
+ TAccountEventAuthority,
506
+ TAccountSelfProgram
507
+ >);
508
+ }
509
+
510
+ export type ParsedOpenInstruction<
511
+ TProgram extends string = typeof PAYMENT_CHANNELS_PROGRAM_ADDRESS,
512
+ TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],
513
+ > = {
514
+ programAddress: Address<TProgram>;
515
+ accounts: {
516
+ payer: TAccountMetas[0];
517
+ rentPayer: TAccountMetas[1];
518
+ payee: TAccountMetas[2];
519
+ mint: TAccountMetas[3];
520
+ authorizedSigner: TAccountMetas[4];
521
+ channel: TAccountMetas[5];
522
+ payerTokenAccount: TAccountMetas[6];
523
+ channelTokenAccount: TAccountMetas[7];
524
+ tokenProgram: TAccountMetas[8];
525
+ systemProgram: TAccountMetas[9];
526
+ rent: TAccountMetas[10];
527
+ associatedTokenProgram: TAccountMetas[11];
528
+ eventAuthority: TAccountMetas[12];
529
+ selfProgram: TAccountMetas[13];
530
+ };
531
+ data: OpenInstructionData;
532
+ };
533
+
534
+ export function parseOpenInstruction<
535
+ TProgram extends string,
536
+ TAccountMetas extends readonly AccountMeta[],
537
+ >(
538
+ instruction: Instruction<TProgram> &
539
+ InstructionWithAccounts<TAccountMetas> &
540
+ InstructionWithData<ReadonlyUint8Array>,
541
+ ): ParsedOpenInstruction<TProgram, TAccountMetas> {
542
+ if (instruction.accounts.length !== 14) {
543
+ throw new SolanaError(
544
+ SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,
545
+ {
546
+ actualAccountMetas: instruction.accounts.length,
547
+ expectedAccountMetas: 14,
548
+ },
549
+ );
550
+ }
551
+ let accountIndex = 0;
552
+ const getNextAccount = () => {
553
+ const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!;
554
+ accountIndex += 1;
555
+ return accountMeta;
556
+ };
557
+ return {
558
+ programAddress: instruction.programAddress,
559
+ accounts: {
560
+ payer: getNextAccount(),
561
+ rentPayer: getNextAccount(),
562
+ payee: getNextAccount(),
563
+ mint: getNextAccount(),
564
+ authorizedSigner: getNextAccount(),
565
+ channel: getNextAccount(),
566
+ payerTokenAccount: getNextAccount(),
567
+ channelTokenAccount: getNextAccount(),
568
+ tokenProgram: getNextAccount(),
569
+ systemProgram: getNextAccount(),
570
+ rent: getNextAccount(),
571
+ associatedTokenProgram: getNextAccount(),
572
+ eventAuthority: getNextAccount(),
573
+ selfProgram: getNextAccount(),
574
+ },
575
+ data: getOpenInstructionDataDecoder().decode(instruction.data),
576
+ };
577
+ }