@burdenoff/microfe-devportal 2026.1107.2 → 2026.1108.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/devportal/DevportalRoutes.d.ts.map +1 -1
  2. package/dist/devportal/DevportalRoutes.js +27 -23
  3. package/dist/devportal/DevportalRoutes.js.map +1 -1
  4. package/dist/devportal/pages/ApplicationDetailPage.d.ts.map +1 -1
  5. package/dist/devportal/pages/ApplicationDetailPage.js +743 -726
  6. package/dist/devportal/pages/ApplicationDetailPage.js.map +1 -1
  7. package/dist/devportal/pages/PublisherPayoutsPage.d.ts +21 -0
  8. package/dist/devportal/pages/PublisherPayoutsPage.d.ts.map +1 -0
  9. package/dist/devportal/pages/PublisherPayoutsPage.js +657 -0
  10. package/dist/devportal/pages/PublisherPayoutsPage.js.map +1 -0
  11. package/dist/devportal/pages/PublisherProfilePage.d.ts.map +1 -1
  12. package/dist/devportal/pages/PublisherProfilePage.js +166 -153
  13. package/dist/devportal/pages/PublisherProfilePage.js.map +1 -1
  14. package/dist/devportal/utils/publisherPayouts.d.ts +137 -0
  15. package/dist/devportal/utils/publisherPayouts.d.ts.map +1 -0
  16. package/dist/devportal/utils/publisherPayouts.js +167 -0
  17. package/dist/devportal/utils/publisherPayouts.js.map +1 -0
  18. package/dist/devportal/utils/submitForReview.d.ts +40 -0
  19. package/dist/devportal/utils/submitForReview.d.ts.map +1 -0
  20. package/dist/devportal/utils/submitForReview.js +37 -0
  21. package/dist/devportal/utils/submitForReview.js.map +1 -0
  22. package/dist/generated/global-operations.d.ts +341 -0
  23. package/dist/generated/global-operations.d.ts.map +1 -1
  24. package/dist/generated/global-operations.js +409 -270
  25. package/dist/generated/global-operations.js.map +1 -1
  26. package/dist/generated/global-types.d.ts +2292 -323
  27. package/dist/generated/global-types.d.ts.map +1 -1
  28. package/dist/generated/global-types.js +3 -1
  29. package/dist/generated/global-types.js.map +1 -1
  30. package/dist/translations/en.d.ts +91 -0
  31. package/dist/translations/en.d.ts.map +1 -1
  32. package/dist/translations/en.js +91 -0
  33. package/dist/translations/en.js.map +1 -1
  34. package/package.json +1 -1
