@tixprotocol/tdp-sdk 0.4.0 → 0.5.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 +13 -1
- package/dist/{chunk-DKU7DEI5.js → chunk-MZKCWS5T.js} +67 -36
- package/dist/chunk-MZKCWS5T.js.map +1 -0
- package/dist/index.d.ts +802 -97
- package/dist/index.js +151 -89
- package/dist/index.js.map +1 -1
- package/dist/schemas.d.ts +23 -58
- package/dist/schemas.js +13 -13
- package/package.json +1 -1
- package/dist/chunk-DKU7DEI5.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,51 +1,71 @@
|
|
|
1
1
|
import {
|
|
2
|
-
AcceptClaimOffersRequestBodySchema,
|
|
3
|
-
AcceptClaimOffersResponseSchema,
|
|
4
2
|
ApiKeyHeadersSchema,
|
|
3
|
+
CreateAndSubmitOrderRequestBodySchema,
|
|
4
|
+
CreateAndSubmitOrderResponseSchema,
|
|
5
5
|
EventPathParametersSchema,
|
|
6
6
|
GetAddressResponseSchema,
|
|
7
|
-
|
|
7
|
+
GetOrderResponseSchema,
|
|
8
8
|
IdempotencyKeyAndApiKeyHeadersSchema,
|
|
9
|
-
MAX_PERMITS_PER_CLAIM_WALLET,
|
|
10
9
|
NoPathParametersSchema,
|
|
10
|
+
OrderPathParametersSchema,
|
|
11
11
|
PostIntegratorMetadataRequestBodySchema,
|
|
12
12
|
PostTixIndexerIntegratorMetadataResultSchema,
|
|
13
13
|
SignTenantTransactionRequestBodySchema,
|
|
14
14
|
SignTransactionResponseSchema,
|
|
15
15
|
SubmitTenantTransactionRequestBodySchema,
|
|
16
16
|
SubmitTenantTransactionResponseSchema,
|
|
17
|
-
|
|
17
|
+
TransactionPathParametersSchema,
|
|
18
18
|
WalletPathParametersSchema,
|
|
19
19
|
defineClientRoute,
|
|
20
|
-
requireUniquePermitKeys,
|
|
21
20
|
solanaDataApiClientRoutes,
|
|
22
21
|
tixIndexerReadApiClientRoutes
|
|
23
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-MZKCWS5T.js";
|
|
24
23
|
import {
|
|
25
24
|
TdpApiError,
|
|
26
25
|
TdpResponseValidationError
|
|
27
26
|
} from "./chunk-7IWD2KHF.js";
|
|
28
27
|
|
|
28
|
+
// src/utils/usdc-cents.ts
|
|
29
|
+
var USDC_DECIMALS = 6;
|
|
30
|
+
var USDC_MINOR_PER_CENT = 10n ** BigInt(USDC_DECIMALS - 2);
|
|
31
|
+
function usdcMinorToCents(usdcMinor) {
|
|
32
|
+
return (usdcMinor + USDC_MINOR_PER_CENT / 2n) / USDC_MINOR_PER_CENT;
|
|
33
|
+
}
|
|
34
|
+
function centsToUsdcMinor(cents) {
|
|
35
|
+
return cents * USDC_MINOR_PER_CENT;
|
|
36
|
+
}
|
|
37
|
+
function convertWireUsdcMinorToCents(usdcMinor) {
|
|
38
|
+
return Number(usdcMinorToCents(BigInt(usdcMinor)));
|
|
39
|
+
}
|
|
40
|
+
|
|
29
41
|
// src/solana-data-api/create-solana-client.ts
|
|
30
42
|
function createSolanaClient(tixApi) {
|
|
31
43
|
return {
|
|
32
|
-
getEvent(pathParams, options) {
|
|
33
|
-
|
|
44
|
+
async getEvent(pathParams, options) {
|
|
45
|
+
const { min_royalty_floor, ...event } = await tixApi(
|
|
34
46
|
{
|
|
35
47
|
route: "get-event-account",
|
|
36
48
|
pathParams
|
|
37
49
|
},
|
|
38
50
|
options
|
|
39
51
|
);
|
|
52
|
+
return {
|
|
53
|
+
...event,
|
|
54
|
+
min_royalty_floor_cents: convertWireUsdcMinorToCents(min_royalty_floor)
|
|
55
|
+
};
|
|
40
56
|
},
|
|
41
|
-
getListing(pathParams, options) {
|
|
42
|
-
|
|
57
|
+
async getListing(pathParams, options) {
|
|
58
|
+
const { ask_price_minor, ...listing } = await tixApi(
|
|
43
59
|
{
|
|
44
60
|
route: "get-listing-account",
|
|
45
61
|
pathParams
|
|
46
62
|
},
|
|
47
63
|
options
|
|
48
64
|
);
|
|
65
|
+
return {
|
|
66
|
+
...listing,
|
|
67
|
+
ask_price_cents: convertWireUsdcMinorToCents(ask_price_minor)
|
|
68
|
+
};
|
|
49
69
|
},
|
|
50
70
|
getPermit(pathParams, options) {
|
|
51
71
|
return tixApi(
|
|
@@ -56,22 +76,47 @@ function createSolanaClient(tixApi) {
|
|
|
56
76
|
options
|
|
57
77
|
);
|
|
58
78
|
},
|
|
59
|
-
getProtocolConfig(options) {
|
|
60
|
-
|
|
79
|
+
async getProtocolConfig(options) {
|
|
80
|
+
const {
|
|
81
|
+
event_registration_fee_minor,
|
|
82
|
+
permit_fee_minor,
|
|
83
|
+
p2p_transfer_fee_minor,
|
|
84
|
+
...protocolConfig
|
|
85
|
+
} = await tixApi(
|
|
61
86
|
{
|
|
62
87
|
route: "get-protocol-config-account"
|
|
63
88
|
},
|
|
64
89
|
options
|
|
65
90
|
);
|
|
91
|
+
return {
|
|
92
|
+
...protocolConfig,
|
|
93
|
+
event_registration_fee_cents: convertWireUsdcMinorToCents(
|
|
94
|
+
event_registration_fee_minor
|
|
95
|
+
),
|
|
96
|
+
permit_fee_cents: convertWireUsdcMinorToCents(permit_fee_minor),
|
|
97
|
+
p2p_transfer_fee_cents: convertWireUsdcMinorToCents(
|
|
98
|
+
p2p_transfer_fee_minor
|
|
99
|
+
)
|
|
100
|
+
};
|
|
66
101
|
},
|
|
67
|
-
getIntegrator(pathParams, options) {
|
|
68
|
-
|
|
102
|
+
async getIntegrator(pathParams, options) {
|
|
103
|
+
const { integrator, ...account } = await tixApi(
|
|
69
104
|
{
|
|
70
105
|
route: "get-integrator-account",
|
|
71
106
|
pathParams
|
|
72
107
|
},
|
|
73
108
|
options
|
|
74
109
|
);
|
|
110
|
+
const { balance, ...registration } = integrator;
|
|
111
|
+
return {
|
|
112
|
+
...account,
|
|
113
|
+
integrator: {
|
|
114
|
+
...registration,
|
|
115
|
+
balance: {
|
|
116
|
+
amount_cents: convertWireUsdcMinorToCents(balance.amount_minor)
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
};
|
|
75
120
|
}
|
|
76
121
|
};
|
|
77
122
|
}
|
|
@@ -122,7 +167,10 @@ async function readResponsePayload(response) {
|
|
|
122
167
|
}
|
|
123
168
|
|
|
124
169
|
// src/routes/execute-client-route.ts
|
|
125
|
-
var
|
|
170
|
+
var ErrorResponseBodySchema = z.looseObject({
|
|
171
|
+
message: z.string(),
|
|
172
|
+
code: z.string()
|
|
173
|
+
});
|
|
126
174
|
async function executeClientRoute({
|
|
127
175
|
baseApiUrl,
|
|
128
176
|
fetchImpl,
|
|
@@ -164,7 +212,7 @@ async function executeClientRoute({
|
|
|
164
212
|
throw createError({
|
|
165
213
|
kind: "http-status",
|
|
166
214
|
...failure,
|
|
167
|
-
code:
|
|
215
|
+
code: ErrorResponseBodySchema.pick({ code: true }).safeParse(payload).data?.code
|
|
168
216
|
});
|
|
169
217
|
}
|
|
170
218
|
const parsed = route.responseBodySchema.safeParse(payload);
|
|
@@ -180,7 +228,6 @@ async function executeClientRoute({
|
|
|
180
228
|
|
|
181
229
|
// src/tix-api/create-tix-api-client.ts
|
|
182
230
|
var SOLANA_DATA_API_PATH_PREFIX = "solana";
|
|
183
|
-
var TIX_INDEXER_API_PATH_PREFIX = "tix-indexer";
|
|
184
231
|
function createTixApiClientForRoutes({
|
|
185
232
|
routes,
|
|
186
233
|
baseApiUrl,
|
|
@@ -195,9 +242,9 @@ function createTixApiClientForRoutes({
|
|
|
195
242
|
queryParams,
|
|
196
243
|
body
|
|
197
244
|
}, { signal } = {}) {
|
|
198
|
-
const prefix = route in solanaDataApiClientRoutes ? SOLANA_DATA_API_PATH_PREFIX :
|
|
245
|
+
const prefix = route in solanaDataApiClientRoutes ? `/${SOLANA_DATA_API_PATH_PREFIX}` : "";
|
|
199
246
|
return executeClientRoute({
|
|
200
|
-
baseApiUrl: `${baseApiUrl}
|
|
247
|
+
baseApiUrl: `${baseApiUrl}${prefix}`,
|
|
201
248
|
fetchImpl,
|
|
202
249
|
headers,
|
|
203
250
|
signal,
|
|
@@ -235,17 +282,48 @@ function createTixApiClient({
|
|
|
235
282
|
});
|
|
236
283
|
}
|
|
237
284
|
|
|
285
|
+
// src/tix-indexer-api/create-events-client.ts
|
|
286
|
+
function createEventsClient(tixApi) {
|
|
287
|
+
return {
|
|
288
|
+
list(queryParams = {}, options) {
|
|
289
|
+
return tixApi(
|
|
290
|
+
{
|
|
291
|
+
route: "get-events",
|
|
292
|
+
queryParams
|
|
293
|
+
},
|
|
294
|
+
options
|
|
295
|
+
);
|
|
296
|
+
},
|
|
297
|
+
get(pathParams, options) {
|
|
298
|
+
return tixApi(
|
|
299
|
+
{
|
|
300
|
+
route: "get-event",
|
|
301
|
+
pathParams
|
|
302
|
+
},
|
|
303
|
+
options
|
|
304
|
+
);
|
|
305
|
+
}
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
|
|
238
309
|
// src/tix-indexer-api/create-indexer-client.ts
|
|
239
310
|
function createIndexerClient(tixApi) {
|
|
240
311
|
return {
|
|
241
|
-
listActiveListings(queryParams, options) {
|
|
242
|
-
|
|
312
|
+
async listActiveListings(queryParams, options) {
|
|
313
|
+
const { items, next_cursor } = await tixApi(
|
|
243
314
|
{
|
|
244
315
|
route: "get-active-listings",
|
|
245
316
|
queryParams
|
|
246
317
|
},
|
|
247
318
|
options
|
|
248
319
|
);
|
|
320
|
+
return {
|
|
321
|
+
items: items.map(({ ask_price_minor, ...listing }) => ({
|
|
322
|
+
...listing,
|
|
323
|
+
ask_price_cents: ask_price_minor === null ? null : convertWireUsdcMinorToCents(ask_price_minor)
|
|
324
|
+
})),
|
|
325
|
+
next_cursor
|
|
326
|
+
};
|
|
249
327
|
},
|
|
250
328
|
listUpcomingEvents(queryParams = {}, options) {
|
|
251
329
|
return tixApi(
|
|
@@ -272,14 +350,29 @@ function createIndexerClient(tixApi) {
|
|
|
272
350
|
};
|
|
273
351
|
}
|
|
274
352
|
|
|
353
|
+
// src/tix-indexer-api/create-integrator-client.ts
|
|
354
|
+
function createIntegratorClient(tixApi) {
|
|
355
|
+
return {
|
|
356
|
+
getInfo(options) {
|
|
357
|
+
return tixApi(
|
|
358
|
+
{
|
|
359
|
+
route: "get-integrator"
|
|
360
|
+
},
|
|
361
|
+
options
|
|
362
|
+
);
|
|
363
|
+
}
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
|
|
275
367
|
// ../tdp-schemas/src/wallet-custody/api-key-route-keys.ts
|
|
276
368
|
var GET_USER_ADDRESS_ROUTE_KEY = "GET /wallets/users/{subject}/address";
|
|
277
369
|
var GET_INTEGRATOR_ADDRESS_ROUTE_KEY = "GET /wallets/integrators/{subject}/address";
|
|
278
370
|
var SIGN_USER_TRANSACTION_ROUTE_KEY = "POST /wallets/users/{subject}/signatures";
|
|
279
371
|
var SIGN_INTEGRATOR_TRANSACTION_ROUTE_KEY = "POST /wallets/integrators/{subject}/signatures";
|
|
280
372
|
var SUBMIT_TENANT_TRANSACTION_ROUTE_KEY = "POST /transactions/submissions";
|
|
281
|
-
var
|
|
282
|
-
var
|
|
373
|
+
var GET_TRANSACTION_ROUTE_KEY = "GET /transactions/{id}";
|
|
374
|
+
var CREATE_AND_SUBMIT_ORDER_ROUTE_KEY = "POST /orders";
|
|
375
|
+
var GET_ORDER_ROUTE_KEY = "GET /orders/{id}";
|
|
283
376
|
var GET_FEE_PAYER_ADDRESS_ROUTE_KEY = "GET /wallets/fee-payer/address";
|
|
284
377
|
var GET_PROTOCOL_AUTHORITY_ADDRESS_ROUTE_KEY = "GET /wallets/protocol-authority/address";
|
|
285
378
|
|
|
@@ -333,24 +426,33 @@ var apiKeyWalletCustodyApiClientRoutes = {
|
|
|
333
426
|
requestBodySchema: SubmitTenantTransactionRequestBodySchema,
|
|
334
427
|
responseBodySchema: SubmitTenantTransactionResponseSchema
|
|
335
428
|
}),
|
|
336
|
-
"get-
|
|
337
|
-
name: "get-
|
|
429
|
+
"get-transaction": defineClientRoute({
|
|
430
|
+
name: "get-transaction",
|
|
338
431
|
method: "GET",
|
|
339
|
-
routeKey:
|
|
340
|
-
pathParamsSchema:
|
|
341
|
-
buildPath: ({ baseApiUrl = "" }) => `${baseApiUrl}/
|
|
342
|
-
headersSchema:
|
|
343
|
-
responseBodySchema:
|
|
432
|
+
routeKey: GET_TRANSACTION_ROUTE_KEY,
|
|
433
|
+
pathParamsSchema: TransactionPathParametersSchema,
|
|
434
|
+
buildPath: ({ baseApiUrl = "", id }) => `${baseApiUrl}/transactions/${id}`,
|
|
435
|
+
headersSchema: ApiKeyHeadersSchema,
|
|
436
|
+
responseBodySchema: SubmitTenantTransactionResponseSchema
|
|
344
437
|
}),
|
|
345
|
-
"
|
|
346
|
-
name: "
|
|
438
|
+
"get-order": defineClientRoute({
|
|
439
|
+
name: "get-order",
|
|
440
|
+
method: "GET",
|
|
441
|
+
routeKey: GET_ORDER_ROUTE_KEY,
|
|
442
|
+
pathParamsSchema: OrderPathParametersSchema,
|
|
443
|
+
buildPath: ({ baseApiUrl = "", id }) => `${baseApiUrl}/orders/${encodeURIComponent(id)}`,
|
|
444
|
+
headersSchema: ApiKeyHeadersSchema,
|
|
445
|
+
responseBodySchema: GetOrderResponseSchema
|
|
446
|
+
}),
|
|
447
|
+
"create-and-submit-order": defineClientRoute({
|
|
448
|
+
name: "create-and-submit-order",
|
|
347
449
|
method: "POST",
|
|
348
|
-
routeKey:
|
|
450
|
+
routeKey: CREATE_AND_SUBMIT_ORDER_ROUTE_KEY,
|
|
349
451
|
pathParamsSchema: NoPathParametersSchema,
|
|
350
|
-
buildPath: ({ baseApiUrl = "" }) => `${baseApiUrl}/
|
|
452
|
+
buildPath: ({ baseApiUrl = "" }) => `${baseApiUrl}/orders`,
|
|
351
453
|
headersSchema: IdempotencyKeyAndApiKeyHeadersSchema,
|
|
352
|
-
requestBodySchema:
|
|
353
|
-
responseBodySchema:
|
|
454
|
+
requestBodySchema: CreateAndSubmitOrderRequestBodySchema,
|
|
455
|
+
responseBodySchema: CreateAndSubmitOrderResponseSchema
|
|
354
456
|
}),
|
|
355
457
|
"get-fee-payer-address": defineClientRoute({
|
|
356
458
|
name: "get-fee-payer-address",
|
|
@@ -410,64 +512,21 @@ function createWalletCustodyApiClient({
|
|
|
410
512
|
};
|
|
411
513
|
}
|
|
412
514
|
|
|
413
|
-
// src/wallet-custody/create-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
// src/wallet-custody/resolve-claim-offer.ts
|
|
417
|
-
async function resolveClaimOffer(solana, ticket, protocol, eventResponse, options) {
|
|
418
|
-
const [listing, event, permit] = await Promise.all([
|
|
419
|
-
solana.getListing(ticket, options),
|
|
420
|
-
eventResponse,
|
|
421
|
-
solana.getPermit(ticket, options)
|
|
422
|
-
]);
|
|
423
|
-
return {
|
|
424
|
-
event_id: listing.event_id,
|
|
425
|
-
ticket_id: listing.ticket_id,
|
|
426
|
-
permit_version: listing.permit_version,
|
|
427
|
-
seller_payout: listing.payout_ata,
|
|
428
|
-
royalty_destinations: event.royalty_recipients_count > 0 ? event.royalty_recipients.slice(0, event.royalty_recipients_count).map(({ destination }) => destination) : [protocol.default_royalty_vault],
|
|
429
|
-
ticket_type_config: permit.ticket_type_config,
|
|
430
|
-
usdc_mint: protocol.usdc_mint
|
|
431
|
-
};
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
// src/wallet-custody/create-claim-wallets-client.ts
|
|
435
|
-
var AcceptOffersBodySchema = AcceptClaimOffersRequestBodySchema.extend({
|
|
436
|
-
offers: z2.array(TicketPathParametersSchema).min(1).max(MAX_PERMITS_PER_CLAIM_WALLET).superRefine(requireUniquePermitKeys)
|
|
437
|
-
});
|
|
438
|
-
function createClaimWalletsClient(walletCustodyApi, solana) {
|
|
515
|
+
// src/wallet-custody/create-orders-client.ts
|
|
516
|
+
function createOrdersClient(walletCustodyApi) {
|
|
439
517
|
return {
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
}, options) {
|
|
443
|
-
return walletCustodyApi(
|
|
444
|
-
{ route: "get-purchase-status", idempotencyKey },
|
|
445
|
-
options
|
|
446
|
-
);
|
|
447
|
-
},
|
|
448
|
-
async acceptOffers({
|
|
518
|
+
/** Creates the order and submits its purchase in the same call. */
|
|
519
|
+
createAndSubmit({
|
|
449
520
|
idempotencyKey,
|
|
450
521
|
body
|
|
451
522
|
}, options) {
|
|
452
|
-
const parsedBody = AcceptOffersBodySchema.parse(body);
|
|
453
|
-
const protocol = await solana.getProtocolConfig(options);
|
|
454
|
-
const events = /* @__PURE__ */ new Map();
|
|
455
|
-
const offers = await Promise.all(
|
|
456
|
-
parsedBody.offers.map((ticket) => {
|
|
457
|
-
const eventId = String(ticket.eventId);
|
|
458
|
-
const event = events.get(eventId) ?? solana.getEvent({ eventId }, options);
|
|
459
|
-
events.set(eventId, event);
|
|
460
|
-
return resolveClaimOffer(solana, ticket, protocol, event, options);
|
|
461
|
-
})
|
|
462
|
-
);
|
|
463
523
|
return walletCustodyApi(
|
|
464
|
-
{
|
|
465
|
-
route: "accept-claim-offers",
|
|
466
|
-
body: { ...parsedBody, offers },
|
|
467
|
-
idempotencyKey
|
|
468
|
-
},
|
|
524
|
+
{ route: "create-and-submit-order", body, idempotencyKey },
|
|
469
525
|
options
|
|
470
526
|
);
|
|
527
|
+
},
|
|
528
|
+
get(pathParams, options) {
|
|
529
|
+
return walletCustodyApi({ route: "get-order", pathParams }, options);
|
|
471
530
|
}
|
|
472
531
|
};
|
|
473
532
|
}
|
|
@@ -558,10 +617,13 @@ function createTdpClient(options) {
|
|
|
558
617
|
const solana = createSolanaClient(tixApi);
|
|
559
618
|
return {
|
|
560
619
|
solana,
|
|
620
|
+
events: createEventsClient(tixApi),
|
|
561
621
|
indexer: createIndexerClient(tixApi),
|
|
622
|
+
integrator: createIntegratorClient(tixApi),
|
|
562
623
|
wallets: createWalletClient(walletCustodyApi),
|
|
563
624
|
transactions: createTransactionsClient(walletCustodyApi),
|
|
564
|
-
|
|
625
|
+
orders: createOrdersClient(walletCustodyApi),
|
|
626
|
+
utils: { usdcMinorToCents, centsToUsdcMinor }
|
|
565
627
|
};
|
|
566
628
|
}
|
|
567
629
|
export {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/solana-data-api/create-solana-client.ts","../../tdp-schemas/src/tix-indexer-api/routes.ts","../src/routes/create-tdp-api-error-from-route-failure.ts","../src/routes/execute-client-route.ts","../src/utils/join-url-segments.ts","../src/utils/read-response-payload.ts","../src/tix-api/create-tix-api-client.ts","../src/tix-api/api-client.ts","../src/tix-indexer-api/create-indexer-client.ts","../../tdp-schemas/src/wallet-custody/api-key-route-keys.ts","../../tdp-schemas/src/wallet-custody/api-key-routes.ts","../src/wallet-custody/execute-wallet-custody-route.ts","../src/wallet-custody/api-client.ts","../src/wallet-custody/create-claim-wallets-client.ts","../src/wallet-custody/resolve-claim-offer.ts","../src/wallet-custody/const.ts","../src/wallet-custody/create-transactions-client.ts","../src/wallet-custody/create-wallet-client.ts","../src/index.ts"],"sourcesContent":["import type { RoutePathParams } from \"../routes/client-request-types\";\nimport type { TixApiClient, TixApiRoutes } from \"../tix-api/api-client\";\n\nexport function createSolanaClient(tixApi: TixApiClient) {\n return {\n getEvent(\n pathParams: RoutePathParams<TixApiRoutes[\"get-event-account\"]>,\n options?: Pick<RequestInit, \"signal\">,\n ) {\n return tixApi(\n {\n route: \"get-event-account\",\n pathParams,\n },\n options,\n );\n },\n getListing(\n pathParams: RoutePathParams<TixApiRoutes[\"get-listing-account\"]>,\n options?: Pick<RequestInit, \"signal\">,\n ) {\n return tixApi(\n {\n route: \"get-listing-account\",\n pathParams,\n },\n options,\n );\n },\n getPermit(\n pathParams: RoutePathParams<TixApiRoutes[\"get-permit\"]>,\n options?: Pick<RequestInit, \"signal\">,\n ) {\n return tixApi(\n {\n route: \"get-permit\",\n pathParams,\n },\n options,\n );\n },\n getProtocolConfig(options?: Pick<RequestInit, \"signal\">) {\n return tixApi(\n {\n route: \"get-protocol-config-account\",\n },\n options,\n );\n },\n getIntegrator(\n pathParams: RoutePathParams<TixApiRoutes[\"get-integrator-account\"]>,\n options?: Pick<RequestInit, \"signal\">,\n ) {\n return tixApi(\n {\n route: \"get-integrator-account\",\n pathParams,\n },\n options,\n );\n },\n };\n}\n","import type { z } from \"zod\";\nimport { defineClientRoute } from \"../routes/define-client-route\";\nimport { ApiKeyHeadersSchema } from \"../routes/request-schemas\";\nimport { EventPathParametersSchema } from \"../tix-api/path-params\";\nimport {\n PostIntegratorMetadataRequestBodySchema,\n PostTixIndexerIntegratorMetadataResultSchema,\n} from \"./metadata\";\nimport { tixIndexerReadApiClientRoutes } from \"./read-routes\";\n\nexport { PostIntegratorMetadataRequestBodySchema } from \"./metadata\";\nexport {\n ActiveListingsQuerySchema,\n GET_ACTIVE_LISTINGS_ROUTE_KEY,\n GET_UPCOMING_EVENTS_ROUTE_KEY,\n LimitCursorQuerySchema,\n} from \"./read-routes\";\nexport const POST_INTEGRATOR_METADATA_ROUTE_KEY =\n \"POST /events/{eventId}/metadata\";\n\nexport const tixIndexerApiClientRoutes = {\n ...tixIndexerReadApiClientRoutes,\n \"post-integrator-metadata\": defineClientRoute({\n name: \"post-integrator-metadata\",\n method: \"POST\" as const,\n routeKey: POST_INTEGRATOR_METADATA_ROUTE_KEY,\n pathParamsSchema: EventPathParametersSchema,\n buildPath: ({ baseApiUrl = \"\", eventId }) =>\n `${baseApiUrl}/events/${eventId}/metadata`,\n headersSchema: ApiKeyHeadersSchema,\n requestBodySchema: PostIntegratorMetadataRequestBodySchema,\n responseBodySchema: PostTixIndexerIntegratorMetadataResultSchema,\n }),\n} as const satisfies Record<string, unknown>;\n\nexport const responseBodySchemaByRouteKey = Object.fromEntries(\n Object.values(tixIndexerApiClientRoutes).map(\n (route) => [route.routeKey, route.responseBodySchema] as const,\n ),\n) as Record<string, z.ZodType<Record<string, unknown>>>;\n","import {\n TdpApiError,\n TdpResponseValidationError,\n} from \"../wallet-custody/http-error\";\nimport type { ClientRouteFailure } from \"./execute-client-route\";\n\nexport function createTdpApiErrorFromRouteFailure(failure: ClientRouteFailure) {\n return failure.kind === \"response-validation\"\n ? new TdpResponseValidationError(failure)\n : new TdpApiError(failure);\n}\n","import { z } from \"zod\";\nimport { joinUrlSegments } from \"../utils/join-url-segments\";\nimport { readResponsePayload } from \"../utils/read-response-payload\";\nimport type { AnyClientRoute } from \"./define-client-route\";\n\nexport type ClientRouteFailure = {\n kind: \"http-status\" | \"response-validation\";\n route: string;\n method: string;\n path: string;\n status: number;\n statusText: string;\n payload: unknown;\n code?: string;\n requestId?: string;\n validationError?: z.ZodError;\n};\n\nconst ErrorBodyCodeSchema = z.object({ code: z.string() });\n\n/** Builds the URL, headers, and body for a route, sends it, and parses the response through the route's schema. */\nexport async function executeClientRoute<TRoute extends AnyClientRoute>({\n baseApiUrl,\n fetchImpl,\n headers,\n signal,\n routeName,\n route,\n pathParams,\n queryParams,\n body,\n routeHeadersInput,\n createError,\n}: {\n baseApiUrl: string;\n fetchImpl: typeof fetch;\n headers?: HeadersInit;\n signal?: RequestInit[\"signal\"];\n routeName: string;\n route: TRoute;\n pathParams: unknown;\n queryParams?: unknown;\n body: unknown;\n routeHeadersInput: Record<string, string | undefined>;\n createError: (failure: ClientRouteFailure) => Error;\n}): Promise<z.output<TRoute[\"responseBodySchema\"]>> {\n // TS can't reconcile the route's output types with input types, hence the `as never` clauses.\n const path = route.buildPath(pathParams as never);\n const routeHeaders = route.buildHeaders(routeHeadersInput as never);\n const url =\n joinUrlSegments(baseApiUrl, path) +\n (queryParams === undefined\n ? \"\"\n : route.buildQueryString(queryParams as never));\n\n const requestHeaders = new Headers(headers);\n requestHeaders.set(\"content-type\", \"application/json\");\n new Headers(routeHeaders as HeadersInit).forEach((value, name) => {\n requestHeaders.set(name, value);\n });\n const response = await fetchImpl(url, {\n method: route.method,\n ...(signal === undefined ? {} : { signal }),\n headers: Object.fromEntries(requestHeaders),\n body:\n body === undefined ? undefined : route.buildJsonPayload(body as never),\n });\n const payload = await readResponsePayload(response);\n const failure = {\n route: routeName,\n method: route.method,\n path,\n status: response.status,\n statusText: response.statusText,\n payload,\n requestId: response.headers.get(\"apigw-requestid\") ?? undefined,\n };\n if (!response.ok) {\n throw createError({\n kind: \"http-status\",\n ...failure,\n code: ErrorBodyCodeSchema.safeParse(payload).data?.code,\n });\n }\n\n const parsed = route.responseBodySchema.safeParse(payload);\n if (!parsed.success) {\n throw createError({\n kind: \"response-validation\",\n ...failure,\n validationError: parsed.error,\n });\n }\n return parsed.data as z.output<TRoute[\"responseBodySchema\"]>;\n}\n","/**\n * Joins URL segments with one slash; i.e., remove repeated slashes.\n */\nexport function joinUrlSegments(baseUrl: string, path: string): string {\n return `${baseUrl.replace(/\\/+$/, \"\")}/${path.replace(/^\\/+/, \"\")}`;\n}\n","/**\n * Reads the body without letting an empty or non-JSON payload mask the HTTP status.\n **/\nexport async function readResponsePayload(\n response: Response,\n): Promise<unknown> {\n const rawBody = await response.text();\n if (rawBody.length === 0) return undefined;\n try {\n return JSON.parse(rawBody);\n } catch {\n return rawBody;\n }\n}\n","import type {\n ClientRouteMap,\n ClientRouteRequest,\n RouteQueryParams,\n RouteRequestField,\n RouteResponseBody,\n} from \"../routes/client-request-types\";\nimport { createTdpApiErrorFromRouteFailure } from \"../routes/create-tdp-api-error-from-route-failure\";\nimport { executeClientRoute } from \"../routes/execute-client-route\";\nimport { solanaDataApiClientRoutes } from \"../solana-data-api/routes\";\n\n/** Both APIs are mapped onto one domain under these keys. */\nexport const SOLANA_DATA_API_PATH_PREFIX = \"solana\";\nexport const TIX_INDEXER_API_PATH_PREFIX = \"tix-indexer\";\n\n/** The request for a route. No caller-settable `headers`: the client injects them itself. */\ntype FetchTixApiRequest<\n TRoutes extends ClientRouteMap,\n TRouteName extends keyof TRoutes,\n> = ClientRouteRequest<TRoutes, TRouteName> &\n RouteRequestField<\"queryParams\", RouteQueryParams<TRoutes[TRouteName]>>;\n\nexport function createTixApiClientForRoutes<TRoutes extends ClientRouteMap>({\n routes,\n baseApiUrl,\n apiKey,\n fetchImpl = fetch,\n headers,\n additionalHeaders,\n}: {\n routes: TRoutes;\n baseApiUrl: string;\n apiKey: string | (() => Promise<string>);\n fetchImpl?: typeof fetch;\n headers?: HeadersInit;\n additionalHeaders?: Parameters<\n typeof executeClientRoute\n >[0][\"routeHeadersInput\"];\n}) {\n return async function fetchTixApi<TRouteName extends keyof TRoutes & string>(\n {\n route,\n pathParams,\n queryParams,\n body,\n }: FetchTixApiRequest<TRoutes, TRouteName>,\n { signal }: Pick<RequestInit, \"signal\"> = {},\n ): Promise<RouteResponseBody<TRoutes[TRouteName]>> {\n const prefix =\n route in solanaDataApiClientRoutes\n ? SOLANA_DATA_API_PATH_PREFIX\n : TIX_INDEXER_API_PATH_PREFIX;\n return executeClientRoute({\n baseApiUrl: `${baseApiUrl}/${prefix}`,\n fetchImpl,\n headers,\n signal,\n routeName: route,\n route: routes[route],\n pathParams,\n queryParams,\n body,\n routeHeadersInput: {\n \"x-api-key\": typeof apiKey === \"string\" ? apiKey : await apiKey(),\n ...additionalHeaders,\n },\n createError: createTdpApiErrorFromRouteFailure,\n }) as Promise<RouteResponseBody<TRoutes[TRouteName]>>;\n };\n}\n","import { solanaDataApiClientRoutes } from \"../solana-data-api/routes\";\nimport { tixIndexerApiClientRoutes } from \"../tix-indexer-api/routes\";\nimport { createTixApiClientForRoutes } from \"./create-tix-api-client\";\n\nexport {\n SOLANA_DATA_API_PATH_PREFIX,\n TIX_INDEXER_API_PATH_PREFIX,\n} from \"./create-tix-api-client\";\n\nexport const tixApiClientRoutes = {\n ...solanaDataApiClientRoutes,\n ...tixIndexerApiClientRoutes,\n} as const;\n\nexport type TixApiRoutes = typeof tixApiClientRoutes;\nexport type TixApiClient = ReturnType<typeof createTixApiClient>;\n\nexport function createTixApiClient({\n baseApiUrl,\n apiKey,\n fetchImpl = fetch,\n headers,\n}: {\n baseApiUrl: string;\n apiKey: string | (() => Promise<string>);\n fetchImpl?: typeof fetch;\n /**\n * Additional request headers. SDK-managed headers take precedence.\n * Cross-origin browser requests require server CORS support for custom headers.\n */\n headers?: HeadersInit;\n}) {\n return createTixApiClientForRoutes({\n routes: tixApiClientRoutes,\n baseApiUrl,\n apiKey,\n fetchImpl,\n headers,\n });\n}\n","import type {\n ClientRouteRequest,\n RouteQueryParams,\n} from \"../routes/client-request-types\";\nimport type { TixApiClient, TixApiRoutes } from \"../tix-api/api-client\";\n\ntype MetadataRequest = ClientRouteRequest<\n TixApiRoutes,\n \"post-integrator-metadata\"\n>;\n/** The route schemas coerce `limit` from a query string, which leaves its input type as `unknown`. */\ntype WithNumericLimit<TQuery> = Omit<TQuery, \"limit\"> & { limit?: number };\ntype ActiveListingsQuery = WithNumericLimit<\n RouteQueryParams<TixApiRoutes[\"get-active-listings\"]>\n>;\ntype UpcomingEventsQuery = WithNumericLimit<\n RouteQueryParams<TixApiRoutes[\"get-upcoming-events\"]>\n>;\n\nexport function createIndexerClient(tixApi: TixApiClient) {\n return {\n listActiveListings(\n queryParams: ActiveListingsQuery,\n options?: Pick<RequestInit, \"signal\">,\n ) {\n return tixApi(\n {\n route: \"get-active-listings\",\n queryParams,\n },\n options,\n );\n },\n listUpcomingEvents(\n queryParams: UpcomingEventsQuery = {},\n options?: Pick<RequestInit, \"signal\">,\n ) {\n return tixApi(\n {\n route: \"get-upcoming-events\",\n queryParams,\n },\n options,\n );\n },\n updateEventMetadata(\n {\n eventId,\n body,\n }: MetadataRequest[\"pathParams\"] & Pick<MetadataRequest, \"body\">,\n options?: Pick<RequestInit, \"signal\">,\n ) {\n return tixApi(\n {\n route: \"post-integrator-metadata\",\n pathParams: { eventId },\n body,\n },\n options,\n );\n },\n };\n}\n","export const GET_USER_ADDRESS_ROUTE_KEY =\n \"GET /wallets/users/{subject}/address\";\nexport const GET_INTEGRATOR_ADDRESS_ROUTE_KEY =\n \"GET /wallets/integrators/{subject}/address\";\nexport const SIGN_USER_TRANSACTION_ROUTE_KEY =\n \"POST /wallets/users/{subject}/signatures\";\nexport const SIGN_INTEGRATOR_TRANSACTION_ROUTE_KEY =\n \"POST /wallets/integrators/{subject}/signatures\";\nexport const SUBMIT_TENANT_TRANSACTION_ROUTE_KEY =\n \"POST /transactions/submissions\";\nexport const ACCEPT_CLAIM_OFFERS_ROUTE_KEY = \"POST /claim_wallets\";\nexport const GET_PURCHASE_STATUS_ROUTE_KEY =\n \"GET /claim_wallets/purchase-status\";\nexport const GET_FEE_PAYER_ADDRESS_ROUTE_KEY = \"GET /wallets/fee-payer/address\";\nexport const GET_PROTOCOL_AUTHORITY_ADDRESS_ROUTE_KEY =\n \"GET /wallets/protocol-authority/address\";\n","import { defineClientRoute } from \"../routes/define-client-route\";\nimport {\n ApiKeyHeadersSchema,\n IdempotencyKeyAndApiKeyHeadersSchema,\n NoPathParametersSchema,\n} from \"../routes/request-schemas\";\nimport {\n GetAddressResponseSchema,\n WalletPathParametersSchema,\n} from \"./addresses\";\nimport {\n ACCEPT_CLAIM_OFFERS_ROUTE_KEY,\n GET_FEE_PAYER_ADDRESS_ROUTE_KEY,\n GET_INTEGRATOR_ADDRESS_ROUTE_KEY,\n GET_PROTOCOL_AUTHORITY_ADDRESS_ROUTE_KEY,\n GET_PURCHASE_STATUS_ROUTE_KEY,\n GET_USER_ADDRESS_ROUTE_KEY,\n SIGN_INTEGRATOR_TRANSACTION_ROUTE_KEY,\n SIGN_USER_TRANSACTION_ROUTE_KEY,\n SUBMIT_TENANT_TRANSACTION_ROUTE_KEY,\n} from \"./api-key-route-keys\";\nimport {\n AcceptClaimOffersRequestBodySchema,\n AcceptClaimOffersResponseSchema,\n} from \"./claim-offers\";\nimport { GetPurchaseStatusResponseSchema } from \"./purchase-status\";\nimport { SignTransactionResponseSchema } from \"./signing-responses\";\nimport { SubmitTenantTransactionResponseSchema } from \"./submission-responses\";\nimport {\n SignTenantTransactionRequestBodySchema,\n SubmitTenantTransactionRequestBodySchema,\n} from \"./transaction-inputs\";\n\nexport const apiKeyWalletCustodyApiClientRoutes = {\n \"get-user-address\": defineClientRoute({\n name: \"get-user-address\",\n method: \"GET\",\n routeKey: GET_USER_ADDRESS_ROUTE_KEY,\n pathParamsSchema: WalletPathParametersSchema,\n buildPath: ({ baseApiUrl = \"\", subject }) =>\n `${baseApiUrl}/wallets/users/${subject}/address`,\n headersSchema: ApiKeyHeadersSchema,\n responseBodySchema: GetAddressResponseSchema,\n }),\n \"get-integrator-address\": defineClientRoute({\n name: \"get-integrator-address\",\n method: \"GET\",\n routeKey: GET_INTEGRATOR_ADDRESS_ROUTE_KEY,\n pathParamsSchema: WalletPathParametersSchema,\n buildPath: ({ baseApiUrl = \"\", subject }) =>\n `${baseApiUrl}/wallets/integrators/${subject}/address`,\n headersSchema: ApiKeyHeadersSchema,\n responseBodySchema: GetAddressResponseSchema,\n }),\n \"sign-user-transaction\": defineClientRoute({\n name: \"sign-user-transaction\",\n method: \"POST\",\n routeKey: SIGN_USER_TRANSACTION_ROUTE_KEY,\n pathParamsSchema: WalletPathParametersSchema,\n buildPath: ({ baseApiUrl = \"\", subject }) =>\n `${baseApiUrl}/wallets/users/${subject}/signatures`,\n headersSchema: IdempotencyKeyAndApiKeyHeadersSchema,\n requestBodySchema: SignTenantTransactionRequestBodySchema,\n responseBodySchema: SignTransactionResponseSchema,\n }),\n \"sign-integrator-transaction\": defineClientRoute({\n name: \"sign-integrator-transaction\",\n method: \"POST\",\n routeKey: SIGN_INTEGRATOR_TRANSACTION_ROUTE_KEY,\n pathParamsSchema: WalletPathParametersSchema,\n buildPath: ({ baseApiUrl = \"\", subject }) =>\n `${baseApiUrl}/wallets/integrators/${subject}/signatures`,\n headersSchema: IdempotencyKeyAndApiKeyHeadersSchema,\n requestBodySchema: SignTenantTransactionRequestBodySchema,\n responseBodySchema: SignTransactionResponseSchema,\n }),\n \"submit-tenant-transaction\": defineClientRoute({\n name: \"submit-tenant-transaction\",\n method: \"POST\",\n routeKey: SUBMIT_TENANT_TRANSACTION_ROUTE_KEY,\n pathParamsSchema: NoPathParametersSchema,\n buildPath: ({ baseApiUrl = \"\" }) =>\n `${baseApiUrl}/transactions/submissions`,\n headersSchema: ApiKeyHeadersSchema,\n requestBodySchema: SubmitTenantTransactionRequestBodySchema,\n responseBodySchema: SubmitTenantTransactionResponseSchema,\n }),\n \"get-purchase-status\": defineClientRoute({\n name: \"get-purchase-status\",\n method: \"GET\",\n routeKey: GET_PURCHASE_STATUS_ROUTE_KEY,\n pathParamsSchema: NoPathParametersSchema,\n buildPath: ({ baseApiUrl = \"\" }) =>\n `${baseApiUrl}/claim_wallets/purchase-status`,\n headersSchema: IdempotencyKeyAndApiKeyHeadersSchema,\n responseBodySchema: GetPurchaseStatusResponseSchema,\n }),\n \"accept-claim-offers\": defineClientRoute({\n name: \"accept-claim-offers\",\n method: \"POST\",\n routeKey: ACCEPT_CLAIM_OFFERS_ROUTE_KEY,\n pathParamsSchema: NoPathParametersSchema,\n buildPath: ({ baseApiUrl = \"\" }) => `${baseApiUrl}/claim_wallets`,\n headersSchema: IdempotencyKeyAndApiKeyHeadersSchema,\n requestBodySchema: AcceptClaimOffersRequestBodySchema,\n responseBodySchema: AcceptClaimOffersResponseSchema,\n }),\n \"get-fee-payer-address\": defineClientRoute({\n name: \"get-fee-payer-address\",\n method: \"GET\",\n routeKey: GET_FEE_PAYER_ADDRESS_ROUTE_KEY,\n pathParamsSchema: NoPathParametersSchema,\n buildPath: ({ baseApiUrl = \"\" }) =>\n `${baseApiUrl}/wallets/fee-payer/address`,\n headersSchema: ApiKeyHeadersSchema,\n responseBodySchema: GetAddressResponseSchema,\n }),\n \"get-protocol-authority-address\": defineClientRoute({\n name: \"get-protocol-authority-address\",\n method: \"GET\",\n routeKey: GET_PROTOCOL_AUTHORITY_ADDRESS_ROUTE_KEY,\n pathParamsSchema: NoPathParametersSchema,\n buildPath: ({ baseApiUrl = \"\" }) =>\n `${baseApiUrl}/wallets/protocol-authority/address`,\n headersSchema: ApiKeyHeadersSchema,\n responseBodySchema: GetAddressResponseSchema,\n }),\n};\n","import type {\n ClientRouteMap,\n ClientRouteRequest,\n RouteRequestField,\n RouteRequestHeader,\n} from \"../routes/client-request-types\";\nimport { createTdpApiErrorFromRouteFailure } from \"../routes/create-tdp-api-error-from-route-failure\";\nimport type { AnyClientRoute } from \"../routes/define-client-route\";\nimport { executeClientRoute } from \"../routes/execute-client-route\";\n\nexport type FetchWalletCustodyApiRequest<\n TRoutes extends ClientRouteMap,\n TRouteName extends keyof TRoutes,\n> = ClientRouteRequest<TRoutes, TRouteName> &\n RouteRequestField<\n \"idempotencyKey\",\n RouteRequestHeader<TRoutes[TRouteName], \"idempotency-key\">\n >;\n\nexport function executeWalletCustodyRoute<TRoute extends AnyClientRoute>(\n request: Omit<\n Parameters<typeof executeClientRoute<TRoute>>[0],\n \"createError\"\n >,\n) {\n return executeClientRoute({\n ...request,\n createError: createTdpApiErrorFromRouteFailure,\n } satisfies Parameters<typeof executeClientRoute<TRoute>>[0]);\n}\n","import { apiKeyWalletCustodyApiClientRoutes } from \"@kyd-labs/tdp-schemas/wallet-custody/api-key-routes\";\nimport type {\n RouteNamesRequiringHeader,\n RouteResponseBody,\n} from \"../routes/client-request-types\";\nimport {\n executeWalletCustodyRoute,\n type FetchWalletCustodyApiRequest,\n} from \"./execute-wallet-custody-route\";\nimport type { walletCustodyApiClientRoutes } from \"./routes\";\n\nexport type WalletCustodyApiClient = ReturnType<\n typeof createWalletCustodyApiClient\n>;\n\n/** Client for claim routes authorized by an API key. */\nexport function createWalletCustodyApiClient({\n baseApiUrl,\n apiKey,\n fetchImpl = fetch,\n headers,\n}: {\n baseApiUrl: string;\n apiKey: string | (() => Promise<string>);\n fetchImpl?: typeof fetch;\n headers?: HeadersInit;\n}) {\n return async function fetchWalletCustodyApi<\n TRouteName extends ApiKeyWalletCustodyApiRouteName,\n >(\n {\n route,\n pathParams,\n body,\n idempotencyKey,\n }: FetchWalletCustodyApiRequest<ApiKeyWalletCustodyApiRoutes, TRouteName>,\n { signal }: Pick<RequestInit, \"signal\"> = {},\n ): Promise<RouteResponseBody<RouteForName<TRouteName>>> {\n return executeWalletCustodyRoute({\n baseApiUrl,\n fetchImpl,\n headers,\n signal,\n routeName: route,\n route: apiKeyWalletCustodyApiClientRoutes[route],\n pathParams,\n body,\n routeHeadersInput: {\n \"x-api-key\": typeof apiKey === \"string\" ? apiKey : await apiKey(),\n \"idempotency-key\": idempotencyKey,\n },\n }) as Promise<RouteResponseBody<RouteForName<TRouteName>>>;\n };\n}\n\n// -------------------------------------- Route helper types ---------------------------------------\nexport type WalletCustodyApiRoutes = typeof walletCustodyApiClientRoutes;\nexport type ApiKeyWalletCustodyApiRoutes =\n typeof apiKeyWalletCustodyApiClientRoutes;\ntype ApiKeyWalletCustodyApiRouteName = RouteNamesRequiringHeader<\n ApiKeyWalletCustodyApiRoutes,\n \"x-api-key\"\n>;\ntype RouteForName<TRouteName extends ApiKeyWalletCustodyApiRouteName> =\n ApiKeyWalletCustodyApiRoutes[TRouteName];\n","import { TicketPathParametersSchema } from \"@kyd-labs/tdp-schemas/tix-api/path-params\";\nimport { AcceptClaimOffersRequestBodySchema } from \"@kyd-labs/tdp-schemas/wallet-custody/claim-offers\";\nimport { MAX_PERMITS_PER_CLAIM_WALLET } from \"@kyd-labs/tdp-schemas/wallet-custody/const\";\nimport { requireUniquePermitKeys } from \"@kyd-labs/tix-wire-schema/instructions\";\nimport { z } from \"zod\";\nimport type {\n RouteRequestField,\n RouteRequestHeader,\n} from \"../routes/client-request-types\";\nimport type { createSolanaClient } from \"../solana-data-api/create-solana-client\";\nimport type {\n ApiKeyWalletCustodyApiRoutes,\n WalletCustodyApiClient,\n} from \"./api-client\";\nimport { resolveClaimOffer } from \"./resolve-claim-offer\";\n\ntype AcceptOffersRoute = ApiKeyWalletCustodyApiRoutes[\"accept-claim-offers\"];\n\nconst AcceptOffersBodySchema = AcceptClaimOffersRequestBodySchema.extend({\n offers: z\n .array(TicketPathParametersSchema)\n .min(1)\n .max(MAX_PERMITS_PER_CLAIM_WALLET)\n .superRefine(requireUniquePermitKeys),\n});\n\nexport function createClaimWalletsClient(\n walletCustodyApi: WalletCustodyApiClient,\n solana: ReturnType<typeof createSolanaClient>,\n) {\n return {\n getPurchaseStatus(\n {\n idempotencyKey,\n }: RouteRequestField<\n \"idempotencyKey\",\n RouteRequestHeader<\n ApiKeyWalletCustodyApiRoutes[\"get-purchase-status\"],\n \"idempotency-key\"\n >\n >,\n options?: Pick<RequestInit, \"signal\">,\n ) {\n return walletCustodyApi(\n { route: \"get-purchase-status\", idempotencyKey },\n options,\n );\n },\n async acceptOffers(\n {\n idempotencyKey,\n body,\n }: RouteRequestField<\"body\", z.input<typeof AcceptOffersBodySchema>> &\n RouteRequestField<\n \"idempotencyKey\",\n RouteRequestHeader<AcceptOffersRoute, \"idempotency-key\">\n >,\n options?: Pick<RequestInit, \"signal\">,\n ) {\n const parsedBody = AcceptOffersBodySchema.parse(body);\n const protocol = await solana.getProtocolConfig(options);\n const events = new Map<string, ReturnType<typeof solana.getEvent>>();\n const offers = await Promise.all(\n parsedBody.offers.map((ticket) => {\n const eventId = String(ticket.eventId);\n const event =\n events.get(eventId) ?? solana.getEvent({ eventId }, options);\n events.set(eventId, event);\n return resolveClaimOffer(solana, ticket, protocol, event, options);\n }),\n );\n return walletCustodyApi(\n {\n route: \"accept-claim-offers\",\n body: { ...parsedBody, offers },\n idempotencyKey,\n },\n options,\n );\n },\n };\n}\n","import type { createSolanaClient } from \"../solana-data-api/create-solana-client\";\n\ntype SolanaClient = ReturnType<typeof createSolanaClient>;\n\n/** Resolves a ticket selection into the existing claim-purchase offer payload. */\nexport async function resolveClaimOffer(\n solana: SolanaClient,\n ticket: Parameters<SolanaClient[\"getListing\"]>[0],\n protocol: Awaited<ReturnType<SolanaClient[\"getProtocolConfig\"]>>,\n eventResponse: ReturnType<SolanaClient[\"getEvent\"]>,\n options?: Pick<RequestInit, \"signal\">,\n) {\n const [listing, event, permit] = await Promise.all([\n solana.getListing(ticket, options),\n eventResponse,\n solana.getPermit(ticket, options),\n ]);\n return {\n event_id: listing.event_id,\n ticket_id: listing.ticket_id,\n permit_version: listing.permit_version,\n seller_payout: listing.payout_ata,\n royalty_destinations:\n event.royalty_recipients_count > 0\n ? event.royalty_recipients\n .slice(0, event.royalty_recipients_count)\n .map(({ destination }) => destination)\n : [protocol.default_royalty_vault],\n ticket_type_config: permit.ticket_type_config,\n usdc_mint: protocol.usdc_mint,\n };\n}\n","export { MAX_PERMITS_PER_CLAIM_WALLET } from \"@kyd-labs/tdp-schemas/wallet-custody/const\";\n\nexport const INTEGRATOR_PRIMARY_ADDRESS_SUBJECT = \"PRIMARY_ADDRESS\";\n","import type {\n RoutePathParams,\n RouteRequestBody,\n RouteRequestField,\n RouteRequestHeader,\n} from \"../routes/client-request-types\";\nimport type {\n ApiKeyWalletCustodyApiRoutes,\n WalletCustodyApiClient,\n} from \"./api-client\";\nimport { INTEGRATOR_PRIMARY_ADDRESS_SUBJECT } from \"./const\";\n\ntype SignTransactionInput<\n TRoute extends \"sign-user-transaction\" | \"sign-integrator-transaction\",\n> = Partial<RoutePathParams<ApiKeyWalletCustodyApiRoutes[TRoute]>> &\n RouteRequestField<\n \"body\",\n RouteRequestBody<ApiKeyWalletCustodyApiRoutes[TRoute]>\n > &\n RouteRequestField<\n \"idempotencyKey\",\n RouteRequestHeader<ApiKeyWalletCustodyApiRoutes[TRoute], \"idempotency-key\">\n >;\n\nexport function createTransactionsClient(\n walletCustodyApi: WalletCustodyApiClient,\n) {\n return {\n /** A `subject` is not necessary. */\n signIntegrator(\n {\n subject = INTEGRATOR_PRIMARY_ADDRESS_SUBJECT,\n idempotencyKey,\n body,\n }: SignTransactionInput<\"sign-integrator-transaction\">,\n options?: Pick<RequestInit, \"signal\">,\n ) {\n return walletCustodyApi(\n {\n route: \"sign-integrator-transaction\",\n pathParams: { subject },\n body,\n idempotencyKey,\n },\n options,\n );\n },\n submit(\n {\n body,\n }: RouteRequestField<\n \"body\",\n RouteRequestBody<\n ApiKeyWalletCustodyApiRoutes[\"submit-tenant-transaction\"]\n >\n >,\n options?: Pick<RequestInit, \"signal\">,\n ) {\n return walletCustodyApi(\n {\n route: \"submit-tenant-transaction\",\n body,\n },\n options,\n );\n },\n };\n}\n","import type { RoutePathParams } from \"../routes/client-request-types\";\nimport type {\n ApiKeyWalletCustodyApiRoutes,\n WalletCustodyApiClient,\n} from \"./api-client\";\nimport { INTEGRATOR_PRIMARY_ADDRESS_SUBJECT } from \"./const\";\n\nexport function createWalletClient(walletCustodyApi: WalletCustodyApiClient) {\n return {\n getUserAddress(\n pathParams: RoutePathParams<\n ApiKeyWalletCustodyApiRoutes[\"get-user-address\"]\n >,\n options?: Pick<RequestInit, \"signal\">,\n ) {\n return walletCustodyApi(\n {\n route: \"get-user-address\",\n pathParams,\n },\n options,\n );\n },\n /** A `subject` is not necessary. */\n getIntegratorAddress(\n {\n subject = INTEGRATOR_PRIMARY_ADDRESS_SUBJECT,\n }: Partial<\n RoutePathParams<ApiKeyWalletCustodyApiRoutes[\"get-integrator-address\"]>\n > = {},\n options?: Pick<RequestInit, \"signal\">,\n ) {\n return walletCustodyApi(\n {\n route: \"get-integrator-address\",\n pathParams: { subject },\n },\n options,\n );\n },\n getFeePayerAddress(options?: Pick<RequestInit, \"signal\">) {\n return walletCustodyApi(\n {\n route: \"get-fee-payer-address\",\n },\n options,\n );\n },\n getProtocolAuthorityAddress(options?: Pick<RequestInit, \"signal\">) {\n return walletCustodyApi(\n {\n route: \"get-protocol-authority-address\",\n },\n options,\n );\n },\n };\n}\n","import { createSolanaClient } from \"./solana-data-api/create-solana-client\";\nimport { createTixApiClient } from \"./tix-api/api-client\";\nimport { createIndexerClient } from \"./tix-indexer-api/create-indexer-client\";\nimport { createWalletCustodyApiClient } from \"./wallet-custody/api-client\";\nimport { createClaimWalletsClient } from \"./wallet-custody/create-claim-wallets-client\";\nimport { createTransactionsClient } from \"./wallet-custody/create-transactions-client\";\nimport { createWalletClient } from \"./wallet-custody/create-wallet-client\";\n\nexport type * from \"./types/index\";\n\nexport type TdpClientOptions = Parameters<typeof createTixApiClient>[0];\nexport type TdpClient = ReturnType<typeof createTdpClient>;\n\nexport function createTdpClient(options: TdpClientOptions) {\n const tixApi = createTixApiClient(options);\n const walletCustodyApi = createWalletCustodyApiClient(options);\n const solana = createSolanaClient(tixApi);\n return {\n solana,\n indexer: createIndexerClient(tixApi),\n wallets: createWalletClient(walletCustodyApi),\n transactions: createTransactionsClient(walletCustodyApi),\n claimWallets: createClaimWalletsClient(walletCustodyApi, solana),\n };\n}\n"],"mappings":"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","names":["responseBodySchemaByRouteKey","z","z"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/usdc-cents.ts","../src/solana-data-api/create-solana-client.ts","../../tdp-schemas/src/tix-indexer-api/routes.ts","../src/routes/create-tdp-api-error-from-route-failure.ts","../src/routes/execute-client-route.ts","../src/utils/join-url-segments.ts","../src/utils/read-response-payload.ts","../src/tix-api/create-tix-api-client.ts","../src/tix-api/api-client.ts","../src/tix-indexer-api/create-events-client.ts","../src/tix-indexer-api/create-indexer-client.ts","../src/tix-indexer-api/create-integrator-client.ts","../../tdp-schemas/src/wallet-custody/api-key-route-keys.ts","../../tdp-schemas/src/wallet-custody/api-key-routes.ts","../src/wallet-custody/execute-wallet-custody-route.ts","../src/wallet-custody/api-client.ts","../src/wallet-custody/create-orders-client.ts","../src/wallet-custody/const.ts","../src/wallet-custody/create-transactions-client.ts","../src/wallet-custody/create-wallet-client.ts","../src/index.ts"],"sourcesContent":["/** The USDC mints TDP uses: mainnet for the live environment and devnet for the sandbox. */\nexport const USDC_MINT_BY_CLUSTER = {\n mainnet: \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n devnet: \"Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr\",\n} as const;\n\n/**\n * Both mints have 6 decimals, and this is unlikely to change. If a mint ever becomes mutable, the SDK will\n * accommodate a non-hardcoded mint specification.\n */\nexport const USDC_DECIMALS = 6;\n\nconst USDC_MINOR_PER_CENT = 10n ** BigInt(USDC_DECIMALS - 2);\n\n/**\n * Converts an amount in USDC minor units to whole cents, rounding half up to\n * the closest cent.\n *\n * @example\n * client.utils.usdcMinorToCents(25_000_000n); // 2500n, which is $25.00\n */\nexport function usdcMinorToCents(usdcMinor: bigint): bigint {\n return (usdcMinor + USDC_MINOR_PER_CENT / 2n) / USDC_MINOR_PER_CENT;\n}\n\n/**\n * Converts an amount in whole cents to USDC minor units.\n *\n * @example\n * client.utils.centsToUsdcMinor(2_500n); // 25000000n\n */\nexport function centsToUsdcMinor(cents: bigint): bigint {\n return cents * USDC_MINOR_PER_CENT;\n}\n\n/** Converts a wire amount, a decimal string of USDC minor units, to whole cents. */\nexport function convertWireUsdcMinorToCents(usdcMinor: string): number {\n return Number(usdcMinorToCents(BigInt(usdcMinor)));\n}\n","import type { RoutePathParams } from \"../routes/client-request-types\";\nimport type { TixApiClient, TixApiRoutes } from \"../tix-api/api-client\";\nimport { convertWireUsdcMinorToCents } from \"../utils/usdc-cents\";\n\nexport function createSolanaClient(tixApi: TixApiClient) {\n return {\n async getEvent(\n pathParams: RoutePathParams<TixApiRoutes[\"get-event-account\"]>,\n options?: Pick<RequestInit, \"signal\">,\n ) {\n const { min_royalty_floor, ...event } = await tixApi(\n {\n route: \"get-event-account\",\n pathParams,\n },\n options,\n );\n return {\n ...event,\n min_royalty_floor_cents: convertWireUsdcMinorToCents(min_royalty_floor),\n };\n },\n async getListing(\n pathParams: RoutePathParams<TixApiRoutes[\"get-listing-account\"]>,\n options?: Pick<RequestInit, \"signal\">,\n ) {\n const { ask_price_minor, ...listing } = await tixApi(\n {\n route: \"get-listing-account\",\n pathParams,\n },\n options,\n );\n return {\n ...listing,\n ask_price_cents: convertWireUsdcMinorToCents(ask_price_minor),\n };\n },\n getPermit(\n pathParams: RoutePathParams<TixApiRoutes[\"get-permit\"]>,\n options?: Pick<RequestInit, \"signal\">,\n ) {\n return tixApi(\n {\n route: \"get-permit\",\n pathParams,\n },\n options,\n );\n },\n async getProtocolConfig(options?: Pick<RequestInit, \"signal\">) {\n const {\n event_registration_fee_minor,\n permit_fee_minor,\n p2p_transfer_fee_minor,\n ...protocolConfig\n } = await tixApi(\n {\n route: \"get-protocol-config-account\",\n },\n options,\n );\n return {\n ...protocolConfig,\n event_registration_fee_cents: convertWireUsdcMinorToCents(\n event_registration_fee_minor,\n ),\n permit_fee_cents: convertWireUsdcMinorToCents(permit_fee_minor),\n p2p_transfer_fee_cents: convertWireUsdcMinorToCents(\n p2p_transfer_fee_minor,\n ),\n };\n },\n async getIntegrator(\n pathParams: RoutePathParams<TixApiRoutes[\"get-integrator-account\"]>,\n options?: Pick<RequestInit, \"signal\">,\n ) {\n const { integrator, ...account } = await tixApi(\n {\n route: \"get-integrator-account\",\n pathParams,\n },\n options,\n );\n const { balance, ...registration } = integrator;\n return {\n ...account,\n integrator: {\n ...registration,\n balance: {\n amount_cents: convertWireUsdcMinorToCents(balance.amount_minor),\n },\n },\n };\n },\n };\n}\n","import type { z } from \"zod\";\nimport { defineClientRoute } from \"../routes/define-client-route\";\nimport { ApiKeyHeadersSchema } from \"../routes/request-schemas\";\nimport { EventPathParametersSchema } from \"../tix-api/path-params\";\nimport {\n PostIntegratorMetadataRequestBodySchema,\n PostTixIndexerIntegratorMetadataResultSchema,\n} from \"./metadata\";\nimport { tixIndexerReadApiClientRoutes } from \"./read-routes\";\n\nexport { PostIntegratorMetadataRequestBodySchema } from \"./metadata\";\nexport {\n ActiveListingsQuerySchema,\n GET_ACTIVE_LISTINGS_ROUTE_KEY,\n GET_EVENT_ROUTE_KEY,\n GET_EVENTS_ROUTE_KEY,\n GET_INTEGRATOR_ROUTE_KEY,\n GET_UPCOMING_EVENTS_ROUTE_KEY,\n LimitCursorQuerySchema,\n} from \"./read-routes\";\nexport const POST_INTEGRATOR_METADATA_ROUTE_KEY =\n \"POST /events/{eventId}/metadata\";\n\nexport const tixIndexerApiClientRoutes = {\n ...tixIndexerReadApiClientRoutes,\n \"post-integrator-metadata\": defineClientRoute({\n name: \"post-integrator-metadata\",\n method: \"POST\" as const,\n routeKey: POST_INTEGRATOR_METADATA_ROUTE_KEY,\n pathParamsSchema: EventPathParametersSchema,\n buildPath: ({ baseApiUrl = \"\", eventId }) =>\n `${baseApiUrl}/events/${eventId}/metadata`,\n headersSchema: ApiKeyHeadersSchema,\n requestBodySchema: PostIntegratorMetadataRequestBodySchema,\n responseBodySchema: PostTixIndexerIntegratorMetadataResultSchema,\n }),\n} as const satisfies Record<string, unknown>;\n\nexport const responseBodySchemaByRouteKey = Object.fromEntries(\n Object.values(tixIndexerApiClientRoutes).map(\n (route) => [route.routeKey, route.responseBodySchema] as const,\n ),\n) as Record<string, z.ZodType<Record<string, unknown>>>;\n","import {\n TdpApiError,\n TdpResponseValidationError,\n} from \"../wallet-custody/http-error\";\nimport type { ClientRouteFailure } from \"./execute-client-route\";\n\nexport function createTdpApiErrorFromRouteFailure(failure: ClientRouteFailure) {\n return failure.kind === \"response-validation\"\n ? new TdpResponseValidationError(failure)\n : new TdpApiError(failure);\n}\n","import { z } from \"zod\";\nimport { joinUrlSegments } from \"../utils/join-url-segments\";\nimport { readResponsePayload } from \"../utils/read-response-payload\";\nimport type { AnyClientRoute } from \"./define-client-route\";\n\nexport type ClientRouteFailure = {\n kind: \"http-status\" | \"response-validation\";\n route: string;\n method: string;\n path: string;\n status: number;\n statusText: string;\n payload: unknown;\n code?: string;\n requestId?: string;\n validationError?: z.ZodError;\n};\n\n/** The JSON body that a TDP API returns for a handled error. */\nexport const ErrorResponseBodySchema = z.looseObject({\n message: z.string(),\n code: z.string(),\n});\n\n/** Builds the URL, headers, and body for a route, sends it, and parses the response through the route's schema. */\nexport async function executeClientRoute<TRoute extends AnyClientRoute>({\n baseApiUrl,\n fetchImpl,\n headers,\n signal,\n routeName,\n route,\n pathParams,\n queryParams,\n body,\n routeHeadersInput,\n createError,\n}: {\n baseApiUrl: string;\n fetchImpl: typeof fetch;\n headers?: HeadersInit;\n signal?: RequestInit[\"signal\"];\n routeName: string;\n route: TRoute;\n pathParams: unknown;\n queryParams?: unknown;\n body: unknown;\n routeHeadersInput: Record<string, string | undefined>;\n createError: (failure: ClientRouteFailure) => Error;\n}): Promise<z.output<TRoute[\"responseBodySchema\"]>> {\n // TS can't reconcile the route's output types with input types, hence the `as never` clauses.\n const path = route.buildPath(pathParams as never);\n const routeHeaders = route.buildHeaders(routeHeadersInput as never);\n const url =\n joinUrlSegments(baseApiUrl, path) +\n (queryParams === undefined\n ? \"\"\n : route.buildQueryString(queryParams as never));\n\n const requestHeaders = new Headers(headers);\n requestHeaders.set(\"content-type\", \"application/json\");\n new Headers(routeHeaders as HeadersInit).forEach((value, name) => {\n requestHeaders.set(name, value);\n });\n const response = await fetchImpl(url, {\n method: route.method,\n ...(signal === undefined ? {} : { signal }),\n headers: Object.fromEntries(requestHeaders),\n body:\n body === undefined ? undefined : route.buildJsonPayload(body as never),\n });\n const payload = await readResponsePayload(response);\n const failure = {\n route: routeName,\n method: route.method,\n path,\n status: response.status,\n statusText: response.statusText,\n payload,\n requestId: response.headers.get(\"apigw-requestid\") ?? undefined,\n };\n if (!response.ok) {\n throw createError({\n kind: \"http-status\",\n ...failure,\n code: ErrorResponseBodySchema.pick({ code: true }).safeParse(payload).data\n ?.code,\n });\n }\n\n const parsed = route.responseBodySchema.safeParse(payload);\n if (!parsed.success) {\n throw createError({\n kind: \"response-validation\",\n ...failure,\n validationError: parsed.error,\n });\n }\n return parsed.data as z.output<TRoute[\"responseBodySchema\"]>;\n}\n","/**\n * Joins URL segments with one slash; i.e., remove repeated slashes.\n */\nexport function joinUrlSegments(baseUrl: string, path: string): string {\n return `${baseUrl.replace(/\\/+$/, \"\")}/${path.replace(/^\\/+/, \"\")}`;\n}\n","/**\n * Reads the body without letting an empty or non-JSON payload mask the HTTP status.\n **/\nexport async function readResponsePayload(\n response: Response,\n): Promise<unknown> {\n const rawBody = await response.text();\n if (rawBody.length === 0) return undefined;\n try {\n return JSON.parse(rawBody);\n } catch {\n return rawBody;\n }\n}\n","import type {\n ClientRouteMap,\n ClientRouteRequest,\n RouteQueryParams,\n RouteRequestField,\n RouteResponseBody,\n} from \"../routes/client-request-types\";\nimport { createTdpApiErrorFromRouteFailure } from \"../routes/create-tdp-api-error-from-route-failure\";\nimport { executeClientRoute } from \"../routes/execute-client-route\";\nimport { solanaDataApiClientRoutes } from \"../solana-data-api/routes\";\n\n/** The solana-data-api is mapped onto the public domain under this key. */\nexport const SOLANA_DATA_API_PATH_PREFIX = \"solana\";\n\n/** The request for a route. No caller-settable `headers`: the client injects them itself. */\ntype FetchTixApiRequest<\n TRoutes extends ClientRouteMap,\n TRouteName extends keyof TRoutes,\n> = ClientRouteRequest<TRoutes, TRouteName> &\n RouteRequestField<\"queryParams\", RouteQueryParams<TRoutes[TRouteName]>>;\n\nexport function createTixApiClientForRoutes<TRoutes extends ClientRouteMap>({\n routes,\n baseApiUrl,\n apiKey,\n fetchImpl = fetch,\n headers,\n additionalHeaders,\n}: {\n routes: TRoutes;\n baseApiUrl: string;\n apiKey: string | (() => Promise<string>);\n fetchImpl?: typeof fetch;\n headers?: HeadersInit;\n additionalHeaders?: Parameters<\n typeof executeClientRoute\n >[0][\"routeHeadersInput\"];\n}) {\n return async function fetchTixApi<TRouteName extends keyof TRoutes & string>(\n {\n route,\n pathParams,\n queryParams,\n body,\n }: FetchTixApiRequest<TRoutes, TRouteName>,\n { signal }: Pick<RequestInit, \"signal\"> = {},\n ): Promise<RouteResponseBody<TRoutes[TRouteName]>> {\n const prefix =\n route in solanaDataApiClientRoutes\n ? `/${SOLANA_DATA_API_PATH_PREFIX}`\n : \"\";\n return executeClientRoute({\n baseApiUrl: `${baseApiUrl}${prefix}`,\n fetchImpl,\n headers,\n signal,\n routeName: route,\n route: routes[route],\n pathParams,\n queryParams,\n body,\n routeHeadersInput: {\n \"x-api-key\": typeof apiKey === \"string\" ? apiKey : await apiKey(),\n ...additionalHeaders,\n },\n createError: createTdpApiErrorFromRouteFailure,\n }) as Promise<RouteResponseBody<TRoutes[TRouteName]>>;\n };\n}\n","import { solanaDataApiClientRoutes } from \"../solana-data-api/routes\";\nimport { tixIndexerApiClientRoutes } from \"../tix-indexer-api/routes\";\nimport { createTixApiClientForRoutes } from \"./create-tix-api-client\";\n\nexport { SOLANA_DATA_API_PATH_PREFIX } from \"./create-tix-api-client\";\n\nexport const tixApiClientRoutes = {\n ...solanaDataApiClientRoutes,\n ...tixIndexerApiClientRoutes,\n} as const;\n\nexport type TixApiRoutes = typeof tixApiClientRoutes;\nexport type TixApiClient = ReturnType<typeof createTixApiClient>;\n\nexport function createTixApiClient({\n baseApiUrl,\n apiKey,\n fetchImpl = fetch,\n headers,\n}: {\n baseApiUrl: string;\n apiKey: string | (() => Promise<string>);\n fetchImpl?: typeof fetch;\n /**\n * Additional request headers. SDK-managed headers take precedence.\n * Cross-origin browser requests require server CORS support for custom headers.\n */\n headers?: HeadersInit;\n}) {\n return createTixApiClientForRoutes({\n routes: tixApiClientRoutes,\n baseApiUrl,\n apiKey,\n fetchImpl,\n headers,\n });\n}\n","import type {\n RoutePathParams,\n RouteQueryParams,\n} from \"../routes/client-request-types\";\nimport type { TixApiClient, TixApiRoutes } from \"../tix-api/api-client\";\n\n/** The route schema coerces `limit` from a query string, which leaves its input type as `unknown`. */\ntype EventsQuery = Omit<\n RouteQueryParams<TixApiRoutes[\"get-events\"]>,\n \"limit\"\n> & {\n limit?: number;\n};\n\nexport function createEventsClient(tixApi: TixApiClient) {\n return {\n list(queryParams: EventsQuery = {}, options?: Pick<RequestInit, \"signal\">) {\n return tixApi(\n {\n route: \"get-events\",\n queryParams,\n },\n options,\n );\n },\n get(\n pathParams: RoutePathParams<TixApiRoutes[\"get-event\"]>,\n options?: Pick<RequestInit, \"signal\">,\n ) {\n return tixApi(\n {\n route: \"get-event\",\n pathParams,\n },\n options,\n );\n },\n };\n}\n","import type {\n ClientRouteRequest,\n RouteQueryParams,\n} from \"../routes/client-request-types\";\nimport type { TixApiClient, TixApiRoutes } from \"../tix-api/api-client\";\nimport { convertWireUsdcMinorToCents } from \"../utils/usdc-cents\";\n\ntype MetadataRequest = ClientRouteRequest<\n TixApiRoutes,\n \"post-integrator-metadata\"\n>;\n/** The route schemas coerce `limit` from a query string, which leaves its input type as `unknown`. */\ntype WithNumericLimit<TQuery> = Omit<TQuery, \"limit\"> & { limit?: number };\ntype ActiveListingsQuery = WithNumericLimit<\n RouteQueryParams<TixApiRoutes[\"get-active-listings\"]>\n>;\ntype UpcomingEventsQuery = WithNumericLimit<\n RouteQueryParams<TixApiRoutes[\"get-upcoming-events\"]>\n>;\n\nexport function createIndexerClient(tixApi: TixApiClient) {\n return {\n async listActiveListings(\n queryParams: ActiveListingsQuery,\n options?: Pick<RequestInit, \"signal\">,\n ) {\n const { items, next_cursor } = await tixApi(\n {\n route: \"get-active-listings\",\n queryParams,\n },\n options,\n );\n return {\n items: items.map(({ ask_price_minor, ...listing }) => ({\n ...listing,\n ask_price_cents:\n ask_price_minor === null\n ? null\n : convertWireUsdcMinorToCents(ask_price_minor),\n })),\n next_cursor,\n };\n },\n listUpcomingEvents(\n queryParams: UpcomingEventsQuery = {},\n options?: Pick<RequestInit, \"signal\">,\n ) {\n return tixApi(\n {\n route: \"get-upcoming-events\",\n queryParams,\n },\n options,\n );\n },\n updateEventMetadata(\n {\n eventId,\n body,\n }: MetadataRequest[\"pathParams\"] & Pick<MetadataRequest, \"body\">,\n options?: Pick<RequestInit, \"signal\">,\n ) {\n return tixApi(\n {\n route: \"post-integrator-metadata\",\n pathParams: { eventId },\n body,\n },\n options,\n );\n },\n };\n}\n","import type { TixApiClient } from \"../tix-api/api-client\";\n\nexport function createIntegratorClient(tixApi: TixApiClient) {\n return {\n getInfo(options?: Pick<RequestInit, \"signal\">) {\n return tixApi(\n {\n route: \"get-integrator\",\n },\n options,\n );\n },\n };\n}\n","export const GET_USER_ADDRESS_ROUTE_KEY =\n \"GET /wallets/users/{subject}/address\";\nexport const GET_INTEGRATOR_ADDRESS_ROUTE_KEY =\n \"GET /wallets/integrators/{subject}/address\";\nexport const SIGN_USER_TRANSACTION_ROUTE_KEY =\n \"POST /wallets/users/{subject}/signatures\";\nexport const SIGN_INTEGRATOR_TRANSACTION_ROUTE_KEY =\n \"POST /wallets/integrators/{subject}/signatures\";\nexport const SUBMIT_TENANT_TRANSACTION_ROUTE_KEY =\n \"POST /transactions/submissions\";\nexport const GET_TRANSACTION_ROUTE_KEY = \"GET /transactions/{id}\";\nexport const CREATE_AND_SUBMIT_ORDER_ROUTE_KEY = \"POST /orders\";\nexport const GET_ORDER_ROUTE_KEY = \"GET /orders/{id}\";\nexport const GET_FEE_PAYER_ADDRESS_ROUTE_KEY = \"GET /wallets/fee-payer/address\";\nexport const GET_PROTOCOL_AUTHORITY_ADDRESS_ROUTE_KEY =\n \"GET /wallets/protocol-authority/address\";\n","import { defineClientRoute } from \"../routes/define-client-route\";\nimport {\n ApiKeyHeadersSchema,\n IdempotencyKeyAndApiKeyHeadersSchema,\n NoPathParametersSchema,\n} from \"../routes/request-schemas\";\nimport {\n GetAddressResponseSchema,\n WalletPathParametersSchema,\n} from \"./addresses\";\nimport {\n CREATE_AND_SUBMIT_ORDER_ROUTE_KEY,\n GET_FEE_PAYER_ADDRESS_ROUTE_KEY,\n GET_INTEGRATOR_ADDRESS_ROUTE_KEY,\n GET_ORDER_ROUTE_KEY,\n GET_PROTOCOL_AUTHORITY_ADDRESS_ROUTE_KEY,\n GET_TRANSACTION_ROUTE_KEY,\n GET_USER_ADDRESS_ROUTE_KEY,\n SIGN_INTEGRATOR_TRANSACTION_ROUTE_KEY,\n SIGN_USER_TRANSACTION_ROUTE_KEY,\n SUBMIT_TENANT_TRANSACTION_ROUTE_KEY,\n} from \"./api-key-route-keys\";\nimport {\n CreateAndSubmitOrderRequestBodySchema,\n CreateAndSubmitOrderResponseSchema,\n GetOrderResponseSchema,\n OrderPathParametersSchema,\n} from \"./orders\";\nimport { SignTransactionResponseSchema } from \"./signing-responses\";\nimport {\n SubmitTenantTransactionResponseSchema,\n TransactionPathParametersSchema,\n} from \"./submission-responses\";\nimport {\n SignTenantTransactionRequestBodySchema,\n SubmitTenantTransactionRequestBodySchema,\n} from \"./transaction-inputs\";\n\nexport const apiKeyWalletCustodyApiClientRoutes = {\n \"get-user-address\": defineClientRoute({\n name: \"get-user-address\",\n method: \"GET\",\n routeKey: GET_USER_ADDRESS_ROUTE_KEY,\n pathParamsSchema: WalletPathParametersSchema,\n buildPath: ({ baseApiUrl = \"\", subject }) =>\n `${baseApiUrl}/wallets/users/${subject}/address`,\n headersSchema: ApiKeyHeadersSchema,\n responseBodySchema: GetAddressResponseSchema,\n }),\n \"get-integrator-address\": defineClientRoute({\n name: \"get-integrator-address\",\n method: \"GET\",\n routeKey: GET_INTEGRATOR_ADDRESS_ROUTE_KEY,\n pathParamsSchema: WalletPathParametersSchema,\n buildPath: ({ baseApiUrl = \"\", subject }) =>\n `${baseApiUrl}/wallets/integrators/${subject}/address`,\n headersSchema: ApiKeyHeadersSchema,\n responseBodySchema: GetAddressResponseSchema,\n }),\n \"sign-user-transaction\": defineClientRoute({\n name: \"sign-user-transaction\",\n method: \"POST\",\n routeKey: SIGN_USER_TRANSACTION_ROUTE_KEY,\n pathParamsSchema: WalletPathParametersSchema,\n buildPath: ({ baseApiUrl = \"\", subject }) =>\n `${baseApiUrl}/wallets/users/${subject}/signatures`,\n headersSchema: IdempotencyKeyAndApiKeyHeadersSchema,\n requestBodySchema: SignTenantTransactionRequestBodySchema,\n responseBodySchema: SignTransactionResponseSchema,\n }),\n \"sign-integrator-transaction\": defineClientRoute({\n name: \"sign-integrator-transaction\",\n method: \"POST\",\n routeKey: SIGN_INTEGRATOR_TRANSACTION_ROUTE_KEY,\n pathParamsSchema: WalletPathParametersSchema,\n buildPath: ({ baseApiUrl = \"\", subject }) =>\n `${baseApiUrl}/wallets/integrators/${subject}/signatures`,\n headersSchema: IdempotencyKeyAndApiKeyHeadersSchema,\n requestBodySchema: SignTenantTransactionRequestBodySchema,\n responseBodySchema: SignTransactionResponseSchema,\n }),\n \"submit-tenant-transaction\": defineClientRoute({\n name: \"submit-tenant-transaction\",\n method: \"POST\",\n routeKey: SUBMIT_TENANT_TRANSACTION_ROUTE_KEY,\n pathParamsSchema: NoPathParametersSchema,\n buildPath: ({ baseApiUrl = \"\" }) =>\n `${baseApiUrl}/transactions/submissions`,\n headersSchema: ApiKeyHeadersSchema,\n requestBodySchema: SubmitTenantTransactionRequestBodySchema,\n responseBodySchema: SubmitTenantTransactionResponseSchema,\n }),\n \"get-transaction\": defineClientRoute({\n name: \"get-transaction\",\n method: \"GET\",\n routeKey: GET_TRANSACTION_ROUTE_KEY,\n pathParamsSchema: TransactionPathParametersSchema,\n buildPath: ({ baseApiUrl = \"\", id }) => `${baseApiUrl}/transactions/${id}`,\n headersSchema: ApiKeyHeadersSchema,\n responseBodySchema: SubmitTenantTransactionResponseSchema,\n }),\n \"get-order\": defineClientRoute({\n name: \"get-order\",\n method: \"GET\",\n routeKey: GET_ORDER_ROUTE_KEY,\n pathParamsSchema: OrderPathParametersSchema,\n buildPath: ({ baseApiUrl = \"\", id }) =>\n `${baseApiUrl}/orders/${encodeURIComponent(id)}`,\n headersSchema: ApiKeyHeadersSchema,\n responseBodySchema: GetOrderResponseSchema,\n }),\n \"create-and-submit-order\": defineClientRoute({\n name: \"create-and-submit-order\",\n method: \"POST\",\n routeKey: CREATE_AND_SUBMIT_ORDER_ROUTE_KEY,\n pathParamsSchema: NoPathParametersSchema,\n buildPath: ({ baseApiUrl = \"\" }) => `${baseApiUrl}/orders`,\n headersSchema: IdempotencyKeyAndApiKeyHeadersSchema,\n requestBodySchema: CreateAndSubmitOrderRequestBodySchema,\n responseBodySchema: CreateAndSubmitOrderResponseSchema,\n }),\n \"get-fee-payer-address\": defineClientRoute({\n name: \"get-fee-payer-address\",\n method: \"GET\",\n routeKey: GET_FEE_PAYER_ADDRESS_ROUTE_KEY,\n pathParamsSchema: NoPathParametersSchema,\n buildPath: ({ baseApiUrl = \"\" }) =>\n `${baseApiUrl}/wallets/fee-payer/address`,\n headersSchema: ApiKeyHeadersSchema,\n responseBodySchema: GetAddressResponseSchema,\n }),\n \"get-protocol-authority-address\": defineClientRoute({\n name: \"get-protocol-authority-address\",\n method: \"GET\",\n routeKey: GET_PROTOCOL_AUTHORITY_ADDRESS_ROUTE_KEY,\n pathParamsSchema: NoPathParametersSchema,\n buildPath: ({ baseApiUrl = \"\" }) =>\n `${baseApiUrl}/wallets/protocol-authority/address`,\n headersSchema: ApiKeyHeadersSchema,\n responseBodySchema: GetAddressResponseSchema,\n }),\n};\n","import type {\n ClientRouteMap,\n ClientRouteRequest,\n RouteRequestField,\n RouteRequestHeader,\n} from \"../routes/client-request-types\";\nimport { createTdpApiErrorFromRouteFailure } from \"../routes/create-tdp-api-error-from-route-failure\";\nimport type { AnyClientRoute } from \"../routes/define-client-route\";\nimport { executeClientRoute } from \"../routes/execute-client-route\";\n\nexport type FetchWalletCustodyApiRequest<\n TRoutes extends ClientRouteMap,\n TRouteName extends keyof TRoutes,\n> = ClientRouteRequest<TRoutes, TRouteName> &\n RouteRequestField<\n \"idempotencyKey\",\n RouteRequestHeader<TRoutes[TRouteName], \"idempotency-key\">\n >;\n\nexport function executeWalletCustodyRoute<TRoute extends AnyClientRoute>(\n request: Omit<\n Parameters<typeof executeClientRoute<TRoute>>[0],\n \"createError\"\n >,\n) {\n return executeClientRoute({\n ...request,\n createError: createTdpApiErrorFromRouteFailure,\n } satisfies Parameters<typeof executeClientRoute<TRoute>>[0]);\n}\n","import { apiKeyWalletCustodyApiClientRoutes } from \"@kyd-labs/tdp-schemas/wallet-custody/api-key-routes\";\nimport type {\n RouteNamesRequiringHeader,\n RouteResponseBody,\n} from \"../routes/client-request-types\";\nimport {\n executeWalletCustodyRoute,\n type FetchWalletCustodyApiRequest,\n} from \"./execute-wallet-custody-route\";\nimport type { walletCustodyApiClientRoutes } from \"./routes\";\n\nexport type WalletCustodyApiClient = ReturnType<\n typeof createWalletCustodyApiClient\n>;\n\n/** Client for claim routes authorized by an API key. */\nexport function createWalletCustodyApiClient({\n baseApiUrl,\n apiKey,\n fetchImpl = fetch,\n headers,\n}: {\n baseApiUrl: string;\n apiKey: string | (() => Promise<string>);\n fetchImpl?: typeof fetch;\n headers?: HeadersInit;\n}) {\n return async function fetchWalletCustodyApi<\n TRouteName extends ApiKeyWalletCustodyApiRouteName,\n >(\n {\n route,\n pathParams,\n body,\n idempotencyKey,\n }: FetchWalletCustodyApiRequest<ApiKeyWalletCustodyApiRoutes, TRouteName>,\n { signal }: Pick<RequestInit, \"signal\"> = {},\n ): Promise<RouteResponseBody<RouteForName<TRouteName>>> {\n return executeWalletCustodyRoute({\n baseApiUrl,\n fetchImpl,\n headers,\n signal,\n routeName: route,\n route: apiKeyWalletCustodyApiClientRoutes[route],\n pathParams,\n body,\n routeHeadersInput: {\n \"x-api-key\": typeof apiKey === \"string\" ? apiKey : await apiKey(),\n \"idempotency-key\": idempotencyKey,\n },\n }) as Promise<RouteResponseBody<RouteForName<TRouteName>>>;\n };\n}\n\n// -------------------------------------- Route helper types ---------------------------------------\nexport type WalletCustodyApiRoutes = typeof walletCustodyApiClientRoutes;\nexport type ApiKeyWalletCustodyApiRoutes =\n typeof apiKeyWalletCustodyApiClientRoutes;\ntype ApiKeyWalletCustodyApiRouteName = RouteNamesRequiringHeader<\n ApiKeyWalletCustodyApiRoutes,\n \"x-api-key\"\n>;\ntype RouteForName<TRouteName extends ApiKeyWalletCustodyApiRouteName> =\n ApiKeyWalletCustodyApiRoutes[TRouteName];\n","import type {\n RoutePathParams,\n RouteRequestBody,\n RouteRequestField,\n RouteRequestHeader,\n} from \"../routes/client-request-types\";\nimport type {\n ApiKeyWalletCustodyApiRoutes,\n WalletCustodyApiClient,\n} from \"./api-client\";\n\ntype CreateAndSubmitOrderRoute =\n ApiKeyWalletCustodyApiRoutes[\"create-and-submit-order\"];\n\nexport function createOrdersClient(walletCustodyApi: WalletCustodyApiClient) {\n return {\n /** Creates the order and submits its purchase in the same call. */\n createAndSubmit(\n {\n idempotencyKey,\n body,\n }: RouteRequestField<\n \"body\",\n RouteRequestBody<CreateAndSubmitOrderRoute>\n > &\n RouteRequestField<\n \"idempotencyKey\",\n RouteRequestHeader<CreateAndSubmitOrderRoute, \"idempotency-key\">\n >,\n options?: Pick<RequestInit, \"signal\">,\n ) {\n return walletCustodyApi(\n { route: \"create-and-submit-order\", body, idempotencyKey },\n options,\n );\n },\n get(\n pathParams: RoutePathParams<ApiKeyWalletCustodyApiRoutes[\"get-order\"]>,\n options?: Pick<RequestInit, \"signal\">,\n ) {\n return walletCustodyApi({ route: \"get-order\", pathParams }, options);\n },\n };\n}\n","export { MAX_PERMITS_PER_CLAIM_WALLET } from \"@kyd-labs/tdp-schemas/wallet-custody/const\";\n\nexport const INTEGRATOR_PRIMARY_ADDRESS_SUBJECT = \"PRIMARY_ADDRESS\";\n","import type {\n RoutePathParams,\n RouteRequestBody,\n RouteRequestField,\n RouteRequestHeader,\n} from \"../routes/client-request-types\";\nimport type {\n ApiKeyWalletCustodyApiRoutes,\n WalletCustodyApiClient,\n} from \"./api-client\";\nimport { INTEGRATOR_PRIMARY_ADDRESS_SUBJECT } from \"./const\";\n\ntype SignTransactionInput<\n TRoute extends \"sign-user-transaction\" | \"sign-integrator-transaction\",\n> = Partial<RoutePathParams<ApiKeyWalletCustodyApiRoutes[TRoute]>> &\n RouteRequestField<\n \"body\",\n RouteRequestBody<ApiKeyWalletCustodyApiRoutes[TRoute]>\n > &\n RouteRequestField<\n \"idempotencyKey\",\n RouteRequestHeader<ApiKeyWalletCustodyApiRoutes[TRoute], \"idempotency-key\">\n >;\n\nexport function createTransactionsClient(\n walletCustodyApi: WalletCustodyApiClient,\n) {\n return {\n /** A `subject` is not necessary. */\n signIntegrator(\n {\n subject = INTEGRATOR_PRIMARY_ADDRESS_SUBJECT,\n idempotencyKey,\n body,\n }: SignTransactionInput<\"sign-integrator-transaction\">,\n options?: Pick<RequestInit, \"signal\">,\n ) {\n return walletCustodyApi(\n {\n route: \"sign-integrator-transaction\",\n pathParams: { subject },\n body,\n idempotencyKey,\n },\n options,\n );\n },\n submit(\n {\n body,\n }: RouteRequestField<\n \"body\",\n RouteRequestBody<\n ApiKeyWalletCustodyApiRoutes[\"submit-tenant-transaction\"]\n >\n >,\n options?: Pick<RequestInit, \"signal\">,\n ) {\n return walletCustodyApi(\n {\n route: \"submit-tenant-transaction\",\n body,\n },\n options,\n );\n },\n };\n}\n","import type { RoutePathParams } from \"../routes/client-request-types\";\nimport type {\n ApiKeyWalletCustodyApiRoutes,\n WalletCustodyApiClient,\n} from \"./api-client\";\nimport { INTEGRATOR_PRIMARY_ADDRESS_SUBJECT } from \"./const\";\n\nexport function createWalletClient(walletCustodyApi: WalletCustodyApiClient) {\n return {\n getUserAddress(\n pathParams: RoutePathParams<\n ApiKeyWalletCustodyApiRoutes[\"get-user-address\"]\n >,\n options?: Pick<RequestInit, \"signal\">,\n ) {\n return walletCustodyApi(\n {\n route: \"get-user-address\",\n pathParams,\n },\n options,\n );\n },\n /** A `subject` is not necessary. */\n getIntegratorAddress(\n {\n subject = INTEGRATOR_PRIMARY_ADDRESS_SUBJECT,\n }: Partial<\n RoutePathParams<ApiKeyWalletCustodyApiRoutes[\"get-integrator-address\"]>\n > = {},\n options?: Pick<RequestInit, \"signal\">,\n ) {\n return walletCustodyApi(\n {\n route: \"get-integrator-address\",\n pathParams: { subject },\n },\n options,\n );\n },\n getFeePayerAddress(options?: Pick<RequestInit, \"signal\">) {\n return walletCustodyApi(\n {\n route: \"get-fee-payer-address\",\n },\n options,\n );\n },\n getProtocolAuthorityAddress(options?: Pick<RequestInit, \"signal\">) {\n return walletCustodyApi(\n {\n route: \"get-protocol-authority-address\",\n },\n options,\n );\n },\n };\n}\n","import { createSolanaClient } from \"./solana-data-api/create-solana-client\";\nimport { createTixApiClient } from \"./tix-api/api-client\";\nimport { createEventsClient } from \"./tix-indexer-api/create-events-client\";\nimport { createIndexerClient } from \"./tix-indexer-api/create-indexer-client\";\nimport { createIntegratorClient } from \"./tix-indexer-api/create-integrator-client\";\nimport { centsToUsdcMinor, usdcMinorToCents } from \"./utils/usdc-cents\";\nimport { createWalletCustodyApiClient } from \"./wallet-custody/api-client\";\nimport { createOrdersClient } from \"./wallet-custody/create-orders-client\";\nimport { createTransactionsClient } from \"./wallet-custody/create-transactions-client\";\nimport { createWalletClient } from \"./wallet-custody/create-wallet-client\";\n\nexport type * from \"./types/index\";\n\nexport type TdpClientOptions = Parameters<typeof createTixApiClient>[0];\nexport type TdpClient = ReturnType<typeof createTdpClient>;\n\nexport function createTdpClient(options: TdpClientOptions) {\n const tixApi = createTixApiClient(options);\n const walletCustodyApi = createWalletCustodyApiClient(options);\n const solana = createSolanaClient(tixApi);\n return {\n solana,\n events: createEventsClient(tixApi),\n indexer: createIndexerClient(tixApi),\n integrator: createIntegratorClient(tixApi),\n wallets: createWalletClient(walletCustodyApi),\n transactions: createTransactionsClient(walletCustodyApi),\n orders: createOrdersClient(walletCustodyApi),\n utils: { usdcMinorToCents, centsToUsdcMinor },\n };\n}\n"],"mappings":"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","names":["responseBodySchemaByRouteKey"]}
|