@itm-studio/partner-sdk 0.2.3 → 0.2.5

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 CHANGED
@@ -35,6 +35,7 @@ const { getPartnerMomentsForBrand } = await itm.query({
35
35
  status: true,
36
36
  timezone: true,
37
37
  externalUrl: true,
38
+ lineupDisplayLabel: true,
38
39
  coverImage: {
39
40
  url: true,
40
41
  mimeType: true,
@@ -126,6 +127,7 @@ const { getPartnerMoment } = await itm.query({
126
127
  endDate: true,
127
128
  timezone: true,
128
129
  externalUrl: true,
130
+ lineupDisplayLabel: true,
129
131
  coverImage: {
130
132
  url: true,
131
133
  mimeType: true,
@@ -139,6 +141,73 @@ const { getPartnerMoment } = await itm.query({
139
141
  });
140
142
  ```
141
143
 
144
+ ### `getPublicMomentLineups`
145
+
146
+ Get approved public lineup entries for a moment. Use `getPartnerMoment` first if you only have the moment slug; this query takes the moment `uid`.
147
+
148
+ ```typescript
149
+ const { getPartnerMoment } = await itm.query({
150
+ getPartnerMoment: {
151
+ __args: { slug: 'my-event-slug' },
152
+ uid: true,
153
+ lineupDisplayLabel: true,
154
+ },
155
+ });
156
+
157
+ const momentUid = getPartnerMoment?.uid;
158
+
159
+ if (momentUid) {
160
+ const { getPublicMomentLineups } = await itm.query({
161
+ getPublicMomentLineups: {
162
+ __args: {
163
+ momentUid,
164
+ take: 50,
165
+ lineupType: 'DJ', // optional: LINEUP | CO_HOST | PROMOTER | DJ | SPEAKER | VENDOR
166
+ },
167
+ lineups: {
168
+ uid: true,
169
+ name: true,
170
+ status: true,
171
+ lineupType: true,
172
+ sortOrder: true,
173
+ url: true,
174
+ image: {
175
+ url: true,
176
+ mimeType: true,
177
+ },
178
+ },
179
+ totalCount: true,
180
+ hasNextPage: true,
181
+ nextCursor: true,
182
+ },
183
+ });
184
+
185
+ console.log(getPartnerMoment?.lineupDisplayLabel, getPublicMomentLineups.lineups);
186
+ }
187
+ ```
188
+
189
+ Only approved lineup entries are returned. `momentUid`, `cursor`, `take`, and `lineupType` map directly to the backend query args; use `nextCursor` as `cursor` while `hasNextPage` is true. The public lineup query is throttled to 30 requests per minute, so cache or batch page loads if you render it in high-traffic public pages.
190
+
191
+ `lineupDisplayLabel` is available on `Moment` so your UI can label the section as `LINEUP`, `CO_HOSTS`, `DJS`, `PROMOTERS`, `SPEAKERS`, or `VENDORS`.
192
+
193
+ ### `getMomentLineupByToken`
194
+
195
+ Get public lineup invitation details by response token. This is useful if you build a custom artist or collaborator response page.
196
+
197
+ ```typescript
198
+ const { getMomentLineupByToken } = await itm.query({
199
+ getMomentLineupByToken: {
200
+ __args: { token: 'lineup-response-token' },
201
+ artistName: true,
202
+ momentName: true,
203
+ brandName: true,
204
+ status: true,
205
+ lineupType: true,
206
+ alreadyResponded: true,
207
+ },
208
+ });
209
+ ```
210
+
142
211
  ### `getMomentStats`
143
212
 
144
213
  Get cached partner-facing counts for a moment owned by the authenticated partner's brand.
@@ -341,7 +410,28 @@ const { getPartnerPublicEchoes } = await itm.query({
341
410
 
342
411
  ## Available Mutations
343
412
 
344
- The SDK supports write operations via `client.mutation()`. All mutations use the same authentication — your brand is determined from the token.
413
+ The SDK supports write operations via `client.mutation()`. Partner mutations use the same authentication — your brand is determined from the partner token.
414
+
415
+ ### `respondToMomentLineup`
416
+
417
+ Submit a public lineup invitation response by token.
418
+
419
+ ```typescript
420
+ const { respondToMomentLineup } = await itm.mutation({
421
+ respondToMomentLineup: {
422
+ __args: {
423
+ input: {
424
+ token: 'lineup-response-token',
425
+ status: 'APPROVED', // APPROVED or REJECTED
426
+ },
427
+ },
428
+ status: true,
429
+ success: true,
430
+ },
431
+ });
432
+ ```
433
+
434
+ Admin-only lineup creation and ordering are not part of the partner-token SDK surface. Use backstage for managing lineup entries.
345
435
 
346
436
  ## Partner Brand Subscription Guide
347
437
 
@@ -369,7 +459,7 @@ Use OTP subscribe when you want the user to confirm the phone number before the
369
459
  - `listNames`: optional brand list names. Missing lists are created automatically and the subscribed user is attached to them.
370
460
  - `compliance`: optional metadata about how consent was collected. This is the right place for fields like `pageUrl`, `submissionMethod`, `submittedAt`, `timezone`, and geo/browser/device details.
371
461
  - `compliance.ipAddress` and `compliance.userAgent`: optional. If you omit them and forward `x-forwarded-for` and `user-agent`, the backend backfills those values for you.
372
- - `postSubscriptionMessage`: optional welcome message delivered automatically after the subscription becomes active. See [Post-Subscription Welcome Message](#post-subscription-welcome-message).
462
+ - `postSubscriptionMessage`: optional welcome message delivered automatically after the subscription becomes active. The SDK exposes this as `PostSubscriptionMessageInput` and accepts it on `CreatePartnerBrandSubscriptionInput`. See [Post-Subscription Welcome Message](#post-subscription-welcome-message).
373
463
 
374
464
  ### OTP Flow Step By Step
375
465
 
@@ -388,6 +478,37 @@ If the verification token is invalid or expired, verification fails and the subs
388
478
 
389
479
  **Channels are independent.** Provide any combination of `sms`, `email`, and `push`. Channels you omit are skipped.
390
480
 
481
+ The field is part of the generated SDK input types:
482
+
483
+ ```typescript
484
+ import type {
485
+ CreatePartnerBrandSubscriptionInput,
486
+ PostSubscriptionMessageInput,
487
+ } from '@itm-studio/partner-sdk';
488
+
489
+ const welcomeMessage: PostSubscriptionMessageInput = {
490
+ sms: {
491
+ body: 'Welcome to Acme. Reply STOP to opt out.',
492
+ mediaUrls: ['https://cdn.example.com/welcome-banner.png'],
493
+ },
494
+ email: {
495
+ subject: 'Welcome to Acme',
496
+ body: 'Thanks for subscribing. Your first update is on the way.',
497
+ },
498
+ push: {
499
+ title: 'Welcome to Acme',
500
+ body: 'Tap to see what is dropping this week.',
501
+ },
502
+ };
503
+
504
+ const input: CreatePartnerBrandSubscriptionInput = {
505
+ phoneNumber: '+14155550111',
506
+ fullName: 'Jane Doe',
507
+ email: 'jane@example.com',
508
+ postSubscriptionMessage: welcomeMessage,
509
+ };
510
+ ```
511
+
391
512
  ```typescript
392
513
  await itm.mutation({
393
514
  createPartnerBrandSubscription: {
@@ -418,6 +539,15 @@ await itm.mutation({
418
539
  });
419
540
  ```
420
541
 
542
+ **Direct vs OTP timing:**
543
+
544
+ | Mode | Where to pass `postSubscriptionMessage` | When delivery starts |
545
+ |---|---|---|
546
+ | Direct subscribe | Initial `createPartnerBrandSubscription` call | After the subscription is created or reactivated |
547
+ | OTP subscribe | Initial `createPartnerBrandSubscription` call with `requireOtpVerification: true` | After `verifyPartnerBrandSubscription` succeeds |
548
+
549
+ Do not pass `postSubscriptionMessage` to `verifyPartnerBrandSubscription`; that mutation only accepts `verificationToken` and `code`.
550
+
421
551
  **Channel inputs:**
422
552
 
423
553
  | Channel | Required | Optional | Notes |
@@ -432,12 +562,76 @@ await itm.mutation({
432
562
  - The message is delivered when the subscription is **newly created or reactivated** — re-subscribing an already-active user is a no-op.
433
563
  - In OTP mode, the message fires **after** `verifyPartnerBrandSubscription` succeeds, not when the OTP is requested.
434
564
  - Channel failures are isolated: if email cannot be sent because the user has no primary email, SMS and push are still attempted.
565
+ - Delivery is asynchronous. A successful mutation means the subscription request was accepted; it does not mean each SMS, email, or push provider has already completed delivery.
435
566
 
436
567
  **Recommended usage:**
437
568
 
438
569
  - Pass `postSubscriptionMessage` on the **first** `createPartnerBrandSubscription` call. In OTP mode, the message is buffered with the pending session and delivered after `verifyPartnerBrandSubscription`. You do **not** repeat it on the verify call.
439
570
  - For a marketing-style first SMS, prefer including a clear opt-out instruction (e.g. `Reply STOP to opt out`) alongside any branded copy.
440
571
  - For the email channel, your brand must have an email alias configured on the backend. Confirm this in backstage before relying on the email channel in production.
572
+ - Keep message content deterministic for a signup attempt. Because delivery is idempotent per active subscription period, retrying the same create call is safe; changing the message between retries should not be used as an update mechanism.
573
+
574
+ **Minimal SMS-only example:**
575
+
576
+ ```typescript
577
+ await itm.mutation({
578
+ createPartnerBrandSubscription: {
579
+ __args: {
580
+ input: {
581
+ phoneNumber: '+14155550111',
582
+ postSubscriptionMessage: {
583
+ sms: {
584
+ body: 'You are subscribed to Acme updates. Reply STOP to opt out.',
585
+ },
586
+ },
587
+ },
588
+ },
589
+ verificationRequired: true,
590
+ subscription: { uid: true },
591
+ },
592
+ });
593
+ ```
594
+
595
+ **OTP example with buffered welcome message:**
596
+
597
+ ```typescript
598
+ const { createPartnerBrandSubscription } = await itm.mutation({
599
+ createPartnerBrandSubscription: {
600
+ __args: {
601
+ input: {
602
+ phoneNumber: '+14155550112',
603
+ requireOtpVerification: true,
604
+ email: 'jane@example.com',
605
+ postSubscriptionMessage: {
606
+ sms: {
607
+ body: 'Thanks for joining Acme. Reply STOP to opt out.',
608
+ },
609
+ email: {
610
+ subject: 'You are subscribed',
611
+ body: 'Your subscription is confirmed. We will send updates here.',
612
+ },
613
+ },
614
+ },
615
+ },
616
+ verificationRequired: true,
617
+ verificationToken: true,
618
+ },
619
+ });
620
+
621
+ // Later, after collecting the SMS code from the user:
622
+ await itm.mutation({
623
+ verifyPartnerBrandSubscription: {
624
+ __args: {
625
+ input: {
626
+ verificationToken: createPartnerBrandSubscription.verificationToken!,
627
+ code: '123456',
628
+ },
629
+ },
630
+ uid: true,
631
+ isActive: true,
632
+ },
633
+ });
634
+ ```
441
635
 
442
636
  ### `createPartnerBrandSubscription`
443
637
 
@@ -446,6 +640,7 @@ Subscribe a phone number to the authenticated partner brand.
446
640
  - Omit `requireOtpVerification` or set it to `false` to create the subscription immediately.
447
641
  - Set `requireOtpVerification: true` to start the OTP flow. The backend sends the code to the provided phone number and returns a `verificationToken`.
448
642
  - If you pass `fullName`, include both first and last name.
643
+ - Pass `postSubscriptionMessage` here if you want SMS, email, or push sent after activation. This field is accepted only on the create mutation, including OTP starts.
449
644
 
450
645
  ```typescript
451
646
  const { createPartnerBrandSubscription } = await itm.mutation({
@@ -460,6 +655,11 @@ const { createPartnerBrandSubscription } = await itm.mutation({
460
655
  pageUrl: 'https://example.com/signup',
461
656
  submissionMethod: 'partner_sdk',
462
657
  },
658
+ postSubscriptionMessage: {
659
+ sms: {
660
+ body: 'Welcome to Acme updates. Reply STOP to opt out.',
661
+ },
662
+ },
463
663
  },
464
664
  },
465
665
  verificationRequired: true,
@@ -580,6 +780,15 @@ export async function startOtpSubscription(request: Request) {
580
780
  submittedAt: new Date().toISOString(),
581
781
  timezone: 'America/New_York',
582
782
  },
783
+ postSubscriptionMessage: {
784
+ sms: {
785
+ body: 'You are subscribed. Reply STOP to opt out.',
786
+ },
787
+ email: {
788
+ subject: 'Welcome',
789
+ body: 'Your subscription is confirmed.',
790
+ },
791
+ },
583
792
  },
584
793
  },
585
794
  verificationRequired: true,
package/dist/index.d.mts CHANGED
@@ -12,6 +12,10 @@ type MomentSortOrder = 'ASC' | 'DESC';
12
12
  type MomentType = 'DIGITAL' | 'IRL';
13
13
  type MomentCategory = 'ACTIVATION' | 'CONCERT' | 'DIGITAL' | 'DINING' | 'EDUCATION' | 'EXHIBITION' | 'FASHION' | 'FESTIVAL' | 'LAUNCH' | 'NIGHTLIFE' | 'OTHER' | 'PARTY' | 'PERFORMING_ARTS' | 'SCREENING' | 'SPORTS' | 'WELLNESS';
14
14
  type MomentSubcategory = 'ACOUSTIC_SET' | 'ADVANCE_SCREENING' | 'AFTER_PARTY' | 'AIRDROP' | 'ALBUM_DROP' | 'ALBUM_RELEASE_SHOW' | 'AMA' | 'ANNIVERSARY' | 'ARTIST_TALK' | 'ART_FAIR' | 'ART_FESTIVAL' | 'ATHLETE_APPEARANCE' | 'AWARDS' | 'BAR_TAKEOVER' | 'BATTLE' | 'BEER_AND_WINE_FESTIVAL' | 'BIENNALE' | 'BIRTHDAY' | 'BLOCK_PARTY' | 'BRAND_EXPERIENCE' | 'BRAND_REVEAL' | 'BREATHWORK' | 'BRUNCH_EVENT' | 'BURLESQUE' | 'CACAO_CEREMONY' | 'CARNIVAL' | 'CELEBRATION' | 'CHAMPIONSHIP' | 'CHEF_DINNER' | 'CHOIR_OR_ENSEMBLE' | 'CLUB_NIGHT' | 'CLUB_SET' | 'COLD_PLUNGE' | 'COLLABORATION_REVEAL' | 'COLLECTION_DROP' | 'COMEDY_FESTIVAL' | 'COMEDY_NIGHT' | 'COMEDY_SHOW' | 'COMMUNITY_MEETUP' | 'CONFERENCE' | 'COOKING_CLASS' | 'CULTURAL_FESTIVAL' | 'DANCE_PERFORMANCE' | 'DAYCLUB' | 'DIRECTORS_CUT' | 'DISCORD_EVENT' | 'DOCUMENTARY' | 'DRAG_SHOW' | 'ECSTATIC_DANCE' | 'ESPORTS' | 'EXHIBITION_GAME' | 'EXTREME_SPORTS' | 'FAN_EXPERIENCE' | 'FAN_FEST' | 'FASHION_FESTIVAL' | 'FASHION_PANEL' | 'FASHION_WEEK' | 'FIGHT_NIGHT' | 'FILM_FESTIVAL' | 'FILM_PREMIERE' | 'FINISSAGE' | 'FIRESIDE_CHAT' | 'FITNESS_CLASS' | 'FITTING_EVENT' | 'FOOD_FESTIVAL' | 'FOOD_PAIRING' | 'GALLERY_OPENING' | 'GAME_DAY' | 'GIVEAWAY' | 'GROUP_EXHIBITION' | 'GUERRILLA' | 'HACKATHON' | 'HEADLINER_SHOW' | 'HOLIDAY_PARTY' | 'HYBRID_EVENT' | 'IMMERSIVE_EXPERIENCE' | 'IMPROV_SHOW' | 'INFLUENCER_EVENT' | 'INSTALLATION' | 'INTERACTIVE_INSTALLATION' | 'JAZZ_NIGHT' | 'JAZZ_SESSION' | 'KARAOKE_NIGHT' | 'KEYNOTE' | 'LATE_NIGHT_SET' | 'LISTENING_PARTY' | 'LIVESTREAM' | 'LOOKBOOK_SHOOT' | 'MASQUERADE' | 'MASTERCLASS' | 'MEDITATION' | 'MEET_AND_GREET' | 'MEMBERS_ONLY' | 'MOBILE_TOUR' | 'MUSEUM_EVENT' | 'MUSICAL' | 'MUSIC_FESTIVAL' | 'MUSIC_VIDEO_PREMIERE' | 'NETWORKING_MIXER' | 'NFT_MINT' | 'ONLINE_DROP' | 'ONLINE_PREMIERE' | 'ONLINE_WATCH_PARTY' | 'OPEN_MIC' | 'OPERA' | 'ORCHESTRA' | 'OTHER' | 'OUTDOOR_CINEMA' | 'PANEL' | 'PERFORMANCE_ART' | 'PHOTO_ACTIVATION' | 'POOL_PARTY' | 'POP_UP_BOUTIQUE' | 'POP_UP_DINING' | 'POP_UP_GALLERY' | 'POP_UP_SHOP' | 'PRESENTATION' | 'PRESS_EVENT' | 'PREVIEW' | 'PRIDE_FESTIVAL' | 'PRIVATE_EVENT' | 'PRODUCT_LAUNCH' | 'RAVE' | 'RELEASE_PARTY' | 'RESIDENCY' | 'RESTAURANT_OPENING' | 'RETREAT' | 'RIVALRY_GAME' | 'ROOFTOP_PARTY' | 'ROUNDTABLE' | 'RUNWAY_SHOW' | 'RUN_CLUB' | 'RUN_OR_RACE' | 'SAMPLE_SALE' | 'SAMPLING' | 'SECRET_DINING' | 'SEMINAR' | 'SHORT_FILM' | 'SHOWCASE' | 'SHOWROOM' | 'SILENT_DISCO' | 'SOCIAL_CHALLENGE' | 'SOLO_EXHIBITION' | 'SOUND_BATH' | 'SPA_EXPERIENCE' | 'SPOKEN_WORD' | 'SPONSORSHIP' | 'SPORTS_CLINIC' | 'SPORTS_WATCH_PARTY' | 'STANDUP_COMEDY' | 'STREET_TEAM' | 'STUDIO_VISIT' | 'SUMMIT' | 'SUPPER_CLUB' | 'TAILGATE' | 'TASTING' | 'THEATER' | 'THEMED_NIGHT' | 'TOURNAMENT' | 'TOUR_STOP' | 'TRIBUTE_SHOW' | 'TRUNK_SHOW' | 'TWITTER_SPACE' | 'VARIETY_SHOW' | 'VENUE_OPENING' | 'VIRTUAL_CONCERT' | 'VIRTUAL_EVENT' | 'WAREHOUSE_PARTY' | 'WATCH_PARTY' | 'WEBINAR' | 'WELLNESS_FESTIVAL' | 'WELLNESS_WORKSHOP' | 'WORKSHOP' | 'YOGA_SESSION';
15
+ type MomentLineupStatus = 'APPROVED' | 'PENDING' | 'REJECTED';
16
+ type MomentLineupType = 'CO_HOST' | 'DJ' | 'LINEUP' | 'PROMOTER' | 'SPEAKER' | 'VENDOR';
17
+ /** Display label for the lineup section on public event pages. */
18
+ type MomentLineupDisplayLabel = 'CO_HOSTS' | 'DJS' | 'LINEUP' | 'PROMOTERS' | 'SPEAKERS' | 'VENDORS';
15
19
  type EchoType = 'LINK' | 'POST' | 'IMAGE' | 'VIDEO' | 'GALLERY' | 'MERCH' | 'AUDIO' | 'QUESTION' | 'POLL' | 'UPLOAD' | 'TOKEN' | 'MOMENT' | 'FORM' | 'THIRD_PARTY';
16
20
  type ThirdPartyEchoType = 'SPOTIFY' | 'INSTAGRAM' | 'TIKTOK';
17
21
  type PaymentStatus = 'PENDING' | 'SUCCEEDED' | 'FAILED';
@@ -66,6 +70,8 @@ interface Moment {
66
70
  timezone: Scalars['String'];
67
71
  minimumAge: Scalars['Int'];
68
72
  externalUrl: (Scalars['String'] | null);
73
+ /** Display label to use when rendering the public lineup section. */
74
+ lineupDisplayLabel: MomentLineupDisplayLabel;
69
75
  /** Cover image for the moment. Null if no cover image is set. */
70
76
  coverImage: (MomentCoverImage | null);
71
77
  venue: (Venue | null);
@@ -74,6 +80,22 @@ interface Moment {
74
80
  updatedAt: Scalars['DateTime'];
75
81
  __typename: 'Moment';
76
82
  }
83
+ /**
84
+ * Public-facing lineup entry for a moment.
85
+ * Only approved entries are returned by getPublicMomentLineups.
86
+ */
87
+ interface MomentLineup {
88
+ uid: Scalars['ID'];
89
+ name: Scalars['String'];
90
+ status: MomentLineupStatus;
91
+ lineupType: MomentLineupType;
92
+ sortOrder: Scalars['String'];
93
+ url: (Scalars['String'] | null);
94
+ image: (MomentCoverImage | null);
95
+ createdAt: Scalars['DateTime'];
96
+ updatedAt: Scalars['DateTime'];
97
+ __typename: 'MomentLineup';
98
+ }
77
99
  interface TicketTier {
78
100
  uid: Scalars['ID'];
79
101
  name: Scalars['String'];
@@ -246,6 +268,13 @@ interface GetPublicMomentsResponse {
246
268
  nextCursor: (Scalars['String'] | null);
247
269
  __typename: 'GetPublicMomentsResponse';
248
270
  }
271
+ interface GetMomentLineupsResponse {
272
+ lineups: MomentLineup[];
273
+ totalCount: Scalars['Int'];
274
+ hasNextPage: Scalars['Boolean'];
275
+ nextCursor: (Scalars['String'] | null);
276
+ __typename: 'GetMomentLineupsResponse';
277
+ }
249
278
  interface GetTicketsResponse {
250
279
  tickets: Ticket[];
251
280
  totalCount: Scalars['Int'];
@@ -275,6 +304,21 @@ interface BrandSubscription {
275
304
  updatedAt: Scalars['DateTime'];
276
305
  __typename: 'BrandSubscription';
277
306
  }
307
+ interface PublicMomentLineupInfo {
308
+ token: Scalars['String'];
309
+ artistName: Scalars['String'];
310
+ momentName: Scalars['String'];
311
+ brandName: Scalars['String'];
312
+ status: MomentLineupStatus;
313
+ lineupType: MomentLineupType;
314
+ alreadyResponded: Scalars['Boolean'];
315
+ __typename: 'PublicMomentLineupInfo';
316
+ }
317
+ interface MomentLineupResponseResult {
318
+ status: MomentLineupStatus;
319
+ success: Scalars['Boolean'];
320
+ __typename: 'MomentLineupResponseResult';
321
+ }
278
322
  interface Query {
279
323
  /** Get paginated moments for the brand associated with the partner token. */
280
324
  getPartnerMomentsForBrand: GetPublicMomentsResponse;
@@ -303,6 +347,13 @@ interface Query {
303
347
  * If omitted, returns brand-level echoes.
304
348
  */
305
349
  getPartnerPublicEchoes: GetBrandEchoesForUserResponse;
350
+ /**
351
+ * Get approved public lineup entries for a moment.
352
+ * Use getPartnerMoment to resolve a moment slug to uid before calling this query.
353
+ */
354
+ getPublicMomentLineups: GetMomentLineupsResponse;
355
+ /** Get public lineup invitation details by response token. */
356
+ getMomentLineupByToken: PublicMomentLineupInfo;
306
357
  __typename: 'Query';
307
358
  }
308
359
  /**
@@ -364,6 +415,7 @@ interface Mutation {
364
415
  createPartnerMoment: Moment;
365
416
  /** Complete a partner brand subscription that was created with requireOtpVerification=true. */
366
417
  verifyPartnerBrandSubscription: BrandSubscription;
418
+ respondToMomentLineup: MomentLineupResponseResult;
367
419
  __typename: 'Mutation';
368
420
  }
369
421
  interface CurrencyGenqlSelection {
@@ -419,6 +471,8 @@ interface MomentGenqlSelection {
419
471
  timezone?: boolean | number;
420
472
  minimumAge?: boolean | number;
421
473
  externalUrl?: boolean | number;
474
+ /** Display label to use when rendering the public lineup section. */
475
+ lineupDisplayLabel?: boolean | number;
422
476
  /** Cover image for the moment. Null if no cover image is set. */
423
477
  coverImage?: MomentCoverImageGenqlSelection;
424
478
  venue?: VenueGenqlSelection;
@@ -428,6 +482,23 @@ interface MomentGenqlSelection {
428
482
  __typename?: boolean | number;
429
483
  __scalar?: boolean | number;
430
484
  }
485
+ /**
486
+ * Public-facing lineup entry for a moment.
487
+ * Only approved entries are returned by getPublicMomentLineups.
488
+ */
489
+ interface MomentLineupGenqlSelection {
490
+ uid?: boolean | number;
491
+ name?: boolean | number;
492
+ status?: boolean | number;
493
+ lineupType?: boolean | number;
494
+ sortOrder?: boolean | number;
495
+ url?: boolean | number;
496
+ image?: MomentCoverImageGenqlSelection;
497
+ createdAt?: boolean | number;
498
+ updatedAt?: boolean | number;
499
+ __typename?: boolean | number;
500
+ __scalar?: boolean | number;
501
+ }
431
502
  interface TicketTierGenqlSelection {
432
503
  uid?: boolean | number;
433
504
  name?: boolean | number;
@@ -612,6 +683,14 @@ interface GetPublicMomentsResponseGenqlSelection {
612
683
  __typename?: boolean | number;
613
684
  __scalar?: boolean | number;
614
685
  }
686
+ interface GetMomentLineupsResponseGenqlSelection {
687
+ lineups?: MomentLineupGenqlSelection;
688
+ totalCount?: boolean | number;
689
+ hasNextPage?: boolean | number;
690
+ nextCursor?: boolean | number;
691
+ __typename?: boolean | number;
692
+ __scalar?: boolean | number;
693
+ }
615
694
  interface GetTicketsResponseGenqlSelection {
616
695
  tickets?: TicketGenqlSelection;
617
696
  totalCount?: boolean | number;
@@ -645,6 +724,23 @@ interface BrandSubscriptionGenqlSelection {
645
724
  __typename?: boolean | number;
646
725
  __scalar?: boolean | number;
647
726
  }
727
+ interface PublicMomentLineupInfoGenqlSelection {
728
+ token?: boolean | number;
729
+ artistName?: boolean | number;
730
+ momentName?: boolean | number;
731
+ brandName?: boolean | number;
732
+ status?: boolean | number;
733
+ lineupType?: boolean | number;
734
+ alreadyResponded?: boolean | number;
735
+ __typename?: boolean | number;
736
+ __scalar?: boolean | number;
737
+ }
738
+ interface MomentLineupResponseResultGenqlSelection {
739
+ status?: boolean | number;
740
+ success?: boolean | number;
741
+ __typename?: boolean | number;
742
+ __scalar?: boolean | number;
743
+ }
648
744
  interface QueryGenqlSelection {
649
745
  /** Get paginated moments for the brand associated with the partner token. */
650
746
  getPartnerMomentsForBrand?: (GetPublicMomentsResponseGenqlSelection & {
@@ -718,6 +814,25 @@ interface QueryGenqlSelection {
718
814
  take?: (Scalars['Int'] | null);
719
815
  };
720
816
  });
817
+ /**
818
+ * Get approved public lineup entries for a moment.
819
+ * Use getPartnerMoment to resolve a moment slug to uid before calling this query.
820
+ */
821
+ getPublicMomentLineups?: (GetMomentLineupsResponseGenqlSelection & {
822
+ __args: {
823
+ momentUid: Scalars['String'];
824
+ /** Cursor UID for pagination. */
825
+ cursor?: (Scalars['String'] | null);
826
+ take?: (Scalars['Int'] | null);
827
+ lineupType?: (MomentLineupType | null);
828
+ };
829
+ });
830
+ /** Get public lineup invitation details by response token. */
831
+ getMomentLineupByToken?: (PublicMomentLineupInfoGenqlSelection & {
832
+ __args: {
833
+ token: Scalars['String'];
834
+ };
835
+ });
721
836
  __typename?: boolean | number;
722
837
  __scalar?: boolean | number;
723
838
  }
@@ -772,6 +887,10 @@ interface CreatePartnerMomentInput {
772
887
  /** Ticket tiers to create along with the moment. */
773
888
  ticketTiers?: (CreatePartnerTicketTierInput[] | null);
774
889
  }
890
+ interface RespondToMomentLineupInput {
891
+ token: Scalars['String'];
892
+ status: MomentLineupStatus;
893
+ }
775
894
  interface SubscriptionComplianceInput {
776
895
  browserName?: (Scalars['String'] | null);
777
896
  browserVersion?: (Scalars['String'] | null);
@@ -930,6 +1049,11 @@ interface MutationGenqlSelection {
930
1049
  input: VerifyPartnerBrandSubscriptionInput;
931
1050
  };
932
1051
  });
1052
+ respondToMomentLineup?: (MomentLineupResponseResultGenqlSelection & {
1053
+ __args: {
1054
+ input: RespondToMomentLineupInput;
1055
+ };
1056
+ });
933
1057
  __typename?: boolean | number;
934
1058
  __scalar?: boolean | number;
935
1059
  }
@@ -1032,6 +1156,7 @@ type ITMPartnerClient = Client;
1032
1156
  * uid: true,
1033
1157
  * name: true,
1034
1158
  * startDate: true,
1159
+ * lineupDisplayLabel: true,
1035
1160
  * coverImage: { url: true, mimeType: true },
1036
1161
  * venue: { name: true, city: true },
1037
1162
  * },
@@ -1044,4 +1169,4 @@ type ITMPartnerClient = Client;
1044
1169
  */
1045
1170
  declare function createITMPartnerClient(config: ITMPartnerClientConfig): ITMPartnerClient;
1046
1171
 
1047
- export { type BrandSubscription, type CreatePartnerBrandSubscriptionInput, type CreatePartnerBrandSubscriptionResponse, type CreatePartnerMomentInput, type CreatePartnerTicketTierInput, type Currency, DEFAULT_API_URL, type Dimensions, type DimensionsInput, type Echo, type EchoMediaAsset, type EchoType, type GetBrandEchoesForUserResponse, type GetPartnerCustomersResponse, type GetPublicMomentsResponse, type GetTicketsResponse, type ITMPartnerClient, type ITMPartnerClientConfig, type ITMPartnerHeaders, type ITMPartnerHeadersObject, type MediaAsset, type MediaAssetUploadUrl, type MerchPurchase, type Moment, type MomentCategory, type MomentCollection, type MomentCollectionLink, type MomentDiscountCodeUsage, type MomentSortOrder, type MomentStatus, type MomentSubcategory, type MomentType, type Mutation, type PartnerCustomer, type PartnerMomentStats, type Payment, type PaymentStatus, type PostSubscriptionEmailInput, type PostSubscriptionMessageInput, type PostSubscriptionPushInput, type PostSubscriptionSmsInput, type Query, type SubscriptionComplianceInput, type ThirdPartyEchoType, type Ticket, type TicketExtension, type TicketExtensionStatus, type TicketTier, type User, type Venue, type VenueInput, type VerifyPartnerBrandSubscriptionInput, createITMPartnerClient, everything, generateMutationOp, generateQueryOp };
1172
+ export { type BrandSubscription, type CreatePartnerBrandSubscriptionInput, type CreatePartnerBrandSubscriptionResponse, type CreatePartnerMomentInput, type CreatePartnerTicketTierInput, type Currency, DEFAULT_API_URL, type Dimensions, type DimensionsInput, type Echo, type EchoMediaAsset, type EchoType, type GetBrandEchoesForUserResponse, type GetMomentLineupsResponse, type GetPartnerCustomersResponse, type GetPublicMomentsResponse, type GetTicketsResponse, type ITMPartnerClient, type ITMPartnerClientConfig, type ITMPartnerHeaders, type ITMPartnerHeadersObject, type MediaAsset, type MediaAssetUploadUrl, type MerchPurchase, type Moment, type MomentCategory, type MomentCollection, type MomentCollectionLink, type MomentDiscountCodeUsage, type MomentLineup, type MomentLineupDisplayLabel, type MomentLineupResponseResult, type MomentLineupStatus, type MomentLineupType, type MomentSortOrder, type MomentStatus, type MomentSubcategory, type MomentType, type Mutation, type PartnerCustomer, type PartnerMomentStats, type Payment, type PaymentStatus, type PostSubscriptionEmailInput, type PostSubscriptionMessageInput, type PostSubscriptionPushInput, type PostSubscriptionSmsInput, type PublicMomentLineupInfo, type Query, type RespondToMomentLineupInput, type SubscriptionComplianceInput, type ThirdPartyEchoType, type Ticket, type TicketExtension, type TicketExtensionStatus, type TicketTier, type User, type Venue, type VenueInput, type VerifyPartnerBrandSubscriptionInput, createITMPartnerClient, everything, generateMutationOp, generateQueryOp };