@@ -172,6 +172,13 @@ export declare enum ActivityAction {
172
172
  export type ActivityFilterInput = {
173
173
  action?: InputMaybe<Scalars['String']['input']>;
174
174
  actorId?: InputMaybe<Scalars['String']['input']>;
175
+ /**
176
+ * Only rows made by this kind of actor origin (BOFF-9649). The only recorded origin is
177
+ * `ai_assistant`: a change an AI assistant session made for its owner.
178
+ */
179
+ actorOrigin?: InputMaybe<Scalars['String']['input']>;
180
+ /** Only rows made by this AI assistant session (BOFF-9649). */
181
+ assistantSessionId?: InputMaybe<Scalars['String']['input']>;
175
182
  endDate?: InputMaybe<Scalars['DateTime']['input']>;
176
183
  resource?: InputMaybe<Scalars['String']['input']>;
177
184
  resourceId?: InputMaybe<Scalars['String']['input']>;
@@ -185,6 +192,12 @@ export type ActivityLog = {
185
192
  __typename?: 'ActivityLog';
186
193
  action: Scalars['String']['output'];
187
194
  actorId?: Maybe<Scalars['String']['output']>;
195
+ /** `ai_assistant` when an AI assistant session made the change; null for a human-made change. */
196
+ actorOrigin?: Maybe<Scalars['String']['output']>;
197
+ /** Proposal / idempotency key the assistant mutation ran under, when it had one. */
198
+ assistantCorrelationId?: Maybe<Scalars['String']['output']>;
199
+ /** Relay session (assistant sandbox) that made the change, when an assistant made it. */
200
+ assistantSessionId?: Maybe<Scalars['String']['output']>;
188
201
  createdAt: Scalars['DateTime']['output'];
189
202
  description?: Maybe<Scalars['String']['output']>;
190
203
  id: Scalars['ID']['output'];
@@ -304,6 +317,29 @@ export type AddFulfillmentTrackingEventInput = {
304
317
  occurredAt?: InputMaybe<Scalars['DateTime']['input']>;
305
318
  status: FulfillmentStatus;
306
319
  };
320
+ /**
321
+ * Input for a publisher adding their own payout method. Only masked details are
322
+ * stored: the last four digits of the account plus the bank code. The payout
323
+ * processor (RazorpayX for India, Stripe Connect for international publishers)
324
+ * holds the full account and is referenced through externalAccountId, which an
325
+ * admin confirms or supplies when verifying the method.
326
+ */
327
+ export type AddMyPublisherPayoutMethodInput = {
328
+ accountHolderName: Scalars['String']['input'];
329
+ /** Last four digits of the bank account (BANK_TRANSFER and RAZORPAY_X). */
330
+ accountNumberLast4?: InputMaybe<Scalars['String']['input']>;
331
+ /** IFSC for Indian accounts, SWIFT/BIC elsewhere (BANK_TRANSFER and RAZORPAY_X). */
332
+ bankCode?: InputMaybe<Scalars['String']['input']>;
333
+ bankName?: InputMaybe<Scalars['String']['input']>;
334
+ /** ISO 3166-1 alpha-2 country of the payout account. */
335
+ country: Scalars['String']['input'];
336
+ /** ISO 4217 payout currency. Defaults to INR for India and USD elsewhere. */
337
+ currency?: InputMaybe<Scalars['String']['input']>;
338
+ /** Processor account reference when the publisher already has one (Stripe acct_..., RazorpayX fa_...). */
339
+ externalAccountId?: InputMaybe<Scalars['String']['input']>;
340
+ isDefault?: InputMaybe<Scalars['Boolean']['input']>;
341
+ type: PayoutMethodType;
342
+ };
307
343
  export type AddOnInputPayment = {
308
344
  id: Scalars['String']['input'];
309
345
  quantity?: InputMaybe<Scalars['Int']['input']>;
@@ -416,9 +452,22 @@ export type Addon = {
416
452
  priceHistory: Array<AddonPriceHistory>;
417
453
  /** Product ID the addon belongs to (reference to product microservice) */
418
454
  productID?: Maybe<Scalars['String']['output']>;
455
+ /** Whether buying this add-on requires a paid subscription to its product (the catalogs' "Free tier exclusion" rule, BOFF-9889). False for items sold to Free users on purpose. */
456
+ requiresPaidSubscription?: Maybe<Scalars['Boolean']['output']>;
419
457
  /** The timestamp when the addon was last updated. */
420
458
  updatedAt?: Maybe<Scalars['DateTime']['output']>;
421
459
  };
460
+ /** Why an add-on can or cannot be bought by the caller's billing account(s). */
461
+ export declare enum AddonEligibilityReason {
462
+ /** The add-on can be bought. */
463
+ Eligible = "ELIGIBLE",
464
+ /** No add-on with this id exists. */
465
+ NotFound = "NOT_FOUND",
466
+ /** The add-on requires a paid subscription to its product and none is active. */
467
+ PaidSubscriptionRequired = "PAID_SUBSCRIPTION_REQUIRED",
468
+ /** The chosen subscription is not a paid plan of the add-on's product. */
469
+ SubscriptionNotEligible = "SUBSCRIPTION_NOT_ELIGIBLE"
470
+ }
422
471
  /** Tracks historical price changes for an Addon. A new record is created whenever an addon's price is updated. */
423
472
  export type AddonPriceHistory = {
424
473
  __typename?: 'AddonPriceHistory';
@@ -439,6 +488,17 @@ export type AddonPriceHistory = {
439
488
  /** Optional reason for the price change */
440
489
  reason?: Maybe<Scalars['String']['output']>;
441
490
  };
491
+ /** Purchase eligibility of one add-on (BOFF-9889). */
492
+ export type AddonPurchaseEligibility = {
493
+ __typename?: 'AddonPurchaseEligibility';
494
+ addonId: Scalars['ID']['output'];
495
+ eligible: Scalars['Boolean']['output'];
496
+ /** Active paid subscriptions of the add-on's product the add-on may be attached to. */
497
+ eligibleSubscriptionIds: Array<Scalars['ID']['output']>;
498
+ productId?: Maybe<Scalars['String']['output']>;
499
+ reason: AddonEligibilityReason;
500
+ requiresPaidSubscription: Scalars['Boolean']['output'];
501
+ };
442
502
  export type AddonSubscription = {
443
503
  __typename?: 'AddonSubscription';
444
504
  /** The addon linked to this subscription. */
@@ -754,6 +814,8 @@ export type AiModelPrice = {
754
814
  isActive: Scalars['Boolean']['output'];
755
815
  model: Scalars['String']['output'];
756
816
  outputPer1M: Scalars['Float']['output'];
817
+ /** When this price row last changed. Ledger cost estimates cite it in their pricing reference (wspace-prompts-svc, BOFF-9935) so a cost stays traceable to the exact price version that produced it. */
818
+ updatedAt: Scalars['DateTime']['output'];
757
819
  };
758
820
  /** Amount range filter for queries */
759
821
  export type AmountRangeInput = {
@@ -1875,13 +1937,17 @@ export type BillingSubscription = {
1875
1937
  };
1876
1938
  export type BillingWebhookLog = {
1877
1939
  __typename?: 'BillingWebhookLog';
1940
+ attemptCount: Scalars['Int']['output'];
1878
1941
  context?: Maybe<Scalars['JSON']['output']>;
1879
1942
  createdAt: Scalars['DateTime']['output'];
1943
+ deadLetteredAt?: Maybe<Scalars['DateTime']['output']>;
1880
1944
  error?: Maybe<Scalars['String']['output']>;
1881
1945
  event: Scalars['String']['output'];
1882
1946
  id: Scalars['ID']['output'];
1947
+ nextAttemptAt?: Maybe<Scalars['DateTime']['output']>;
1883
1948
  payload: Scalars['JSON']['output'];
1884
1949
  processed: Scalars['Boolean']['output'];
1950
+ processingStartedAt?: Maybe<Scalars['DateTime']['output']>;
1885
1951
  provider: Scalars['String']['output'];
1886
1952
  };
1887
1953
  /** 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. */
@@ -2166,10 +2232,19 @@ export type CannedResponseFilterInput = {
2166
2232
  isActive?: InputMaybe<Scalars['Boolean']['input']>;
2167
2233
  tags?: InputMaybe<Array<Scalars['String']['input']>>;
2168
2234
  };
2169
- /** 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. */
2235
+ /**
2236
+ * One of a shipping carrier's own registered pickup/warehouse addresses (see
2237
+ * carrierPickupLocations query). Not organization-scoped — a pickup location
2238
+ * belongs to whichever carrier account it's registered with (e.g. Shiprocket
2239
+ * today; more carriers may be added later), since a store's ShippingMethods
2240
+ * can each use a different carrier.
2241
+ */
2170
2242
  export type CarrierPickupLocation = {
2171
2243
  __typename?: 'CarrierPickupLocation';
2172
- /** Which carrier this pickup address is registered with (matches ShippingMethod.carrier, e.g. "shiprocket"). */
2244
+ /**
2245
+ * Which carrier this pickup address is registered with (matches
2246
+ * ShippingMethod.carrier, e.g. "shiprocket").
2247
+ */
2173
2248
  carrier: Scalars['String']['output'];
2174
2249
  label: Scalars['String']['output'];
2175
2250
  postalCode: Scalars['String']['output'];
@@ -2328,6 +2403,32 @@ export declare enum CartStatus {
2328
2403
  /** Cart was merged into another cart (e.g., after login) */
2329
2404
  Merged = "MERGED"
2330
2405
  }
2406
+ export type CatalogProductSync = {
2407
+ __typename?: 'CatalogProductSync';
2408
+ productId: Scalars['ID']['output'];
2409
+ reason?: Maybe<Scalars['String']['output']>;
2410
+ slug: Scalars['String']['output'];
2411
+ status: CatalogProductSyncStatus;
2412
+ };
2413
+ /** What a catalog sync did to one Store listing of the node (BOFF-9458). */
2414
+ export declare enum CatalogProductSyncStatus {
2415
+ /** The listing is a draft, under review, rejected or archived; left alone. */
2416
+ InactiveListing = "INACTIVE_LISTING",
2417
+ /** The listing belongs to a publisher that is not a catalog publisher; left alone. */
2418
+ NotCatalogManaged = "NOT_CATALOG_MANAGED",
2419
+ /** The listing already matched; nothing was written. */
2420
+ Unchanged = "UNCHANGED",
2421
+ /** The listing's node contract now matches the catalog manifest. */
2422
+ Updated = "UPDATED",
2423
+ /** The listing is for another node version; left alone. */
2424
+ VersionMismatch = "VERSION_MISMATCH"
2425
+ }
2426
+ export type CatalogRegistrySync = {
2427
+ __typename?: 'CatalogRegistrySync';
2428
+ reason?: Maybe<Scalars['String']['output']>;
2429
+ /** wspace-workflow-svc's outcome (UPDATED, UNCHANGED, NOT_REGISTERED, INVALID_MANIFEST), or FAILED when it was not reached. */
2430
+ status: Scalars['String']['output'];
2431
+ };
2331
2432
  export type CategoryBreakdown = {
2332
2433
  __typename?: 'CategoryBreakdown';
2333
2434
  category: SupportTicketCategory;
@@ -2396,8 +2497,6 @@ export type Channel = {
2396
2497
  priority: Scalars['Int']['output'];
2397
2498
  /** Current channel status (admin-controlled: ACTIVE, INACTIVE, etc.) */
2398
2499
  status: ChannelStatus;
2399
- /** Tag assignments for this channel (stub — returns empty until wspace-tags-svc supports org-scoped assignments) */
2400
- tagAssignments: Array<ChannelTagAssignment>;
2401
2500
  /** Number of times this channel has been triggered (e.g., for workflows, automations) */
2402
2501
  triggerCount: Scalars['Int']['output'];
2403
2502
  /** Last update timestamp */
@@ -2490,8 +2589,6 @@ export type ChannelConnection = {
2490
2589
  needsTokenRefresh: Scalars['Boolean']['output'];
2491
2590
  /** Platform-specific metadata (channel IDs, team info, etc.) NOTE: Non-sensitive data only */
2492
2591
  platformMetadata?: Maybe<Scalars['JSON']['output']>;
2493
- /** Tag assignments for this connection (stub — returns empty until wspace-tags-svc supports org-scoped assignments) */
2494
- tagAssignments: Array<ChannelConnectionTagAssignment>;
2495
2592
  /** Connection test status message */
2496
2593
  testStatus?: Maybe<Scalars['String']['output']>;
2497
2594
  /** OAuth token expiration (for OAuth flows) */
@@ -2507,18 +2604,6 @@ export type ChannelConnectionList = {
2507
2604
  nextCursor?: Maybe<Scalars['String']['output']>;
2508
2605
  total: Scalars['Int']['output'];
2509
2606
  };
2510
- export type ChannelConnectionTagAssignment = {
2511
- __typename?: 'ChannelConnectionTagAssignment';
2512
- assignedAt?: Maybe<Scalars['DateTime']['output']>;
2513
- assignedBy?: Maybe<Scalars['ID']['output']>;
2514
- entityId: Scalars['ID']['output'];
2515
- entityType: Scalars['String']['output'];
2516
- id: Scalars['ID']['output'];
2517
- metadata?: Maybe<Scalars['JSON']['output']>;
2518
- source: Scalars['String']['output'];
2519
- tag?: Maybe<UniversalTag>;
2520
- tagId: Scalars['ID']['output'];
2521
- };
2522
2607
  /** Attachment input for channel delivery */
2523
2608
  export type ChannelDeliveryAttachmentInput = {
2524
2609
  /** Content (Base64 encoded) or URL */
@@ -2889,18 +2974,6 @@ export declare enum ChannelStatus {
2889
2974
  /** Channel is suspended (rate limit, violation) */
2890
2975
  Suspended = "SUSPENDED"
2891
2976
  }
2892
- export type ChannelTagAssignment = {
2893
- __typename?: 'ChannelTagAssignment';
2894
- assignedAt?: Maybe<Scalars['DateTime']['output']>;
2895
- assignedBy?: Maybe<Scalars['ID']['output']>;
2896
- entityId: Scalars['ID']['output'];
2897
- entityType: Scalars['String']['output'];
2898
- id: Scalars['ID']['output'];
2899
- metadata?: Maybe<Scalars['JSON']['output']>;
2900
- source: Scalars['String']['output'];
2901
- tag?: Maybe<UniversalTag>;
2902
- tagId: Scalars['ID']['output'];
2903
- };
2904
2977
  /** Channel type discriminator — determines delivery behaviour and webhook handling. NOTIFICATION channels (EMAIL, SMS) are outbound-only: - Support priority-based failover across adapters. - No inbound webhook processing. - No DM conversations. - Recipient resolved via externalEmail (email) or externalUserId (phone). COMMUNICATION channels (SLACK, TEAMS, DISCORD, WHATSAPP, WEBCHAT, INAPP, WEBHOOK) are bi-directional: - Inbound webhooks processed and forwarded to conversations-svc. - DM conversations tracked via dmConversationId. - Recipient resolved via dmConversationId set during OAuth / pairing. */
2905
2978
  export declare enum ChannelType {
2906
2979
  /** Bi-directional platform channels: SLACK, TEAMS, DISCORD, WHATSAPP, WEBCHAT, INAPP, WEBHOOK. Processes inbound webhooks and supports DM conversations. */
@@ -2946,11 +3019,17 @@ export declare enum ChartWindow {
2946
3019
  }
2947
3020
  /** Input for checkout */
2948
3021
  export type CheckoutInput = {
2949
- /** Billing account ID. When omitted, the store resolves the caller's default billing account from billing-svc automatically. */
3022
+ /**
3023
+ * Billing account ID. When omitted, the store resolves the caller's default
3024
+ * billing account from billing-svc automatically.
3025
+ */
2950
3026
  billingAccountId?: InputMaybe<Scalars['String']['input']>;
2951
3027
  /** Order notes */
2952
3028
  notes?: InputMaybe<Scalars['String']['input']>;
2953
- /** Payment method ID. When omitted, the store uses the default payment method on the resolved billing account. */
3029
+ /**
3030
+ * Payment method ID. When omitted, the store uses the default payment method
3031
+ * on the resolved billing account.
3032
+ */
2954
3033
  paymentMethodId?: InputMaybe<Scalars['String']['input']>;
2955
3034
  /** Shipping address ID (required for physical items) */
2956
3035
  shippingAddressId?: InputMaybe<Scalars['String']['input']>;
@@ -3562,6 +3641,8 @@ export type CreateContentPageInput = {
3562
3641
  category?: InputMaybe<Scalars['String']['input']>;
3563
3642
  content: Scalars['String']['input'];
3564
3643
  contentFormat?: InputMaybe<Scalars['String']['input']>;
3644
+ /** Customer approval for a case study. All three fields are required, and signedAt may not be in the future. */
3645
+ customerSignOff?: InputMaybe<CustomerSignOffInput>;
3565
3646
  excerpt?: InputMaybe<Scalars['String']['input']>;
3566
3647
  featured?: InputMaybe<Scalars['Boolean']['input']>;
3567
3648
  isPublished?: InputMaybe<Scalars['Boolean']['input']>;
@@ -3970,7 +4051,10 @@ export type CreatePhysicalProductInput = {
3970
4051
  bannerUrl?: InputMaybe<Scalars['String']['input']>;
3971
4052
  brand?: InputMaybe<Scalars['String']['input']>;
3972
4053
  category?: InputMaybe<Scalars['String']['input']>;
3973
- /** Which platform products this listing is relevant to (e.g. "healthybowl"). Set by the calling seller-portal shell — see DeveloperOrgKind (BOFF-7285). */
4054
+ /**
4055
+ * Which platform products this listing is relevant to (e.g. "healthybowl").
4056
+ * Set by the calling seller-portal shell — see DeveloperOrgKind (BOFF-7285).
4057
+ */
3974
4058
  compatibleProducts?: InputMaybe<Array<Scalars['String']['input']>>;
3975
4059
  countryOfOrigin?: InputMaybe<Scalars['String']['input']>;
3976
4060
  currency?: InputMaybe<Scalars['String']['input']>;
@@ -4196,9 +4280,13 @@ export type CreateReleaseTrackInput = {
4196
4280
  };
4197
4281
  export type CreateReviewInput = {
4198
4282
  comment?: InputMaybe<Scalars['String']['input']>;
4283
+ isVerifiedInstall?: InputMaybe<Scalars['Boolean']['input']>;
4284
+ metadata?: InputMaybe<Scalars['JSON']['input']>;
4199
4285
  productId: Scalars['String']['input'];
4200
4286
  rating: Scalars['Int']['input'];
4287
+ status?: InputMaybe<ReviewStatus>;
4201
4288
  title?: InputMaybe<Scalars['String']['input']>;
4289
+ verifiedPurchase?: InputMaybe<Scalars['Boolean']['input']>;
4202
4290
  };
4203
4291
  export type CreateReviewReplyInput = {
4204
4292
  productId: Scalars['ID']['input'];
@@ -4430,11 +4518,6 @@ export type CreateSupportTicketInput = {
4430
4518
  tags?: InputMaybe<Array<Scalars['String']['input']>>;
4431
4519
  workspaceId?: InputMaybe<Scalars['String']['input']>;
4432
4520
  };
4433
- export type CreateTagInput = {
4434
- description?: InputMaybe<Scalars['String']['input']>;
4435
- name: Scalars['String']['input'];
4436
- slug: Scalars['String']['input'];
4437
- };
4438
4521
  export type CreateTemplateInput = {
4439
4522
  bodyTemplate: Scalars['String']['input'];
4440
4523
  /** Default delivery channel for this template (defaults to EMAIL if not specified) */
@@ -4767,6 +4850,22 @@ export type CustomerSatisfactionSurveyFilterInput = {
4767
4850
  startDate?: InputMaybe<Scalars['DateTime']['input']>;
4768
4851
  ticketId?: InputMaybe<Scalars['String']['input']>;
4769
4852
  };
4853
+ /** Who at the customer approved a case study, when, and where the written approval is kept. Never invent one: it is the only thing that lets a case study appear on a public website. */
4854
+ export type CustomerSignOff = {
4855
+ __typename?: 'CustomerSignOff';
4856
+ /** Reference to the stored written approval (document id, ticket or file URL). Only returned to callers who manage content pages; null for public visitors. */
4857
+ documentRef?: Maybe<Scalars['String']['output']>;
4858
+ /** When the customer approved the story */
4859
+ signedAt: Scalars['DateTime']['output'];
4860
+ /** Name and role of the approving person at the customer. Only returned to callers who manage content pages; null for public visitors. */
4861
+ signedBy?: Maybe<Scalars['String']['output']>;
4862
+ };
4863
+ /** Customer approval for a case study (see CustomerSignOff) */
4864
+ export type CustomerSignOffInput = {
4865
+ documentRef: Scalars['String']['input'];
4866
+ signedAt: Scalars['DateTime']['input'];
4867
+ signedBy: Scalars['String']['input'];
4868
+ };
4770
4869
  export declare enum DlqStatus {
4771
4870
  Discarded = "DISCARDED",
4772
4871
  Investigating = "INVESTIGATING",
@@ -4880,6 +4979,12 @@ export type DeadLetterQueueConnection = {
4880
4979
  hasMore: Scalars['Boolean']['output'];
4881
4980
  total: Scalars['Int']['output'];
4882
4981
  };
4982
+ export type DecideGovernanceAppealInput = {
4983
+ decision: GovernanceAppealDecision;
4984
+ id: Scalars['ID']['input'];
4985
+ /** Decision note the publisher sees. */
4986
+ note: Scalars['String']['input'];
4987
+ };
4883
4988
  export declare enum DelegationStatus {
4884
4989
  Active = "ACTIVE",
4885
4990
  Expired = "EXPIRED",
@@ -5538,6 +5643,73 @@ export declare enum DimensionUnit {
5538
5643
  Inch = "INCH",
5539
5644
  Meter = "METER"
5540
5645
  }
5646
+ /** What a directory sync did (or, in a dry run, would do) for one worker. */
5647
+ export declare enum DirectorySyncAction {
5648
+ Conflict = "CONFLICT",
5649
+ Create = "CREATE",
5650
+ Deactivate = "DEACTIVATE",
5651
+ Error = "ERROR",
5652
+ Reactivate = "REACTIVATE",
5653
+ Skip = "SKIP",
5654
+ Unchanged = "UNCHANGED",
5655
+ Update = "UPDATE"
5656
+ }
5657
+ export type DirectorySyncInput = {
5658
+ /** Compute the outcome without writing anything. */
5659
+ dryRun: Scalars['Boolean']['input'];
5660
+ source: DirectorySyncSource;
5661
+ /** The connector that sent the batch (its integration connection id), recorded as the actor on every account it creates, changes or deactivates. */
5662
+ sourceRef: Scalars['String']['input'];
5663
+ /** At most 200 workers per call. */
5664
+ workers: Array<DirectoryWorkerInput>;
5665
+ };
5666
+ export type DirectorySyncItem = {
5667
+ __typename?: 'DirectorySyncItem';
5668
+ action: DirectorySyncAction;
5669
+ detail?: Maybe<Scalars['String']['output']>;
5670
+ email?: Maybe<Scalars['String']['output']>;
5671
+ externalId: Scalars['String']['output'];
5672
+ userId?: Maybe<Scalars['ID']['output']>;
5673
+ };
5674
+ export type DirectorySyncResult = {
5675
+ __typename?: 'DirectorySyncResult';
5676
+ conflicts: Scalars['Int']['output'];
5677
+ created: Scalars['Int']['output'];
5678
+ deactivated: Scalars['Int']['output'];
5679
+ dryRun: Scalars['Boolean']['output'];
5680
+ errors: Scalars['Int']['output'];
5681
+ items: Array<DirectorySyncItem>;
5682
+ reactivated: Scalars['Int']['output'];
5683
+ skipped: Scalars['Int']['output'];
5684
+ unchanged: Scalars['Int']['output'];
5685
+ updated: Scalars['Int']['output'];
5686
+ };
5687
+ /** Where an HR-system directory sync comes from (BOFF-10564). */
5688
+ export declare enum DirectorySyncSource {
5689
+ SapSuccessfactors = "SAP_SUCCESSFACTORS",
5690
+ Workday = "WORKDAY"
5691
+ }
5692
+ /** One worker as the HR system reports it. `externalId` is the HR system's stable worker id; the platform namespaces it by source before storing it. */
5693
+ export type DirectoryWorkerInput = {
5694
+ active: Scalars['Boolean']['input'];
5695
+ email?: InputMaybe<Scalars['String']['input']>;
5696
+ externalId: Scalars['String']['input'];
5697
+ familyName?: InputMaybe<Scalars['String']['input']>;
5698
+ givenName?: InputMaybe<Scalars['String']['input']>;
5699
+ };
5700
+ /** Input for the M2M dispatchWebhookEvent mutation */
5701
+ export type DispatchWebhookEventInput = {
5702
+ /** Caller-supplied event ID; enables idempotent redispatch per subscription */
5703
+ eventId?: InputMaybe<Scalars['String']['input']>;
5704
+ /** Event type being dispatched */
5705
+ eventType: Scalars['String']['input'];
5706
+ /** Owner identifier of the event stream (e.g. platform product id) */
5707
+ ownerId: Scalars['String']['input'];
5708
+ /** Owner namespace of the event stream (e.g. "newsletter-product") */
5709
+ ownerType: Scalars['String']['input'];
5710
+ /** Event payload; wrapped in the signed envelope as `data` */
5711
+ payload: Scalars['JSON']['input'];
5712
+ };
5541
5713
  /** DSAR mode — GDPR Art. 15 (access/export) or Art. 17 (erasure). */
5542
5714
  export declare enum DsarMode {
5543
5715
  Erase = "ERASE",
@@ -5591,6 +5763,15 @@ export type EarnCreditsInput = {
5591
5763
  productId?: InputMaybe<Scalars['String']['input']>;
5592
5764
  sourceReferenceId?: InputMaybe<Scalars['String']['input']>;
5593
5765
  };
5766
+ /** Outcome of serviceReverseEarning. */
5767
+ export declare enum EarningReversalOutcome {
5768
+ /** An earlier call already reversed the entry (idempotent replay). */
5769
+ AlreadyReversed = "ALREADY_REVERSED",
5770
+ /** The entry is RESERVED for, or PAID by, a payout and was left unchanged. */
5771
+ NotReversible = "NOT_REVERSIBLE",
5772
+ /** The entry was AVAILABLE and is now REVERSED. */
5773
+ Reversed = "REVERSED"
5774
+ }
5594
5775
  export declare enum EarningUnitType {
5595
5776
  Credits = "CREDITS",
5596
5777
  Money = "MONEY"
@@ -5616,6 +5797,9 @@ export type EarningsEntry = {
5616
5797
  paidAt?: Maybe<Scalars['DateTime']['output']>;
5617
5798
  payoutRequestId?: Maybe<Scalars['ID']['output']>;
5618
5799
  reservedAt?: Maybe<Scalars['DateTime']['output']>;
5800
+ reversalReason?: Maybe<Scalars['String']['output']>;
5801
+ /** When the entry was reversed (its source sale was refunded), if it was. */
5802
+ reversedAt?: Maybe<Scalars['DateTime']['output']>;
5619
5803
  sourceCategory: EarningsSourceCategory;
5620
5804
  sourceEventId?: Maybe<Scalars['String']['output']>;
5621
5805
  sourceReferenceId?: Maybe<Scalars['String']['output']>;
@@ -5650,13 +5834,18 @@ export declare enum EarningsSourceCategory {
5650
5834
  }
5651
5835
  export type EarningsSummary = {
5652
5836
  __typename?: 'EarningsSummary';
5837
+ /** Earned, past its hold window and not yet reserved for a payout. */
5653
5838
  availableAmount: Scalars['Float']['output'];
5654
5839
  categoryBreakdown: Array<EarningsCategoryBreakdown>;
5655
5840
  creditsAmount: Scalars['Float']['output'];
5656
5841
  moneyAmount: Scalars['Float']['output'];
5657
5842
  paidAmount: Scalars['Float']['output'];
5843
+ /** Earned but still inside its hold window (availableAt in the future), so not payable yet. */
5658
5844
  pendingAmount: Scalars['Float']['output'];
5659
5845
  reservedAmount: Scalars['Float']['output'];
5846
+ /** Entries reversed because their source sale was refunded. Not part of any other total. */
5847
+ reversedAmount: Scalars['Float']['output'];
5848
+ /** Everything earned, excluding reversed entries. */
5660
5849
  totalLifetimeAmount: Scalars['Float']['output'];
5661
5850
  };
5662
5851
  export type EditorialCollection = {
@@ -6013,6 +6202,8 @@ export type ExploreAgentSubmitInput = {
6013
6202
  message: Scalars['String']['input'];
6014
6203
  /** Catalog slug of the website the visitor is on. A hint only. */
6015
6204
  productSlug?: InputMaybe<Scalars['String']['input']>;
6205
+ /** The website avatar asked: the visitor sent this question from the avatar's own question box (BOFF-9797). A hint only. It may let a typed first question, or with the service's follow-up setting a later question of the same conversation, be answered in the shape the avatar can read aloud, when the service's settings allow it; it never changes any other turn. */
6206
+ readAloud?: InputMaybe<Scalars['Boolean']['input']>;
6016
6207
  };
6017
6208
  export type ExploreAgentUsage = {
6018
6209
  __typename?: 'ExploreAgentUsage';
@@ -6075,6 +6266,29 @@ export type ExploreConversation = {
6075
6266
  token: Scalars['String']['output'];
6076
6267
  turnCount: Scalars['Int']['output'];
6077
6268
  };
6269
+ /** What a conversation token reveals about its own conversation, and nothing more. Deliberately a separate type from `ExploreConversation`: that one carries the bearer secret and is only ever handed to the caller that already holds it, while this one is a plain read. It has no token, no IP hash and no stored metadata, and it can never describe a conversation other than the one the caller's token owns. */
6270
+ export type ExploreConversationInfo = {
6271
+ __typename?: 'ExploreConversationInfo';
6272
+ createdAt: Scalars['DateTime']['output'];
6273
+ /** The visitor's language: one of `en` `zh` `hi` `es` `ar` `ta`, or null. Null when none was sent, when it was not one of those, and for a conversation stored before the value was checked — never a raw string. */
6274
+ locale?: Maybe<Scalars['String']['output']>;
6275
+ /** Every message the conversation holds, whatever its status. Compare it with the length of an `exploreConversationMessages` read (which is capped at 100) to know whether that read was the whole thread. */
6276
+ messageCount: Scalars['Int']['output'];
6277
+ /** Slug of the product website the conversation started on, as stored. Null when the visitor did not say. */
6278
+ productSlug?: Maybe<Scalars['String']['output']>;
6279
+ };
6280
+ /** One answer, the question it replies to, and where that pair sits in its conversation. Read by the answer's id, so the reader is bound to the exact answer it named rather than to whichever one happens to be newest. Always exactly two messages, however long the thread is. */
6281
+ export type ExploreConversationPair = {
6282
+ __typename?: 'ExploreConversationPair';
6283
+ /** The answer the read named, in whatever state it is in. An unfinished one is reconciled exactly as `exploreMessage` reconciles it. */
6284
+ answer: ExploreMessage;
6285
+ /** True when nothing has been written to the conversation after this answer: no later question, whatever became of it. */
6286
+ latest: Scalars['Boolean']['output'];
6287
+ /** The visitor's question that this answer replies to. */
6288
+ question: ExploreMessage;
6289
+ /** 1-based number of this question and answer in the conversation: the first question and its answer are turn 1. */
6290
+ turn: Scalars['Int']['output'];
6291
+ };
6078
6292
  /** A call-to-action button derived from a cited link. `kind` is one of: CONTACT PARTNERS PRICING SERVICES WAITLIST STORE APP DOCS OTHER. */
6079
6293
  export type ExploreCta = {
6080
6294
  __typename?: 'ExploreCta';
@@ -6172,6 +6386,13 @@ export type ExploreShareLink = {
6172
6386
  __typename?: 'ExploreShareLink';
6173
6387
  shareToken: Scalars['String']['output'];
6174
6388
  };
6389
+ /** Where on the website the visitor asked from. A hint about presentation only: it grants nothing and is never stored. */
6390
+ export declare enum ExploreSurface {
6391
+ /** The Avatar tab, whose answers the live avatar may read aloud: the first one of a conversation, and a later one where the deployment enables follow-ups. */
6392
+ Avatar = "AVATAR",
6393
+ /** The Chat view of the website assistant (the default when omitted). */
6394
+ Chat = "CHAT"
6395
+ }
6175
6396
  export type ExportApplicationsFilter = {
6176
6397
  appType?: InputMaybe<AppType>;
6177
6398
  category?: InputMaybe<Scalars['String']['input']>;
@@ -6261,37 +6482,6 @@ export type ExportSubscriber = {
6261
6482
  unsubscribedAt?: Maybe<Scalars['DateTime']['output']>;
6262
6483
  userId?: Maybe<Scalars['String']['output']>;
6263
6484
  };
6264
- export type ExportSupportInput = {
6265
- /** Date range filter - end date */
6266
- endDate?: InputMaybe<Scalars['DateTime']['input']>;
6267
- /** Export format (CSV or JSON) */
6268
- format: SupportExportFormat;
6269
- /** Include support messages in export */
6270
- includeMessages?: InputMaybe<Scalars['Boolean']['input']>;
6271
- /** Filter by priority */
6272
- priority?: InputMaybe<Array<SupportTicketPriority>>;
6273
- /** Date range filter - start date */
6274
- startDate?: InputMaybe<Scalars['DateTime']['input']>;
6275
- /** Filter by ticket status */
6276
- status?: InputMaybe<Array<SupportTicketStatus>>;
6277
- /** User ID for which to export support data */
6278
- userId: Scalars['ID']['input'];
6279
- /** Workspace ID (optional) */
6280
- workspaceId?: InputMaybe<Scalars['ID']['input']>;
6281
- };
6282
- export type ExportSupportResponse = {
6283
- __typename?: 'ExportSupportResponse';
6284
- /** Download URL (when ready) */
6285
- downloadUrl?: Maybe<Scalars['String']['output']>;
6286
- /** Estimated number of records */
6287
- estimatedRecords?: Maybe<Scalars['Int']['output']>;
6288
- /** Export job ID */
6289
- jobId: Scalars['ID']['output'];
6290
- /** Message */
6291
- message: Scalars['String']['output'];
6292
- /** Export status */
6293
- status: Scalars['String']['output'];
6294
- };
6295
6485
  /** Filter for webhook event exports */
6296
6486
  export type ExportWebhookEventsFilter = {
6297
6487
  channelId?: InputMaybe<Scalars['ID']['input']>;
@@ -6334,6 +6524,12 @@ export type ExternalOidcConfigurationInput = {
6334
6524
  redirectUri?: InputMaybe<Scalars['String']['input']>;
6335
6525
  scopes?: InputMaybe<Array<Scalars['String']['input']>>;
6336
6526
  };
6527
+ export type ExternalRefundResult = {
6528
+ __typename?: 'ExternalRefundResult';
6529
+ alreadyRecorded: Scalars['Boolean']['output'];
6530
+ chargeId: Scalars['ID']['output'];
6531
+ refundId: Scalars['ID']['output'];
6532
+ };
6337
6533
  export type ExternalSettlementResult = {
6338
6534
  __typename?: 'ExternalSettlementResult';
6339
6535
  /** True when the externalRef already had a settlement (idempotent replay). */
@@ -6492,6 +6688,13 @@ export type FileDsarInput = {
6492
6688
  subjectId: Scalars['ID']['input'];
6493
6689
  type: DsarType;
6494
6690
  };
6691
+ export type FileGovernanceAppealInput = {
6692
+ /** Required for a LISTING appeal: the taken-down listing. */
6693
+ productId?: InputMaybe<Scalars['ID']['input']>;
6694
+ /** Why the action should be reversed, up to 4000 characters. */
6695
+ statement: Scalars['String']['input'];
6696
+ targetType: GovernanceAppealTarget;
6697
+ };
6495
6698
  /** Available filter options for UI dropdowns */
6496
6699
  export type FilterOptionsResult = {
6497
6700
  __typename?: 'FilterOptionsResult';
@@ -6573,19 +6776,100 @@ export type GeoPricingOverrideInput = {
6573
6776
  export type GetApplicationTagsInput = {
6574
6777
  applicationId: Scalars['ID']['input'];
6575
6778
  };
6576
- export type GetChannelConnectionTagsInput = {
6779
+ export type GetStoreProductTagsInput = {
6577
6780
  entityId: Scalars['ID']['input'];
6578
6781
  };
6579
- export type GetChannelTagsInput = {
6580
- entityId: Scalars['ID']['input'];
6782
+ /** A publisher's appeal against a takedown or suspension. */
6783
+ export type GovernanceAppeal = {
6784
+ __typename?: 'GovernanceAppeal';
6785
+ actionAt?: Maybe<Scalars['DateTime']['output']>;
6786
+ /** The reason recorded on the action when the appeal was filed. */
6787
+ actionReason?: Maybe<Scalars['String']['output']>;
6788
+ createdAt: Scalars['DateTime']['output'];
6789
+ decidedAt?: Maybe<Scalars['DateTime']['output']>;
6790
+ decidedBy?: Maybe<Scalars['String']['output']>;
6791
+ /** The reviewer's decision note, shown to the publisher. */
6792
+ decisionNote?: Maybe<Scalars['String']['output']>;
6793
+ filedBy: Scalars['String']['output'];
6794
+ id: Scalars['ID']['output'];
6795
+ isReviewOverdue: Scalars['Boolean']['output'];
6796
+ product?: Maybe<StoreProduct>;
6797
+ productId?: Maybe<Scalars['ID']['output']>;
6798
+ publisherId: Scalars['ID']['output'];
6799
+ /** Five business days after filing. */
6800
+ reviewDueAt: Scalars['DateTime']['output'];
6801
+ statement: Scalars['String']['output'];
6802
+ status: GovernanceAppealStatus;
6803
+ submittedAt: Scalars['DateTime']['output'];
6804
+ targetType: GovernanceAppealTarget;
6805
+ };
6806
+ export declare enum GovernanceAppealDecision {
6807
+ Reversed = "REVERSED",
6808
+ Upheld = "UPHELD"
6809
+ }
6810
+ export type GovernanceAppealList = {
6811
+ __typename?: 'GovernanceAppealList';
6812
+ appeals: Array<GovernanceAppeal>;
6813
+ totalCount: Scalars['Int']['output'];
6581
6814
  };
6582
- export type GetStoreProductTagsInput = {
6583
- entityId: Scalars['ID']['input'];
6815
+ export declare enum GovernanceAppealStatus {
6816
+ Pending = "PENDING",
6817
+ /** The action was undone. */
6818
+ Reversed = "REVERSED",
6819
+ /** The action stays in place. */
6820
+ Upheld = "UPHELD"
6821
+ }
6822
+ /** What a governance appeal is against. */
6823
+ export declare enum GovernanceAppealTarget {
6824
+ /** A takedown of one listing. */
6825
+ Listing = "LISTING",
6826
+ /** A suspension of the whole publisher account. */
6827
+ Publisher = "PUBLISHER"
6828
+ }
6829
+ /** The review a report is about, as the reviewer queue shows it. */
6830
+ export type GovernanceReportedReview = {
6831
+ __typename?: 'GovernanceReportedReview';
6832
+ comment?: Maybe<Scalars['String']['output']>;
6833
+ id: Scalars['ID']['output'];
6834
+ productId: Scalars['ID']['output'];
6835
+ productName?: Maybe<Scalars['String']['output']>;
6836
+ productSlug?: Maybe<Scalars['String']['output']>;
6837
+ rating: Scalars['Int']['output'];
6838
+ status: Scalars['String']['output'];
6839
+ title?: Maybe<Scalars['String']['output']>;
6840
+ userId: Scalars['String']['output'];
6841
+ };
6842
+ /** A report against a review, in the reviewer queue. */
6843
+ export type GovernanceReviewReport = {
6844
+ __typename?: 'GovernanceReviewReport';
6845
+ actionTaken?: Maybe<Scalars['String']['output']>;
6846
+ createdAt: Scalars['DateTime']['output'];
6847
+ details?: Maybe<Scalars['String']['output']>;
6848
+ id: Scalars['ID']['output'];
6849
+ /** True when the product's publisher filed this report to dispute the rating. */
6850
+ isRatingDispute: Scalars['Boolean']['output'];
6851
+ reason: Scalars['String']['output'];
6852
+ reportedBy: Scalars['String']['output'];
6853
+ /** True when the reporter is the publisher of the reviewed product. */
6854
+ reportedByPublisher: Scalars['Boolean']['output'];
6855
+ resolutionNote?: Maybe<Scalars['String']['output']>;
6856
+ review?: Maybe<GovernanceReportedReview>;
6857
+ reviewId: Scalars['ID']['output'];
6858
+ reviewedAt?: Maybe<Scalars['DateTime']['output']>;
6859
+ reviewedBy?: Maybe<Scalars['String']['output']>;
6860
+ status: ReviewReportStatus;
6861
+ };
6862
+ export type GovernanceReviewReportList = {
6863
+ __typename?: 'GovernanceReviewReportList';
6864
+ reports: Array<GovernanceReviewReport>;
6865
+ totalCount: Scalars['Int']['output'];
6584
6866
  };
6585
6867
  /** Input for the service-trusted internal self-delegation grant path. Called by a trusted backend (e.g. wspace-integrations-svc) when a user "adds" a first-party integration: it creates a self-delegation (the user grants the first-party app the ability to act as themselves) without a separate consent screen and without the workspace-admin gate (the user is only granting access to their own data, still bounded by their role-based RBAC at the target service). Only callable by service/super_admin actors through an internal gateway. */
6586
6868
  export type GrantAppDelegationInternalInput = {
6587
6869
  /** Client ID of the first-party system app (e.g. burdenoff_integration_core). */
6588
6870
  clientId: Scalars['String']['input'];
6871
+ /** When the delegation lapses (BOFF-9962). Must be in the future. Omit for a delegation without an expiry; a re-grant without it keeps no expiry. */
6872
+ expiresAt?: InputMaybe<Scalars['DateTime']['input']>;
6589
6873
  /** Scopes the delegation must keep for other grants that share it (e.g. the user's other integration connections). A retained scope is kept only while the existing delegation is ACTIVE and already holds it, and only while the app still allows it; otherwise it is dropped, never rejected. A grant therefore never restores or adds a scope beyond the requested scopes. */
6590
6874
  retainedScopes?: InputMaybe<Array<Scalars['String']['input']>>;
6591
6875
  /** Workspaces the delegation must keep for other grants that share it. Kept only while the existing delegation is ACTIVE and already covers them: restoring a REVOKED or EXPIRED delegation covers only workspaceIds. Ignored when workspaceIds is empty (unrestricted). */
@@ -6926,6 +7210,8 @@ export type InitiatePaymentInput = {
6926
7210
  quantity?: InputMaybe<Scalars['Int']['input']>;
6927
7211
  /** Whether to save the card for future purchases (only for new card payments) */
6928
7212
  saveCard?: InputMaybe<Scalars['Boolean']['input']>;
7213
+ /** For PLAN purchase of a PER_SEAT plan: the number of seats to charge for. Clamped server-side to [plan.minSeats, plan.maxSeats]; defaults to plan.minSeats (or 1) when omitted. Ignored for FLAT_RATE plans. */
7214
+ seatCount?: InputMaybe<Scalars['Int']['input']>;
6929
7215
  /** For ADDON purchase: subscription ID to attach addon to. Required if billing account has multiple active subscriptions. If only one active subscription exists, it will be auto-selected. */
6930
7216
  subscriptionId?: InputMaybe<Scalars['ID']['input']>;
6931
7217
  /** For PLAN upgrade: the subscription ID being upgraded from. If provided, this is an upgrade - old quotas will be moved to new subscription. */
@@ -6946,6 +7232,8 @@ export type InitiatePaymentResponse = {
6946
7232
  discountType?: Maybe<Scalars['String']['output']>;
6947
7233
  /** Error message if failed */
6948
7234
  error?: Maybe<Scalars['String']['output']>;
7235
+ /** Machine-readable error code when the initiation failed, e.g. PAID_SUBSCRIPTION_REQUIRED when an add-on needs a paid plan (BOFF-9889). */
7236
+ errorCode?: Maybe<Scalars['String']['output']>;
6949
7237
  /** Tax jurisdiction */
6950
7238
  jurisdiction: Scalars['String']['output'];
6951
7239
  /** Razorpay order ID (for Razorpay payments) */
@@ -7929,6 +8217,64 @@ export declare enum LinkType {
7929
8217
  Parent = "PARENT",
7930
8218
  Related = "RELATED"
7931
8219
  }
8220
+ /** A buyer's report against a listing. */
8221
+ export type ListingReport = {
8222
+ __typename?: 'ListingReport';
8223
+ createdAt: Scalars['DateTime']['output'];
8224
+ details?: Maybe<Scalars['String']['output']>;
8225
+ id: Scalars['ID']['output'];
8226
+ product?: Maybe<StoreProduct>;
8227
+ productId: Scalars['ID']['output'];
8228
+ reason: ListingReportReason;
8229
+ /** Actor id of the reporter. Visible to store admins only (the reporter sees their own). */
8230
+ reportedBy: Scalars['String']['output'];
8231
+ resolutionNote?: Maybe<Scalars['String']['output']>;
8232
+ resolvedAt?: Maybe<Scalars['DateTime']['output']>;
8233
+ resolvedBy?: Maybe<Scalars['String']['output']>;
8234
+ status: ListingReportStatus;
8235
+ updatedAt: Scalars['DateTime']['output'];
8236
+ };
8237
+ export type ListingReportList = {
8238
+ __typename?: 'ListingReportList';
8239
+ reports: Array<ListingReport>;
8240
+ totalCount: Scalars['Int']['output'];
8241
+ };
8242
+ /** Why a buyer reports a listing. */
8243
+ export declare enum ListingReportReason {
8244
+ /** Abusive, hateful or otherwise unacceptable content. */
8245
+ Abuse = "ABUSE",
8246
+ /** The listing does not install or does not work. */
8247
+ Broken = "BROKEN",
8248
+ /** The listing infringes someone's intellectual property. */
8249
+ IpInfringement = "IP_INFRINGEMENT",
8250
+ /** The description, screenshots or pricing misrepresent the listing. */
8251
+ Misleading = "MISLEADING",
8252
+ Other = "OTHER",
8253
+ /** The listing poses a security, privacy or safety risk. */
8254
+ Security = "SECURITY",
8255
+ /** Spam or a duplicate listing. */
8256
+ Spam = "SPAM"
8257
+ }
8258
+ /** Lifecycle of a listing report. */
8259
+ export declare enum ListingReportStatus {
8260
+ Actioned = "ACTIONED",
8261
+ Dismissed = "DISMISSED",
8262
+ Open = "OPEN"
8263
+ }
8264
+ /**
8265
+ * The active takedown of a listing. Visible to store admins and to the listing's
8266
+ * publisher only.
8267
+ */
8268
+ export type ListingTakedown = {
8269
+ __typename?: 'ListingTakedown';
8270
+ category?: Maybe<TakedownCategory>;
8271
+ reason?: Maybe<Scalars['String']['output']>;
8272
+ source: TakedownSource;
8273
+ /** The status a reinstatement restores. */
8274
+ statusBeforeTakedown?: Maybe<ProductStatus>;
8275
+ takenDownAt: Scalars['DateTime']['output'];
8276
+ takenDownBy?: Maybe<Scalars['String']['output']>;
8277
+ };
7932
8278
  export type LowStockProduct = {
7933
8279
  __typename?: 'LowStockProduct';
7934
8280
  name: Scalars['String']['output'];
@@ -8132,6 +8478,8 @@ export type Mutation = {
8132
8478
  acceptDeveloperOrgInvitation: DeveloperOrgMember;
8133
8479
  /** Accept an organization invite (must be logged in as the invited user) */
8134
8480
  acceptOrganizationInvite: OrganizationMember;
8481
+ /** Accept the current Marketplace & Developer Agreement on the calling user's publisher profile. The version must match the published one. */
8482
+ acceptPublisherDeveloperAgreement: Publisher;
8135
8483
  acceptSourcingOffer: SourcingOrderSummary;
8136
8484
  /** Signed (DESIGN 3.7). The provider is ready: RESERVED to ACTIVE. */
8137
8485
  activateAvatarMinutes: AvatarMinutesReservation;
@@ -8157,6 +8505,8 @@ export type Mutation = {
8157
8505
  addAppsToCollection: AppCollection;
8158
8506
  /** Add a payment method to an organization */
8159
8507
  addDeveloperOrgPaymentMethod: DeveloperOrgPaymentMethod;
8508
+ /** Add a payout method to the calling user's publisher profile. Requires the current developer agreement to be accepted. */
8509
+ addMyPublisherPayoutMethod: PublisherPayoutMethod;
8160
8510
  /** Append a tracking event to fulfillment history (admin) */
8161
8511
  addOrderTrackingEvent: FulfillmentTrackingEvent;
8162
8512
  /** Add a member to an organization */
@@ -8201,6 +8551,11 @@ export type Mutation = {
8201
8551
  approveReview: ProductReview;
8202
8552
  approveTranslation: Translation;
8203
8553
  approveWaitlist: NewsletterWaitlist;
8554
+ /**
8555
+ * Admin approves a pending template revision: it becomes the live version of
8556
+ * the template (the version goes up) and the revision is removed.
8557
+ */
8558
+ approveWorkflowTemplateRevision: WorkflowTemplateSubmission;
8204
8559
  /** Soft archive a billing account. Financial history is preserved and the account is removed from active billing operations. */
8205
8560
  archiveBillingAccount: BillingAccount;
8206
8561
  /** Archive a channel */
@@ -8275,7 +8630,7 @@ export type Mutation = {
8275
8630
  bulkSendCustomEmail: BulkCustomEmailResult;
8276
8631
  /** 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. */
8277
8632
  bulkSendRoundMessage: BulkSendResult;
8278
- /** Bulk set user's opt-in/out preference for multiple feature flags. RBAC is scoped to the target workspace via `input.workspaceId`. */
8633
+ /** Bulk set the calling user's opt-in/out preference for multiple feature flags. Self-scoped: rows are keyed by the caller's user id and the resolver requires membership of `input.workspaceId`. */
8279
8634
  bulkSetUserFeatureFlagPreferences: Array<UserFeatureFlagPreference>;
8280
8635
  /** 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. */
8281
8636
  bulkUpdateApplicationStatus: BulkUpdateApplicationStatusResult;
@@ -8471,14 +8826,25 @@ export type Mutation = {
8471
8826
  createSignedCookieSession: SignedCookieResult;
8472
8827
  createSourcingRequest: SourcingRequest;
8473
8828
  createStore: Store;
8474
- /** 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. */
8829
+ /**
8830
+ * Create a new store order (called when user clicks checkout).
8831
+ *
8832
+ * NOTE: Codex P1 on PR #55 — gating is global+create rather than
8833
+ * scopeType:"self". The resolver currently forwards client-supplied
8834
+ * input.total / input.lineItems to OrderService without server-side
8835
+ * re-pricing, so a "self"-gate would let a buyer underprice their own
8836
+ * order and harvest entitlements via the billing callback. Buyer
8837
+ * checkout flows through the cart path (createCart → addToCart →
8838
+ * checkoutCart) which prices server-side. Re-opening this as a
8839
+ * buyer-self action requires server-side total rebuild from product
8840
+ * ids — tracked as a follow-up.
8841
+ */
8475
8842
  createStoreOrder: StoreOrder;
8476
8843
  createSubprocessor: Subprocessor;
8477
8844
  /** Link a subscription plan to a store product granting FREE_ACCESS or DISCOUNT. */
8478
8845
  createSubscriptionEntitlement: StoreSubscriptionEntitlement;
8479
8846
  createSupportMessage: SupportMessage;
8480
8847
  createSupportTicket: SupportTicket;
8481
- createTag: ProductTag;
8482
8848
  /** Create a tax rate */
8483
8849
  createTaxRate: TaxRate;
8484
8850
  /** Create a new tenant (requires admin privileges) */
@@ -8527,6 +8893,8 @@ export type Mutation = {
8527
8893
  deactivateTourSchedule: TourSchedule;
8528
8894
  /** Stops a subject from firing webhooks. The row is kept so a later registration reactivates it. Same ownership rule as registration. */
8529
8895
  deactivateWebhookEventSubject: WebhookEventSubject;
8896
+ /** Decide a pending appeal. REVERSED reinstates the listing or publisher. */
8897
+ decideGovernanceAppeal: GovernanceAppeal;
8530
8898
  /** Pure quota decrement — called by wspace-activity-svc after writing a UsageRecord. Only decrements QuotaAssignment.limits.value. Does NOT write back to activity-svc. Requires the quotaAssignmentId already resolved by checkQuotaExhausted. */
8531
8899
  decrementQuota: Scalars['Boolean']['output'];
8532
8900
  /** Delete current user's account permanently Requires password confirmation */
@@ -8639,7 +9007,6 @@ export type Mutation = {
8639
9007
  deleteSubscriptionEntitlement: Scalars['Boolean']['output'];
8640
9008
  deleteSupportMessage: Scalars['Boolean']['output'];
8641
9009
  deleteSupportTicket: Scalars['Boolean']['output'];
8642
- deleteTag: Scalars['Boolean']['output'];
8643
9010
  /** Delete a tax rate */
8644
9011
  deleteTaxRate: Scalars['Boolean']['output'];
8645
9012
  /** Soft delete a tenant */
@@ -8663,10 +9030,18 @@ export type Mutation = {
8663
9030
  deleteUserLanguagePreference: Scalars['Boolean']['output'];
8664
9031
  /** Soft-delete a user platform connection */
8665
9032
  deleteUserPlatformConnection: Scalars['Boolean']['output'];
8666
- /** M2M: delete a ShippingAddress owned by an explicit user, on behalf of a calling service. Returns false when no matching row exists for that user. Service-actor only. */
9033
+ /**
9034
+ * M2M: delete a ShippingAddress owned by an explicit user, on behalf of a calling
9035
+ * service. Returns false when no matching row exists for that user. Service-actor only.
9036
+ */
8667
9037
  deleteUserShippingAddress: Scalars['Boolean']['output'];
8668
9038
  deleteWebhook: Scalars['Boolean']['output'];
8669
- /** Admin delists a published product — removes it from store discovery for new users while preserving access for anyone who already installed it. */
9039
+ /** Delete a webhook subscription and its delivery log */
9040
+ deleteWebhookSubscription: Scalars['Boolean']['output'];
9041
+ /**
9042
+ * Admin delists a published product — removes it from store discovery for
9043
+ * new users while preserving access for anyone who already installed it.
9044
+ */
8670
9045
  delistProduct: StoreProduct;
8671
9046
  /** Deliver the same notification to multiple recipients in bulk. More efficient than multiple single calls for broadcast scenarios. */
8672
9047
  deliverBulkNotification: BulkChannelDeliveryResult;
@@ -8688,6 +9063,8 @@ export type Mutation = {
8688
9063
  discardDLQEntry: Scalars['Boolean']['output'];
8689
9064
  /** Dismiss a tour for a user (with option to dismiss permanently) */
8690
9065
  dismissTour: TourUserProgress;
9066
+ /** Dispatch an event to every matching webhook subscription of an owner. M2M only — service / super_admin actors; called by the owning service over the internal gateway. Delivery is HMAC-SHA256 signed with retry/backoff and idempotent per caller-supplied eventId. */
9067
+ dispatchWebhookEvent: WebhookDispatchSummary;
8691
9068
  duplicateNewsletter: Newsletter;
8692
9069
  /** Duplicate a tour with all its steps */
8693
9070
  duplicateTour: Tour;
@@ -8699,7 +9076,14 @@ export type Mutation = {
8699
9076
  enrollSubscriberInAutomation: AutomationSubscriber;
8700
9077
  /** Idempotently ensure a user is an organization member, primarily for the workspace-invite-accept flow where an invitee gains a workspace inside an org they're not yet a member of. Unlike `addOrganizationMember`: * Returns `OrganizationMember` whether the row was inserted or already existed — no CONFLICT on repeat calls (case 1: already a member). * Does NOT overwrite the existing `role` column on a pre-existing row (case 2: don't demote). * Triggers a real-role assignment in global-rbac-svc at scope = orgId only when the actor has NO existing role assignment at that scope (case 3: real role comes from RBAC, not the data-layer string). The `role` arg defaults to `GUEST` — the most restrictive enum value — because invitees arriving via a workspace invite should not gain first-class org membership. The data-layer string column is a coarse classifier; the authoritative permission decision is evaluated by global-rbac-svc against `actor_role_assignments`. See BOFF-2649 + the RBAC guide at `dev/platform/context/identity/rbac/RBAC_GUIDE_FOR_AI_TOOLS.md`. Called from wspace-workspace-svc::acceptInvitation via service-context (`X-Actor-Type: service`), which bypasses the workspace-admin check inside the resolver. Best-effort from the caller's side — failures must NOT block the upstream invite acceptance. */
8701
9078
  ensureOrganizationMember: EnsureOrganizationMemberResult;
8702
- /** Ensure a billing order exists for a store order. Called from the checkout frontend when no billingOrderId is present (e.g. the buyer had no billing account at order-creation time). Creates the billing order server-side so the correct callbackGraphQL endpoint is registered and the billing service can call back after payment to confirm the store order. */
9079
+ /**
9080
+ * Ensure a billing order exists for a store order.
9081
+ *
9082
+ * Called from the checkout frontend when no billingOrderId is present (e.g. the
9083
+ * buyer had no billing account at order-creation time). Creates the billing order
9084
+ * server-side so the correct callbackGraphQL endpoint is registered and the
9085
+ * billing service can call back after payment to confirm the store order.
9086
+ */
8703
9087
  ensureStoreOrderBillingOrder: EnsureStoreOrderBillingOrderResponse;
8704
9088
  /** Anonymise the subject on the billing layer. With dryRun=true, returns what would change without mutating. Financial records (Transaction, Invoice, Payment) are RETAINED for the statutory 7-year window. */
8705
9089
  eraseSubject: EraseResult;
@@ -8734,8 +9118,17 @@ export type Mutation = {
8734
9118
  exportWebhooks: DevportalExportJob;
8735
9119
  /** Feature a review */
8736
9120
  featureAppReview: AppReview;
9121
+ featureReview: ProductReview;
8737
9122
  fileDSAR: DsarRequest;
8738
- /** 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. */
9123
+ /** Appeal a takedown of one of your listings, or your publisher suspension. */
9124
+ fileGovernanceAppeal: GovernanceAppeal;
9125
+ /**
9126
+ * Seller reports a problem fulfilling a physical order (out of stock, cannot
9127
+ * fulfill, wrong address, etc). The resolver verifies organizationId actually
9128
+ * owns a physical line item on this order (real evidence in store-svc's own
9129
+ * data) — scopeType: "organization" at the gateway only confirms the actor has
9130
+ * SOME org context, not that it's this specific one.
9131
+ */
8739
9132
  flagOrderIssue: OrderIssueFlag;
8740
9133
  freeUpUsage: Scalars['Boolean']['output'];
8741
9134
  generateAPIKey: ApiKeyResult;
@@ -8760,7 +9153,15 @@ export type Mutation = {
8760
9153
  /** Generate challenge message for wallet signature */
8761
9154
  generateWalletChallenge: WalletChallengeResult;
8762
9155
  getSupportAttachmentPartUploadUrls: Array<SupportAttachmentPresignedPart>;
8763
- /** Service-trusted internal grant of a first-party self-delegation, keyed by the app's client id. Lets a trusted backend record the consent created when a user adds a first-party integration, without the workspace-admin gate that the public grantDelegation enforces. Gated to internal service / super_admin callers and restricted to first-party system apps. */
9156
+ /** Discard a reply draft without sending it. */
9157
+ globalDiscardTicketReplyDraft: Scalars['Boolean']['output'];
9158
+ /** Draft a reply from published knowledge-base articles, FAQs and canned responses, with citations. Saved as an internal draft, never sent. Fails with GROUNDING_INSUFFICIENT when no article or FAQ covers the ticket. */
9159
+ globalDraftTicketReply: SupportMessage;
9160
+ /** Send a reply draft to the customer as an agent reply, optionally edited. This is the only way a draft reaches a customer. */
9161
+ globalSendTicketReplyDraft: SupportMessage;
9162
+ /** Triage a ticket now: fill an empty category, raise the priority if the evidence calls for it, select the SLA policy and suggest an agent. */
9163
+ globalTriageTicket: SupportTriageDecision;
9164
+ /** Service-trusted internal grant of a first-party self-delegation, keyed by the app's client id. Lets a trusted backend record the consent created when a user adds a first-party integration, without the workspace-admin gate that the public grantDelegation enforces. Gated to internal service / super_admin callers and restricted to first-party system apps, or to service-managed apps for their managing service (BOFF-9962). */
8764
9165
  grantAppDelegationInternal: AppUserDelegation;
8765
9166
  /** 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. */
8766
9167
  grantAppWorkspaceAccess: AppWorkspaceAuthorization;
@@ -8788,15 +9189,22 @@ export type Mutation = {
8788
9189
  initiateNTLMChallenge: NtlmChallengeResult;
8789
9190
  /** Initiate a payment for credits, plans, or addons This creates a Stripe PaymentIntent or Razorpay Order with tax included Returns client secret (Stripe) or order ID (Razorpay) for frontend to complete payment */
8790
9191
  initiatePayment: InitiatePaymentResponse;
8791
- /** Install an application */
9192
+ /** Install an application. For a workspace-private custom node, installing a newer version published to the organization over an active installation updates it (BOFF-9766); the previous version stays installed in the workspace so workflows pinned to it keep running, and uninstall removes every version. */
8792
9193
  installApp: AppInstallation;
8793
- /** Install a purchased app to a workspace. Validates that the product was purchased before allowing installation. If orderId is not provided, will find the most recent processed order for this product. version: optional specific version to install (e.g. "1.2.0"), resolved against the linked devportal Application's published/deprecated versions. Omit to install the product's current latest version (default behavior). */
9194
+ /**
9195
+ * Install a purchased app to a workspace.
9196
+ * Validates that the product was purchased before allowing installation.
9197
+ * If orderId is not provided, will find the most recent processed order for this product.
9198
+ * version: optional specific version to install (e.g. "1.2.0"), resolved against
9199
+ * the linked devportal Application's published/deprecated versions. Omit to
9200
+ * install the product's current latest version (default behavior).
9201
+ */
8794
9202
  installPurchasedApp: InstallPurchasedAppResult;
8795
9203
  /** Invite a user to join an organization */
8796
9204
  inviteDeveloperOrgMember: DeveloperOrgInvitationCreated;
8797
9205
  /** Invite a user to an organization by email */
8798
9206
  inviteOrganizationMember: OrganizationInvite;
8799
- /** Service-trusted internal mint of an app-as-user token for a named first-party app. Lets a trusted backend (e.g. wspace-integrations-svc) mint a token for a secret-less system app without holding client credentials. Gated to internal service / super_admin callers; still requires an ACTIVE AppUserDelegation for (clientId, targetUserId), so a user must have granted access first. */
9207
+ /** Service-trusted internal mint of an app-as-user token for a named first-party app. Lets a trusted backend (e.g. wspace-integrations-svc) mint a token for a secret-less system app without holding client credentials. Gated to internal service / super_admin callers; still requires an ACTIVE AppUserDelegation for (clientId, targetUserId), so a user must have granted access first. A service-managed app (BOFF-9962) is minted only by its managing service, always bound to one workspace, for at most 15 minutes and never past the grant. */
8800
9208
  issueAppAsUserTokenInternal: AppAsUserTokenResponse;
8801
9209
  /** Public endpoint — no authentication required. Email is normalized (trimmed, lowercased). Must be protected by API gateway rate limiting (recommended: 5 req/min per IP). */
8802
9210
  joinWaitlist: NewsletterWaitlist;
@@ -8831,6 +9239,7 @@ export type Mutation = {
8831
9239
  mintSsoSession: AuthPayload;
8832
9240
  /** Moderate a review (admin) */
8833
9241
  moderateAppReview: AppReview;
9242
+ moderateReview: ProductReview;
8834
9243
  /** Erase newsletter subscriber data. With dryRun=true returns counts. Subscriber + per-list rows + automation enrolments PURGED. Suppression entry ANONYMISED (email hashed) — kept to honour CAN-SPAM unsubscribe permanence. Bounce/complaint/consent-audit rows anonymised but retained for deliverability forensics. */
8835
9244
  newsletterEraseSubject: NewsletterEraseResult;
8836
9245
  /** Export the subject's newsletter data: subscriber rows, per-list memberships, consent ledger entries, automation enrolments, waitlist entries. */
@@ -8848,6 +9257,8 @@ export type Mutation = {
8848
9257
  payInvoice: Invoice;
8849
9258
  permanentlyDeleteSchedule: Scalars['Boolean']['output'];
8850
9259
  placeLegalHold: LegalHold;
9260
+ /** Advance one asynchronous catalog build by a single poll (BOFF-9882). A catalog publish has no ApplicationVersion row, so nothing in this service polls its builds. Catalog CI keeps the `buildRef` of each pending outcome from publishCatalogNodeVersion and calls this until the status is terminal. For `ecr` each poll may move the build to its next stage (architecture builds, then the push); without these polls the image is never pushed. When an `ecr` build turns READY, the node's start-up snapshots are requested. Same authentication as publishCatalogNodeVersion: the shared callback secret, sent as an argument. Returns the outcome shape of publishCatalogNodeVersion ({ provider, status, image, error, reason, buildRef }), where `buildRef` is the handle to poll next. A failed status check returns PENDING with the same handle, so CI simply polls again. */
9261
+ pollCatalogNodeBuild: Scalars['JSON']['output'];
8851
9262
  /** Internal-only: polls "Deploy Devportal Node" GitHub Actions run history and records the result in NodeSandboxBuildCheck — see services/nodeSandboxBuildPoll.ts. Invoked on a schedule by global-scheduler-svc's INTERNAL_API executor; also callable from the admin build-log UI for an on-demand refresh. Returns `skipped: true` (not an error) when NODE_SANDBOX_DISPATCH_TOKEN is unset OR the GitHub call itself fails (e.g. the token lacks Actions:read) — callers must check `skipped` rather than assume a non-error response means it actually polled. */
8852
9263
  pollNodeSandboxBuildChecks: NodeSandboxBuildPollResult;
8853
9264
  prepareSupportAttachmentUpload: SupportAttachmentUploadSession;
@@ -8864,6 +9275,8 @@ export type Mutation = {
8864
9275
  provisionDedicatedTenant: Tenant;
8865
9276
  /** Provision Free-tier WORKSPACE-scoped quota assignments for a specific workspace (BOFF-5656). Service-to-service only — called by wspace-layer services' workspace.created event consumers (Redis Streams do not cross the wspace/global layer network boundary, so the wspace-side consumer calls this mutation cross-layer instead of billing consuming the event directly). Reuses the org's existing (or lazily-created) default billing account and every active Free ($0, isActive) subscription on it. Idempotent — safe to call repeatedly for the same workspace. Never creates a Plan/Subscription for a product with no registered Free plan; such products are silently skipped, not errored. */
8866
9277
  provisionFreeTierForWorkspace: ProvisionFreeTierForWorkspaceResult;
9278
+ /** Provision a service-managed app (BOFF-9962): an app a backend service owns for a principal of its own, such as a FluidGrids agent. The calling service becomes the app's manager and owner. The app has no usable client secret, so the only way to act as it is issueAppAsUserTokenInternal, by its managing service, for a user who granted it a delegation. Service actors only. */
9279
+ provisionManagedAppInternal: App;
8867
9280
  /** Public unsubscribe via HMAC-signed token from email link. No authentication required. */
8868
9281
  publicUnsubscribeByToken: Scalars['Boolean']['output'];
8869
9282
  publishApplication: Application;
@@ -8871,7 +9284,9 @@ export type Mutation = {
8871
9284
  publishApplicationVersion: ApplicationVersion;
8872
9285
  /** Developer-organization admin action (BOFF-9657): publish a draft (or rejected) version of a PRIVATE NODE application straight to the workspaces of your organization, without platform review. The version must carry a package whose validation passed, a READY sandbox image and no failed or running operation smoke test. `workspaceId` is a workspace you administer; its organization becomes the node's owning organization on the first publish, and every later publish must come from that organization. The version is never listed in the public Node Store; it is installable only into workspaces of the owning organization. Authorization is enforced in the resolver: the caller must be an OWNER or ADMIN of the application's developer organization (or own a personal application) and an admin of `workspaceId`. The gateway's organization scope cannot evaluate this today because user sessions carry no verified organization claim, so the directive declares the permission and authenticates the caller. */
8873
9286
  publishApplicationVersionToOrganization: ApplicationVersion;
8874
- /** 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. */
9287
+ /** Apply a published catalog node version's manifest.json to the platform (BOFF-9458). Catalog CI calls this once a node version's image build is READY (and once per node for a backfill), sending the manifest.json it built from. The manifest is validated against nodeType@version, then global-store-svc refreshes the node contract inside the catalog publishers' Store listings of the node and the node's global registry row in wspace-workflow-svc. Nothing else is changed: other publishers' listings, install snapshots and DevPortal application versions stay as they are. Named publishCatalogNodeManifest, not sync…: global-store-svc owns the service-only Mutation.syncCatalogNodeManifest this forwards to, and both subgraphs share the global supergraph. Same authentication as publishCatalogNodeVersion: the shared callback secret, sent as an argument. Returns { ok, nodeType, version, errors?, error?, digest?, products?, registry? }; a validation failure or an unreachable store comes back with ok false rather than as a GraphQL error, so CI can report it per node. */
9288
+ publishCatalogNodeManifest: Scalars['JSON']['output'];
9289
+ /** 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. `providers` limits the publish to some of the providers the catalog rule enables (BOFF-9882). CI uses it to retry only a provider that an account limit turned away (reason BUILD_CONCURRENCY_LIMIT), without building the version a second time on the providers that already accepted it. Omitted, every enabled provider is published. A name the rule does not enable is reported as UNSUPPORTED and nothing is built for it. Returns a JSON array of per-provider outcomes so CI can log them and fail the job when nothing could build. */
8875
9290
  publishCatalogNodeVersion: Scalars['JSON']['output'];
8876
9291
  publishFAQ: Faq;
8877
9292
  publishKnowledgeBaseArticle: KnowledgeBaseArticle;
@@ -8910,6 +9325,8 @@ export type Mutation = {
8910
9325
  recordEarningEntry: EarningsEntry;
8911
9326
  /** 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. */
8912
9327
  recordExploreClick: RecordExploreClickResult;
9328
+ /** Record a completed external refund without invoking a payment provider. */
9329
+ recordExternalRefund: ExternalRefundResult;
8913
9330
  /** 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. */
8914
9331
  recordExternalSettlement: ExternalSettlementResult;
8915
9332
  recordFAQView: Faq;
@@ -8918,6 +9335,8 @@ export type Mutation = {
8918
9335
  recordNotificationAction: Notification;
8919
9336
  /** Record the user's first visit to a product's app shell after login. - Idempotent on (userId, productSlug): subsequent calls return the same result with `isFirstVisit: false`. - On the first visit, fires a product-specific welcome email (best-effort — email failure does NOT fail the mutation). - Safe to call on every app-shell mount; the frontend hook should debounce per session. */
8920
9337
  recordProductVisit: RecordProductVisitResult;
9338
+ /** Record a chargeback event (opened, won or lost) on a store order. Holds the publisher share while the dispute is open, releases it when won, and deducts the dispute fee when lost (Developer Agreement Section 6). */
9339
+ recordPublisherChargeback: Array<PublisherChargeback>;
8921
9340
  /** Record a sale (usually called by store service) */
8922
9341
  recordSale: DeveloperOrgSale;
8923
9342
  /** Record user progress for a tour */
@@ -8926,12 +9345,27 @@ export type Mutation = {
8926
9345
  refreshApplicationVersionPackageUrl?: Maybe<Scalars['String']['output']>;
8927
9346
  /** Refresh OAuth tokens manually */
8928
9347
  refreshConnectionTokens: ChannelConnection;
9348
+ /** Re-read the processor state of one of the calling user's payout methods. */
9349
+ refreshMyPublisherPayoutOnboarding: PublisherPayoutOnboarding;
8929
9350
  refreshProductAssetUrl?: Maybe<Scalars['String']['output']>;
8930
9351
  refreshToken: AuthPayload;
8931
9352
  regenerateAffiliateCode: AffiliateCode;
8932
9353
  /** 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. */
8933
9354
  registerAppWithAuthService: Application;
8934
- /** 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 account — not 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. */
9355
+ /**
9356
+ * Register a seller's real address as a new pickup/warehouse location on a
9357
+ * carrier account (currently only "shiprocket" supports this), so it becomes
9358
+ * a real, bookable pickup point instead of just an unregistered pincode a
9359
+ * seller typed in. This is a real, permanent write to the carrier's account
9360
+ * — not a local list we maintain; any address the carrier itself accepts is
9361
+ * supported, we never hardcode which pincodes are valid.
9362
+ *
9363
+ * scopeType: "self" — same authenticated-actor bar as carrierPickupLocations.
9364
+ * This doesn't touch a store-svc-owned resource with an ownership row to
9365
+ * check against (it writes directly to the carrier account), so there's no
9366
+ * org-ownership verification here — a known trust-boundary gap, same shape
9367
+ * as flagOrderIssue's caller-supplied organizationId.
9368
+ */
8935
9369
  registerCarrierPickupLocation: CarrierPickupLocation;
8936
9370
  /** 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. */
8937
9371
  registerDeviceToken: DeviceToken;
@@ -8944,6 +9378,10 @@ export type Mutation = {
8944
9378
  registerSupportAttachmentPart: Scalars['Boolean']['output'];
8945
9379
  /** Creates or updates subject mappings for a product. Idempotent: a product's service can call it on every deploy. An existing mapping can only be changed by the actor that registered it, or by a super admin. */
8946
9380
  registerWebhookEventSubjects: Array<WebhookEventSubject>;
9381
+ /** Register an outbound webhook endpoint for an owner */
9382
+ registerWebhookSubscription: WebhookSubscription;
9383
+ /** Reinstate a listing the store team took down, restoring its previous status. */
9384
+ reinstateListing: StoreProduct;
8947
9385
  reinstatePublisher: Publisher;
8948
9386
  rejectApplication: Application;
8949
9387
  /** Platform admin only: reject a pending_review version with a reason. The developer can fix their submission and re-submit. */
@@ -8954,12 +9392,24 @@ export type Mutation = {
8954
9392
  /** Reject an organization invite (must be logged in as the invited user) */
8955
9393
  rejectOrganizationInvite: OrganizationInvite;
8956
9394
  rejectPayoutRequest: PayoutRequest;
8957
- /** Admin rejects a submitted product with a mandatory reason. Publisher can edit and resubmit afterwards. */
9395
+ /**
9396
+ * Admin rejects a submitted product with a mandatory reason. Publisher can
9397
+ * edit and resubmit afterwards.
9398
+ */
8958
9399
  rejectProduct: StoreProduct;
8959
9400
  rejectPublisher: Publisher;
9401
+ /** Admin rejects a pending payout method with a reason the publisher can act on. */
9402
+ rejectPublisherPayoutMethod: PublisherPayoutMethod;
8960
9403
  rejectReview: ProductReview;
8961
9404
  rejectWaitlist: NewsletterWaitlist;
9405
+ /**
9406
+ * Admin rejects a pending template revision with a reason the author sees. The
9407
+ * live version stays listed unchanged.
9408
+ */
9409
+ rejectWorkflowTemplateRevision: WorkflowTemplateRevision;
8962
9410
  releaseLegalHold: LegalHold;
9411
+ /** Release a payout held for a missing verified payout method or a chargeback rate above 1%, and request it on billing. */
9412
+ releasePublisherPayoutHold: PublisherPayout;
8963
9413
  releaseSuppression: SuppressionEntry;
8964
9414
  removeAgentSkills: AgentProfile;
8965
9415
  /** Remove the license configuration for an application */
@@ -8977,6 +9427,8 @@ export type Mutation = {
8977
9427
  removeFromWishlist: Scalars['Boolean']['output'];
8978
9428
  /** Remove an interviewer from an interview round (admin). */
8979
9429
  removeInterviewerFromRound: Scalars['Boolean']['output'];
9430
+ /** Close one of the calling user's own payout methods. */
9431
+ removeMyPublisherPayoutMethod: Scalars['Boolean']['output'];
8980
9432
  /** Remove a member from an organization */
8981
9433
  removeOrganizationMember: Scalars['Boolean']['output'];
8982
9434
  /** Remove a passkey */
@@ -8998,7 +9450,7 @@ export type Mutation = {
8998
9450
  /** Revoke a previously-granted tenant-member row. Idempotent on the missing row (returns false). Cascade-removing the user's existing org/workspace memberships under the tenant is NOT performed here — those rows survive and would need to be removed separately if the intent is full ejection. (BOFF-2652) */
8999
9451
  removeTenantMember: Scalars['Boolean']['output'];
9000
9452
  removeTicketTags: SupportTicket;
9001
- /** Remove user's preference for a feature flag (reverts to default). RBAC is scoped to the target workspace. */
9453
+ /** Remove the calling user's preference for a feature flag (reverts to default). Self-scoped: the row is keyed by the caller's user id and the resolver requires membership of `workspaceId`. */
9002
9454
  removeUserFeatureFlagPreference: Scalars['Boolean']['output'];
9003
9455
  /** Remove a visibility rule */
9004
9456
  removeVisibilityRule: Scalars['Boolean']['output'];
@@ -9020,10 +9472,10 @@ export type Mutation = {
9020
9472
  reorderTourSteps: Array<TourStep>;
9021
9473
  /** Replace the full set of tag bindings on an Application. */
9022
9474
  replaceApplicationTags: Array<ApplicationTagAssignment>;
9023
- replaceChannelConnectionTags: Array<ChannelConnectionTagAssignment>;
9024
- replaceChannelTags: Array<ChannelTagAssignment>;
9025
9475
  /** Replace all tags on a store product */
9026
9476
  replaceStoreProductTags: Array<StoreProductTagAssignment>;
9477
+ /** Replay one dead-lettered provider webhook through the durable worker. */
9478
+ replayBillingWebhook?: Maybe<BillingWebhookLog>;
9027
9479
  /** 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. */
9028
9480
  replyToContactInquiry: ContactInquiryReplyResult;
9029
9481
  /** 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. */
@@ -9031,8 +9483,11 @@ export type Mutation = {
9031
9483
  replyToReview: ProductReviewReply;
9032
9484
  /** Report a review */
9033
9485
  reportAppReview: AppReviewReport;
9486
+ /** Report a listing to the store team. Reporting again updates your report. */
9487
+ reportListing: ListingReport;
9034
9488
  /** 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. */
9035
9489
  reportNodeSandboxBuildStatus: Scalars['Boolean']['output'];
9490
+ reportReview: ProductReviewReport;
9036
9491
  /** Reprocess a failed webhook event */
9037
9492
  reprocessWebhook: WebhookProcessingResult;
9038
9493
  requestBillingPayout: PayoutRequest;
@@ -9074,8 +9529,16 @@ export type Mutation = {
9074
9529
  resolveContextWidgetConversation: ContextWidgetConversationPayload;
9075
9530
  resolveDLQEntry: Scalars['Boolean']['output'];
9076
9531
  resolveInventoryAlert: InventoryAlert;
9077
- /** 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. */
9532
+ /** Close an open listing report. */
9533
+ resolveListingReport: ListingReport;
9534
+ /**
9535
+ * Mark a seller-reported issue flag resolved. Allowed for a super-admin (no
9536
+ * organizationId needed) or the org that raised the flag (organizationId must
9537
+ * match) — enforced in the resolver.
9538
+ */
9078
9539
  resolveOrderIssueFlag: OrderIssueFlag;
9540
+ /** Close a pending review report, optionally hiding the review. */
9541
+ resolveReviewReport: GovernanceReviewReport;
9079
9542
  resolveSupportTicket: SupportTicket;
9080
9543
  /** Respond to a review (developer) */
9081
9544
  respondToAppReview: AppReview;
@@ -9093,6 +9556,8 @@ export type Mutation = {
9093
9556
  resumeDeveloperOrgSubscription: DeveloperOrgSubscription;
9094
9557
  resumeSLA: SupportTicket;
9095
9558
  resumeScheduledJob: ScheduledJob;
9559
+ /** Retire a service-managed app (BOFF-9962): mark it REVOKED and withdraw every delegation it holds. Only its managing service may call it. Idempotent: returns false when the app was already retired. */
9560
+ retireManagedAppInternal: Scalars['Boolean']['output'];
9096
9561
  /** 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. */
9097
9562
  retirePushDeviceInternal: Scalars['Boolean']['output'];
9098
9563
  retireSubprocessor: Subprocessor;
@@ -9146,7 +9611,7 @@ export type Mutation = {
9146
9611
  rotateConnectionCredentials: ChannelConnection;
9147
9612
  /** Run health check on a channel */
9148
9613
  runChannelHealthCheck: ChannelHealthCheck;
9149
- /** Admin/service-initiated DSAR for an arbitrary subject (e.g. a support-filed or regulator-filed request, or a same-layer service driving the flow on a subject's behalf). Restricted to super_admin and service actors only — never reachable by a regular user for another person's data. */
9614
+ /** Admin/service-initiated DSAR for an arbitrary subject (e.g. a support-filed or regulator-filed request, or a same-layer service driving the flow on a subject's behalf). Restricted to super_admin and service actors only — never reachable by a regular user for another person's data. `subjectEmail` is optional and additive: it lets the fan-out also reach records that are keyed by email only (e.g. a guest contact-inquiry or a newsletter signup with no account), such as `ContactInquiry`, `NewsletterWaitlist`, and `NewsletterSuppression`. Omit it for a subject who only has account-linked records. */
9150
9615
  runDsarRequestForSubject: DsarOrchestrationResult;
9151
9616
  runMonthlyPayouts: PayoutRunLog;
9152
9617
  /** Self-service DSAR: export or erase the CALLING actor's own data across every fan-out target. Self-scoped (Type-A pattern) — subjectId is always the calling actor's own id; there is no identity argument, so this can never be used to act on someone else's data. */
@@ -9162,7 +9627,7 @@ export type Mutation = {
9162
9627
  seedAtheleteBridgeUserTours: SeedAtheleteBridgeUserToursResult;
9163
9628
  /** Overwrite the service-owned BigConsole onboarding tours. Repeated calls update the same slugs. */
9164
9629
  seedBigconsoleUserTours: SeedBigconsoleUserToursResult;
9165
- /** Overwrite the built-in Buildmyiq user-facing dashboard tour from the service-owned seed file. */
9630
+ /** Overwrite the built-in Buildmyiq user-facing tours (dashboard with the getting-started checklist, authoring, and my learning) from the service-owned seed file. */
9166
9631
  seedBuildmyiqUserTours: SeedBuildmyiqUserToursResult;
9167
9632
  /** Overwrite the built-in CollabKin user-facing dashboard tour from the service-owned seed file. */
9168
9633
  seedCollabkinUserTours: SeedCollabkinUserToursResult;
@@ -9174,8 +9639,14 @@ export type Mutation = {
9174
9639
  seedDefaultShortcuts: Scalars['Int']['output'];
9175
9640
  /** Overwrite the built-in FluidGrids user-facing workflow-builder tour from the service-owned seed file. */
9176
9641
  seedFluidgridsUserTours: SeedFluidgridsUserToursResult;
9642
+ /** Overwrite the built-in HookMovies user-facing tours (overview with the getting-started checklist, catalog, productions and auditions) from the service-owned seed file. */
9643
+ seedHookmoviesUserTours: SeedHookmoviesUserToursResult;
9177
9644
  /** Overwrite the built-in IntelWatchtower user-facing tours for the intelligence workflow. */
9178
9645
  seedIntelWatchtowerUserTours: SeedIntelWatchtowerUserToursResult;
9646
+ /** Overwrite the built-in SemanticFed user-facing tours (first-login getting started, empty workspace, query console and policies) from the service-owned seed file. */
9647
+ seedSemanticFedUserTours: SeedSemanticFedUserToursResult;
9648
+ /** Overwrite the built-in Subscriber Bot user-facing tours (dashboard overview, adding a relationship and connecting a bank or card) from the service-owned seed file. */
9649
+ seedSubscriberbotUserTours: SeedSubscriberbotUserToursResult;
9179
9650
  /** Overwrite the built-in TheCulturePost user-facing tours from the service-owned seed file. */
9180
9651
  seedTheCulturePostUserTours: SeedTheCulturePostUserToursResult;
9181
9652
  /** Overwrite the built-in VibeControls user-facing tours for Support, Notifications, and Conversations from the service-owned seed file. */
@@ -9188,8 +9659,6 @@ export type Mutation = {
9188
9659
  /** Send a message to a channel */
9189
9660
  sendMessage: MessageDeliveryResult;
9190
9661
  sendNewsletter: Newsletter;
9191
- /** Send a product-specific welcome email to a single recipient. Renders the per-product template (header logo, primary color, body, CTA, resource links) and delivers via EMAIL platform with failover. Idempotent on `idempotencyKey` if provided. */
9192
- sendProductWelcomeEmail: ChannelDeliveryResult;
9193
9662
  /** Send push MFA challenge to user's device */
9194
9663
  sendPushMFAChallenge: PushMfaChallengeResult;
9195
9664
  /** Send a message to the candidate for a specific round and mark it sent (admin). */
@@ -9198,13 +9667,25 @@ export type Mutation = {
9198
9667
  sendTestNewsletter: TestNewsletterResult;
9199
9668
  /** Record an EarningsEntry on behalf of an org/user by explicit billingAccountId. Service/super_admin only — internal gateway. */
9200
9669
  serviceRecordEarning: EarningsEntry;
9670
+ /** Refund all or part of a payment on behalf of the service that charged it. Idempotent per sourceIdempotencyKey. Service/super_admin only. */
9671
+ serviceRefundPayment: ServiceRefundPaymentResult;
9201
9672
  /** Request a payout drawn from a user's AVAILABLE earnings on an explicit billing account. Reserves matching earnings and creates a PayoutRequest that the existing approval/processing workflow drives to completion. Service/super_admin only — internal gateway. */
9202
9673
  serviceRequestPayout: PayoutRequest;
9203
9674
  /** 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. */
9204
9675
  serviceResolvePayoutAccount: PayoutAccount;
9676
+ /** Reverse an earnings entry (by the source key it was recorded with) whose source sale was refunded. Only an AVAILABLE entry (not reserved for, or paid by, a payout) is reversed; the outcome says what happened. Idempotent. Service/super_admin only — internal gateway. */
9677
+ serviceReverseEarning: ServiceEarningReversal;
9205
9678
  /** 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. */
9206
9679
  serviceSyncPayoutStatus?: Maybe<DeveloperOrgPayout>;
9207
- /** M2M: create or update the calling service's catalogue listing for an item that service sells through its own checkout (BOFF-3430), for cross-product discovery. Idempotent on (calling service identity, input.externalId): call it on every change of the source item. The owning service is always the verified service identity of the caller, never an input field. Set status ARCHIVED to take the listing down. A listing an admin has delisted or rejected stays off display until an admin restores it. Service-actor only. */
9680
+ /**
9681
+ * M2M: create or update the calling service's catalogue listing for an item that
9682
+ * service sells through its own checkout (BOFF-3430), for cross-product
9683
+ * discovery. Idempotent on (calling service identity, input.externalId): call it
9684
+ * on every change of the source item. The owning service is always the verified
9685
+ * service identity of the caller, never an input field. Set status ARCHIVED to
9686
+ * take the listing down. A listing an admin has delisted or rejected stays off
9687
+ * display until an admin restores it. Service-actor only.
9688
+ */
9208
9689
  serviceUpsertExternalListing: StoreProduct;
9209
9690
  setAgentAway: AgentProfile;
9210
9691
  setAgentOffline: AgentProfile;
@@ -9226,11 +9707,21 @@ export type Mutation = {
9226
9707
  setNotificationTopicSubscription: NotificationTopicSubscription;
9227
9708
  /** Set default permission level for a role on a resource type */
9228
9709
  setRoleDefaultPermission: Role;
9229
- /** Set (or update) the shipping address + method for a store order (physical orders). The backend recomputes the AUTHORITATIVE shipping cost from the order's own line-item weights via the same quote engine as estimateOrderShipping — the client never supplies a cost. Verifies the address belongs to the order's buyer and freezes an immutable shippingSnapshot for delivery integrity. `StoreOrder.total` stays product-cost-only; the billing/checkout layer must add `shippingCost` to the payable amount. */
9710
+ /**
9711
+ * Set (or update) the shipping address + method for a store order (physical orders).
9712
+ *
9713
+ * The backend recomputes the AUTHORITATIVE shipping cost from the order's own
9714
+ * line-item weights via the same quote engine as estimateOrderShipping — the
9715
+ * client never supplies a cost. Verifies the address belongs to the order's buyer
9716
+ * and freezes an immutable shippingSnapshot for delivery integrity.
9717
+ *
9718
+ * `StoreOrder.total` stays product-cost-only; the billing/checkout layer must add
9719
+ * `shippingCost` to the payable amount.
9720
+ */
9230
9721
  setStoreOrderShipping: StoreOrder;
9231
9722
  /** Set or update the endpoint URL for a DEDICATED tenant. Transitions PROVISIONING → ACTIVE when endpoint is set. */
9232
9723
  setTenantEndpoint: Tenant;
9233
- /** Set user's opt-in/out preference for a previewable feature flag. RBAC is scoped to the target workspace via `input.workspaceId`. */
9724
+ /** Set the calling user's opt-in/out preference for a previewable feature flag. Self-scoped: the row is keyed by the caller's user id and the resolver requires membership of `input.workspaceId`. */
9234
9725
  setUserFeatureFlagPreference: UserFeatureFlagPreference;
9235
9726
  setUserLanguagePreference: UserLanguagePreference;
9236
9727
  /** Set workspace-level override for a feature flag (super admin or workspace admin). RBAC is scoped to the target workspace via `input.workspaceId`. */
@@ -9253,6 +9744,14 @@ export type Mutation = {
9253
9744
  spendCredits: SpendCreditResponse;
9254
9745
  /** Start a trial for an application */
9255
9746
  startAppTrial: AppInstallation;
9747
+ /**
9748
+ * Start automatic payout onboarding for one of the calling user's PENDING
9749
+ * RAZORPAY_X or STRIPE_CONNECT payout methods: RazorpayX fund-account validation
9750
+ * (penny drop) or Stripe Connect Express onboarding (open onboardingUrl). The
9751
+ * method turns VERIFIED automatically once the processor confirms the account
9752
+ * and the publisher has passed verification.
9753
+ */
9754
+ startMyPublisherPayoutOnboarding: PublisherPayoutOnboarding;
9256
9755
  startStagedRollout: ProductRelease;
9257
9756
  /** Mark a tour as started for a user */
9258
9757
  startTour: TourUserProgress;
@@ -9269,10 +9768,19 @@ export type Mutation = {
9269
9768
  submitInterviewFeedback: InterviewFeedback;
9270
9769
  /** Submit a job application from a public website (no authentication required). Validates reCAPTCHA, stores the resume in private storage, and notifies the applicant + careers inbox. */
9271
9770
  submitJobApplication: SubmitJobApplicationResult;
9272
- /** Submit a product to its target store for review. The store's requiresApproval flag decides whether the product goes to PENDING_REVIEW or is auto-published. */
9771
+ /**
9772
+ * Submit a product to its target store for review. The store's
9773
+ * requiresApproval flag decides whether the product goes to PENDING_REVIEW
9774
+ * or is auto-published.
9775
+ */
9273
9776
  submitProduct: StoreProduct;
9274
9777
  submitPublisherVerification: Publisher;
9275
9778
  submitSatisfactionSurvey: CustomerSatisfactionSurvey;
9779
+ /**
9780
+ * Publish a workflow as a community template (or resubmit one of yours after a
9781
+ * rejection). The template is reviewed by a store admin before it is listed.
9782
+ */
9783
+ submitWorkflowTemplate: WorkflowTemplateSubmission;
9276
9784
  /** Public endpoint — no authentication required for website newsletter signup. Email is normalized (trimmed, lowercased) and validated in the provider. Protected by rate limiting (5 req/min per IP) and optional reCAPTCHA at the resolver. */
9277
9785
  subscribe: NewsletterSubscriber;
9278
9786
  subscribeToStore: UserStoreSubscription;
@@ -9291,6 +9799,17 @@ export type Mutation = {
9291
9799
  suspendTenant: Tenant;
9292
9800
  /** Suspend a workspace */
9293
9801
  suspendWorkspace: Workspace;
9802
+ /**
9803
+ * M2M (BOFF-9458): apply a published catalog node version's manifest.json. Replaces the node
9804
+ * contract (operations, inputs, outputs, adapters, endpoint) inside every active Store listing of
9805
+ * that node owned by a catalog publisher, then refreshes the node's global registry row in
9806
+ * wspace-workflow-svc. Listings of other publishers, other node versions and install snapshots
9807
+ * are never changed. Idempotent. Only global-devportal-svc may call it: catalog CI reaches it
9808
+ * through devportal's callback-secret mutation.
9809
+ */
9810
+ syncCatalogNodeManifest: SyncCatalogNodeManifestResult;
9811
+ /** Apply one batch of HR-system workers to a workspace with the same outcomes SCIM provisioning produces (BOFF-10564). Internal: only the integrations service's Workday and SAP SuccessFactors connectors may call it, after a workspace administrator configured the connector. */
9812
+ syncDirectoryWorkersInternal: DirectorySyncResult;
9294
9813
  /** Called by global-store-svc (service actor only) when a product submission is approved or rejected. Updates the Application reviewStatus + metadata and fires applicationStoreStatusChanged subscription. */
9295
9814
  syncStoreSubmissionStatus: Scalars['Boolean']['output'];
9296
9815
  /** Sync tour steps (smart update in ONE call) Send all desired steps, backend handles: update existing, create new, delete removed */
@@ -9299,10 +9818,13 @@ export type Mutation = {
9299
9818
  syncWorkspaceDeletionFromWspace: SyncWorkspaceFromWspaceResponse;
9300
9819
  /** Sync workspace metadata from workspace layer to global layer. Called by wspace-workspace-svc when a workspace is created directly via workspace layer. This is the reverse of syncFromGlobal - it syncs global ← wspace. Creates workspace metadata + owner membership in global-tenant-svc. */
9301
9820
  syncWorkspaceFromWspace: SyncWorkspaceFromWspaceResponse;
9302
- tagChannel: ChannelTagAssignment;
9303
- tagChannelConnection: ChannelConnectionTagAssignment;
9304
9821
  /** Assign a tag to a store product */
9305
9822
  tagStoreProduct: StoreProductTagAssignment;
9823
+ /**
9824
+ * Take a listing down: it leaves the store immediately (existing installs keep
9825
+ * working) and the publisher sees the category and reason and may appeal.
9826
+ */
9827
+ takedownListing: StoreProduct;
9306
9828
  /** Test connection health */
9307
9829
  testConnectionHealth: ConnectionTestResult;
9308
9830
  /** Test LDAP connection */
@@ -9310,6 +9832,8 @@ export type Mutation = {
9310
9832
  /** Test RADIUS connection */
9311
9833
  testRADIUSConnection: Scalars['Boolean']['output'];
9312
9834
  testWebhook: WebhookTestResult;
9835
+ /** Send a synthetic test event to a webhook subscription and report the result */
9836
+ testWebhookSubscription: WebhookDispatchResult;
9313
9837
  toggleAddOn: Scalars['Boolean']['output'];
9314
9838
  /** Toggle the featured state of a store product (admin) */
9315
9839
  toggleFeatured: Scalars['Boolean']['output'];
@@ -9352,8 +9876,6 @@ export type Mutation = {
9352
9876
  unshareWorkflow: Application;
9353
9877
  unsubscribe: Scalars['Boolean']['output'];
9354
9878
  unsubscribeFromStore: Scalars['Boolean']['output'];
9355
- untagChannel: Scalars['Boolean']['output'];
9356
- untagChannelConnection: Scalars['Boolean']['output'];
9357
9879
  /** Remove a tag from a store product */
9358
9880
  untagStoreProduct: Scalars['Boolean']['output'];
9359
9881
  updateAPIKey: ApiKey;
@@ -9478,8 +10000,6 @@ export type Mutation = {
9478
10000
  updatePromotion: Promotion;
9479
10001
  updatePublisher: Publisher;
9480
10002
  updateQuota: Scalars['Boolean']['output'];
9481
- /** Update RBAC configuration for a scope */
9482
- updateRbacConfig: RbacConfig;
9483
10003
  updateRecurringBillingPlan: RecurringBillingPlan;
9484
10004
  /** Update a registered resource */
9485
10005
  updateResource: Resource;
@@ -9493,7 +10013,11 @@ export type Mutation = {
9493
10013
  updateShippingAddress: ShippingAddress;
9494
10014
  updateShippingMethod: ShippingMethod;
9495
10015
  updateStore: Store;
9496
- /** Update order payment status (called by billing service callback) This is a PUBLIC mutation called by the billing service after payment completion */
10016
+ /**
10017
+ * Update order payment status (called by billing service callback)
10018
+ *
10019
+ * This is a PUBLIC mutation called by the billing service after payment completion
10020
+ */
9497
10021
  updateStoreOrderPaymentStatus: UpdateStoreOrderPaymentStatusResponse;
9498
10022
  updateSubprocessor: Subprocessor;
9499
10023
  updateSubscriber: NewsletterSubscriber;
@@ -9530,6 +10054,8 @@ export type Mutation = {
9530
10054
  updateUserPlatformConnectionNotifications: UserPlatformConnection;
9531
10055
  updateVariantStats: NewsletterVariant;
9532
10056
  updateWebhook: Webhook;
10057
+ /** Update a webhook subscription (URL, secret, events, enabled, description) */
10058
+ updateWebhookSubscription: WebhookSubscription;
9533
10059
  /** Update an existing workspace */
9534
10060
  updateWorkspace: Workspace;
9535
10061
  /** Update a workspace member's role */
@@ -9548,7 +10074,13 @@ export type Mutation = {
9548
10074
  /** Upsert a platform connection from a passively-observed webhook event (source = SEEN). Used by WebhookProcessor to track users without granting DM access. */
9549
10075
  upsertSeenUser: UserPlatformConnection;
9550
10076
  upsertSourcingOffer: SourcingOffer;
9551
- /** M2M: create or update a ShippingAddress for an EXPLICIT user, on behalf of a calling service. Product backends (e.g. Kadaikodi) call this through the INTERNAL gateway so a user's address lives in the canonical store owner rather than a per-product copy. Pass `input.id` to update an existing row (must belong to `input.userId`); omit it to create. Service-actor only. */
10077
+ /**
10078
+ * M2M: create or update a ShippingAddress for an EXPLICIT user, on behalf of a
10079
+ * calling service. Product backends (e.g. Kadaikodi) call this through the
10080
+ * INTERNAL gateway so a user's address lives in the canonical store owner rather
10081
+ * than a per-product copy. Pass `input.id` to update an existing row (must belong
10082
+ * to `input.userId`); omit it to create. Service-actor only.
10083
+ */
9552
10084
  upsertUserShippingAddress: ShippingAddress;
9553
10085
  useCannedResponse: CannedResponse;
9554
10086
  /** Validate an HMAC signature */
@@ -9568,6 +10100,7 @@ export type Mutation = {
9568
10100
  verifyPasskeyRegistration: PasskeyRegistrationResult;
9569
10101
  /** Verify a payment method (micro-deposits) */
9570
10102
  verifyPaymentMethod: DeveloperOrgPaymentMethod;
10103
+ /** Admin verifies a pending payout method once the processor account is confirmed. externalAccountId is required unless the publisher already supplied one. Methods onboarded through startMyPublisherPayoutOnboarding are verified automatically; this is the manual fallback. */
9571
10104
  verifyPublisherPayoutMethod: PublisherPayoutMethod;
9572
10105
  /** Verify a WhatsApp pairing code entered by the user in the dashboard. Called by wspace-integrations-svc during its CUSTOM auth step. Looks up the UserPlatformConnection (source=SEEN) for the channel + phone number, checks the pairing code matches and has not expired, then: - Sets pairingStatus = APPROVED - Sets dmAllowed = true - Sets dmConversationId to the WhatsApp JID format Returns true on success, throws on failure. */
9573
10106
  verifyWhatsAppPairingCode: Scalars['Boolean']['output'];
@@ -9575,7 +10108,18 @@ export type Mutation = {
9575
10108
  voidInvoice: Invoice;
9576
10109
  /** Vote on a review (helpful/not helpful) */
9577
10110
  voteOnAppReview: AppReviewVote;
10111
+ voteOnReview: ProductReviewVote;
9578
10112
  withdrawConsent: ConsentRecord;
10113
+ /**
10114
+ * Withdraw the pending (or rejected) new version of one of your published
10115
+ * templates. The live version is not affected. Takes the template's product id.
10116
+ */
10117
+ withdrawWorkflowTemplateRevision: WorkflowTemplateSubmission;
10118
+ /**
10119
+ * Withdraw one of your templates. A published template is taken off the store
10120
+ * first; anything not live is deleted.
10121
+ */
10122
+ withdrawWorkflowTemplateSubmission: WithdrawWorkflowTemplateSubmissionResult;
9579
10123
  };
9580
10124
  /** Root mutation type */
9581
10125
  export type MutationAcceptDeveloperOrgInvitationArgs = {
@@ -9587,6 +10131,10 @@ export type MutationAcceptOrganizationInviteArgs = {
9587
10131
  recaptchaToken?: InputMaybe<Scalars['String']['input']>;
9588
10132
  };
9589
10133
  /** Root mutation type */
10134
+ export type MutationAcceptPublisherDeveloperAgreementArgs = {
10135
+ version: Scalars['String']['input'];
10136
+ };
10137
+ /** Root mutation type */
9590
10138
  export type MutationAcceptSourcingOfferArgs = {
9591
10139
  offerId: Scalars['ID']['input'];
9592
10140
  };
@@ -9657,6 +10205,10 @@ export type MutationAddDeveloperOrgPaymentMethodArgs = {
9657
10205
  organizationId: Scalars['ID']['input'];
9658
10206
  };
9659
10207
  /** Root mutation type */
10208
+ export type MutationAddMyPublisherPayoutMethodArgs = {
10209
+ input: AddMyPublisherPayoutMethodInput;
10210
+ };
10211
+ /** Root mutation type */
9660
10212
  export type MutationAddOrderTrackingEventArgs = {
9661
10213
  input: AddFulfillmentTrackingEventInput;
9662
10214
  };
@@ -9802,6 +10354,11 @@ export type MutationApproveWaitlistArgs = {
9802
10354
  input: ApproveWaitlistInput;
9803
10355
  };
9804
10356
  /** Root mutation type */
10357
+ export type MutationApproveWorkflowTemplateRevisionArgs = {
10358
+ id: Scalars['ID']['input'];
10359
+ notes?: InputMaybe<Scalars['String']['input']>;
10360
+ };
10361
+ /** Root mutation type */
9805
10362
  export type MutationArchiveBillingAccountArgs = {
9806
10363
  id: Scalars['ID']['input'];
9807
10364
  reason?: InputMaybe<Scalars['String']['input']>;
@@ -9888,10 +10445,12 @@ export type MutationAttachMediaToStepArgs = {
9888
10445
  /** Root mutation type */
9889
10446
  export type MutationAuthEraseSubjectArgs = {
9890
10447
  dryRun?: InputMaybe<Scalars['Boolean']['input']>;
10448
+ subjectEmail?: InputMaybe<Scalars['String']['input']>;
9891
10449
  subjectId: Scalars['ID']['input'];
9892
10450
  };
9893
10451
  /** Root mutation type */
9894
10452
  export type MutationAuthExportSubjectArgs = {
10453
+ subjectEmail?: InputMaybe<Scalars['String']['input']>;
9895
10454
  subjectId: Scalars['ID']['input'];
9896
10455
  };
9897
10456
  /** Root mutation type */
@@ -10599,10 +11158,6 @@ export type MutationCreateSupportTicketArgs = {
10599
11158
  input: CreateSupportTicketInput;
10600
11159
  };
10601
11160
  /** Root mutation type */
10602
- export type MutationCreateTagArgs = {
10603
- input: CreateTagInput;
10604
- };
10605
- /** Root mutation type */
10606
11161
  export type MutationCreateTaxRateArgs = {
10607
11162
  active?: InputMaybe<Scalars['Boolean']['input']>;
10608
11163
  country: Scalars['String']['input'];
@@ -10726,6 +11281,10 @@ export type MutationDeactivateWebhookEventSubjectArgs = {
10726
11281
  subject: Scalars['String']['input'];
10727
11282
  };
10728
11283
  /** Root mutation type */
11284
+ export type MutationDecideGovernanceAppealArgs = {
11285
+ input: DecideGovernanceAppealInput;
11286
+ };
11287
+ /** Root mutation type */
10729
11288
  export type MutationDecrementQuotaArgs = {
10730
11289
  amount: Scalars['Int']['input'];
10731
11290
  billingAccountId: Scalars['ID']['input'];
@@ -11015,10 +11574,6 @@ export type MutationDeleteSupportTicketArgs = {
11015
11574
  id: Scalars['ID']['input'];
11016
11575
  };
11017
11576
  /** Root mutation type */
11018
- export type MutationDeleteTagArgs = {
11019
- id: Scalars['ID']['input'];
11020
- };
11021
- /** Root mutation type */
11022
11577
  export type MutationDeleteTaxRateArgs = {
11023
11578
  id: Scalars['ID']['input'];
11024
11579
  };
@@ -11085,6 +11640,10 @@ export type MutationDeleteWebhookArgs = {
11085
11640
  id: Scalars['ID']['input'];
11086
11641
  };
11087
11642
  /** Root mutation type */
11643
+ export type MutationDeleteWebhookSubscriptionArgs = {
11644
+ id: Scalars['ID']['input'];
11645
+ };
11646
+ /** Root mutation type */
11088
11647
  export type MutationDelistProductArgs = {
11089
11648
  id: Scalars['ID']['input'];
11090
11649
  reason?: InputMaybe<Scalars['String']['input']>;
@@ -11144,6 +11703,10 @@ export type MutationDismissTourArgs = {
11144
11703
  userId: Scalars['ID']['input'];
11145
11704
  };
11146
11705
  /** Root mutation type */
11706
+ export type MutationDispatchWebhookEventArgs = {
11707
+ input: DispatchWebhookEventInput;
11708
+ };
11709
+ /** Root mutation type */
11147
11710
  export type MutationDuplicateNewsletterArgs = {
11148
11711
  id: Scalars['ID']['input'];
11149
11712
  newSlug: Scalars['String']['input'];
@@ -11190,6 +11753,7 @@ export type MutationEnsureStoreOrderBillingOrderArgs = {
11190
11753
  /** Root mutation type */
11191
11754
  export type MutationEraseSubjectArgs = {
11192
11755
  dryRun?: InputMaybe<Scalars['Boolean']['input']>;
11756
+ subjectEmail?: InputMaybe<Scalars['String']['input']>;
11193
11757
  subjectId: Scalars['ID']['input'];
11194
11758
  };
11195
11759
  /** Root mutation type */
@@ -11255,6 +11819,7 @@ export type MutationExportRevenueArgs = {
11255
11819
  };
11256
11820
  /** Root mutation type */
11257
11821
  export type MutationExportSubjectArgs = {
11822
+ subjectEmail?: InputMaybe<Scalars['String']['input']>;
11258
11823
  subjectId: Scalars['ID']['input'];
11259
11824
  };
11260
11825
  /** Root mutation type */
@@ -11273,10 +11838,19 @@ export type MutationFeatureAppReviewArgs = {
11273
11838
  id: Scalars['ID']['input'];
11274
11839
  };
11275
11840
  /** Root mutation type */
11841
+ export type MutationFeatureReviewArgs = {
11842
+ featured: Scalars['Boolean']['input'];
11843
+ id: Scalars['ID']['input'];
11844
+ };
11845
+ /** Root mutation type */
11276
11846
  export type MutationFileDsarArgs = {
11277
11847
  input: FileDsarInput;
11278
11848
  };
11279
11849
  /** Root mutation type */
11850
+ export type MutationFileGovernanceAppealArgs = {
11851
+ input: FileGovernanceAppealInput;
11852
+ };
11853
+ /** Root mutation type */
11280
11854
  export type MutationFlagOrderIssueArgs = {
11281
11855
  category: OrderIssueCategory;
11282
11856
  note?: InputMaybe<Scalars['String']['input']>;
@@ -11352,6 +11926,23 @@ export type MutationGetSupportAttachmentPartUploadUrlsArgs = {
11352
11926
  ticketId: Scalars['ID']['input'];
11353
11927
  };
11354
11928
  /** Root mutation type */
11929
+ export type MutationGlobalDiscardTicketReplyDraftArgs = {
11930
+ id: Scalars['ID']['input'];
11931
+ };
11932
+ /** Root mutation type */
11933
+ export type MutationGlobalDraftTicketReplyArgs = {
11934
+ ticketId: Scalars['ID']['input'];
11935
+ };
11936
+ /** Root mutation type */
11937
+ export type MutationGlobalSendTicketReplyDraftArgs = {
11938
+ id: Scalars['ID']['input'];
11939
+ message?: InputMaybe<Scalars['String']['input']>;
11940
+ };
11941
+ /** Root mutation type */
11942
+ export type MutationGlobalTriageTicketArgs = {
11943
+ id: Scalars['ID']['input'];
11944
+ };
11945
+ /** Root mutation type */
11355
11946
  export type MutationGrantAppDelegationInternalArgs = {
11356
11947
  input: GrantAppDelegationInternalInput;
11357
11948
  };
@@ -11533,6 +12124,13 @@ export type MutationModerateAppReviewArgs = {
11533
12124
  status: AppReviewStatus;
11534
12125
  };
11535
12126
  /** Root mutation type */
12127
+ export type MutationModerateReviewArgs = {
12128
+ id: Scalars['ID']['input'];
12129
+ note?: InputMaybe<Scalars['String']['input']>;
12130
+ rejectionReason?: InputMaybe<Scalars['String']['input']>;
12131
+ status: ReviewStatus;
12132
+ };
12133
+ /** Root mutation type */
11536
12134
  export type MutationNewsletterEraseSubjectArgs = {
11537
12135
  dryRun?: InputMaybe<Scalars['Boolean']['input']>;
11538
12136
  subjectId: Scalars['ID']['input'];
@@ -11584,11 +12182,19 @@ export type MutationPlaceLegalHoldArgs = {
11584
12182
  input: PlaceLegalHoldInput;
11585
12183
  };
11586
12184
  /** Root mutation type */
11587
- export type MutationPrepareSupportAttachmentUploadArgs = {
11588
- input: PrepareSupportAttachmentUploadInput;
11589
- };
11590
- /** Root mutation type */
11591
- export type MutationProcessAppSaleRefundArgs = {
12185
+ export type MutationPollCatalogNodeBuildArgs = {
12186
+ buildRef: Scalars['String']['input'];
12187
+ nodeType: Scalars['String']['input'];
12188
+ provider: Scalars['String']['input'];
12189
+ secret: Scalars['String']['input'];
12190
+ version: Scalars['String']['input'];
12191
+ };
12192
+ /** Root mutation type */
12193
+ export type MutationPrepareSupportAttachmentUploadArgs = {
12194
+ input: PrepareSupportAttachmentUploadInput;
12195
+ };
12196
+ /** Root mutation type */
12197
+ export type MutationProcessAppSaleRefundArgs = {
11592
12198
  amount?: InputMaybe<Scalars['Float']['input']>;
11593
12199
  reason: Scalars['String']['input'];
11594
12200
  saleId: Scalars['ID']['input'];
@@ -11620,6 +12226,10 @@ export type MutationProvisionFreeTierForWorkspaceArgs = {
11620
12226
  workspaceId: Scalars['ID']['input'];
11621
12227
  };
11622
12228
  /** Root mutation type */
12229
+ export type MutationProvisionManagedAppInternalArgs = {
12230
+ input: ProvisionManagedAppInternalInput;
12231
+ };
12232
+ /** Root mutation type */
11623
12233
  export type MutationPublicUnsubscribeByTokenArgs = {
11624
12234
  token: Scalars['String']['input'];
11625
12235
  };
@@ -11637,9 +12247,17 @@ export type MutationPublishApplicationVersionToOrganizationArgs = {
11637
12247
  workspaceId: Scalars['ID']['input'];
11638
12248
  };
11639
12249
  /** Root mutation type */
12250
+ export type MutationPublishCatalogNodeManifestArgs = {
12251
+ manifest: Scalars['JSON']['input'];
12252
+ nodeType: Scalars['String']['input'];
12253
+ secret: Scalars['String']['input'];
12254
+ version: Scalars['String']['input'];
12255
+ };
12256
+ /** Root mutation type */
11640
12257
  export type MutationPublishCatalogNodeVersionArgs = {
11641
12258
  isFirstPublish?: InputMaybe<Scalars['Boolean']['input']>;
11642
12259
  nodeType: Scalars['String']['input'];
12260
+ providers?: InputMaybe<Array<Scalars['String']['input']>>;
11643
12261
  secret: Scalars['String']['input'];
11644
12262
  version: Scalars['String']['input'];
11645
12263
  zipUrl: Scalars['String']['input'];
@@ -11768,6 +12386,10 @@ export type MutationRecordExploreClickArgs = {
11768
12386
  input: RecordExploreClickInput;
11769
12387
  };
11770
12388
  /** Root mutation type */
12389
+ export type MutationRecordExternalRefundArgs = {
12390
+ input: RecordExternalRefundInput;
12391
+ };
12392
+ /** Root mutation type */
11771
12393
  export type MutationRecordExternalSettlementArgs = {
11772
12394
  input: RecordExternalSettlementInput;
11773
12395
  };
@@ -11788,6 +12410,10 @@ export type MutationRecordProductVisitArgs = {
11788
12410
  input: RecordProductVisitInput;
11789
12411
  };
11790
12412
  /** Root mutation type */
12413
+ export type MutationRecordPublisherChargebackArgs = {
12414
+ input: RecordPublisherChargebackInput;
12415
+ };
12416
+ /** Root mutation type */
11791
12417
  export type MutationRecordSaleArgs = {
11792
12418
  input: RecordSaleInput;
11793
12419
  };
@@ -11804,6 +12430,10 @@ export type MutationRefreshConnectionTokensArgs = {
11804
12430
  id: Scalars['ID']['input'];
11805
12431
  };
11806
12432
  /** Root mutation type */
12433
+ export type MutationRefreshMyPublisherPayoutOnboardingArgs = {
12434
+ id: Scalars['ID']['input'];
12435
+ };
12436
+ /** Root mutation type */
11807
12437
  export type MutationRefreshProductAssetUrlArgs = {
11808
12438
  assetId: Scalars['ID']['input'];
11809
12439
  expiresInSeconds?: InputMaybe<Scalars['Int']['input']>;
@@ -11859,6 +12489,15 @@ export type MutationRegisterWebhookEventSubjectsArgs = {
11859
12489
  input: RegisterWebhookEventSubjectsInput;
11860
12490
  };
11861
12491
  /** Root mutation type */
12492
+ export type MutationRegisterWebhookSubscriptionArgs = {
12493
+ input: RegisterWebhookSubscriptionInput;
12494
+ };
12495
+ /** Root mutation type */
12496
+ export type MutationReinstateListingArgs = {
12497
+ note?: InputMaybe<Scalars['String']['input']>;
12498
+ productId: Scalars['ID']['input'];
12499
+ };
12500
+ /** Root mutation type */
11862
12501
  export type MutationReinstatePublisherArgs = {
11863
12502
  id: Scalars['ID']['input'];
11864
12503
  };
@@ -11902,6 +12541,11 @@ export type MutationRejectPublisherArgs = {
11902
12541
  reason: Scalars['String']['input'];
11903
12542
  };
11904
12543
  /** Root mutation type */
12544
+ export type MutationRejectPublisherPayoutMethodArgs = {
12545
+ id: Scalars['ID']['input'];
12546
+ reason: Scalars['String']['input'];
12547
+ };
12548
+ /** Root mutation type */
11905
12549
  export type MutationRejectReviewArgs = {
11906
12550
  id: Scalars['ID']['input'];
11907
12551
  };
@@ -11910,10 +12554,19 @@ export type MutationRejectWaitlistArgs = {
11910
12554
  input: RejectWaitlistInput;
11911
12555
  };
11912
12556
  /** Root mutation type */
12557
+ export type MutationRejectWorkflowTemplateRevisionArgs = {
12558
+ id: Scalars['ID']['input'];
12559
+ reason: Scalars['String']['input'];
12560
+ };
12561
+ /** Root mutation type */
11913
12562
  export type MutationReleaseLegalHoldArgs = {
11914
12563
  id: Scalars['ID']['input'];
11915
12564
  };
11916
12565
  /** Root mutation type */
12566
+ export type MutationReleasePublisherPayoutHoldArgs = {
12567
+ id: Scalars['ID']['input'];
12568
+ };
12569
+ /** Root mutation type */
11917
12570
  export type MutationReleaseSuppressionArgs = {
11918
12571
  input: ReleaseSuppressionInput;
11919
12572
  };
@@ -11957,6 +12610,10 @@ export type MutationRemoveInterviewerFromRoundArgs = {
11957
12610
  roundId: Scalars['ID']['input'];
11958
12611
  };
11959
12612
  /** Root mutation type */
12613
+ export type MutationRemoveMyPublisherPayoutMethodArgs = {
12614
+ id: Scalars['ID']['input'];
12615
+ };
12616
+ /** Root mutation type */
11960
12617
  export type MutationRemoveOrganizationMemberArgs = {
11961
12618
  organizationId: Scalars['String']['input'];
11962
12619
  userId: Scalars['String']['input'];
@@ -12069,18 +12726,14 @@ export type MutationReplaceApplicationTagsArgs = {
12069
12726
  input: ReplaceApplicationTagsInput;
12070
12727
  };
12071
12728
  /** Root mutation type */
12072
- export type MutationReplaceChannelConnectionTagsArgs = {
12073
- input: ReplaceChannelConnectionTagsInput;
12074
- };
12075
- /** Root mutation type */
12076
- export type MutationReplaceChannelTagsArgs = {
12077
- input: ReplaceChannelTagsInput;
12078
- };
12079
- /** Root mutation type */
12080
12729
  export type MutationReplaceStoreProductTagsArgs = {
12081
12730
  input: ReplaceStoreProductTagsInput;
12082
12731
  };
12083
12732
  /** Root mutation type */
12733
+ export type MutationReplayBillingWebhookArgs = {
12734
+ logId: Scalars['ID']['input'];
12735
+ };
12736
+ /** Root mutation type */
12084
12737
  export type MutationReplyToContactInquiryArgs = {
12085
12738
  id: Scalars['ID']['input'];
12086
12739
  message: Scalars['String']['input'];
@@ -12101,6 +12754,10 @@ export type MutationReportAppReviewArgs = {
12101
12754
  reviewId: Scalars['ID']['input'];
12102
12755
  };
12103
12756
  /** Root mutation type */
12757
+ export type MutationReportListingArgs = {
12758
+ input: ReportListingInput;
12759
+ };
12760
+ /** Root mutation type */
12104
12761
  export type MutationReportNodeSandboxBuildStatusArgs = {
12105
12762
  applicationVersionId: Scalars['ID']['input'];
12106
12763
  error?: InputMaybe<Scalars['String']['input']>;
@@ -12109,6 +12766,12 @@ export type MutationReportNodeSandboxBuildStatusArgs = {
12109
12766
  status: Scalars['String']['input'];
12110
12767
  };
12111
12768
  /** Root mutation type */
12769
+ export type MutationReportReviewArgs = {
12770
+ details?: InputMaybe<Scalars['String']['input']>;
12771
+ reason: Scalars['String']['input'];
12772
+ reviewId: Scalars['ID']['input'];
12773
+ };
12774
+ /** Root mutation type */
12112
12775
  export type MutationReprocessWebhookArgs = {
12113
12776
  eventId: Scalars['ID']['input'];
12114
12777
  };
@@ -12221,11 +12884,19 @@ export type MutationResolveInventoryAlertArgs = {
12221
12884
  alertId: Scalars['ID']['input'];
12222
12885
  };
12223
12886
  /** Root mutation type */
12887
+ export type MutationResolveListingReportArgs = {
12888
+ input: ResolveListingReportInput;
12889
+ };
12890
+ /** Root mutation type */
12224
12891
  export type MutationResolveOrderIssueFlagArgs = {
12225
12892
  id: Scalars['ID']['input'];
12226
12893
  organizationId?: InputMaybe<Scalars['ID']['input']>;
12227
12894
  };
12228
12895
  /** Root mutation type */
12896
+ export type MutationResolveReviewReportArgs = {
12897
+ input: ResolveReviewReportInput;
12898
+ };
12899
+ /** Root mutation type */
12229
12900
  export type MutationResolveSupportTicketArgs = {
12230
12901
  id: Scalars['ID']['input'];
12231
12902
  resolution?: InputMaybe<Scalars['String']['input']>;
@@ -12276,6 +12947,11 @@ export type MutationResumeScheduledJobArgs = {
12276
12947
  id: Scalars['ID']['input'];
12277
12948
  };
12278
12949
  /** Root mutation type */
12950
+ export type MutationRetireManagedAppInternalArgs = {
12951
+ clientId: Scalars['String']['input'];
12952
+ reason?: InputMaybe<Scalars['String']['input']>;
12953
+ };
12954
+ /** Root mutation type */
12279
12955
  export type MutationRetirePushDeviceInternalArgs = {
12280
12956
  errorCode: Scalars['String']['input'];
12281
12957
  token: Scalars['String']['input'];
@@ -12422,6 +13098,7 @@ export type MutationRunChannelHealthCheckArgs = {
12422
13098
  export type MutationRunDsarRequestForSubjectArgs = {
12423
13099
  dryRun?: InputMaybe<Scalars['Boolean']['input']>;
12424
13100
  mode: DsarMode;
13101
+ subjectEmail?: InputMaybe<Scalars['String']['input']>;
12425
13102
  subjectId: Scalars['ID']['input'];
12426
13103
  };
12427
13104
  /** Root mutation type */
@@ -12482,10 +13159,6 @@ export type MutationSendNewsletterArgs = {
12482
13159
  id: Scalars['ID']['input'];
12483
13160
  };
12484
13161
  /** Root mutation type */
12485
- export type MutationSendProductWelcomeEmailArgs = {
12486
- input: ProductWelcomeEmailInput;
12487
- };
12488
- /** Root mutation type */
12489
13162
  export type MutationSendPushMfaChallengeArgs = {
12490
13163
  deviceId?: InputMaybe<Scalars['String']['input']>;
12491
13164
  };
@@ -12507,6 +13180,10 @@ export type MutationServiceRecordEarningArgs = {
12507
13180
  input: ServiceRecordEarningInput;
12508
13181
  };
12509
13182
  /** Root mutation type */
13183
+ export type MutationServiceRefundPaymentArgs = {
13184
+ input: ServiceRefundPaymentInput;
13185
+ };
13186
+ /** Root mutation type */
12510
13187
  export type MutationServiceRequestPayoutArgs = {
12511
13188
  input: ServiceRequestPayoutInput;
12512
13189
  };
@@ -12515,6 +13192,10 @@ export type MutationServiceResolvePayoutAccountArgs = {
12515
13192
  input: ServiceResolvePayoutAccountInput;
12516
13193
  };
12517
13194
  /** Root mutation type */
13195
+ export type MutationServiceReverseEarningArgs = {
13196
+ input: ServiceReverseEarningInput;
13197
+ };
13198
+ /** Root mutation type */
12518
13199
  export type MutationServiceSyncPayoutStatusArgs = {
12519
13200
  input: ServiceSyncPayoutStatusInput;
12520
13201
  };
@@ -12646,6 +13327,11 @@ export type MutationStartAppTrialArgs = {
12646
13327
  installationId: Scalars['ID']['input'];
12647
13328
  };
12648
13329
  /** Root mutation type */
13330
+ export type MutationStartMyPublisherPayoutOnboardingArgs = {
13331
+ id: Scalars['ID']['input'];
13332
+ input: StartMyPublisherPayoutOnboardingInput;
13333
+ };
13334
+ /** Root mutation type */
12649
13335
  export type MutationStartStagedRolloutArgs = {
12650
13336
  initialPercentage?: InputMaybe<Scalars['Int']['input']>;
12651
13337
  releaseId: Scalars['ID']['input'];
@@ -12700,6 +13386,10 @@ export type MutationSubmitSatisfactionSurveyArgs = {
12700
13386
  input: SubmitSatisfactionSurveyInput;
12701
13387
  };
12702
13388
  /** Root mutation type */
13389
+ export type MutationSubmitWorkflowTemplateArgs = {
13390
+ input: SubmitWorkflowTemplateInput;
13391
+ };
13392
+ /** Root mutation type */
12703
13393
  export type MutationSubscribeArgs = {
12704
13394
  input: SubscribeInput;
12705
13395
  };
@@ -12710,10 +13400,12 @@ export type MutationSubscribeToStoreArgs = {
12710
13400
  /** Root mutation type */
12711
13401
  export type MutationSupportEraseSubjectArgs = {
12712
13402
  dryRun?: InputMaybe<Scalars['Boolean']['input']>;
13403
+ subjectEmail?: InputMaybe<Scalars['String']['input']>;
12713
13404
  subjectId: Scalars['ID']['input'];
12714
13405
  };
12715
13406
  /** Root mutation type */
12716
13407
  export type MutationSupportExportSubjectArgs = {
13408
+ subjectEmail?: InputMaybe<Scalars['String']['input']>;
12717
13409
  subjectId: Scalars['ID']['input'];
12718
13410
  };
12719
13411
  /** Root mutation type */
@@ -12748,6 +13440,15 @@ export type MutationSuspendWorkspaceArgs = {
12748
13440
  id: Scalars['ID']['input'];
12749
13441
  };
12750
13442
  /** Root mutation type */
13443
+ export type MutationSyncCatalogNodeManifestArgs = {
13444
+ input: SyncCatalogNodeManifestInput;
13445
+ };
13446
+ /** Root mutation type */
13447
+ export type MutationSyncDirectoryWorkersInternalArgs = {
13448
+ input: DirectorySyncInput;
13449
+ workspaceId: Scalars['ID']['input'];
13450
+ };
13451
+ /** Root mutation type */
12751
13452
  export type MutationSyncStoreSubmissionStatusArgs = {
12752
13453
  input: SyncStoreSubmissionInput;
12753
13454
  };
@@ -12765,18 +13466,14 @@ export type MutationSyncWorkspaceFromWspaceArgs = {
12765
13466
  input: SyncWorkspaceFromWspaceInput;
12766
13467
  };
12767
13468
  /** Root mutation type */
12768
- export type MutationTagChannelArgs = {
12769
- input: TagChannelInput;
12770
- };
12771
- /** Root mutation type */
12772
- export type MutationTagChannelConnectionArgs = {
12773
- input: TagChannelConnectionInput;
12774
- };
12775
- /** Root mutation type */
12776
13469
  export type MutationTagStoreProductArgs = {
12777
13470
  input: TagStoreProductInput;
12778
13471
  };
12779
13472
  /** Root mutation type */
13473
+ export type MutationTakedownListingArgs = {
13474
+ input: TakedownListingInput;
13475
+ };
13476
+ /** Root mutation type */
12780
13477
  export type MutationTestConnectionHealthArgs = {
12781
13478
  id: Scalars['ID']['input'];
12782
13479
  };
@@ -12794,6 +13491,10 @@ export type MutationTestWebhookArgs = {
12794
13491
  id: Scalars['ID']['input'];
12795
13492
  };
12796
13493
  /** Root mutation type */
13494
+ export type MutationTestWebhookSubscriptionArgs = {
13495
+ id: Scalars['ID']['input'];
13496
+ };
13497
+ /** Root mutation type */
12797
13498
  export type MutationToggleAddOnArgs = {
12798
13499
  id: Scalars['ID']['input'];
12799
13500
  status: Scalars['Boolean']['input'];
@@ -12911,14 +13612,6 @@ export type MutationUnsubscribeFromStoreArgs = {
12911
13612
  storeId: Scalars['ID']['input'];
12912
13613
  };
12913
13614
  /** Root mutation type */
12914
- export type MutationUntagChannelArgs = {
12915
- input: UntagChannelInput;
12916
- };
12917
- /** Root mutation type */
12918
- export type MutationUntagChannelConnectionArgs = {
12919
- input: UntagChannelConnectionInput;
12920
- };
12921
- /** Root mutation type */
12922
13615
  export type MutationUntagStoreProductArgs = {
12923
13616
  input: UntagStoreProductInput;
12924
13617
  };
@@ -13306,10 +13999,6 @@ export type MutationUpdateQuotaArgs = {
13306
13999
  input: UpdateQuotaInput;
13307
14000
  };
13308
14001
  /** Root mutation type */
13309
- export type MutationUpdateRbacConfigArgs = {
13310
- input: UpdateRbacConfigInput;
13311
- };
13312
- /** Root mutation type */
13313
14002
  export type MutationUpdateRecurringBillingPlanArgs = {
13314
14003
  input: UpdateRecurringBillingInput;
13315
14004
  };
@@ -13501,6 +14190,11 @@ export type MutationUpdateWebhookArgs = {
13501
14190
  input: UpdateWebhookInput;
13502
14191
  };
13503
14192
  /** Root mutation type */
14193
+ export type MutationUpdateWebhookSubscriptionArgs = {
14194
+ id: Scalars['ID']['input'];
14195
+ input: UpdateWebhookSubscriptionInput;
14196
+ };
14197
+ /** Root mutation type */
13504
14198
  export type MutationUpdateWorkspaceArgs = {
13505
14199
  id: Scalars['ID']['input'];
13506
14200
  input: UpdateWorkspaceInput;
@@ -13613,6 +14307,7 @@ export type MutationVerifyPaymentMethodArgs = {
13613
14307
  };
13614
14308
  /** Root mutation type */
13615
14309
  export type MutationVerifyPublisherPayoutMethodArgs = {
14310
+ externalAccountId?: InputMaybe<Scalars['String']['input']>;
13616
14311
  id: Scalars['ID']['input'];
13617
14312
  };
13618
14313
  /** Root mutation type */
@@ -13632,9 +14327,22 @@ export type MutationVoteOnAppReviewArgs = {
13632
14327
  reviewId: Scalars['ID']['input'];
13633
14328
  };
13634
14329
  /** Root mutation type */
14330
+ export type MutationVoteOnReviewArgs = {
14331
+ isHelpful: Scalars['Boolean']['input'];
14332
+ reviewId: Scalars['ID']['input'];
14333
+ };
14334
+ /** Root mutation type */
13635
14335
  export type MutationWithdrawConsentArgs = {
13636
14336
  input: WithdrawConsentInput;
13637
14337
  };
14338
+ /** Root mutation type */
14339
+ export type MutationWithdrawWorkflowTemplateRevisionArgs = {
14340
+ productId: Scalars['ID']['input'];
14341
+ };
14342
+ /** Root mutation type */
14343
+ export type MutationWithdrawWorkflowTemplateSubmissionArgs = {
14344
+ id: Scalars['ID']['input'];
14345
+ };
13638
14346
  /** 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. */
13639
14347
  export type MyContactInquiryFilterInput = {
13640
14348
  /** Filter by inquiry category (exact match against the stored string). */
@@ -14522,7 +15230,10 @@ export type OrderEstimateInput = {
14522
15230
  /** Order fulfillment tracking for physical orders */
14523
15231
  export type OrderFulfillment = {
14524
15232
  __typename?: 'OrderFulfillment';
14525
- /** Carrier shipment-creation attempt history (every retry, not just the last failure) — for admin debugging of "what happened, why, and how to fix it". */
15233
+ /**
15234
+ * Carrier shipment-creation attempt history (every retry, not just the last
15235
+ * failure) — for admin debugging of "what happened, why, and how to fix it".
15236
+ */
14526
15237
  attempts: Array<OrderFulfillmentAttempt>;
14527
15238
  /** When order was cancelled */
14528
15239
  cancelledAt?: Maybe<Scalars['DateTime']['output']>;
@@ -14584,7 +15295,11 @@ export type OrderFulfillment = {
14584
15295
  trackingUrl?: Maybe<Scalars['String']['output']>;
14585
15296
  updatedAt: Scalars['DateTime']['output'];
14586
15297
  };
14587
- /** 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). */
15298
+ /**
15299
+ * One carrier shipment-creation attempt — Temporal retries this up to 5 times;
15300
+ * this is the full history behind OrderFulfillment.failureReason (which only
15301
+ * ever holds the last attempt's message).
15302
+ */
14588
15303
  export type OrderFulfillmentAttempt = {
14589
15304
  __typename?: 'OrderFulfillmentAttempt';
14590
15305
  attemptNumber: Scalars['Int']['output'];
@@ -14611,7 +15326,11 @@ export declare enum OrderIssueCategory {
14611
15326
  OutOfStock = "OUT_OF_STOCK",
14612
15327
  WrongAddress = "WRONG_ADDRESS"
14613
15328
  }
14614
- /** 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. */
15329
+ /**
15330
+ * A seller-reported problem fulfilling a physical order (e.g. out of stock,
15331
+ * cannot fulfill, wrong address). Raised by the org that owns the physical
15332
+ * line item(s) on the order; resolvable by admin or the org that raised it.
15333
+ */
14615
15334
  export type OrderIssueFlag = {
14616
15335
  __typename?: 'OrderIssueFlag';
14617
15336
  category: OrderIssueCategory;
@@ -14816,6 +15535,41 @@ export type OrganizationMemberList = {
14816
15535
  offset: Scalars['Int']['output'];
14817
15536
  total: Scalars['Int']['output'];
14818
15537
  };
15538
+ /** A workspace-private custom node of a workspace's organization (BOFF-9766). */
15539
+ export type OrganizationPrivateNode = {
15540
+ __typename?: 'OrganizationPrivateNode';
15541
+ applicationId: Scalars['ID']['output'];
15542
+ iconUrl?: Maybe<Scalars['String']['output']>;
15543
+ /** This workspace's active installation. Pass it to uninstallApp to remove the node. */
15544
+ installationId?: Maybe<Scalars['ID']['output']>;
15545
+ /** True when this workspace has an active installation of the node. */
15546
+ installed: Scalars['Boolean']['output'];
15547
+ /** The version this workspace has installed, when installed. */
15548
+ installedVersion?: Maybe<Scalars['String']['output']>;
15549
+ name: Scalars['String']['output'];
15550
+ /** Workflow node type from the version's manifest, e.g. custom/word_counter. */
15551
+ nodeType?: Maybe<Scalars['String']['output']>;
15552
+ nodeVersion?: Maybe<Scalars['String']['output']>;
15553
+ publishedAt?: Maybe<Scalars['DateTime']['output']>;
15554
+ shortDescription?: Maybe<Scalars['String']['output']>;
15555
+ slug: Scalars['String']['output'];
15556
+ /** Installed, and the organization has since published a newer version. */
15557
+ updateAvailable: Scalars['Boolean']['output'];
15558
+ /** Latest version published to the organization. Pass it to installApp. */
15559
+ version: Scalars['String']['output'];
15560
+ /** Id of the latest version published to the organization. */
15561
+ versionId: Scalars['ID']['output'];
15562
+ };
15563
+ /** The private custom nodes a workspace's organization has published, as seen from one workspace (BOFF-9766). */
15564
+ export type OrganizationPrivateNodeListing = {
15565
+ __typename?: 'OrganizationPrivateNodeListing';
15566
+ /** True when the caller administers the workspace and so may install or uninstall. */
15567
+ canManage: Scalars['Boolean']['output'];
15568
+ nodes: Array<OrganizationPrivateNode>;
15569
+ /** Organization the workspace belongs to; null when the caller is not a member or the workspace has no organization. */
15570
+ organizationId?: Maybe<Scalars['ID']['output']>;
15571
+ workspaceId: Scalars['ID']['output'];
15572
+ };
14819
15573
  export type OrganizationScheduleQuotas = {
14820
15574
  __typename?: 'OrganizationScheduleQuotas';
14821
15575
  currentActiveSchedules: Scalars['Int']['output'];
@@ -15724,6 +16478,8 @@ export type ProductContentPage = {
15724
16478
  content: Scalars['String']['output'];
15725
16479
  contentFormat: Scalars['String']['output'];
15726
16480
  createdAt: Scalars['DateTime']['output'];
16481
+ /** The customer's written approval of a case study and its numbers. A page tagged "case-study" is returned by the public content-page queries only when this is set. Null for every other page and for unapproved case studies. */
16482
+ customerSignOff?: Maybe<CustomerSignOff>;
15727
16483
  /** Blog/article fields */
15728
16484
  excerpt?: Maybe<Scalars['String']['output']>;
15729
16485
  featured: Scalars['Boolean']['output'];
@@ -15870,11 +16626,22 @@ export type ProductReview = {
15870
16626
  comment?: Maybe<Scalars['String']['output']>;
15871
16627
  context?: Maybe<Scalars['JSON']['output']>;
15872
16628
  createdAt: Scalars['DateTime']['output'];
16629
+ featuredAt?: Maybe<Scalars['DateTime']['output']>;
15873
16630
  helpful: Scalars['Int']['output'];
15874
16631
  id: Scalars['ID']['output'];
16632
+ isFeatured: Scalars['Boolean']['output'];
16633
+ isVerifiedInstall: Scalars['Boolean']['output'];
16634
+ metadata?: Maybe<Scalars['JSON']['output']>;
16635
+ moderatedAt?: Maybe<Scalars['DateTime']['output']>;
16636
+ moderatedBy?: Maybe<Scalars['String']['output']>;
16637
+ moderationNote?: Maybe<Scalars['String']['output']>;
16638
+ notHelpful: Scalars['Int']['output'];
15875
16639
  product: StoreProduct;
15876
16640
  productId: Scalars['String']['output'];
16641
+ publisherReply?: Maybe<ProductReviewReply>;
15877
16642
  rating: Scalars['Int']['output'];
16643
+ rejectionReason?: Maybe<Scalars['String']['output']>;
16644
+ reportCount: Scalars['Int']['output'];
15878
16645
  status: ReviewStatus;
15879
16646
  title?: Maybe<Scalars['String']['output']>;
15880
16647
  updatedAt: Scalars['DateTime']['output'];
@@ -15892,6 +16659,33 @@ export type ProductReviewReply = {
15892
16659
  reviewId: Scalars['ID']['output'];
15893
16660
  updatedAt: Scalars['DateTime']['output'];
15894
16661
  };
16662
+ export type ProductReviewReport = {
16663
+ __typename?: 'ProductReviewReport';
16664
+ actionTaken?: Maybe<Scalars['String']['output']>;
16665
+ context?: Maybe<Scalars['JSON']['output']>;
16666
+ createdAt: Scalars['DateTime']['output'];
16667
+ details?: Maybe<Scalars['String']['output']>;
16668
+ id: Scalars['ID']['output'];
16669
+ metadata?: Maybe<Scalars['JSON']['output']>;
16670
+ reason: Scalars['String']['output'];
16671
+ reportedBy: Scalars['String']['output'];
16672
+ reviewId: Scalars['ID']['output'];
16673
+ reviewedAt?: Maybe<Scalars['DateTime']['output']>;
16674
+ reviewedBy?: Maybe<Scalars['String']['output']>;
16675
+ status: Scalars['String']['output'];
16676
+ updatedAt: Scalars['DateTime']['output'];
16677
+ };
16678
+ export type ProductReviewVote = {
16679
+ __typename?: 'ProductReviewVote';
16680
+ context?: Maybe<Scalars['JSON']['output']>;
16681
+ createdAt: Scalars['DateTime']['output'];
16682
+ id: Scalars['ID']['output'];
16683
+ isHelpful: Scalars['Boolean']['output'];
16684
+ metadata?: Maybe<Scalars['JSON']['output']>;
16685
+ reviewId: Scalars['ID']['output'];
16686
+ updatedAt: Scalars['DateTime']['output'];
16687
+ userId: Scalars['String']['output'];
16688
+ };
15895
16689
  export declare enum ProductStatus {
15896
16690
  Archived = "ARCHIVED",
15897
16691
  Deprecated = "DEPRECATED",
@@ -15901,15 +16695,6 @@ export declare enum ProductStatus {
15901
16695
  Rejected = "REJECTED",
15902
16696
  Unlisted = "UNLISTED"
15903
16697
  }
15904
- export type ProductTag = {
15905
- __typename?: 'ProductTag';
15906
- context?: Maybe<Scalars['JSON']['output']>;
15907
- createdAt: Scalars['DateTime']['output'];
15908
- description?: Maybe<Scalars['String']['output']>;
15909
- id: Scalars['ID']['output'];
15910
- name: Scalars['String']['output'];
15911
- slug: Scalars['String']['output'];
15912
- };
15913
16698
  export type ProductTourStatistics = {
15914
16699
  __typename?: 'ProductTourStatistics';
15915
16700
  averageCompletionRate: Scalars['Float']['output'];
@@ -15983,22 +16768,6 @@ export type ProductVariant = {
15983
16768
  /** Weight unit for this variant */
15984
16769
  weightUnit?: Maybe<WeightUnit>;
15985
16770
  };
15986
- export type ProductWelcomeEmailInput = {
15987
- /** URL the user just landed on (e.g. https://app.vibecontrols.com). Used as the primary CTA target if the template doesn't override it. */
15988
- appUrl?: InputMaybe<Scalars['String']['input']>;
15989
- /** Idempotency key — same key + same input = at-most-once delivery. Recommended format: "welcome:<productSlug>:<userId>". */
15990
- idempotencyKey?: InputMaybe<Scalars['String']['input']>;
15991
- /** Organization ID for multi-tenancy / connection lookup. */
15992
- organizationId: Scalars['ID']['input'];
15993
- /** PlatformProduct.slug — e.g. "vibecontrols", "botlit", "workspaces". Falls back to the `default` template if no matching template is registered. */
15994
- productSlug: Scalars['String']['input'];
15995
- /** Recipient email address. */
15996
- recipientEmail: Scalars['String']['input'];
15997
- /** Recipient display name for the greeting line. Defaults to "there" if empty. First name is preferred. */
15998
- recipientName?: InputMaybe<Scalars['String']['input']>;
15999
- /** Optional unsubscribe URL injected into the footer. */
16000
- unsubscribeUrl?: InputMaybe<Scalars['String']['input']>;
16001
- };
16002
16771
  export type PromoCode = {
16003
16772
  __typename?: 'PromoCode';
16004
16773
  applicableProductIds: Array<Scalars['ID']['output']>;
@@ -16060,6 +16829,19 @@ export type ProvisionFreeTierForWorkspaceResult = {
16060
16829
  hasBillingAccount: Scalars['Boolean']['output'];
16061
16830
  /** Product IDs the assigned quotas belong to. */
16062
16831
  productIds: Array<Scalars['String']['output']>;
16832
+ /** Free-plan product IDs this workspace received no quotas from because every active free subscription for that product is already activated on plan.maxWorkspaces other workspaces of the org. Empty when nothing was capped. A non-empty list explains an assignedQuotas of 0: activate a plan with spare workspace capacity (activateSubscriptionForWorkspace) or upgrade the plan. */
16833
+ skippedAtCapProductIds: Array<Scalars['String']['output']>;
16834
+ };
16835
+ /** Input for a service-managed app (BOFF-9962). */
16836
+ export type ProvisionManagedAppInternalInput = {
16837
+ description?: InputMaybe<Scalars['String']['input']>;
16838
+ /** Display name, 1 to 200 characters. */
16839
+ name: Scalars['String']['input'];
16840
+ /** Scopes a delegation to the app may carry; at least one. */
16841
+ scopes: Array<Scalars['String']['input']>;
16842
+ tenantId?: InputMaybe<Scalars['String']['input']>;
16843
+ /** BOT (default), ASSISTANT, AUTOMATION or WORKFLOW. */
16844
+ type?: InputMaybe<AppType>;
16063
16845
  };
16064
16846
  /** Response for createUserTenantStructure mutation */
16065
16847
  export declare enum ProvisioningStatus {
@@ -16140,6 +16922,10 @@ export type Publisher = {
16140
16922
  context?: Maybe<Scalars['JSON']['output']>;
16141
16923
  country?: Maybe<Scalars['String']['output']>;
16142
16924
  createdAt: Scalars['DateTime']['output'];
16925
+ /** When the publisher accepted the Marketplace & Developer Agreement. Visible to the publisher and admins only. */
16926
+ developerAgreementAcceptedAt?: Maybe<Scalars['DateTime']['output']>;
16927
+ /** Version (YYYY-MM-DD) of the Marketplace & Developer Agreement the publisher accepted. Visible to the publisher and admins only. */
16928
+ developerAgreementVersion?: Maybe<Scalars['String']['output']>;
16143
16929
  /** The devportal developer organization that owns this publisher profile. Resolved via federation from global-devportal-svc. */
16144
16930
  developerOrganization?: Maybe<DeveloperOrganization>;
16145
16931
  email: Scalars['String']['output'];
@@ -16156,19 +16942,51 @@ export type Publisher = {
16156
16942
  rejectionReason?: Maybe<Scalars['String']['output']>;
16157
16943
  supportUrl?: Maybe<Scalars['String']['output']>;
16158
16944
  suspensionReason?: Maybe<Scalars['String']['output']>;
16945
+ /** Tax form type declared with the tax ID (for example PAN, GSTIN, W-9, W-8BEN). Visible to the publisher and admins only. */
16946
+ taxFormType?: Maybe<Scalars['String']['output']>;
16159
16947
  taxId?: Maybe<Scalars['String']['output']>;
16160
16948
  tier: PublisherTier;
16161
16949
  totalEarnings: Scalars['Float']['output'];
16162
16950
  totalSales: Scalars['Int']['output'];
16163
16951
  updatedAt: Scalars['DateTime']['output'];
16164
16952
  userId: Scalars['String']['output'];
16953
+ /** KYC documents submitted for review ([{type, filesSvcId, description, uploadedAt}]). Visible to the publisher and admins only. */
16954
+ verificationDocuments?: Maybe<Scalars['JSON']['output']>;
16165
16955
  verificationReviewedAt?: Maybe<Scalars['DateTime']['output']>;
16166
16956
  verificationReviewedBy?: Maybe<Scalars['String']['output']>;
16167
16957
  verificationStatus: PublisherVerificationStatus;
16168
16958
  verificationSubmittedAt?: Maybe<Scalars['DateTime']['output']>;
16169
16959
  websiteUrl?: Maybe<Scalars['String']['output']>;
16170
16960
  };
16171
- /** Consolidated earnings + payout status for the calling publisher, sourced from billing's canonical earnings ledger (global-billing-svc) rather than store's local figures. Null when the publisher has no billing account yet or billing is temporarily unavailable. */
16961
+ /** A payment dispute (chargeback) on a store order, for one publisher on it. */
16962
+ export type PublisherChargeback = {
16963
+ __typename?: 'PublisherChargeback';
16964
+ /** The publisher share of the disputed amount (held while the dispute is open). */
16965
+ amount: Scalars['Float']['output'];
16966
+ currency: Scalars['String']['output'];
16967
+ /** The publisher part of the processor dispute fee (deducted when the dispute is lost). */
16968
+ disputeFee: Scalars['Float']['output'];
16969
+ externalDisputeId: Scalars['String']['output'];
16970
+ id: Scalars['ID']['output'];
16971
+ openedAt: Scalars['DateTime']['output'];
16972
+ orderId: Scalars['ID']['output'];
16973
+ platformFault: Scalars['Boolean']['output'];
16974
+ publisherId: Scalars['ID']['output'];
16975
+ reason?: Maybe<Scalars['String']['output']>;
16976
+ resolvedAt?: Maybe<Scalars['DateTime']['output']>;
16977
+ status: PublisherChargebackStatus;
16978
+ };
16979
+ export declare enum PublisherChargebackStatus {
16980
+ Lost = "LOST",
16981
+ Open = "OPEN",
16982
+ Won = "WON"
16983
+ }
16984
+ /**
16985
+ * Consolidated earnings + payout status for the calling publisher, sourced from
16986
+ * billing's canonical earnings ledger (global-billing-svc) rather than store's
16987
+ * local figures. Null when the publisher has no billing account yet or billing is
16988
+ * temporarily unavailable.
16989
+ */
16172
16990
  export type PublisherEarningsStatus = {
16173
16991
  __typename?: 'PublisherEarningsStatus';
16174
16992
  availableAmount: Scalars['Float']['output'];
@@ -16180,17 +16998,144 @@ export type PublisherEarningsStatus = {
16180
16998
  reservedAmount: Scalars['Float']['output'];
16181
16999
  totalLifetimeAmount: Scalars['Float']['output'];
16182
17000
  };
17001
+ /** The calling user's progress through paid-listing publisher onboarding. */
17002
+ export type PublisherOnboardingStatus = {
17003
+ __typename?: 'PublisherOnboardingStatus';
17004
+ agreementUrl: Scalars['String']['output'];
17005
+ currentAgreementVersion: Scalars['String']['output'];
17006
+ payoutRoute: PublisherPayoutRoute;
17007
+ publisher?: Maybe<Publisher>;
17008
+ /** True when every step is COMPLETE, so the publisher may submit paid listings to stores that do not allow unverified publishers. */
17009
+ readyToSell: Scalars['Boolean']['output'];
17010
+ /** Publisher share of net sales revenue, in percent, under the published agreement. */
17011
+ revenueSharePercent: Scalars['Float']['output'];
17012
+ steps: Array<PublisherOnboardingStep>;
17013
+ };
17014
+ export type PublisherOnboardingStep = {
17015
+ __typename?: 'PublisherOnboardingStep';
17016
+ /** Free-text detail from a reviewer, such as a rejection reason. */
17017
+ detail?: Maybe<Scalars['String']['output']>;
17018
+ key: PublisherOnboardingStepKey;
17019
+ /** Machine-readable reason code for the status (for example REJECTED, AGREEMENT_OUTDATED). */
17020
+ reason?: Maybe<Scalars['String']['output']>;
17021
+ status: PublisherOnboardingStepStatus;
17022
+ };
17023
+ export declare enum PublisherOnboardingStepKey {
17024
+ DeveloperAgreement = "DEVELOPER_AGREEMENT",
17025
+ Kyc = "KYC",
17026
+ PayoutMethod = "PAYOUT_METHOD",
17027
+ Profile = "PROFILE",
17028
+ Tax = "TAX"
17029
+ }
17030
+ export declare enum PublisherOnboardingStepStatus {
17031
+ ActionRequired = "ACTION_REQUIRED",
17032
+ Blocked = "BLOCKED",
17033
+ Complete = "COMPLETE",
17034
+ InReview = "IN_REVIEW"
17035
+ }
17036
+ /**
17037
+ * A monthly publisher payout. amount is the net payable after refund and
17038
+ * chargeback netting: grossAmount (the publisher share of the period's sales)
17039
+ * plus adjustmentsAmount (the signed sum of the adjustments applied).
17040
+ */
17041
+ export type PublisherPayout = {
17042
+ __typename?: 'PublisherPayout';
17043
+ adjustmentsAmount?: Maybe<Scalars['Float']['output']>;
17044
+ /** Net payable amount. */
17045
+ amount: Scalars['Float']['output'];
17046
+ billingPayoutRequestId?: Maybe<Scalars['ID']['output']>;
17047
+ /** Share of the period's transactions that received a chargeback (0 to 1). */
17048
+ chargebackRate?: Maybe<Scalars['Float']['output']>;
17049
+ createdAt: Scalars['DateTime']['output'];
17050
+ currency: Scalars['String']['output'];
17051
+ grossAmount?: Maybe<Scalars['Float']['output']>;
17052
+ heldAt?: Maybe<Scalars['DateTime']['output']>;
17053
+ /** Why the payout is held back from disbursement: NO_VERIFIED_PAYOUT_METHOD or CHARGEBACK_RATE. Null when it is released. */
17054
+ holdReason?: Maybe<Scalars['String']['output']>;
17055
+ id: Scalars['ID']['output'];
17056
+ ordersCount: Scalars['Int']['output'];
17057
+ payoutPeriod?: Maybe<Scalars['String']['output']>;
17058
+ publisherId: Scalars['ID']['output'];
17059
+ releasedAt?: Maybe<Scalars['DateTime']['output']>;
17060
+ /** PENDING, PROCESSING, COMPLETED, FAILED or CANCELLED. */
17061
+ status: Scalars['String']['output'];
17062
+ };
17063
+ /**
17064
+ * A signed money movement netted into a publisher's next payout (Developer
17065
+ * Agreement Section 6). Negative amounts are deductions, positive are credits.
17066
+ */
17067
+ export type PublisherPayoutAdjustment = {
17068
+ __typename?: 'PublisherPayoutAdjustment';
17069
+ amount: Scalars['Float']['output'];
17070
+ appliedAt?: Maybe<Scalars['DateTime']['output']>;
17071
+ appliedPayoutId?: Maybe<Scalars['ID']['output']>;
17072
+ appliedPeriod?: Maybe<Scalars['String']['output']>;
17073
+ chargebackId?: Maybe<Scalars['ID']['output']>;
17074
+ createdAt: Scalars['DateTime']['output'];
17075
+ currency: Scalars['String']['output'];
17076
+ id: Scalars['ID']['output'];
17077
+ orderId?: Maybe<Scalars['ID']['output']>;
17078
+ publisherId: Scalars['ID']['output'];
17079
+ reason?: Maybe<Scalars['String']['output']>;
17080
+ /** OPEN (waiting for the next payout run), APPLIED or VOID. */
17081
+ status: Scalars['String']['output'];
17082
+ /** REFUND, DISPUTE_HOLD, DISPUTE_RELEASE, DISPUTE_FEE or CARRY_FORWARD. */
17083
+ type: Scalars['String']['output'];
17084
+ };
16183
17085
  export type PublisherPayoutMethod = {
16184
17086
  __typename?: 'PublisherPayoutMethod';
17087
+ country?: Maybe<Scalars['String']['output']>;
16185
17088
  createdAt: Scalars['DateTime']['output'];
17089
+ currency?: Maybe<Scalars['String']['output']>;
17090
+ /** Masked label for the method, for example "HDFC Bank •••• 1234". Full account numbers are never stored. */
17091
+ displayLabel?: Maybe<Scalars['String']['output']>;
16186
17092
  externalAccountId?: Maybe<Scalars['String']['output']>;
16187
17093
  id: Scalars['ID']['output'];
16188
17094
  isDefault: Scalars['Boolean']['output'];
17095
+ /** Masked payout details (holder name, bank name, last four digits, bank code). */
17096
+ maskedDetails?: Maybe<Scalars['JSON']['output']>;
17097
+ /** Why the processor could not verify the account (for example NAME_MISMATCH or VALIDATION_FAILED). */
17098
+ processorFailureReason?: Maybe<Scalars['String']['output']>;
17099
+ /**
17100
+ * State of the processor-side payout account billing created for this method:
17101
+ * PENDING_VERIFICATION, ACTIVE or FAILED_VERIFICATION. Null until onboarding starts.
17102
+ */
17103
+ processorStatus?: Maybe<Scalars['String']['output']>;
17104
+ /** When the processor state was last read from billing. */
17105
+ processorSyncedAt?: Maybe<Scalars['DateTime']['output']>;
17106
+ /** The publisher that owns this payout method (resolved for admins and the owner). */
17107
+ publisher?: Maybe<Publisher>;
16189
17108
  publisherId: Scalars['ID']['output'];
17109
+ rejectionReason?: Maybe<Scalars['String']['output']>;
17110
+ /** PENDING (awaiting admin verification), VERIFIED, REJECTED, SUSPENDED or CLOSED. */
16190
17111
  status: Scalars['String']['output'];
16191
17112
  type: PayoutMethodType;
16192
17113
  verifiedAt?: Maybe<Scalars['DateTime']['output']>;
16193
17114
  };
17115
+ /** Progress of automatic payout onboarding for a payout method. */
17116
+ export type PublisherPayoutOnboarding = {
17117
+ __typename?: 'PublisherPayoutOnboarding';
17118
+ failureReason?: Maybe<Scalars['String']['output']>;
17119
+ method: PublisherPayoutMethod;
17120
+ /** STRIPE_CONNECT: Stripe's hosted onboarding page for the publisher to complete. Null for RazorpayX and once verified. */
17121
+ onboardingUrl?: Maybe<Scalars['String']['output']>;
17122
+ /** RAZORPAYX or STRIPE_CONNECT. */
17123
+ processor: Scalars['String']['output'];
17124
+ /** PENDING_VERIFICATION, ACTIVE or FAILED_VERIFICATION on the processor side. */
17125
+ processorStatus?: Maybe<Scalars['String']['output']>;
17126
+ };
17127
+ /**
17128
+ * Which payout processor and methods apply to a publisher's country.
17129
+ * India: RazorpayX payouts in INR. Everywhere else: Stripe Connect in USD, with an
17130
+ * international bank transfer as the alternative. PAYPAL is not offered.
17131
+ */
17132
+ export type PublisherPayoutRoute = {
17133
+ __typename?: 'PublisherPayoutRoute';
17134
+ country?: Maybe<Scalars['String']['output']>;
17135
+ currency: Scalars['String']['output'];
17136
+ methodTypes: Array<PayoutMethodType>;
17137
+ processor: Scalars['String']['output'];
17138
+ };
16194
17139
  export declare enum PublisherTier {
16195
17140
  Enterprise = "ENTERPRISE",
16196
17141
  Individual = "INDIVIDUAL",
@@ -16269,9 +17214,15 @@ export type Query = {
16269
17214
  actionDefinitions: Array<ActionDefinition>;
16270
17215
  /** 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. */
16271
17216
  activeSchedules: Array<TourSchedule>;
16272
- /** Get all active sessions for the current user. The `isCurrent` field indicates which session belongs to this request. Resolver filters by actorId — membership IS the access list. */
17217
+ /** Get active sessions for the current user. An optional exact clientSessionNonce filters only that authenticated owner's sessions; it never grants access. The `isCurrent` field indicates which session belongs to this request. Resolver filters by actorId — membership IS the access list. */
16273
17218
  activeSessions: SessionConnection;
16274
- /** Count activity logs matching the filter (action, resource, resourceType, workspaceId, tenantId, date range, etc.). Lets a service migrating its local audit table verify exact parity (local table count == owner count for its slice) before dropping the local table. Uses the SAME where-builder as `activityLogs`, and applies the SAME tenant/workspace scoping, so the count matches the list it verifies. */
17219
+ /**
17220
+ * Count activity logs matching the filter (action, resource, resourceType, workspaceId, tenantId,
17221
+ * date range, etc.). Lets a service migrating its local audit table verify exact parity (local
17222
+ * table count == owner count for its slice) before dropping the local table. Uses the SAME
17223
+ * where-builder as `activityLogs`, and applies the SAME tenant/workspace scoping, so the count
17224
+ * matches the list it verifies.
17225
+ */
16275
17226
  activityCount: Scalars['Int']['output'];
16276
17227
  activityLog?: Maybe<ActivityLog>;
16277
17228
  activityLogs: ActivityLogConnection;
@@ -16283,10 +17234,15 @@ export type Query = {
16283
17234
  actorRoleAssignments: Array<ActorRoleAssignment>;
16284
17235
  /** List actors with RBAC context in a scope */
16285
17236
  actors: Array<ActorRbacSummary>;
17237
+ /** Whether the caller's organization can buy each add-on (BOFF-9889: add-ons require a paid subscription to their product unless flagged otherwise). With billingAccountId, only that billing account is checked (it must belong to the caller's organization) and subscriptionId, when given, must be one of its paid subscriptions of the add-on's product. Without it, every active billing account of the organization counts. Organization-scoped like getAllAddOns. */
17238
+ addonPurchaseEligibility: Array<AddonPurchaseEligibility>;
16286
17239
  adminAffiliateAnalytics: AffiliateAdminAnalytics;
16287
17240
  adminPayoutRequests: PayoutRequestConnection;
16288
17241
  adminPayoutSummary: PayoutAdminSummary;
16289
- /** Admin-only: paginated list of physical (fulfillment-tracked) orders, with optional status/search filters. Used by the admin fulfillment console. */
17242
+ /**
17243
+ * Admin-only: paginated list of physical (fulfillment-tracked) orders, with
17244
+ * optional status/search filters. Used by the admin fulfillment console.
17245
+ */
16290
17246
  adminPhysicalOrders: StoreOrdersResult;
16291
17247
  affiliateCode?: Maybe<AffiliateCode>;
16292
17248
  affiliateCodeAnalytics: AffiliateCodeAnalytics;
@@ -16347,12 +17303,37 @@ export type Query = {
16347
17303
  automationSubscribers: Array<AutomationSubscriber>;
16348
17304
  availableAgents: Array<AgentProfile>;
16349
17305
  availableAuthMethods: Array<AuthMethod>;
16350
- /** Get available preview features the user can opt-in to within a workspace. Returns only flags that are previewable, active, and allowed by workspace admin. When `productSlug` is provided (each product app shell passes its own slug), the result is scoped to that product's previewable flags PLUS platform-wide previewable flags — so a product's Feature Previews page never surfaces other products' flags. Omit `productSlug` to get every available preview. Bounded by limit/offset to avoid unbounded fetches. */
17306
+ /** Get available preview features the user can opt-in to within a workspace. Returns only flags that are previewable, active, and allowed by workspace admin. When `productSlug` is provided (each product app shell passes its own slug), the result is scoped to that product's previewable flags PLUS platform-wide previewable flags — so a product's Feature Previews page never surfaces other products' flags. Omit `productSlug` to get every available preview. Self-scoped: every workspace member loads this, so the gateway only requires an authenticated actor and the resolver requires membership of `workspaceId`. Bounded by limit/offset to avoid unbounded fetches. */
16351
17307
  availableFeaturePreviews: Array<FeatureFlag>;
16352
17308
  /** Signed (DESIGN 3.7). The workspace's balance, in the person's view when actorId is given. */
16353
17309
  avatarMinutesForService: AvatarMinutesBalance;
16354
17310
  bounceStats: BounceStats;
16355
- /** Browse store products with unified filtering, sorting, and pagination. Search is treated as a filter - all filters combine with AND logic. Example usage: ```graphql query { browseStore(input: { filter: { search: "ai notification" type: NODE pricingModel: FREE minRating: 4.0 compatibleWith: "workspaces" } sortBy: RELEVANCE pagination: { limit: 20, offset: 0 } }) { products { id name rating downloads } totalCount hasMore facets { categories { value count } } } } ``` */
17311
+ /**
17312
+ * Browse store products with unified filtering, sorting, and pagination.
17313
+ * Search is treated as a filter - all filters combine with AND logic.
17314
+ *
17315
+ * Example usage:
17316
+ * ```graphql
17317
+ * query {
17318
+ * browseStore(input: {
17319
+ * filter: {
17320
+ * search: "ai notification"
17321
+ * type: NODE
17322
+ * pricingModel: FREE
17323
+ * minRating: 4.0
17324
+ * compatibleWith: "workspaces"
17325
+ * }
17326
+ * sortBy: RELEVANCE
17327
+ * pagination: { limit: 20, offset: 0 }
17328
+ * }) {
17329
+ * products { id name rating downloads }
17330
+ * totalCount
17331
+ * hasMore
17332
+ * facets { categories { value count } }
17333
+ * }
17334
+ * }
17335
+ * ```
17336
+ */
16356
17337
  browseStore: BrowseStoreResult;
16357
17338
  /** Calculate tax for a purchase (preview without creating payment) Used by checkout to show tax breakdown before payment */
16358
17339
  calculateTax: TaxCalculationResult;
@@ -16363,7 +17344,16 @@ export type Query = {
16363
17344
  cannedResponse?: Maybe<CannedResponse>;
16364
17345
  cannedResponseByShortcut?: Maybe<CannedResponse>;
16365
17346
  cannedResponses: CannedResponseConnection;
16366
- /** 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. */
17347
+ /**
17348
+ * Registered pickup/warehouse addresses across every configured shipping
17349
+ * carrier (currently Shiprocket; more may be added later — see
17350
+ * listCarrierAdapters) — lets a seller pick a pincode that can actually be
17351
+ * booked instead of typing an arbitrary one that checkout will later refuse
17352
+ * to ship. Each result is tagged with which carrier it belongs to. Carriers
17353
+ * that aren't configured, or that don't support pickup-location listing at
17354
+ * all (e.g. the manual carrier), simply contribute nothing — never blocks
17355
+ * org configuration.
17356
+ */
16367
17357
  carrierPickupLocations: Array<CarrierPickupLocation>;
16368
17358
  /** Get a cart by ID (admin or owner only) */
16369
17359
  cart?: Maybe<Cart>;
@@ -16483,7 +17473,7 @@ export type Query = {
16483
17473
  estimateNewsletterRecipients: NewsletterRecipientEstimate;
16484
17474
  /** Estimate shipping for an order with a specific method */
16485
17475
  estimateOrderShipping: OrderShippingEstimate;
16486
- /** 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`. */
17476
+ /** 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. Self-scoped: every page evaluates flags, so the gateway only requires an authenticated actor and the resolver requires membership of `input.workspaceId`. */
16487
17477
  evaluateFeatureFlags: FeatureFlagBulkEvaluation;
16488
17478
  /** One conversation with its full transcript, references, CTAs and clicks. Superadmin only. */
16489
17479
  exploreAdminConversation?: Maybe<ExploreAdminConversation>;
@@ -16497,8 +17487,12 @@ export type Query = {
16497
17487
  exploreAgentJob?: Maybe<ExploreAgentJob>;
16498
17488
  /** Products, example prompts, welcome copy and limits for the `/explore` page. Never throws — an unreachable agent yields `enabled: false`. */
16499
17489
  exploreCatalog: ExploreCatalog;
17490
+ /** Product site, language and size of the conversation the token owns. Scoped exactly like `exploreConversationMessages`: a token that owns nothing, or that owns a different conversation, is reported as NOT_FOUND, never FORBIDDEN. */
17491
+ exploreConversationInfo: ExploreConversationInfo;
16500
17492
  /** The conversation's messages, oldest first. */
16501
17493
  exploreConversationMessages: Array<ExploreMessage>;
17494
+ /** One answer and the question it replies to, by the answer's id, from the conversation the token owns. Scoped exactly like `exploreMessage`: a token that owns nothing, an id from a different conversation, the id of a USER message and an unknown id are all reported as NOT_FOUND, never FORBIDDEN. So is an answer whose question cannot be told apart from another turn's, as when two questions were sent on the conversation at once. */
17495
+ exploreConversationPair?: Maybe<ExploreConversationPair>;
16502
17496
  /** Poll one message. Scoped by `conversationToken`; a token that does not own the message is reported as NOT_FOUND, never FORBIDDEN. */
16503
17497
  exploreMessage?: Maybe<ExploreMessage>;
16504
17498
  /** A shared conversation, read-only. Returns the transcript for a `shareToken` and nothing that would let the caller continue or modify the thread. */
@@ -16519,7 +17513,10 @@ export type Query = {
16519
17513
  /** List feature flags with optional filtering (super admin only) */
16520
17514
  featureFlags: FeatureFlagList;
16521
17515
  featuredProducts: Array<StoreProduct>;
16522
- /** Get available filter options for a given context. Useful for populating filter dropdowns in UI. */
17516
+ /**
17517
+ * Get available filter options for a given context.
17518
+ * Useful for populating filter dropdowns in UI.
17519
+ */
16523
17520
  filterOptions: FilterOptionsResult;
16524
17521
  /** Get currently active promotions for a product/plan (public — used at checkout) */
16525
17522
  getActivePromotions: Array<Promotion>;
@@ -16532,6 +17529,7 @@ export type Query = {
16532
17529
  /** 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). */
16533
17530
  getAllPlans: Array<Plan>;
16534
17531
  getAllQuotas: Array<Quota>;
17532
+ /** List account quotas. Date bounds are inclusive on assignment createdAt; amount bounds are inclusive on activity-backed currentUsageSum, before pagination. Status uses remaining limits (WARNING >=75%, CRITICAL >=90%, EXHAUSTED <=0); expired assignments are INACTIVE and non-numeric unlimited quotas are HEALTHY. Both number and legacy numeric limit types are finite. Percentage thresholds use originalValue; when absent, the remaining value is the fallback baseline. Empty status lists apply no status filter. Pages are capped at 100 rows. Amount-filtered requests fail explicitly above 1000 usage lookups; narrow searchQuery or createdAt bounds rather than relying on partial counts. Derived-filter scans also fail above 10000 assignments, without partial counts. */
16535
17533
  getAllQuotasAssignment: PaginatedQuotaAssignments;
16536
17534
  getAllQuotasOfSub: Array<QuotaAssignment>;
16537
17535
  getAllRecurringBillingPlans: Array<RecurringBillingPlan>;
@@ -16558,14 +17556,12 @@ export type Query = {
16558
17556
  getBillingWebhookLogs: BillingWebhookLogsPage;
16559
17557
  /** Get a channel by ID */
16560
17558
  getChannel?: Maybe<Channel>;
16561
- getChannelConnectionTags: Array<ChannelConnectionTagAssignment>;
16562
17559
  /** Get recent delivery attempts for a channel. Supports cursor pagination — pass `cursor` from the previous page's `nextCursor`. Falls back to offset when `cursor` is absent. */
16563
17560
  getChannelDeliveryAttempts: DeliveryAttemptList;
16564
17561
  /** Get organization-level channel settings. Returns defaults when no settings have been saved yet. */
16565
17562
  getChannelOrgSettings: ChannelOrgSettings;
16566
17563
  /** Get channel statistics */
16567
17564
  getChannelStats: ChannelStats;
16568
- getChannelTags: Array<ChannelTagAssignment>;
16569
17565
  /** Get recent webhook events for a channel. Supports cursor pagination — pass `cursor` from the previous page's `nextCursor`. */
16570
17566
  getChannelWebhookEvents: WebhookEventList;
16571
17567
  /** Get all channels with optional filtering */
@@ -16666,7 +17662,7 @@ export type Query = {
16666
17662
  getPromotion?: Maybe<Promotion>;
16667
17663
  /** Get usage analytics for a specific quota assignment */
16668
17664
  getQuotaAnalytics: QuotaUsageAnalytics;
16669
- /** Enhanced quota assignment query with analytics, pagination and filtering */
17665
+ /** The same status, inclusive createdAt and currentUsageSum filters as getAllQuotasAssignment, with analytics for the filtered page. */
16670
17666
  getQuotaAssignmentsWithAnalytics: PaginatedQuotaAssignmentsWithAnalytics;
16671
17667
  getQuotaUsageAndLimit: QuotaUsageAndLimit;
16672
17668
  getQuotaUsageDetails?: Maybe<PaginatedUsages>;
@@ -16717,9 +17713,16 @@ export type Query = {
16717
17713
  getWebhookEvent?: Maybe<WebhookEvent>;
16718
17714
  /** Get webhook statistics for a channel */
16719
17715
  getWebhookStats: WebhookStats;
17716
+ /** Measure the triage engine against historical human categorisation. Support admins see their tenant; super admins see every tenant. Read-only. */
17717
+ globalTriageEvaluation: SupportTriageEvaluation;
17718
+ /** Publisher appeals, oldest first. */
17719
+ governanceAppeals: GovernanceAppealList;
16720
17720
  /** Health check endpoint */
16721
17721
  health: HealthStatus;
16722
- /** Get grouped products for homepage. Optionally filter by compatible product (e.g., "bigconsole", "fluidgrids"). */
17722
+ /**
17723
+ * Get grouped products for homepage.
17724
+ * Optionally filter by compatible product (e.g., "bigconsole", "fluidgrids").
17725
+ */
16723
17726
  homeGroupedProducts: GroupedStoreProducts;
16724
17727
  homepageSections: Array<HomepageSection>;
16725
17728
  i18nModule?: Maybe<I18nModule>;
@@ -16736,6 +17739,12 @@ export type Query = {
16736
17739
  /** Public listing of an application's installable versions (published or deprecated only — draft/pending_review/rejected versions are never returned here, to avoid exposing unreviewed versions). Used by the Store to let buyers pick a specific version at install time, and by global-store-svc (service actor) to resolve a chosen version's manifest when installing. */
16737
17740
  installableApplicationVersions: Array<ApplicationVersion>;
16738
17741
  installationPermissions?: Maybe<Scalars['JSON']['output']>;
17742
+ /**
17743
+ * Runtime routing metadata for an active node installation in the gateway-authenticated workspace.
17744
+ * Candidate node types are ordered, with the requested spelling before compatibility aliases.
17745
+ * Legacy installation versions are not treated as node runtime versions.
17746
+ */
17747
+ installedStoreNodeRuntime?: Maybe<StoreInstalledNodeRuntime>;
16739
17748
  /** Get a single interview round by ID (admin). */
16740
17749
  interviewRound?: Maybe<InterviewRound>;
16741
17750
  /** Get a single interviewer by ID (admin). */
@@ -16793,10 +17802,19 @@ export type Query = {
16793
17802
  listUserPlatformConnectionsByOrganization: UserPlatformConnectionList;
16794
17803
  /** List all platform connections for a given internal user. Supports cursor pagination — pass `cursor` from the previous page's `nextCursor`. */
16795
17804
  listUserPlatformConnectionsByUser: UserPlatformConnectionList;
16796
- /** M2M: list every ShippingAddress owned by an explicit user, on behalf of a calling service. Product backends (e.g. Kadaikodi) call this through the INTERNAL gateway to read a user's canonical addresses instead of keeping a local copy. Service-actor only — the userId is supplied by the caller. */
17805
+ /**
17806
+ * M2M: list every ShippingAddress owned by an explicit user, on behalf of a
17807
+ * calling service. Product backends (e.g. Kadaikodi) call this through the
17808
+ * INTERNAL gateway to read a user's canonical addresses instead of keeping a
17809
+ * local copy. Service-actor only — the userId is supplied by the caller.
17810
+ */
16797
17811
  listUserShippingAddresses: Array<ShippingAddress>;
17812
+ /** Buyer reports against listings, oldest first. */
17813
+ listingReports: ListingReportList;
16798
17814
  lookupAffiliateCode?: Maybe<AffiliateCodeLookup>;
16799
17815
  lowStockProducts: Array<LowStockProduct>;
17816
+ /** ACTIVE delegations of a service-managed app (BOFF-9962). Only the service that provisioned the app may list them; any other caller gets NOT_FOUND. */
17817
+ managedAppDelegationsInternal: Array<AppUserDelegation>;
16800
17818
  /** Returns products the current user can access based on their actor type, email domain, and waitlist approval status. Used by app shells for nav. */
16801
17819
  myAccessibleProducts: PlatformProductList;
16802
17820
  myActivityLogs: ActivityLogConnection;
@@ -16825,6 +17843,8 @@ export type Query = {
16825
17843
  myEarningsEntries: EarningsEntryConnection;
16826
17844
  myEarningsSummary: EarningsSummary;
16827
17845
  myEntitlements: Array<ProductEntitlement>;
17846
+ /** Your own appeals as a publisher, newest first. */
17847
+ myGovernanceAppeals: GovernanceAppealList;
16828
17848
  /** Get notification counts grouped by app name for authenticated user */
16829
17849
  myNotificationCountsByApp: Scalars['JSON']['output'];
16830
17850
  /** Get notification counts by channel for authenticated user */
@@ -16853,8 +17873,19 @@ export type Query = {
16853
17873
  myPublicKeys: Array<PublicKeyInfo>;
16854
17874
  /** Get the current user's publisher profile, or null if none exists yet. */
16855
17875
  myPublisher?: Maybe<Publisher>;
16856
- /** Earnings + payout status for the calling user's publisher profile, read from billing's canonical ledger. Self-scoped: resolved from the authenticated actor. */
17876
+ /**
17877
+ * Earnings + payout status for the calling user's publisher profile, read from
17878
+ * billing's canonical ledger. Self-scoped: resolved from the authenticated actor.
17879
+ */
16857
17880
  myPublisherEarningsStatus?: Maybe<PublisherEarningsStatus>;
17881
+ /** The calling user's paid-listing publisher onboarding checklist (BOFF-10634). */
17882
+ myPublisherOnboarding: PublisherOnboardingStatus;
17883
+ /** Refund and chargeback adjustments on the calling user's publisher profile, newest first. */
17884
+ myPublisherPayoutAdjustments: Array<PublisherPayoutAdjustment>;
17885
+ /** Payout methods on the calling user's publisher profile (closed methods excluded). */
17886
+ myPublisherPayoutMethods: Array<PublisherPayoutMethod>;
17887
+ /** Payouts of the calling user's publisher profile, newest first. */
17888
+ myPublisherPayouts: Array<PublisherPayout>;
16858
17889
  myReviews: Array<ProductReview>;
16859
17890
  /** Get current user's roles in a scope (lightweight, self-service). Use this for quick role checks without fetching full permissions. Self-scoped — see myPermissions for the rationale. (BOFF-2655) */
16860
17891
  myRoles: MyRolesResult;
@@ -16868,6 +17899,8 @@ export type Query = {
16868
17899
  mySubscribedStores: Array<Store>;
16869
17900
  mySupportTickets: SupportTicketConnection;
16870
17901
  mySurveys: CustomerSatisfactionSurveyConnection;
17902
+ /** Your listings that the store team has taken down, with the reason. */
17903
+ myTakenDownListings: Array<StoreProduct>;
16871
17904
  /** Get tenants the calling user has access to. Returns the union of: - every ACTIVE SHARED tenant (every authenticated user implicitly has access) - every tenant for which the caller has a `TenantMember` row Self-list (Type C): the resolver filters by `actorId`, so the returned set IS the access list. Any authenticated user may call this; no RBAC permission is checked. The dropdown that picks a target tenant for `createOrganization` must use this query so the FE never offers a tenant the server would reject. (BOFF-2652) */
16872
17905
  myTenants: TenantList;
16873
17906
  /** Get unread notification count for authenticated user */
@@ -16879,6 +17912,8 @@ export type Query = {
16879
17912
  /** List user's linked wallets */
16880
17913
  myWallets: Array<WalletInfo>;
16881
17914
  myWishlist: Array<UserWishlist>;
17915
+ /** Your own community workflow templates, newest first. */
17916
+ myWorkflowTemplateSubmissions: WorkflowTemplateSubmissionList;
16882
17917
  /** Get workspaces where the current user is a member (owned + added to). Membership-scoped: the resolver filters by actorId, so the returned set IS the access list. Any authenticated user may call this; no RBAC permission is checked. */
16883
17918
  myWorkspaces: WorkspaceList;
16884
17919
  newsletter?: Maybe<Newsletter>;
@@ -16928,7 +17963,11 @@ export type Query = {
16928
17963
  orderEstimate?: Maybe<OrderEstimate>;
16929
17964
  /** Get fulfillment details for an order */
16930
17965
  orderFulfillment?: Maybe<OrderFulfillment>;
16931
- /** 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. */
17966
+ /**
17967
+ * Admin-only: paginated log of carrier shipment-creation attempts across all
17968
+ * orders (every Temporal retry, not just the last failure), so ops can debug
17969
+ * fulfillment failures without direct DB/log access.
17970
+ */
16932
17971
  orderFulfillmentAttempts: OrderFulfillmentAttemptsPage;
16933
17972
  /** Get seller-reported issue flags for an order */
16934
17973
  orderIssueFlags: Array<OrderIssueFlag>;
@@ -16948,9 +17987,13 @@ export type Query = {
16948
17987
  organizationMembers: OrganizationMemberList;
16949
17988
  /** 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). */
16950
17989
  organizationPickupPostalCode?: Maybe<Scalars['String']['output']>;
17990
+ /** The workspace-private custom nodes of a workspace's organization (BOFF-9766): every PRIVATE NODE application bound to the organization the workspace belongs to, with its latest version published to that organization and whether this workspace has it installed. Feeds the "Your organization" section of the FluidGrids Node Store, where a workspace admin installs or updates one with `installApp` and removes it with `uninstallApp`. Self-scoped (Type B): the gateway only authenticates the caller. The resolver lists nothing unless the caller is a member of `workspaceId`, and it only ever lists applications bound to that workspace's own organization, so a workspace of another organization sees none of them. */
17991
+ organizationPrivateNodes: OrganizationPrivateNodeListing;
16951
17992
  organizationScheduleQuotas: OrganizationScheduleQuotas;
16952
17993
  payoutRunHistory: Array<PayoutRunLog>;
16953
17994
  pendingDeveloperOrganizationVerifications: DeveloperOrganizationConnection;
17995
+ /** Payout methods awaiting admin verification (admin queue). */
17996
+ pendingPublisherPayoutMethods: Array<PublisherPayoutMethod>;
16954
17997
  /** Publishers awaiting verification review (admin queue). */
16955
17998
  pendingPublishers: Array<Publisher>;
16956
17999
  /** Admin queue: products awaiting review. */
@@ -16958,6 +18001,8 @@ export type Query = {
16958
18001
  /** Get pending scheduled notifications that are due for triggering */
16959
18002
  pendingScheduledNotifications: Array<ScheduledNotification>;
16960
18003
  pendingSurveys: CustomerSatisfactionSurveyConnection;
18004
+ /** Admin queue: new versions of published templates, oldest first. */
18005
+ pendingWorkflowTemplateRevisions: WorkflowTemplateRevisionList;
16961
18006
  /** Get permission check audit log */
16962
18007
  permissionAuditLog: Array<PermissionAuditLog>;
16963
18008
  /** Get a single platform product by ID (admin/catalog read). Returns the full PlatformProduct including DRAFT products and internal operational metrics, so it is gated as a global-scope catalog read. Unauthenticated/marketing callers must use publicProduct(slug), which filters to ACTIVE/WAITLIST/COMING_SOON and strips internal fields. */
@@ -16990,6 +18035,7 @@ export type Query = {
16990
18035
  productOrders: ItemOrdersList;
16991
18036
  productReleases: Array<ProductRelease>;
16992
18037
  productReviews: Array<ProductReview>;
18038
+ productReviewsCount: Scalars['Int']['output'];
16993
18039
  /** Get shortcuts for a specific product (includes global shortcuts). Bounded by limit/offset to avoid unbounded fetches. */
16994
18040
  productShortcuts: Array<KeyboardShortcut>;
16995
18041
  /** Get product-level tour statistics */
@@ -17020,6 +18066,14 @@ export type Query = {
17020
18066
  publicResolvedContentPage?: Maybe<ProductContentPage>;
17021
18067
  publicScheduleTemplates: ScheduleTemplateConnection;
17022
18068
  publishedProducts: Array<StoreProduct>;
18069
+ /** Chargebacks recorded against publisher sales (admin). */
18070
+ publisherChargebacks: Array<PublisherChargeback>;
18071
+ /** Refund and chargeback adjustments netted into publisher payouts (admin). */
18072
+ publisherPayoutAdjustments: Array<PublisherPayoutAdjustment>;
18073
+ /** Monthly publisher payouts with their netting breakdown and hold state (admin). */
18074
+ publisherPayouts: Array<PublisherPayout>;
18075
+ /** Short-lived (5 minute) download URL for one of a publisher's KYC documents (admin review). */
18076
+ publisherVerificationDocumentUrl: Scalars['String']['output'];
17023
18077
  /** 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). */
17024
18078
  pushDevicesForUserInternal: Array<DeviceToken>;
17025
18079
  /** 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. */
@@ -17028,10 +18082,6 @@ export type Query = {
17028
18082
  rbacAnalytics: RbacAnalytics;
17029
18083
  /** Get RBAC configuration change history */
17030
18084
  rbacChangeHistory: Array<RbacChangeLog>;
17031
- /** Get RBAC configuration for a scope */
17032
- rbacConfig: Array<RbacConfig>;
17033
- /** Get a specific RBAC configuration value */
17034
- rbacConfigValue?: Maybe<RbacConfig>;
17035
18085
  recentArticles: Array<KnowledgeBaseArticle>;
17036
18086
  releaseAuditEvents: Array<ProductReleaseAuditEvent>;
17037
18087
  releaseTracks: Array<ReleaseTrack>;
@@ -17049,6 +18099,8 @@ export type Query = {
17049
18099
  resources: Array<Resource>;
17050
18100
  review?: Maybe<ProductReview>;
17051
18101
  reviewReplies: Array<ProductReviewReply>;
18102
+ /** Reports against reviews (including publishers' rating disputes), oldest first. */
18103
+ reviewReports: GovernanceReviewReportList;
17052
18104
  /** Get a role by ID */
17053
18105
  role?: Maybe<Role>;
17054
18106
  /** Get actors assigned to a role */
@@ -17075,7 +18127,11 @@ export type Query = {
17075
18127
  searchFAQs: Array<Faq>;
17076
18128
  searchKnowledgeBase: Array<KnowledgeBaseArticle>;
17077
18129
  searchProducts: Array<StoreProduct>;
17078
- /** Get search suggestions for autocomplete. Returns suggestions from product names, tags, categories, and authors. Uses trigram matching for fuzzy search. */
18130
+ /**
18131
+ * Get search suggestions for autocomplete.
18132
+ * Returns suggestions from product names, tags, categories, and authors.
18133
+ * Uses trigram matching for fuzzy search.
18134
+ */
17079
18135
  searchSuggestions: Array<SearchSuggestion>;
17080
18136
  searchTicketTemplates: Array<TicketTemplate>;
17081
18137
  searchTickets: Array<SupportTicket>;
@@ -17094,8 +18150,31 @@ export type Query = {
17094
18150
  /** Fetch a store by id or slug. */
17095
18151
  store?: Maybe<Store>;
17096
18152
  storeAppInstallation?: Maybe<StoreAppInstallation>;
17097
- /** Get detailed product information for the app details page. Includes product data, reviews, related products, publisher info, and version history. Automatically increments view count. Example usage: ```graphql query { storeProductDetails(input: { id: "product-123" }) { product { id name description manifest rating downloads } reviews { id rating comment } relatedProducts { id name icon } publisher { id name isVerified } versions { id version status } userReview { id rating } isPurchased } } ``` */
18153
+ /** Counters for the store reviewer console: review SLA, reports, appeals. */
18154
+ storeGovernanceStats: StoreGovernanceStats;
18155
+ /**
18156
+ * Get detailed product information for the app details page.
18157
+ * Includes product data, reviews, related products, publisher info, and version history.
18158
+ * Automatically increments view count.
18159
+ *
18160
+ * Example usage:
18161
+ * ```graphql
18162
+ * query {
18163
+ * storeProductDetails(input: { id: "product-123" }) {
18164
+ * product { id name description manifest rating downloads }
18165
+ * reviews { id rating comment }
18166
+ * relatedProducts { id name icon }
18167
+ * publisher { id name isVerified }
18168
+ * versions { id version status }
18169
+ * userReview { id rating }
18170
+ * isPurchased
18171
+ * }
18172
+ * }
18173
+ * ```
18174
+ */
17098
18175
  storeProductDetails: StoreProductDetailsResult;
18176
+ /** Listing submissions waiting for review, oldest first. */
18177
+ storeReviewQueue: PaginatedProducts;
17099
18178
  /** List all stores the caller can see. */
17100
18179
  stores: Array<Store>;
17101
18180
  subprocessor?: Maybe<Subprocessor>;
@@ -17121,9 +18200,8 @@ export type Query = {
17121
18200
  syncOutboxEntry?: Maybe<SyncOutboxEntry>;
17122
18201
  /** Aggregate counts for the outbox, used by the admin dashboard tile. */
17123
18202
  syncOutboxStats: SyncOutboxStats;
17124
- tag?: Maybe<ProductTag>;
17125
- tagBySlug?: Maybe<ProductTag>;
17126
- tags: Array<ProductTag>;
18203
+ /** Listings currently taken down, most recent first. */
18204
+ takenDownListings: PaginatedProducts;
17127
18205
  /** Get a single tenant by ID */
17128
18206
  tenant?: Maybe<Tenant>;
17129
18207
  /** Get a tenant by slug */
@@ -17181,7 +18259,10 @@ export type Query = {
17181
18259
  translationKeys: TranslationKeyList;
17182
18260
  translationStats: Scalars['JSON']['output'];
17183
18261
  translations: TranslationList;
17184
- /** Get popular/trending search terms. Useful for showing suggestions when search input is empty. */
18262
+ /**
18263
+ * Get popular/trending search terms.
18264
+ * Useful for showing suggestions when search input is empty.
18265
+ */
17185
18266
  trendingSearches: Array<Scalars['String']['output']>;
17186
18267
  /** Get a user by ID (admin only) */
17187
18268
  user?: Maybe<User>;
@@ -17189,7 +18270,7 @@ export type Query = {
17189
18270
  userBillingPlan: UserBillingPlan;
17190
18271
  /** Get total count of users (for analytics) */
17191
18272
  userCount: Scalars['Int']['output'];
17192
- /** Get a user's feature flag preferences in a workspace. Bounded by limit/offset to avoid unbounded fetches. */
18273
+ /** Get the calling user's own feature flag preferences in a workspace. Self-scoped: the resolver filters rows by the caller's user id, so the result is the access control. Bounded by limit/offset to avoid unbounded fetches. */
17193
18274
  userFeatureFlagPreferences: Array<UserFeatureFlagPreference>;
17194
18275
  userLanguagePreference?: Maybe<UserLanguagePreference>;
17195
18276
  /** Check if the current user has reviewed a specific product */
@@ -17202,7 +18283,10 @@ export type Query = {
17202
18283
  usersByIds: Array<User>;
17203
18284
  /** Validate a coupon code for a specific order */
17204
18285
  validateCoupon: ValidateCouponResponse;
17205
- /** Validate a license key without modifying state. Used by vibecontrols agents + wspace services to check license validity before plugin load. */
18286
+ /**
18287
+ * Validate a license key without modifying state. Used by vibecontrols
18288
+ * agents + wspace services to check license validity before plugin load.
18289
+ */
17206
18290
  validateLicense: LicenseValidationResult;
17207
18291
  validatePromoCode: PromoCodeValidationResult;
17208
18292
  /** Verify an installation using the app signing secret. Called server-to-server by integration backends after receiving the post-install redirect with ?installation_id=xxx. Returns the full installation context (workspaceId, scope, status, consentedPermissions). Responds with NOT_FOUND for any invalid combination to prevent enumeration. */
@@ -17218,6 +18302,10 @@ export type Query = {
17218
18302
  webhookEventCatalog: Array<WebhookEventCatalogEntry>;
17219
18303
  /** Registered subject mappings. Platform services and super admins only. */
17220
18304
  webhookEventSubjects: Array<WebhookEventSubject>;
18305
+ /** Fetch a single webhook subscription by ID */
18306
+ webhookSubscription?: Maybe<WebhookSubscription>;
18307
+ /** List webhook subscriptions for an owner (newest first) */
18308
+ webhookSubscriptions: Array<WebhookSubscription>;
17221
18309
  webhooks: Array<Webhook>;
17222
18310
  /** Get a single workspace by ID */
17223
18311
  workspace?: Maybe<Workspace>;
@@ -17247,6 +18335,7 @@ export type QueryActiveSchedulesArgs = {
17247
18335
  };
17248
18336
  /** Root query type */
17249
18337
  export type QueryActiveSessionsArgs = {
18338
+ clientSessionNonce?: InputMaybe<Scalars['ID']['input']>;
17250
18339
  pagination?: InputMaybe<PaginationInput>;
17251
18340
  };
17252
18341
  /** Root query type */
@@ -17288,6 +18377,12 @@ export type QueryActorsArgs = {
17288
18377
  scopeId: Scalars['String']['input'];
17289
18378
  };
17290
18379
  /** Root query type */
18380
+ export type QueryAddonPurchaseEligibilityArgs = {
18381
+ addonIds: Array<Scalars['ID']['input']>;
18382
+ billingAccountId?: InputMaybe<Scalars['ID']['input']>;
18383
+ subscriptionId?: InputMaybe<Scalars['ID']['input']>;
18384
+ };
18385
+ /** Root query type */
17291
18386
  export type QueryAdminAffiliateAnalyticsArgs = {
17292
18387
  filter?: InputMaybe<AffiliateAnalyticsFilterInput>;
17293
18388
  };
@@ -17952,12 +19047,21 @@ export type QueryExploreCatalogArgs = {
17952
19047
  productSlug?: InputMaybe<Scalars['String']['input']>;
17953
19048
  };
17954
19049
  /** Root query type */
19050
+ export type QueryExploreConversationInfoArgs = {
19051
+ conversationToken: Scalars['String']['input'];
19052
+ };
19053
+ /** Root query type */
17955
19054
  export type QueryExploreConversationMessagesArgs = {
17956
19055
  conversationToken: Scalars['String']['input'];
17957
19056
  limit?: InputMaybe<Scalars['Int']['input']>;
17958
19057
  };
17959
19058
  /** Root query type */
17960
- export type QueryExploreMessageArgs = {
19059
+ export type QueryExploreConversationPairArgs = {
19060
+ answerId: Scalars['ID']['input'];
19061
+ conversationToken: Scalars['String']['input'];
19062
+ };
19063
+ /** Root query type */
19064
+ export type QueryExploreMessageArgs = {
17961
19065
  conversationToken: Scalars['String']['input'];
17962
19066
  id: Scalars['ID']['input'];
17963
19067
  };
@@ -18125,10 +19229,6 @@ export type QueryGetChannelArgs = {
18125
19229
  id: Scalars['ID']['input'];
18126
19230
  };
18127
19231
  /** Root query type */
18128
- export type QueryGetChannelConnectionTagsArgs = {
18129
- input: GetChannelConnectionTagsInput;
18130
- };
18131
- /** Root query type */
18132
19232
  export type QueryGetChannelDeliveryAttemptsArgs = {
18133
19233
  channelId: Scalars['ID']['input'];
18134
19234
  cursor?: InputMaybe<Scalars['String']['input']>;
@@ -18143,10 +19243,6 @@ export type QueryGetChannelStatsArgs = {
18143
19243
  id: Scalars['ID']['input'];
18144
19244
  };
18145
19245
  /** Root query type */
18146
- export type QueryGetChannelTagsArgs = {
18147
- input: GetChannelTagsInput;
18148
- };
18149
- /** Root query type */
18150
19246
  export type QueryGetChannelWebhookEventsArgs = {
18151
19247
  channelId: Scalars['ID']['input'];
18152
19248
  cursor?: InputMaybe<Scalars['String']['input']>;
@@ -18528,6 +19624,16 @@ export type QueryGetWebhookStatsArgs = {
18528
19624
  startDate?: InputMaybe<Scalars['DateTime']['input']>;
18529
19625
  };
18530
19626
  /** Root query type */
19627
+ export type QueryGlobalTriageEvaluationArgs = {
19628
+ sampleSize?: InputMaybe<Scalars['Int']['input']>;
19629
+ };
19630
+ /** Root query type */
19631
+ export type QueryGovernanceAppealsArgs = {
19632
+ limit?: InputMaybe<Scalars['Int']['input']>;
19633
+ offset?: InputMaybe<Scalars['Int']['input']>;
19634
+ status?: InputMaybe<GovernanceAppealStatus>;
19635
+ };
19636
+ /** Root query type */
18531
19637
  export type QueryHomeGroupedProductsArgs = {
18532
19638
  compatibleWith?: InputMaybe<Scalars['String']['input']>;
18533
19639
  };
@@ -18592,6 +19698,11 @@ export type QueryInstallationPermissionsArgs = {
18592
19698
  installationId: Scalars['ID']['input'];
18593
19699
  };
18594
19700
  /** Root query type */
19701
+ export type QueryInstalledStoreNodeRuntimeArgs = {
19702
+ nodeTypes: Array<Scalars['String']['input']>;
19703
+ nodeVersion?: InputMaybe<Scalars['String']['input']>;
19704
+ };
19705
+ /** Root query type */
18595
19706
  export type QueryInterviewRoundArgs = {
18596
19707
  id: Scalars['ID']['input'];
18597
19708
  };
@@ -18772,6 +19883,13 @@ export type QueryListUserShippingAddressesArgs = {
18772
19883
  userId: Scalars['String']['input'];
18773
19884
  };
18774
19885
  /** Root query type */
19886
+ export type QueryListingReportsArgs = {
19887
+ limit?: InputMaybe<Scalars['Int']['input']>;
19888
+ offset?: InputMaybe<Scalars['Int']['input']>;
19889
+ productId?: InputMaybe<Scalars['ID']['input']>;
19890
+ status?: InputMaybe<ListingReportStatus>;
19891
+ };
19892
+ /** Root query type */
18775
19893
  export type QueryLookupAffiliateCodeArgs = {
18776
19894
  code: Scalars['String']['input'];
18777
19895
  };
@@ -18780,6 +19898,10 @@ export type QueryLowStockProductsArgs = {
18780
19898
  storeId?: InputMaybe<Scalars['ID']['input']>;
18781
19899
  };
18782
19900
  /** Root query type */
19901
+ export type QueryManagedAppDelegationsInternalArgs = {
19902
+ clientId: Scalars['String']['input'];
19903
+ };
19904
+ /** Root query type */
18783
19905
  export type QueryMyAccessibleProductsArgs = {
18784
19906
  limit?: InputMaybe<Scalars['Int']['input']>;
18785
19907
  offset?: InputMaybe<Scalars['Int']['input']>;
@@ -18838,6 +19960,11 @@ export type QueryMyEntitlementsArgs = {
18838
19960
  offset?: InputMaybe<Scalars['Int']['input']>;
18839
19961
  };
18840
19962
  /** Root query type */
19963
+ export type QueryMyGovernanceAppealsArgs = {
19964
+ limit?: InputMaybe<Scalars['Int']['input']>;
19965
+ offset?: InputMaybe<Scalars['Int']['input']>;
19966
+ };
19967
+ /** Root query type */
18841
19968
  export type QueryMyNotificationSendStatusArgs = {
18842
19969
  id: Scalars['ID']['input'];
18843
19970
  };
@@ -18885,6 +20012,16 @@ export type QueryMyPublicKeysArgs = {
18885
20012
  pagination?: InputMaybe<PaginationInput>;
18886
20013
  };
18887
20014
  /** Root query type */
20015
+ export type QueryMyPublisherPayoutAdjustmentsArgs = {
20016
+ limit?: InputMaybe<Scalars['Int']['input']>;
20017
+ offset?: InputMaybe<Scalars['Int']['input']>;
20018
+ };
20019
+ /** Root query type */
20020
+ export type QueryMyPublisherPayoutsArgs = {
20021
+ limit?: InputMaybe<Scalars['Int']['input']>;
20022
+ offset?: InputMaybe<Scalars['Int']['input']>;
20023
+ };
20024
+ /** Root query type */
18888
20025
  export type QueryMyReviewsArgs = {
18889
20026
  limit?: InputMaybe<Scalars['Int']['input']>;
18890
20027
  offset?: InputMaybe<Scalars['Int']['input']>;
@@ -18953,6 +20090,12 @@ export type QueryMyWalletsArgs = {
18953
20090
  pagination?: InputMaybe<PaginationInput>;
18954
20091
  };
18955
20092
  /** Root query type */
20093
+ export type QueryMyWorkflowTemplateSubmissionsArgs = {
20094
+ limit?: InputMaybe<Scalars['Int']['input']>;
20095
+ offset?: InputMaybe<Scalars['Int']['input']>;
20096
+ status?: InputMaybe<ProductStatus>;
20097
+ };
20098
+ /** Root query type */
18956
20099
  export type QueryMyWorkspacesArgs = {
18957
20100
  limit?: InputMaybe<Scalars['Int']['input']>;
18958
20101
  offset?: InputMaybe<Scalars['Int']['input']>;
@@ -19154,11 +20297,20 @@ export type QueryOrganizationPickupPostalCodeArgs = {
19154
20297
  id: Scalars['ID']['input'];
19155
20298
  };
19156
20299
  /** Root query type */
20300
+ export type QueryOrganizationPrivateNodesArgs = {
20301
+ workspaceId: Scalars['ID']['input'];
20302
+ };
20303
+ /** Root query type */
19157
20304
  export type QueryPendingDeveloperOrganizationVerificationsArgs = {
19158
20305
  limit?: InputMaybe<Scalars['Int']['input']>;
19159
20306
  offset?: InputMaybe<Scalars['Int']['input']>;
19160
20307
  };
19161
20308
  /** Root query type */
20309
+ export type QueryPendingPublisherPayoutMethodsArgs = {
20310
+ limit?: InputMaybe<Scalars['Int']['input']>;
20311
+ offset?: InputMaybe<Scalars['Int']['input']>;
20312
+ };
20313
+ /** Root query type */
19162
20314
  export type QueryPendingPublishersArgs = {
19163
20315
  limit?: InputMaybe<Scalars['Int']['input']>;
19164
20316
  offset?: InputMaybe<Scalars['Int']['input']>;
@@ -19180,6 +20332,12 @@ export type QueryPendingSurveysArgs = {
19180
20332
  offset?: InputMaybe<Scalars['Int']['input']>;
19181
20333
  };
19182
20334
  /** Root query type */
20335
+ export type QueryPendingWorkflowTemplateRevisionsArgs = {
20336
+ limit?: InputMaybe<Scalars['Int']['input']>;
20337
+ offset?: InputMaybe<Scalars['Int']['input']>;
20338
+ status?: InputMaybe<WorkflowTemplateRevisionStatus>;
20339
+ };
20340
+ /** Root query type */
19183
20341
  export type QueryPermissionAuditLogArgs = {
19184
20342
  filter?: InputMaybe<AuditLogFilterInput>;
19185
20343
  pagination?: InputMaybe<PaginationInput>;
@@ -19279,8 +20437,15 @@ export type QueryProductReleasesArgs = {
19279
20437
  };
19280
20438
  /** Root query type */
19281
20439
  export type QueryProductReviewsArgs = {
20440
+ isVerifiedPurchase?: InputMaybe<Scalars['Boolean']['input']>;
19282
20441
  limit?: InputMaybe<Scalars['Int']['input']>;
19283
20442
  offset?: InputMaybe<Scalars['Int']['input']>;
20443
+ productId: Scalars['String']['input'];
20444
+ rating?: InputMaybe<Scalars['Int']['input']>;
20445
+ status?: InputMaybe<ReviewStatus>;
20446
+ };
20447
+ /** Root query type */
20448
+ export type QueryProductReviewsCountArgs = {
19284
20449
  productId: Scalars['String']['input'];
19285
20450
  status?: InputMaybe<ReviewStatus>;
19286
20451
  };
@@ -19377,6 +20542,33 @@ export type QueryPublishedProductsArgs = {
19377
20542
  type?: InputMaybe<ProductType>;
19378
20543
  };
19379
20544
  /** Root query type */
20545
+ export type QueryPublisherChargebacksArgs = {
20546
+ limit?: InputMaybe<Scalars['Int']['input']>;
20547
+ offset?: InputMaybe<Scalars['Int']['input']>;
20548
+ publisherId?: InputMaybe<Scalars['ID']['input']>;
20549
+ status?: InputMaybe<PublisherChargebackStatus>;
20550
+ };
20551
+ /** Root query type */
20552
+ export type QueryPublisherPayoutAdjustmentsArgs = {
20553
+ limit?: InputMaybe<Scalars['Int']['input']>;
20554
+ offset?: InputMaybe<Scalars['Int']['input']>;
20555
+ publisherId?: InputMaybe<Scalars['ID']['input']>;
20556
+ status?: InputMaybe<Scalars['String']['input']>;
20557
+ };
20558
+ /** Root query type */
20559
+ export type QueryPublisherPayoutsArgs = {
20560
+ held?: InputMaybe<Scalars['Boolean']['input']>;
20561
+ limit?: InputMaybe<Scalars['Int']['input']>;
20562
+ offset?: InputMaybe<Scalars['Int']['input']>;
20563
+ period?: InputMaybe<Scalars['String']['input']>;
20564
+ publisherId?: InputMaybe<Scalars['ID']['input']>;
20565
+ };
20566
+ /** Root query type */
20567
+ export type QueryPublisherVerificationDocumentUrlArgs = {
20568
+ filesSvcId: Scalars['ID']['input'];
20569
+ publisherId: Scalars['ID']['input'];
20570
+ };
20571
+ /** Root query type */
19380
20572
  export type QueryPushDevicesForUserInternalArgs = {
19381
20573
  productSlug: Scalars['String']['input'];
19382
20574
  userId: Scalars['ID']['input'];
@@ -19401,15 +20593,6 @@ export type QueryRbacChangeHistoryArgs = {
19401
20593
  scopeId: Scalars['String']['input'];
19402
20594
  };
19403
20595
  /** Root query type */
19404
- export type QueryRbacConfigArgs = {
19405
- scopeId: Scalars['String']['input'];
19406
- };
19407
- /** Root query type */
19408
- export type QueryRbacConfigValueArgs = {
19409
- key: Scalars['String']['input'];
19410
- scopeId: Scalars['String']['input'];
19411
- };
19412
- /** Root query type */
19413
20596
  export type QueryRecentArticlesArgs = {
19414
20597
  limit?: InputMaybe<Scalars['Int']['input']>;
19415
20598
  offset?: InputMaybe<Scalars['Int']['input']>;
@@ -19460,6 +20643,13 @@ export type QueryReviewRepliesArgs = {
19460
20643
  reviewId: Scalars['ID']['input'];
19461
20644
  };
19462
20645
  /** Root query type */
20646
+ export type QueryReviewReportsArgs = {
20647
+ limit?: InputMaybe<Scalars['Int']['input']>;
20648
+ offset?: InputMaybe<Scalars['Int']['input']>;
20649
+ ratingDisputesOnly?: InputMaybe<Scalars['Boolean']['input']>;
20650
+ status?: InputMaybe<ReviewReportStatus>;
20651
+ };
20652
+ /** Root query type */
19463
20653
  export type QueryRoleArgs = {
19464
20654
  id: Scalars['ID']['input'];
19465
20655
  };
@@ -19602,6 +20792,13 @@ export type QueryStoreProductDetailsArgs = {
19602
20792
  input: StoreProductDetailsInput;
19603
20793
  };
19604
20794
  /** Root query type */
20795
+ export type QueryStoreReviewQueueArgs = {
20796
+ limit?: InputMaybe<Scalars['Int']['input']>;
20797
+ offset?: InputMaybe<Scalars['Int']['input']>;
20798
+ overdueOnly?: InputMaybe<Scalars['Boolean']['input']>;
20799
+ storeId?: InputMaybe<Scalars['ID']['input']>;
20800
+ };
20801
+ /** Root query type */
19605
20802
  export type QueryStoresArgs = {
19606
20803
  search?: InputMaybe<Scalars['String']['input']>;
19607
20804
  type?: InputMaybe<StoreType>;
@@ -19701,12 +20898,9 @@ export type QuerySyncOutboxEntryArgs = {
19701
20898
  id: Scalars['ID']['input'];
19702
20899
  };
19703
20900
  /** Root query type */
19704
- export type QueryTagArgs = {
19705
- id: Scalars['ID']['input'];
19706
- };
19707
- /** Root query type */
19708
- export type QueryTagBySlugArgs = {
19709
- slug: Scalars['String']['input'];
20901
+ export type QueryTakenDownListingsArgs = {
20902
+ limit?: InputMaybe<Scalars['Int']['input']>;
20903
+ offset?: InputMaybe<Scalars['Int']['input']>;
19710
20904
  };
19711
20905
  /** Root query type */
19712
20906
  export type QueryTenantArgs = {
@@ -19977,6 +21171,15 @@ export type QueryWebhookEventSubjectsArgs = {
19977
21171
  productSlug?: InputMaybe<Scalars['String']['input']>;
19978
21172
  };
19979
21173
  /** Root query type */
21174
+ export type QueryWebhookSubscriptionArgs = {
21175
+ id: Scalars['ID']['input'];
21176
+ };
21177
+ /** Root query type */
21178
+ export type QueryWebhookSubscriptionsArgs = {
21179
+ ownerId?: InputMaybe<Scalars['String']['input']>;
21180
+ ownerType: Scalars['String']['input'];
21181
+ };
21182
+ /** Root query type */
19980
21183
  export type QueryWebhooksArgs = {
19981
21184
  applicationId: Scalars['ID']['input'];
19982
21185
  };
@@ -20298,18 +21501,6 @@ export declare enum RbacChangeType {
20298
21501
  VisibilityRuleRemoved = "VISIBILITY_RULE_REMOVED",
20299
21502
  VisibilityRuleUpdated = "VISIBILITY_RULE_UPDATED"
20300
21503
  }
20301
- /** RBAC configuration key-value pair */
20302
- export type RbacConfig = {
20303
- __typename?: 'RbacConfig';
20304
- createdAt: Scalars['DateTime']['output'];
20305
- description?: Maybe<Scalars['String']['output']>;
20306
- id: Scalars['ID']['output'];
20307
- key: Scalars['String']['output'];
20308
- scopeId: Scalars['String']['output'];
20309
- updatedAt: Scalars['DateTime']['output'];
20310
- value: Scalars['String']['output'];
20311
- valueType: Scalars['String']['output'];
20312
- };
20313
21504
  /** Delivery result for a single recipient within a platform delivery */
20314
21505
  export type RecipientDeliveryResult = {
20315
21506
  __typename?: 'RecipientDeliveryResult';
@@ -20342,7 +21533,25 @@ export type RecipientInput = {
20342
21533
  export type RecordActivityInput = {
20343
21534
  action: Scalars['String']['input'];
20344
21535
  actorId?: InputMaybe<Scalars['String']['input']>;
20345
- /** Optional idempotency key for backfill/import (audit phase-2). Derive a STABLE key from the source row (e.g. `global_auth_audit:<rowId>`). When set, the write UPSERTs on this key: if a row with the same `dedupeKey` already exists it is returned unchanged (no duplicate, no double-count), so a service can replay ALL of its historical audit rows any number of times and converge to exactly one activity_logs row each — including rows already dual-written in phase-1 (give the dual-write the SAME key so backfill and dual-write converge). When null, behaves exactly as before (plain insert). */
21536
+ /**
21537
+ * `ai_assistant` when an AI assistant session made the change (BOFF-9649). Honoured only from a
21538
+ * service caller relaying a gateway-verified assistant-session marker (the be-sdk tracker); ignored
21539
+ * for any other caller, so a user cannot tag or untag their own rows.
21540
+ */
21541
+ actorOrigin?: InputMaybe<Scalars['String']['input']>;
21542
+ /** Proposal / idempotency key the assistant mutation ran under. Same trust rule as actorOrigin. */
21543
+ assistantCorrelationId?: InputMaybe<Scalars['String']['input']>;
21544
+ /** Relay session (assistant sandbox) that made the change. Same trust rule as actorOrigin. */
21545
+ assistantSessionId?: InputMaybe<Scalars['String']['input']>;
21546
+ /**
21547
+ * Optional idempotency key for backfill/import (audit phase-2). Derive a STABLE key from the
21548
+ * source row (e.g. `global_auth_audit:<rowId>`). When set, the write UPSERTs on this key: if a row
21549
+ * with the same `dedupeKey` already exists it is returned unchanged (no duplicate, no double-count),
21550
+ * so a service can replay ALL of its historical audit rows any number of times and converge to
21551
+ * exactly one activity_logs row each — including rows already dual-written in phase-1 (give the
21552
+ * dual-write the SAME key so backfill and dual-write converge). When null, behaves exactly as
21553
+ * before (plain insert).
21554
+ */
20346
21555
  dedupeKey?: InputMaybe<Scalars['String']['input']>;
20347
21556
  description?: InputMaybe<Scalars['String']['input']>;
20348
21557
  ipAddress?: InputMaybe<Scalars['String']['input']>;
@@ -20450,6 +21659,15 @@ export type RecordExploreClickResult = {
20450
21659
  __typename?: 'RecordExploreClickResult';
20451
21660
  recorded: Scalars['Boolean']['output'];
20452
21661
  };
21662
+ export type RecordExternalRefundInput = {
21663
+ amount: Scalars['Float']['input'];
21664
+ chargeId: Scalars['ID']['input'];
21665
+ currency: Scalars['String']['input'];
21666
+ externalRef: Scalars['String']['input'];
21667
+ orgId: Scalars['ID']['input'];
21668
+ reason?: InputMaybe<Scalars['String']['input']>;
21669
+ workspaceId?: InputMaybe<Scalars['ID']['input']>;
21670
+ };
20453
21671
  export type RecordExternalSettlementInput = {
20454
21672
  /** Settlement amount in whole currency units (must be > 0). */
20455
21673
  amount: Scalars['Float']['input'];
@@ -20504,6 +21722,23 @@ export type RecordProductVisitResult = {
20504
21722
  /** Outcome of the welcome-email side effect on first visit: "SENT" — successfully queued via channel-svc "FAILED" — channel-svc errored or no organization found "SKIPPED" — not the first visit; no email attempted */
20505
21723
  welcomeEmailStatus: Scalars['String']['output'];
20506
21724
  };
21725
+ /**
21726
+ * A chargeback event from the payment processor or finance. Recording the same
21727
+ * externalDisputeId and status again is a no-op.
21728
+ */
21729
+ export type RecordPublisherChargebackInput = {
21730
+ /** Processor dispute fee, deducted from the publisher only when the dispute is lost. */
21731
+ disputeFee?: InputMaybe<Scalars['Float']['input']>;
21732
+ /** Disputed amount on the order. Defaults to the full order total. */
21733
+ disputedAmount?: InputMaybe<Scalars['Float']['input']>;
21734
+ /** Processor dispute reference (for example Stripe dp_... or a Razorpay dispute id). */
21735
+ externalDisputeId: Scalars['String']['input'];
21736
+ orderId: Scalars['ID']['input'];
21737
+ /** The chargeback was caused by an error on Burdenoff's side and is never charged to the publisher. */
21738
+ platformFault?: InputMaybe<Scalars['Boolean']['input']>;
21739
+ reason?: InputMaybe<Scalars['String']['input']>;
21740
+ status: PublisherChargebackStatus;
21741
+ };
20507
21742
  export type RecordSaleInput = {
20508
21743
  applicationId?: InputMaybe<Scalars['ID']['input']>;
20509
21744
  buyerOrgId?: InputMaybe<Scalars['ID']['input']>;
@@ -20720,7 +21955,12 @@ export declare enum RefundStatus {
20720
21955
  Pending = "PENDING",
20721
21956
  Succeeded = "SUCCEEDED"
20722
21957
  }
20723
- /** 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. */
21958
+ /**
21959
+ * A seller's real pickup address, to be registered with a shipping carrier
21960
+ * (see registerCarrierPickupLocation). `carrier` selects which configured
21961
+ * carrier adapter to register it with — carrier-agnostic by design, since more
21962
+ * providers than Shiprocket may be added over time.
21963
+ */
20724
21964
  export type RegisterCarrierPickupLocationInput = {
20725
21965
  address: Scalars['String']['input'];
20726
21966
  addressLine2?: InputMaybe<Scalars['String']['input']>;
@@ -20730,7 +21970,11 @@ export type RegisterCarrierPickupLocationInput = {
20730
21970
  email: Scalars['String']['input'];
20731
21971
  /** Contact person at this address. */
20732
21972
  name: Scalars['String']['input'];
20733
- /** 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. */
21973
+ /**
21974
+ * The DeveloperOrganization this address is being registered for. Verified
21975
+ * via a cross-service call to global-devportal-svc's assertDeveloperOrgAccess
21976
+ * before any carrier API call is made.
21977
+ */
20734
21978
  organizationId: Scalars['ID']['input'];
20735
21979
  phone: Scalars['String']['input'];
20736
21980
  postalCode: Scalars['String']['input'];
@@ -20740,10 +21984,18 @@ export type RegisterProductAssetInput = {
20740
21984
  caption?: InputMaybe<Scalars['String']['input']>;
20741
21985
  fileName?: InputMaybe<Scalars['String']['input']>;
20742
21986
  fileType: ProductAssetType;
20743
- /** File ID returned from wspace-files-svc's completeUpload mutation. The browser uploads the file directly to files-svc, then calls this mutation to link it to the product. */
21987
+ /**
21988
+ * File ID returned from wspace-files-svc's completeUpload mutation.
21989
+ * The browser uploads the file directly to files-svc, then calls this
21990
+ * mutation to link it to the product.
21991
+ */
20744
21992
  filesSvcId: Scalars['ID']['input'];
20745
21993
  locale?: InputMaybe<Scalars['String']['input']>;
20746
- /** If true (default), marks previous assets of the same fileType+locale as no longer current. Set to false to keep multiple live copies (e.g. when building a screenshot gallery). */
21994
+ /**
21995
+ * If true (default), marks previous assets of the same fileType+locale as
21996
+ * no longer current. Set to false to keep multiple live copies (e.g. when
21997
+ * building a screenshot gallery).
21998
+ */
20747
21999
  makeCurrent?: InputMaybe<Scalars['Boolean']['input']>;
20748
22000
  mimeType?: InputMaybe<Scalars['String']['input']>;
20749
22001
  orderIndex?: InputMaybe<Scalars['Int']['input']>;
@@ -20787,6 +22039,23 @@ export type RegisterWebhookEventSubjectsInput = {
20787
22039
  /** Mappings to create or update (at most 100 per call). */
20788
22040
  subjects: Array<WebhookEventSubjectInput>;
20789
22041
  };
22042
+ /** Input for registerWebhookSubscription */
22043
+ export type RegisterWebhookSubscriptionInput = {
22044
+ /** Operator-facing description */
22045
+ description?: InputMaybe<Scalars['String']['input']>;
22046
+ /** Whether delivery is active (default true) */
22047
+ enabled?: InputMaybe<Scalars['Boolean']['input']>;
22048
+ /** Event types to receive; empty = all events for the owner */
22049
+ events: Array<Scalars['String']['input']>;
22050
+ /** Owner identifier of the event stream (e.g. platform product id) */
22051
+ ownerId: Scalars['String']['input'];
22052
+ /** Owner namespace of the event stream (e.g. "newsletter-product") */
22053
+ ownerType: Scalars['String']['input'];
22054
+ /** HMAC-SHA256 signing secret (write-only, never returned) */
22055
+ secret: Scalars['String']['input'];
22056
+ /** Delivery URL (HTTPS in production) */
22057
+ url: Scalars['String']['input'];
22058
+ };
20790
22059
  export type RejectWaitlistInput = {
20791
22060
  id: Scalars['ID']['input'];
20792
22061
  reason?: InputMaybe<Scalars['String']['input']>;
@@ -20836,18 +22105,23 @@ export type ReplaceApplicationTagsInput = {
20836
22105
  applicationId: Scalars['ID']['input'];
20837
22106
  tagIds: Array<Scalars['ID']['input']>;
20838
22107
  };
20839
- export type ReplaceChannelConnectionTagsInput = {
20840
- entityId: Scalars['ID']['input'];
20841
- tagIds: Array<Scalars['ID']['input']>;
20842
- };
20843
- export type ReplaceChannelTagsInput = {
20844
- entityId: Scalars['ID']['input'];
20845
- tagIds: Array<Scalars['ID']['input']>;
20846
- };
20847
22108
  export type ReplaceStoreProductTagsInput = {
20848
22109
  entityId: Scalars['ID']['input'];
20849
22110
  tagIds: Array<Scalars['ID']['input']>;
20850
22111
  };
22112
+ export type ReportListingInput = {
22113
+ /** What is wrong, up to 2000 characters. */
22114
+ details?: InputMaybe<Scalars['String']['input']>;
22115
+ productId: Scalars['ID']['input'];
22116
+ reason: ListingReportReason;
22117
+ };
22118
+ /** How a reviewer closes a report. */
22119
+ export declare enum ReportResolution {
22120
+ /** The report was valid and the store team acted on it. */
22121
+ Actioned = "ACTIONED",
22122
+ /** No action was needed. */
22123
+ Dismissed = "DISMISSED"
22124
+ }
20851
22125
  export type RequestCreditWithdrawalInput = {
20852
22126
  billingAccountId: Scalars['ID']['input'];
20853
22127
  creditAmount: Scalars['Float']['input'];
@@ -20911,6 +22185,20 @@ export type ResolveContextWidgetConversationInput = {
20911
22185
  title?: InputMaybe<Scalars['String']['input']>;
20912
22186
  workspaceId: Scalars['ID']['input'];
20913
22187
  };
22188
+ export type ResolveListingReportInput = {
22189
+ id: Scalars['ID']['input'];
22190
+ /** Required note for the record. */
22191
+ note: Scalars['String']['input'];
22192
+ resolution: ReportResolution;
22193
+ };
22194
+ export type ResolveReviewReportInput = {
22195
+ /** With ACTIONED, hide the reported review from the store. */
22196
+ hideReview?: InputMaybe<Scalars['Boolean']['input']>;
22197
+ id: Scalars['ID']['input'];
22198
+ /** Required note for the record. */
22199
+ note: Scalars['String']['input'];
22200
+ resolution: ReportResolution;
22201
+ };
20914
22202
  /** Registered resource with custom permission configurations. Resources are only registered when they have non-default permissions (overrides, visibility rules, or scoped assignments). */
20915
22203
  export type Resource = {
20916
22204
  __typename?: 'Resource';
@@ -20986,9 +22274,17 @@ export type RevenueSummary = {
20986
22274
  totalRefundsCount: Scalars['Int']['output'];
20987
22275
  totalSales: Scalars['Int']['output'];
20988
22276
  };
22277
+ /** Lifecycle of a report against a review. */
22278
+ export declare enum ReviewReportStatus {
22279
+ Actioned = "ACTIONED",
22280
+ Dismissed = "DISMISSED",
22281
+ Pending = "PENDING"
22282
+ }
20989
22283
  export declare enum ReviewStatus {
20990
22284
  Approved = "APPROVED",
20991
22285
  ChangesRequested = "CHANGES_REQUESTED",
22286
+ Flagged = "FLAGGED",
22287
+ Hidden = "HIDDEN",
20992
22288
  InProgress = "IN_PROGRESS",
20993
22289
  Pending = "PENDING",
20994
22290
  Rejected = "REJECTED"
@@ -21604,6 +22900,15 @@ export type SeedFluidgridsUserToursResult = {
21604
22900
  updatedCount: Scalars['Int']['output'];
21605
22901
  workspaceId: Scalars['String']['output'];
21606
22902
  };
22903
+ export type SeedHookmoviesUserToursResult = {
22904
+ __typename?: 'SeedHookmoviesUserToursResult';
22905
+ createdCount: Scalars['Int']['output'];
22906
+ productId: Scalars['String']['output'];
22907
+ totalCount: Scalars['Int']['output'];
22908
+ tours: Array<SeededUserTourResult>;
22909
+ updatedCount: Scalars['Int']['output'];
22910
+ workspaceId: Scalars['String']['output'];
22911
+ };
21607
22912
  export type SeedIntelWatchtowerUserToursResult = {
21608
22913
  __typename?: 'SeedIntelWatchtowerUserToursResult';
21609
22914
  createdCount: Scalars['Int']['output'];
@@ -21613,6 +22918,24 @@ export type SeedIntelWatchtowerUserToursResult = {
21613
22918
  updatedCount: Scalars['Int']['output'];
21614
22919
  workspaceId: Scalars['String']['output'];
21615
22920
  };
22921
+ export type SeedSemanticFedUserToursResult = {
22922
+ __typename?: 'SeedSemanticFedUserToursResult';
22923
+ createdCount: Scalars['Int']['output'];
22924
+ productId: Scalars['String']['output'];
22925
+ totalCount: Scalars['Int']['output'];
22926
+ tours: Array<SeededUserTourResult>;
22927
+ updatedCount: Scalars['Int']['output'];
22928
+ workspaceId: Scalars['String']['output'];
22929
+ };
22930
+ export type SeedSubscriberbotUserToursResult = {
22931
+ __typename?: 'SeedSubscriberbotUserToursResult';
22932
+ createdCount: Scalars['Int']['output'];
22933
+ productId: Scalars['String']['output'];
22934
+ totalCount: Scalars['Int']['output'];
22935
+ tours: Array<SeededUserTourResult>;
22936
+ updatedCount: Scalars['Int']['output'];
22937
+ workspaceId: Scalars['String']['output'];
22938
+ };
21616
22939
  export type SeedTheCulturePostUserToursResult = {
21617
22940
  __typename?: 'SeedTheCulturePostUserToursResult';
21618
22941
  createdCount: Scalars['Int']['output'];
@@ -21666,7 +22989,7 @@ export type SendExploreMessageInput = {
21666
22989
  attachments?: InputMaybe<Array<ExploreAttachmentInput>>;
21667
22990
  /** Omit to start a new conversation. The result's `conversation.token` is the secret to send back on every following turn. */
21668
22991
  conversationToken?: InputMaybe<Scalars['String']['input']>;
21669
- /** BCP-47 locale of the page (e.g. "en-US"). */
22992
+ /** BCP-47 locale of the page (e.g. "en-US"). Only the language is kept, and only if it is one of `en` `zh` `hi` `es` `ar` `ta` (any case, with or without region or script subtags such as `en-US` or `zh-Hans-CN`). Anything else is treated as not sent — never an error, so a page with an unexpected locale still gets its answer. */
21670
22993
  locale?: InputMaybe<Scalars['String']['input']>;
21671
22994
  /** The visitor's question. */
21672
22995
  message: Scalars['String']['input'];
@@ -21676,6 +22999,8 @@ export type SendExploreMessageInput = {
21676
22999
  productSlug?: InputMaybe<Scalars['String']['input']>;
21677
23000
  /** reCAPTCHA v3 token — required only when `exploreCatalog.captchaRequired`. */
21678
23001
  recaptchaToken?: InputMaybe<Scalars['String']['input']>;
23002
+ /** Where the visitor asked from. Omit (or send CHAT) for an ordinary chat turn. AVATAR on the first question of a new conversation asks the agent for an answer short enough to be read aloud. On a later turn it does the same only where the deployment enables follow-ups, and is ignored otherwise. It is always ignored on a turn with attachments, and while the deployment has forwarding switched off. */
23003
+ surface?: InputMaybe<ExploreSurface>;
21679
23004
  };
21680
23005
  export type SendExploreMessageResult = {
21681
23006
  __typename?: 'SendExploreMessageResult';
@@ -21711,6 +23036,11 @@ export type SendRoundMessageToCandidateInput = {
21711
23036
  message: Scalars['String']['input'];
21712
23037
  roundId: Scalars['ID']['input'];
21713
23038
  };
23039
+ export type ServiceEarningReversal = {
23040
+ __typename?: 'ServiceEarningReversal';
23041
+ entry: EarningsEntry;
23042
+ outcome: EarningReversalOutcome;
23043
+ };
21714
23044
  /** Consolidated earnings + payout-request status for a billing account, optionally scoped to a single earnings owner. Lets a delegating service poll the outcome of money-movement it handed to billing. */
21715
23045
  export type ServicePayoutStatus = {
21716
23046
  __typename?: 'ServicePayoutStatus';
@@ -21744,6 +23074,37 @@ export type ServiceRecordEarningInput = {
21744
23074
  sourceSubcategory?: InputMaybe<Scalars['String']['input']>;
21745
23075
  unitType?: InputMaybe<EarningUnitType>;
21746
23076
  };
23077
+ export type ServiceRefundPaymentInput = {
23078
+ /** Amount to refund in whole currency units. Partial refunds are allowed; the sum of a payment's refunds can never exceed the captured amount. */
23079
+ amount: Scalars['Float']['input'];
23080
+ /** Billing account the payment was charged on (through its BillingOrder or subscription). */
23081
+ billingAccountId: Scalars['ID']['input'];
23082
+ /** Optional; must match the payment currency when given. */
23083
+ currency?: InputMaybe<Scalars['String']['input']>;
23084
+ metadata?: InputMaybe<Scalars['JSON']['input']>;
23085
+ /** Billing Payment id (not the provider's payment id). */
23086
+ paymentId: Scalars['ID']['input'];
23087
+ reason: Scalars['String']['input'];
23088
+ /** Caller-owned idempotency key (e.g. "coolandlovely:refund:<orderId>:<brandId>"), unique per billing account. A replay returns the existing refund; a failed one is retried. */
23089
+ sourceIdempotencyKey: Scalars['String']['input'];
23090
+ };
23091
+ export type ServiceRefundPaymentResult = {
23092
+ __typename?: 'ServiceRefundPaymentResult';
23093
+ /** True when the key already had a refund and this call did not process it again. */
23094
+ alreadyProcessed: Scalars['Boolean']['output'];
23095
+ amount: Scalars['Float']['output'];
23096
+ currency: Scalars['String']['output'];
23097
+ error?: Maybe<Scalars['String']['output']>;
23098
+ gatewayRefundId?: Maybe<Scalars['String']['output']>;
23099
+ refundId: Scalars['ID']['output'];
23100
+ /** What is still refundable on the payment after this call. */
23101
+ refundableRemaining: Scalars['Float']['output'];
23102
+ /** Sum of the payment's pending, processing and completed refunds after this call. */
23103
+ refundedTotal: Scalars['Float']['output'];
23104
+ status: RefundRecordStatus;
23105
+ /** True when the provider accepted the refund (now or on an earlier call with the same key). */
23106
+ success: Scalars['Boolean']['output'];
23107
+ };
21747
23108
  export type ServiceRequestPayoutInput = {
21748
23109
  amount: Scalars['Float']['input'];
21749
23110
  /** Explicit billing account the payout is drawn from. */
@@ -21772,6 +23133,14 @@ export type ServiceResolvePayoutAccountInput = {
21772
23133
  /** Destination type for a newly-created placeholder account (defaults to BANK_ACCOUNT). */
21773
23134
  type?: InputMaybe<PayoutAccountType>;
21774
23135
  };
23136
+ export type ServiceReverseEarningInput = {
23137
+ /** Billing account the earning was recorded on. */
23138
+ billingAccountId: Scalars['ID']['input'];
23139
+ /** Why the earning is reversed (e.g. "Order COO-20261024-7F3A9C refunded"). */
23140
+ reason: Scalars['String']['input'];
23141
+ /** The sourceIdempotencyKey the earning was recorded with (serviceRecordEarning). */
23142
+ sourceIdempotencyKey: Scalars['String']['input'];
23143
+ };
21775
23144
  export type ServiceSyncPayoutStatusInput = {
21776
23145
  externalReference?: InputMaybe<Scalars['String']['input']>;
21777
23146
  failureReason?: InputMaybe<Scalars['String']['input']>;
@@ -21788,21 +23157,30 @@ export type ServiceUpsertExternalListingInput = {
21788
23157
  /** ISO 4217 currency code, upper case. */
21789
23158
  currency: Scalars['String']['input'];
21790
23159
  description?: InputMaybe<Scalars['String']['input']>;
21791
- /** The item's id in the calling service. Together with the caller's service identity it identifies the listing. */
23160
+ /**
23161
+ * The item's id in the calling service. Together with the caller's service
23162
+ * identity it identifies the listing.
23163
+ */
21792
23164
  externalId: Scalars['String']['input'];
21793
23165
  /** Absolute https URL of the item's page in the owning product. */
21794
23166
  externalUrl: Scalars['String']['input'];
21795
23167
  metadata?: InputMaybe<Scalars['JSON']['input']>;
21796
23168
  name: Scalars['String']['input'];
21797
23169
  price: Scalars['Float']['input'];
21798
- /** Platform product key of the caller (for example "coolandlovely"). Used as the listing's compatible product and as its slug prefix. */
23170
+ /**
23171
+ * Platform product key of the caller (for example "coolandlovely"). Used as the
23172
+ * listing's compatible product and as its slug prefix.
23173
+ */
21799
23174
  productKey: Scalars['String']['input'];
21800
23175
  /** Display name for the caller's publisher profile, created on its first listing. */
21801
23176
  publisherName: Scalars['String']['input'];
21802
23177
  /** PUBLISHED (shown in discovery), UNLISTED (kept but hidden) or ARCHIVED (taken down). */
21803
23178
  status: ProductStatus;
21804
23179
  tags?: InputMaybe<Array<Scalars['String']['input']>>;
21805
- /** A physical product type (MERCHANDISE, HARDWARE, ACCESSORY, BOOK, EQUIPMENT, APPAREL, COLLECTIBLE or CONSUMABLE). */
23180
+ /**
23181
+ * A physical product type (MERCHANDISE, HARDWARE, ACCESSORY, BOOK, EQUIPMENT,
23182
+ * APPAREL, COLLECTIBLE or CONSUMABLE).
23183
+ */
21806
23184
  type: ProductType;
21807
23185
  };
21808
23186
  /** An active user session (login instance) */
@@ -21860,13 +23238,26 @@ export type SetRoleDefaultPermissionInput = {
21860
23238
  resourceType: Scalars['String']['input'];
21861
23239
  roleId: Scalars['ID']['input'];
21862
23240
  };
21863
- /** Input for setting the shipping address + method on a store order (physical orders). The client sends IDs ONLY. The backend recomputes the authoritative shipping cost server-side from the order's own line-item weights (same quote engine as estimateOrderShipping) — a client-supplied cost is never trusted. */
23241
+ /**
23242
+ * Input for setting the shipping address + method on a store order (physical orders).
23243
+ *
23244
+ * The client sends IDs ONLY. The backend recomputes the authoritative shipping cost
23245
+ * server-side from the order's own line-item weights (same quote engine as
23246
+ * estimateOrderShipping) — a client-supplied cost is never trusted.
23247
+ */
21864
23248
  export type SetStoreOrderShippingInput = {
21865
23249
  /** Store order to attach shipping to */
21866
23250
  orderId: Scalars['ID']['input'];
21867
- /** Selected ShippingAddress ID (from myShippingAddresses or a freshly createdShippingAddress). Must belong to the order's buyer. */
23251
+ /**
23252
+ * Selected ShippingAddress ID (from myShippingAddresses or a freshly
23253
+ * createdShippingAddress). Must belong to the order's buyer.
23254
+ */
21868
23255
  shippingAddressId: Scalars['ID']['input'];
21869
- /** Selected ShippingMethod ID (from the shippingMethods query). NOTE: a ShippingMethod, NOT a ShippingRate — only ShippingMethod is wired to the quote engine. */
23256
+ /**
23257
+ * Selected ShippingMethod ID (from the shippingMethods query).
23258
+ * NOTE: a ShippingMethod, NOT a ShippingRate — only ShippingMethod is wired to
23259
+ * the quote engine.
23260
+ */
21870
23261
  shippingMethodId: Scalars['ID']['input'];
21871
23262
  };
21872
23263
  export type SetUserFeatureFlagPreferenceInput = {
@@ -22046,6 +23437,8 @@ export type SideloadAppInput = {
22046
23437
  workspaceType?: InputMaybe<Scalars['String']['input']>;
22047
23438
  };
22048
23439
  export type SignInInput = {
23440
+ /** Optional per-login UUIDv4 correlation nonce. This is not a credential or authorization grant. */
23441
+ clientSessionNonce?: InputMaybe<Scalars['ID']['input']>;
22049
23442
  email?: InputMaybe<Scalars['String']['input']>;
22050
23443
  password: Scalars['String']['input'];
22051
23444
  recaptchaToken?: InputMaybe<Scalars['String']['input']>;
@@ -22225,6 +23618,18 @@ export type SpendCreditsInput = {
22225
23618
  /** For plan upgrades - the subscription ID to upgrade from. Old quotas will be moved to the new subscription. */
22226
23619
  upgradeFromSubscriptionId?: InputMaybe<Scalars['String']['input']>;
22227
23620
  };
23621
+ /**
23622
+ * Details for starting automatic payout onboarding of a RAZORPAY_X or
23623
+ * STRIPE_CONNECT payout method.
23624
+ */
23625
+ export type StartMyPublisherPayoutOnboardingInput = {
23626
+ /** RAZORPAY_X only: the full bank account number, ending in the four digits given when the method was added. It is sent to RazorpayX for fund-account validation and is never stored. */
23627
+ accountNumber?: InputMaybe<Scalars['String']['input']>;
23628
+ /** Contact email the payout processor uses for the account. */
23629
+ contactEmail: Scalars['String']['input'];
23630
+ /** Contact phone number (RazorpayX), 8 to 15 digits with an optional leading +. */
23631
+ contactPhone?: InputMaybe<Scalars['String']['input']>;
23632
+ };
22228
23633
  /** Resolved storage cap (in bytes) for a billing account. Returned by `getStorageLimitForOrg`. Source order, first-hit wins: 1) plan.storageBytesLimit when set 2) plan-attached quota named "storage_bytes" (limits.value) 3) platform default: 50MB (free / no active sub) or 5GB (paid plan) */
22229
23634
  export type StorageLimit = {
22230
23635
  __typename?: 'StorageLimit';
@@ -22303,7 +23708,10 @@ export type StoreFacets = {
22303
23708
  /** Available types with counts */
22304
23709
  types: Array<FacetCount>;
22305
23710
  };
22306
- /** Unified filter input for browsing/searching store products. All filters combine with AND logic - search is treated as a filter. */
23711
+ /**
23712
+ * Unified filter input for browsing/searching store products.
23713
+ * All filters combine with AND logic - search is treated as a filter.
23714
+ */
22307
23715
  export type StoreFilterInput = {
22308
23716
  /** Filter by author name (partial match) */
22309
23717
  authorName?: InputMaybe<Scalars['String']['input']>;
@@ -22313,7 +23721,10 @@ export type StoreFilterInput = {
22313
23721
  categories?: InputMaybe<Array<Scalars['String']['input']>>;
22314
23722
  /** Filter by exact category match (e.g., "Customer Support", "Notification") */
22315
23723
  category?: InputMaybe<Scalars['String']['input']>;
22316
- /** Filter by compatible product (e.g., "workspaces", "fluidgrids", "bigconsole") Products must be compatible with this product. */
23724
+ /**
23725
+ * Filter by compatible product (e.g., "workspaces", "fluidgrids", "bigconsole")
23726
+ * Products must be compatible with this product.
23727
+ */
22317
23728
  compatibleWith?: InputMaybe<Scalars['String']['input']>;
22318
23729
  /** Filter only featured products */
22319
23730
  featured?: InputMaybe<Scalars['Boolean']['input']>;
@@ -22343,11 +23754,24 @@ export type StoreFilterInput = {
22343
23754
  publisherId?: InputMaybe<Scalars['String']['input']>;
22344
23755
  /** Filter products that require shipping */
22345
23756
  requiresShipping?: InputMaybe<Scalars['Boolean']['input']>;
22346
- /** Full-text search query. Searches across: - name (highest priority) - description - tags - authorName, category (lowest priority) Uses PostgreSQL tsvector with weighted ranking. */
23757
+ /**
23758
+ * Full-text search query. Searches across:
23759
+ * - name (highest priority)
23760
+ * - description
23761
+ * - tags
23762
+ * - authorName, category (lowest priority)
23763
+ * Uses PostgreSQL tsvector with weighted ranking.
23764
+ */
22347
23765
  search?: InputMaybe<Scalars['String']['input']>;
22348
23766
  /** Filter by product status (defaults to PUBLISHED for consumer queries) */
22349
23767
  status?: InputMaybe<ProductStatus>;
22350
- /** Filter by type-specific subtype. Examples: - For AGENT: "task_automation", "conversational", "research" - For NODE: "action", "trigger", "integration", "ai" - For WIDGET: "chart", "metric", "table", "map" */
23768
+ /**
23769
+ * Filter by type-specific subtype.
23770
+ * Examples:
23771
+ * - For AGENT: "task_automation", "conversational", "research"
23772
+ * - For NODE: "action", "trigger", "integration", "ai"
23773
+ * - For WIDGET: "chart", "metric", "table", "map"
23774
+ */
22351
23775
  subType?: InputMaybe<Scalars['String']['input']>;
22352
23776
  /** Filter by multiple subtypes (OR within this filter) */
22353
23777
  subTypes?: InputMaybe<Array<Scalars['String']['input']>>;
@@ -22364,6 +23788,23 @@ export type StoreFilterInput = {
22364
23788
  /** Filter by multiple integrations - must use ALL (AND logic) */
22365
23789
  usesIntegrations?: InputMaybe<Array<Scalars['String']['input']>>;
22366
23790
  };
23791
+ /** Counters for the store reviewer console. */
23792
+ export type StoreGovernanceStats = {
23793
+ __typename?: 'StoreGovernanceStats';
23794
+ oldestPendingSubmittedAt?: Maybe<Scalars['DateTime']['output']>;
23795
+ openListingReports: Scalars['Int']['output'];
23796
+ /** Pending review reports filed as rating disputes. */
23797
+ openRatingDisputes: Scalars['Int']['output'];
23798
+ openReviewReports: Scalars['Int']['output'];
23799
+ overdueAppeals: Scalars['Int']['output'];
23800
+ /** Listings waiting for review past their due date. */
23801
+ overdueSubmissions: Scalars['Int']['output'];
23802
+ pendingAppeals: Scalars['Int']['output'];
23803
+ /** Listings waiting for review. */
23804
+ pendingSubmissions: Scalars['Int']['output'];
23805
+ /** Listings currently taken down. */
23806
+ takenDownListings: Scalars['Int']['output'];
23807
+ };
22367
23808
  export declare enum StoreInstallationStatus {
22368
23809
  Active = "ACTIVE",
22369
23810
  Failed = "FAILED",
@@ -22372,6 +23813,12 @@ export declare enum StoreInstallationStatus {
22372
23813
  Pending = "PENDING",
22373
23814
  Uninstalled = "UNINSTALLED"
22374
23815
  }
23816
+ export type StoreInstalledNodeRuntime = {
23817
+ __typename?: 'StoreInstalledNodeRuntime';
23818
+ endpointUrl: Scalars['String']['output'];
23819
+ nodeType: Scalars['String']['output'];
23820
+ nodeVersion?: Maybe<Scalars['String']['output']>;
23821
+ };
22375
23822
  /** StoreItem entity reference. The actual StoreItem is defined in the Store service. In Federation 2 setup, this will be marked with @key directive. For now, this is a reference type that returns the itemId for the Gateway to resolve. */
22376
23823
  export type StoreItem = {
22377
23824
  __typename?: 'StoreItem';
@@ -22386,7 +23833,8 @@ export type StoreLineItemInput = {
22386
23833
  */
22387
23834
  itemType?: InputMaybe<Scalars['String']['input']>;
22388
23835
  /**
22389
- * Product name is retained only for backwards-compatible clients. The store resolves the authoritative name from productId and variantId.
23836
+ * Product name is retained only for backwards-compatible clients. The store
23837
+ * resolves the authoritative name from productId and variantId.
22390
23838
  * @deprecated The server resolves product and variant names
22391
23839
  */
22392
23840
  name?: InputMaybe<Scalars['String']['input']>;
@@ -22425,7 +23873,11 @@ export type StoreOrder = {
22425
23873
  /** Context JSON (must include workspace_id) */
22426
23874
  context: Scalars['JSON']['output'];
22427
23875
  createdAt: Scalars['DateTime']['output'];
22428
- /** Currency captured when the store order was created. Billing may still convert at payment time, but this is the canonical order currency for checkout display and reconciliation. */
23876
+ /**
23877
+ * Currency captured when the store order was created.
23878
+ * Billing may still convert at payment time, but this is the canonical
23879
+ * order currency for checkout display and reconciliation.
23880
+ */
22429
23881
  currency: Scalars['String']['output'];
22430
23882
  /** Fulfillment tracking for physical orders */
22431
23883
  fulfillment?: Maybe<OrderFulfillment>;
@@ -22443,7 +23895,11 @@ export type StoreOrder = {
22443
23895
  shippingAddress?: Maybe<ShippingAddress>;
22444
23896
  /** Selected shipping address ID (physical orders) */
22445
23897
  shippingAddressId?: Maybe<Scalars['ID']['output']>;
22446
- /** Server-computed shipping cost, in the order currency. SEPARATE from `total` (which is product-cost-only); billing must add this to the payable amount. */
23898
+ /**
23899
+ * Server-computed shipping cost, in the order currency.
23900
+ * SEPARATE from `total` (which is product-cost-only); billing must add this to
23901
+ * the payable amount.
23902
+ */
22447
23903
  shippingCost?: Maybe<Scalars['Float']['output']>;
22448
23904
  /** Currency of the shipping cost quote */
22449
23905
  shippingCurrency?: Maybe<Scalars['String']['output']>;
@@ -22451,10 +23907,17 @@ export type StoreOrder = {
22451
23907
  shippingMethod?: Maybe<ShippingMethod>;
22452
23908
  /** Selected shipping method ID (physical orders) */
22453
23909
  shippingMethodId?: Maybe<Scalars['ID']['output']>;
22454
- /** Immutable snapshot frozen at shipping-selection time: { address, method, cost, currency, quotedAt }. Used by order/confirmation pages so a later edit/delete of the ShippingAddress cannot alter the ship-to. */
23910
+ /**
23911
+ * Immutable snapshot frozen at shipping-selection time:
23912
+ * { address, method, cost, currency, quotedAt }. Used by order/confirmation
23913
+ * pages so a later edit/delete of the ShippingAddress cannot alter the ship-to.
23914
+ */
22455
23915
  shippingSnapshot?: Maybe<Scalars['JSON']['output']>;
22456
23916
  status: OrderStatus;
22457
- /** Total product cost (sum of line items) Note: Currency, tax, and final billing amount handled by billing service */
23917
+ /**
23918
+ * Total product cost (sum of line items)
23919
+ * Note: Currency, tax, and final billing amount handled by billing service
23920
+ */
22458
23921
  total: Scalars['Float']['output'];
22459
23922
  transaction?: Maybe<Transaction>;
22460
23923
  /** Transaction ID from billing service (set after payment) */
@@ -22489,7 +23952,10 @@ export type StoreProduct = {
22489
23952
  /** Brand name (physical products) */
22490
23953
  brand?: Maybe<Scalars['String']['output']>;
22491
23954
  category?: Maybe<Scalars['String']['output']>;
22492
- /** Compatible products (from manifest.compatibility.products) Examples: ["fluidgrids", "workspaces", "bigconsole", "botlit"] */
23955
+ /**
23956
+ * Compatible products (from manifest.compatibility.products)
23957
+ * Examples: ["fluidgrids", "workspaces", "bigconsole", "botlit"]
23958
+ */
22493
23959
  compatibleProducts: Array<Scalars['String']['output']>;
22494
23960
  content?: Maybe<Scalars['JSON']['output']>;
22495
23961
  context?: Maybe<Scalars['JSON']['output']>;
@@ -22505,19 +23971,37 @@ export type StoreProduct = {
22505
23971
  entitlements: Array<ProductEntitlement>;
22506
23972
  /** The item's id in the owning product backend (only set with externalService). */
22507
23973
  externalId?: Maybe<Scalars['String']['output']>;
22508
- /** Service identity of the product backend that owns this listing when the item is sold by that product's own checkout (for example wspace-coolandlovely-svc). Null for products the store sells itself. Such a listing cannot be added to a store cart or ordered here; send buyers to externalUrl instead. */
23974
+ /**
23975
+ * Service identity of the product backend that owns this listing when the item
23976
+ * is sold by that product's own checkout (for example wspace-coolandlovely-svc).
23977
+ * Null for products the store sells itself. Such a listing cannot be added to a
23978
+ * store cart or ordered here; send buyers to externalUrl instead.
23979
+ */
22509
23980
  externalService?: Maybe<Scalars['String']['output']>;
22510
- /** Page in the owning product where the item can be viewed and bought (only set with externalService). */
23981
+ /**
23982
+ * Page in the owning product where the item can be viewed and bought (only set
23983
+ * with externalService).
23984
+ */
22511
23985
  externalUrl?: Maybe<Scalars['String']['output']>;
22512
23986
  featured: Scalars['Boolean']['output'];
22513
23987
  /** Product height (physical products) */
22514
23988
  height?: Maybe<Scalars['Float']['output']>;
22515
23989
  icon?: Maybe<Scalars['String']['output']>;
22516
23990
  id: Scalars['ID']['output'];
22517
- /** Integration dependencies (from manifest.dependencies.integrations) Examples: ["slack", "sendgrid", "zendesk", "salesforce"] */
23991
+ /**
23992
+ * Integration dependencies (from manifest.dependencies.integrations)
23993
+ * Examples: ["slack", "sendgrid", "zendesk", "salesforce"]
23994
+ */
22518
23995
  integrationDeps: Array<Scalars['String']['output']>;
22519
- /** Whether this product is already purchased by the current billing account. Computed field based on billingAccountId context. */
23996
+ /**
23997
+ * Whether this product is already purchased by the current billing account.
23998
+ * Computed field based on billingAccountId context.
23999
+ */
22520
24000
  isPurchased?: Maybe<Scalars['Boolean']['output']>;
24001
+ /** True while the submission waits for review past reviewDueAt. */
24002
+ isReviewOverdue: Scalars['Boolean']['output'];
24003
+ /** True while the store team has this listing taken down. */
24004
+ isTakenDown: Scalars['Boolean']['output'];
22521
24005
  /** Product length (physical products) */
22522
24006
  length?: Maybe<Scalars['Float']['output']>;
22523
24007
  /** License type (from manifest.license, e.g., "MIT", "Apache-2.0") */
@@ -22544,18 +24028,32 @@ export type StoreProduct = {
22544
24028
  publishedAt?: Maybe<Scalars['DateTime']['output']>;
22545
24029
  publisher?: Maybe<Publisher>;
22546
24030
  publisherId: Scalars['String']['output'];
22547
- /** 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. */
24031
+ /**
24032
+ * Number of PHYSICAL orders this product has been fulfilled in at least
24033
+ * once — incremented alongside OrderFulfillment's first creation for the
24034
+ * order (see OrderService.ensurePhysicalFulfillmentRecord), the physical
24035
+ * counterpart to how `downloads` counts first-install events for digital
24036
+ * products. Always 0 for DIGITAL nature.
24037
+ */
22548
24038
  purchaseCount: Scalars['Int']['output'];
22549
24039
  rating?: Maybe<Scalars['Float']['output']>;
22550
24040
  rejectedReason?: Maybe<Scalars['String']['output']>;
22551
24041
  repositoryUrl?: Maybe<Scalars['String']['output']>;
22552
- /** Required permissions (from manifest.permissions) Examples: ["network.outbound", "database.write", "notification.email"] */
24042
+ /**
24043
+ * Required permissions (from manifest.permissions)
24044
+ * Examples: ["network.outbound", "database.write", "notification.email"]
24045
+ */
22553
24046
  requiredPermissions: Array<Scalars['String']['output']>;
22554
24047
  /** Whether this product requires shipping (physical products) */
22555
24048
  requiresShipping?: Maybe<Scalars['Boolean']['output']>;
22556
24049
  /** Return policy details (physical products) */
22557
24050
  returnPolicy?: Maybe<Scalars['String']['output']>;
22558
24051
  reviewCount: Scalars['Int']['output'];
24052
+ /**
24053
+ * When a reviewer is due to have decided this submission: five business days
24054
+ * (Monday to Friday, UTC) after it was submitted. Null if never submitted.
24055
+ */
24056
+ reviewDueAt?: Maybe<Scalars['DateTime']['output']>;
22559
24057
  reviewNotes?: Maybe<Scalars['String']['output']>;
22560
24058
  reviewedAt?: Maybe<Scalars['DateTime']['output']>;
22561
24059
  reviewedBy?: Maybe<Scalars['String']['output']>;
@@ -22568,7 +24066,13 @@ export type StoreProduct = {
22568
24066
  /** Current stock quantity (physical products) */
22569
24067
  stockQuantity?: Maybe<Scalars['Int']['output']>;
22570
24068
  storeId?: Maybe<Scalars['ID']['output']>;
22571
- /** Type-specific subtype from manifest.json. Examples: - Agent: task_automation, conversational, research, code_assistant - Node: action, transform, trigger, logic, integration, data, notification, ai - Widget: chart, metric, table, map, form, text, custom */
24069
+ /**
24070
+ * Type-specific subtype from manifest.json.
24071
+ * Examples:
24072
+ * - Agent: task_automation, conversational, research, code_assistant
24073
+ * - Node: action, transform, trigger, logic, integration, data, notification, ai
24074
+ * - Widget: chart, metric, table, map, form, text, custom
24075
+ */
22572
24076
  subType?: Maybe<Scalars['String']['output']>;
22573
24077
  submittedAt?: Maybe<Scalars['DateTime']['output']>;
22574
24078
  submittedBy?: Maybe<Scalars['String']['output']>;
@@ -22576,6 +24080,11 @@ export type StoreProduct = {
22576
24080
  /** Structured tag assignments via wspace-tags-svc */
22577
24081
  tagAssignments: Array<StoreProductTagAssignment>;
22578
24082
  tags: Array<Scalars['String']['output']>;
24083
+ /**
24084
+ * Takedown details for store admins and the listing's publisher; null for
24085
+ * everyone else and when the listing is not taken down.
24086
+ */
24087
+ takedown?: Maybe<ListingTakedown>;
22579
24088
  /** Whether to track inventory levels (physical products) */
22580
24089
  trackInventory?: Maybe<Scalars['Boolean']['output']>;
22581
24090
  type: ProductType;
@@ -22592,6 +24101,11 @@ export type StoreProduct = {
22592
24101
  weightUnit?: Maybe<WeightUnit>;
22593
24102
  /** Product width (physical products) */
22594
24103
  width?: Maybe<Scalars['Float']['output']>;
24104
+ /**
24105
+ * For a WORKFLOW template: its nodes, required inputs and credentials and the
24106
+ * cleaning report recorded at submission. Null for other products.
24107
+ */
24108
+ workflowTemplatePreview?: Maybe<WorkflowTemplatePreview>;
22595
24109
  zipFileUrl?: Maybe<Scalars['String']['output']>;
22596
24110
  };
22597
24111
  /** Input for fetching store product details */
@@ -22814,6 +24328,8 @@ export type SubmitPublisherVerificationInput = {
22814
24328
  documents: Array<PublisherVerificationDocumentInput>;
22815
24329
  legalName: Scalars['String']['input'];
22816
24330
  supportUrl?: InputMaybe<Scalars['String']['input']>;
24331
+ /** Tax form type that goes with taxId (for example PAN, GSTIN, W-9, W-8BEN). */
24332
+ taxFormType?: InputMaybe<Scalars['String']['input']>;
22817
24333
  taxId: Scalars['String']['input'];
22818
24334
  websiteUrl?: InputMaybe<Scalars['String']['input']>;
22819
24335
  };
@@ -22823,6 +24339,52 @@ export type SubmitSatisfactionSurveyInput = {
22823
24339
  rating: Scalars['Int']['input'];
22824
24340
  surveyId: Scalars['ID']['input'];
22825
24341
  };
24342
+ /** Publish a workspace workflow to the public store as a community template. */
24343
+ export type SubmitWorkflowTemplateInput = {
24344
+ /**
24345
+ * Author name shown on the template. Required for your first template, when it
24346
+ * also names your publisher profile; defaults to your publisher name afterwards.
24347
+ */
24348
+ authorName?: InputMaybe<Scalars['String']['input']>;
24349
+ /**
24350
+ * Store category: automation, integration, data-processing, ai-ml,
24351
+ * communication, devops, marketing, sales, support, productivity or finance.
24352
+ */
24353
+ category: Scalars['String']['input'];
24354
+ /**
24355
+ * The workflow definition (definitionJson) to publish. Connection bindings,
24356
+ * pinned run data and literal secrets are removed before it is stored.
24357
+ */
24358
+ definitionJson: Scalars['JSON']['input'];
24359
+ /** One-line summary shown on the template card (at most 500 characters). */
24360
+ description: Scalars['String']['input'];
24361
+ /** easy, medium or hard. */
24362
+ difficultyLevel?: InputMaybe<Scalars['String']['input']>;
24363
+ /** Estimated minutes to set the template up (1 to 1440). */
24364
+ estimatedTimeMinutes?: InputMaybe<Scalars['Int']['input']>;
24365
+ /** Iconify icon name, for example mdi:robot. */
24366
+ icon?: InputMaybe<Scalars['String']['input']>;
24367
+ /** Longer description (markdown) shown on the template page. */
24368
+ longDescription?: InputMaybe<Scalars['String']['input']>;
24369
+ /** Template name shown in the store (at most 120 characters). */
24370
+ name: Scalars['String']['input'];
24371
+ /** A note for the store reviewer. */
24372
+ notes?: InputMaybe<Scalars['String']['input']>;
24373
+ /**
24374
+ * Resubmit one of your own templates instead of creating a new one. A DRAFT,
24375
+ * REJECTED or UNLISTED template is replaced and goes back into review. A
24376
+ * PUBLISHED template stays listed unchanged: the submission is kept as its
24377
+ * pending revision and replaces the live version only when a reviewer approves
24378
+ * it. Either way the template keeps its id and slug and its version goes up by one.
24379
+ */
24380
+ productId?: InputMaybe<Scalars['ID']['input']>;
24381
+ /** Workflow key the template was published from (lineage). */
24382
+ sourceWorkflowKey?: InputMaybe<Scalars['String']['input']>;
24383
+ /** Workflow version the template was published from (lineage). */
24384
+ sourceWorkflowVersion?: InputMaybe<Scalars['String']['input']>;
24385
+ /** Up to 10 search tags. */
24386
+ tags?: InputMaybe<Array<Scalars['String']['input']>>;
24387
+ };
22826
24388
  export type Subprocessor = {
22827
24389
  __typename?: 'Subprocessor';
22828
24390
  activatedAt?: Maybe<Scalars['DateTime']['output']>;
@@ -22955,7 +24517,11 @@ export type Subscription = {
22955
24517
  /** Emits the deleted feature-flag id so clients can drop it from their cache. */
22956
24518
  featureFlagDeleted: Scalars['ID']['output'];
22957
24519
  importJobProgress: ImportJobProgressEvent;
22958
- /** Subscribe to app installation status changes for a workspace. TODO(BOFF-2658): wspace scope on a global svc subgraph — this subscription conceptually belongs on the workspace gateway; flagged for follow-up. */
24520
+ /**
24521
+ * Subscribe to app installation status changes for a workspace.
24522
+ * TODO(BOFF-2658): wspace scope on a global svc subgraph — this subscription
24523
+ * conceptually belongs on the workspace gateway; flagged for follow-up.
24524
+ */
22959
24525
  installationStatusUpdated?: Maybe<InstallationStatusUpdatedEvent>;
22960
24526
  jobStatusUpdated: JobStatusUpdate;
22961
24527
  /** Notifies clients when a keyboard shortcut is created, updated, or toggled. Subscribers can pass `productId` to scope the stream to a single product. */
@@ -23291,6 +24857,19 @@ export type SupportContextInput = {
23291
24857
  userId?: InputMaybe<Scalars['ID']['input']>;
23292
24858
  workspaceId?: InputMaybe<Scalars['ID']['input']>;
23293
24859
  };
24860
+ /** A knowledge row a reply draft was built from. */
24861
+ export type SupportDraftCitation = {
24862
+ __typename?: 'SupportDraftCitation';
24863
+ id: Scalars['ID']['output'];
24864
+ kind: SupportDraftCitationKind;
24865
+ score: Scalars['Float']['output'];
24866
+ title: Scalars['String']['output'];
24867
+ };
24868
+ export declare enum SupportDraftCitationKind {
24869
+ CannedResponse = "CANNED_RESPONSE",
24870
+ Faq = "FAQ",
24871
+ KnowledgeBaseArticle = "KNOWLEDGE_BASE_ARTICLE"
24872
+ }
23294
24873
  export type SupportEraseResult = {
23295
24874
  __typename?: 'SupportEraseResult';
23296
24875
  anonymised: Scalars['Int']['output'];
@@ -23300,13 +24879,6 @@ export type SupportEraseResult = {
23300
24879
  retainedForLegalReason?: Maybe<Scalars['String']['output']>;
23301
24880
  service: Scalars['String']['output'];
23302
24881
  };
23303
- export declare enum SupportExportFormat {
23304
- Csv = "CSV",
23305
- Json = "JSON",
23306
- Po = "PO",
23307
- Xliff = "XLIFF",
23308
- Xlsx = "XLSX"
23309
- }
23310
24882
  export type SupportMessage = {
23311
24883
  __typename?: 'SupportMessage';
23312
24884
  attachmentCount: Scalars['Int']['output'];
@@ -23317,7 +24889,15 @@ export type SupportMessage = {
23317
24889
  /** Contextual IDs for filtering and scoping (workspaceId, userId, projectId, etc.) */
23318
24890
  context?: Maybe<SupportContext>;
23319
24891
  createdAt: Scalars['DateTime']['output'];
23320
- id: Scalars['ID']['output'];
24892
+ /** The knowledge-base articles, FAQs and canned responses a draft was built from. Empty for every message that is not a draft. */
24893
+ draftCitations: Array<SupportDraftCitation>;
24894
+ /** When the draft was sent or discarded. */
24895
+ draftResolvedAt?: Maybe<Scalars['DateTime']['output']>;
24896
+ /** The agent reply that was sent from this draft, once sent. */
24897
+ draftSentMessageId?: Maybe<Scalars['String']['output']>;
24898
+ id: Scalars['ID']['output'];
24899
+ /** True for a reply drafted from the knowledge base that waits for an agent (BOFF-3646). Drafts are always internal and are never sent on their own. */
24900
+ isDraft: Scalars['Boolean']['output'];
23321
24901
  isInternal: Scalars['Boolean']['output'];
23322
24902
  message: Scalars['String']['output'];
23323
24903
  ticket: SupportTicket;
@@ -23366,6 +24946,8 @@ export type SupportTicket = {
23366
24946
  metadata?: Maybe<Scalars['JSON']['output']>;
23367
24947
  priority: SupportTicketPriority;
23368
24948
  reopenedAt?: Maybe<Scalars['DateTime']['output']>;
24949
+ /** The open reply draft for this ticket, if any. Support staff only. */
24950
+ replyDraft?: Maybe<SupportMessage>;
23369
24951
  resolutionDue?: Maybe<Scalars['DateTime']['output']>;
23370
24952
  resolvedAt?: Maybe<Scalars['DateTime']['output']>;
23371
24953
  slaBreachStatus: SlaBreachStatus;
@@ -23381,6 +24963,8 @@ export type SupportTicket = {
23381
24963
  tenantId?: Maybe<Scalars['String']['output']>;
23382
24964
  ticketCategory?: Maybe<TicketCategory>;
23383
24965
  ticketNumber: Scalars['String']['output'];
24966
+ /** The triage engine's latest decision for this ticket, with its evidence (BOFF-3646). Null when the ticket was never triaged, and always null for viewers who cannot read internal notes — the evidence names other tickets. */
24967
+ triageDecision?: Maybe<SupportTriageDecision>;
23384
24968
  updatedAt: Scalars['DateTime']['output'];
23385
24969
  user: User;
23386
24970
  userId: Scalars['String']['output'];
@@ -23431,6 +25015,99 @@ export declare enum SupportTicketStatus {
23431
25015
  Resolved = "RESOLVED",
23432
25016
  WaitingCustomer = "WAITING_CUSTOMER"
23433
25017
  }
25018
+ /** An agent the engine suggests for the ticket. A suggestion only: triage never assigns. */
25019
+ export type SupportTriageAssigneeSuggestion = {
25020
+ __typename?: 'SupportTriageAssigneeSuggestion';
25021
+ agentProfileId: Scalars['ID']['output'];
25022
+ /** Current tickets divided by the agent's ticket capacity. */
25023
+ load: Scalars['Float']['output'];
25024
+ /** Agent skills that matched the ticket's category and tags. */
25025
+ matchedSkills: Array<Scalars['String']['output']>;
25026
+ userId: Scalars['String']['output'];
25027
+ };
25028
+ /** One triage decision, with what it replaced so a person can see and undo it. The engine only fills an empty category and only raises a priority. */
25029
+ export type SupportTriageDecision = {
25030
+ __typename?: 'SupportTriageDecision';
25031
+ category: SupportTicketCategory;
25032
+ /** True when triage set the category. */
25033
+ categoryApplied: Scalars['Boolean']['output'];
25034
+ /** Share of the evidence weight behind the proposed category (0–1). */
25035
+ categoryConfidence: Scalars['Float']['output'];
25036
+ /** Category the ticket has after triage. */
25037
+ categoryId?: Maybe<Scalars['String']['output']>;
25038
+ decidedAt: Scalars['DateTime']['output'];
25039
+ /** Actor who ran it; system:support-triage for automatic runs. */
25040
+ decidedBy: Scalars['String']['output'];
25041
+ /** Engine name and version that made the decision. */
25042
+ engine: Scalars['String']['output'];
25043
+ evidence: Array<SupportTriageEvidence>;
25044
+ /** Plain-language reasons for anything the engine left alone. */
25045
+ notes: Array<Scalars['String']['output']>;
25046
+ previousCategory: SupportTicketCategory;
25047
+ previousCategoryId?: Maybe<Scalars['String']['output']>;
25048
+ previousPriority: SupportTicketPriority;
25049
+ previousSlaPolicyId?: Maybe<Scalars['String']['output']>;
25050
+ priority: SupportTicketPriority;
25051
+ /** Phrases and similar-ticket votes that set the priority. */
25052
+ prioritySignals: Array<Scalars['String']['output']>;
25053
+ /** Category the evidence pointed to, applied or not. */
25054
+ proposedCategoryId?: Maybe<Scalars['String']['output']>;
25055
+ /** True when triage changed the SLA policy. */
25056
+ slaApplied: Scalars['Boolean']['output'];
25057
+ slaPolicyId?: Maybe<Scalars['String']['output']>;
25058
+ suggestedAssignee?: Maybe<SupportTriageAssigneeSuggestion>;
25059
+ trigger: SupportTriageTrigger;
25060
+ };
25061
+ /** The engine replayed over recent tickets people categorised and resolved, using only older tickets as evidence for each. */
25062
+ export type SupportTriageEvaluation = {
25063
+ __typename?: 'SupportTriageEvaluation';
25064
+ cases: Array<SupportTriageEvaluationCase>;
25065
+ /** Share of cases where the engine would apply a category. */
25066
+ categoryCoverage: Scalars['Float']['output'];
25067
+ /** Share of applied categories that match the person's choice. */
25068
+ categoryPrecision: Scalars['Float']['output'];
25069
+ correctCount: Scalars['Int']['output'];
25070
+ decidedCount: Scalars['Int']['output'];
25071
+ engine: Scalars['String']['output'];
25072
+ /** Share of cases where the engine's priority matches the final priority. */
25073
+ priorityAgreement: Scalars['Float']['output'];
25074
+ sampleSize: Scalars['Int']['output'];
25075
+ };
25076
+ /** One replayed ticket in a triage evaluation. */
25077
+ export type SupportTriageEvaluationCase = {
25078
+ __typename?: 'SupportTriageEvaluationCase';
25079
+ confidence: Scalars['Float']['output'];
25080
+ correct: Scalars['Boolean']['output'];
25081
+ decided: Scalars['Boolean']['output'];
25082
+ /** The category a person gave the ticket. */
25083
+ expectedCategoryId: Scalars['String']['output'];
25084
+ expectedPriority: SupportTicketPriority;
25085
+ /** The category the engine would have applied, or null when it would abstain. */
25086
+ predictedCategoryId?: Maybe<Scalars['String']['output']>;
25087
+ predictedPriority: SupportTicketPriority;
25088
+ ticketId: Scalars['ID']['output'];
25089
+ ticketNumber: Scalars['String']['output'];
25090
+ };
25091
+ /** A row the triage engine weighed: a similar resolved ticket or a published knowledge-base article. */
25092
+ export type SupportTriageEvidence = {
25093
+ __typename?: 'SupportTriageEvidence';
25094
+ id: Scalars['ID']['output'];
25095
+ kind: SupportTriageEvidenceKind;
25096
+ /** Ticket number for tickets, title for articles. */
25097
+ label: Scalars['String']['output'];
25098
+ /** Full-text relevance score (Postgres ts_rank). */
25099
+ score: Scalars['Float']['output'];
25100
+ };
25101
+ export declare enum SupportTriageEvidenceKind {
25102
+ KnowledgeBaseArticle = "KNOWLEDGE_BASE_ARTICLE",
25103
+ Ticket = "TICKET"
25104
+ }
25105
+ export declare enum SupportTriageTrigger {
25106
+ /** Run on demand by a support agent. */
25107
+ Manual = "MANUAL",
25108
+ /** Run automatically when the ticket was created. */
25109
+ TicketCreated = "TICKET_CREATED"
25110
+ }
23434
25111
  export type SuppressIdentifierInput = {
23435
25112
  channel: SuppressionChannel;
23436
25113
  expiresAt?: InputMaybe<Scalars['DateTime']['input']>;
@@ -23496,6 +25173,21 @@ export declare enum SuppressionReason {
23496
25173
  UserRequest = "USER_REQUEST",
23497
25174
  UserUnsubscribe = "USER_UNSUBSCRIBE"
23498
25175
  }
25176
+ export type SyncCatalogNodeManifestInput = {
25177
+ /** The node's manifest.json from fluidgrids-nodes, unchanged. */
25178
+ manifest: Scalars['JSON']['input'];
25179
+ nodeType: Scalars['String']['input'];
25180
+ nodeVersion: Scalars['String']['input'];
25181
+ };
25182
+ export type SyncCatalogNodeManifestResult = {
25183
+ __typename?: 'SyncCatalogNodeManifestResult';
25184
+ /** sha256 of the canonical catalog manifest. */
25185
+ digest: Scalars['String']['output'];
25186
+ nodeType: Scalars['String']['output'];
25187
+ nodeVersion: Scalars['String']['output'];
25188
+ products: Array<CatalogProductSync>;
25189
+ registry: CatalogRegistrySync;
25190
+ };
23499
25191
  /** Input for syncing channel users */
23500
25192
  export type SyncChannelUsersInput = {
23501
25193
  /** Channel ID */
@@ -23596,18 +25288,6 @@ export type SyncWorkspaceFromWspaceResponse = {
23596
25288
  success: Scalars['Boolean']['output'];
23597
25289
  workspaceId?: Maybe<Scalars['String']['output']>;
23598
25290
  };
23599
- export type TagChannelConnectionInput = {
23600
- entityId: Scalars['ID']['input'];
23601
- metadata?: InputMaybe<Scalars['JSON']['input']>;
23602
- source?: InputMaybe<Scalars['String']['input']>;
23603
- tagId: Scalars['ID']['input'];
23604
- };
23605
- export type TagChannelInput = {
23606
- entityId: Scalars['ID']['input'];
23607
- metadata?: InputMaybe<Scalars['JSON']['input']>;
23608
- source?: InputMaybe<Scalars['String']['input']>;
23609
- tagId: Scalars['ID']['input'];
23610
- };
23611
25291
  export type TagStoreProductInput = {
23612
25292
  entityId: Scalars['ID']['input'];
23613
25293
  metadata?: InputMaybe<Scalars['JSON']['input']>;
@@ -23623,6 +25303,31 @@ export type TagsAndResourceTypes = {
23623
25303
  /** Available tags from usage records */
23624
25304
  tags: Array<Scalars['String']['output']>;
23625
25305
  };
25306
+ /** Policy ground for taking a listing down. */
25307
+ export declare enum TakedownCategory {
25308
+ Broken = "BROKEN",
25309
+ IpInfringement = "IP_INFRINGEMENT",
25310
+ Misleading = "MISLEADING",
25311
+ Other = "OTHER",
25312
+ PolicyViolation = "POLICY_VIOLATION",
25313
+ PublisherVerification = "PUBLISHER_VERIFICATION",
25314
+ SecurityRisk = "SECURITY_RISK"
25315
+ }
25316
+ export type TakedownListingInput = {
25317
+ category: TakedownCategory;
25318
+ productId: Scalars['ID']['input'];
25319
+ /** Reason the publisher sees, up to 2000 characters. */
25320
+ reason: Scalars['String']['input'];
25321
+ /** Open listing reports this takedown answers; they are marked ACTIONED. */
25322
+ reportIds?: InputMaybe<Array<Scalars['ID']['input']>>;
25323
+ };
25324
+ /** What took a listing down. */
25325
+ export declare enum TakedownSource {
25326
+ /** A store admin took this listing down. */
25327
+ Listing = "LISTING",
25328
+ /** The listing went down with its publisher's suspension. */
25329
+ PublisherSuspension = "PUBLISHER_SUSPENSION"
25330
+ }
23626
25331
  /** Result of tax calculation */
23627
25332
  export type TaxCalculationResult = {
23628
25333
  __typename?: 'TaxCalculationResult';
@@ -24468,6 +26173,8 @@ export type TriggerNotificationWithTemplateInput = {
24468
26173
  /** Specific channel instance ID from channel service (takes precedence) */
24469
26174
  channelId?: InputMaybe<Scalars['ID']['input']>;
24470
26175
  expiresAt?: InputMaybe<Scalars['DateTime']['input']>;
26176
+ /** At-most-once delivery key forwarded to channel-svc (same key + same input = one delivery) */
26177
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
24471
26178
  /** Also deliver as in-app notification alongside the primary platform */
24472
26179
  includeInApp?: InputMaybe<Scalars['Boolean']['input']>;
24473
26180
  media?: InputMaybe<Array<NotificationMediaInput>>;
@@ -24505,14 +26212,6 @@ export type UnreadCountResult = {
24505
26212
  count: Scalars['Int']['output'];
24506
26213
  userId: Scalars['ID']['output'];
24507
26214
  };
24508
- export type UntagChannelConnectionInput = {
24509
- entityId: Scalars['ID']['input'];
24510
- tagId: Scalars['ID']['input'];
24511
- };
24512
- export type UntagChannelInput = {
24513
- entityId: Scalars['ID']['input'];
24514
- tagId: Scalars['ID']['input'];
24515
- };
24516
26215
  export type UntagStoreProductInput = {
24517
26216
  entityId: Scalars['ID']['input'];
24518
26217
  tagId: Scalars['ID']['input'];
@@ -24727,6 +26426,8 @@ export type UpdateContentPageInput = {
24727
26426
  category?: InputMaybe<Scalars['String']['input']>;
24728
26427
  content?: InputMaybe<Scalars['String']['input']>;
24729
26428
  contentFormat?: InputMaybe<Scalars['String']['input']>;
26429
+ /** Set, replace or (with null) withdraw the customer approval. Withdrawing it removes a case study from the public queries. */
26430
+ customerSignOff?: InputMaybe<CustomerSignOffInput>;
24730
26431
  excerpt?: InputMaybe<Scalars['String']['input']>;
24731
26432
  featured?: InputMaybe<Scalars['Boolean']['input']>;
24732
26433
  isPublished?: InputMaybe<Scalars['Boolean']['input']>;
@@ -24742,6 +26443,8 @@ export type UpdateContentPageInput = {
24742
26443
  visibility?: InputMaybe<ContentVisibility>;
24743
26444
  };
24744
26445
  export type UpdateCouponInput = {
26446
+ applicableEntityTypes?: InputMaybe<Array<CouponEntityType>>;
26447
+ applicableProductIds?: InputMaybe<Array<Scalars['String']['input']>>;
24745
26448
  description?: InputMaybe<Scalars['String']['input']>;
24746
26449
  maxTotalUses?: InputMaybe<Scalars['Int']['input']>;
24747
26450
  maxUsesPerUser?: InputMaybe<Scalars['Int']['input']>;
@@ -25174,7 +26877,10 @@ export type UpdatePressKitAssetInput = {
25174
26877
  export type UpdateProductInput = {
25175
26878
  bannerUrl?: InputMaybe<Scalars['String']['input']>;
25176
26879
  category?: InputMaybe<Scalars['String']['input']>;
25177
- /** Which products this item is compatible with (e.g. "fluidgrids", "workspaces"). When provided without a manifest, updates the field directly. */
26880
+ /**
26881
+ * Which products this item is compatible with (e.g. "fluidgrids", "workspaces").
26882
+ * When provided without a manifest, updates the field directly.
26883
+ */
25178
26884
  compatibleProducts?: InputMaybe<Array<Scalars['String']['input']>>;
25179
26885
  content?: InputMaybe<Scalars['JSON']['input']>;
25180
26886
  currency?: InputMaybe<Scalars['String']['input']>;
@@ -25227,14 +26933,6 @@ export type UpdatePublisherInput = {
25227
26933
  organizationId?: InputMaybe<Scalars['ID']['input']>;
25228
26934
  websiteUrl?: InputMaybe<Scalars['String']['input']>;
25229
26935
  };
25230
- /** Input for updating RBAC configuration */
25231
- export type UpdateRbacConfigInput = {
25232
- description?: InputMaybe<Scalars['String']['input']>;
25233
- key: Scalars['String']['input'];
25234
- scopeId: Scalars['String']['input'];
25235
- value: Scalars['String']['input'];
25236
- valueType?: InputMaybe<Scalars['String']['input']>;
25237
- };
25238
26936
  export type UpdateRecurringBillingInput = {
25239
26937
  description?: InputMaybe<Scalars['String']['input']>;
25240
26938
  id: Scalars['ID']['input'];
@@ -25251,6 +26949,7 @@ export type UpdateResourceInput = {
25251
26949
  };
25252
26950
  export type UpdateReviewInput = {
25253
26951
  comment?: InputMaybe<Scalars['String']['input']>;
26952
+ metadata?: InputMaybe<Scalars['JSON']['input']>;
25254
26953
  rating?: InputMaybe<Scalars['Int']['input']>;
25255
26954
  title?: InputMaybe<Scalars['String']['input']>;
25256
26955
  };
@@ -25575,6 +27274,19 @@ export type UpdateWebhookInput = {
25575
27274
  retryEnabled?: InputMaybe<Scalars['Boolean']['input']>;
25576
27275
  url?: InputMaybe<Scalars['String']['input']>;
25577
27276
  };
27277
+ /** Input for updateWebhookSubscription — all fields optional, omitted fields unchanged */
27278
+ export type UpdateWebhookSubscriptionInput = {
27279
+ /** Operator-facing description */
27280
+ description?: InputMaybe<Scalars['String']['input']>;
27281
+ /** Whether delivery is active */
27282
+ enabled?: InputMaybe<Scalars['Boolean']['input']>;
27283
+ /** Event types to receive; empty = all events for the owner */
27284
+ events?: InputMaybe<Array<Scalars['String']['input']>>;
27285
+ /** HMAC-SHA256 signing secret (write-only, never returned) */
27286
+ secret?: InputMaybe<Scalars['String']['input']>;
27287
+ /** Delivery URL (HTTPS in production) */
27288
+ url?: InputMaybe<Scalars['String']['input']>;
27289
+ };
25578
27290
  /** Input for updating an existing workspace */
25579
27291
  export type UpdateWorkspaceInput = {
25580
27292
  metadata?: InputMaybe<Scalars['JSON']['input']>;
@@ -25651,7 +27363,11 @@ export type UpsertSourcingOfferInput = {
25651
27363
  /** Exact decimal string with at most two fractional digits. */
25652
27364
  unitPrice: Scalars['String']['input'];
25653
27365
  };
25654
- /** M2M input for managing a ShippingAddress on behalf of an explicit user. The calling service supplies `userId` (the opaque owner) directly; `id` selects an existing row to update (omit to create). */
27366
+ /**
27367
+ * M2M input for managing a ShippingAddress on behalf of an explicit user.
27368
+ * The calling service supplies `userId` (the opaque owner) directly; `id` selects
27369
+ * an existing row to update (omit to create).
27370
+ */
25655
27371
  export type UpsertUserShippingAddressInput = {
25656
27372
  addressLine1: Scalars['String']['input'];
25657
27373
  addressLine2?: InputMaybe<Scalars['String']['input']>;
@@ -25659,7 +27375,10 @@ export type UpsertUserShippingAddressInput = {
25659
27375
  country: Scalars['String']['input'];
25660
27376
  email?: InputMaybe<Scalars['String']['input']>;
25661
27377
  fullName: Scalars['String']['input'];
25662
- /** Existing ShippingAddress id to update. Omit to create a new address. When provided, the row must already belong to `userId` (else NOT_FOUND). */
27378
+ /**
27379
+ * Existing ShippingAddress id to update. Omit to create a new address. When
27380
+ * provided, the row must already belong to `userId` (else NOT_FOUND).
27381
+ */
25663
27382
  id?: InputMaybe<Scalars['ID']['input']>;
25664
27383
  instructions?: InputMaybe<Scalars['String']['input']>;
25665
27384
  isDefault?: InputMaybe<Scalars['Boolean']['input']>;
@@ -26319,6 +28038,30 @@ export type WebhookDeliveryEdge = {
26319
28038
  cursor: Scalars['String']['output'];
26320
28039
  node: WebhookDelivery;
26321
28040
  };
28041
+ /** One delivery attempt recorded for a WebhookSubscription. At most one row exists per (subscription, eventId) — a redispatched event updates the row instead of double-delivering. */
28042
+ export type WebhookDeliveryLog = {
28043
+ __typename?: 'WebhookDeliveryLog';
28044
+ /** Number of attempts made */
28045
+ attemptCount: Scalars['Int']['output'];
28046
+ /** When the final attempt finished */
28047
+ deliveredAt: Scalars['DateTime']['output'];
28048
+ /** Error message of the final attempt (null on success) */
28049
+ error?: Maybe<Scalars['String']['output']>;
28050
+ /** Caller-supplied event ID (idempotency key) */
28051
+ eventId: Scalars['String']['output'];
28052
+ /** Event type that was dispatched */
28053
+ eventType: Scalars['String']['output'];
28054
+ /** Unique log row ID */
28055
+ id: Scalars['ID']['output'];
28056
+ /** Envelope payload that was signed and posted */
28057
+ payload: Scalars['JSON']['output'];
28058
+ /** HTTP status code of the final attempt (null on transport error) */
28059
+ statusCode?: Maybe<Scalars['Int']['output']>;
28060
+ /** Owning subscription ID */
28061
+ subscriptionId: Scalars['ID']['output'];
28062
+ /** Whether the final attempt succeeded */
28063
+ success: Scalars['Boolean']['output'];
28064
+ };
26322
28065
  export declare enum WebhookDeliveryStatus {
26323
28066
  Delivered = "DELIVERED",
26324
28067
  Delivering = "DELIVERING",
@@ -26326,6 +28069,30 @@ export declare enum WebhookDeliveryStatus {
26326
28069
  Pending = "PENDING",
26327
28070
  Retrying = "RETRYING"
26328
28071
  }
28072
+ /** Result of a single test delivery */
28073
+ export type WebhookDispatchResult = {
28074
+ __typename?: 'WebhookDispatchResult';
28075
+ /** Number of attempts made */
28076
+ attemptCount: Scalars['Int']['output'];
28077
+ /** Error message of the final attempt (null on success) */
28078
+ error?: Maybe<Scalars['String']['output']>;
28079
+ /** HTTP status code of the final attempt (null on transport error) */
28080
+ statusCode?: Maybe<Scalars['Int']['output']>;
28081
+ /** Whether the delivery succeeded */
28082
+ success: Scalars['Boolean']['output'];
28083
+ };
28084
+ /** Summary returned by the M2M dispatchWebhookEvent mutation */
28085
+ export type WebhookDispatchSummary = {
28086
+ __typename?: 'WebhookDispatchSummary';
28087
+ /** Subscriptions skipped because the event was already delivered (idempotent redispatch) */
28088
+ deduplicated: Scalars['Int']['output'];
28089
+ /** Subscriptions delivered successfully */
28090
+ delivered: Scalars['Int']['output'];
28091
+ /** Subscriptions that failed after all retry attempts */
28092
+ failed: Scalars['Int']['output'];
28093
+ /** Enabled subscriptions matched for the owner + event type */
28094
+ matched: Scalars['Int']['output'];
28095
+ };
26329
28096
  /** WebhookEvent represents a received webhook (transient, 7-day TTL) Used for debugging and monitoring only */
26330
28097
  export type WebhookEvent = {
26331
28098
  __typename?: 'WebhookEvent';
@@ -26472,6 +28239,34 @@ export declare enum WebhookStatus {
26472
28239
  Failed = "FAILED",
26473
28240
  Paused = "PAUSED"
26474
28241
  }
28242
+ /** A registered outbound webhook endpoint owned by a product or operator. `ownerType` namespaces the event stream (e.g. "newsletter-product"); `ownerId` scopes it (e.g. the platform product id). An empty `events` list means the endpoint receives every event dispatched for the owner. */
28243
+ export type WebhookSubscription = {
28244
+ __typename?: 'WebhookSubscription';
28245
+ /** Creation timestamp */
28246
+ createdAt: Scalars['DateTime']['output'];
28247
+ /** Delivery audit trail (most recent first) */
28248
+ deliveries: Array<WebhookDeliveryLog>;
28249
+ /** Operator-facing description */
28250
+ description?: Maybe<Scalars['String']['output']>;
28251
+ /** Whether delivery is active */
28252
+ enabled: Scalars['Boolean']['output'];
28253
+ /** Event types this endpoint receives; empty = all events for the owner */
28254
+ events: Array<Scalars['String']['output']>;
28255
+ /** Unique subscription ID */
28256
+ id: Scalars['ID']['output'];
28257
+ /** Owner identifier of the event stream (e.g. platform product id) */
28258
+ ownerId: Scalars['String']['output'];
28259
+ /** Owner namespace of the event stream (e.g. "newsletter-product") */
28260
+ ownerType: Scalars['String']['output'];
28261
+ /** Last update timestamp */
28262
+ updatedAt: Scalars['DateTime']['output'];
28263
+ /** Delivery URL (HTTPS in production) */
28264
+ url: Scalars['String']['output'];
28265
+ };
28266
+ /** A registered outbound webhook endpoint owned by a product or operator. `ownerType` namespaces the event stream (e.g. "newsletter-product"); `ownerId` scopes it (e.g. the platform product id). An empty `events` list means the endpoint receives every event dispatched for the owner. */
28267
+ export type WebhookSubscriptionDeliveriesArgs = {
28268
+ limit?: InputMaybe<Scalars['Int']['input']>;
28269
+ };
26475
28270
  export type WebhookTestResult = {
26476
28271
  __typename?: 'WebhookTestResult';
26477
28272
  error?: Maybe<Scalars['String']['output']>;
@@ -26514,6 +28309,176 @@ export type WithdrawConsentInput = {
26514
28309
  subjectId: Scalars['ID']['input'];
26515
28310
  subjectType: Scalars['String']['input'];
26516
28311
  };
28312
+ /** Result of withdrawing a template. */
28313
+ export type WithdrawWorkflowTemplateSubmissionResult = {
28314
+ __typename?: 'WithdrawWorkflowTemplateSubmissionResult';
28315
+ id: Scalars['ID']['output'];
28316
+ /** True when the template was deleted; false when it was only taken off the store. */
28317
+ removed: Scalars['Boolean']['output'];
28318
+ /** The template's status when it was kept (UNLISTED), null when removed. */
28319
+ status?: Maybe<ProductStatus>;
28320
+ };
28321
+ /** What was removed from the author's workflow before it was stored. */
28322
+ export type WorkflowTemplateCleaningReport = {
28323
+ __typename?: 'WorkflowTemplateCleaningReport';
28324
+ /** Where each cleared connection was (up to 200). */
28325
+ clearedConnections: Array<WorkflowTemplateFieldRef>;
28326
+ connectionsCleared: Scalars['Int']['output'];
28327
+ pinnedDataRemoved: Scalars['Boolean']['output'];
28328
+ /** Where each removed secret was (up to 200). */
28329
+ removedSecrets: Array<WorkflowTemplateFieldRef>;
28330
+ secretsRemoved: Scalars['Int']['output'];
28331
+ };
28332
+ /** Where in a template a cleared connection or removed secret was. */
28333
+ export type WorkflowTemplateFieldRef = {
28334
+ __typename?: 'WorkflowTemplateFieldRef';
28335
+ /** Path of the field inside the node, for example data.parameters.apiKey. */
28336
+ field: Scalars['String']['output'];
28337
+ nodeId?: Maybe<Scalars['String']['output']>;
28338
+ nodeLabel?: Maybe<Scalars['String']['output']>;
28339
+ nodeType?: Maybe<Scalars['String']['output']>;
28340
+ };
28341
+ /** A node type a template uses. */
28342
+ export type WorkflowTemplateNodeType = {
28343
+ __typename?: 'WorkflowTemplateNodeType';
28344
+ displayName: Scalars['String']['output'];
28345
+ nodeType: Scalars['String']['output'];
28346
+ nodeVersion: Scalars['String']['output'];
28347
+ /** BUILTIN or STORE. */
28348
+ publishType: Scalars['String']['output'];
28349
+ };
28350
+ /** What a reviewer sees about a workflow template before approving it. */
28351
+ export type WorkflowTemplatePreview = {
28352
+ __typename?: 'WorkflowTemplatePreview';
28353
+ /** Recorded at submission; null for templates stored before reports were kept. */
28354
+ cleaningReport?: Maybe<WorkflowTemplateCleaningReport>;
28355
+ /** The cleaned definition importers receive. */
28356
+ definitionJson?: Maybe<Scalars['JSON']['output']>;
28357
+ edgeCount: Scalars['Int']['output'];
28358
+ /** Nodes in the definition (all of them, not just distinct types). */
28359
+ nodeCount: Scalars['Int']['output'];
28360
+ nodeTypes: Array<WorkflowTemplateNodeType>;
28361
+ requiredCredentials: Array<WorkflowTemplateRequiredCredential>;
28362
+ requiredInputs: Array<WorkflowTemplateRequiredInput>;
28363
+ };
28364
+ /** A credential someone importing the template must connect. */
28365
+ export type WorkflowTemplateRequiredCredential = {
28366
+ __typename?: 'WorkflowTemplateRequiredCredential';
28367
+ /**
28368
+ * connection: the node was bound to the author's saved connection, which was
28369
+ * cleared at submission. reference: the template reads ${credentials.<name>}.
28370
+ */
28371
+ kind: Scalars['String']['output'];
28372
+ name: Scalars['String']['output'];
28373
+ nodeId?: Maybe<Scalars['String']['output']>;
28374
+ nodeLabel?: Maybe<Scalars['String']['output']>;
28375
+ nodeType?: Maybe<Scalars['String']['output']>;
28376
+ };
28377
+ /** A value someone importing the template must supply (a ${name} variable it reads). */
28378
+ export type WorkflowTemplateRequiredInput = {
28379
+ __typename?: 'WorkflowTemplateRequiredInput';
28380
+ label: Scalars['String']['output'];
28381
+ name: Scalars['String']['output'];
28382
+ required: Scalars['Boolean']['output'];
28383
+ /** secret when it fills a secret field (API key, token, ...), else string. */
28384
+ type: Scalars['String']['output'];
28385
+ /** Nodes that read it. */
28386
+ usedBy: Array<Scalars['String']['output']>;
28387
+ };
28388
+ /**
28389
+ * A new version of a PUBLISHED template, kept apart from the live version while
28390
+ * it is reviewed. Approval makes it the live version; rejection leaves the live
28391
+ * version untouched.
28392
+ */
28393
+ export type WorkflowTemplateRevision = {
28394
+ __typename?: 'WorkflowTemplateRevision';
28395
+ authorName?: Maybe<Scalars['String']['output']>;
28396
+ category: Scalars['String']['output'];
28397
+ createdAt: Scalars['DateTime']['output'];
28398
+ description: Scalars['String']['output'];
28399
+ icon?: Maybe<Scalars['String']['output']>;
28400
+ id: Scalars['ID']['output'];
28401
+ /** Version currently live in the store. */
28402
+ liveVersion: Scalars['String']['output'];
28403
+ name: Scalars['String']['output'];
28404
+ /** Number of distinct node types the revision uses. */
28405
+ nodeCount: Scalars['Int']['output'];
28406
+ /** The author's note for the reviewer. */
28407
+ notes?: Maybe<Scalars['String']['output']>;
28408
+ /** What the revision does: nodes, required inputs and credentials, cleaning report. */
28409
+ preview?: Maybe<WorkflowTemplatePreview>;
28410
+ /** Store product id of the template it revises. */
28411
+ productId: Scalars['ID']['output'];
28412
+ productSlug: Scalars['String']['output'];
28413
+ /** Publisher profile name of the author. */
28414
+ publisherName?: Maybe<Scalars['String']['output']>;
28415
+ rejectedReason?: Maybe<Scalars['String']['output']>;
28416
+ reviewedAt?: Maybe<Scalars['DateTime']['output']>;
28417
+ revision: Scalars['Int']['output'];
28418
+ status: WorkflowTemplateRevisionStatus;
28419
+ submittedAt: Scalars['DateTime']['output'];
28420
+ /** Actor id of the author who submitted it. */
28421
+ submittedBy: Scalars['String']['output'];
28422
+ tags: Array<Scalars['String']['output']>;
28423
+ updatedAt: Scalars['DateTime']['output'];
28424
+ /** Version this revision becomes when approved. */
28425
+ version: Scalars['String']['output'];
28426
+ };
28427
+ export type WorkflowTemplateRevisionList = {
28428
+ __typename?: 'WorkflowTemplateRevisionList';
28429
+ items: Array<WorkflowTemplateRevision>;
28430
+ totalCount: Scalars['Int']['output'];
28431
+ };
28432
+ /** PENDING_REVIEW while a store admin reviews it; REJECTED with a reason. */
28433
+ export declare enum WorkflowTemplateRevisionStatus {
28434
+ PendingReview = "PENDING_REVIEW",
28435
+ Rejected = "REJECTED"
28436
+ }
28437
+ /** One of your community workflow templates and where it is in review. */
28438
+ export type WorkflowTemplateSubmission = {
28439
+ __typename?: 'WorkflowTemplateSubmission';
28440
+ authorName?: Maybe<Scalars['String']['output']>;
28441
+ category?: Maybe<Scalars['String']['output']>;
28442
+ createdAt: Scalars['DateTime']['output'];
28443
+ description?: Maybe<Scalars['String']['output']>;
28444
+ /** Times the template has been imported. */
28445
+ downloads: Scalars['Int']['output'];
28446
+ icon?: Maybe<Scalars['String']['output']>;
28447
+ /** Store product id of the template. */
28448
+ id: Scalars['ID']['output'];
28449
+ name: Scalars['String']['output'];
28450
+ /** Number of distinct node types the template uses. */
28451
+ nodeCount: Scalars['Int']['output'];
28452
+ /**
28453
+ * The new version of this published template that is waiting for review, or
28454
+ * that a reviewer rejected (with the reason). Null when there is none.
28455
+ */
28456
+ pendingRevision?: Maybe<WorkflowTemplateRevision>;
28457
+ publishedAt?: Maybe<Scalars['DateTime']['output']>;
28458
+ rejectedReason?: Maybe<Scalars['String']['output']>;
28459
+ reviewNotes?: Maybe<Scalars['String']['output']>;
28460
+ reviewedAt?: Maybe<Scalars['DateTime']['output']>;
28461
+ /** How many times the template has been submitted. */
28462
+ revision: Scalars['Int']['output'];
28463
+ slug: Scalars['String']['output'];
28464
+ sourceWorkflowKey?: Maybe<Scalars['String']['output']>;
28465
+ sourceWorkflowVersion?: Maybe<Scalars['String']['output']>;
28466
+ /**
28467
+ * PENDING_REVIEW while a store admin reviews it, PUBLISHED once approved,
28468
+ * REJECTED with a reason, UNLISTED once taken off the store.
28469
+ */
28470
+ status: ProductStatus;
28471
+ submittedAt?: Maybe<Scalars['DateTime']['output']>;
28472
+ tags: Array<Scalars['String']['output']>;
28473
+ updatedAt: Scalars['DateTime']['output'];
28474
+ /** Template version (1.0.0 for the first submission, 1.1.0 for the second, ...). */
28475
+ version: Scalars['String']['output'];
28476
+ };
28477
+ export type WorkflowTemplateSubmissionList = {
28478
+ __typename?: 'WorkflowTemplateSubmissionList';
28479
+ items: Array<WorkflowTemplateSubmission>;
28480
+ totalCount: Scalars['Int']['output'];
28481
+ };
26517
28482
  /** Workspace type stub - represents a workspace entity from the workspace service This service doesn't own the Workspace model, but references it */
26518
28483
  export type Workspace = {
26519
28484
  __typename?: 'Workspace';
@@ -26669,6 +28634,8 @@ export type CreateAddOnsInput = {
26669
28634
  price: Scalars['Float']['input'];
26670
28635
  productId: Scalars['String']['input'];
26671
28636
  quotas: Array<AddonQuotaInput>;
28637
+ /** Whether buying this add-on requires a paid subscription to its product. Defaults to true; set false only for items sold to Free users on purpose. */
28638
+ requiresPaidSubscription?: InputMaybe<Scalars['Boolean']['input']>;
26672
28639
  };
26673
28640
  export type CreatePlanInput = {
26674
28641
  currency?: InputMaybe<Scalars['String']['input']>;
@@ -26707,6 +28674,8 @@ export type UpdateAddOnsInput = {
26707
28674
  name?: InputMaybe<Scalars['String']['input']>;
26708
28675
  price?: InputMaybe<Scalars['Float']['input']>;
26709
28676
  quotas: Array<AddonQuotaInput>;
28677
+ /** Whether buying this add-on requires a paid subscription to its product. Omit to leave unchanged. */
28678
+ requiresPaidSubscription?: InputMaybe<Scalars['Boolean']['input']>;
26710
28679
  };
26711
28680
  export type UpdatePlanInput = {
26712
28681
  /** Immutable once set — see `price`. Throws CURRENCY_CHANGE_NOT_ALLOWED on an actual change. */