@greatwait/contracts 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/dist/attempt-diagnostics.d.ts +1 -1
  2. package/dist/attempt-diagnostics.js +13 -1
  3. package/dist/attempt-search.d.ts +2 -0
  4. package/dist/attempt-search.js +22 -19
  5. package/dist/authority.js +9 -9
  6. package/dist/billing.d.ts +46 -0
  7. package/dist/billing.js +29 -0
  8. package/dist/callback-safety.js +5 -1
  9. package/dist/configuration.d.ts +6 -2
  10. package/dist/configuration.js +93 -52
  11. package/dist/delivery.d.ts +13 -1
  12. package/dist/delivery.js +2 -0
  13. package/dist/effective-limits.d.ts +4 -4
  14. package/dist/endpoints.d.ts +29 -0
  15. package/dist/endpoints.js +57 -26
  16. package/dist/forecast.d.ts +2 -2
  17. package/dist/http-request.d.ts +12 -2
  18. package/dist/http-request.js +56 -24
  19. package/dist/identifiers.js +20 -20
  20. package/dist/index.d.ts +8 -7
  21. package/dist/index.js +8 -7
  22. package/dist/mcp.js +1 -0
  23. package/dist/operational-config.d.ts +174 -22
  24. package/dist/operational-config.js +213 -79
  25. package/dist/operations.d.ts +334 -52
  26. package/dist/operations.js +195 -34
  27. package/dist/project-notifications.d.ts +35 -9
  28. package/dist/project-notifications.js +43 -12
  29. package/dist/protocol.d.ts +28 -0
  30. package/dist/protocol.js +56 -33
  31. package/dist/schedule-selection.js +2 -2
  32. package/dist/scheduling-records.d.ts +106 -16
  33. package/dist/scheduling-records.js +36 -12
  34. package/dist/scheduling.d.ts +200 -43
  35. package/dist/scheduling.js +280 -131
  36. package/dist/service-mode.d.ts +88 -0
  37. package/dist/service-mode.js +130 -0
  38. package/dist/signatures.d.ts +6 -6
  39. package/dist/signatures.js +24 -24
  40. package/dist/stored-http.d.ts +18 -0
  41. package/dist/stored-http.js +106 -0
  42. package/dist/tenancy.d.ts +54 -30
  43. package/dist/tenancy.js +35 -17
  44. package/dist/time.js +7 -7
  45. package/dist/timing.d.ts +39 -0
  46. package/dist/timing.js +51 -0
  47. package/dist/zod-values.d.ts +1 -1
  48. package/dist/zod-values.js +1 -1
  49. package/dist/zod.d.ts +1 -1
  50. package/dist/zod.js +1 -1
  51. package/generated/v1/examples/billing.noticesdismiss.request.json +3 -0
  52. package/generated/v1/examples/billing.noticesdismiss.response.json +6 -0
  53. package/generated/v1/examples/billing.reconcile.response.json +12 -0
  54. package/generated/v1/examples/billing.summary.response.json +12 -0
  55. package/generated/v1/examples/executions.list.response.json +1 -0
  56. package/generated/v1/examples/limits.read.response.json +1 -1
  57. package/generated/v1/examples/projectnotifications.rotateSigningKey.response.json +1 -0
  58. package/generated/v1/examples/projects.list.response.json +0 -6
  59. package/generated/v1/examples/projects.read.response.json +14 -0
  60. package/generated/v1/examples/schedules.list.response.json +1 -3
  61. package/generated/v1/examples/schedules.summary.response.json +174 -0
  62. package/generated/v1/examples/timing.summary.response.json +33 -1
  63. package/generated/v1/manifest.json +79 -2
  64. package/generated/v1/openapi.json +4084 -2023
  65. package/generated/v1/policy-matrix.json +22 -1
  66. package/generated/v1/schemas/attempts.list.response.json +10 -0
  67. package/generated/v1/schemas/attempts.read.response.json +10 -0
  68. package/generated/v1/schemas/attempts.search.response.json +4 -0
  69. package/generated/v1/schemas/billing.notices.query.json +4 -0
  70. package/generated/v1/schemas/billing.noticesdismiss.request.json +12 -0
  71. package/generated/v1/schemas/billing.noticesdismiss.response.json +22 -0
  72. package/generated/v1/schemas/billing.reconcile.response.json +43 -0
  73. package/generated/v1/schemas/billing.summary.response.json +43 -0
  74. package/generated/v1/schemas/endpoints.list.query.json +15 -0
  75. package/generated/v1/schemas/executions.list.response.json +4 -0
  76. package/generated/v1/schemas/occurrences.list.response.json +4 -0
  77. package/generated/v1/schemas/occurrences.read.response.json +4 -0
  78. package/generated/v1/schemas/occurrences.redeliver.response.json +10 -0
  79. package/generated/v1/schemas/projectnotifications.read.response.json +4 -0
  80. package/generated/v1/schemas/projectnotifications.rotateSigningKey.response.json +4 -0
  81. package/generated/v1/schemas/projectnotifications.update.request.json +41 -17
  82. package/generated/v1/schemas/projectnotifications.update.response.json +4 -0
  83. package/generated/v1/schemas/projects.list.response.json +0 -27
  84. package/generated/v1/schemas/projects.read.response-headers.json +11 -0
  85. package/generated/v1/schemas/projects.read.response.json +79 -0
  86. package/generated/v1/schemas/schedules.archive.response.json +8 -0
  87. package/generated/v1/schemas/schedules.cancel.response.json +8 -0
  88. package/generated/v1/schemas/schedules.create.request.json +1 -1
  89. package/generated/v1/schemas/schedules.create.response.json +8 -0
  90. package/generated/v1/schemas/schedules.list.query.json +6 -0
  91. package/generated/v1/schemas/schedules.list.response.json +4 -0
  92. package/generated/v1/schemas/schedules.pause.response.json +8 -0
  93. package/generated/v1/schemas/schedules.read.response.json +8 -0
  94. package/generated/v1/schemas/schedules.replace.request.json +1 -1
  95. package/generated/v1/schemas/schedules.replace.response.json +8 -0
  96. package/generated/v1/schemas/schedules.resume.response.json +8 -0
  97. package/generated/v1/schemas/schedules.summary.query.json +11 -0
  98. package/generated/v1/schemas/schedules.summary.response.json +144 -0
  99. package/generated/v1/schemas/timing.summary.response.json +69 -0
  100. package/generated/v1/snippets/billing.noticesdismiss.json +6 -0
  101. package/generated/v1/snippets/projectnotifications.rotateSigningKey.json +1 -1
  102. package/generated/v1/snippets/projects.read.json +6 -0
  103. package/generated/v1/snippets/schedules.summary.json +6 -0
  104. package/package.json +1 -1
