@burdenoff/microfe-store 2026.916.1 → 2026.916.2

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.
@@ -151,6 +151,14 @@ export type ActivateSubscriptionForWorkspaceResult = {
151
151
  skippedQuotas: Scalars['Int']['output'];
152
152
  workspaceId: Scalars['ID']['output'];
153
153
  };
154
+ /** Result of activating a subscription's workspace-scoped quotas against multiple workspaces at once. */
155
+ export type ActivateSubscriptionForWorkspacesResult = {
156
+ __typename?: 'ActivateSubscriptionForWorkspacesResult';
157
+ /** Every workspace now activated for this subscription (including ones activated by an earlier call) — the full, authoritative set. */
158
+ activatedWorkspaceIds: Array<Scalars['ID']['output']>;
159
+ results: Array<WorkspaceActivationOutcome>;
160
+ subscriptionId: Scalars['ID']['output'];
161
+ };
154
162
  export declare enum ActivityAction {
155
163
  Create = "CREATE",
156
164
  Delete = "DELETE",
@@ -929,6 +937,8 @@ export type AppRevenueSummary = {
929
937
  __typename?: 'AppRevenueSummary';
930
938
  applicationId: Scalars['ID']['output'];
931
939
  applicationName: Scalars['String']['output'];
940
+ /** Same currency as the parent RevenueSummary — see its doc comment. */
941
+ currency: Scalars['String']['output'];
932
942
  grossRevenue: Scalars['Float']['output'];
933
943
  netRevenue: Scalars['Float']['output'];
934
944
  salesCount: Scalars['Int']['output'];
@@ -1694,8 +1704,17 @@ export type BillingOrder = {
1694
1704
  /** Tax is calculated at payment time and stored in Transaction/Payment, not BillingOrder. Tax info can be found in metadata.paymentTaxAmount, metadata.paymentTaxRate, metadata.paymentTotal */
1695
1705
  metadata?: Maybe<Scalars['JSON']['output']>;
1696
1706
  orgId: Scalars['String']['output'];
1707
+ /** The Payment/Transaction this order was paid with, once payment completes — cross-reference into the payment record while debugging a stuck callback. */
1708
+ paymentId?: Maybe<Scalars['String']['output']>;
1697
1709
  status: BillingOrderStatus;
1698
1710
  subtotal: Scalars['Float']['output'];
1711
+ transactionId?: Maybe<Scalars['String']['output']>;
1712
+ updatedAt: Scalars['DateTime']['output'];
1713
+ };
1714
+ export type BillingOrderCallbacksPage = {
1715
+ __typename?: 'BillingOrderCallbacksPage';
1716
+ orders: Array<BillingOrder>;
1717
+ totalCount: Scalars['Int']['output'];
1699
1718
  };
1700
1719
  export type BillingOrderItemInput = {
1701
1720
  description?: InputMaybe<Scalars['String']['input']>;
@@ -1725,6 +1744,8 @@ export type BillingPaginationInput = {
1725
1744
  };
1726
1745
  export type BillingSubscription = {
1727
1746
  __typename?: 'BillingSubscription';
1747
+ /** Every workspace this subscription has been activated against (each got the full per-workspace quota allotment from the plan). Bounded by plan.maxWorkspaces. Empty if never activated. */
1748
+ activatedWorkspaceIds: Array<Scalars['ID']['output']>;
1728
1749
  addonSubscriptions: Array<AddonSubscription>;
1729
1750
  assignedWorkspaceId?: Maybe<Scalars['ID']['output']>;
1730
1751
  autoRenewal?: Maybe<Scalars['Boolean']['output']>;
@@ -1769,6 +1790,12 @@ export type BillingWebhookLog = {
1769
1790
  processed: Scalars['Boolean']['output'];
1770
1791
  provider: Scalars['String']['output'];
1771
1792
  };
1793
+ /** Paginated page of BillingWebhookLog rows, for the admin webhook-log viewer — unlike getUnprocessedFailedWebhooks, not restricted to the payment-succeeded event types eligible for refund creation. */
1794
+ export type BillingWebhookLogsPage = {
1795
+ __typename?: 'BillingWebhookLogsPage';
1796
+ logs: Array<BillingWebhookLog>;
1797
+ totalCount: Scalars['Int']['output'];
1798
+ };
1772
1799
  export type BounceStats = {
1773
1800
  __typename?: 'BounceStats';
1774
1801
  bounceRate: Scalars['Float']['output'];
@@ -1837,6 +1864,18 @@ export type BulkChannelDeliveryResult = {
1837
1864
  /** Total number of recipients in the batch */
1838
1865
  totalCount: Scalars['Int']['output'];
1839
1866
  };
1867
+ /** An application that failed during the bulk custom-email mutation. */
1868
+ export type BulkCustomEmailFailed = {
1869
+ __typename?: 'BulkCustomEmailFailed';
1870
+ applicationId: Scalars['ID']['output'];
1871
+ message: Scalars['String']['output'];
1872
+ };
1873
+ /** Outcome of bulkSendCustomEmail — every requested application lands in exactly one bucket. */
1874
+ export type BulkCustomEmailResult = {
1875
+ __typename?: 'BulkCustomEmailResult';
1876
+ failed: Array<BulkCustomEmailFailed>;
1877
+ succeeded: Array<JobApplication>;
1878
+ };
1840
1879
  /** A requested application that cannot receive the configured interview round. */
1841
1880
  export type BulkEnsureInterviewRoundFailed = {
1842
1881
  __typename?: 'BulkEnsureInterviewRoundFailed';
@@ -1896,6 +1935,14 @@ export type BulkRoundMessageItemInput = {
1896
1935
  applicationId: Scalars['ID']['input'];
1897
1936
  roundId: Scalars['ID']['input'];
1898
1937
  };
1938
+ export type BulkSendCustomEmailInput = {
1939
+ /** Between 1 and 100 unique application IDs, from any status or round — not scoped to a shared interview round. */
1940
+ applicationIds: Array<Scalars['ID']['input']>;
1941
+ /** Rich-text HTML message body from the admin's editor; sanitized to an allowlist before it reaches the email. */
1942
+ message: Scalars['String']['input'];
1943
+ /** Email subject — sent as the actual email Subject line only, never repeated in the body. */
1944
+ subject: Scalars['String']['input'];
1945
+ };
1899
1946
  /** A candidate/round that failed during a bulk-send mutation. */
1900
1947
  export type BulkSendFailed = {
1901
1948
  __typename?: 'BulkSendFailed';
@@ -1920,6 +1967,7 @@ export type BulkSendRoundMessageInput = {
1920
1967
  export declare enum BulkSendSkipReason {
1921
1968
  AlreadySent = "ALREADY_SENT",
1922
1969
  NotAssignmentRound = "NOT_ASSIGNMENT_ROUND",
1970
+ NotDuplicate = "NOT_DUPLICATE",
1923
1971
  NoActiveAssignments = "NO_ACTIVE_ASSIGNMENTS"
1924
1972
  }
1925
1973
  /** A candidate/round skipped by a bulk-send mutation, with why. */
@@ -1941,6 +1989,23 @@ export type BulkTranslationInput = {
1941
1989
  pluralForms?: InputMaybe<Scalars['JSON']['input']>;
1942
1990
  value: Scalars['String']['input'];
1943
1991
  };
1992
+ /** A requested application ID that could not have its status updated. */
1993
+ export type BulkUpdateApplicationStatusFailed = {
1994
+ __typename?: 'BulkUpdateApplicationStatusFailed';
1995
+ applicationId: Scalars['ID']['output'];
1996
+ message: Scalars['String']['output'];
1997
+ };
1998
+ export type BulkUpdateApplicationStatusInput = {
1999
+ /** Between 1 and 100 unique application IDs, from any status or round. */
2000
+ applicationIds: Array<Scalars['ID']['input']>;
2001
+ status: JobApplicationStatus;
2002
+ };
2003
+ /** Outcome of bulkUpdateApplicationStatus — every requested ID lands in exactly one bucket. */
2004
+ export type BulkUpdateApplicationStatusResult = {
2005
+ __typename?: 'BulkUpdateApplicationStatusResult';
2006
+ failed: Array<BulkUpdateApplicationStatusFailed>;
2007
+ succeeded: Array<JobApplication>;
2008
+ };
1944
2009
  /** Input for tax calculation preview */
1945
2010
  export type CalculateTaxInput = {
1946
2011
  /** Amount in USD (base currency) */
@@ -1974,6 +2039,8 @@ export type CandidateEmailLog = {
1974
2039
  };
1975
2040
  export declare enum CandidateEmailType {
1976
2041
  Assignment = "ASSIGNMENT",
2042
+ BulkCustom = "BULK_CUSTOM",
2043
+ DuplicateAssignmentNotice = "DUPLICATE_ASSIGNMENT_NOTICE",
1977
2044
  Reply = "REPLY",
1978
2045
  RoundMessage = "ROUND_MESSAGE"
1979
2046
  }
@@ -2005,6 +2072,14 @@ export type CannedResponseFilterInput = {
2005
2072
  isActive?: InputMaybe<Scalars['Boolean']['input']>;
2006
2073
  tags?: InputMaybe<Array<Scalars['String']['input']>>;
2007
2074
  };
2075
+ /** One of a shipping carrier's own registered pickup/warehouse addresses (see carrierPickupLocations query). Not organization-scoped — a pickup location belongs to whichever carrier account it's registered with (e.g. Shiprocket today; more carriers may be added later), since a store's ShippingMethods can each use a different carrier. */
2076
+ export type CarrierPickupLocation = {
2077
+ __typename?: 'CarrierPickupLocation';
2078
+ /** Which carrier this pickup address is registered with (matches ShippingMethod.carrier, e.g. "shiprocket"). */
2079
+ carrier: Scalars['String']['output'];
2080
+ label: Scalars['String']['output'];
2081
+ postalCode: Scalars['String']['output'];
2082
+ };
2008
2083
  /** Shopping cart for collecting products before checkout */
2009
2084
  export type Cart = {
2010
2085
  __typename?: 'Cart';
@@ -2856,6 +2931,12 @@ export type ConfigureWorkspaceInput = {
2856
2931
  endpoint?: InputMaybe<Scalars['String']['input']>;
2857
2932
  region?: InputMaybe<Scalars['String']['input']>;
2858
2933
  };
2934
+ /** Presence and assignment state of one exact configured interview round. */
2935
+ export declare enum ConfiguredRoundState {
2936
+ Assigned = "ASSIGNED",
2937
+ Missing = "MISSING",
2938
+ Unassigned = "UNASSIGNED"
2939
+ }
2859
2940
  /** Real-time health status of a channel's connection. Monitored by the system based on API calls and health checks. - `status` = Admin-controlled (ACTIVE, INACTIVE, ARCHIVED) - `connectionHealth` = System-monitored (HEALTHY, DEGRADED, UNHEALTHY) Example: Channel status = ACTIVE but connectionHealth = UNHEALTHY means admin enabled the channel but the API is down. */
2860
2941
  export declare enum ConnectionHealth {
2861
2942
  /** Partial failures, high latency, or rate limiting */
@@ -2912,6 +2993,56 @@ export type ConnectionTestResult = {
2912
2993
  /** Whether the test succeeded */
2913
2994
  success: Scalars['Boolean']['output'];
2914
2995
  };
2996
+ export type ConsentLedgerFilter = {
2997
+ purpose?: InputMaybe<ConsentPurpose>;
2998
+ status?: InputMaybe<ConsentStatus>;
2999
+ subjectId?: InputMaybe<Scalars['ID']['input']>;
3000
+ subjectType?: InputMaybe<Scalars['String']['input']>;
3001
+ workspaceId?: InputMaybe<Scalars['ID']['input']>;
3002
+ };
3003
+ export declare enum ConsentPurpose {
3004
+ AiTraining = "AI_TRAINING",
3005
+ Analytics = "ANALYTICS",
3006
+ CookiesAnalytics = "COOKIES_ANALYTICS",
3007
+ CookiesFunctional = "COOKIES_FUNCTIONAL",
3008
+ CookiesMarketing = "COOKIES_MARKETING",
3009
+ Marketing = "MARKETING",
3010
+ ProductUpdates = "PRODUCT_UPDATES",
3011
+ Profiling = "PROFILING",
3012
+ ThirdPartySharing = "THIRD_PARTY_SHARING",
3013
+ Transactional = "TRANSACTIONAL"
3014
+ }
3015
+ export type ConsentRecord = {
3016
+ __typename?: 'ConsentRecord';
3017
+ createdAt: Scalars['DateTime']['output'];
3018
+ expiresAt?: Maybe<Scalars['DateTime']['output']>;
3019
+ grantedAt?: Maybe<Scalars['DateTime']['output']>;
3020
+ id: Scalars['ID']['output'];
3021
+ lawfulBasis: LawfulBasis;
3022
+ policyVersion: Scalars['String']['output'];
3023
+ proofPayload?: Maybe<Scalars['JSON']['output']>;
3024
+ purpose: ConsentPurpose;
3025
+ source: Scalars['String']['output'];
3026
+ status: ConsentStatus;
3027
+ subjectId: Scalars['ID']['output'];
3028
+ subjectType: Scalars['String']['output'];
3029
+ tenantId?: Maybe<Scalars['ID']['output']>;
3030
+ updatedAt: Scalars['DateTime']['output'];
3031
+ withdrawnAt?: Maybe<Scalars['DateTime']['output']>;
3032
+ workspaceId?: Maybe<Scalars['ID']['output']>;
3033
+ };
3034
+ export type ConsentRecordConnection = {
3035
+ __typename?: 'ConsentRecordConnection';
3036
+ hasMore: Scalars['Boolean']['output'];
3037
+ nodes: Array<ConsentRecord>;
3038
+ total: Scalars['Int']['output'];
3039
+ };
3040
+ export declare enum ConsentStatus {
3041
+ Expired = "EXPIRED",
3042
+ Granted = "GRANTED",
3043
+ Pending = "PENDING",
3044
+ Withdrawn = "WITHDRAWN"
3045
+ }
2915
3046
  /** A contact inquiry submitted via a product website contact form. */
2916
3047
  export type ContactInquiry = {
2917
3048
  __typename?: 'ContactInquiry';
@@ -3359,6 +3490,8 @@ export type CreateDeveloperOrganizationInput = {
3359
3490
  logoUrl?: InputMaybe<Scalars['String']['input']>;
3360
3491
  metadata?: InputMaybe<Scalars['JSON']['input']>;
3361
3492
  name: Scalars['String']['input'];
3493
+ /** Optional at creation — dedicated pickup pincode for carrier rate quoting on physical-goods orders (Shiprocket, etc). Only meaningful for createSellerOrganization (PHYSICAL orgs); ignored for DIGITAL orgs. Can always be added or changed later from organization settings. */
3494
+ pickupPostalCode?: InputMaybe<Scalars['String']['input']>;
3362
3495
  slug?: InputMaybe<Scalars['String']['input']>;
3363
3496
  supportEmail?: InputMaybe<Scalars['String']['input']>;
3364
3497
  websiteUrl?: InputMaybe<Scalars['String']['input']>;
@@ -3710,13 +3843,15 @@ export type CreatePermissionOverrideInput = {
3710
3843
  };
3711
3844
  export type CreatePhysicalProductInput = {
3712
3845
  allowBackorder?: InputMaybe<Scalars['Boolean']['input']>;
3846
+ bannerUrl?: InputMaybe<Scalars['String']['input']>;
3713
3847
  brand?: InputMaybe<Scalars['String']['input']>;
3714
3848
  category?: InputMaybe<Scalars['String']['input']>;
3849
+ /** Which platform products this listing is relevant to (e.g. "healthybowl"). Set by the calling seller-portal shell — see DeveloperOrgKind (BOFF-7285). */
3850
+ compatibleProducts?: InputMaybe<Array<Scalars['String']['input']>>;
3715
3851
  countryOfOrigin?: InputMaybe<Scalars['String']['input']>;
3716
3852
  currency?: InputMaybe<Scalars['String']['input']>;
3717
3853
  description?: InputMaybe<Scalars['String']['input']>;
3718
3854
  dimensionUnit?: InputMaybe<DimensionUnit>;
3719
- expiryDate?: InputMaybe<Scalars['DateTime']['input']>;
3720
3855
  height?: InputMaybe<Scalars['Float']['input']>;
3721
3856
  icon?: InputMaybe<Scalars['String']['input']>;
3722
3857
  length?: InputMaybe<Scalars['Float']['input']>;
@@ -3725,6 +3860,7 @@ export type CreatePhysicalProductInput = {
3725
3860
  manufacturer?: InputMaybe<Scalars['String']['input']>;
3726
3861
  metadata?: InputMaybe<Scalars['JSON']['input']>;
3727
3862
  name: Scalars['String']['input'];
3863
+ organizationId: Scalars['ID']['input'];
3728
3864
  price: Scalars['Float']['input'];
3729
3865
  requiresShipping?: InputMaybe<Scalars['Boolean']['input']>;
3730
3866
  returnPolicy?: InputMaybe<Scalars['String']['input']>;
@@ -3735,7 +3871,6 @@ export type CreatePhysicalProductInput = {
3735
3871
  tags?: InputMaybe<Array<Scalars['String']['input']>>;
3736
3872
  trackInventory?: InputMaybe<Scalars['Boolean']['input']>;
3737
3873
  type: ProductType;
3738
- unitOfMeasure?: InputMaybe<Scalars['String']['input']>;
3739
3874
  warrantyInfo?: InputMaybe<Scalars['String']['input']>;
3740
3875
  weight?: InputMaybe<Scalars['Float']['input']>;
3741
3876
  weightUnit?: InputMaybe<WeightUnit>;
@@ -4130,8 +4265,11 @@ export type CreateStoreOrderInput = {
4130
4265
  lineItems: Array<StoreLineItemInput>;
4131
4266
  /** Additional metadata */
4132
4267
  metadata?: InputMaybe<Scalars['JSON']['input']>;
4133
- /** Total product cost (sum of all line items) Note: Currency, tax, and final billing amount calculated by billing service */
4134
- total: Scalars['Float']['input'];
4268
+ /**
4269
+ * Deprecated client total. The server calculates the total from catalog data.
4270
+ * @deprecated The server calculates the order total
4271
+ */
4272
+ total?: InputMaybe<Scalars['Float']['input']>;
4135
4273
  };
4136
4274
  export type CreateSubscriptionInput = {
4137
4275
  amount: Scalars['Float']['input'];
@@ -4511,6 +4649,62 @@ export declare enum DlqStatus {
4511
4649
  Pending = "PENDING",
4512
4650
  Resolved = "RESOLVED"
4513
4651
  }
4652
+ export type DsarFilter = {
4653
+ status?: InputMaybe<DsarStatus>;
4654
+ subjectEmail?: InputMaybe<Scalars['String']['input']>;
4655
+ subjectId?: InputMaybe<Scalars['ID']['input']>;
4656
+ type?: InputMaybe<DsarType>;
4657
+ };
4658
+ export type DsarRequest = {
4659
+ __typename?: 'DSARRequest';
4660
+ completedAt?: Maybe<Scalars['DateTime']['output']>;
4661
+ createdAt: Scalars['DateTime']['output'];
4662
+ dueAt: Scalars['DateTime']['output'];
4663
+ fanoutState?: Maybe<Scalars['JSON']['output']>;
4664
+ id: Scalars['ID']['output'];
4665
+ identityProof?: Maybe<Scalars['JSON']['output']>;
4666
+ identityVerifiedAt?: Maybe<Scalars['DateTime']['output']>;
4667
+ legalHoldFlag: Scalars['Boolean']['output'];
4668
+ notes?: Maybe<Scalars['String']['output']>;
4669
+ receivedAt: Scalars['DateTime']['output'];
4670
+ rejectionReason?: Maybe<Scalars['String']['output']>;
4671
+ requestedBy?: Maybe<Scalars['ID']['output']>;
4672
+ resultArtifactHash?: Maybe<Scalars['String']['output']>;
4673
+ resultArtifactUrl?: Maybe<Scalars['String']['output']>;
4674
+ source: Scalars['String']['output'];
4675
+ status: DsarStatus;
4676
+ subjectEmail: Scalars['String']['output'];
4677
+ subjectId: Scalars['ID']['output'];
4678
+ type: DsarType;
4679
+ updatedAt: Scalars['DateTime']['output'];
4680
+ workflowId?: Maybe<Scalars['String']['output']>;
4681
+ workflowRunId?: Maybe<Scalars['String']['output']>;
4682
+ };
4683
+ export type DsarRequestConnection = {
4684
+ __typename?: 'DSARRequestConnection';
4685
+ hasMore: Scalars['Boolean']['output'];
4686
+ nodes: Array<DsarRequest>;
4687
+ total: Scalars['Int']['output'];
4688
+ };
4689
+ export declare enum DsarStatus {
4690
+ AwaitingSubjectInput = "AWAITING_SUBJECT_INPUT",
4691
+ Cancelled = "CANCELLED",
4692
+ Completed = "COMPLETED",
4693
+ IdentityVerificationPending = "IDENTITY_VERIFICATION_PENDING",
4694
+ IdentityVerified = "IDENTITY_VERIFIED",
4695
+ InProgress = "IN_PROGRESS",
4696
+ OnHoldLegal = "ON_HOLD_LEGAL",
4697
+ Received = "RECEIVED",
4698
+ Rejected = "REJECTED"
4699
+ }
4700
+ export declare enum DsarType {
4701
+ Access = "ACCESS",
4702
+ Erasure = "ERASURE",
4703
+ Objection = "OBJECTION",
4704
+ Portability = "PORTABILITY",
4705
+ Rectification = "RECTIFICATION",
4706
+ Restriction = "RESTRICTION"
4707
+ }
4514
4708
  export type DailyUsage = {
4515
4709
  __typename?: 'DailyUsage';
4516
4710
  count: Scalars['Int']['output'];
@@ -4734,6 +4928,11 @@ export type DeveloperOrgInvitationEdge = {
4734
4928
  cursor: Scalars['String']['output'];
4735
4929
  node: DeveloperOrgInvitation;
4736
4930
  };
4931
+ /** DIGITAL orgs publish Applications to the store; PHYSICAL orgs list physical goods via the seller portal. Not user-selectable — fixed at creation by which flow provisioned the org. See BOFF-7285. */
4932
+ export declare enum DeveloperOrgKind {
4933
+ Digital = "DIGITAL",
4934
+ Physical = "PHYSICAL"
4935
+ }
4737
4936
  /** Developer Organization Member - represents a member of a dev organization */
4738
4937
  export type DeveloperOrgMember = {
4739
4938
  __typename?: 'DeveloperOrgMember';
@@ -4768,6 +4967,16 @@ export type DeveloperOrgMemberEdge = {
4768
4967
  cursor: Scalars['String']['output'];
4769
4968
  node: DeveloperOrgMember;
4770
4969
  };
4970
+ /** One calendar month of aggregated revenue for a developer organization, computed on demand from DeveloperOrgSale (DeveloperOrgRevenueAnalytics is not currently populated by any writer — same fallback rationale as developerOrgRevenueSummary below). Used to render revenue growth trends on the admin revenue detail page. */
4971
+ export type DeveloperOrgMonthlyRevenuePoint = {
4972
+ __typename?: 'DeveloperOrgMonthlyRevenuePoint';
4973
+ grossRevenue: Scalars['Float']['output'];
4974
+ month: Scalars['DateTime']['output'];
4975
+ netRevenue: Scalars['Float']['output'];
4976
+ platformFees: Scalars['Float']['output'];
4977
+ refunds: Scalars['Float']['output'];
4978
+ salesCount: Scalars['Int']['output'];
4979
+ };
4771
4980
  /** Developer Organization Payment Method - for receiving payouts */
4772
4981
  export type DeveloperOrgPaymentMethod = {
4773
4982
  __typename?: 'DeveloperOrgPaymentMethod';
@@ -4851,6 +5060,27 @@ export type DeveloperOrgPayoutEdge = {
4851
5060
  cursor: Scalars['String']['output'];
4852
5061
  node: DeveloperOrgPayout;
4853
5062
  };
5063
+ /** A real, physical pickup/warehouse address an organization has registered with a shipping carrier (e.g. Shiprocket) for physical-order fulfillment. An org can have several; exactly one is isDefault at a time. Created by global-store-svc's registerCarrierPickupLocation after a successful carrier-side registration (see recordDeveloperOrgPickupAddress) — removing a row here only stops us from using that address for this org, it does not reach out to the carrier (carriers like Shiprocket have no delete API). */
5064
+ export type DeveloperOrgPickupAddress = {
5065
+ __typename?: 'DeveloperOrgPickupAddress';
5066
+ address: Scalars['String']['output'];
5067
+ addressLine2?: Maybe<Scalars['String']['output']>;
5068
+ carrier: Scalars['String']['output'];
5069
+ carrierLocationLabel: Scalars['String']['output'];
5070
+ city: Scalars['String']['output'];
5071
+ country: Scalars['String']['output'];
5072
+ createdAt: Scalars['DateTime']['output'];
5073
+ email: Scalars['String']['output'];
5074
+ id: Scalars['ID']['output'];
5075
+ isDefault: Scalars['Boolean']['output'];
5076
+ name: Scalars['String']['output'];
5077
+ organization: DeveloperOrganization;
5078
+ organizationId: Scalars['ID']['output'];
5079
+ phone: Scalars['String']['output'];
5080
+ postalCode: Scalars['String']['output'];
5081
+ state: Scalars['String']['output'];
5082
+ updatedAt: Scalars['DateTime']['output'];
5083
+ };
4854
5084
  /** Developer Organization Revenue Analytics - aggregated revenue data */
4855
5085
  export type DeveloperOrgRevenueAnalytics = {
4856
5086
  __typename?: 'DeveloperOrgRevenueAnalytics';
@@ -4882,8 +5112,8 @@ export declare enum DeveloperOrgRole {
4882
5112
  /** Developer Organization Sale - tracks a sale of an application */
4883
5113
  export type DeveloperOrgSale = {
4884
5114
  __typename?: 'DeveloperOrgSale';
4885
- application: Application;
4886
- applicationId: Scalars['ID']['output'];
5115
+ application?: Maybe<Application>;
5116
+ applicationId?: Maybe<Scalars['ID']['output']>;
4887
5117
  billingCreditSyncError?: Maybe<Scalars['String']['output']>;
4888
5118
  billingCreditSyncStatus: Scalars['String']['output'];
4889
5119
  billingCreditSyncedAt?: Maybe<Scalars['DateTime']['output']>;
@@ -5022,6 +5252,7 @@ export type DeveloperOrganization = {
5022
5252
  invitations: Array<DeveloperOrgInvitation>;
5023
5253
  isCertified: Scalars['Boolean']['output'];
5024
5254
  isVerified: Scalars['Boolean']['output'];
5255
+ kind: DeveloperOrgKind;
5025
5256
  legalAddress?: Maybe<Scalars['JSON']['output']>;
5026
5257
  legalEntityName?: Maybe<Scalars['String']['output']>;
5027
5258
  legalEntityType?: Maybe<Scalars['String']['output']>;
@@ -5035,6 +5266,9 @@ export type DeveloperOrganization = {
5035
5266
  paymentMethods: Array<DeveloperOrgPaymentMethod>;
5036
5267
  payouts: Array<DeveloperOrgPayout>;
5037
5268
  pendingBalance: Scalars['Float']['output'];
5269
+ pickupAddresses: Array<DeveloperOrgPickupAddress>;
5270
+ /** Legacy single pickup pincode, superseded by pickupAddresses (an org can now register several real addresses with a carrier and pick one as active). Kept only as a fallback for orgs that set this before DeveloperOrgPickupAddress existed — see organizationPickupPostalCode. */
5271
+ pickupPostalCode?: Maybe<Scalars['String']['output']>;
5038
5272
  platformFeeRate: Scalars['Float']['output'];
5039
5273
  publishedApps: Scalars['Int']['output'];
5040
5274
  quotaResetAt?: Maybe<Scalars['DateTime']['output']>;
@@ -5106,14 +5340,20 @@ export type DeveloperProfile = {
5106
5340
  verifiedAt?: Maybe<Scalars['DateTime']['output']>;
5107
5341
  website?: Maybe<Scalars['String']['output']>;
5108
5342
  };
5109
- /** A registered push-notification device (APNs/FCM token) belonging to the authenticated user. Powers native push across product Capacitor shells (e.g. new-listing-matches-saved-search alerts, booking reminders). */
5343
+ /** A registered push-notification device (APNs/FCM token). The fleet's single device registry: written by every product Capacitor shell on launch and on token refresh, and read by the delivery side (global-channel-svc) when it needs to reach a user. */
5110
5344
  export type DeviceToken = {
5111
5345
  __typename?: 'DeviceToken';
5112
5346
  createdAt: Scalars['DateTime']['output'];
5113
5347
  deviceId: Scalars['String']['output'];
5348
+ /** Firebase project whose credentials can reach `token`. Derived server-side from `productSlug` — never supplied by a client. Null means the row is not push-routable. */
5349
+ fcmProject?: Maybe<Scalars['String']['output']>;
5114
5350
  id: Scalars['ID']['output'];
5115
5351
  lastUsedAt: Scalars['DateTime']['output'];
5116
5352
  platform: Scalars['String']['output'];
5353
+ /** Product whose app install minted this token (e.g. "vibecontrols"). Null on rows registered before push routing existed; such rows are not deliverable. */
5354
+ productSlug?: Maybe<Scalars['String']['output']>;
5355
+ /** The OS-issued registration token. Only ever reachable by the actor who registered it (`registerDeviceToken` returns the caller's own row) or by a service actor through `pushDevicesForUserInternal` — the delivery side needs the token itself to send. */
5356
+ token: Scalars['String']['output'];
5117
5357
  };
5118
5358
  export declare enum DeviceType {
5119
5359
  Desktop = "DESKTOP",
@@ -5199,6 +5439,26 @@ export type DsarServiceResult = {
5199
5439
  service: Scalars['String']['output'];
5200
5440
  success: Scalars['Boolean']['output'];
5201
5441
  };
5442
+ /** A candidate email address that failed during the duplicate-notice mutation. */
5443
+ export type DuplicateNoticeFailed = {
5444
+ __typename?: 'DuplicateNoticeFailed';
5445
+ email: Scalars['String']['output'];
5446
+ message: Scalars['String']['output'];
5447
+ };
5448
+ /** Outcome of notifyDuplicateApplicants — grouped by candidate email address, not by application or round, so every unique email among the requested applications lands in exactly one bucket regardless of how many duplicate applications it appears on. */
5449
+ export type DuplicateNoticeResult = {
5450
+ __typename?: 'DuplicateNoticeResult';
5451
+ failed: Array<DuplicateNoticeFailed>;
5452
+ skipped: Array<DuplicateNoticeSkipped>;
5453
+ succeeded: Array<JobApplication>;
5454
+ };
5455
+ /** A candidate email address skipped by the duplicate-notice mutation, with why. */
5456
+ export type DuplicateNoticeSkipped = {
5457
+ __typename?: 'DuplicateNoticeSkipped';
5458
+ email: Scalars['String']['output'];
5459
+ message: Scalars['String']['output'];
5460
+ reason: BulkSendSkipReason;
5461
+ };
5202
5462
  export type EarnCreditsInput = {
5203
5463
  amount: Scalars['Float']['input'];
5204
5464
  billingAccountId: Scalars['ID']['input'];
@@ -5389,6 +5649,8 @@ export type EraseResult = {
5389
5649
  export type EvaluateFeatureFlagsInput = {
5390
5650
  /** Specific flag keys to evaluate. If empty, evaluates ALL active flags. */
5391
5651
  keys?: InputMaybe<Array<Scalars['String']['input']>>;
5652
+ /** Product slug to scope the evaluation. When provided, only flags belonging to that product plus platform-wide flags are evaluated — never other products' flags. Product app shells should pass their own slug. */
5653
+ productSlug?: InputMaybe<Scalars['String']['input']>;
5392
5654
  workspaceId: Scalars['String']['input'];
5393
5655
  };
5394
5656
  export type ExchangeTokenInput = {
@@ -5416,6 +5678,298 @@ export declare enum ExecutorType {
5416
5678
  NatsTopic = "NATS_TOPIC",
5417
5679
  Webhook = "WEBHOOK"
5418
5680
  }
5681
+ export type ExploreAdminClick = {
5682
+ __typename?: 'ExploreAdminClick';
5683
+ createdAt: Scalars['DateTime']['output'];
5684
+ ctaKind?: Maybe<Scalars['String']['output']>;
5685
+ id: Scalars['ID']['output'];
5686
+ kind: Scalars['String']['output'];
5687
+ product?: Maybe<Scalars['String']['output']>;
5688
+ url: Scalars['String']['output'];
5689
+ };
5690
+ export type ExploreAdminConversation = {
5691
+ __typename?: 'ExploreAdminConversation';
5692
+ /** Number of links followed across the whole conversation. */
5693
+ clickCount: Scalars['Int']['output'];
5694
+ createdAt: Scalars['DateTime']['output'];
5695
+ /** True when at least one answer in the thread could not be grounded. */
5696
+ hasUnanswered: Scalars['Boolean']['output'];
5697
+ id: Scalars['ID']['output'];
5698
+ /** Salted hash of the visitor's IP. Never an IP — grouping only. */
5699
+ ipHash: Scalars['String']['output'];
5700
+ lastMessageAt?: Maybe<Scalars['DateTime']['output']>;
5701
+ locale?: Maybe<Scalars['String']['output']>;
5702
+ messages: Array<ExploreAdminMessage>;
5703
+ productSlug?: Maybe<Scalars['String']['output']>;
5704
+ turnCount: Scalars['Int']['output'];
5705
+ };
5706
+ export type ExploreAdminConversationPage = {
5707
+ __typename?: 'ExploreAdminConversationPage';
5708
+ hasMore: Scalars['Boolean']['output'];
5709
+ items: Array<ExploreAdminConversation>;
5710
+ totalCount: Scalars['Int']['output'];
5711
+ };
5712
+ export type ExploreAdminFilter = {
5713
+ /** Only conversations where at least one link was followed. */
5714
+ convertedOnly?: InputMaybe<Scalars['Boolean']['input']>;
5715
+ from?: InputMaybe<Scalars['DateTime']['input']>;
5716
+ /** Salted IP hash, to group one visitor's sessions. */
5717
+ ipHash?: InputMaybe<Scalars['String']['input']>;
5718
+ /** Match conversations that started on this product's website. */
5719
+ productSlug?: InputMaybe<Scalars['String']['input']>;
5720
+ /** Free-text match against message content. */
5721
+ search?: InputMaybe<Scalars['String']['input']>;
5722
+ to?: InputMaybe<Scalars['DateTime']['input']>;
5723
+ /** Only conversations containing an answer the corpus could not ground. */
5724
+ unansweredOnly?: InputMaybe<Scalars['Boolean']['input']>;
5725
+ };
5726
+ export type ExploreAdminMessage = {
5727
+ __typename?: 'ExploreAdminMessage';
5728
+ /** Whether the corpus could ground this answer. False = we could not answer. */
5729
+ answered: Scalars['Boolean']['output'];
5730
+ /** Links a visitor actually followed from this answer. */
5731
+ clicks: Array<ExploreAdminClick>;
5732
+ completedAt?: Maybe<Scalars['DateTime']['output']>;
5733
+ content: Scalars['String']['output'];
5734
+ conversationId: Scalars['ID']['output'];
5735
+ createdAt: Scalars['DateTime']['output'];
5736
+ ctas: Array<ExploreCta>;
5737
+ errorCode?: Maybe<Scalars['String']['output']>;
5738
+ followUps: Array<Scalars['String']['output']>;
5739
+ id: Scalars['ID']['output'];
5740
+ references: Array<ExploreReference>;
5741
+ role: ExploreMessageRole;
5742
+ status: ExploreMessageStatus;
5743
+ };
5744
+ /** Rollup of where the assistant is actually sending people, per product. The signal the product did not have: answers cited vs links followed. */
5745
+ export type ExploreAdminProductStat = {
5746
+ __typename?: 'ExploreAdminProductStat';
5747
+ /** Answers that cited this product. */
5748
+ answerCount: Scalars['Int']['output'];
5749
+ /** Links to this product that were actually followed. */
5750
+ clickCount: Scalars['Int']['output'];
5751
+ product: Scalars['String']['output'];
5752
+ };
5753
+ export declare enum ExploreAdminSort {
5754
+ MostClicks = "MOST_CLICKS",
5755
+ MostTurns = "MOST_TURNS",
5756
+ Newest = "NEWEST",
5757
+ Oldest = "OLDEST"
5758
+ }
5759
+ export type ExploreAdminStats = {
5760
+ __typename?: 'ExploreAdminStats';
5761
+ byProduct: Array<ExploreAdminProductStat>;
5762
+ clicks: Scalars['Int']['output'];
5763
+ conversations: Scalars['Int']['output'];
5764
+ messages: Scalars['Int']['output'];
5765
+ /** Assistant answers the corpus could not ground. */
5766
+ unanswered: Scalars['Int']['output'];
5767
+ };
5768
+ export type ExploreAgentActivity = {
5769
+ __typename?: 'ExploreAgentActivity';
5770
+ at: Scalars['DateTime']['output'];
5771
+ detail?: Maybe<Scalars['String']['output']>;
5772
+ kind: Scalars['String']['output'];
5773
+ };
5774
+ export type ExploreAgentCatalog = {
5775
+ __typename?: 'ExploreAgentCatalog';
5776
+ builtAt: Scalars['DateTime']['output'];
5777
+ products: Array<ExploreAgentProduct>;
5778
+ };
5779
+ export type ExploreAgentCtaSuggestion = {
5780
+ __typename?: 'ExploreAgentCtaSuggestion';
5781
+ label: Scalars['String']['output'];
5782
+ url: Scalars['String']['output'];
5783
+ };
5784
+ export type ExploreAgentHistoryTurnInput = {
5785
+ content: Scalars['String']['input'];
5786
+ role: ExploreAgentRole;
5787
+ };
5788
+ export type ExploreAgentJob = {
5789
+ __typename?: 'ExploreAgentJob';
5790
+ activity: Array<ExploreAgentActivity>;
5791
+ /** The finished answer. Null until status is COMPLETED. */
5792
+ answer?: Maybe<Scalars['String']['output']>;
5793
+ createdAt: Scalars['DateTime']['output'];
5794
+ /** Button labels the model proposed for links it already cited, phrased as the action the visitor asked about rather than a generic page name. The edge treats these as a preference over its own templated label and re-validates the URL — a label is copy, a destination is not. */
5795
+ ctaSuggestions: Array<ExploreAgentCtaSuggestion>;
5796
+ errorCode?: Maybe<Scalars['String']['output']>;
5797
+ errorMessage?: Maybe<Scalars['String']['output']>;
5798
+ id: Scalars['ID']['output'];
5799
+ /** Answer text so far, for a streaming-style preview while the turn runs. */
5800
+ partialText?: Maybe<Scalars['String']['output']>;
5801
+ references: Array<ExploreAgentReference>;
5802
+ status: ExploreAgentJobStatus;
5803
+ updatedAt: Scalars['DateTime']['output'];
5804
+ usage?: Maybe<ExploreAgentUsage>;
5805
+ };
5806
+ export declare enum ExploreAgentJobStatus {
5807
+ Completed = "COMPLETED",
5808
+ Failed = "FAILED",
5809
+ Queued = "QUEUED",
5810
+ Running = "RUNNING"
5811
+ }
5812
+ export type ExploreAgentPage = {
5813
+ __typename?: 'ExploreAgentPage';
5814
+ description?: Maybe<Scalars['String']['output']>;
5815
+ group?: Maybe<Scalars['String']['output']>;
5816
+ title: Scalars['String']['output'];
5817
+ url: Scalars['String']['output'];
5818
+ };
5819
+ export type ExploreAgentProduct = {
5820
+ __typename?: 'ExploreAgentProduct';
5821
+ name: Scalars['String']['output'];
5822
+ pages: Array<ExploreAgentPage>;
5823
+ slug: Scalars['String']['output'];
5824
+ tagline?: Maybe<Scalars['String']['output']>;
5825
+ website: Scalars['String']['output'];
5826
+ };
5827
+ export type ExploreAgentReference = {
5828
+ __typename?: 'ExploreAgentReference';
5829
+ product?: Maybe<Scalars['String']['output']>;
5830
+ title?: Maybe<Scalars['String']['output']>;
5831
+ url: Scalars['String']['output'];
5832
+ };
5833
+ export declare enum ExploreAgentRole {
5834
+ Assistant = "ASSISTANT",
5835
+ User = "USER"
5836
+ }
5837
+ export type ExploreAgentSubmitInput = {
5838
+ /** Context block for files the visitor attached, already sanitised and wrapped as untrusted data by the edge. Injected verbatim alongside the conversation history. */
5839
+ attachmentContext?: InputMaybe<Scalars['String']['input']>;
5840
+ /** Caller correlation id, echoed in logs. Never shown to the model. */
5841
+ clientRef?: InputMaybe<Scalars['String']['input']>;
5842
+ /** Prior turns, oldest first. Truncated to the configured history window. */
5843
+ history?: InputMaybe<Array<ExploreAgentHistoryTurnInput>>;
5844
+ locale?: InputMaybe<Scalars['String']['input']>;
5845
+ /** The visitor's question. Treated as untrusted data by the agent. */
5846
+ message: Scalars['String']['input'];
5847
+ /** Catalog slug of the website the visitor is on. A hint only. */
5848
+ productSlug?: InputMaybe<Scalars['String']['input']>;
5849
+ };
5850
+ export type ExploreAgentUsage = {
5851
+ __typename?: 'ExploreAgentUsage';
5852
+ costUsd?: Maybe<Scalars['Float']['output']>;
5853
+ durationMs?: Maybe<Scalars['Int']['output']>;
5854
+ inputTokens?: Maybe<Scalars['Int']['output']>;
5855
+ model?: Maybe<Scalars['String']['output']>;
5856
+ outputTokens?: Maybe<Scalars['Int']['output']>;
5857
+ toolCalls?: Maybe<Scalars['Int']['output']>;
5858
+ };
5859
+ /** What the server accepted, echoed back so the UI can show it honestly. */
5860
+ export type ExploreAttachment = {
5861
+ __typename?: 'ExploreAttachment';
5862
+ mimeType: Scalars['String']['output'];
5863
+ name: Scalars['String']['output'];
5864
+ size: Scalars['Int']['output'];
5865
+ /** False when only the filename and type could be used as context. */
5866
+ textExtracted: Scalars['Boolean']['output'];
5867
+ };
5868
+ /** One file a visitor attached as extra context. The browser extracts the text and sends THAT, not the bytes. Two reasons: a 10 MB file is ~13 MB once base64-encoded, which is a poor fit for a GraphQL body behind a gateway; and the harness is text-only by design (it has no webfetch and no file tools), so raw bytes could not be used even if they arrived. `textContent` is therefore null for any format the browser cannot read as text — a PDF or an image contributes its NAME and TYPE to the context and nothing more. The UI says so; do not present these as "read". */
5869
+ export type ExploreAttachmentInput = {
5870
+ mimeType: Scalars['String']['input'];
5871
+ name: Scalars['String']['input'];
5872
+ /** Original size in bytes, for display and server-side limit enforcement. */
5873
+ size: Scalars['Int']['input'];
5874
+ /** Extracted text, already truncated by the client. Null for binary formats. */
5875
+ textContent?: InputMaybe<Scalars['String']['input']>;
5876
+ };
5877
+ /** Everything the `/explore` page needs to render before the first message. `enabled: false` (with an empty product list) means the feature is switched off or the agent is unreachable — the page must not offer the composer. */
5878
+ export type ExploreCatalog = {
5879
+ __typename?: 'ExploreCatalog';
5880
+ captchaRequired: Scalars['Boolean']['output'];
5881
+ enabled: Scalars['Boolean']['output'];
5882
+ examplePrompts: Array<Scalars['String']['output']>;
5883
+ limits: ExploreLimits;
5884
+ products: Array<ExploreProduct>;
5885
+ recaptchaSiteKey?: Maybe<Scalars['String']['output']>;
5886
+ welcomeBody: Scalars['String']['output'];
5887
+ welcomeTitle: Scalars['String']['output'];
5888
+ };
5889
+ /** An explore conversation. `token` is the bearer secret for every subsequent call and is returned ONLY on the request that minted it (or echoed back to the caller that already holds it) — it is never read back out of storage. */
5890
+ export type ExploreConversation = {
5891
+ __typename?: 'ExploreConversation';
5892
+ createdAt: Scalars['DateTime']['output'];
5893
+ id: Scalars['ID']['output'];
5894
+ productSlug?: Maybe<Scalars['String']['output']>;
5895
+ token: Scalars['String']['output'];
5896
+ turnCount: Scalars['Int']['output'];
5897
+ };
5898
+ /** A call-to-action button derived from a cited link. `kind` is one of: CONTACT PARTNERS PRICING SERVICES WAITLIST STORE APP DOCS OTHER. */
5899
+ export type ExploreCta = {
5900
+ __typename?: 'ExploreCta';
5901
+ kind: Scalars['String']['output'];
5902
+ label: Scalars['String']['output'];
5903
+ product?: Maybe<Scalars['String']['output']>;
5904
+ url: Scalars['String']['output'];
5905
+ };
5906
+ /** Server-enforced limits, surfaced so the UI can pre-validate instead of discovering them through an error. */
5907
+ export type ExploreLimits = {
5908
+ __typename?: 'ExploreLimits';
5909
+ historyTurns: Scalars['Int']['output'];
5910
+ maxMessageLength: Scalars['Int']['output'];
5911
+ maxTurnsPerConversation: Scalars['Int']['output'];
5912
+ messagesPerDay: Scalars['Int']['output'];
5913
+ };
5914
+ /** One turn in an explore conversation. USER messages are always COMPLETED on creation; ASSISTANT messages start PENDING and must be polled. */
5915
+ export type ExploreMessage = {
5916
+ __typename?: 'ExploreMessage';
5917
+ /** Human-readable progress lines (e.g. "Searching vibecontrols…"). */
5918
+ activity: Array<Scalars['String']['output']>;
5919
+ /** False when the corpus could not answer the question. A grounded answer always cites something, so an answer with no citable source is the honest signal that we did not have it — the UI shows a distinct "couldn't find this" state rather than presenting a hedged paragraph as if it were an answer. */
5920
+ answered: Scalars['Boolean']['output'];
5921
+ /** Files the visitor attached to THIS turn (user messages only). */
5922
+ attachments: Array<ExploreAttachment>;
5923
+ completedAt?: Maybe<Scalars['DateTime']['output']>;
5924
+ /** Final answer (markdown). Empty string while PENDING/RUNNING. */
5925
+ content: Scalars['String']['output'];
5926
+ conversationId: Scalars['ID']['output'];
5927
+ createdAt: Scalars['DateTime']['output'];
5928
+ ctas: Array<ExploreCta>;
5929
+ errorCode?: Maybe<Scalars['String']['output']>;
5930
+ /** Suggested next questions, derived from what this answer actually covered. Empty until the turn completes, and empty when nothing useful can be derived. */
5931
+ followUps: Array<Scalars['String']['output']>;
5932
+ id: Scalars['ID']['output'];
5933
+ /** Streaming preview while PENDING/RUNNING. */
5934
+ partialContent?: Maybe<Scalars['String']['output']>;
5935
+ references: Array<ExploreReference>;
5936
+ role: ExploreMessageRole;
5937
+ status: ExploreMessageStatus;
5938
+ };
5939
+ export declare enum ExploreMessageRole {
5940
+ Assistant = "ASSISTANT",
5941
+ User = "USER"
5942
+ }
5943
+ export declare enum ExploreMessageStatus {
5944
+ Completed = "COMPLETED",
5945
+ Failed = "FAILED",
5946
+ Pending = "PENDING",
5947
+ Running = "RUNNING"
5948
+ }
5949
+ /** A product the explore agent can answer about, from its baked corpus. */
5950
+ export type ExploreProduct = {
5951
+ __typename?: 'ExploreProduct';
5952
+ name: Scalars['String']['output'];
5953
+ slug: Scalars['String']['output'];
5954
+ tagline?: Maybe<Scalars['String']['output']>;
5955
+ website: Scalars['String']['output'];
5956
+ };
5957
+ /** A page the answer cited. Only links whose origin is in the agent's baked catalog survive — anything else is stripped from the answer text as well. */
5958
+ export type ExploreReference = {
5959
+ __typename?: 'ExploreReference';
5960
+ description?: Maybe<Scalars['String']['output']>;
5961
+ imageUrl?: Maybe<Scalars['String']['output']>;
5962
+ /** 1-based citation number. The answer text carries matching `[n]` markers, so a reader can check the specific claim rather than the whole answer. */
5963
+ index: Scalars['Int']['output'];
5964
+ product?: Maybe<Scalars['String']['output']>;
5965
+ title?: Maybe<Scalars['String']['output']>;
5966
+ url: Scalars['String']['output'];
5967
+ };
5968
+ /** A read-only link to a conversation, so sales or support can send someone a specific answer. `shareToken` is NOT the conversation token. That one authorises posting to the thread, so a URL carrying it would let every recipient continue someone else's conversation and would leak through browser history and referrer headers. This secret only ever opens a read-only view. */
5969
+ export type ExploreShareLink = {
5970
+ __typename?: 'ExploreShareLink';
5971
+ shareToken: Scalars['String']['output'];
5972
+ };
5419
5973
  export type ExportApplicationsFilter = {
5420
5974
  appType?: InputMaybe<AppType>;
5421
5975
  category?: InputMaybe<Scalars['String']['input']>;
@@ -5729,6 +6283,13 @@ export declare enum FeedbackCategory {
5729
6283
  Other = "OTHER",
5730
6284
  ResponseTime = "RESPONSE_TIME"
5731
6285
  }
6286
+ export type FileDsarInput = {
6287
+ notes?: InputMaybe<Scalars['String']['input']>;
6288
+ source: Scalars['String']['input'];
6289
+ subjectEmail: Scalars['String']['input'];
6290
+ subjectId: Scalars['ID']['input'];
6291
+ type: DsarType;
6292
+ };
5732
6293
  /** Available filter options for UI dropdowns */
5733
6294
  export type FilterOptionsResult = {
5734
6295
  __typename?: 'FilterOptionsResult';
@@ -5839,6 +6400,18 @@ export type GrantAppWorkspaceAccessInput = {
5839
6400
  tenantId: Scalars['ID']['input'];
5840
6401
  workspaceId: Scalars['ID']['input'];
5841
6402
  };
6403
+ export type GrantConsentInput = {
6404
+ expiresAt?: InputMaybe<Scalars['DateTime']['input']>;
6405
+ lawfulBasis?: InputMaybe<LawfulBasis>;
6406
+ policyVersion: Scalars['String']['input'];
6407
+ proofPayload?: InputMaybe<Scalars['JSON']['input']>;
6408
+ purpose: ConsentPurpose;
6409
+ source: Scalars['String']['input'];
6410
+ subjectId: Scalars['ID']['input'];
6411
+ subjectType: Scalars['String']['input'];
6412
+ tenantId?: InputMaybe<Scalars['ID']['input']>;
6413
+ workspaceId?: InputMaybe<Scalars['ID']['input']>;
6414
+ };
5842
6415
  export type GrantCreditsInput = {
5843
6416
  amount: Scalars['Float']['input'];
5844
6417
  billingAccountId: Scalars['ID']['input'];
@@ -5860,6 +6433,8 @@ export type GraphQlCallbackInput = {
5860
6433
  endpoint: Scalars['String']['input'];
5861
6434
  /** Name of the GraphQL mutation to call on payment completion Example: updateOrderPaymentStatus */
5862
6435
  mutationName: Scalars['String']['input'];
6436
+ /** Opt in when the callback mutation requires the exact persisted BillingOrder subtotal. Omitted or false preserves the legacy callback document, variables, and signature. */
6437
+ requiresExactSubtotal?: InputMaybe<Scalars['Boolean']['input']>;
5863
6438
  };
5864
6439
  export type Group = {
5865
6440
  __typename?: 'Group';
@@ -6604,13 +7179,23 @@ export type JobApplication = {
6604
7179
  updatedAt: Scalars['DateTime']['output'];
6605
7180
  };
6606
7181
  export type JobApplicationFilterInput = {
7182
+ /** Filter to applications with at least one interview round whose randomly assigned take-home was authored by this owner email. With `roundConfigId`, scoped to that one exact round's assignment; otherwise matches any round. */
7183
+ assignmentOwnerEmail?: InputMaybe<Scalars['String']['input']>;
7184
+ /** Filter that exact configured round by presence and assignment state. Requires `roundConfigId`. */
7185
+ configuredRoundState?: InputMaybe<ConfiguredRoundState>;
7186
+ /** Filter to applications whose email address is shared by more than one application within this filter's other active scope (e.g. within the same `jobPostingId`) — surfaces candidates who accidentally applied twice and so may have received more than one assignment email. Requires `jobPostingId`. */
7187
+ duplicateEmail?: InputMaybe<Scalars['Boolean']['input']>;
6607
7188
  /** Filter by 1-100 unique application IDs. */
6608
7189
  ids?: InputMaybe<Array<Scalars['ID']['input']>>;
7190
+ /** Filter to applications with at least one interview round this interviewer is assigned to review. With `roundConfigId`, scoped to that one exact round; otherwise matches any round. */
7191
+ interviewerId?: InputMaybe<Scalars['ID']['input']>;
6609
7192
  jobPostingId?: InputMaybe<Scalars['String']['input']>;
6610
7193
  /** Filter by position (case-insensitive contains). */
6611
7194
  position?: InputMaybe<Scalars['String']['input']>;
6612
7195
  productId?: InputMaybe<Scalars['String']['input']>;
6613
- /** Filter to applications with at least one interview round in any of these stages. */
7196
+ /** Filter by one exact configured interview round. */
7197
+ roundConfigId?: InputMaybe<Scalars['ID']['input']>;
7198
+ /** Filter round stages. With `roundConfigId`, stages must match that exact configured round. */
6614
7199
  roundStatuses?: InputMaybe<Array<InterviewRoundStatus>>;
6615
7200
  /** Search in name, email, or position. */
6616
7201
  search?: InputMaybe<Scalars['String']['input']>;
@@ -6632,9 +7217,13 @@ export type JobApplicationReplyResult = {
6632
7217
  };
6633
7218
  export declare enum JobApplicationStatus {
6634
7219
  Archived = "ARCHIVED",
7220
+ /** Marks an application as already sent a (bulk) email — set via bulkUpdateApplicationStatus after bulkSendCustomEmail so re-running the send on the same filter doesn't email the same candidates twice. Not set automatically; the admin who sent the email marks it, and can move affected applications back to any other status once the outcome is decided. */
7221
+ EmailSent = "EMAIL_SENT",
6635
7222
  Hired = "HIRED",
6636
7223
  Interview = "INTERVIEW",
6637
7224
  New = "NEW",
7225
+ /** A candidate parked while the team decides whether to keep evaluating them — not a rejection, just a pause. Set and cleared manually by an admin via updateJobApplicationStatus / bulkUpdateApplicationStatus. */
7226
+ OnHold = "ON_HOLD",
6638
7227
  Rejected = "REJECTED",
6639
7228
  Screening = "SCREENING",
6640
7229
  Shortlisted = "SHORTLISTED"
@@ -6980,6 +7569,40 @@ export declare enum LanguageStatus {
6980
7569
  Deprecated = "DEPRECATED",
6981
7570
  Draft = "DRAFT"
6982
7571
  }
7572
+ export declare enum LawfulBasis {
7573
+ Consent = "CONSENT",
7574
+ Contract = "CONTRACT",
7575
+ LegalObligation = "LEGAL_OBLIGATION",
7576
+ LegitimateInterest = "LEGITIMATE_INTEREST",
7577
+ PublicTask = "PUBLIC_TASK",
7578
+ VitalInterest = "VITAL_INTEREST"
7579
+ }
7580
+ export type LegalHold = {
7581
+ __typename?: 'LegalHold';
7582
+ active: Scalars['Boolean']['output'];
7583
+ createdAt: Scalars['DateTime']['output'];
7584
+ id: Scalars['ID']['output'];
7585
+ placedAt: Scalars['DateTime']['output'];
7586
+ placedBy: Scalars['ID']['output'];
7587
+ reason: Scalars['String']['output'];
7588
+ reference?: Maybe<Scalars['String']['output']>;
7589
+ releasedAt?: Maybe<Scalars['DateTime']['output']>;
7590
+ releasedBy?: Maybe<Scalars['ID']['output']>;
7591
+ subjectEmail?: Maybe<Scalars['String']['output']>;
7592
+ subjectId?: Maybe<Scalars['ID']['output']>;
7593
+ updatedAt: Scalars['DateTime']['output'];
7594
+ };
7595
+ export type LegalHoldConnection = {
7596
+ __typename?: 'LegalHoldConnection';
7597
+ hasMore: Scalars['Boolean']['output'];
7598
+ items: Array<LegalHold>;
7599
+ total: Scalars['Int']['output'];
7600
+ };
7601
+ export type LegalHoldFilter = {
7602
+ active?: InputMaybe<Scalars['Boolean']['input']>;
7603
+ subjectEmail?: InputMaybe<Scalars['String']['input']>;
7604
+ subjectId?: InputMaybe<Scalars['ID']['input']>;
7605
+ };
6983
7606
  export type LicenseActivation = {
6984
7607
  __typename?: 'LicenseActivation';
6985
7608
  activatedAt: Scalars['DateTime']['output'];
@@ -7291,7 +7914,7 @@ export type MultiPlatformRecipientInput = {
7291
7914
  /** Root mutation type */
7292
7915
  export type Mutation = {
7293
7916
  __typename?: 'Mutation';
7294
- /** Placeholder field to allow empty Mutation type extension. Must be @shareable since it exists in multiple subgraphs. */
7917
+ /** Placeholder field so the Mutation type can be extended. @shareable because every subgraph declares it. */
7295
7918
  _empty?: Maybe<Scalars['String']['output']>;
7296
7919
  /** Placeholder mutation (extended by modules) @rbac(public: true, scopeType: "global") */
7297
7920
  _placeholder?: Maybe<Scalars['String']['output']>;
@@ -7308,6 +7931,8 @@ export type Mutation = {
7308
7931
  activateSchedule: ScheduledJob;
7309
7932
  /** Activate a subscription's workspace-scoped quotas for a specific workspace. The backend reads quota definitions directly from the subscription plan — the caller cannot forge quota names, limits, or productIds. Called by the UI immediately after a plan/addon purchase instead of calling assignWorkspaceQuota directly on the workspace layer. */
7310
7933
  activateSubscriptionForWorkspace: ActivateSubscriptionForWorkspaceResult;
7934
+ /** Activate a subscription's workspace-scoped quotas against MULTIPLE workspaces in one call — each listed workspace gets the FULL per-workspace quota allotment from the plan (not divided). Bounded by plan.maxWorkspaces: rejects with WORKSPACE_CAP_EXCEEDED if activating the given workspaceIds (counting only ones not already activated) would exceed the cap. Already- activated workspaces in the list are idempotent no-ops. Shares the same underlying activation logic as activateSubscriptionForWorkspace, so mixing calls to both against the same subscription still enforces the cap correctly. */
7935
+ activateSubscriptionForWorkspaces: ActivateSubscriptionForWorkspacesResult;
7311
7936
  /** Activate a suspended tenant */
7312
7937
  activateTenant: Tenant;
7313
7938
  /** Activate a tour schedule */
@@ -7345,8 +7970,6 @@ export type Mutation = {
7345
7970
  /** Add a member to a workspace */
7346
7971
  addWorkspaceMember: WorkspaceMember;
7347
7972
  adjustInventory: InventoryAdjustment;
7348
- /** Adjust a physical product's stock by a signed delta (positive to restock, negative to correct/write off) instead of overwriting the absolute count — keeps a reason for audit, and is the seller-facing entry point so a future upstream inventory-sync integration can post deltas the same way without a breaking change. */
7349
- adjustProductStock: StoreProduct;
7350
7973
  adminMarkAffiliateConversion: AffiliateJourneyEvent;
7351
7974
  /** Apply a billing discount code */
7352
7975
  applyBillingDiscount: BillingDiscount;
@@ -7436,12 +8059,17 @@ export type Mutation = {
7436
8059
  /** Randomize and send a take-home assignment to multiple applications' rounds at once (admin). Each item is processed independently — a candidate already emailed an assignment for that round is skipped unless `force` is set, and one item failing does not abort the rest. */
7437
8060
  bulkRandomizeAndSendAssignment: BulkSendResult;
7438
8061
  bulkResumeSchedules: SchedulerBulkOperationResult;
8062
+ /** Send a custom subject + rich-text message to a bounded batch of applications (admin) — not tied to a shared interview round, so it works across any status or stage (e.g. a progress update to everyone still in the pipeline, or a closing note to everyone not moving forward). No dedup/eligibility gate: re-sending a different message to the same candidates is expected, not blocked. */
8063
+ bulkSendCustomEmail: BulkCustomEmailResult;
7439
8064
  /** Send the same free-text message to multiple candidate rounds at once (admin). Each item is processed independently — a round already messaged is skipped unless `force` is set, and one item failing does not abort the rest. */
7440
8065
  bulkSendRoundMessage: BulkSendResult;
7441
8066
  /** Bulk set user's opt-in/out preference for multiple feature flags. RBAC is scoped to the target workspace via `input.workspaceId`. */
7442
8067
  bulkSetUserFeatureFlagPreferences: Array<UserFeatureFlagPreference>;
8068
+ /** Update status for a batch of applications at once (admin) — e.g. marking everyone a bulk email just went to as EMAIL_SENT so a later bulk-send doesn't re-email the same people, then moving them back to whatever status applies once the outcome is decided. One item failing (e.g. a deleted application) does not abort the rest. */
8069
+ bulkUpdateApplicationStatus: BulkUpdateApplicationStatusResult;
7443
8070
  bulkUpdateSchedules: SchedulerBulkOperationResult;
7444
8071
  bulkUpdateTranslations: BulkOperationResult;
8072
+ cancelDSAR: DsarRequest;
7445
8073
  /** Cancel pending delivery */
7446
8074
  cancelDelivery: Scalars['Boolean']['output'];
7447
8075
  /** Cancel an organization invitation */
@@ -7532,6 +8160,8 @@ export type Mutation = {
7532
8160
  createEditorialCollection: EditorialCollection;
7533
8161
  /** Create a new subscription entitlement (link a plan to a store item) */
7534
8162
  createEntitlement: SubscriptionEntitlement;
8163
+ /** Mint (or return the existing) read-only share secret for a conversation. Requires the conversation token, so only someone already in the thread can create a link to it. */
8164
+ createExploreShareLink: ExploreShareLink;
7535
8165
  createFAQ: Faq;
7536
8166
  /** Create a new feature flag (super admin only) */
7537
8167
  createFeatureFlag: FeatureFlag;
@@ -7615,6 +8245,8 @@ export type Mutation = {
7615
8245
  createScheduleFromTemplate: ScheduledJob;
7616
8246
  createScheduleTemplate: ScheduleTemplate;
7617
8247
  createScheduledJob: ScheduledJob;
8248
+ /** Provision a PHYSICAL-kind developer organization for the seller portal (HealthyBowl and any other physical-goods seller flow). `kind` is not a client-settable input field — using this mutation is what makes the org PHYSICAL, the same way `createDeveloperOrganization` always makes a DIGITAL one. See DeveloperOrgKind. */
8249
+ createSellerOrganization: DeveloperOrganization;
7618
8250
  createShippingAddress: ShippingAddress;
7619
8251
  createShippingMethod: ShippingMethod;
7620
8252
  createShippingRate: ShippingRate;
@@ -7625,6 +8257,7 @@ export type Mutation = {
7625
8257
  createStore: Store;
7626
8258
  /** Create a new store order (called when user clicks checkout). NOTE: Codex P1 on PR #55 — gating is global+create rather than scopeType:"self". The resolver currently forwards client-supplied input.total / input.lineItems to OrderService without server-side re-pricing, so a "self"-gate would let a buyer underprice their own order and harvest entitlements via the billing callback. Buyer checkout flows through the cart path (createCart → addToCart → checkoutCart) which prices server-side. Re-opening this as a buyer-self action requires server-side total rebuild from product ids — tracked as a follow-up. */
7627
8259
  createStoreOrder: StoreOrder;
8260
+ createSubprocessor: Subprocessor;
7628
8261
  /** Link a subscription plan to a store product granting FREE_ACCESS or DISCOUNT. */
7629
8262
  createSubscriptionEntitlement: StoreSubscriptionEntitlement;
7630
8263
  createSupportMessage: SupportMessage;
@@ -7823,6 +8456,8 @@ export type Mutation = {
7823
8456
  deliverMultiPlatformNotification: MultiPlatformDeliveryResult;
7824
8457
  /** Deliver a notification to a single recipient via Channel service. Called by global-notification-svc to deliver through platform adapters. */
7825
8458
  deliverNotification: ChannelDeliveryResult;
8459
+ /** Deliver a push notification to every active device the user has registered for `productSlug`. Resolves devices from the global device registry, groups them by Firebase project, and sends each group through the one channel connection proven to hold that project's credentials. A device whose project cannot be resolved is reported as a failure — it is never sent through a different project. Returns a per-device breakdown; `successCount > 0` means the notification reached at least one device. */
8460
+ deliverPushToUser: UserPushDeliveryResult;
7826
8461
  deprecateApplicationVersion: ApplicationVersion;
7827
8462
  deprecateProduct: StoreProduct;
7828
8463
  /** Detach media from a tour step */
@@ -7853,6 +8488,8 @@ export type Mutation = {
7853
8488
  /** Exchange app token for app-as-user token (Token Exchange flow) */
7854
8489
  exchangeToken: AppAsUserTokenResponse;
7855
8490
  executeJobNow: JobExecution;
8491
+ /** Queue one turn. Returns immediately; poll exploreAgentJob for the answer. */
8492
+ exploreAgentSubmit: ExploreAgentJob;
7856
8493
  /** Export Application records matching the optional filter. */
7857
8494
  exportApplications: DevportalExportJob;
7858
8495
  /** Export AuditLog records matching the optional filter. */
@@ -7875,6 +8512,9 @@ export type Mutation = {
7875
8512
  exportWebhooks: DevportalExportJob;
7876
8513
  /** Feature a review */
7877
8514
  featureAppReview: AppReview;
8515
+ fileDSAR: DsarRequest;
8516
+ /** Seller reports a problem fulfilling a physical order (out of stock, cannot fulfill, wrong address, etc). The resolver verifies organizationId actually owns a physical line item on this order (real evidence in store-svc's own data) — scopeType: "organization" at the gateway only confirms the actor has SOME org context, not that it's this specific one. */
8517
+ flagOrderIssue: OrderIssueFlag;
7878
8518
  freeUpUsage: Scalars['Boolean']['output'];
7879
8519
  generateAPIKey: ApiKeyResult;
7880
8520
  generateAppAsUserToken: AppAsUserTokenResponse;
@@ -7902,6 +8542,7 @@ export type Mutation = {
7902
8542
  grantAppDelegationInternal: AppUserDelegation;
7903
8543
  /** Grant an app access to act on a specific workspace. Idempotent: re-granting an ACTIVE authorization updates its scopes; re-granting a REVOKED one flips it back to ACTIVE and clears the revoke fields. */
7904
8544
  grantAppWorkspaceAccess: AppWorkspaceAuthorization;
8545
+ grantConsent: ConsentRecord;
7905
8546
  grantCredits: CreditTransaction;
7906
8547
  grantDelegation: AppUserDelegation;
7907
8548
  haltRollout: ProductRelease;
@@ -7972,6 +8613,8 @@ export type Mutation = {
7972
8613
  newsletterEraseSubject: NewsletterEraseResult;
7973
8614
  /** Export the subject's newsletter data: subscriber rows, per-list memberships, consent ledger entries, automation enrolments, waitlist entries. */
7974
8615
  newsletterExportSubject: Scalars['JSON']['output'];
8616
+ /** Notify candidates who have more than one application on file (and so may have received more than one take-home assignment email as a result of a since-fixed missing duplicate-email check) that they only need to complete ONE of the assignments they received (admin). Grouped by email address — sends exactly one notice per unique candidate email, never one per duplicate application/round, and re-running this is safe: an email already notified is skipped unless `force` is set. */
8617
+ notifyDuplicateApplicants: DuplicateNoticeResult;
7975
8618
  openCircuitBreaker: CircuitBreakerState;
7976
8619
  /** Pause a subscription */
7977
8620
  pauseDeveloperOrgSubscription: DeveloperOrgSubscription;
@@ -7980,8 +8623,9 @@ export type Mutation = {
7980
8623
  /** Pay an invoice using a payment method */
7981
8624
  payInvoice: Invoice;
7982
8625
  permanentlyDeleteSchedule: Scalars['Boolean']['output'];
8626
+ placeLegalHold: LegalHold;
7983
8627
  prepareSupportAttachmentUpload: SupportAttachmentUploadSession;
7984
- /** Process a refund for an app sale */
8628
+ /** Process a refund for an app sale. Privileged financial mutation: reverses money to a buyer and adjusts the org's pending balance. Gated on `devportal-sale:manage` (the same permission as `retrySaleCreditSync`), with an in-resolver org-ADMIN check as defense-in-depth. */
7985
8629
  processAppSaleRefund: DeveloperOrgSale;
7986
8630
  processPayoutRequest: PayoutRequest;
7987
8631
  /** Process a refund (one-click - calls payment gateway) */
@@ -7999,6 +8643,8 @@ export type Mutation = {
7999
8643
  publishApplication: Application;
8000
8644
  /** Developer action: submit a draft (or rejected) version for platform review. Status becomes pending_review. The store is NOT updated until an admin approves. */
8001
8645
  publishApplicationVersion: ApplicationVersion;
8646
+ /** Publish ONE curated catalog node version (from the fluidgrids-nodes repo) to every enabled sandbox provider — the same PublishOrchestrator the devportal path uses, so the two cannot drift. That drift is not hypothetical: the catalog previously had no publish trigger at all, so nodes were built and pinned by hand and 14 of 31 prod-bound nodes ended up running code older than fluidgrids-nodes main. One entrypoint, two triggers (devportal publish, catalog CI) is the fix. NOT actor-authenticated: the caller is CI, not a platform user or app, so this verifies a shared secret in the resolver (checked against DEVPORTAL_CALLBACK_SECRET, or CALLBACK_SECRET as shipped by the Secrets Manager bundle) exactly as reportNodeSandboxBuildStatus does. Sent as an argument rather than a header because global-public-gateway forwards only a fixed header allowlist to subgraphs. `zipUrl` must be fetchable by this service — CI uploads the packaged node and passes a presigned URL. `isFirstPublish` tells the orchestrator whether this node type has ever been built before, which is what lets it annotate a provider that cannot self-onboard (Cloudflare) instead of reporting a mystery failure. Defaults to false: a catalog node already running on Cloudflare has a Durable Object class, so only a genuinely new node should pass true. Returns a JSON array of per-provider outcomes so CI can log them and fail the job when nothing could build. */
8647
+ publishCatalogNodeVersion: Scalars['JSON']['output'];
8002
8648
  publishFAQ: Faq;
8003
8649
  publishKnowledgeBaseArticle: KnowledgeBaseArticle;
8004
8650
  publishProduct: StoreProduct;
@@ -8030,8 +8676,12 @@ export type Mutation = {
8030
8676
  recordBounce: NewsletterBounce;
8031
8677
  recordComplaint: NewsletterComplaint;
8032
8678
  recordConsent: NewsletterConsent;
8679
+ /** Service-to-service only: records that global-store-svc successfully registered this address with a carrier, on behalf of the given org. actorId/actorType identify the real end user who requested the registration (for the audit trail) — the caller is responsible for verifying that actor's access via assertDeveloperOrgAccess first. */
8680
+ recordDeveloperOrgPickupAddress: DeveloperOrgPickupAddress;
8033
8681
  recordDownload: ProductDownload;
8034
8682
  recordEarningEntry: EarningsEntry;
8683
+ /** Record that a visitor followed a link the answer offered. Fire-and-forget from the browser: a click must never be blocked or delayed by analytics, so this reports `recorded: false` rather than throwing when the click cannot be attributed. */
8684
+ recordExploreClick: RecordExploreClickResult;
8035
8685
  /** Record a SETTLED (or pending/failed) external/manual Charge + Transaction on behalf of a workspace/org by explicit id. Service/super_admin only — routed through the internal gateway. Bypasses the Stripe/Razorpay sync path. */
8036
8686
  recordExternalSettlement: ExternalSettlementResult;
8037
8687
  recordFAQView: Faq;
@@ -8053,7 +8703,9 @@ export type Mutation = {
8053
8703
  regenerateAffiliateCode: AffiliateCode;
8054
8704
  /** Register (or re-register) an approved application with global-auth-svc so it can issue OAuth clients, API keys, and delegations. Safe to call more than once — skips if appId is already set. */
8055
8705
  registerAppWithAuthService: Application;
8056
- /** Register (or refresh) a push-notification device token for the current user. Upserts on the OS-issued tokensafe to call on every app launch and on every token-refresh event. `platform` is one of "ios", "android", "web". `metadata` is optional free-form context (app version, OS version). */
8706
+ /** Register a seller's real address as a new pickup/warehouse location on a carrier account (currently only "shiprocket" supports this), so it becomes a real, bookable pickup point instead of just an unregistered pincode a seller typed in. This is a real, permanent write to the carrier's accountnot a local list we maintain; any address the carrier itself accepts is supported, we never hardcode which pincodes are valid. scopeType: "self" — same authenticated-actor bar as carrierPickupLocations. This doesn't touch a store-svc-owned resource with an ownership row to check against (it writes directly to the carrier account), so there's no org-ownership verification here — a known trust-boundary gap, same shape as flagOrderIssue's caller-supplied organizationId. */
8707
+ registerCarrierPickupLocation: CarrierPickupLocation;
8708
+ /** Register (or refresh) a push-notification device token for the current user. Upserts on the OS-issued token — safe to call on every app launch and on every token-refresh event. `platform` is one of "ios", "android", "web". `productSlug` names the product whose install minted the token; the server derives the Firebase project from it, and an unmapped product is rejected outright rather than stored as an undeliverable row. `metadata` is optional free-form context (app version, OS version). Deliberately takes no `fcmProject` and no identity argument: the project is derived server-side so a client cannot file a device under a project that cannot reach it, and the owner is always the calling actor. */
8057
8709
  registerDeviceToken: DeviceToken;
8058
8710
  registerProductAsset: ProductAsset;
8059
8711
  /** Register a public key for authentication */
@@ -8077,6 +8729,8 @@ export type Mutation = {
8077
8729
  rejectPublisher: Publisher;
8078
8730
  rejectReview: ProductReview;
8079
8731
  rejectWaitlist: NewsletterWaitlist;
8732
+ releaseLegalHold: LegalHold;
8733
+ releaseSuppression: SuppressionEntry;
8080
8734
  removeAgentSkills: AgentProfile;
8081
8735
  /** Remove the license configuration for an application */
8082
8736
  removeAppLicense: Scalars['Boolean']['output'];
@@ -8084,6 +8738,8 @@ export type Mutation = {
8084
8738
  removeAppsFromCollection: AppCollection;
8085
8739
  /** Remove a member from an organization */
8086
8740
  removeDeveloperOrgMember: Scalars['Boolean']['output'];
8741
+ /** Stop using this pickup address for the organization. Only removes our own record — carriers like Shiprocket have no delete API, so the address may still exist on the carrier's account, it just won't be used for this org's shipments anymore. If the removed address was the default and others remain, the most recently added one is promoted to default. */
8742
+ removeDeveloperOrgPickupAddress: Scalars['Boolean']['output'];
8087
8743
  /** Remove an item from the cart */
8088
8744
  removeFromCart: CartPayload;
8089
8745
  /** Remove a waitlist entry entirely (admin operation). */
@@ -8140,18 +8796,20 @@ export type Mutation = {
8140
8796
  replaceStoreProductTags: Array<StoreProductTagAssignment>;
8141
8797
  /** Send an email reply to a contact inquiry. The reply is sent via the notification pipeline (notification-svc → channel-svc → email provider). Auto-updates status to REVIEWED. */
8142
8798
  replyToContactInquiry: ContactInquiryReplyResult;
8143
- /** Send a branded email reply to an applicant (admin). Delivered to the applicant's email via the notification pipeline. Does not change status — the admin controls status explicitly. */
8799
+ /** Send a branded email reply to an applicant (admin). Delivered to the applicant's email via the notification pipeline. Does not change status — the admin controls status explicitly. `message` is rich-text HTML from the admin's editor; it is sanitized to an allowlist before it reaches the email. */
8144
8800
  replyToJobApplication: JobApplicationReplyResult;
8145
8801
  replyToReview: ProductReviewReply;
8146
8802
  /** Report a review */
8147
8803
  reportAppReview: AppReviewReport;
8148
- /** Webhook callback from the tool-sandbox-cf-proxy "Deploy Devportal Node" CI pipeline (BOFF-5968) reporting the outcome of a NODE version's sandbox image build+deploy. Not developer-facing, and NOT actor-authenticated — the caller is CI, not a platform user/app, so this verifies a shared secret (the `secret` argument, checked against DEVPORTAL_CALLBACK_SECRET) inside the resolver itself rather than going through the actor/RBAC system. Sent as a mutation argument rather than a header because global-public-gateway only forwards a fixed header allowlist to subgraphs and drops custom headers. Persists onto ApplicationVersion.metadata.sandboxBuildStatus (READY/FAILED), which is what gates "Test in Workflow" in the devportal UI. */
8804
+ /** Webhook callback from the tool-sandbox-cf-proxy "Deploy Devportal Node" CI pipeline (BOFF-5968) reporting the outcome of a NODE version's sandbox image build+deploy. Not developer-facing, and NOT actor-authenticated — the caller is CI, not a platform user/app, so this verifies a shared secret (the `secret` argument, checked against DEVPORTAL_CALLBACK_SECRET, or CALLBACK_SECRET as shipped by the Secrets Manager bundle) inside the resolver itself rather than going through the actor/RBAC system. Sent as a mutation argument rather than a header because global-public-gateway only forwards a fixed header allowlist to subgraphs and drops custom headers. Persists onto ApplicationVersion.metadata.sandboxBuildStatus (READY/FAILED), which is what gates "Test in Workflow" in the devportal UI. */
8149
8805
  reportNodeSandboxBuildStatus: Scalars['Boolean']['output'];
8150
8806
  /** Reprocess a failed webhook event */
8151
8807
  reprocessWebhook: WebhookProcessingResult;
8152
8808
  requestBillingPayout: PayoutRequest;
8153
8809
  /** Request a credit withdrawal. Converts purchased + earned credits to a PayoutRequest denominated in USD at the current credit rate. Uses the specified payout account for payment. */
8154
8810
  requestCreditWithdrawal: PayoutRequest;
8811
+ /** Issue a magic-link identity challenge and email it to the subject. The request parks in IDENTITY_VERIFICATION_PENDING until the token comes back through verifyDSARIdentity. */
8812
+ requestDSARIdentityVerification: DsarRequest;
8155
8813
  /** Request a manual payout (devportal legacy alias) */
8156
8814
  requestDeveloperOrgPayout: DeveloperOrgPayout;
8157
8815
  /** Request return for an order (owner only — ownership asserted in service) */
@@ -8183,6 +8841,8 @@ export type Mutation = {
8183
8841
  resolveContextWidgetConversation: ContextWidgetConversationPayload;
8184
8842
  resolveDLQEntry: Scalars['Boolean']['output'];
8185
8843
  resolveInventoryAlert: InventoryAlert;
8844
+ /** Mark a seller-reported issue flag resolved. Allowed for a super-admin (no organizationId needed) or the org that raised the flag (organizationId must match) — enforced in the resolver. */
8845
+ resolveOrderIssueFlag: OrderIssueFlag;
8186
8846
  resolveSupportTicket: SupportTicket;
8187
8847
  /** Respond to a review (developer) */
8188
8848
  respondToAppReview: AppReview;
@@ -8198,11 +8858,16 @@ export type Mutation = {
8198
8858
  resumeDeveloperOrgSubscription: DeveloperOrgSubscription;
8199
8859
  resumeSLA: SupportTicket;
8200
8860
  resumeScheduledJob: ScheduledJob;
8861
+ /** Retire one push registration the transport has reported permanently dead. Called by global-channel-svc after a send fails with a code that means the token itself is gone: FCM's `UNREGISTERED`, or an `INVALID_ARGUMENT` whose message names the registration token. Without it the registry accumulates tokens no push can ever reach, and every later fan-out keeps paying for uninstalled apps. Keyed on the token — that is what the transport rejected, it is unique in this registry, and a service acting on a transport report has no calling actor to scope by. That is precisely why this is service-gated rather than `scopeType: "self"`. `errorCode` is recorded for traceability; the delivery side owns the policy of which codes are terminal (a routing or credential fault must never retire a device — retiring one hides the misconfiguration and destroys the evidence). Returns true if a registration was removed. */
8862
+ retirePushDeviceInternal: Scalars['Boolean']['output'];
8863
+ retireSubprocessor: Subprocessor;
8201
8864
  /** Manually retry GraphQL callback for a failed billing order (admin only) Useful for retrying after fixing issues in external service */
8202
8865
  retryBillingOrderCallback: RetryBillingOrderCallbackResponse;
8203
8866
  /** Retry a failed delivery attempt */
8204
8867
  retryDelivery: MessageDeliveryResult;
8205
8868
  retryImportJob: ImportJob;
8869
+ /** Retry invoice generation for a successful transaction that never got an invoice recorded (a transient Zoho Books/Stripe Invoicing failure at payment time). transactionId is the transaction that has no invoiceNumber in its metadata yet — surfaced via getTransactionsByBillingAccount / getTransaction, not the invoice list (which only shows transactions that already have an invoice). */
8870
+ retryInvoiceGeneration: Invoice;
8206
8871
  retryJobExecution: JobExecution;
8207
8872
  /** Retry a failed payout */
8208
8873
  retryPayout: DeveloperOrgPayout;
@@ -8260,6 +8925,8 @@ export type Mutation = {
8260
8925
  seedBuildmyiqUserTours: SeedBuildmyiqUserToursResult;
8261
8926
  /** Overwrite the built-in CollabKin user-facing dashboard tour from the service-owned seed file. */
8262
8927
  seedCollabkinUserTours: SeedCollabkinUserToursResult;
8928
+ /** Overwrite the built-in CoolAndLovely user-facing Discover tour from the service-owned seed file. */
8929
+ seedCoolAndLovelyUserTours: SeedCoolAndLovelyUserToursResult;
8263
8930
  /** Seed default feature flags across all products. Creates all default flags if they don't already exist. Returns the count of newly created flags. Skips flags that already exist (by key uniqueness). */
8264
8931
  seedDefaultFeatureFlags: Scalars['Int']['output'];
8265
8932
  /** Bulk create default shortcuts for a product */
@@ -8274,6 +8941,8 @@ export type Mutation = {
8274
8941
  seedVibeControlsUserTours: SeedVibeControlsUserToursResult;
8275
8942
  selectVariantWinner: NewsletterVariant;
8276
8943
  sendContextWidgetMessage: SendContextWidgetMessagePayload;
8944
+ /** Ask the explore agent a question (public, no authentication). Rate-limited per IP, capped globally per day, and optionally reCAPTCHA v3 gated. Returns immediately with a PENDING/RUNNING assistant message to poll. */
8945
+ sendExploreMessage: SendExploreMessageResult;
8277
8946
  sendMagicLink: MagicLinkSendResult;
8278
8947
  /** Send a message to a channel */
8279
8948
  sendMessage: MessageDeliveryResult;
@@ -8292,6 +8961,8 @@ export type Mutation = {
8292
8961
  serviceRequestPayout: PayoutRequest;
8293
8962
  /** Resolve (or create) a canonical default PayoutAccount for a publisher/org owner so a service caller can obtain a `payoutAccountId` for `serviceRequestPayout` without the user-only `addPayoutAccount` path. Idempotent / self-healing: repeated calls return the SAME account (no duplicates). Prefers an existing user-registered account; otherwise creates a placeholder that can be referenced but against which NO money moves until the user completes real payment setup. Service/super_admin only — internal gateway. */
8294
8963
  serviceResolvePayoutAccount: PayoutAccount;
8964
+ /** Mirror a billing PayoutRequest status change back onto the DeveloperOrgPayout it originated from (BOFF-7192). Billing owns the payout system-of-record and is where admins approve/reject/mark-paid; this keeps devportal's own payout history in sync so it doesn't stay stuck showing a stale status forever. Looked up by sourceIdempotencyKey ("devportal:payout:<id>", set when the request was originally mirrored to billing) — a no-op if the key isn't a devportal-originated one, or no matching local payout exists. Service/super_admin only — internal gateway. */
8965
+ serviceSyncPayoutStatus?: Maybe<DeveloperOrgPayout>;
8295
8966
  setAgentAway: AgentProfile;
8296
8967
  setAgentOffline: AgentProfile;
8297
8968
  setAgentOnline: AgentProfile;
@@ -8305,6 +8976,8 @@ export type Mutation = {
8305
8976
  /** Set a payment method as default */
8306
8977
  setDefaultPaymentMethod: DeveloperOrgPaymentMethod;
8307
8978
  setDefaultPayoutAccount: PayoutAccount;
8979
+ /** Mark one of the organization's pickup addresses as the active one used for carrier rate quoting and shipment booking. Unsets any other default. */
8980
+ setDefaultPickupAddress: DeveloperOrgPickupAddress;
8308
8981
  setEntitlementSeatLimit: ProductEntitlement;
8309
8982
  /** Subscribe or unsubscribe the current user from a notification topic */
8310
8983
  setNotificationTopicSubscription: NotificationTopicSubscription;
@@ -8361,6 +9034,7 @@ export type Mutation = {
8361
9034
  supportEraseSubject: SupportEraseResult;
8362
9035
  /** Export the subject's support data: tickets they raised, messages they authored, contact inquiries, CSAT surveys submitted. Called exclusively by the global-tenant-svc DSAR orchestrator (actorType=service) via global-int-gateway. */
8363
9036
  supportExportSubject: Scalars['JSON']['output'];
9037
+ suppressIdentifier: SuppressionEntry;
8364
9038
  /** Suspend an installation (admin) */
8365
9039
  suspendAppInstallation: AppInstallation;
8366
9040
  /** Suspend a member */
@@ -8424,7 +9098,7 @@ export type Mutation = {
8424
9098
  unpublishKnowledgeBaseArticle: KnowledgeBaseArticle;
8425
9099
  /** Unpublish a tour (change status back to DRAFT) */
8426
9100
  unpublishTour: Tour;
8427
- /** Unregister a device token (e.g. on logout or notification opt-out). Returns true if a token was removed. */
9101
+ /** Unregister a device token (e.g. on logout or notification opt-out). Pass `productSlug` to unsubscribe only that product's install, so signing out of one product does not silently unsubscribe the others sharing the device. Returns true if a token was removed. */
8428
9102
  unregisterDeviceToken: Scalars['Boolean']['output'];
8429
9103
  /** Revoke the public link for a shared WORKFLOW app, setting visibility back to PRIVATE. Only the owning developer can call this. */
8430
9104
  unshareWorkflow: Application;
@@ -8472,6 +9146,7 @@ export type Mutation = {
8472
9146
  updateCoupon: Coupon;
8473
9147
  /** Update the currently authenticated user's own profile. */
8474
9148
  updateCurrentUserProfile: User;
9149
+ updateDSARStatus: DsarRequest;
8475
9150
  updateDelegation: AppUserDelegation;
8476
9151
  /** Update a member's role */
8477
9152
  updateDeveloperOrgMemberRole: DeveloperOrgMember;
@@ -8572,6 +9247,7 @@ export type Mutation = {
8572
9247
  updateStore: Store;
8573
9248
  /** Update order payment status (called by billing service callback) This is a PUBLIC mutation called by the billing service after payment completion */
8574
9249
  updateStoreOrderPaymentStatus: UpdateStoreOrderPaymentStatusResponse;
9250
+ updateSubprocessor: Subprocessor;
8575
9251
  updateSubscriber: NewsletterSubscriber;
8576
9252
  /** Update access type or discount percentage on an existing subscription entitlement. */
8577
9253
  updateSubscriptionEntitlement: StoreSubscriptionEntitlement;
@@ -8635,6 +9311,8 @@ export type Mutation = {
8635
9311
  validateTokens: TokenValidationResponse;
8636
9312
  /** Verify a billing payment method by charging a small amount (e.g., ₹1) that will be refunded */
8637
9313
  verifyBillingPaymentMethod: VerifyPaymentMethodResponse;
9314
+ /** Verify the subject's identity. `identityProof` must carry a `method` of `magic_link` (with `token`), `idp_step_up` (with `assertion`), or `support_override` (super_admin only, with `reason`). The claim is validated — it is not taken at face value. */
9315
+ verifyDSARIdentity: DsarRequest;
8638
9316
  verifyEmail: EmailVerificationResult;
8639
9317
  verifyMFA: AuthResult;
8640
9318
  /** Verify passkey authentication and login */
@@ -8650,6 +9328,7 @@ export type Mutation = {
8650
9328
  voidInvoice: Invoice;
8651
9329
  /** Vote on a review (helpful/not helpful) */
8652
9330
  voteOnAppReview: AppReviewVote;
9331
+ withdrawConsent: ConsentRecord;
8653
9332
  };
8654
9333
  /** Root mutation type */
8655
9334
  export type MutationAcceptDeveloperOrgInvitationArgs = {
@@ -8687,6 +9366,12 @@ export type MutationActivateSubscriptionForWorkspaceArgs = {
8687
9366
  workspaceId: Scalars['ID']['input'];
8688
9367
  };
8689
9368
  /** Root mutation type */
9369
+ export type MutationActivateSubscriptionForWorkspacesArgs = {
9370
+ billingAccountId: Scalars['ID']['input'];
9371
+ subscriptionId: Scalars['ID']['input'];
9372
+ workspaceIds: Array<Scalars['ID']['input']>;
9373
+ };
9374
+ /** Root mutation type */
8690
9375
  export type MutationActivateTenantArgs = {
8691
9376
  id: Scalars['ID']['input'];
8692
9377
  };
@@ -8797,12 +9482,6 @@ export type MutationAdjustInventoryArgs = {
8797
9482
  input: AdjustInventoryInput;
8798
9483
  };
8799
9484
  /** Root mutation type */
8800
- export type MutationAdjustProductStockArgs = {
8801
- delta: Scalars['Int']['input'];
8802
- id: Scalars['ID']['input'];
8803
- reason?: InputMaybe<Scalars['String']['input']>;
8804
- };
8805
- /** Root mutation type */
8806
9485
  export type MutationAdminMarkAffiliateConversionArgs = {
8807
9486
  input: RecordAffiliateConversionInput;
8808
9487
  };
@@ -9076,6 +9755,10 @@ export type MutationBulkResumeSchedulesArgs = {
9076
9755
  filter: BulkOperationFilter;
9077
9756
  };
9078
9757
  /** Root mutation type */
9758
+ export type MutationBulkSendCustomEmailArgs = {
9759
+ input: BulkSendCustomEmailInput;
9760
+ };
9761
+ /** Root mutation type */
9079
9762
  export type MutationBulkSendRoundMessageArgs = {
9080
9763
  input: BulkSendRoundMessageInput;
9081
9764
  };
@@ -9084,6 +9767,10 @@ export type MutationBulkSetUserFeatureFlagPreferencesArgs = {
9084
9767
  input: BulkSetUserFeatureFlagPreferenceInput;
9085
9768
  };
9086
9769
  /** Root mutation type */
9770
+ export type MutationBulkUpdateApplicationStatusArgs = {
9771
+ input: BulkUpdateApplicationStatusInput;
9772
+ };
9773
+ /** Root mutation type */
9087
9774
  export type MutationBulkUpdateSchedulesArgs = {
9088
9775
  filter: BulkOperationFilter;
9089
9776
  updates: UpdateScheduledJobInput;
@@ -9093,6 +9780,11 @@ export type MutationBulkUpdateTranslationsArgs = {
9093
9780
  translations: Array<BulkTranslationInput>;
9094
9781
  };
9095
9782
  /** Root mutation type */
9783
+ export type MutationCancelDsarArgs = {
9784
+ id: Scalars['ID']['input'];
9785
+ reason?: InputMaybe<Scalars['String']['input']>;
9786
+ };
9787
+ /** Root mutation type */
9096
9788
  export type MutationCancelDeliveryArgs = {
9097
9789
  attemptId: Scalars['ID']['input'];
9098
9790
  };
@@ -9345,6 +10037,10 @@ export type MutationCreateEntitlementArgs = {
9345
10037
  input: CreateEntitlementInput;
9346
10038
  };
9347
10039
  /** Root mutation type */
10040
+ export type MutationCreateExploreShareLinkArgs = {
10041
+ conversationToken: Scalars['String']['input'];
10042
+ };
10043
+ /** Root mutation type */
9348
10044
  export type MutationCreateFaqArgs = {
9349
10045
  input: CreateFaqInput;
9350
10046
  };
@@ -9578,6 +10274,10 @@ export type MutationCreateScheduledJobArgs = {
9578
10274
  input: CreateScheduledJobInput;
9579
10275
  };
9580
10276
  /** Root mutation type */
10277
+ export type MutationCreateSellerOrganizationArgs = {
10278
+ input: CreateDeveloperOrganizationInput;
10279
+ };
10280
+ /** Root mutation type */
9581
10281
  export type MutationCreateShippingAddressArgs = {
9582
10282
  input: CreateShippingAddressInput;
9583
10283
  };
@@ -9610,6 +10310,10 @@ export type MutationCreateStoreOrderArgs = {
9610
10310
  input: CreateStoreOrderInput;
9611
10311
  };
9612
10312
  /** Root mutation type */
10313
+ export type MutationCreateSubprocessorArgs = {
10314
+ input: SubprocessorInput;
10315
+ };
10316
+ /** Root mutation type */
9613
10317
  export type MutationCreateSubscriptionEntitlementArgs = {
9614
10318
  input: StoreSubscriptionEntitlementInput;
9615
10319
  storeProductId: Scalars['ID']['input'];
@@ -10122,6 +10826,10 @@ export type MutationDeliverNotificationArgs = {
10122
10826
  input: ChannelDeliveryInput;
10123
10827
  };
10124
10828
  /** Root mutation type */
10829
+ export type MutationDeliverPushToUserArgs = {
10830
+ input: UserPushDeliveryInput;
10831
+ };
10832
+ /** Root mutation type */
10125
10833
  export type MutationDeprecateApplicationVersionArgs = {
10126
10834
  id: Scalars['ID']['input'];
10127
10835
  };
@@ -10219,6 +10927,10 @@ export type MutationExecuteJobNowArgs = {
10219
10927
  id: Scalars['ID']['input'];
10220
10928
  };
10221
10929
  /** Root mutation type */
10930
+ export type MutationExploreAgentSubmitArgs = {
10931
+ input: ExploreAgentSubmitInput;
10932
+ };
10933
+ /** Root mutation type */
10222
10934
  export type MutationExportApplicationsArgs = {
10223
10935
  filter?: InputMaybe<ExportApplicationsFilter>;
10224
10936
  format: DevportalExportFormat;
@@ -10273,6 +10985,17 @@ export type MutationFeatureAppReviewArgs = {
10273
10985
  id: Scalars['ID']['input'];
10274
10986
  };
10275
10987
  /** Root mutation type */
10988
+ export type MutationFileDsarArgs = {
10989
+ input: FileDsarInput;
10990
+ };
10991
+ /** Root mutation type */
10992
+ export type MutationFlagOrderIssueArgs = {
10993
+ category: OrderIssueCategory;
10994
+ note?: InputMaybe<Scalars['String']['input']>;
10995
+ orderId: Scalars['ID']['input'];
10996
+ organizationId: Scalars['ID']['input'];
10997
+ };
10998
+ /** Root mutation type */
10276
10999
  export type MutationFreeUpUsageArgs = {
10277
11000
  billingAccountId: Scalars['ID']['input'];
10278
11001
  description?: InputMaybe<Scalars['String']['input']>;
@@ -10349,6 +11072,10 @@ export type MutationGrantAppWorkspaceAccessArgs = {
10349
11072
  input: GrantAppWorkspaceAccessInput;
10350
11073
  };
10351
11074
  /** Root mutation type */
11075
+ export type MutationGrantConsentArgs = {
11076
+ input: GrantConsentInput;
11077
+ };
11078
+ /** Root mutation type */
10352
11079
  export type MutationGrantCreditsArgs = {
10353
11080
  input: GrantCreditsInput;
10354
11081
  };
@@ -10527,6 +11254,10 @@ export type MutationNewsletterExportSubjectArgs = {
10527
11254
  subjectId: Scalars['ID']['input'];
10528
11255
  };
10529
11256
  /** Root mutation type */
11257
+ export type MutationNotifyDuplicateApplicantsArgs = {
11258
+ input: NotifyDuplicateApplicantsInput;
11259
+ };
11260
+ /** Root mutation type */
10530
11261
  export type MutationOpenCircuitBreakerArgs = {
10531
11262
  scope: Scalars['String']['input'];
10532
11263
  scopeValue: Scalars['String']['input'];
@@ -10555,6 +11286,10 @@ export type MutationPermanentlyDeleteScheduleArgs = {
10555
11286
  id: Scalars['ID']['input'];
10556
11287
  };
10557
11288
  /** Root mutation type */
11289
+ export type MutationPlaceLegalHoldArgs = {
11290
+ input: PlaceLegalHoldInput;
11291
+ };
11292
+ /** Root mutation type */
10558
11293
  export type MutationPrepareSupportAttachmentUploadArgs = {
10559
11294
  input: PrepareSupportAttachmentUploadInput;
10560
11295
  };
@@ -10603,6 +11338,14 @@ export type MutationPublishApplicationVersionArgs = {
10603
11338
  id: Scalars['ID']['input'];
10604
11339
  };
10605
11340
  /** Root mutation type */
11341
+ export type MutationPublishCatalogNodeVersionArgs = {
11342
+ isFirstPublish?: InputMaybe<Scalars['Boolean']['input']>;
11343
+ nodeType: Scalars['String']['input'];
11344
+ secret: Scalars['String']['input'];
11345
+ version: Scalars['String']['input'];
11346
+ zipUrl: Scalars['String']['input'];
11347
+ };
11348
+ /** Root mutation type */
10606
11349
  export type MutationPublishFaqArgs = {
10607
11350
  id: Scalars['ID']['input'];
10608
11351
  };
@@ -10705,6 +11448,13 @@ export type MutationRecordConsentArgs = {
10705
11448
  input: RecordConsentInput;
10706
11449
  };
10707
11450
  /** Root mutation type */
11451
+ export type MutationRecordDeveloperOrgPickupAddressArgs = {
11452
+ actorId: Scalars['ID']['input'];
11453
+ actorType?: InputMaybe<Scalars['String']['input']>;
11454
+ input: RecordPickupAddressInput;
11455
+ organizationId: Scalars['ID']['input'];
11456
+ };
11457
+ /** Root mutation type */
10708
11458
  export type MutationRecordDownloadArgs = {
10709
11459
  ipAddress?: InputMaybe<Scalars['String']['input']>;
10710
11460
  productId: Scalars['String']['input'];
@@ -10715,6 +11465,10 @@ export type MutationRecordEarningEntryArgs = {
10715
11465
  input: RecordEarningEntryInput;
10716
11466
  };
10717
11467
  /** Root mutation type */
11468
+ export type MutationRecordExploreClickArgs = {
11469
+ input: RecordExploreClickInput;
11470
+ };
11471
+ /** Root mutation type */
10718
11472
  export type MutationRecordExternalSettlementArgs = {
10719
11473
  input: RecordExternalSettlementInput;
10720
11474
  };
@@ -10768,10 +11522,15 @@ export type MutationRegisterAppWithAuthServiceArgs = {
10768
11522
  id: Scalars['ID']['input'];
10769
11523
  };
10770
11524
  /** Root mutation type */
11525
+ export type MutationRegisterCarrierPickupLocationArgs = {
11526
+ input: RegisterCarrierPickupLocationInput;
11527
+ };
11528
+ /** Root mutation type */
10771
11529
  export type MutationRegisterDeviceTokenArgs = {
10772
11530
  deviceId: Scalars['String']['input'];
10773
11531
  metadata?: InputMaybe<Scalars['JSONObject']['input']>;
10774
11532
  platform: Scalars['String']['input'];
11533
+ productSlug?: InputMaybe<Scalars['String']['input']>;
10775
11534
  token: Scalars['String']['input'];
10776
11535
  };
10777
11536
  /** Root mutation type */
@@ -10848,6 +11607,14 @@ export type MutationRejectWaitlistArgs = {
10848
11607
  input: RejectWaitlistInput;
10849
11608
  };
10850
11609
  /** Root mutation type */
11610
+ export type MutationReleaseLegalHoldArgs = {
11611
+ id: Scalars['ID']['input'];
11612
+ };
11613
+ /** Root mutation type */
11614
+ export type MutationReleaseSuppressionArgs = {
11615
+ input: ReleaseSuppressionInput;
11616
+ };
11617
+ /** Root mutation type */
10851
11618
  export type MutationRemoveAgentSkillsArgs = {
10852
11619
  id: Scalars['ID']['input'];
10853
11620
  skills: Array<Scalars['String']['input']>;
@@ -10866,6 +11633,10 @@ export type MutationRemoveDeveloperOrgMemberArgs = {
10866
11633
  id: Scalars['ID']['input'];
10867
11634
  };
10868
11635
  /** Root mutation type */
11636
+ export type MutationRemoveDeveloperOrgPickupAddressArgs = {
11637
+ id: Scalars['ID']['input'];
11638
+ };
11639
+ /** Root mutation type */
10869
11640
  export type MutationRemoveFromCartArgs = {
10870
11641
  cartItemId: Scalars['String']['input'];
10871
11642
  };
@@ -11047,6 +11818,10 @@ export type MutationRequestCreditWithdrawalArgs = {
11047
11818
  input: RequestCreditWithdrawalInput;
11048
11819
  };
11049
11820
  /** Root mutation type */
11821
+ export type MutationRequestDsarIdentityVerificationArgs = {
11822
+ id: Scalars['ID']['input'];
11823
+ };
11824
+ /** Root mutation type */
11050
11825
  export type MutationRequestDeveloperOrgPayoutArgs = {
11051
11826
  organizationId: Scalars['ID']['input'];
11052
11827
  paymentMethodId: Scalars['ID']['input'];
@@ -11134,6 +11909,11 @@ export type MutationResolveInventoryAlertArgs = {
11134
11909
  alertId: Scalars['ID']['input'];
11135
11910
  };
11136
11911
  /** Root mutation type */
11912
+ export type MutationResolveOrderIssueFlagArgs = {
11913
+ id: Scalars['ID']['input'];
11914
+ organizationId?: InputMaybe<Scalars['ID']['input']>;
11915
+ };
11916
+ /** Root mutation type */
11137
11917
  export type MutationResolveSupportTicketArgs = {
11138
11918
  id: Scalars['ID']['input'];
11139
11919
  resolution?: InputMaybe<Scalars['String']['input']>;
@@ -11180,6 +11960,16 @@ export type MutationResumeScheduledJobArgs = {
11180
11960
  id: Scalars['ID']['input'];
11181
11961
  };
11182
11962
  /** Root mutation type */
11963
+ export type MutationRetirePushDeviceInternalArgs = {
11964
+ errorCode: Scalars['String']['input'];
11965
+ token: Scalars['String']['input'];
11966
+ };
11967
+ /** Root mutation type */
11968
+ export type MutationRetireSubprocessorArgs = {
11969
+ id: Scalars['ID']['input'];
11970
+ reason?: InputMaybe<Scalars['String']['input']>;
11971
+ };
11972
+ /** Root mutation type */
11183
11973
  export type MutationRetryBillingOrderCallbackArgs = {
11184
11974
  billingAccountId: Scalars['ID']['input'];
11185
11975
  orderId: Scalars['ID']['input'];
@@ -11193,6 +11983,11 @@ export type MutationRetryImportJobArgs = {
11193
11983
  id: Scalars['ID']['input'];
11194
11984
  };
11195
11985
  /** Root mutation type */
11986
+ export type MutationRetryInvoiceGenerationArgs = {
11987
+ billingAccountId: Scalars['ID']['input'];
11988
+ transactionId: Scalars['ID']['input'];
11989
+ };
11990
+ /** Root mutation type */
11196
11991
  export type MutationRetryJobExecutionArgs = {
11197
11992
  executionId: Scalars['ID']['input'];
11198
11993
  };
@@ -11346,6 +12141,10 @@ export type MutationSendContextWidgetMessageArgs = {
11346
12141
  input: SendContextWidgetMessageInput;
11347
12142
  };
11348
12143
  /** Root mutation type */
12144
+ export type MutationSendExploreMessageArgs = {
12145
+ input: SendExploreMessageInput;
12146
+ };
12147
+ /** Root mutation type */
11349
12148
  export type MutationSendMagicLinkArgs = {
11350
12149
  context?: InputMaybe<AuthContext>;
11351
12150
  email: Scalars['String']['input'];
@@ -11392,6 +12191,10 @@ export type MutationServiceResolvePayoutAccountArgs = {
11392
12191
  input: ServiceResolvePayoutAccountInput;
11393
12192
  };
11394
12193
  /** Root mutation type */
12194
+ export type MutationServiceSyncPayoutStatusArgs = {
12195
+ input: ServiceSyncPayoutStatusInput;
12196
+ };
12197
+ /** Root mutation type */
11395
12198
  export type MutationSetAgentAwayArgs = {
11396
12199
  message?: InputMaybe<Scalars['String']['input']>;
11397
12200
  };
@@ -11422,6 +12225,10 @@ export type MutationSetDefaultPayoutAccountArgs = {
11422
12225
  id: Scalars['ID']['input'];
11423
12226
  };
11424
12227
  /** Root mutation type */
12228
+ export type MutationSetDefaultPickupAddressArgs = {
12229
+ id: Scalars['ID']['input'];
12230
+ };
12231
+ /** Root mutation type */
11425
12232
  export type MutationSetEntitlementSeatLimitArgs = {
11426
12233
  entitlementId: Scalars['ID']['input'];
11427
12234
  maxSeats: Scalars['Int']['input'];
@@ -11571,6 +12378,10 @@ export type MutationSupportExportSubjectArgs = {
11571
12378
  subjectId: Scalars['ID']['input'];
11572
12379
  };
11573
12380
  /** Root mutation type */
12381
+ export type MutationSuppressIdentifierArgs = {
12382
+ input: SuppressIdentifierInput;
12383
+ };
12384
+ /** Root mutation type */
11574
12385
  export type MutationSuspendAppInstallationArgs = {
11575
12386
  id: Scalars['ID']['input'];
11576
12387
  reason: Scalars['String']['input'];
@@ -11741,6 +12552,7 @@ export type MutationUnpublishTourArgs = {
11741
12552
  /** Root mutation type */
11742
12553
  export type MutationUnregisterDeviceTokenArgs = {
11743
12554
  deviceId: Scalars['String']['input'];
12555
+ productSlug?: InputMaybe<Scalars['String']['input']>;
11744
12556
  };
11745
12557
  /** Root mutation type */
11746
12558
  export type MutationUnshareWorkflowArgs = {
@@ -11887,6 +12699,11 @@ export type MutationUpdateCurrentUserProfileArgs = {
11887
12699
  input: UpdateUserInput;
11888
12700
  };
11889
12701
  /** Root mutation type */
12702
+ export type MutationUpdateDsarStatusArgs = {
12703
+ id: Scalars['ID']['input'];
12704
+ input: UpdateDsarStatusInput;
12705
+ };
12706
+ /** Root mutation type */
11890
12707
  export type MutationUpdateDelegationArgs = {
11891
12708
  id: Scalars['ID']['input'];
11892
12709
  input: UpdateDelegationInput;
@@ -12217,12 +13034,18 @@ export type MutationUpdateStoreOrderPaymentStatusArgs = {
12217
13034
  providerSubscriptions?: InputMaybe<Scalars['String']['input']>;
12218
13035
  status: Scalars['String']['input'];
12219
13036
  subtotal?: InputMaybe<Scalars['Float']['input']>;
13037
+ subtotalExact?: InputMaybe<Scalars['String']['input']>;
12220
13038
  taxAmount?: InputMaybe<Scalars['Float']['input']>;
12221
13039
  taxRate?: InputMaybe<Scalars['Float']['input']>;
12222
13040
  taxType?: InputMaybe<Scalars['String']['input']>;
12223
13041
  transactionId?: InputMaybe<Scalars['ID']['input']>;
12224
13042
  };
12225
13043
  /** Root mutation type */
13044
+ export type MutationUpdateSubprocessorArgs = {
13045
+ id: Scalars['ID']['input'];
13046
+ input: SubprocessorUpdateInput;
13047
+ };
13048
+ /** Root mutation type */
12226
13049
  export type MutationUpdateSubscriberArgs = {
12227
13050
  id: Scalars['ID']['input'];
12228
13051
  input: UpdateSubscriberInput;
@@ -12416,6 +13239,11 @@ export type MutationVerifyBillingPaymentMethodArgs = {
12416
13239
  input: VerifyPaymentMethodInput;
12417
13240
  };
12418
13241
  /** Root mutation type */
13242
+ export type MutationVerifyDsarIdentityArgs = {
13243
+ id: Scalars['ID']['input'];
13244
+ identityProof: Scalars['JSON']['input'];
13245
+ };
13246
+ /** Root mutation type */
12419
13247
  export type MutationVerifyEmailArgs = {
12420
13248
  token: Scalars['String']['input'];
12421
13249
  };
@@ -12464,6 +13292,10 @@ export type MutationVoteOnAppReviewArgs = {
12464
13292
  isHelpful: Scalars['Boolean']['input'];
12465
13293
  reviewId: Scalars['ID']['input'];
12466
13294
  };
13295
+ /** Root mutation type */
13296
+ export type MutationWithdrawConsentArgs = {
13297
+ input: WithdrawConsentInput;
13298
+ };
12467
13299
  /** Filter inputs for `myContactInquiries`. Search and email-filter are deliberately not exposed — the query is already scoped to the caller's email, so a full-text search across `name`/`subject` would only surface inquiries the caller already owns. */
12468
13300
  export type MyContactInquiryFilterInput = {
12469
13301
  /** Filter by inquiry category (exact match against the stored string). */
@@ -13203,6 +14035,12 @@ export declare enum NotificationType {
13203
14035
  System = "SYSTEM",
13204
14036
  Transactional = "TRANSACTIONAL"
13205
14037
  }
14038
+ export type NotifyDuplicateApplicantsInput = {
14039
+ /** Between 1 and 100 unique application IDs — typically every application returned by jobApplications(filter: { duplicateEmail: true, jobPostingId }). Applications are grouped by email address; an email that appears only once among these IDs is skipped (NOT_DUPLICATE), not treated as an error. */
14040
+ applicationIds: Array<Scalars['ID']['input']>;
14041
+ /** Resend even to an email address already notified. Defaults to false. */
14042
+ force?: InputMaybe<Scalars['Boolean']['input']>;
14043
+ };
13206
14044
  /** OAuth authorization URL response */
13207
14045
  export type OAuthAuthorizationUrl = {
13208
14046
  __typename?: 'OAuthAuthorizationUrl';
@@ -13304,6 +14142,8 @@ export type OrderEstimateInput = {
13304
14142
  /** Order fulfillment tracking for physical orders */
13305
14143
  export type OrderFulfillment = {
13306
14144
  __typename?: 'OrderFulfillment';
14145
+ /** Carrier shipment-creation attempt history (every retry, not just the last failure) — for admin debugging of "what happened, why, and how to fix it". */
14146
+ attempts: Array<OrderFulfillmentAttempt>;
13307
14147
  /** When order was cancelled */
13308
14148
  cancelledAt?: Maybe<Scalars['DateTime']['output']>;
13309
14149
  /** Shipping carrier name */
@@ -13364,6 +14204,52 @@ export type OrderFulfillment = {
13364
14204
  trackingUrl?: Maybe<Scalars['String']['output']>;
13365
14205
  updatedAt: Scalars['DateTime']['output'];
13366
14206
  };
14207
+ /** One carrier shipment-creation attempt — Temporal retries this up to 5 times; this is the full history behind OrderFulfillment.failureReason (which only ever holds the last attempt's message). */
14208
+ export type OrderFulfillmentAttempt = {
14209
+ __typename?: 'OrderFulfillmentAttempt';
14210
+ attemptNumber: Scalars['Int']['output'];
14211
+ carrier: Scalars['String']['output'];
14212
+ /** How long this attempt took */
14213
+ durationMs?: Maybe<Scalars['Int']['output']>;
14214
+ /** Error message, when this attempt failed */
14215
+ errorMessage?: Maybe<Scalars['String']['output']>;
14216
+ /** Carrier's HTTP status code, when available */
14217
+ errorStatusCode?: Maybe<Scalars['Int']['output']>;
14218
+ id: Scalars['ID']['output'];
14219
+ occurredAt: Scalars['DateTime']['output'];
14220
+ succeeded: Scalars['Boolean']['output'];
14221
+ };
14222
+ export type OrderFulfillmentAttemptsPage = {
14223
+ __typename?: 'OrderFulfillmentAttemptsPage';
14224
+ attempts: Array<OrderFulfillmentAttempt>;
14225
+ totalCount: Scalars['Int']['output'];
14226
+ };
14227
+ /** Category of a seller-reported problem fulfilling an order. */
14228
+ export declare enum OrderIssueCategory {
14229
+ CannotFulfill = "CANNOT_FULFILL",
14230
+ Other = "OTHER",
14231
+ OutOfStock = "OUT_OF_STOCK",
14232
+ WrongAddress = "WRONG_ADDRESS"
14233
+ }
14234
+ /** A seller-reported problem fulfilling a physical order (e.g. out of stock, cannot fulfill, wrong address). Raised by the org that owns the physical line item(s) on the order; resolvable by admin or the org that raised it. */
14235
+ export type OrderIssueFlag = {
14236
+ __typename?: 'OrderIssueFlag';
14237
+ category: OrderIssueCategory;
14238
+ createdAt: Scalars['DateTime']['output'];
14239
+ id: Scalars['ID']['output'];
14240
+ note?: Maybe<Scalars['String']['output']>;
14241
+ orderId: Scalars['String']['output'];
14242
+ /** Developer organization ID that raised this flag */
14243
+ raisedByOrgId: Scalars['String']['output'];
14244
+ resolvedAt?: Maybe<Scalars['DateTime']['output']>;
14245
+ resolvedBy?: Maybe<Scalars['String']['output']>;
14246
+ status: OrderIssueStatus;
14247
+ updatedAt: Scalars['DateTime']['output'];
14248
+ };
14249
+ export declare enum OrderIssueStatus {
14250
+ Open = "OPEN",
14251
+ Resolved = "RESOLVED"
14252
+ }
13367
14253
  /** Shipping estimate for a selected method and destination */
13368
14254
  export type OrderShippingEstimate = {
13369
14255
  __typename?: 'OrderShippingEstimate';
@@ -13921,6 +14807,8 @@ export type PayoutRequest = {
13921
14807
  payoutAccountId?: Maybe<Scalars['ID']['output']>;
13922
14808
  processedAt?: Maybe<Scalars['DateTime']['output']>;
13923
14809
  provider: PayoutProvider;
14810
+ /** See PayoutRequestKind — what approving this request actually does. */
14811
+ requestKind: PayoutRequestKind;
13924
14812
  requestedAmount: Scalars['Float']['output'];
13925
14813
  requesterUserId?: Maybe<Scalars['String']['output']>;
13926
14814
  status: PayoutRequestStatus;
@@ -13940,6 +14828,11 @@ export type PayoutRequestFilterInput = {
13940
14828
  startDate?: InputMaybe<Scalars['DateTime']['input']>;
13941
14829
  status?: InputMaybe<PayoutRequestStatus>;
13942
14830
  };
14831
+ /** Distinguishes what approving a PayoutRequest actually does (BOFF-7192) — shown as separate tabs on the admin Payout page so a $35 credit conversion never gets mistaken for a real bank transfer sitting in the same list: - CREDIT_CONVERSION: a developer's "Request Withdrawal" on their Revenue page. Approving one converts the amount straight into earned credits on their billing account — no external payout account involved, no real money moves, and the request completes (PAID) the moment it's approved. - CASH_PAYOUT: everything else (credit withdrawals from /billing/credits/withdraw, store/affiliate payouts, etc.) — real money leaves the platform via the normal approve → process/mark-paid flow. */
14832
+ export declare enum PayoutRequestKind {
14833
+ CashPayout = "CASH_PAYOUT",
14834
+ CreditConversion = "CREDIT_CONVERSION"
14835
+ }
13943
14836
  export declare enum PayoutRequestStatus {
13944
14837
  Approved = "APPROVED",
13945
14838
  Canceled = "CANCELED",
@@ -14053,6 +14946,13 @@ export type PermissionOverride = {
14053
14946
  validFrom?: Maybe<Scalars['DateTime']['output']>;
14054
14947
  validUntil?: Maybe<Scalars['DateTime']['output']>;
14055
14948
  };
14949
+ export type PlaceLegalHoldInput = {
14950
+ reason: Scalars['String']['input'];
14951
+ reference?: InputMaybe<Scalars['String']['input']>;
14952
+ subjectEmail?: InputMaybe<Scalars['String']['input']>;
14953
+ /** At least one of subjectId / subjectEmail is required. */
14954
+ subjectId?: InputMaybe<Scalars['ID']['input']>;
14955
+ };
14056
14956
  export type Plan = {
14057
14957
  __typename?: 'Plan';
14058
14958
  /** Additional context */
@@ -14079,6 +14979,8 @@ export type Plan = {
14079
14979
  itemEntitlements?: Maybe<Array<Maybe<SubscriptionEntitlement>>>;
14080
14980
  /** Maximum seats allowed (null = unlimited). */
14081
14981
  maxSeats?: Maybe<Scalars['Int']['output']>;
14982
+ /** Maximum number of distinct workspaces one subscription to this plan can be activated against via activateSubscriptionForWorkspace(s). Each activated workspace gets the FULL per-workspace quota allotment from this plan (not divided across workspaces). Null means today's implicit single-workspace behavior (treated as 1). */
14983
+ maxWorkspaces?: Maybe<Scalars['Int']['output']>;
14082
14984
  /** Minimum seats required for this plan (e.g. 5 for Team tier). Null means no minimum. */
14083
14985
  minSeats?: Maybe<Scalars['Int']['output']>;
14084
14986
  /** The name of the plan (e.g., 'Basic', 'Pro', 'Enterprise'). */
@@ -14341,6 +15243,10 @@ export type PriorityBreakdown = {
14341
15243
  percentage: Scalars['Float']['output'];
14342
15244
  priority: SupportTicketPriority;
14343
15245
  };
15246
+ export type PrivacyPaginationInput = {
15247
+ limit?: InputMaybe<Scalars['Int']['input']>;
15248
+ offset?: InputMaybe<Scalars['Int']['input']>;
15249
+ };
14344
15250
  /** Result of processing a refund */
14345
15251
  export type ProcessRefundResult = {
14346
15252
  __typename?: 'ProcessRefundResult';
@@ -14925,6 +15831,34 @@ export declare enum PurchaseType {
14925
15831
  Order = "ORDER",
14926
15832
  Plan = "PLAN"
14927
15833
  }
15834
+ /** Outcome for a single device in a push fan-out. */
15835
+ export type PushDeviceDeliveryResult = {
15836
+ __typename?: 'PushDeviceDeliveryResult';
15837
+ /** Channel connection actually used. Null when routing refused to select one — the service never substitutes a different project's connection. */
15838
+ connectionId?: Maybe<Scalars['ID']['output']>;
15839
+ /** Whether this device was retired in the registry as a result of this send. Only set for provider errors that mean the token is permanently dead (UNREGISTERED, or an INVALID_ARGUMENT that names the registration token). Routing and credential faults never retire a device. */
15840
+ deactivated: Scalars['Boolean']['output'];
15841
+ /** Stable per-install device id. */
15842
+ deviceId: Scalars['String']['output'];
15843
+ /** Failure details when `success` is false. */
15844
+ error?: Maybe<ChannelDeliveryError>;
15845
+ /** Firebase project the device's token belongs to. */
15846
+ fcmProject?: Maybe<Scalars['String']['output']>;
15847
+ /** Provider message id when the send succeeded. */
15848
+ messageId?: Maybe<Scalars['ID']['output']>;
15849
+ /** Device platform, or null when the registry row could not be validated. */
15850
+ platform?: Maybe<PushDevicePlatform>;
15851
+ /** Device registry row id. Null when the registry row was rejected as malformed. */
15852
+ registryId?: Maybe<Scalars['ID']['output']>;
15853
+ /** Whether the notification reached this device. */
15854
+ success: Scalars['Boolean']['output'];
15855
+ };
15856
+ /** Device platform as recorded in the device registry. */
15857
+ export declare enum PushDevicePlatform {
15858
+ Android = "ANDROID",
15859
+ Ios = "IOS",
15860
+ Web = "WEB"
15861
+ }
14928
15862
  export type PushMfaChallengeResult = {
14929
15863
  __typename?: 'PushMFAChallengeResult';
14930
15864
  challengeId: Scalars['ID']['output'];
@@ -14940,11 +15874,13 @@ export type PushMfaStatus = {
14940
15874
  /** Root query type */
14941
15875
  export type Query = {
14942
15876
  __typename?: 'Query';
14943
- /** Placeholder field to allow empty Query type extension. Must be @shareable since it exists in multiple subgraphs. */
15877
+ /** Placeholder field so the Query type can be extended. @shareable because every subgraph declares it. */
14944
15878
  _empty?: Maybe<Scalars['String']['output']>;
14945
15879
  /** Health check for the service @rbac(public: true, scopeType: "global") */
14946
15880
  _health: Scalars['String']['output'];
14947
15881
  _newsletterSubscriptionsPlaceholder?: Maybe<Scalars['String']['output']>;
15882
+ /** Placeholder so the Query type exists for the domain files to extend. @shareable because every subgraph declares one. */
15883
+ _privacyHealth?: Maybe<Scalars['String']['output']>;
14948
15884
  /** Get action definitions for a resource type */
14949
15885
  actionDefinitions: Array<ActionDefinition>;
14950
15886
  /** Get all active schedules (for background processing). `limit` clamps the page size (default 100, max 500). `cursor` is the ID of the last schedule from the previous page (keyset pagination ordered by `nextExecutionAt` ascending then `id`). Background workers that need to drain every due schedule should loop calling this query with the returned cursor until fewer-than-`limit` rows come back. Addresses the codex review on PR #35: without cursoring, busy tenants could keep schedules permanently outside the first-page window. */
@@ -14966,6 +15902,8 @@ export type Query = {
14966
15902
  adminAffiliateAnalytics: AffiliateAdminAnalytics;
14967
15903
  adminPayoutRequests: PayoutRequestConnection;
14968
15904
  adminPayoutSummary: PayoutAdminSummary;
15905
+ /** Admin-only: paginated list of physical (fulfillment-tracked) orders, with optional status/search filters. Used by the admin fulfillment console. */
15906
+ adminPhysicalOrders: StoreOrdersResult;
14969
15907
  affiliateCode?: Maybe<AffiliateCode>;
14970
15908
  affiliateCodeAnalytics: AffiliateCodeAnalytics;
14971
15909
  affiliateJourneyEvents: Array<AffiliateJourneyEvent>;
@@ -15012,6 +15950,8 @@ export type Query = {
15012
15950
  /** Internal: get all approved waitlist entries for an email. Used by tenant-svc for product access checks. */
15013
15951
  approvedWaitlistProducts: Array<NewsletterWaitlist>;
15014
15952
  appsActingAsCurrentUser: AppConnection;
15953
+ /** Service-to-service only: verifies the given actor (forwarded explicitly by the calling service, since the gateway-level actor on an internal M2M call is the calling service itself, not the original end user) has at least minRole membership on the organization. Used by global-store-svc's registerCarrierPickupLocation before it registers a pickup address on an org's behalf, closing a trust-boundary gap where any authenticated caller could otherwise attribute a carrier registration to an arbitrary org. */
15954
+ assertDeveloperOrgAccess: Scalars['Boolean']['output'];
15015
15955
  auditLogs: AuditLogConnection;
15016
15956
  /** List auth audit events visible to the current user. Resolver filters by actorId/userId — membership IS the access list. */
15017
15957
  authAuditLogs: AuthAuditLogConnection;
@@ -15035,6 +15975,8 @@ export type Query = {
15035
15975
  cannedResponse?: Maybe<CannedResponse>;
15036
15976
  cannedResponseByShortcut?: Maybe<CannedResponse>;
15037
15977
  cannedResponses: CannedResponseConnection;
15978
+ /** Registered pickup/warehouse addresses across every configured shipping carrier (currently Shiprocket; more may be added later — see listCarrierAdapters) — lets a seller pick a pincode that can actually be booked instead of typing an arbitrary one that checkout will later refuse to ship. Each result is tagged with which carrier it belongs to. Carriers that aren't configured, or that don't support pickup-location listing at all (e.g. the manual carrier), simply contribute nothing — never blocks org configuration. */
15979
+ carrierPickupLocations: Array<CarrierPickupLocation>;
15038
15980
  /** Get a cart by ID (admin or owner only) */
15039
15981
  cart?: Maybe<Cart>;
15040
15982
  /** Get available shipping options for the current cart (caller's own cart) */
@@ -15066,6 +16008,8 @@ export type Query = {
15066
16008
  /** Returns compliance-related audit events (consent changes, suppressions, bounces, complaints) for a given platform product, sorted by most recent first. */
15067
16009
  complianceAuditLog: Array<ComplianceAuditLogEntry>;
15068
16010
  complianceSettings?: Maybe<NewsletterComplianceSettings>;
16011
+ consentLedger: ConsentRecordConnection;
16012
+ consentRecord?: Maybe<ConsentRecord>;
15069
16013
  /** Get all contact inquiries with filtering (authenticated, for superadmins) */
15070
16014
  contactInquiries: ContactInquiryList;
15071
16015
  /** Get a single contact inquiry by ID (authenticated, for superadmins) */
@@ -15102,6 +16046,8 @@ export type Query = {
15102
16046
  developerOrgMember?: Maybe<DeveloperOrgMember>;
15103
16047
  /** List members of an organization */
15104
16048
  developerOrgMembers: DeveloperOrgMemberConnection;
16049
+ /** Get month-by-month revenue trend for an organization, computed directly from sales records (most recent `months` calendar months, oldest first). Used for revenue growth charts on both the developer-facing and admin revenue pages. */
16050
+ developerOrgMonthlyRevenue: Array<DeveloperOrgMonthlyRevenuePoint>;
15105
16051
  /** Get a payment method by ID */
15106
16052
  developerOrgPaymentMethod?: Maybe<DeveloperOrgPaymentMethod>;
15107
16053
  /** List payment methods for an organization */
@@ -15126,12 +16072,15 @@ export type Query = {
15126
16072
  developerOrganization?: Maybe<DeveloperOrganization>;
15127
16073
  /** Get a developer organization by slug */
15128
16074
  developerOrganizationBySlug?: Maybe<DeveloperOrganization>;
15129
- /** List developer organizations with filters */
16075
+ /** List developer organizations with filters. Membership-scoped (Type C self list): the resolver filters by `members.some(userId: <actor>)` for every non-super_admin caller, so the returned set IS the access control. `scopeType: "self"` therefore only has to reject unauthenticated callers at the gateway. */
15130
16076
  developerOrganizations: DeveloperOrganizationConnection;
15131
16077
  developerProfile?: Maybe<DeveloperProfile>;
15132
16078
  /** Look up a previously-created export job by id. */
15133
16079
  devportalExportJob?: Maybe<DevportalExportJob>;
16080
+ dsarRequest?: Maybe<DsarRequest>;
16081
+ dsarRequests: DsarRequestConnection;
15134
16082
  editorialCollections: Array<EditorialCollection>;
16083
+ effectiveConsent?: Maybe<ConsentRecord>;
15135
16084
  /** Get effective permissions for an actor in a scope */
15136
16085
  effectivePermissions: EffectivePermissions;
15137
16086
  entitlement?: Maybe<ProductEntitlement>;
@@ -15148,6 +16097,24 @@ export type Query = {
15148
16097
  estimateOrderShipping: OrderShippingEstimate;
15149
16098
  /** Evaluate feature flags for the current actor in a workspace context. Used by frontend providers for bulk flag evaluation. Returns OpenFeature-compatible ResolutionDetails for each flag. RBAC is scoped to the target workspace via `input.workspaceId`. */
15150
16099
  evaluateFeatureFlags: FeatureFlagBulkEvaluation;
16100
+ /** One conversation with its full transcript, references, CTAs and clicks. Superadmin only. */
16101
+ exploreAdminConversation?: Maybe<ExploreAdminConversation>;
16102
+ /** Explore conversations for the admin console, newest first by default. Superadmin only. */
16103
+ exploreAdminConversations: ExploreAdminConversationPage;
16104
+ /** Counts and per-product routing for the same filter. Superadmin only. */
16105
+ exploreAdminStats: ExploreAdminStats;
16106
+ /** The corpus catalog: every product and the website pages the agent can cite. */
16107
+ exploreAgentCatalog: ExploreAgentCatalog;
16108
+ /** Poll a submitted turn. Null when the job is unknown or has expired. */
16109
+ exploreAgentJob?: Maybe<ExploreAgentJob>;
16110
+ /** Products, example prompts, welcome copy and limits for the `/explore` page. Never throws — an unreachable agent yields `enabled: false`. */
16111
+ exploreCatalog: ExploreCatalog;
16112
+ /** The conversation's messages, oldest first. */
16113
+ exploreConversationMessages: Array<ExploreMessage>;
16114
+ /** Poll one message. Scoped by `conversationToken`; a token that does not own the message is reported as NOT_FOUND, never FORBIDDEN. */
16115
+ exploreMessage?: Maybe<ExploreMessage>;
16116
+ /** A shared conversation, read-only. Returns the transcript for a `shareToken` and nothing that would let the caller continue or modify the thread. */
16117
+ exploreSharedConversation: Array<ExploreMessage>;
15151
16118
  /** Synchronous super_admin export of organizations as a CSV string. Returns inline CSV (RFC-4180 with CWE-1236 protection) plus row count and a truncated flag indicating the result was capped at the requested limit. */
15152
16119
  exportOrganizationsCsv: OrganizationCsvExport;
15153
16120
  exportSubscribers: Array<ExportSubscriber>;
@@ -15172,8 +16139,9 @@ export type Query = {
15172
16139
  getActiveSubscriptions: Array<BillingSubscription>;
15173
16140
  /** Get the price change history for a specific addon */
15174
16141
  getAddonPriceHistory: Array<AddonPriceHistory>;
15175
- /** Get all addons, optionally filtered by product and free-plan visibility */
16142
+ /** Get all addons, optionally filtered by product and free-plan visibility. Organization-scoped (BOFF-6512): the caller's org-level role (e.g. Owner / Admin, which already grants billing:ADMIN) is what should gate this, not a separate global grant. Requires x-org-id — set by the gateway from the caller's JWT org_id claim for user tokens, or from a gateway-verified x-org-id header (checked against organization membership) for app / app_as_user tokens. */
15176
16143
  getAllAddOns: Array<Addon>;
16144
+ /** Browse the plan catalog (e.g. the upgrade-subscription flow). Self-scoped — any authenticated actor may read it; the catalog itself isn't actor-owned data, so there's nothing further to scope. Previously scopeType "global", which no regular user role is ever assigned at (only Authenticated User — billing:NONE — and Platform Superadmin hold a global-scoped role), so this field was unreachable for every non-superadmin user (BOFF-6512). */
15177
16145
  getAllPlans: Array<Plan>;
15178
16146
  getAllQuotas: Array<Quota>;
15179
16147
  getAllQuotasAssignment: PaginatedQuotaAssignments;
@@ -15196,6 +16164,10 @@ export type Query = {
15196
16164
  getBillingNotifications: Array<BillingNotification>;
15197
16165
  /** Get a billing order by ID */
15198
16166
  getBillingOrder?: Maybe<BillingOrder>;
16167
+ /** Paginated, filterable view of ALL BillingOrder callback deliveries (not just FAILED ones) — the admin ops log/debug viewer for the billing→external service (store, etc.) order-completion handoff, mirroring getBillingWebhookLogs for the inbound provider webhook side. */
16168
+ getBillingOrderCallbacks: BillingOrderCallbacksPage;
16169
+ /** Paginated, filterable view of ALL BillingWebhookLog rows (not just payment-succeeded refund candidates) — the admin ops log/alert viewer for Stripe/Razorpay webhook processing. */
16170
+ getBillingWebhookLogs: BillingWebhookLogsPage;
15199
16171
  /** Get a channel by ID */
15200
16172
  getChannel?: Maybe<Channel>;
15201
16173
  getChannelConnectionTags: Array<ChannelConnectionTagAssignment>;
@@ -15296,6 +16268,7 @@ export type Query = {
15296
16268
  getPayments: Array<Payment>;
15297
16269
  /** Get pending refund records (shortcut for admin dashboard) */
15298
16270
  getPendingRefunds: PaginatedRefundRecords;
16271
+ /** Fetch a single plan's public details/features (e.g. selecting a plan to upgrade to). Same fix and reasoning as getAllPlans above (BOFF-6512): scopeType "global" is unreachable for every non-superadmin user, and a plan's catalog data isn't actor-owned, so there's nothing to scope beyond "is this caller authenticated". */
15299
16272
  getPlan: Plan;
15300
16273
  /** Get all entitlements for a specific plan */
15301
16274
  getPlanEntitlements: Array<SubscriptionEntitlement>;
@@ -15315,12 +16288,13 @@ export type Query = {
15315
16288
  getReferralCodeByCode?: Maybe<ReferralCode>;
15316
16289
  /** Get a single refund record by ID */
15317
16290
  getRefundRecord?: Maybe<RefundRecord>;
15318
- /** Get refund records with filters and pagination (for admin dashboard). Uses orgId from context by default. Super admins can override with orgIdFilter. */
16291
+ /** Get refund records with filters and pagination (for admin dashboard). Uses orgId from context by default. Super admins can override with orgIdFilter. hasError: true restricts to refunds carrying a non-null errorMessage — an unresolved accounting/reconciliation issue on an otherwise-completed refund (e.g. a Zoho credit-note refund that couldn't be recorded). Powers the admin refund-issue log, independent of status. search: free-text, case-insensitive substring match against the refund record id, the originating transaction id, the gateway payment id, and the gateway refund id — lets an admin trace a specific purchase's refund by whichever identifier they have on hand. */
15319
16292
  getRefundRecords: PaginatedRefundRecords;
15320
16293
  /** Get refund statistics (counts and amounts) */
15321
16294
  getRefundStats: RefundStats;
15322
16295
  /** Get SSO/SAML configuration for a tenant. Returns the full SSOConfig, which includes the SAML signing certificate and IdP endpoints — secret/credential material. Gated to global scope so only a super_admin / global-scope grant (and the trusted service actor) can read it; tenant admins are further narrowed to their own tenant inside the resolver. Pre-auth login pages MUST NOT read this — use `isSSOEnabled` for discovery. */
15323
16296
  getSSOConfig?: Maybe<SsoConfig>;
16297
+ /** Get specific addons by ID. Organization-scoped — see getAllAddOns. */
15324
16298
  getSelectedAddons: Array<Addon>;
15325
16299
  /** Resolve the active per-user storage cap for an org. Used by file-storage services to enforce per-user quotas at upload. Falls back to the platform default (50MB free / 5GB paid) when no override is configured. */
15326
16300
  getStorageLimitForOrg: StorageLimit;
@@ -15334,12 +16308,12 @@ export type Query = {
15334
16308
  getStoreProductTags: Array<StoreProductTagAssignment>;
15335
16309
  /** Get a subscription by ID */
15336
16310
  getSubscription?: Maybe<BillingSubscription>;
15337
- /** Enhanced subscription overview with better pagination and filtering @param includeExpired - Include past/canceled/expired subscriptions (default: false) @param onlyExpired - Only fetch past subscriptions for lazy loading (default: false) @param searchQuery - Search quotas by name in database (case-insensitive) */
16311
+ /** Enhanced subscription overview with better pagination and filtering @param includeExpired - Include past/canceled/expired subscriptions (default: false) @param onlyExpired - Only fetch past subscriptions for lazy loading (default: false) @param searchQuery - Search quotas by name in database (case-insensitive) @param productId - Restrict to subscriptions for this product (falls back to the requesting product's context when omitted). A billing account carries an active free-plan subscription for every product on the platform, so leaving this unscoped surfaces every other product's subscriptions alongside the caller's own. */
15338
16312
  getSubscriptionUsageOverview?: Maybe<Array<SubscriptionWithQuotas>>;
15339
16313
  getSubscriptionUsages: SubscriptionQuotaUsageWithFilter;
15340
16314
  /** Get tax rates */
15341
16315
  getTaxRates: Array<TaxRate>;
15342
- /** Get a single transaction by ID (used for refund pre-fill) */
16316
+ /** Get a single transaction by ID (used for refund pre-fill). billingAccountId is optional and only cross-checked when supplied — the whole point of this lookup is finding a transaction (and its billing account) from just its ID. */
15343
16317
  getTransaction?: Maybe<Transaction>;
15344
16318
  /** Get transactions for a billing account with basic account info (paginated) */
15345
16319
  getTransactionsByBillingAccount: PaginatedBillingAccountTransactions;
@@ -15387,6 +16361,7 @@ export type Query = {
15387
16361
  isEmailSuppressed: Scalars['Boolean']['output'];
15388
16362
  /** Public pre-auth discovery probe: whether SAML SSO is enabled for a tenant. Returns ONLY a boolean (no certificate, endpoints, or other secret material) so an unauthenticated login page can decide whether to offer an SSO button. */
15389
16363
  isSSOEnabled: Scalars['Boolean']['output'];
16364
+ isSuppressed: SuppressionCheckResult;
15390
16365
  /** Get a single job application by ID (admin). */
15391
16366
  jobApplication?: Maybe<JobApplication>;
15392
16367
  /** Get all interview rounds for a job application (admin). */
@@ -15415,6 +16390,7 @@ export type Query = {
15415
16390
  language?: Maybe<Language>;
15416
16391
  languageByCode?: Maybe<Language>;
15417
16392
  languages: LanguageList;
16393
+ legalHolds: LegalHoldConnection;
15418
16394
  /** List coupons with optional filters */
15419
16395
  listCoupons: CouponsListResponse;
15420
16396
  /** List all promotions (admin only) */
@@ -15560,6 +16536,10 @@ export type Query = {
15560
16536
  orderEstimate?: Maybe<OrderEstimate>;
15561
16537
  /** Get fulfillment details for an order */
15562
16538
  orderFulfillment?: Maybe<OrderFulfillment>;
16539
+ /** Admin-only: paginated log of carrier shipment-creation attempts across all orders (every Temporal retry, not just the last failure), so ops can debug fulfillment failures without direct DB/log access. */
16540
+ orderFulfillmentAttempts: OrderFulfillmentAttemptsPage;
16541
+ /** Get seller-reported issue flags for an order */
16542
+ orderIssueFlags: Array<OrderIssueFlag>;
15563
16543
  /** Get a single organization by ID */
15564
16544
  organization?: Maybe<Organization>;
15565
16545
  /** Paginated keyset connection over the persistent OrganizationAuditLog table. Returns audit events for a single organization, newest first. Supports optional filtering by `action` (event name) and `actorId`. */
@@ -15568,10 +16548,14 @@ export type Query = {
15568
16548
  organizationBySlug?: Maybe<Organization>;
15569
16549
  /** Get pending invites for an organization (admin view) */
15570
16550
  organizationInvites: OrganizationInviteList;
16551
+ /** Lightweight org-kind lookup used by global-store-svc (service actor) to validate a physical-product listing is being created under a PHYSICAL org before it accepts the write. Returns null if the org doesn't exist. `kind` is not sensitive, so this is public the same way installableApplicationVersions is. See DeveloperOrgKind (BOFF-7285). */
16552
+ organizationKind?: Maybe<DeveloperOrgKind>;
15571
16553
  /** Resolve human-friendly identities for users who are active members of the target organization and visible to the current actor. */
15572
16554
  organizationMemberIdentities: Array<OrganizationMemberIdentity>;
15573
16555
  /** Get members of an organization */
15574
16556
  organizationMembers: OrganizationMemberList;
16557
+ /** M2M lookup for global-store-svc's shipping-cost quote pipeline: the org's active pickup postal code — the default DeveloperOrgPickupAddress's postalCode, falling back to the legacy pickupPostalCode scalar for orgs that set one before DeveloperOrgPickupAddress existed, then null (caller falls back to the linked billing account's address, then a platform-wide default). */
16558
+ organizationPickupPostalCode?: Maybe<Scalars['String']['output']>;
15575
16559
  organizationScheduleQuotas: OrganizationScheduleQuotas;
15576
16560
  payoutRunHistory: Array<PayoutRunLog>;
15577
16561
  pendingDeveloperOrganizationVerifications: DeveloperOrganizationConnection;
@@ -15630,6 +16614,8 @@ export type Query = {
15630
16614
  publicJobPosting?: Maybe<PublicJobPosting>;
15631
16615
  /** List OPEN job postings for public careers pages (no authentication required). */
15632
16616
  publicJobPostings: Array<PublicJobPosting>;
16617
+ /** List OPEN + CLOSED job postings (id/title/slug only) for the public assignment-submission position picker — closing a posting stops new applicants but must not block an existing candidate from selecting it to submit their take-home (no authentication required). */
16618
+ publicJobPostingsForSubmission: Array<PublicJobPosting>;
15633
16619
  /** Get all active plans for a specific product (public, no authentication required). Used by product website pricing pages. Only returns active plans with their features. */
15634
16620
  publicPlans: Array<Plan>;
15635
16621
  /** List public press kit assets for a product (no auth required). Only returns assets with visibility=PUBLIC. */
@@ -15642,6 +16628,8 @@ export type Query = {
15642
16628
  publicResolvedContentPage?: Maybe<ProductContentPage>;
15643
16629
  publicScheduleTemplates: ScheduleTemplateConnection;
15644
16630
  publishedProducts: Array<StoreProduct>;
16631
+ /** The push-routable devices a user has for one product, newest-first. Every row carries the `fcmProject` whose credentials can reach its `token`; rows with no project, and rows not refreshed inside the staleness window, are excluded. Service-to-service only — this is the read global-channel-svc makes before a send, on behalf of the notification's recipient. It therefore takes an explicit `userId`, which is exactly why it is NOT `scopeType: "self"`: a self gate is an authentication check only, so a self-scoped field taking a `userId` would let any signed-in user enumerate anyone's devices. `actorTypes` denies user/app callers at the gateway before any permission round-trip, and the resolver re-checks the actor type for the internal-gateway path (which runs no RBAC middleware). */
16632
+ pushDevicesForUserInternal: Array<DeviceToken>;
15645
16633
  /** Cost-weighted AI credits for one assistant turn, computed from the given model's token prices (USD/1M) and the credit baseline. Unknown models fall back to the `*default*` price row. */
15646
16634
  quoteAiCredits: Scalars['Int']['output'];
15647
16635
  /** Get RBAC analytics for a scope within a date range */
@@ -15718,6 +16706,8 @@ export type Query = {
15718
16706
  storeProductDetails: StoreProductDetailsResult;
15719
16707
  /** List all stores the caller can see. */
15720
16708
  stores: Array<Store>;
16709
+ subprocessor?: Maybe<Subprocessor>;
16710
+ subprocessors: SubprocessorConnection;
15721
16711
  subscriber?: Maybe<NewsletterSubscriber>;
15722
16712
  subscriberByEmail?: Maybe<NewsletterSubscriber>;
15723
16713
  subscriberConsents: Array<NewsletterConsent>;
@@ -15731,6 +16721,8 @@ export type Query = {
15731
16721
  supportTicket?: Maybe<SupportTicket>;
15732
16722
  supportTicketByNumber?: Maybe<SupportTicket>;
15733
16723
  supportTickets: SupportTicketConnection;
16724
+ suppressionEntry?: Maybe<SuppressionEntry>;
16725
+ suppressionList: SuppressionEntryConnection;
15734
16726
  suppressions: Array<NewsletterSuppression>;
15735
16727
  surveyByTicket?: Maybe<CustomerSatisfactionSurvey>;
15736
16728
  /** Fetch one outbox entry by id (includes the full payload for inspection). */
@@ -15914,6 +16906,13 @@ export type QueryAdminPayoutSummaryArgs = {
15914
16906
  filter?: InputMaybe<PayoutRequestFilterInput>;
15915
16907
  };
15916
16908
  /** Root query type */
16909
+ export type QueryAdminPhysicalOrdersArgs = {
16910
+ limit: Scalars['Int']['input'];
16911
+ page: Scalars['Int']['input'];
16912
+ search?: InputMaybe<Scalars['String']['input']>;
16913
+ status?: InputMaybe<OrderStatus>;
16914
+ };
16915
+ /** Root query type */
15917
16916
  export type QueryAffiliateCodeArgs = {
15918
16917
  id: Scalars['ID']['input'];
15919
16918
  };
@@ -16069,6 +17068,13 @@ export type QueryAppsActingAsCurrentUserArgs = {
16069
17068
  pagination?: InputMaybe<PaginationInput>;
16070
17069
  };
16071
17070
  /** Root query type */
17071
+ export type QueryAssertDeveloperOrgAccessArgs = {
17072
+ actorId: Scalars['ID']['input'];
17073
+ actorType?: InputMaybe<Scalars['String']['input']>;
17074
+ minRole?: InputMaybe<Scalars['String']['input']>;
17075
+ organizationId: Scalars['ID']['input'];
17076
+ };
17077
+ /** Root query type */
16072
17078
  export type QueryAuditLogsArgs = {
16073
17079
  actorId?: InputMaybe<Scalars['ID']['input']>;
16074
17080
  limit?: InputMaybe<Scalars['Int']['input']>;
@@ -16251,6 +17257,15 @@ export type QueryComplianceSettingsArgs = {
16251
17257
  platformProductId: Scalars['String']['input'];
16252
17258
  };
16253
17259
  /** Root query type */
17260
+ export type QueryConsentLedgerArgs = {
17261
+ filter?: InputMaybe<ConsentLedgerFilter>;
17262
+ pagination?: InputMaybe<PrivacyPaginationInput>;
17263
+ };
17264
+ /** Root query type */
17265
+ export type QueryConsentRecordArgs = {
17266
+ id: Scalars['ID']['input'];
17267
+ };
17268
+ /** Root query type */
16254
17269
  export type QueryContactInquiriesArgs = {
16255
17270
  filter?: InputMaybe<ContactInquiryFilterInput>;
16256
17271
  limit?: InputMaybe<Scalars['Int']['input']>;
@@ -16353,6 +17368,11 @@ export type QueryDeveloperOrgMembersArgs = {
16353
17368
  role?: InputMaybe<DeveloperOrgRole>;
16354
17369
  };
16355
17370
  /** Root query type */
17371
+ export type QueryDeveloperOrgMonthlyRevenueArgs = {
17372
+ months?: InputMaybe<Scalars['Int']['input']>;
17373
+ organizationId: Scalars['ID']['input'];
17374
+ };
17375
+ /** Root query type */
16356
17376
  export type QueryDeveloperOrgPaymentMethodArgs = {
16357
17377
  id: Scalars['ID']['input'];
16358
17378
  };
@@ -16425,6 +17445,7 @@ export type QueryDeveloperOrganizationBySlugArgs = {
16425
17445
  export type QueryDeveloperOrganizationsArgs = {
16426
17446
  isCertified?: InputMaybe<Scalars['Boolean']['input']>;
16427
17447
  isVerified?: InputMaybe<Scalars['Boolean']['input']>;
17448
+ kind?: InputMaybe<DeveloperOrgKind>;
16428
17449
  limit?: InputMaybe<Scalars['Int']['input']>;
16429
17450
  offset?: InputMaybe<Scalars['Int']['input']>;
16430
17451
  partnerTier?: InputMaybe<PartnerTier>;
@@ -16439,10 +17460,24 @@ export type QueryDevportalExportJobArgs = {
16439
17460
  id: Scalars['ID']['input'];
16440
17461
  };
16441
17462
  /** Root query type */
17463
+ export type QueryDsarRequestArgs = {
17464
+ id: Scalars['ID']['input'];
17465
+ };
17466
+ /** Root query type */
17467
+ export type QueryDsarRequestsArgs = {
17468
+ filter?: InputMaybe<DsarFilter>;
17469
+ pagination?: InputMaybe<PrivacyPaginationInput>;
17470
+ };
17471
+ /** Root query type */
16442
17472
  export type QueryEditorialCollectionsArgs = {
16443
17473
  storeId?: InputMaybe<Scalars['ID']['input']>;
16444
17474
  };
16445
17475
  /** Root query type */
17476
+ export type QueryEffectiveConsentArgs = {
17477
+ purpose: ConsentPurpose;
17478
+ subjectId: Scalars['ID']['input'];
17479
+ };
17480
+ /** Root query type */
16446
17481
  export type QueryEffectivePermissionsArgs = {
16447
17482
  actorId: Scalars['String']['input'];
16448
17483
  actorType: ActorType;
@@ -16491,6 +17526,44 @@ export type QueryEvaluateFeatureFlagsArgs = {
16491
17526
  input: EvaluateFeatureFlagsInput;
16492
17527
  };
16493
17528
  /** Root query type */
17529
+ export type QueryExploreAdminConversationArgs = {
17530
+ id: Scalars['ID']['input'];
17531
+ };
17532
+ /** Root query type */
17533
+ export type QueryExploreAdminConversationsArgs = {
17534
+ filter?: InputMaybe<ExploreAdminFilter>;
17535
+ limit?: InputMaybe<Scalars['Int']['input']>;
17536
+ offset?: InputMaybe<Scalars['Int']['input']>;
17537
+ sort?: InputMaybe<ExploreAdminSort>;
17538
+ };
17539
+ /** Root query type */
17540
+ export type QueryExploreAdminStatsArgs = {
17541
+ filter?: InputMaybe<ExploreAdminFilter>;
17542
+ };
17543
+ /** Root query type */
17544
+ export type QueryExploreAgentJobArgs = {
17545
+ id: Scalars['ID']['input'];
17546
+ };
17547
+ /** Root query type */
17548
+ export type QueryExploreCatalogArgs = {
17549
+ productSlug?: InputMaybe<Scalars['String']['input']>;
17550
+ };
17551
+ /** Root query type */
17552
+ export type QueryExploreConversationMessagesArgs = {
17553
+ conversationToken: Scalars['String']['input'];
17554
+ limit?: InputMaybe<Scalars['Int']['input']>;
17555
+ };
17556
+ /** Root query type */
17557
+ export type QueryExploreMessageArgs = {
17558
+ conversationToken: Scalars['String']['input'];
17559
+ id: Scalars['ID']['input'];
17560
+ };
17561
+ /** Root query type */
17562
+ export type QueryExploreSharedConversationArgs = {
17563
+ limit?: InputMaybe<Scalars['Int']['input']>;
17564
+ shareToken: Scalars['String']['input'];
17565
+ };
17566
+ /** Root query type */
16494
17567
  export type QueryExportOrganizationsCsvArgs = {
16495
17568
  filter?: InputMaybe<OrganizationFilterInput>;
16496
17569
  limit?: InputMaybe<Scalars['Int']['input']>;
@@ -16629,6 +17702,22 @@ export type QueryGetBillingOrderArgs = {
16629
17702
  id: Scalars['ID']['input'];
16630
17703
  };
16631
17704
  /** Root query type */
17705
+ export type QueryGetBillingOrderCallbacksArgs = {
17706
+ callbackStatus?: InputMaybe<Scalars['String']['input']>;
17707
+ externalService?: InputMaybe<Scalars['String']['input']>;
17708
+ hasError?: InputMaybe<Scalars['Boolean']['input']>;
17709
+ limit?: InputMaybe<Scalars['Int']['input']>;
17710
+ offset?: InputMaybe<Scalars['Int']['input']>;
17711
+ };
17712
+ /** Root query type */
17713
+ export type QueryGetBillingWebhookLogsArgs = {
17714
+ hasError?: InputMaybe<Scalars['Boolean']['input']>;
17715
+ limit?: InputMaybe<Scalars['Int']['input']>;
17716
+ offset?: InputMaybe<Scalars['Int']['input']>;
17717
+ processed?: InputMaybe<Scalars['Boolean']['input']>;
17718
+ provider?: InputMaybe<Scalars['String']['input']>;
17719
+ };
17720
+ /** Root query type */
16632
17721
  export type QueryGetChannelArgs = {
16633
17722
  id: Scalars['ID']['input'];
16634
17723
  };
@@ -16925,10 +18014,12 @@ export type QueryGetRefundRecordArgs = {
16925
18014
  export type QueryGetRefundRecordsArgs = {
16926
18015
  billingAccountId?: InputMaybe<Scalars['String']['input']>;
16927
18016
  fromDate?: InputMaybe<Scalars['DateTime']['input']>;
18017
+ hasError?: InputMaybe<Scalars['Boolean']['input']>;
16928
18018
  orgIdFilter?: InputMaybe<Scalars['String']['input']>;
16929
18019
  page?: InputMaybe<Scalars['Int']['input']>;
16930
18020
  pageSize?: InputMaybe<Scalars['Int']['input']>;
16931
18021
  provider?: InputMaybe<Scalars['String']['input']>;
18022
+ search?: InputMaybe<Scalars['String']['input']>;
16932
18023
  source?: InputMaybe<RefundSource>;
16933
18024
  status?: InputMaybe<RefundRecordStatus>;
16934
18025
  toDate?: InputMaybe<Scalars['DateTime']['input']>;
@@ -16979,6 +18070,7 @@ export type QueryGetSubscriptionUsageOverviewArgs = {
16979
18070
  onlyExpired?: InputMaybe<Scalars['Boolean']['input']>;
16980
18071
  page?: InputMaybe<Scalars['Int']['input']>;
16981
18072
  pageSize?: InputMaybe<Scalars['Int']['input']>;
18073
+ productId?: InputMaybe<Scalars['ID']['input']>;
16982
18074
  searchQuery?: InputMaybe<Scalars['String']['input']>;
16983
18075
  };
16984
18076
  /** Root query type */
@@ -16999,7 +18091,7 @@ export type QueryGetTaxRatesArgs = {
16999
18091
  };
17000
18092
  /** Root query type */
17001
18093
  export type QueryGetTransactionArgs = {
17002
- billingAccountId: Scalars['ID']['input'];
18094
+ billingAccountId?: InputMaybe<Scalars['ID']['input']>;
17003
18095
  id: Scalars['ID']['input'];
17004
18096
  };
17005
18097
  /** Root query type */
@@ -17136,6 +18228,12 @@ export type QueryIsSsoEnabledArgs = {
17136
18228
  tenantId: Scalars['String']['input'];
17137
18229
  };
17138
18230
  /** Root query type */
18231
+ export type QueryIsSuppressedArgs = {
18232
+ channel: SuppressionChannel;
18233
+ identifier: Scalars['String']['input'];
18234
+ identifierType: Scalars['String']['input'];
18235
+ };
18236
+ /** Root query type */
17139
18237
  export type QueryJobApplicationArgs = {
17140
18238
  id: Scalars['ID']['input'];
17141
18239
  };
@@ -17221,6 +18319,11 @@ export type QueryLanguagesArgs = {
17221
18319
  offset?: InputMaybe<Scalars['Int']['input']>;
17222
18320
  };
17223
18321
  /** Root query type */
18322
+ export type QueryLegalHoldsArgs = {
18323
+ filter?: InputMaybe<LegalHoldFilter>;
18324
+ pagination?: InputMaybe<PrivacyPaginationInput>;
18325
+ };
18326
+ /** Root query type */
17224
18327
  export type QueryListCouponsArgs = {
17225
18328
  filter?: InputMaybe<CouponFilterInput>;
17226
18329
  limit?: InputMaybe<Scalars['Int']['input']>;
@@ -17583,6 +18686,18 @@ export type QueryOrderFulfillmentArgs = {
17583
18686
  orderId: Scalars['ID']['input'];
17584
18687
  };
17585
18688
  /** Root query type */
18689
+ export type QueryOrderFulfillmentAttemptsArgs = {
18690
+ carrier?: InputMaybe<Scalars['String']['input']>;
18691
+ limit?: InputMaybe<Scalars['Int']['input']>;
18692
+ offset?: InputMaybe<Scalars['Int']['input']>;
18693
+ orderId?: InputMaybe<Scalars['ID']['input']>;
18694
+ succeeded?: InputMaybe<Scalars['Boolean']['input']>;
18695
+ };
18696
+ /** Root query type */
18697
+ export type QueryOrderIssueFlagsArgs = {
18698
+ orderId: Scalars['ID']['input'];
18699
+ };
18700
+ /** Root query type */
17586
18701
  export type QueryOrganizationArgs = {
17587
18702
  id: Scalars['ID']['input'];
17588
18703
  };
@@ -17607,6 +18722,10 @@ export type QueryOrganizationInvitesArgs = {
17607
18722
  organizationId: Scalars['String']['input'];
17608
18723
  };
17609
18724
  /** Root query type */
18725
+ export type QueryOrganizationKindArgs = {
18726
+ id: Scalars['ID']['input'];
18727
+ };
18728
+ /** Root query type */
17610
18729
  export type QueryOrganizationMemberIdentitiesArgs = {
17611
18730
  organizationId: Scalars['String']['input'];
17612
18731
  userIds: Array<Scalars['ID']['input']>;
@@ -17618,6 +18737,10 @@ export type QueryOrganizationMembersArgs = {
17618
18737
  organizationId: Scalars['String']['input'];
17619
18738
  };
17620
18739
  /** Root query type */
18740
+ export type QueryOrganizationPickupPostalCodeArgs = {
18741
+ id: Scalars['ID']['input'];
18742
+ };
18743
+ /** Root query type */
17621
18744
  export type QueryPendingDeveloperOrganizationVerificationsArgs = {
17622
18745
  limit?: InputMaybe<Scalars['Int']['input']>;
17623
18746
  offset?: InputMaybe<Scalars['Int']['input']>;
@@ -17797,6 +18920,12 @@ export type QueryPublicJobPostingsArgs = {
17797
18920
  productId?: InputMaybe<Scalars['ID']['input']>;
17798
18921
  };
17799
18922
  /** Root query type */
18923
+ export type QueryPublicJobPostingsForSubmissionArgs = {
18924
+ limit?: InputMaybe<Scalars['Int']['input']>;
18925
+ offset?: InputMaybe<Scalars['Int']['input']>;
18926
+ productId?: InputMaybe<Scalars['ID']['input']>;
18927
+ };
18928
+ /** Root query type */
17800
18929
  export type QueryPublicPlansArgs = {
17801
18930
  productId: Scalars['String']['input'];
17802
18931
  };
@@ -17835,6 +18964,11 @@ export type QueryPublishedProductsArgs = {
17835
18964
  type?: InputMaybe<ProductType>;
17836
18965
  };
17837
18966
  /** Root query type */
18967
+ export type QueryPushDevicesForUserInternalArgs = {
18968
+ productSlug: Scalars['String']['input'];
18969
+ userId: Scalars['ID']['input'];
18970
+ };
18971
+ /** Root query type */
17838
18972
  export type QueryQuoteAiCreditsArgs = {
17839
18973
  inputTokens: Scalars['Int']['input'];
17840
18974
  model: Scalars['String']['input'];
@@ -18058,6 +19192,15 @@ export type QueryStoresArgs = {
18058
19192
  type?: InputMaybe<StoreType>;
18059
19193
  };
18060
19194
  /** Root query type */
19195
+ export type QuerySubprocessorArgs = {
19196
+ id: Scalars['ID']['input'];
19197
+ };
19198
+ /** Root query type */
19199
+ export type QuerySubprocessorsArgs = {
19200
+ filter?: InputMaybe<SubprocessorFilter>;
19201
+ pagination?: InputMaybe<PrivacyPaginationInput>;
19202
+ };
19203
+ /** Root query type */
18061
19204
  export type QuerySubscriberArgs = {
18062
19205
  id: Scalars['ID']['input'];
18063
19206
  };
@@ -18120,6 +19263,15 @@ export type QuerySupportTicketsArgs = {
18120
19263
  offset?: InputMaybe<Scalars['Int']['input']>;
18121
19264
  };
18122
19265
  /** Root query type */
19266
+ export type QuerySuppressionEntryArgs = {
19267
+ id: Scalars['ID']['input'];
19268
+ };
19269
+ /** Root query type */
19270
+ export type QuerySuppressionListArgs = {
19271
+ filter?: InputMaybe<SuppressionFilter>;
19272
+ pagination?: InputMaybe<PrivacyPaginationInput>;
19273
+ };
19274
+ /** Root query type */
18123
19275
  export type QuerySuppressionsArgs = {
18124
19276
  filter?: InputMaybe<SuppressionFilterInput>;
18125
19277
  limit?: InputMaybe<Scalars['Int']['input']>;
@@ -18859,6 +20011,21 @@ export type RecordEarningEntryInput = {
18859
20011
  sourceSubcategory?: InputMaybe<Scalars['String']['input']>;
18860
20012
  unitType?: InputMaybe<EarningUnitType>;
18861
20013
  };
20014
+ /** One visitor following a link an answer offered. The conversion signal explore did not have: every answer was recorded, but not whether anyone acted on one. Anonymous like the rest of explore — the visitor is an ipHash, never an IP — and the URL is re-validated against the catalog allow-list on write, so a forged client cannot inject arbitrary URLs into our analytics. */
20015
+ export type RecordExploreClickInput = {
20016
+ /** Bearer secret for the conversation the click belongs to. */
20017
+ conversationToken: Scalars['String']['input'];
20018
+ /** CTA or REFERENCE. */
20019
+ kind: Scalars['String']['input'];
20020
+ /** The assistant message whose link was followed. */
20021
+ messageId: Scalars['ID']['input'];
20022
+ /** Destination followed. Must be a link that message actually offered. */
20023
+ url: Scalars['String']['input'];
20024
+ };
20025
+ export type RecordExploreClickResult = {
20026
+ __typename?: 'RecordExploreClickResult';
20027
+ recorded: Scalars['Boolean']['output'];
20028
+ };
18862
20029
  export type RecordExternalSettlementInput = {
18863
20030
  /** Settlement amount in whole currency units (must be > 0). */
18864
20031
  amount: Scalars['Float']['input'];
@@ -18880,6 +20047,20 @@ export type RecordNotificationActionInput = {
18880
20047
  metadata?: InputMaybe<Scalars['JSON']['input']>;
18881
20048
  notificationId: Scalars['ID']['input'];
18882
20049
  };
20050
+ export type RecordPickupAddressInput = {
20051
+ address: Scalars['String']['input'];
20052
+ addressLine2?: InputMaybe<Scalars['String']['input']>;
20053
+ carrier: Scalars['String']['input'];
20054
+ carrierLocationLabel: Scalars['String']['input'];
20055
+ city: Scalars['String']['input'];
20056
+ country: Scalars['String']['input'];
20057
+ email: Scalars['String']['input'];
20058
+ isDefault?: InputMaybe<Scalars['Boolean']['input']>;
20059
+ name: Scalars['String']['input'];
20060
+ phone: Scalars['String']['input'];
20061
+ postalCode: Scalars['String']['input'];
20062
+ state: Scalars['String']['input'];
20063
+ };
18883
20064
  export type RecordProductVisitInput = {
18884
20065
  /** Optional: app URL the user landed on. Used as CTA target in the welcome email. Defaults to https://app.<slug>.com when omitted. */
18885
20066
  appUrl?: InputMaybe<Scalars['String']['input']>;
@@ -18900,7 +20081,7 @@ export type RecordProductVisitResult = {
18900
20081
  welcomeEmailStatus: Scalars['String']['output'];
18901
20082
  };
18902
20083
  export type RecordSaleInput = {
18903
- applicationId: Scalars['ID']['input'];
20084
+ applicationId?: InputMaybe<Scalars['ID']['input']>;
18904
20085
  buyerOrgId?: InputMaybe<Scalars['ID']['input']>;
18905
20086
  buyerTenantId?: InputMaybe<Scalars['ID']['input']>;
18906
20087
  buyerUserId: Scalars['ID']['input'];
@@ -19115,6 +20296,22 @@ export declare enum RefundStatus {
19115
20296
  Pending = "PENDING",
19116
20297
  Succeeded = "SUCCEEDED"
19117
20298
  }
20299
+ /** A seller's real pickup address, to be registered with a shipping carrier (see registerCarrierPickupLocation). `carrier` selects which configured carrier adapter to register it with — carrier-agnostic by design, since more providers than Shiprocket may be added over time. */
20300
+ export type RegisterCarrierPickupLocationInput = {
20301
+ address: Scalars['String']['input'];
20302
+ addressLine2?: InputMaybe<Scalars['String']['input']>;
20303
+ carrier: Scalars['String']['input'];
20304
+ city: Scalars['String']['input'];
20305
+ country: Scalars['String']['input'];
20306
+ email: Scalars['String']['input'];
20307
+ /** Contact person at this address. */
20308
+ name: Scalars['String']['input'];
20309
+ /** The DeveloperOrganization this address is being registered for. Verified via a cross-service call to global-devportal-svc's assertDeveloperOrgAccess before any carrier API call is made. */
20310
+ organizationId: Scalars['ID']['input'];
20311
+ phone: Scalars['String']['input'];
20312
+ postalCode: Scalars['String']['input'];
20313
+ state: Scalars['String']['input'];
20314
+ };
19118
20315
  export type RegisterProductAssetInput = {
19119
20316
  caption?: InputMaybe<Scalars['String']['input']>;
19120
20317
  fileName?: InputMaybe<Scalars['String']['input']>;
@@ -19174,6 +20371,11 @@ export declare enum ReleaseStatus {
19174
20371
  RolledBack = "ROLLED_BACK",
19175
20372
  RollingOut = "ROLLING_OUT"
19176
20373
  }
20374
+ export type ReleaseSuppressionInput = {
20375
+ channel: SuppressionChannel;
20376
+ identifier: Scalars['String']['input'];
20377
+ identifierType: Scalars['String']['input'];
20378
+ };
19177
20379
  export type ReleaseTrack = {
19178
20380
  __typename?: 'ReleaseTrack';
19179
20381
  createdAt: Scalars['DateTime']['output'];
@@ -19308,6 +20510,8 @@ export type RetrySyncOutboxResult = {
19308
20510
  /** Revenue summary for dashboard */
19309
20511
  export type RevenueSummary = {
19310
20512
  __typename?: 'RevenueSummary';
20513
+ /** ISO 4217 currency code these totals are denominated in — derived from the org's DeveloperOrgSale rows (the dominant currency by sale count). Orgs are expected to transact in one currency; if an org's sales genuinely span multiple currencies, only the dominant one is reflected here. */
20514
+ currency: Scalars['String']['output'];
19311
20515
  nextPayoutAmount?: Maybe<Scalars['Float']['output']>;
19312
20516
  nextPayoutDate?: Maybe<Scalars['DateTime']['output']>;
19313
20517
  pendingBalance: Scalars['Float']['output'];
@@ -19903,6 +21107,15 @@ export type SeedCollabkinUserToursResult = {
19903
21107
  updatedCount: Scalars['Int']['output'];
19904
21108
  workspaceId: Scalars['String']['output'];
19905
21109
  };
21110
+ export type SeedCoolAndLovelyUserToursResult = {
21111
+ __typename?: 'SeedCoolAndLovelyUserToursResult';
21112
+ createdCount: Scalars['Int']['output'];
21113
+ productId: Scalars['String']['output'];
21114
+ totalCount: Scalars['Int']['output'];
21115
+ tours: Array<SeededUserTourResult>;
21116
+ updatedCount: Scalars['Int']['output'];
21117
+ workspaceId: Scalars['String']['output'];
21118
+ };
19906
21119
  export type SeedFluidgridsUserToursResult = {
19907
21120
  __typename?: 'SeedFluidgridsUserToursResult';
19908
21121
  createdCount: Scalars['Int']['output'];
@@ -19969,6 +21182,31 @@ export type SendContextWidgetMessagePayload = {
19969
21182
  messageId?: Maybe<Scalars['ID']['output']>;
19970
21183
  success: Scalars['Boolean']['output'];
19971
21184
  };
21185
+ export type SendExploreMessageInput = {
21186
+ /** Files attached as extra context. At most 5, each at most 10 MB. Limits are re-checked server-side — the client's are for feedback, not enforcement. */
21187
+ attachments?: InputMaybe<Array<ExploreAttachmentInput>>;
21188
+ /** Omit to start a new conversation. The result's `conversation.token` is the secret to send back on every following turn. */
21189
+ conversationToken?: InputMaybe<Scalars['String']['input']>;
21190
+ /** BCP-47 locale of the page (e.g. "en-US"). */
21191
+ locale?: InputMaybe<Scalars['String']['input']>;
21192
+ /** The visitor's question. */
21193
+ message: Scalars['String']['input'];
21194
+ /** Absolute URL of the page the visitor asked from. */
21195
+ pageUrl?: InputMaybe<Scalars['String']['input']>;
21196
+ /** Slug of the product website the visitor is on (a soft hint for the agent). */
21197
+ productSlug?: InputMaybe<Scalars['String']['input']>;
21198
+ /** reCAPTCHA v3 token — required only when `exploreCatalog.captchaRequired`. */
21199
+ recaptchaToken?: InputMaybe<Scalars['String']['input']>;
21200
+ };
21201
+ export type SendExploreMessageResult = {
21202
+ __typename?: 'SendExploreMessageResult';
21203
+ /** Poll THIS id via `exploreMessage(conversationToken, id)` until `status` is COMPLETED or FAILED. */
21204
+ assistantMessage: ExploreMessage;
21205
+ conversation: ExploreConversation;
21206
+ /** Messages left for this IP in the current window, when known. */
21207
+ remainingToday?: Maybe<Scalars['Int']['output']>;
21208
+ userMessage: ExploreMessage;
21209
+ };
19972
21210
  /** Input for sending a message to a channel (for bot conversations) */
19973
21211
  export type SendMessageInput = {
19974
21212
  /** Attachments (images, files, etc.) */
@@ -20055,6 +21293,14 @@ export type ServiceResolvePayoutAccountInput = {
20055
21293
  /** Destination type for a newly-created placeholder account (defaults to BANK_ACCOUNT). */
20056
21294
  type?: InputMaybe<PayoutAccountType>;
20057
21295
  };
21296
+ export type ServiceSyncPayoutStatusInput = {
21297
+ externalReference?: InputMaybe<Scalars['String']['input']>;
21298
+ failureReason?: InputMaybe<Scalars['String']['input']>;
21299
+ /** The billing PayoutRequest's sourceIdempotencyKey, formatted "devportal:payout:<DeveloperOrgPayout id>" — the id segment identifies which local payout row to update. */
21300
+ sourceIdempotencyKey: Scalars['String']['input'];
21301
+ /** The billing PayoutRequestStatus after the change (e.g. APPROVED, REJECTED, PAID, FAILED). */
21302
+ status: Scalars['String']['input'];
21303
+ };
20058
21304
  /** An active user session (login instance) */
20059
21305
  export type Session = {
20060
21306
  __typename?: 'Session';
@@ -20630,23 +21876,38 @@ export type StoreItem = {
20630
21876
  };
20631
21877
  /** Line item representing a single product in an order */
20632
21878
  export type StoreLineItemInput = {
20633
- /** Item type (DIGITAL, PHYSICAL, or BUNDLE). Defaults to DIGITAL if not provided. */
21879
+ /**
21880
+ * Item type is derived from the catalog product nature.
21881
+ * @deprecated The server derives itemType from product nature
21882
+ */
20634
21883
  itemType?: InputMaybe<Scalars['String']['input']>;
20635
- /** Product name at time of purchase (for historical accuracy) */
20636
- name: Scalars['String']['input'];
20637
- /** Pricing model for subscription awareness (FREE, PAID_ONETIME, SUBSCRIPTION) */
21884
+ /**
21885
+ * Product name is retained only for backwards-compatible clients. The store resolves the authoritative name from productId and variantId.
21886
+ * @deprecated The server resolves product and variant names
21887
+ */
21888
+ name?: InputMaybe<Scalars['String']['input']>;
21889
+ /**
21890
+ * Pricing model is derived from the catalog.
21891
+ * @deprecated The server derives pricingModel from the catalog
21892
+ */
20638
21893
  pricingModel?: InputMaybe<Scalars['String']['input']>;
20639
21894
  /** Store product ID */
20640
21895
  productId: Scalars['String']['input'];
20641
21896
  /** Quantity of this item */
20642
21897
  quantity: Scalars['Int']['input'];
20643
- /** Subtotal for this line item (unitPrice * quantity) */
20644
- subtotal: Scalars['Float']['input'];
20645
- /** Unit price for one item (before quantity) */
20646
- unitPrice: Scalars['Float']['input'];
21898
+ /**
21899
+ * Subtotal is calculated by the server.
21900
+ * @deprecated The server calculates subtotal
21901
+ */
21902
+ subtotal?: InputMaybe<Scalars['Float']['input']>;
21903
+ /**
21904
+ * Unit price is derived from the catalog or variant price.
21905
+ * @deprecated The server resolves unitPrice from the catalog
21906
+ */
21907
+ unitPrice?: InputMaybe<Scalars['Float']['input']>;
20647
21908
  /** Product variant ID if applicable */
20648
21909
  variantId?: InputMaybe<Scalars['String']['input']>;
20649
- /** Product version at time of purchase */
21910
+ /** Product version is retained as display metadata only. */
20650
21911
  version?: InputMaybe<Scalars['String']['input']>;
20651
21912
  };
20652
21913
  /** External entity stub for StoreOrder from store-svc. Federation gateway will resolve full StoreOrder data from store-svc. Used by: BillingAccount.storeOrders (if extended), Transaction.storeOrder */
@@ -20665,6 +21926,8 @@ export type StoreOrder = {
20665
21926
  /** Fulfillment tracking for physical orders */
20666
21927
  fulfillment?: Maybe<OrderFulfillment>;
20667
21928
  id: Scalars['ID']['output'];
21929
+ /** Seller-reported issues on this order (e.g. out of stock, cannot fulfill). */
21930
+ issueFlags: Array<OrderIssueFlag>;
20668
21931
  /** Array of line items in this order */
20669
21932
  lineItems: Scalars['JSON']['output'];
20670
21933
  metadata?: Maybe<Scalars['JSON']['output']>;
@@ -20736,8 +21999,6 @@ export type StoreProduct = {
20736
21999
  documentationUrl?: Maybe<Scalars['String']['output']>;
20737
22000
  downloads: Scalars['Int']['output'];
20738
22001
  entitlements: Array<ProductEntitlement>;
20739
- /** Expiry date for perishable goods (physical products) — null if not applicable */
20740
- expiryDate?: Maybe<Scalars['DateTime']['output']>;
20741
22002
  featured: Scalars['Boolean']['output'];
20742
22003
  /** Product height (physical products) */
20743
22004
  height?: Maybe<Scalars['Float']['output']>;
@@ -20773,6 +22034,8 @@ export type StoreProduct = {
20773
22034
  publishedAt?: Maybe<Scalars['DateTime']['output']>;
20774
22035
  publisher?: Maybe<Publisher>;
20775
22036
  publisherId: Scalars['String']['output'];
22037
+ /** Number of PHYSICAL orders this product has been fulfilled in at least once — incremented alongside OrderFulfillment's first creation for the order (see OrderService.ensurePhysicalFulfillmentRecord), the physical counterpart to how `downloads` counts first-install events for digital products. Always 0 for DIGITAL nature. */
22038
+ purchaseCount: Scalars['Int']['output'];
20776
22039
  rating?: Maybe<Scalars['Float']['output']>;
20777
22040
  rejectedReason?: Maybe<Scalars['String']['output']>;
20778
22041
  repositoryUrl?: Maybe<Scalars['String']['output']>;
@@ -20806,8 +22069,6 @@ export type StoreProduct = {
20806
22069
  /** Whether to track inventory levels (physical products) */
20807
22070
  trackInventory?: Maybe<Scalars['Boolean']['output']>;
20808
22071
  type: ProductType;
20809
- /** Selling unit for the listed price/quantity, e.g. "kg", "liter", "ml", "g", "unit" (physical products) */
20810
- unitOfMeasure?: Maybe<Scalars['String']['output']>;
20811
22072
  updatedAt: Scalars['DateTime']['output'];
20812
22073
  /** Product variants (for physical products with size/color options) */
20813
22074
  variants: Array<ProductVariant>;
@@ -21034,6 +22295,91 @@ export type SubmitSatisfactionSurveyInput = {
21034
22295
  rating: Scalars['Int']['input'];
21035
22296
  surveyId: Scalars['ID']['input'];
21036
22297
  };
22298
+ export type Subprocessor = {
22299
+ __typename?: 'Subprocessor';
22300
+ activatedAt?: Maybe<Scalars['DateTime']['output']>;
22301
+ category: SubprocessorCategory;
22302
+ contactEmail?: Maybe<Scalars['String']['output']>;
22303
+ countriesOfTransfer: Array<Scalars['String']['output']>;
22304
+ createdAt: Scalars['DateTime']['output'];
22305
+ dataCategories: Array<Scalars['String']['output']>;
22306
+ dpaSignedAt?: Maybe<Scalars['DateTime']['output']>;
22307
+ dpaUrl?: Maybe<Scalars['String']['output']>;
22308
+ id: Scalars['ID']['output'];
22309
+ legalEntity: Scalars['String']['output'];
22310
+ name: Scalars['String']['output'];
22311
+ notes?: Maybe<Scalars['String']['output']>;
22312
+ privacyPolicyUrl?: Maybe<Scalars['String']['output']>;
22313
+ proposedAt?: Maybe<Scalars['DateTime']['output']>;
22314
+ purpose: Scalars['String']['output'];
22315
+ region: Scalars['String']['output'];
22316
+ retiredAt?: Maybe<Scalars['DateTime']['output']>;
22317
+ securityMeasures?: Maybe<Scalars['String']['output']>;
22318
+ status: SubprocessorStatus;
22319
+ updatedAt: Scalars['DateTime']['output'];
22320
+ websiteUrl?: Maybe<Scalars['String']['output']>;
22321
+ };
22322
+ export declare enum SubprocessorCategory {
22323
+ AiProvider = "AI_PROVIDER",
22324
+ Analytics = "ANALYTICS",
22325
+ Cdn = "CDN",
22326
+ CloudInfrastructure = "CLOUD_INFRASTRUCTURE",
22327
+ CustomerSupport = "CUSTOMER_SUPPORT",
22328
+ EmailDelivery = "EMAIL_DELIVERY",
22329
+ Monitoring = "MONITORING",
22330
+ Other = "OTHER",
22331
+ Payment = "PAYMENT",
22332
+ Storage = "STORAGE"
22333
+ }
22334
+ export type SubprocessorConnection = {
22335
+ __typename?: 'SubprocessorConnection';
22336
+ hasMore: Scalars['Boolean']['output'];
22337
+ nodes: Array<Subprocessor>;
22338
+ total: Scalars['Int']['output'];
22339
+ };
22340
+ export type SubprocessorFilter = {
22341
+ category?: InputMaybe<SubprocessorCategory>;
22342
+ region?: InputMaybe<Scalars['String']['input']>;
22343
+ status?: InputMaybe<SubprocessorStatus>;
22344
+ };
22345
+ export type SubprocessorInput = {
22346
+ category: SubprocessorCategory;
22347
+ contactEmail?: InputMaybe<Scalars['String']['input']>;
22348
+ countriesOfTransfer: Array<Scalars['String']['input']>;
22349
+ dataCategories: Array<Scalars['String']['input']>;
22350
+ dpaSignedAt?: InputMaybe<Scalars['DateTime']['input']>;
22351
+ dpaUrl?: InputMaybe<Scalars['String']['input']>;
22352
+ legalEntity: Scalars['String']['input'];
22353
+ name: Scalars['String']['input'];
22354
+ notes?: InputMaybe<Scalars['String']['input']>;
22355
+ privacyPolicyUrl?: InputMaybe<Scalars['String']['input']>;
22356
+ purpose: Scalars['String']['input'];
22357
+ region: Scalars['String']['input'];
22358
+ securityMeasures?: InputMaybe<Scalars['String']['input']>;
22359
+ websiteUrl?: InputMaybe<Scalars['String']['input']>;
22360
+ };
22361
+ export declare enum SubprocessorStatus {
22362
+ Active = "ACTIVE",
22363
+ Proposed = "PROPOSED",
22364
+ Retired = "RETIRED"
22365
+ }
22366
+ export type SubprocessorUpdateInput = {
22367
+ category?: InputMaybe<SubprocessorCategory>;
22368
+ contactEmail?: InputMaybe<Scalars['String']['input']>;
22369
+ countriesOfTransfer?: InputMaybe<Array<Scalars['String']['input']>>;
22370
+ dataCategories?: InputMaybe<Array<Scalars['String']['input']>>;
22371
+ dpaSignedAt?: InputMaybe<Scalars['DateTime']['input']>;
22372
+ dpaUrl?: InputMaybe<Scalars['String']['input']>;
22373
+ legalEntity?: InputMaybe<Scalars['String']['input']>;
22374
+ name?: InputMaybe<Scalars['String']['input']>;
22375
+ notes?: InputMaybe<Scalars['String']['input']>;
22376
+ privacyPolicyUrl?: InputMaybe<Scalars['String']['input']>;
22377
+ purpose?: InputMaybe<Scalars['String']['input']>;
22378
+ region?: InputMaybe<Scalars['String']['input']>;
22379
+ securityMeasures?: InputMaybe<Scalars['String']['input']>;
22380
+ status?: InputMaybe<SubprocessorStatus>;
22381
+ websiteUrl?: InputMaybe<Scalars['String']['input']>;
22382
+ };
21037
22383
  export type SubscribeInput = {
21038
22384
  /** Newsletter context for scoping (workspaceId, userId, productId, tenantId, etc.) */
21039
22385
  context?: InputMaybe<NewsletterContextInput>;
@@ -21334,6 +22680,10 @@ export type SubscriptionWithQuotas = {
21334
22680
  __typename?: 'SubscriptionWithQuotas';
21335
22681
  createdAt: Scalars['DateTime']['output'];
21336
22682
  id: Scalars['String']['output'];
22683
+ /** Name of the subscription's plan (e.g. "VibeControls - Free"). */
22684
+ planName?: Maybe<Scalars['String']['output']>;
22685
+ /** Product the subscription's plan belongs to (e.g. "vibecontrols"). */
22686
+ productId?: Maybe<Scalars['String']['output']>;
21337
22687
  quotas: Array<QuotaAssignmentSummary>;
21338
22688
  status: SubscriptionStatus;
21339
22689
  };
@@ -21553,11 +22903,71 @@ export declare enum SupportTicketStatus {
21553
22903
  Resolved = "RESOLVED",
21554
22904
  WaitingCustomer = "WAITING_CUSTOMER"
21555
22905
  }
22906
+ export type SuppressIdentifierInput = {
22907
+ channel: SuppressionChannel;
22908
+ expiresAt?: InputMaybe<Scalars['DateTime']['input']>;
22909
+ identifier: Scalars['String']['input'];
22910
+ identifierType: Scalars['String']['input'];
22911
+ reason: SuppressionReason;
22912
+ reasonNote?: InputMaybe<Scalars['String']['input']>;
22913
+ source: Scalars['String']['input'];
22914
+ };
22915
+ export declare enum SuppressionChannel {
22916
+ All = "ALL",
22917
+ Email = "EMAIL",
22918
+ InApp = "IN_APP",
22919
+ Push = "PUSH",
22920
+ Sms = "SMS",
22921
+ Whatsapp = "WHATSAPP"
22922
+ }
22923
+ export type SuppressionCheckResult = {
22924
+ __typename?: 'SuppressionCheckResult';
22925
+ matchedEntry?: Maybe<SuppressionEntry>;
22926
+ suppressed: Scalars['Boolean']['output'];
22927
+ };
22928
+ export type SuppressionEntry = {
22929
+ __typename?: 'SuppressionEntry';
22930
+ channel: SuppressionChannel;
22931
+ createdAt: Scalars['DateTime']['output'];
22932
+ createdBy?: Maybe<Scalars['ID']['output']>;
22933
+ expiresAt?: Maybe<Scalars['DateTime']['output']>;
22934
+ id: Scalars['ID']['output'];
22935
+ identifier: Scalars['String']['output'];
22936
+ identifierType: Scalars['String']['output'];
22937
+ reason: SuppressionReason;
22938
+ reasonNote?: Maybe<Scalars['String']['output']>;
22939
+ releasedAt?: Maybe<Scalars['DateTime']['output']>;
22940
+ source: Scalars['String']['output'];
22941
+ suppressedAt: Scalars['DateTime']['output'];
22942
+ updatedAt: Scalars['DateTime']['output'];
22943
+ };
22944
+ export type SuppressionEntryConnection = {
22945
+ __typename?: 'SuppressionEntryConnection';
22946
+ hasMore: Scalars['Boolean']['output'];
22947
+ nodes: Array<SuppressionEntry>;
22948
+ total: Scalars['Int']['output'];
22949
+ };
22950
+ export type SuppressionFilter = {
22951
+ active?: InputMaybe<Scalars['Boolean']['input']>;
22952
+ channel?: InputMaybe<SuppressionChannel>;
22953
+ identifier?: InputMaybe<Scalars['String']['input']>;
22954
+ identifierType?: InputMaybe<Scalars['String']['input']>;
22955
+ reason?: InputMaybe<SuppressionReason>;
22956
+ };
21556
22957
  export type SuppressionFilterInput = {
21557
22958
  email?: InputMaybe<Scalars['String']['input']>;
21558
22959
  platformProductId?: InputMaybe<Scalars['String']['input']>;
21559
22960
  reason?: InputMaybe<Scalars['String']['input']>;
21560
22961
  };
22962
+ export declare enum SuppressionReason {
22963
+ AdminAction = "ADMIN_ACTION",
22964
+ ComplianceHold = "COMPLIANCE_HOLD",
22965
+ GdprErasure = "GDPR_ERASURE",
22966
+ HardBounce = "HARD_BOUNCE",
22967
+ SpamComplaint = "SPAM_COMPLAINT",
22968
+ UserRequest = "USER_REQUEST",
22969
+ UserUnsubscribe = "USER_UNSUBSCRIBE"
22970
+ }
21561
22971
  /** Input for syncing channel users */
21562
22972
  export type SyncChannelUsersInput = {
21563
22973
  /** Channel ID */
@@ -22808,6 +24218,11 @@ export type UpdateCouponInput = {
22808
24218
  status?: InputMaybe<CouponStatus>;
22809
24219
  validUntil?: InputMaybe<Scalars['DateTime']['input']>;
22810
24220
  };
24221
+ export type UpdateDsarStatusInput = {
24222
+ notes?: InputMaybe<Scalars['String']['input']>;
24223
+ rejectionReason?: InputMaybe<Scalars['String']['input']>;
24224
+ status: DsarStatus;
24225
+ };
22811
24226
  /** Input for updating dashboard layout preferences. */
22812
24227
  export type UpdateDashboardPreferencesInput = {
22813
24228
  /** Complete list of widget configurations */
@@ -22825,6 +24240,8 @@ export type UpdateDeveloperOrganizationInput = {
22825
24240
  logoUrl?: InputMaybe<Scalars['String']['input']>;
22826
24241
  metadata?: InputMaybe<Scalars['JSON']['input']>;
22827
24242
  name?: InputMaybe<Scalars['String']['input']>;
24243
+ /** Dedicated pickup pincode for carrier rate quoting on physical-goods orders (Shiprocket, etc) — separate from the org's billing address, since a seller's fulfillment/warehouse location isn't necessarily the same place as their billing address. */
24244
+ pickupPostalCode?: InputMaybe<Scalars['String']['input']>;
22828
24245
  settings?: InputMaybe<Scalars['JSON']['input']>;
22829
24246
  supportEmail?: InputMaybe<Scalars['String']['input']>;
22830
24247
  websiteUrl?: InputMaybe<Scalars['String']['input']>;
@@ -23119,13 +24536,13 @@ export type UpdatePayoutAccountInput = {
23119
24536
  };
23120
24537
  export type UpdatePhysicalProductInput = {
23121
24538
  allowBackorder?: InputMaybe<Scalars['Boolean']['input']>;
24539
+ bannerUrl?: InputMaybe<Scalars['String']['input']>;
23122
24540
  brand?: InputMaybe<Scalars['String']['input']>;
23123
24541
  category?: InputMaybe<Scalars['String']['input']>;
23124
24542
  countryOfOrigin?: InputMaybe<Scalars['String']['input']>;
23125
24543
  currency?: InputMaybe<Scalars['String']['input']>;
23126
24544
  description?: InputMaybe<Scalars['String']['input']>;
23127
24545
  dimensionUnit?: InputMaybe<DimensionUnit>;
23128
- expiryDate?: InputMaybe<Scalars['DateTime']['input']>;
23129
24546
  height?: InputMaybe<Scalars['Float']['input']>;
23130
24547
  icon?: InputMaybe<Scalars['String']['input']>;
23131
24548
  length?: InputMaybe<Scalars['Float']['input']>;
@@ -23143,7 +24560,6 @@ export type UpdatePhysicalProductInput = {
23143
24560
  stockQuantity?: InputMaybe<Scalars['Int']['input']>;
23144
24561
  tags?: InputMaybe<Array<Scalars['String']['input']>>;
23145
24562
  trackInventory?: InputMaybe<Scalars['Boolean']['input']>;
23146
- unitOfMeasure?: InputMaybe<Scalars['String']['input']>;
23147
24563
  warrantyInfo?: InputMaybe<Scalars['String']['input']>;
23148
24564
  weight?: InputMaybe<Scalars['Float']['input']>;
23149
24565
  weightUnit?: InputMaybe<WeightUnit>;
@@ -24063,6 +25479,39 @@ export declare enum UserPresenceStatus {
24063
25479
  /** User is currently online and active */
24064
25480
  Online = "ONLINE"
24065
25481
  }
25482
+ /** Input for a user-targeted push fan-out. Note there is no device token and no connection id: both are resolved by the service. Callers cannot pin a Firebase project, by design. */
25483
+ export type UserPushDeliveryInput = {
25484
+ /** Notification content. `title` becomes the push title, `text` the body, and `data` is passed through to the device as the FCM data payload. */
25485
+ content: ChannelDeliveryContentInput;
25486
+ /** Optional lower cap on how many devices to fan out to. Never raises the service-level cap (PUSH_MAX_DEVICES_PER_TRIGGER). */
25487
+ maxDevices?: InputMaybe<Scalars['Int']['input']>;
25488
+ /** Optional reference to originating notification in notification-svc */
25489
+ notificationId?: InputMaybe<Scalars['ID']['input']>;
25490
+ /** Delivery options (priority, TTL, retry policy) */
25491
+ options?: InputMaybe<ChannelDeliveryOptionsInput>;
25492
+ /** Organization ID for multi-tenancy */
25493
+ organizationId: Scalars['ID']['input'];
25494
+ /** Product slug whose app shell minted the tokens (e.g. "vibecontrols"). Determines which of the user's devices are in scope. */
25495
+ productSlug: Scalars['String']['input'];
25496
+ /** Subject user. The device registry is queried for exactly this actor. */
25497
+ userId: Scalars['ID']['input'];
25498
+ };
25499
+ /** Aggregated result of a user-targeted push fan-out. */
25500
+ export type UserPushDeliveryResult = {
25501
+ __typename?: 'UserPushDeliveryResult';
25502
+ /** Devices a send was actually attempted for. */
25503
+ attemptedDevices: Scalars['Int']['output'];
25504
+ /** Devices retired in the registry because the provider reported their token permanently dead. */
25505
+ deactivatedCount: Scalars['Int']['output'];
25506
+ /** Devices the notification did not reach, for any reason. */
25507
+ failedCount: Scalars['Int']['output'];
25508
+ /** Per-device outcomes, one entry per device considered. */
25509
+ results: Array<PushDeviceDeliveryResult>;
25510
+ /** Devices the notification reached. */
25511
+ successCount: Scalars['Int']['output'];
25512
+ /** Devices the registry returned, including any the service refused to send to. */
25513
+ totalDevices: Scalars['Int']['output'];
25514
+ };
24066
25515
  /** User role for access control across the platform */
24067
25516
  export declare enum UserRole {
24068
25517
  Guest = "GUEST",
@@ -24486,6 +25935,12 @@ export type WidgetMessageAttachmentInput = {
24486
25935
  thumbnail?: InputMaybe<Scalars['String']['input']>;
24487
25936
  width?: InputMaybe<Scalars['Int']['input']>;
24488
25937
  };
25938
+ export type WithdrawConsentInput = {
25939
+ purpose: ConsentPurpose;
25940
+ source: Scalars['String']['input'];
25941
+ subjectId: Scalars['ID']['input'];
25942
+ subjectType: Scalars['String']['input'];
25943
+ };
24489
25944
  /** Workspace type stub - represents a workspace entity from the workspace service This service doesn't own the Workspace model, but references it */
24490
25945
  export type Workspace = {
24491
25946
  __typename?: 'Workspace';
@@ -24523,6 +25978,13 @@ export type WorkspaceMembersConnectionArgs = {
24523
25978
  limit?: InputMaybe<Scalars['Int']['input']>;
24524
25979
  offset?: InputMaybe<Scalars['Int']['input']>;
24525
25980
  };
25981
+ /** Per-workspace outcome within a activateSubscriptionForWorkspaces call. */
25982
+ export type WorkspaceActivationOutcome = {
25983
+ __typename?: 'WorkspaceActivationOutcome';
25984
+ assignedQuotas: Scalars['Int']['output'];
25985
+ skippedQuotas: Scalars['Int']['output'];
25986
+ workspaceId: Scalars['ID']['output'];
25987
+ };
24526
25988
  /** Workspace-level override for a feature flag. Workspace admins can disable flags or control user opt-in for their workspace. */
24527
25989
  export type WorkspaceFeatureFlagOverride = {
24528
25990
  __typename?: 'WorkspaceFeatureFlagOverride';
@@ -24644,6 +26106,8 @@ export type CreatePlanInput = {
24644
26106
  /** Set to false for enterprise / contact-us plans. Defaults to true. */
24645
26107
  isPurchasable?: InputMaybe<Scalars['Boolean']['input']>;
24646
26108
  maxSeats?: InputMaybe<Scalars['Int']['input']>;
26109
+ /** Maximum number of distinct workspaces one subscription to this plan can be activated against. Each activated workspace gets the FULL per-workspace quota allotment (not divided). Null/omitted = today's implicit single-workspace behavior (treated as 1). */
26110
+ maxWorkspaces?: InputMaybe<Scalars['Int']['input']>;
24647
26111
  minSeats?: InputMaybe<Scalars['Int']['input']>;
24648
26112
  name: Scalars['String']['input'];
24649
26113
  price: Scalars['Float']['input'];
@@ -24672,18 +26136,23 @@ export type UpdateAddOnsInput = {
24672
26136
  quotas: Array<AddonQuotaInput>;
24673
26137
  };
24674
26138
  export type UpdatePlanInput = {
26139
+ /** Immutable once set — see `price`. Throws CURRENCY_CHANGE_NOT_ALLOWED on an actual change. */
24675
26140
  currency?: InputMaybe<Scalars['String']['input']>;
26141
+ /** Not settable on update — any non-empty value throws PRICE_CHANGE_NOT_ALLOWED (same reason as `price`: each currency's price is already registered as its own real Stripe Price / Razorpay Plan). */
24676
26142
  currencyPriceOverrides?: InputMaybe<Array<CurrencyPriceOverrideInput>>;
24677
- /** Default USD */
26143
+ /** Default USD. Immutable once set — see `price`. Throws DURATION_CHANGE_NOT_ALLOWED on an actual change. */
24678
26144
  duration?: InputMaybe<PlanDuration>;
24679
26145
  geoPricingOverrides?: InputMaybe<Array<GeoPricingOverrideInput>>;
24680
26146
  id: Scalars['String']['input'];
24681
26147
  isActive?: InputMaybe<Scalars['Boolean']['input']>;
24682
26148
  isPurchasable?: InputMaybe<Scalars['Boolean']['input']>;
24683
26149
  maxSeats?: InputMaybe<Scalars['Int']['input']>;
26150
+ maxWorkspaces?: InputMaybe<Scalars['Int']['input']>;
24684
26151
  minSeats?: InputMaybe<Scalars['Int']['input']>;
24685
26152
  name?: InputMaybe<Scalars['String']['input']>;
26153
+ /** Immutable once set — a plan's price is already registered as a real Stripe Price / Razorpay Plan object at creation, and those cannot be edited in place. Passing the plan's current price back is a harmless no-op; passing a different value throws PRICE_CHANGE_NOT_ALLOWED. To change pricing, create a new plan and deactivate this one. */
24686
26154
  price?: InputMaybe<Scalars['Float']['input']>;
26155
+ /** Immutable once set — see `price`. Throws PRICE_CHANGE_NOT_ALLOWED on an actual change. */
24687
26156
  pricePerSeat?: InputMaybe<Scalars['Float']['input']>;
24688
26157
  pricingModel?: InputMaybe<PlanPricingModel>;
24689
26158
  quotas: Array<PlanQuotaInput>;