@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.d.ts ADDED
@@ -0,0 +1,274 @@
1
+ import type { Idl, Program } from '@coral-xyz/anchor';
2
+ import { Connection, PublicKey, Transaction } from '@solana/web3.js';
3
+ import { type ExecuteLaunchAccountsResolved } from './instructions';
4
+ import { BuildExecuteLaunchArgsInput, BuildReserveAdminParamsInput, BuildReserveAdminParamsResult, BuildTokenMetadataJsonInput, CancelLaunchOptions, ClaimEligibility, ClaimTransactionOptions, ConfigureLaunchMetadataArgs, ConfigureLaunchMetadataInput, ConfigureLaunchOptions, CreateLaunchTokenOptions, DerivePoolAddressRequest, DerivePoolAddressResult, ExecuteLaunchInstructionArgs, ExecuteLaunchOptions, HealthCheckResult, InitializeLaunchOptions, LaunchpadSDKFullConfig, PrepareLaunchExecutionRequest, PrepareLaunchExecutionResult, TokenMetadataJson, ValidationResult } from './types';
5
+ import { ReserveAdminParams, ReserveAdminResponse, ZCClient } from './zc';
6
+ /**
7
+ * Launchpad SDK
8
+ *
9
+ * Handles the off-chain prerequisites for token launches:
10
+ * 1. Derive DAMM pool address
11
+ * 2. Reserve admin with zCombinator API
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * const sdk = new LaunchpadSDK({
16
+ * connection,
17
+ * cluster: 'devnet',
18
+ * zcApiKey: process.env.ZC_API_KEY!,
19
+ * });
20
+ *
21
+ * // Step 1: Derive pool address (pool doesn't exist yet!)
22
+ * const poolAddress = sdk.derivePoolAddress(baseMint, quoteMint);
23
+ *
24
+ * // Step 2: Reserve admin (off-chain API call to ZC)
25
+ * const reservation = await sdk.reserveAdmin({
26
+ * name: 'SurfCash',
27
+ * tokenMint: baseMint,
28
+ * poolAddress,
29
+ * poolType: 'damm',
30
+ * quoteMint,
31
+ * treasuryCosigner: teamMultisig,
32
+ * ownerWallet: projectOwner,
33
+ * });
34
+ *
35
+ * // reservation.adminWallet is ZC's managed admin
36
+ * // Use this in transferAdmin IX after DAO creation
37
+ * ```
38
+ *
39
+ * @see https://docs.combinator.trade/llms.txt
40
+ */
41
+ export declare class LaunchpadSDK {
42
+ readonly connection: Connection;
43
+ readonly cluster: 'devnet' | 'mainnet-beta' | 'testnet';
44
+ readonly dammProgramId: PublicKey;
45
+ readonly zcClient: ZCClient;
46
+ constructor(config: LaunchpadSDKFullConfig);
47
+ /**
48
+ * Derive the DAMM pool address for a token pair.
49
+ *
50
+ * IMPORTANT: The pool doesn't exist yet at this point!
51
+ * This computes the PREDICTED address that will be created during execute_launch.
52
+ *
53
+ * @param baseMint - Token being launched (vanity mint)
54
+ * @param quoteMint - SOL or USDC
55
+ * @param config - Optional DAMM config override (defaults to DAMM_CONFIG_PDA)
56
+ */
57
+ derivePoolAddress(baseMint: PublicKey, quoteMint: PublicKey, config?: PublicKey): PublicKey;
58
+ derivePoolAddress(input: DerivePoolAddressRequest): PublicKey;
59
+ /**
60
+ * Derive pool address with sorted mint context for downstream account building.
61
+ */
62
+ derivePoolAddressWithContext(input: DerivePoolAddressRequest): DerivePoolAddressResult;
63
+ /**
64
+ * Reserve an admin key with zCombinator.
65
+ *
66
+ * This is an OFF-CHAIN API call that must be made before building the
67
+ * execute_launch transaction.
68
+ *
69
+ * PREREQUISITES (derive these first):
70
+ * - tokenMint: the vanity mint address (from grinding)
71
+ * - poolAddress: use derivePoolAddress() above
72
+ *
73
+ * The reservation returns:
74
+ * - adminWallet: ZC's managed admin (use in transferAdmin IX)
75
+ * - adminKeyIdx: ZC internal key index
76
+ * - daoId: ZC database DAO ID
77
+ *
78
+ * After calling this, build your atomic transaction:
79
+ * 1. Token launch instructions
80
+ * 2. Pool launch instructions
81
+ * 3. DAO creation (with launchpad PDA as temp admin)
82
+ * 4. transferAdmin to adminWallet (from this response)
83
+ * 5. LP transfer to adminWallet
84
+ *
85
+ * @param params - Name, token mint, pool address, etc.
86
+ *
87
+ * @see https://github.com/zcombinatorio/combinator/blob/main/ui/routes/dao/creation.ts
88
+ */
89
+ reserveAdmin(params: ReserveAdminParams): Promise<ReserveAdminResponse>;
90
+ /**
91
+ * Validate launch pre-execution values that are known off-chain.
92
+ */
93
+ validateLaunchPreparation(request: {
94
+ daoName: string;
95
+ }): ValidationResult;
96
+ /**
97
+ * Validate configure_launch metadata constraints before submitting on-chain tx.
98
+ */
99
+ validateConfigureLaunchMetadata(input: ConfigureLaunchMetadataInput): ValidationResult;
100
+ /**
101
+ * Build canonical configure_launch metadata args with validation.
102
+ */
103
+ buildConfigureLaunchMetadataArgs(input: ConfigureLaunchMetadataInput): ConfigureLaunchMetadataArgs;
104
+ /**
105
+ * Build metadata JSON payload for off-chain hosting providers.
106
+ * Caller uploads resulting JSON and uses returned URL as configure_launch `uri`.
107
+ */
108
+ buildTokenMetadataJson(input: BuildTokenMetadataJsonInput): TokenMetadataJson;
109
+ /**
110
+ * Build reserve-admin params in a deterministic and typed way.
111
+ */
112
+ buildReserveAdminParams(input: BuildReserveAdminParamsInput): BuildReserveAdminParamsResult;
113
+ /**
114
+ * Build `execute_launch` args from reservation output.
115
+ */
116
+ buildExecuteLaunchArgs(input: BuildExecuteLaunchArgsInput): ExecuteLaunchInstructionArgs;
117
+ /**
118
+ * One-call helper for all pre-execution off-chain ops:
119
+ * 1) derive pool address
120
+ * 2) call ZC reserve-admin
121
+ * 3) construct execute_launch args
122
+ */
123
+ prepareLaunchExecution(input: PrepareLaunchExecutionRequest): Promise<PrepareLaunchExecutionResult>;
124
+ /**
125
+ * Build an unsigned `initialize_launch` transaction.
126
+ *
127
+ * Creates a LaunchConfig PDA + underlying vault via CPI to vault::make.
128
+ *
129
+ * ```typescript
130
+ * const tx = await sdk.buildInitializeLaunchTx(launchpadProgram, {
131
+ * creator: wallet.publicKey,
132
+ * seed: new BN(Date.now()),
133
+ * vaultSeed: new BN(Date.now() + 1),
134
+ * totalSupply: new BN('1000000000000000'),
135
+ * tokensToParticipants: new BN('500000000000000'),
136
+ * quoteMint: NATIVE_MINT,
137
+ * minRaise: new BN('100000000'),
138
+ * targetRaise: new BN('100000000'),
139
+ * startTime: new BN(now - 5),
140
+ * endTime: new BN(now + 300),
141
+ * vaultProgramId: VAULT_PROGRAM_ID,
142
+ * });
143
+ * ```
144
+ */
145
+ buildInitializeLaunchTx(launchpadProgram: Program<Idl>, opts: InitializeLaunchOptions): Promise<Transaction>;
146
+ /**
147
+ * Build an unsigned `configure_launch` transaction.
148
+ *
149
+ * Sets vanity mint config + token metadata.
150
+ * Transitions FundraiseActive → ReadyToLaunch.
151
+ */
152
+ buildConfigureLaunchTx(launchpadProgram: Program<Idl>, opts: ConfigureLaunchOptions): Promise<Transaction>;
153
+ /**
154
+ * Build an unsigned `create_launch_token` transaction.
155
+ *
156
+ * Creates vanity mint, Metaplex metadata, mints total supply.
157
+ * Transitions ReadyToLaunch → TokenCreated.
158
+ *
159
+ * **Important**: The returned TX must be signed by both `admin` and `baseKeypair`.
160
+ */
161
+ buildCreateLaunchTokenTx(launchpadProgram: Program<Idl>, opts: CreateLaunchTokenOptions): Promise<Transaction>;
162
+ /**
163
+ * Build an unsigned `execute_launch` transaction.
164
+ *
165
+ * Atomically finalizes vault, creates DAMM pool, creates DAO,
166
+ * transfers authorities, and routes funds.
167
+ * Transitions TokenCreated → Launched.
168
+ *
169
+ * Returns both the transaction and all resolved accounts (for ALT creation).
170
+ *
171
+ * **Important**: This TX has ~35 accounts and requires an Address Lookup Table.
172
+ * Use the returned `accounts` to populate the ALT, then compile to a
173
+ * VersionedTransaction before sending.
174
+ *
175
+ * ```typescript
176
+ * const { tx, accounts } = await sdk.buildExecuteLaunchTx(launchpadProgram, {
177
+ * admin: adminKeypair.publicKey,
178
+ * launchConfig: launchConfigPda,
179
+ * launchConfigData,
180
+ * poolActivationTime: new BN(now + 120),
181
+ * daoName: 'MyDAO',
182
+ * treasuryCosigner: teamMultisig,
183
+ * newDaoAdmin: reservation.adminWallet,
184
+ * dammPool: poolAddress,
185
+ * vaultProgramId: VAULT_PROGRAM_ID,
186
+ * computeUnits: 1_400_000,
187
+ * });
188
+ * ```
189
+ */
190
+ buildExecuteLaunchTx(launchpadProgram: Program<Idl>, opts: ExecuteLaunchOptions): Promise<{
191
+ tx: Transaction;
192
+ accounts: ExecuteLaunchAccountsResolved;
193
+ }>;
194
+ /**
195
+ * Build an unsigned `cancel_launch` transaction.
196
+ *
197
+ * Cancels from any pre-Launched state. Burns tokens if minted.
198
+ */
199
+ buildCancelLaunchTx(launchpadProgram: Program<Idl>, opts: CancelLaunchOptions): Promise<Transaction>;
200
+ /**
201
+ * Check whether a user can claim tokens, and how much.
202
+ *
203
+ * This is the primary method for frontends to determine whether to show
204
+ * the claim button and what information to display.
205
+ *
206
+ * **Works on both client and server** — fetches on-chain state and
207
+ * runs a pure eligibility computation.
208
+ *
209
+ * @param launchpadProgram - Anchor program instance for the launchpad
210
+ * @param vaultProgram - Anchor program instance for the vault
211
+ * @param launchConfig - The launch config PDA address
212
+ * @param user - The user's wallet pubkey
213
+ * @param currentTime - Optional unix timestamp override (for testing).
214
+ * Defaults to `Date.now() / 1000`.
215
+ *
216
+ * @example
217
+ * ```typescript
218
+ * const eligibility = await sdk.getClaimEligibility(
219
+ * launchpadProgram,
220
+ * vaultProgram,
221
+ * launchConfigPda,
222
+ * wallet.publicKey,
223
+ * );
224
+ *
225
+ * if (eligibility.canClaim) {
226
+ * console.log(`Claimable: ${eligibility.claimableNow.toString()} tokens`);
227
+ * } else {
228
+ * console.log(`Cannot claim: ${eligibility.reason}`);
229
+ * }
230
+ * ```
231
+ */
232
+ getClaimEligibility(launchpadProgram: Program<Idl>, vaultProgram: Program<Idl>, launchConfig: PublicKey, user: PublicKey, currentTime?: number): Promise<ClaimEligibility>;
233
+ /**
234
+ * Build an unsigned `claim_tokens` transaction for a user.
235
+ *
236
+ * The transaction is ready for signing by the user's wallet (or relay).
237
+ * Includes compute budget and priority fee if specified.
238
+ *
239
+ * **Client-side (wallet adapter):**
240
+ * ```typescript
241
+ * const tx = await sdk.buildClaimTx(launchpadProgram, {
242
+ * user: wallet.publicKey,
243
+ * launchConfig: launchConfigPda,
244
+ * launchConfigData,
245
+ * vaultProgramId: VAULT_PROGRAM_ID,
246
+ * });
247
+ * const sig = await wallet.sendTransaction(tx, connection);
248
+ * ```
249
+ *
250
+ * **Server-side (relay/sponsored):**
251
+ * ```typescript
252
+ * const tx = await sdk.buildClaimTx(launchpadProgram, {
253
+ * user: userPubkey,
254
+ * launchConfig: launchConfigPda,
255
+ * launchConfigData,
256
+ * vaultProgramId: VAULT_PROGRAM_ID,
257
+ * feePayer: relayPubkey, // sponsor pays gas
258
+ * priorityFee: 10_000, // 10k micro-lamports/CU
259
+ * });
260
+ * // Serialize and send to user for signing, then relay signs + submits
261
+ * ```
262
+ *
263
+ * @param launchpadProgram - Anchor program instance for the launchpad
264
+ * @param opts - Claim transaction options
265
+ */
266
+ buildClaimTx(launchpadProgram: Program<Idl>, opts: ClaimTransactionOptions): Promise<Transaction>;
267
+ /**
268
+ * Check ZC API health status.
269
+ *
270
+ * @see https://docs.combinator.trade/api-reference/health
271
+ */
272
+ healthCheck(): Promise<HealthCheckResult>;
273
+ }
274
+ //# sourceMappingURL=sdk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"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"}