@star-factory/sdk-launchpad 0.1.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 (86) hide show
  1. package/README.md +343 -0
  2. package/dist/claims/accounts.d.ts +49 -0
  3. package/dist/claims/accounts.d.ts.map +1 -0
  4. package/dist/claims/accounts.js +118 -0
  5. package/dist/claims/accounts.js.map +1 -0
  6. package/dist/claims/eligibility.d.ts +67 -0
  7. package/dist/claims/eligibility.d.ts.map +1 -0
  8. package/dist/claims/eligibility.js +275 -0
  9. package/dist/claims/eligibility.js.map +1 -0
  10. package/dist/claims/index.d.ts +5 -0
  11. package/dist/claims/index.d.ts.map +1 -0
  12. package/dist/claims/index.js +41 -0
  13. package/dist/claims/index.js.map +1 -0
  14. package/dist/claims/pdas.d.ts +24 -0
  15. package/dist/claims/pdas.d.ts.map +1 -0
  16. package/dist/claims/pdas.js +43 -0
  17. package/dist/claims/pdas.js.map +1 -0
  18. package/dist/claims/tx.d.ts +47 -0
  19. package/dist/claims/tx.d.ts.map +1 -0
  20. package/dist/claims/tx.js +126 -0
  21. package/dist/claims/tx.js.map +1 -0
  22. package/dist/index.d.ts +27 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +40 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/instructions/cancel-launch.d.ts +16 -0
  27. package/dist/instructions/cancel-launch.d.ts.map +1 -0
  28. package/dist/instructions/cancel-launch.js +72 -0
  29. package/dist/instructions/cancel-launch.js.map +1 -0
  30. package/dist/instructions/configure-launch.d.ts +16 -0
  31. package/dist/instructions/configure-launch.d.ts.map +1 -0
  32. package/dist/instructions/configure-launch.js +50 -0
  33. package/dist/instructions/configure-launch.js.map +1 -0
  34. package/dist/instructions/constants.d.ts +8 -0
  35. package/dist/instructions/constants.d.ts.map +1 -0
  36. package/dist/instructions/constants.js +14 -0
  37. package/dist/instructions/constants.js.map +1 -0
  38. package/dist/instructions/create-launch-token.d.ts +18 -0
  39. package/dist/instructions/create-launch-token.d.ts.map +1 -0
  40. package/dist/instructions/create-launch-token.js +65 -0
  41. package/dist/instructions/create-launch-token.js.map +1 -0
  42. package/dist/instructions/execute-launch.d.ts +68 -0
  43. package/dist/instructions/execute-launch.d.ts.map +1 -0
  44. package/dist/instructions/execute-launch.js +190 -0
  45. package/dist/instructions/execute-launch.js.map +1 -0
  46. package/dist/instructions/index.d.ts +8 -0
  47. package/dist/instructions/index.d.ts.map +1 -0
  48. package/dist/instructions/index.js +57 -0
  49. package/dist/instructions/index.js.map +1 -0
  50. package/dist/instructions/initialize-launch.d.ts +15 -0
  51. package/dist/instructions/initialize-launch.d.ts.map +1 -0
  52. package/dist/instructions/initialize-launch.js +71 -0
  53. package/dist/instructions/initialize-launch.js.map +1 -0
  54. package/dist/instructions/pdas.d.ts +95 -0
  55. package/dist/instructions/pdas.d.ts.map +1 -0
  56. package/dist/instructions/pdas.js +168 -0
  57. package/dist/instructions/pdas.js.map +1 -0
  58. package/dist/pdas.d.ts +19 -0
  59. package/dist/pdas.d.ts.map +1 -0
  60. package/dist/pdas.js +40 -0
  61. package/dist/pdas.js.map +1 -0
  62. package/dist/sdk.d.ts +274 -0
  63. package/dist/sdk.d.ts.map +1 -0
  64. package/dist/sdk.js +505 -0
  65. package/dist/sdk.js.map +1 -0
  66. package/dist/types.d.ts +578 -0
  67. package/dist/types.d.ts.map +1 -0
  68. package/dist/types.js +8 -0
  69. package/dist/types.js.map +1 -0
  70. package/dist/zc/client.d.ts +69 -0
  71. package/dist/zc/client.d.ts.map +1 -0
  72. package/dist/zc/client.js +121 -0
  73. package/dist/zc/client.js.map +1 -0
  74. package/dist/zc/constants.d.ts +49 -0
  75. package/dist/zc/constants.d.ts.map +1 -0
  76. package/dist/zc/constants.js +64 -0
  77. package/dist/zc/constants.js.map +1 -0
  78. package/dist/zc/index.d.ts +4 -0
  79. package/dist/zc/index.d.ts.map +1 -0
  80. package/dist/zc/index.js +7 -0
  81. package/dist/zc/index.js.map +1 -0
  82. package/dist/zc/types.d.ts +65 -0
  83. package/dist/zc/types.d.ts.map +1 -0
  84. package/dist/zc/types.js +3 -0
  85. package/dist/zc/types.js.map +1 -0
  86. package/package.json +63 -0