@@ -1,6 +1,7 @@
1
1
  import { projectAttemptPageSchema, projectAttemptSearchRequestSchema, } from "./attempt-search.js";
2
2
  import { BULK_API_OPERATIONS } from "./bulk-operations.js";
3
3
  import { effectiveCustomerLimitsSchema } from "./effective-limits.js";
4
+ import { CONFIGURATION_DEFAULTS } from "./configuration.js";
4
5
  import { z } from "./zod.js";
5
6
  import { MEMBER_OPERATIONS } from "./members.js";
6
7
  import { PROJECT_NOTIFICATION_OPERATIONS } from "./project-notifications.js";
@@ -8,15 +9,15 @@ import { DATA_EXPORT_OPERATIONS } from "./data-export.js";
8
9
  import { ORGANIZATION_LIFECYCLE_OPERATIONS } from "./organization-lifecycle.js";
9
10
  import { API_UNUSED_RESPONSE_SCHEMA } from "./operation-definitions.js";
10
11
  import { credentialContextSchema } from "./authority.js";
11
- import { callbackEndpointCreatedSchema, callbackEndpointEnsuredSchema, callbackEndpointPageSchema, callbackEndpointRequestSchema, callbackEndpointRotatedSchema, callbackEndpointSchema, callbackEndpointSigningSecretsSchema, callbackSigningKeyRotationRequestSchema, } from "./endpoints.js";
12
+ import { callbackEndpointCreatedSchema, callbackEndpointEnsuredSchema, callbackEndpointListRequestSchema, callbackEndpointPageSchema, callbackEndpointRequestSchema, callbackEndpointRotatedSchema, callbackEndpointSchema, callbackEndpointSigningSecretsSchema, callbackSigningKeyRotationRequestSchema, } from "./endpoints.js";
12
13
  import { FORECAST_WINDOW_VERSION, forecastRequestSchema, forecastSchema, forecastRequestHeadersSchema, forecastWindowsSchema, } from "./forecast.js";
13
14
  import { usageRequestSchema, usageSchema } from "./usage.js";
14
15
  import { deliveryTimingSummarySchema } from "./timing.js";
15
- import { billingAutoTopUpApplyRequestSchema, billingAutoTopUpPreviewRequestSchema, billingAutoTopUpPreviewSchema, billingCeilingUpdateRequestSchema, billingFundingQuoteRequestSchema, billingFundingQuoteSchema, billingFundingViewSchema, billingNoticePageSchema, billingNotificationSettingsSchema, billingNotificationSettingsUpdateRequestSchema, billingLedgerPageSchema, billingLedgerRequestSchema, billingBudgetUpdateRequestHeadersSchema, billingBudgetUpdateRequestSchema, billingBudgetUpdateResponseSchema, billingPurchaseRequestSchema, billingRefundRequestCreateSchema, billingRefundResolutionRequestSchema, billingRefundRequestViewSchema, billingSummarySchema, billingPromotionsSchema, billingRedeemRequestSchema, billingRedeemResponseSchema, projectBillingStateSchema, projectBillingQuoteSchema, projectBillingQuoteRequestSchema, projectBillingChangeRequestSchema, billingPortalSchema, billingInvoiceListSchema, billingPaymentHistoryPageSchema, billingInvoiceHistoryPageSchema, billingPaymentMethodSchema, billingPaymentMethodSetupRequestSchema, billingPaymentMethodConfirmRequestSchema, billingPaymentMethodRemoveRequestSchema, } from "./billing.js";
16
+ import { billingAutoTopUpApplyRequestSchema, billingAutoTopUpPreviewRequestSchema, billingAutoTopUpPreviewSchema, billingCeilingUpdateRequestSchema, billingFundingQuoteRequestSchema, billingFundingQuoteSchema, billingFundingViewSchema, billingNoticeDismissRequestSchema, billingNoticeDismissResultSchema, billingNoticeListRequestSchema, billingNoticePageSchema, billingNotificationSettingsSchema, billingNotificationSettingsUpdateRequestSchema, billingLedgerPageSchema, billingLedgerRequestSchema, billingBudgetUpdateRequestHeadersSchema, billingBudgetUpdateRequestSchema, billingBudgetUpdateResponseSchema, billingPurchaseRequestSchema, billingRefundRequestCreateSchema, billingRefundResolutionRequestSchema, billingRefundRequestViewSchema, billingSummarySchema, billingPromotionsSchema, billingRedeemRequestSchema, billingRedeemResponseSchema, projectBillingStateSchema, projectBillingQuoteSchema, projectBillingQuoteRequestSchema, projectBillingChangeRequestSchema, billingPortalSchema, billingInvoiceListSchema, billingPaymentHistoryPageSchema, billingInvoiceHistoryPageSchema, billingPaymentMethodSchema, billingPaymentMethodSetupRequestSchema, billingPaymentMethodConfirmRequestSchema, billingPaymentMethodRemoveRequestSchema, } from "./billing.js";
16
17
  import { conditionalRequestHeaderSchema, idempotencyReplayResponseHeaderSchema, idempotencyRequestHeaderSchema, historyPageRequestSchema, pageRequestSchema, scheduleListRequestSchema, replayedResponseHeaderSchema, requiredConditionalRequestHeaderSchema, requiredIdempotencyRequestHeaderSchema, versionResponseHeaderSchema, } from "./protocol.js";
17
18
  import { oauthGrantListSchema, oauthGrantRevokedSchema } from "./oauth.js";
18
19
  import { credentialCreatedSchema, credentialPageSchema, credentialRequestSchema, credentialRevokedSchema, credentialRotatedSchema, credentialRotationRequestSchema, } from "./secrets.js";
19
- import { attemptPageSchema, attemptViewSchema, occurrencePageSchema, projectOccurrenceListRequestSchema, projectOccurrencePageSchema, occurrenceViewSchema, schedulePageSchema, scheduleRequestSchema, scheduleViewSchema, scheduleWrittenViewSchema, } from "./scheduling.js";
20
+ import { attemptPageSchema, attemptViewSchema, occurrencePageSchema, projectOccurrenceListRequestSchema, projectOccurrencePageSchema, occurrenceViewSchema, schedulePageSchema, scheduleRequestSchema, scheduleSummaryRequestSchema, scheduleSummarySchema, scheduleViewSchema, scheduleWrittenViewSchema, } from "./scheduling.js";
20
21
  import { testSinkCreateRequestSchema, testSinkDeliveryBodySchema, testSinkDeliveryPageSchema, testSinkPageSchema, testSinkProgramSchema, testSinkSchema, } from "./test-sink.js";
