@itm-studio/partner-sdk 0.1.7 → 0.2.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.
@@ -573,3 +573,118 @@ type Query {
573
573
  take: Int
574
574
  ): GetBrandEchoesForUserResponse!
575
575
  }
576
+
577
+ # ─── Input Types ──────────────────────────────────────────────────────────────
578
+
579
+ input DimensionsInput {
580
+ width: Int!
581
+ height: Int!
582
+ }
583
+
584
+ input VenueInput {
585
+ name: String!
586
+ city: String!
587
+ country: String!
588
+ address: String
589
+ postalCode: String
590
+ }
591
+
592
+ input CreatePartnerTicketTierInput {
593
+ """Name of the ticket tier (e.g. "General Admission", "VIP")."""
594
+ name: String!
595
+ """Price in cents (0 for free). E.g. 2500 = $25.00."""
596
+ price: Int!
597
+ """Total number of tickets available."""
598
+ supply: Int!
599
+ """Maximum tickets per user (1-50)."""
600
+ maxPerUser: Int!
601
+ """ISO 4217 currency code (e.g. "USD", "GBP", "EUR")."""
602
+ currencyCode: String!
603
+ description: String
604
+ """Minimum tickets per user (default: 1)."""
605
+ minPerUser: Int
606
+ """Default: false."""
607
+ isPrivate: Boolean
608
+ """Default: true."""
609
+ isActive: Boolean
610
+ }
611
+
612
+ input CreatePartnerMomentInput {
613
+ name: String!
614
+ description: String!
615
+ blurb: String!
616
+ startDate: DateTime!
617
+ endDate: DateTime!
618
+ """IANA timezone (e.g. "America/New_York")."""
619
+ timezone: String!
620
+ """IRL (in-person) or DIGITAL."""
621
+ type: MomentType!
622
+ """UID of a previously uploaded media asset. If omitted, uses the brand default cover image."""
623
+ coverImageUid: String
624
+ """Required when type is IRL."""
625
+ venue: VenueInput
626
+ """Default: false."""
627
+ isPrivate: Boolean
628
+ category: MomentCategory
629
+ subcategory: MomentSubcategory
630
+ """Ticket tiers to create along with the moment."""
631
+ ticketTiers: [CreatePartnerTicketTierInput!]
632
+ }
633
+
634
+ # ─── Mutation Types ───────────────────────────────────────────────────────────
635
+
636
+ """
637
+ A presigned S3 upload URL and the generated filename.
638
+ Returned by getPartnerUploadUrl.
639
+ """
640
+ type MediaAssetUploadUrl {
641
+ """Presigned S3 URL. PUT your file here."""
642
+ url: String!
643
+ """Generated filename to pass to createPartnerMediaAsset after upload."""
644
+ filename: String!
645
+ }
646
+
647
+ """
648
+ A media asset uploaded by a partner.
649
+ Returned by createPartnerMediaAsset.
650
+ """
651
+ type MediaAsset {
652
+ uid: ID!
653
+ """CloudFront URL of the asset."""
654
+ url: String!
655
+ mimeType: String!
656
+ s3Key: String!
657
+ dimensions: Dimensions!
658
+ """File size in bytes."""
659
+ size: Int!
660
+ placeholderUrl: String
661
+ blurhash: String
662
+ createdAt: DateTime!
663
+ updatedAt: DateTime!
664
+ }
665
+
666
+ # ─── Mutations ────────────────────────────────────────────────────────────────
667
+
668
+ type Mutation {
669
+ """
670
+ Get a presigned S3 URL for direct file upload.
671
+ Rate limited to 30 requests per minute.
672
+ """
673
+ getPartnerUploadUrl(filename: String!, fileExtension: String!): MediaAssetUploadUrl!
674
+
675
+ """
676
+ Record an uploaded media asset and link it to the partner's brand.
677
+ Call after uploading to S3 via the presigned URL from getPartnerUploadUrl.
678
+ """
679
+ createPartnerMediaAsset(
680
+ mimetype: String!
681
+ filename: String!
682
+ dimensions: DimensionsInput!
683
+ ): MediaAsset!
684
+
685
+ """
686
+ Create a moment with optional venue and ticket tiers in one atomic operation.
687
+ When type is IRL, the venue field is required.
688
+ """
689
+ createPartnerMoment(input: CreatePartnerMomentInput!): Moment!
690
+ }