package/dist/sdk.js ADDED
@@ -0,0 +1,505 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LaunchpadSDK = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const web3_js_1 = require("@solana/web3.js");
6
+ const bn_js_1 = tslib_1.__importDefault(require("bn.js"));
7
+ const claims_1 = require("./claims");
8
+ const instructions_1 = require("./instructions");
9
+ const pdas_1 = require("./pdas");
10
+ const zc_1 = require("./zc");
11
+ /**
12
+ * Launchpad SDK
13
+ *
14
+ * Handles the off-chain prerequisites for token launches:
15
+ * 1. Derive DAMM pool address
16
+ * 2. Reserve admin with zCombinator API
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const sdk = new LaunchpadSDK({
21
+ * connection,
22
+ * cluster: 'devnet',
23
+ * zcApiKey: process.env.ZC_API_KEY!,
24
+ * });
25
+ *
26
+ * // Step 1: Derive pool address (pool doesn't exist yet!)
27
+ * const poolAddress = sdk.derivePoolAddress(baseMint, quoteMint);
28
+ *
29
+ * // Step 2: Reserve admin (off-chain API call to ZC)
30
+ * const reservation = await sdk.reserveAdmin({
31
+ * name: 'SurfCash',
32
+ * tokenMint: baseMint,
33
+ * poolAddress,
34
+ * poolType: 'damm',
35
+ * quoteMint,
36
+ * treasuryCosigner: teamMultisig,
37
+ * ownerWallet: projectOwner,
38
+ * });
39
+ *
40
+ * // reservation.adminWallet is ZC's managed admin
41
+ * // Use this in transferAdmin IX after DAO creation
42
+ * ```
43
+ *
44
+ * @see https://docs.combinator.trade/llms.txt
45
+ */
46
+ class LaunchpadSDK {
47
+ connection;
48
+ cluster;
49
+ dammProgramId;
50
+ zcClient;
51
+ constructor(config) {
52
+ this.connection = config.connection;
53
+ this.cluster = config.cluster ?? 'devnet';
54
+ this.dammProgramId = config.dammProgramId ?? zc_1.DAMM_PROGRAM_ID;
55
+ this.zcClient = new zc_1.ZCClient({
56
+ apiKey: config.zcApiKey,
57
+ cluster: this.cluster,
58
+ apiEndpoint: config.zcApiEndpoint,
59
+ });
60
+ }
61
+ derivePoolAddress(baseMintOrInput, maybeQuoteMint, maybeConfig) {
62
+ if (baseMintOrInput instanceof web3_js_1.PublicKey) {
63
+ if (!maybeQuoteMint) {
64
+ throw new Error('quoteMint is required when using positional derivePoolAddress arguments');
65
+ }
66
+ return (0, pdas_1.derivePoolAddress)({
67
+ baseMint: baseMintOrInput,
68
+ quoteMint: maybeQuoteMint,
69
+ config: maybeConfig ?? zc_1.DAMM_CONFIG_PDA,
70
+ }, this.dammProgramId);
71
+ }
72
+ return (0, pdas_1.derivePoolAddress)({
73
+ baseMint: baseMintOrInput.baseMint,
74
+ quoteMint: baseMintOrInput.quoteMint,
75
+ config: baseMintOrInput.config ?? zc_1.DAMM_CONFIG_PDA,
76
+ }, this.dammProgramId);
77
+ }
78
+ /**
79
+ * Derive pool address with sorted mint context for downstream account building.
80
+ */
81
+ derivePoolAddressWithContext(input) {
82
+ const config = input.config ?? zc_1.DAMM_CONFIG_PDA;
83
+ const poolAddress = this.derivePoolAddress({
84
+ baseMint: input.baseMint,
85
+ quoteMint: input.quoteMint,
86
+ config,
87
+ });
88
+ const [tokenA, tokenB] = (0, pdas_1.sortMints)(input.baseMint, input.quoteMint);
89
+ return { poolAddress, tokenA, tokenB, config };
90
+ }
91
+ // ============================================================================
92
+ // Step 2: Reserve Admin
93
+ // ============================================================================
94
+ /**
95
+ * Reserve an admin key with zCombinator.
96
+ *
97
+ * This is an OFF-CHAIN API call that must be made before building the
98
+ * execute_launch transaction.
99
+ *
100
+ * PREREQUISITES (derive these first):
101
+ * - tokenMint: the vanity mint address (from grinding)
102
+ * - poolAddress: use derivePoolAddress() above
103
+ *
104
+ * The reservation returns:
105
+ * - adminWallet: ZC's managed admin (use in transferAdmin IX)
106
+ * - adminKeyIdx: ZC internal key index
107
+ * - daoId: ZC database DAO ID
108
+ *
109
+ * After calling this, build your atomic transaction:
110
+ * 1. Token launch instructions
111
+ * 2. Pool launch instructions
112
+ * 3. DAO creation (with launchpad PDA as temp admin)
113
+ * 4. transferAdmin to adminWallet (from this response)
114
+ * 5. LP transfer to adminWallet
115
+ *
116
+ * @param params - Name, token mint, pool address, etc.
117
+ *
118
+ * @see https://github.com/zcombinatorio/combinator/blob/main/ui/routes/dao/creation.ts
119
+ */
120
+ async reserveAdmin(params) {
121
+ return this.zcClient.reserveAdmin(params);
122
+ }
123
+ /**
124
+ * Validate launch pre-execution values that are known off-chain.
125
+ */
126
+ validateLaunchPreparation(request) {
127
+ const issues = [];
128
+ if (!request.daoName || request.daoName.trim().length === 0) {
129
+ issues.push({
130
+ code: 'INVALID_DAO_NAME',
131
+ message: 'daoName must be a non-empty string',
132
+ });
133
+ }
134
+ else if (request.daoName.length > 32) {
135
+ issues.push({
136
+ code: 'INVALID_DAO_NAME',
137
+ message: 'daoName exceeds max length of 32 characters',
138
+ });
139
+ }
140
+ return { ok: issues.length === 0, issues };
141
+ }
142
+ /**
143
+ * Validate configure_launch metadata constraints before submitting on-chain tx.
144
+ */
145
+ validateConfigureLaunchMetadata(input) {
146
+ const issues = [];
147
+ const name = input.name?.trim() ?? '';
148
+ const symbol = input.symbol?.trim() ?? '';
149
+ const uri = input.uri?.trim() ?? '';
150
+ if (!name || name.length > 32) {
151
+ issues.push({
152
+ code: 'INVALID_TOKEN_NAME',
153
+ message: 'name must be non-empty and <= 32 characters',
154
+ });
155
+ }
156
+ if (!symbol || symbol.length > 10) {
157
+ issues.push({
158
+ code: 'INVALID_TOKEN_SYMBOL',
159
+ message: 'symbol must be non-empty and <= 10 characters',
160
+ });
161
+ }
162
+ if (!uri || uri.length > 200) {
163
+ issues.push({
164
+ code: 'INVALID_TOKEN_URI',
165
+ message: 'uri must be non-empty and <= 200 characters',
166
+ });
167
+ }
168
+ return { ok: issues.length === 0, issues };
169
+ }
170
+ /**
171
+ * Build canonical configure_launch metadata args with validation.
172
+ */
173
+ buildConfigureLaunchMetadataArgs(input) {
174
+ const validation = this.validateConfigureLaunchMetadata(input);
175
+ if (!validation.ok) {
176
+ throw new Error(validation.issues[0].message);
177
+ }
178
+ return {
179
+ name: input.name.trim(),
180
+ symbol: input.symbol.trim(),
181
+ uri: input.uri.trim(),
182
+ };
183
+ }
184
+ /**
185
+ * Build metadata JSON payload for off-chain hosting providers.
186
+ * Caller uploads resulting JSON and uses returned URL as configure_launch `uri`.
187
+ */
188
+ buildTokenMetadataJson(input) {
189
+ const metadata = {
190
+ name: input.name.trim(),
191
+ symbol: input.symbol.trim(),
192
+ description: input.description?.trim() || `${input.name.trim()} token`,
193
+ };
194
+ if (input.image) {
195
+ metadata.image = input.image;
196
+ }
197
+ if (input.externalUrl) {
198
+ metadata.external_url = input.externalUrl;
199
+ }
200
+ if (input.attributes && input.attributes.length > 0) {
201
+ metadata.attributes = input.attributes.map((attr) => ({
202
+ trait_type: attr.traitType,
203
+ value: attr.value,
204
+ }));
205
+ }
206
+ return metadata;
207
+ }
208
+ /**
209
+ * Build reserve-admin params in a deterministic and typed way.
210
+ */
211
+ buildReserveAdminParams(input) {
212
+ const validation = this.validateLaunchPreparation({ daoName: input.daoName });
213
+ if (!validation.ok) {
214
+ throw new Error(validation.issues[0].message);
215
+ }
216
+ const poolAddress = input.poolAddress ?? this.derivePoolAddress({
217
+ baseMint: input.tokenMint,
218
+ quoteMint: input.quoteMint,
219
+ config: input.poolConfig ?? zc_1.DAMM_CONFIG_PDA,
220
+ });
221
+ const reserveAdminParams = {
222
+ name: input.daoName,
223
+ tokenMint: input.tokenMint,
224
+ poolAddress,
225
+ poolType: input.poolType ?? 'damm',
226
+ quoteMint: input.quoteMint,
227
+ treasuryCosigner: input.treasuryCosigner,
228
+ ownerWallet: input.ownerWallet,
229
+ };
230
+ return { reserveAdminParams, poolAddress };
231
+ }
232
+ /**
233
+ * Build `execute_launch` args from reservation output.
234
+ */
235
+ buildExecuteLaunchArgs(input) {
236
+ const validation = this.validateLaunchPreparation({ daoName: input.daoName });
237
+ if (!validation.ok) {
238
+ throw new Error(validation.issues[0].message);
239
+ }
240
+ return {
241
+ daoName: input.daoName,
242
+ treasuryCosigner: input.treasuryCosigner,
243
+ };
244
+ }
245
+ /**
246
+ * One-call helper for all pre-execution off-chain ops:
247
+ * 1) derive pool address
248
+ * 2) call ZC reserve-admin
249
+ * 3) construct execute_launch args
250
+ */
251
+ async prepareLaunchExecution(input) {
252
+ const { reserveAdminParams, poolAddress } = this.buildReserveAdminParams({
253
+ daoName: input.daoName,
254
+ tokenMint: input.tokenMint,
255
+ quoteMint: input.quoteMint,
256
+ treasuryCosigner: input.treasuryCosigner,
257
+ ownerWallet: input.ownerWallet,
258
+ poolType: input.poolType,
259
+ poolAddress: input.poolAddress,
260
+ poolConfig: input.poolConfig,
261
+ });
262
+ const reservation = await this.reserveAdmin(reserveAdminParams);
263
+ const executeLaunchArgs = this.buildExecuteLaunchArgs({
264
+ daoName: input.daoName,
265
+ treasuryCosigner: input.treasuryCosigner,
266
+ reservation,
267
+ });
268
+ return {
269
+ cluster: this.cluster,
270
+ poolAddress,
271
+ reserveAdminParams,
272
+ reservation,
273
+ executeLaunchArgs,
274
+ executeLaunchAccounts: {
275
+ newDaoAdmin: reservation.adminWallet,
276
+ },
277
+ };
278
+ }
279
+ // ============================================================================
280
+ // Instruction Builders (on-chain TX construction)
281
+ // ============================================================================
282
+ /**
283
+ * Build an unsigned `initialize_launch` transaction.
284
+ *
285
+ * Creates a LaunchConfig PDA + underlying vault via CPI to vault::make.
286
+ *
287
+ * ```typescript
288
+ * const tx = await sdk.buildInitializeLaunchTx(launchpadProgram, {
289
+ * creator: wallet.publicKey,
290
+ * seed: new BN(Date.now()),
291
+ * vaultSeed: new BN(Date.now() + 1),
292
+ * totalSupply: new BN('1000000000000000'),
293
+ * tokensToParticipants: new BN('500000000000000'),
294
+ * quoteMint: NATIVE_MINT,
295
+ * minRaise: new BN('100000000'),
296
+ * targetRaise: new BN('100000000'),
297
+ * startTime: new BN(now - 5),
298
+ * endTime: new BN(now + 300),
299
+ * vaultProgramId: VAULT_PROGRAM_ID,
300
+ * });
301
+ * ```
302
+ */
303
+ async buildInitializeLaunchTx(launchpadProgram, opts) {
304
+ return (0, instructions_1.buildInitializeLaunchTx)(this.connection, launchpadProgram, opts);
305
+ }
306
+ /**
307
+ * Build an unsigned `configure_launch` transaction.
308
+ *
309
+ * Sets vanity mint config + token metadata.
310
+ * Transitions FundraiseActive → ReadyToLaunch.
311
+ */
312
+ async buildConfigureLaunchTx(launchpadProgram, opts) {
313
+ return (0, instructions_1.buildConfigureLaunchTx)(this.connection, launchpadProgram, opts);
314
+ }
315
+ /**
316
+ * Build an unsigned `create_launch_token` transaction.
317
+ *
318
+ * Creates vanity mint, Metaplex metadata, mints total supply.
319
+ * Transitions ReadyToLaunch → TokenCreated.
320
+ *
321
+ * **Important**: The returned TX must be signed by both `admin` and `baseKeypair`.
322
+ */
323
+ async buildCreateLaunchTokenTx(launchpadProgram, opts) {
324
+ return (0, instructions_1.buildCreateLaunchTokenTx)(this.connection, launchpadProgram, opts);
325
+ }
326
+ /**
327
+ * Build an unsigned `execute_launch` transaction.
328
+ *
329
+ * Atomically finalizes vault, creates DAMM pool, creates DAO,
330
+ * transfers authorities, and routes funds.
331
+ * Transitions TokenCreated → Launched.
332
+ *
333
+ * Returns both the transaction and all resolved accounts (for ALT creation).
334
+ *
335
+ * **Important**: This TX has ~35 accounts and requires an Address Lookup Table.
336
+ * Use the returned `accounts` to populate the ALT, then compile to a
337
+ * VersionedTransaction before sending.
338
+ *
339
+ * ```typescript
340
+ * const { tx, accounts } = await sdk.buildExecuteLaunchTx(launchpadProgram, {
341
+ * admin: adminKeypair.publicKey,
342
+ * launchConfig: launchConfigPda,
343
+ * launchConfigData,
344
+ * poolActivationTime: new BN(now + 120),
345
+ * daoName: 'MyDAO',
346
+ * treasuryCosigner: teamMultisig,
347
+ * newDaoAdmin: reservation.adminWallet,
348
+ * dammPool: poolAddress,
349
+ * vaultProgramId: VAULT_PROGRAM_ID,
350
+ * computeUnits: 1_400_000,
351
+ * });
352
+ * ```
353
+ */
354
+ async buildExecuteLaunchTx(launchpadProgram, opts) {
355
+ return (0, instructions_1.buildExecuteLaunchTx)(this.connection, launchpadProgram, opts);
356
+ }
357
+ /**
358
+ * Build an unsigned `cancel_launch` transaction.
359
+ *
360
+ * Cancels from any pre-Launched state. Burns tokens if minted.
361
+ */
362
+ async buildCancelLaunchTx(launchpadProgram, opts) {
363
+ return (0, instructions_1.buildCancelLaunchTx)(this.connection, launchpadProgram, opts);
364
+ }
365
+ // ============================================================================
366
+ // Claims — Eligibility
367
+ // ============================================================================
368
+ /**
369
+ * Check whether a user can claim tokens, and how much.
370
+ *
371
+ * This is the primary method for frontends to determine whether to show
372
+ * the claim button and what information to display.
373
+ *
374
+ * **Works on both client and server** — fetches on-chain state and
375
+ * runs a pure eligibility computation.
376
+ *
377
+ * @param launchpadProgram - Anchor program instance for the launchpad
378
+ * @param vaultProgram - Anchor program instance for the vault
379
+ * @param launchConfig - The launch config PDA address
380
+ * @param user - The user's wallet pubkey
381
+ * @param currentTime - Optional unix timestamp override (for testing).
382
+ * Defaults to `Date.now() / 1000`.
383
+ *
384
+ * @example
385
+ * ```typescript
386
+ * const eligibility = await sdk.getClaimEligibility(
387
+ * launchpadProgram,
388
+ * vaultProgram,
389
+ * launchConfigPda,
390
+ * wallet.publicKey,
391
+ * );
392
+ *
393
+ * if (eligibility.canClaim) {
394
+ * console.log(`Claimable: ${eligibility.claimableNow.toString()} tokens`);
395
+ * } else {
396
+ * console.log(`Cannot claim: ${eligibility.reason}`);
397
+ * }
398
+ * ```
399
+ */
400
+ async getClaimEligibility(launchpadProgram, vaultProgram, launchConfig, user, currentTime) {
401
+ const now = currentTime ?? Math.floor(Date.now() / 1000);
402
+ // Fetch launch config
403
+ const launchConfigData = await (0, claims_1.fetchLaunchConfig)(launchpadProgram, launchConfig);
404
+ if (!launchConfigData) {
405
+ return {
406
+ canClaim: false,
407
+ reason: 'launch_not_executed',
408
+ claimableNow: new bn_js_1.default(0),
409
+ totalTokens: new bn_js_1.default(0),
410
+ totalClaimed: new bn_js_1.default(0),
411
+ totalVested: new bn_js_1.default(0),
412
+ tier: null,
413
+ vestingSchedule: null,
414
+ };
415
+ }
416
+ // Fetch vault state (tier allocation data for accurate claim computation)
417
+ const vaultProgramId = vaultProgram.programId;
418
+ let vaultData = null;
419
+ try {
420
+ const vaultAccounts = vaultProgram.account;
421
+ const raw = await vaultAccounts.starVault.fetch(launchConfigData.fundraiseState);
422
+ vaultData = {
423
+ tierAllocated: raw.tierAllocated,
424
+ tierTotalsAtAllocation: raw.tierTotalsAtAllocation,
425
+ totalAllocated: raw.totalAllocated,
426
+ allocationsCalculated: raw.allocationsCalculated,
427
+ };
428
+ }
429
+ catch {
430
+ vaultData = null;
431
+ }
432
+ if (!vaultData) {
433
+ return {
434
+ canClaim: false,
435
+ reason: 'allocations_not_calculated',
436
+ claimableNow: new bn_js_1.default(0),
437
+ totalTokens: new bn_js_1.default(0),
438
+ totalClaimed: new bn_js_1.default(0),
439
+ totalVested: new bn_js_1.default(0),
440
+ tier: null,
441
+ vestingSchedule: null,
442
+ };
443
+ }
444
+ // Fetch depositor record
445
+ const [depositorRecordPda] = (0, claims_1.deriveDepositorRecordPda)(launchConfigData.fundraiseState, user, vaultProgramId);
446
+ const depositorRecord = await (0, claims_1.fetchDepositorRecord)(vaultProgram, depositorRecordPda);
447
+ // Fetch claim record (may not exist yet)
448
+ const launchpadProgramId = launchpadProgram.programId;
449
+ const [claimRecordPda] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from('claim'), launchConfig.toBuffer(), user.toBuffer()], launchpadProgramId);
450
+ const claimRecord = await (0, claims_1.fetchClaimRecord)(launchpadProgram, claimRecordPda);
451
+ return (0, claims_1.computeClaimEligibility)(launchConfigData, depositorRecord, claimRecord, now, vaultData);
452
+ }
453
+ // ============================================================================
454
+ // Claims — Transaction Building
455
+ // ============================================================================
456
+ /**
457
+ * Build an unsigned `claim_tokens` transaction for a user.
458
+ *
459
+ * The transaction is ready for signing by the user's wallet (or relay).
460
+ * Includes compute budget and priority fee if specified.
461
+ *
462
+ * **Client-side (wallet adapter):**
463
+ * ```typescript
464
+ * const tx = await sdk.buildClaimTx(launchpadProgram, {
465
+ * user: wallet.publicKey,
466
+ * launchConfig: launchConfigPda,
467
+ * launchConfigData,
468
+ * vaultProgramId: VAULT_PROGRAM_ID,
469
+ * });
470
+ * const sig = await wallet.sendTransaction(tx, connection);
471
+ * ```
472
+ *
473
+ * **Server-side (relay/sponsored):**
474
+ * ```typescript
475
+ * const tx = await sdk.buildClaimTx(launchpadProgram, {
476
+ * user: userPubkey,
477
+ * launchConfig: launchConfigPda,
478
+ * launchConfigData,
479
+ * vaultProgramId: VAULT_PROGRAM_ID,
480
+ * feePayer: relayPubkey, // sponsor pays gas
481
+ * priorityFee: 10_000, // 10k micro-lamports/CU
482
+ * });
483
+ * // Serialize and send to user for signing, then relay signs + submits
484
+ * ```
485
+ *
486
+ * @param launchpadProgram - Anchor program instance for the launchpad
487
+ * @param opts - Claim transaction options
488
+ */
489
+ async buildClaimTx(launchpadProgram, opts) {
490
+ return (0, claims_1.buildClaimTransaction)(this.connection, launchpadProgram, opts);
491
+ }
492
+ // ============================================================================
493
+ // Health Check
494
+ // ============================================================================
495
+ /**
496
+ * Check ZC API health status.
497
+ *
498
+ * @see https://docs.combinator.trade/api-reference/health
499
+ */
500
+ async healthCheck() {
501
+ return this.zcClient.health();
502
+ }
503
+ }
504
+ exports.LaunchpadSDK = LaunchpadSDK;
505
+ //# sourceMappingURL=sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"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"}