21
22
  import { projectArchiveRequestSchema, projectCreateRequestSchema, projectDeletedSchema, projectListSchema, projectSummarySchema, projectUpdateRequestSchema, } from "./tenancy.js";
22
23
  import { mcpConnectionSchema } from "./mcp.js";
@@ -101,6 +102,10 @@ const BILLING_SUMMARY_EXAMPLE = {
101
102
  boundary: "2026-09-01T00:00:00.000Z",
102
103
  mode: "shadow",
103
104
  },
105
+ attemptPrice: {
106
+ bulk: { currency: "USD", microdollars: "10", scale: 6 },
107
+ realtime: { currency: "USD", microdollars: "10", scale: 6 },
108
+ },
104
109
  blockingReasons: [],
105
110
  budgetPolicy: {
106
111
  desired: { advisoryBudget: null, hardCap: null },
@@ -307,7 +312,7 @@ const BILLING_NOTICE_LIST_OPERATION = {
307
312
  path: "/v1/billing/notices",
308
313
  principals: ["api-credential", "oauth", "session"],
309
314
  problems: ["invalid_request", "service_unavailable"],
310
- query: pageRequestSchema,
315
+ query: billingNoticeListRequestSchema,
311
316
  response: globalThis.GREATWAIT_API_REQUEST_REGISTRY
312
317
  ? API_UNUSED_RESPONSE_SCHEMA
313
318
  : billingNoticePageSchema,
@@ -318,6 +323,42 @@ const BILLING_NOTICE_LIST_OPERATION = {
318
323
  : "List persistent billing notices",
319
324
  surfaces: ["api", "mock"],
320
325
  };
326
+ const BILLING_NOTICE_DISMISS_OPERATION = {
327
+ creates: false,
328
+ description: globalThis.GREATWAIT_RUNTIME_CONTRACTS_ONLY
329
+ ? ""
330
+ : "Dismisses this project's delivery-failure notices (`delivery-failed` and `schedule-auto-paused`) in the verified environment: every one still active that occurred at or before `through` is resolved for every member at once, and stays listed as resolved. Pass the `occurredAt` of the newest notice you saw, so a failure that arrives later stays open. Emails already owed are still sent. Billing notices are never dismissed. Repeating the request changes nothing and reports 0.",
331
+ example: globalThis.GREATWAIT_RUNTIME_WITHOUT_EXAMPLES
332
+ ? {}
333
+ : { dismissed: 3, freshness: { kind: "authoritative" } },
334
+ id: "billing.noticesdismiss",
335
+ idempotent: true,
336
+ // Not destructive: the notices stay listed, as resolved, and nothing
337
+ // about a schedule, a run or an email changes.
338
+ mcp: { destructive: false, kind: "tool", openWorld: false },
339
+ method: "POST",
340
+ mutates: true,
341
+ path: "/v1/billing/notices/dismiss",
342
+ principals: ["api-credential", "oauth", "session"],
343
+ problems: ["invalid_request", "service_unavailable"],
344
+ request: billingNoticeDismissRequestSchema,
345
+ requestExample: globalThis
346
+ .GREATWAIT_RUNTIME_WITHOUT_EXAMPLES
347
+ ? {}
348
+ : { through: "2026-09-10T12:00:00.000Z" },
349
+ response: globalThis.GREATWAIT_API_REQUEST_REGISTRY
350
+ ? API_UNUSED_RESPONSE_SCHEMA
351
+ : billingNoticeDismissResultSchema,
352
+ // The read's scope, plus schedules:write: a delivery-failure notice is
353
+ // visible with schedules:read, and dismissing it changes what every
354
+ // member sees, so a credential needs the write. Every role holds both.
355
+ scopes: ["usage:read", "schedules:write"],
356
+ sessionAuthority: "headers",
357
+ summary: globalThis.GREATWAIT_API_REQUEST_REGISTRY
358
+ ? ""
359
+ : "Dismiss delivery-failure notices",
360
+ surfaces: ["api", "mock"],
361
+ };
321
362
  const BILLING_NOTIFICATION_SETTINGS_OPERATION = {
322
363
  creates: false,
323
364
  description: globalThis.GREATWAIT_RUNTIME_CONTRACTS_ONLY
@@ -797,7 +838,7 @@ export const OPERATIONS = [
797
838
  creates: false,
798
839
  description: globalThis.GREATWAIT_RUNTIME_CONTRACTS_ONLY
799
840
  ? ""
800
- : "Lists the caller's callback endpoints for exactly its own project and environment. The result is authoritative and metadata-only: no signing secret or sealed key material has a field in this shape.",
841
+ : "Lists the caller's callback endpoints for exactly its own project and environment, oldest first, one page at a time (default 25, at most 100): follow `nextCursor` until it is absent before counting endpoints or concluding one does not exist. Optional `text` (case-insensitive substring of the name, address or identifier), `status` and `rotation=unacknowledged` filters intersect before paging, so a match on any page is found on the first; a cursor continues only under the filters that issued it. Metadata only: no signing secret or sealed key material has a field in this shape.",
801
842
  example: globalThis.GREATWAIT_RUNTIME_WITHOUT_EXAMPLES
802
843
  ? {}
803
844
  : {
@@ -824,7 +865,7 @@ export const OPERATIONS = [
824
865
  path: "/v1/endpoints",
825
866
  principals: ["api-credential", "oauth", "session"],
826
867
  problems: ["invalid_request"],
827
- query: pageRequestSchema,
868
+ query: callbackEndpointListRequestSchema,
828
869
  response: globalThis.GREATWAIT_API_REQUEST_REGISTRY
829
870
  ? API_UNUSED_RESPONSE_SCHEMA
830
871
  : callbackEndpointPageSchema,
@@ -1742,19 +1783,13 @@ export const OPERATIONS = [
1742
1783
  creates: false,
1743
1784
  description: globalThis.GREATWAIT_RUNTIME_CONTRACTS_ONLY
1744
1785
  ? ""
1745
- : "Lists the active and archived projects in the signed-in member's organization, with the environment kinds, lifecycle state, version and deletion-preview counts each one has. Active and archived rows both occupy a plan slot; deleted projects are absent. Archived rows are management targets rather than projects work may run inside, so a picker must not offer them as switch targets. The result is a display aid rather than an authorization control — naming a project on a later request re-resolves it against the member's own organization, and a project that is not theirs answers exactly as one that does not exist.",
1786
+ : "Lists the active and archived projects in the signed-in member's organization, with the environment kinds, lifecycle state and version each one has. It carries no deletion counts: counting reads a project's whole history, so the exact counts a permanent deletion would destroy come from `projects.read`, one project at a time. Active and archived rows both occupy a plan slot; deleted projects are absent. Archived rows are management targets rather than projects work may run inside, so a picker must not offer them as switch targets. The result is a display aid rather than an authorization control — naming a project on a later request re-resolves it against the member's own organization, and a project that is not theirs answers exactly as one that does not exist.",
1746
1787
  example: globalThis.GREATWAIT_RUNTIME_WITHOUT_EXAMPLES
1747
1788
  ? {}
1748
1789
  : {
1749
1790
  data: [
1750
1791
  {
1751
1792
  createdAt: "2026-08-14T11:00:00.000Z",
1752
- deletionCounts: {
1753
- endpoints: 2,
1754
- keys: 4,
1755
- runs: 37,
1756
- schedules: 5,
1757
- },
1758
1793
  environmentKinds: ["test", "live"],
1759
1794
  id: "proj_01h8xyz9k2m4n6p8r0t2v4w6y8",
1760
1795
  name: "Billing reminders",
@@ -1787,6 +1822,53 @@ export const OPERATIONS = [
1787
1822
  : "List the member's projects",
1788
1823
  surfaces: ["api", "mock"],
1789
1824
  },
1825
+ {
1826
+ creates: false,
1827
+ description: globalThis.GREATWAIT_RUNTIME_CONTRACTS_ONLY
1828
+ ? ""
1829
+ : "Reads one active or archived project in the signed-in member's organization, with the exact counts of the schedules, endpoints, keys and runs a permanent deletion would destroy now. Counting reads the project's whole history, which is why the list does not carry these counts and why this is the read a deletion confirmation makes. A project the member cannot see answers exactly as one that does not exist.",
1830
+ example: globalThis.GREATWAIT_RUNTIME_WITHOUT_EXAMPLES
1831
+ ? {}
1832
+ : {
1833
+ createdAt: "2026-08-14T11:00:00.000Z",
1834
+ deletionCounts: { endpoints: 2, keys: 4, runs: 37, schedules: 5 },
1835
+ environmentKinds: ["test", "live"],
1836
+ id: "proj_01h8xyz9k2m4n6p8r0t2v4w6y8",
1837
+ name: "Billing reminders",
1838
+ status: "archived",
1839
+ version: 2,
1840
+ },
1841
+ id: "projects.read",
1842
+ idempotent: true,
1843
+ // Withheld from MCP, and accepted from a signed-in member only. The exact
1844
+ // counts are the deletion preview Project General shows before somebody
1845
+ // deletes a project; counting reads every schedule and run the project
1846
+ // has, so publishing it as an automation read would invite a polling
1847
+ // client to pay that on every call. Rename, archive and delete each answer
1848
+ // with the project they changed, counts included, so automation that acts
1849
+ // on a project already learns its version and counts from the act.
1850
+ mcp: {
1851
+ kind: "unavailable",
1852
+ reason: "The counted read is the deletion preview a signed-in member sees before deleting a project. Counting reads the project's whole history, so it is not offered as an agent tool; rename, archive and delete each answer with the project they changed.",
1853
+ },
1854
+ method: "GET",
1855
+ mutates: false,
1856
+ path: "/v1/projects/{projectId}",
1857
+ principals: ["session"],
1858
+ problems: ["not_found"],
1859
+ response: globalThis.GREATWAIT_API_REQUEST_REGISTRY
1860
+ ? API_UNUSED_RESPONSE_SCHEMA
1861
+ : projectSummarySchema,
1862
+ ...(globalThis.GREATWAIT_API_REQUEST_REGISTRY
1863
+ ? {}
1864
+ : { responseHeaders: versionResponseHeaderSchema }),
1865
+ scopes: ["projects:read"],
1866
+ sessionAuthority: "headers",
1867
+ summary: globalThis.GREATWAIT_API_REQUEST_REGISTRY
1868
+ ? ""
1869
+ : "Read a project with its deletion counts",
1870
+ surfaces: ["api", "mock"],
1871
+ },
1790
1872
  {
1791
1873
  creates: true,
1792
1874
  description: globalThis.GREATWAIT_RUNTIME_CONTRACTS_ONLY
@@ -2324,7 +2406,7 @@ export const OPERATIONS = [
2324
2406
  creates: false,
2325
2407
  description: globalThis.GREATWAIT_RUNTIME_CONTRACTS_ONLY
2326
2408
  ? ""
2327
- : "Lists the caller's own schedules, oldest first, one page at a time. Archived schedules are left out: archiving is how a schedule leaves the working set, and a listing that still carried them would make the operation pointless. Give `endpoint` to keep the page to the schedules that deliver to that endpoint — the way back from a destination to everything pointed at it, which is what somebody who disabled or is about to move an endpoint needs to see. Items are schedules rather than schedules-with-occurrences, because a cross-partition listing is served from a projection that holds a summary; read a schedule to get its authoritative next occurrence. Every page states whether it is authoritative or projected.",
2409
+ : "Lists the caller's own schedules one page at a time (default 25, at most 100); follow `nextCursor` until it is absent before counting or ranking schedules, or use schedules.summary for whole-project counts. `order=created` (the default) walks creation order and includes every unarchived schedule; `order=due` walks next-due order and includes only schedules with an occurrence on the books, so cancelled, completed and paused schedules with nothing upcoming are not in it. Giving `dueBefore` or `dueAfter` forces due order. `direction=desc` reverses either order: newest-created first, or latest-due first. Due-order paging is not stable while schedules fire: a schedule's next-due instant moves as it runs, so across pages it can appear twice or be skipped; read again from the first page, or de-duplicate by id, when exactness matters. Archived schedules are left out. Give `endpoint` to keep the page to the schedules that deliver to that endpoint, or `text`, `status`, `recurrence`, `tag` or `external_identifier` to filter; filters intersect before paging, and a cursor continues only under the order, direction and filters that issued it. Creation order examines a bounded number of schedules per page, so a page filtered by `status`, or one crossing many archived schedules, can come back short, or empty, and still carry `nextCursor`: keep following it. Every page is authoritative.",
2328
2410
  example: globalThis.GREATWAIT_RUNTIME_WITHOUT_EXAMPLES
2329
2411
  ? {}
2330
2412
  : {
@@ -2342,16 +2424,9 @@ export const OPERATIONS = [
2342
2424
  version: 1,
2343
2425
  },
2344
2426
  ],
2345
- // `projected` since W2-06 served this listing from the control-plane
2346
- // directory. `asOf` is the instant the projection was last known to hold
2347
- // everything every partition had handed over, and `lagSeconds` is how long
2348
- // ago that was — so a page states how far behind it may be rather than
2349
- // implying it is current.
2350
- freshness: {
2351
- asOf: "2026-07-28T15:00:00.000Z",
2352
- kind: "projected",
2353
- lagSeconds: 0,
2354
- },
2427
+ // `authoritative` since W9-80: the page is read from the committed
2428
+ // scheduling tables the timer moves, not from a lagging projection.
2429
+ freshness: { kind: "authoritative" },
2355
2430
  nextCursor: "eyJhIjoxNzg1MjUwODAwMDAwLCJpIjoic2NoXzAxaDh4eXo5azJtNG42cDhyMHQydjR3Nnk4IiwiayI6Ijk1MTM1NDZmIn0",
2356
2431
  },
2357
2432
  id: "schedules.list",
@@ -2373,6 +2448,58 @@ export const OPERATIONS = [
2373
2448
  : "List schedules",
2374
2449
  surfaces: ["api", "mock"],
2375
2450
  },
2451
+ {
2452
+ creates: false,
2453
+ description: globalThis.GREATWAIT_RUNTIME_CONTRACTS_ONLY
2454
+ ? ""
2455
+ : "Summarizes every retained, unarchived schedule in the caller's project and environment: exact counts by status (active, paused, completed, cancelled), how many paused schedules paused themselves after repeated failures with up to five of them, and per-day created and finished counts for the last 30 days (today included, zero days included) in `timeZone` (default UTC). Use this rather than counting schedules_list pages. The answer is computed on read and reused for up to five minutes per project, environment and time zone: `freshness` is projected, with `asOf` the instant the counts were taken and `lagSeconds` their age. Counts cover retained schedules only; retention removes cancelled schedules and one-offs that ran once their history horizon passes.",
2456
+ example: globalThis.GREATWAIT_RUNTIME_WITHOUT_EXAMPLES
2457
+ ? {}
2458
+ : {
2459
+ counts: {
2460
+ active: 4863,
2461
+ cancelled: 212,
2462
+ completed: 148738,
2463
+ paused: 3,
2464
+ },
2465
+ days: Array.from({ length: 30 }, (_, index) => ({
2466
+ created: index === 29 ? 5 : 0,
2467
+ date: new Date(Date.UTC(2026, 9, 24 - 29 + index))
2468
+ .toISOString()
2469
+ .slice(0, 10),
2470
+ finished: index === 29 ? 2 : 0,
2471
+ })),
2472
+ freshness: {
2473
+ asOf: "2026-10-24T14:58:00.000Z",
2474
+ kind: "projected",
2475
+ lagSeconds: 120,
2476
+ },
2477
+ pausedAfterFailures: { count: 0, schedules: [] },
2478
+ window: {
2479
+ from: "2026-09-25",
2480
+ timeZone: "America/Chicago",
2481
+ to: "2026-10-24",
2482
+ },
2483
+ },
2484
+ id: "schedules.summary",
2485
+ idempotent: true,
2486
+ mcp: { destructive: false, kind: "tool", openWorld: false },
2487
+ method: "GET",
2488
+ mutates: false,
2489
+ path: "/v1/schedule-summary",
2490
+ principals: ["api-credential", "oauth", "session"],
2491
+ problems: ["invalid_request"],
2492
+ query: scheduleSummaryRequestSchema,
2493
+ response: globalThis.GREATWAIT_API_REQUEST_REGISTRY
2494
+ ? API_UNUSED_RESPONSE_SCHEMA
2495
+ : scheduleSummarySchema,
2496
+ scopes: ["schedules:read"],
2497
+ sessionAuthority: "headers",
2498
+ summary: globalThis.GREATWAIT_API_REQUEST_REGISTRY
2499
+ ? ""
2500
+ : "Summarize schedules",
2501
+ surfaces: ["api", "mock"],
2502
+ },
2376
2503
  {
2377
2504
  creates: false,
2378
2505
  description: globalThis.GREATWAIT_RUNTIME_CONTRACTS_ONLY
@@ -2523,13 +2650,14 @@ export const OPERATIONS = [
2523
2650
  surfaces: ["api", "mock"],
2524
2651
  },
2525
2652
  BILLING_NOTICE_LIST_OPERATION,
2653
+ BILLING_NOTICE_DISMISS_OPERATION,
2526
2654
  BILLING_NOTIFICATION_SETTINGS_OPERATION,
2527
2655
  BILLING_NOTIFICATION_SETTINGS_UPDATE_OPERATION,
2528
2656
  withBillingFundingContract({
2529
2657
  creates: false,
2530
2658
  description: globalThis.GREATWAIT_RUNTIME_CONTRACTS_ONLY
2531
2659
  ? ""
2532
- : "Reads the verified principal's authoritative execution-funding position, including available and reserved credit, amount owed, recurring project fees, the current UTC month's automatic-charge ceiling and its settled, pending and remaining gross authority, and bounded payment history. Manual purchases and project subscriptions are separately authorized and never consume the automatic ceiling. Pending gross charges include applicable tax; refunds never restore monthly automatic purchasing authority. Receipt and payment links are limited to supported provider-hosted HTTPS URLs.",
2660
+ : "Reads the verified principal's authoritative execution-funding position, including available and reserved credit, amount owed, recurring project fees, the current UTC month's automatic-charge ceiling and its settled, pending and remaining gross authority, and bounded recent payment history in `paymentOperations` (billing.paymenthistory pages through the full history with a cursor). Manual purchases and project subscriptions are separately authorized and never consume the automatic ceiling. Pending gross charges include applicable tax; refunds never restore monthly automatic purchasing authority. Receipt and payment links are limited to supported provider-hosted HTTPS URLs.",
2533
2661
  id: "billing.funding",
2534
2662
  idempotent: true,
2535
2663
  mcp: { destructive: false, kind: "tool", openWorld: false },
@@ -2995,7 +3123,7 @@ export const OPERATIONS = [
2995
3123
  creates: false,
2996
3124
  description: globalThis.GREATWAIT_RUNTIME_CONTRACTS_ONLY
2997
3125
  ? ""
2998
- : "Lists the verified organization's project subscription charges: the payment provider's invoices for its project subscription, read by authenticated provider call, most recent first and at most 24. Execution-credit purchases are not listed here; billing.funding reports them. Draft and zero-amount invoices are omitted. Each amount is the invoice total including tax, and the receipt link, when present, is the provider-hosted invoice page. An organization that has never been billed has an empty list; reading it creates nothing and changes nothing.",
3126
+ : "Lists the verified organization's project subscription charges: the payment provider's invoices for its project subscription, read by authenticated provider call, most recent first and at most 24; billing.invoicehistory pages through the full history with a cursor. Execution-credit purchases are not listed here; billing.paymenthistory pages through them. Draft and zero-amount invoices are omitted. Each amount is the invoice total including tax, and the receipt link, when present, is the provider-hosted invoice page. An organization that has never been billed has an empty list; reading it creates nothing and changes nothing.",
2999
3127
  example: globalThis.GREATWAIT_RUNTIME_WITHOUT_EXAMPLES
3000
3128
  ? {}
3001
3129
  : {
@@ -3319,7 +3447,7 @@ export const OPERATIONS = [
3319
3447
  ? {}
3320
3448
  : {
3321
3449
  limits: {
3322
- inlinePayloadBytes: 65536,
3450
+ inlinePayloadBytes: CONFIGURATION_DEFAULTS.inlinePayloadBytes,
3323
3451
  forecastHorizonSeconds: 90000,
3324
3452
  usageWindowDays: 366,
3325
3453
  },
@@ -3394,10 +3522,42 @@ export const OPERATIONS = [
3394
3522
  creates: false,
3395
3523
  description: globalThis.GREATWAIT_RUNTIME_CONTRACTS_ONLY
3396
3524
  ? ""
3397
- : "Reads the verified principal's project timing cohort over the authoritative rolling 24-hour due-time window. Exact 5,000ms and 15,000ms counters include eligible work that has not fired; customer blocks, platform blocks, skipped work and missing evidence stay visible beside the verdict. Values equal to a target meet it, and a threshold with no matured population is unknown. Delivered-sample p95 and p99 lateness are separate observations, including negative early-delivery defects. These are internal operating objectives, not a contractual SLA or service-credit promise.",
3525
+ : "Reads the verified principal's project timing cohort over the authoritative rolling 24-hour due-time window. Policy timing-v2-service-bands judges each run from its original plannedFor against its occurrence service band's p95 first-outbound target: realtime 1,000ms, short_bulk 10,000ms, bulk 60,000ms. bandTargets contains the exact per-band counts and 95% verdicts; targets retains the 5,000ms (95%) and 15,000ms (99%) counters for legacy rows with no band only. All counters include eligible work that has not fired; customer blocks, platform blocks, skipped work and missing evidence stay visible beside the verdict. Values equal to a target meet it, and a threshold with no matured population is unknown. Delivered-sample p95 and p99 lateness are separate observations, including negative early-delivery defects. These are internal operating objectives, not a contractual SLA or service-credit promise.",
3398
3526
  example: globalThis.GREATWAIT_RUNTIME_WITHOUT_EXAMPLES
3399
3527
  ? {}
3400
3528
  : {
3529
+ bandTargets: [
3530
+ {
3531
+ serviceBand: "realtime",
3532
+ targetMs: 1_000,
3533
+ breachCount: 0,
3534
+ customerBlockedCount: 0,
3535
+ eligibleOutstandingBreachCount: 0,
3536
+ maturedCount: 0,
3537
+ verdict: "unknown",
3538
+ withinTargetCount: 0,
3539
+ },
3540
+ {
3541
+ serviceBand: "short_bulk",
3542
+ targetMs: 10_000,
3543
+ breachCount: 0,
3544
+ customerBlockedCount: 0,
3545
+ eligibleOutstandingBreachCount: 0,
3546
+ maturedCount: 0,
3547
+ verdict: "unknown",
3548
+ withinTargetCount: 0,
3549
+ },
3550
+ {
3551
+ serviceBand: "bulk",
3552
+ targetMs: 60_000,
3553
+ breachCount: 0,
3554
+ customerBlockedCount: 0,
3555
+ eligibleOutstandingBreachCount: 0,
3556
+ maturedCount: 0,
3557
+ verdict: "unknown",
3558
+ withinTargetCount: 0,
3559
+ },
3560
+ ],
3401
3561
  customerBlockedCount: 2,
3402
3562
  deliveredSampleCount: 98,
3403
3563
  freshness: { kind: "authoritative" },
@@ -3405,7 +3565,7 @@ export const OPERATIONS = [
3405
3565
  p95LatenessMs: 4_200,
3406
3566
  p99LatenessMs: 12_000,
3407
3567
  platformBlockedCount: 1,
3408
- policyVersion: "timing-v1",
3568
+ policyVersion: "timing-v2-service-bands",
3409
3569
  skippedCount: 3,
3410
3570
  targets: [
3411
3571
  {
@@ -3545,7 +3705,7 @@ export const OPERATIONS = [
3545
3705
  creates: false,
3546
3706
  description: globalThis.GREATWAIT_RUNTIME_CONTRACTS_ONLY
3547
3707
  ? ""
3548
- : "Lists every retained occurrence in the verified principal's project and environment, newest first by planned instant with the occurrence identifier breaking millisecond ties. Optional endpoint, schedule, half-open date-range and outcome filters may be combined; the endpoint is resolved through the schedules that belong to the same authority. The opaque cursor belongs to this operation and the exact normalized filters that issued it, so it cannot be replayed under another view. Every page publishes the authoritative earliest retained instant for the caller's effective plan. Each item is metadata only: callback payloads, destinations, response bodies and signing material have no field in the response.",
3708
+ : "Lists retained occurrences in the verified principal's project and environment one page at a time, newest first by planned instant with the occurrence identifier breaking millisecond ties; follow `nextCursor` until it is absent before counting or ranking. The `outcome` filter is applied after a bounded read, so a page can come back short, or empty, and still carry `nextCursor`: keep following it. Optional endpoint, schedule, half-open date-range and outcome filters may be combined; the endpoint is resolved through the schedules that belong to the same authority. The opaque cursor belongs to this operation and the exact normalized filters that issued it, so it cannot be replayed under another view. Every page publishes the authoritative earliest retained instant for the caller's effective plan. Each item carries its schedule's name as `scheduleName`, so a page of runs needs no schedule read per row. Each item is metadata only: callback payloads, destinations, response bodies and signing material have no field in the response.",
3549
3709
  example: globalThis.GREATWAIT_RUNTIME_WITHOUT_EXAMPLES
3550
3710
  ? {}
3551
3711
  : {
@@ -3556,6 +3716,7 @@ export const OPERATIONS = [
3556
3716
  id: "occ_01h8xyz9k2m4n6p8r0t2v4w6y8",
3557
3717
  plannedFor: "2026-07-28T15:00:00.000Z",
3558
3718
  schedule: "sch_01h8xyz9k2m4n6p8r0t2v4w6y8",
3719
+ scheduleName: "Nightly report",
3559
3720
  sequence: 1,
3560
3721
  settledAt: "2026-07-28T15:00:01.000Z",
3561
3722
  state: "succeeded",
@@ -3587,7 +3748,7 @@ export const OPERATIONS = [
3587
3748
  creates: false,
3588
3749
  description: globalThis.GREATWAIT_RUNTIME_CONTRACTS_ONLY
3589
3750
  ? ""
3590
- : "Reads one retained occurrence from the PostgreSQL authority that owns its schedule. Trusted first-outbound timing is optional for records that predate substantiation; when present, firstAttemptLatenessMs is signed and a negative value exposes an early-delivery defect rather than being clamped to zero. Timing eligibility states whether a customer restriction excluded the occurrence from the internal target cohort. An identifier outside the verified principal's organization, project or environment is indistinguishable from an absent occurrence.",
3751
+ : "Reads one retained occurrence from the PostgreSQL authority that owns its schedule. Trusted first-outbound timing is optional for records that predate substantiation; when present, firstAttemptLatenessMs is signed and a negative value exposes an early-delivery defect rather than being clamped to zero. Timing eligibility states whether a customer restriction excluded the occurrence from the internal target cohort. An identifier outside the verified principal's organization, project or environment is indistinguishable from an absent occurrence. timingPolicyVersion is timing-v2-service-bands when first-outbound evidence is recorded for a banded occurrence; legacy null-band occurrences retain their recorded policy (including payg-v1) and the 5,000ms/15,000ms thresholds.",
3591
3752
  example: globalThis.GREATWAIT_RUNTIME_WITHOUT_EXAMPLES
3592
3753
  ? {}
3593
3754
  : {
@@ -3629,7 +3790,7 @@ export const OPERATIONS = [
3629
3790
  creates: false,
3630
3791
  description: globalThis.GREATWAIT_RUNTIME_CONTRACTS_ONLY
3631
3792
  ? ""
3632
- : "Search all retained delivery attempts by actual startedAt in the required UTC interval [startedFrom, startedBefore), newest first with attempt ID breaking ties. Combine HTTP responseStatus, statusClass, attempt outcome or diagnostic, endpoint, schedule and exact host identifier/tag filters. The matched attempt outcome remains searchable after recovery; occurrence.state is its current outcome. Follow schedule and occurrence IDs to retained details and attempts.list for the complete retry chain. Only safe metadata is returned. Retention horizons describe normal plan history and attempt-detail limits; absence after expiry is not evidence that a delivery never happened. Unavailable queries fail explicitly. Cursors are bound to the verified authority and every selected filter.",
3793
+ : "Search retained delivery attempts one page at a time by actual startedAt in the required UTC interval [startedFrom, startedBefore), newest first with attempt ID breaking ties; follow `nextCursor` until it is absent before counting. The `outcome` and `diagnostic` filters are applied after a bounded read, so a page can come back short, or empty, and still carry `nextCursor`: keep following it. Combine HTTP responseStatus, statusClass, attempt outcome or diagnostic, endpoint, schedule and exact host identifier/tag filters. The matched attempt outcome remains searchable after recovery; occurrence.state is its current outcome. Follow schedule and occurrence IDs to retained details and attempts.list for the complete retry chain. Only safe metadata is returned. Retention horizons describe normal plan history and attempt-detail limits; absence after expiry is not evidence that a delivery never happened. Unavailable queries fail explicitly. Cursors are bound to the verified authority and every selected filter.",
3633
3794
  example: globalThis.GREATWAIT_RUNTIME_WITHOUT_EXAMPLES
3634
3795
  ? {}
3635
3796
  : {
@@ -3693,7 +3854,7 @@ export const OPERATIONS = [
3693
3854
  creates: false,
3694
3855
  description: globalThis.GREATWAIT_RUNTIME_CONTRACTS_ONLY
3695
3856
  ? ""
3696
- : "Lists the immutable attempts retained under one occurrence, ordered by start instant and attempt identifier so equal timestamps have a stable position. The PostgreSQL authority answers every page. Optional first-outbound fields carry trusted occurrence timing and its pinned policy; absence means unknown, never zero. Results expose only bounded outcome, response-status, duration, timing, diagnostic, remediation and redelivery-cause metadata; callback payloads, response bodies, destinations, signing material, secrets and transport traces are structurally absent.",
3857
+ : "Lists the immutable attempts retained under one occurrence, ordered by start instant and attempt identifier so equal timestamps have a stable position. The PostgreSQL authority answers every page. Optional first-outbound fields carry trusted occurrence timing and its pinned policy; absence means unknown, never zero. Results expose only bounded outcome, response-status, duration, timing, diagnostic, remediation and redelivery-cause metadata; callback payloads, response bodies, destinations, signing material, secrets and transport traces are structurally absent. timingPolicyVersion is timing-v2-service-bands when first-outbound evidence is recorded for a banded occurrence; legacy null-band occurrences retain their recorded policy (including payg-v1) and the 5,000ms/15,000ms thresholds.",
3697
3858
  example: globalThis.GREATWAIT_RUNTIME_WITHOUT_EXAMPLES
3698
3859
  ? {}
3699
3860
  : {
@@ -3745,7 +3906,7 @@ export const OPERATIONS = [
3745
3906
  creates: false,
3746
3907
  description: globalThis.GREATWAIT_RUNTIME_CONTRACTS_ONLY
3747
3908
  ? ""
3748
- : "Reads one immutable delivery attempt from its occurrence's PostgreSQL authority. Ambiguous means the receiver may have acted and is never rewritten into certainty without durable result evidence. Optional first-outbound fields come only from trusted transport evidence and absence means unknown, never zero. The bounded response omits callback payloads, response bodies, destinations, signing material, secrets and raw transport failures by construction.",
3909
+ : "Reads one immutable delivery attempt from its occurrence's PostgreSQL authority. Ambiguous means the receiver may have acted and is never rewritten into certainty without durable result evidence. Optional first-outbound fields come only from trusted transport evidence and absence means unknown, never zero. The bounded response omits callback payloads, response bodies, destinations, signing material, secrets and raw transport failures by construction. timingPolicyVersion is timing-v2-service-bands when first-outbound evidence is recorded for a banded occurrence; legacy null-band occurrences retain their recorded policy (including payg-v1) and the 5,000ms/15,000ms thresholds.",
3749
3910
  example: globalThis.GREATWAIT_RUNTIME_WITHOUT_EXAMPLES
3750
3911
  ? {}
3751
3912
  : {
@@ -15,21 +15,35 @@ export declare const notificationEmailSettingsSchema: import("zod").ZodObject<{
15
15
  memberIds: import("zod").ZodArray<import("zod").ZodString>;
16
16
  }, import("zod/v4/core").$strict>], "kind">;
17
17
  scheduleKinds: import("zod").ZodEnum<{
18
+ recurring: "recurring";
18
19
  both: "both";
19
20
  "one-shot": "one-shot";
20
- recurring: "recurring";
21
21
  }>;
22
22
  }, import("zod/v4/core").$strict>;
23
23
  export declare const statusWebhookEventSchema: import("zod").ZodEnum<{
24
24
  failed: "failed";
25
25
  }>;
26
26
  export type StatusWebhookEvent = z.infer<typeof statusWebhookEventSchema>;
27
+ /**
28
+ * The earlier configuration: a bare URL. Still accepted (W9-84): the endpoint
29
+ * at that URL is found or created, as endpoints.ensure does, and linked.
30
+ */
27
31
  export declare const statusWebhookConfigurationSchema: import("zod").ZodObject<{
28
32
  url: import("zod").ZodString;
29
33
  events: import("zod").ZodArray<import("zod").ZodEnum<{
30
34
  failed: "failed";
31
35
  }>>;
32
36
  }, import("zod/v4/core").$strict>;
37
+ /**
38
+ * The status webhook's destination (W9-84): a callback endpoint in this
39
+ * project and environment, whose URL, headers and signing keys apply.
40
+ */
41
+ export declare const statusWebhookEndpointConfigurationSchema: import("zod").ZodObject<{
42
+ endpoint: import("zod").ZodString;
43
+ events: import("zod").ZodArray<import("zod").ZodEnum<{
44
+ failed: "failed";
45
+ }>>;
46
+ }, import("zod/v4/core").$strict>;
33
47
  export declare const projectNotificationSettingsSchema: import("zod").ZodObject<{
34
48
  project: import("zod").ZodString;
35
49
  environmentKind: import("zod").ZodEnum<{
@@ -46,9 +60,9 @@ export declare const projectNotificationSettingsSchema: import("zod").ZodObject<
46
60
  memberIds: import("zod").ZodArray<import("zod").ZodString>;
47
61
  }, import("zod/v4/core").$strict>], "kind">;
48
62
  scheduleKinds: import("zod").ZodEnum<{
63
+ recurring: "recurring";
49
64
  both: "both";
50
65
  "one-shot": "one-shot";
51
- recurring: "recurring";
52
66
  }>;
53
67
  }, import("zod/v4/core").$strict>;
54
68
  statusWebhook: import("zod").ZodOptional<import("zod").ZodObject<{
@@ -56,6 +70,7 @@ export declare const projectNotificationSettingsSchema: import("zod").ZodObject<
56
70
  events: import("zod").ZodArray<import("zod").ZodEnum<{
57
71
  failed: "failed";
58
72
  }>>;
73
+ endpoint: import("zod").ZodOptional<import("zod").ZodString>;
59
74
  signingKey: import("zod").ZodOptional<import("zod").ZodObject<{
60
75
  id: import("zod").ZodString;
61
76
  }, import("zod/v4/core").$strict>>;
@@ -74,17 +89,22 @@ export declare const projectNotificationSettingsUpdateRequestSchema: import("zod
74
89
  memberIds: import("zod").ZodArray<import("zod").ZodString>;
75
90
  }, import("zod/v4/core").$strict>], "kind">;
76
91
  scheduleKinds: import("zod").ZodEnum<{
92
+ recurring: "recurring";
77
93
  both: "both";
78
94
  "one-shot": "one-shot";
79
- recurring: "recurring";
80
95
  }>;
81
96
  }, import("zod/v4/core").$strict>>;
82
- statusWebhook: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodObject<{
97
+ statusWebhook: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodUnion<readonly [import("zod").ZodObject<{
98
+ endpoint: import("zod").ZodString;
99
+ events: import("zod").ZodArray<import("zod").ZodEnum<{
100
+ failed: "failed";
101
+ }>>;
102
+ }, import("zod/v4/core").$strict>, import("zod").ZodObject<{
83
103
  url: import("zod").ZodString;
84
104
  events: import("zod").ZodArray<import("zod").ZodEnum<{
85
105
  failed: "failed";
86
106
  }>>;
87
- }, import("zod/v4/core").$strict>>>;
107
+ }, import("zod/v4/core").$strict>]>>>;
88
108
  }, import("zod/v4/core").$strict>;
89
109
  export type ProjectNotificationSettingsUpdateRequest = z.infer<typeof projectNotificationSettingsUpdateRequestSchema>;
90
110
  export declare const statusSigningKeyRequestSchema: import("zod").ZodObject<{
@@ -107,9 +127,9 @@ export declare const statusSigningKeyCreatedSchema: import("zod").ZodObject<{
107
127
  memberIds: import("zod").ZodArray<import("zod").ZodString>;
108
128
  }, import("zod/v4/core").$strict>], "kind">;
109
129
  scheduleKinds: import("zod").ZodEnum<{
130
+ recurring: "recurring";
110
131
  both: "both";
111
132
  "one-shot": "one-shot";
112
- recurring: "recurring";
113
133
  }>;
114
134
  }, import("zod/v4/core").$strict>;
115
135
  statusWebhook: import("zod").ZodOptional<import("zod").ZodObject<{
@@ -117,6 +137,7 @@ export declare const statusSigningKeyCreatedSchema: import("zod").ZodObject<{
117
137
  events: import("zod").ZodArray<import("zod").ZodEnum<{
118
138
  failed: "failed";
119
139
  }>>;
140
+ endpoint: import("zod").ZodOptional<import("zod").ZodString>;
120
141
  signingKey: import("zod").ZodOptional<import("zod").ZodObject<{
121
142
  id: import("zod").ZodString;
122
143
  }, import("zod/v4/core").$strict>>;
@@ -215,17 +236,22 @@ export declare const PROJECT_NOTIFICATION_OPERATIONS: readonly [import("./operat
215
236
  memberIds: import("zod").ZodArray<import("zod").ZodString>;
216
237
  }, import("zod/v4/core").$strict>], "kind">;
217
238
  scheduleKinds: import("zod").ZodEnum<{
239
+ recurring: "recurring";
218
240
  both: "both";
219
241
  "one-shot": "one-shot";
220
- recurring: "recurring";
221
242
  }>;
222
243
  }, import("zod/v4/core").$strict>>;
223
- statusWebhook: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodObject<{
244
+ statusWebhook: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodUnion<readonly [import("zod").ZodObject<{
245
+ endpoint: import("zod").ZodString;
246
+ events: import("zod").ZodArray<import("zod").ZodEnum<{
247
+ failed: "failed";
248
+ }>>;
249
+ }, import("zod/v4/core").$strict>, import("zod").ZodObject<{
224
250
  url: import("zod").ZodString;
225
251
  events: import("zod").ZodArray<import("zod").ZodEnum<{
226
252
  failed: "failed";
227
253
  }>>;
228
- }, import("zod/v4/core").$strict>>>;
254
+ }, import("zod/v4/core").$strict>]>>>;
229
255
  }, import("zod/v4/core").$strict>;
230
256
  }, import("./operations.js").OperationDefinition & {
231
257
  readonly id: "projectnotifications.rotateSigningKey";