@greatwait/contracts 0.1.0-alpha.3 → 0.1.0-alpha.4

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 (299) hide show
  1. package/README.md +11 -9
  2. package/dist/authority.d.ts +33 -27
  3. package/dist/authority.js +12 -2
  4. package/dist/billing.d.ts +1001 -0
  5. package/dist/billing.js +684 -0
  6. package/dist/callback-safety.d.ts +2 -2
  7. package/dist/callback-safety.js +2 -2
  8. package/dist/compatibility.d.ts +3 -3
  9. package/dist/compatibility.js +1 -1
  10. package/dist/data-export.d.ts +67 -0
  11. package/dist/data-export.js +182 -0
  12. package/dist/endpoints.d.ts +181 -240
  13. package/dist/endpoints.js +77 -81
  14. package/dist/events.d.ts +17 -17
  15. package/dist/events.js +1 -1
  16. package/dist/first-value-journey.d.ts +49 -55
  17. package/dist/first-value-journey.js +6 -13
  18. package/dist/forecast.d.ts +71 -71
  19. package/dist/forecast.js +1 -1
  20. package/dist/identifiers.d.ts +20 -20
  21. package/dist/identifiers.js +1 -1
  22. package/dist/identity.d.ts +41 -37
  23. package/dist/identity.js +5 -4
  24. package/dist/index.d.ts +10 -5
  25. package/dist/index.js +10 -5
  26. package/dist/mcp.d.ts +21 -19
  27. package/dist/mcp.js +1 -1
  28. package/dist/naming.d.ts +45 -0
  29. package/dist/naming.js +159 -0
  30. package/dist/oauth.d.ts +186 -172
  31. package/dist/oauth.js +1 -1
  32. package/dist/operation-definitions.d.ts +9 -0
  33. package/dist/operation-definitions.js +7 -0
  34. package/dist/operations.d.ts +4162 -2171
  35. package/dist/operations.js +2679 -908
  36. package/dist/organization-lifecycle.d.ts +34 -0
  37. package/dist/organization-lifecycle.js +122 -0
  38. package/dist/partition.d.ts +26 -0
  39. package/dist/policy.d.ts +4 -4
  40. package/dist/policy.js +9 -5
  41. package/dist/problems.d.ts +32 -26
  42. package/dist/problems.js +6 -2
  43. package/dist/protocol.d.ts +204 -75
  44. package/dist/protocol.js +108 -36
  45. package/dist/scheduling-records.d.ts +343 -285
  46. package/dist/scheduling-records.js +1 -1
  47. package/dist/scheduling.d.ts +670 -360
  48. package/dist/scheduling.js +382 -56
  49. package/dist/secrets.d.ts +119 -105
  50. package/dist/secrets.js +1 -1
  51. package/dist/signatures.d.ts +74 -74
  52. package/dist/signatures.js +1 -1
  53. package/dist/tenancy.d.ts +142 -68
  54. package/dist/tenancy.js +70 -17
  55. package/dist/test-sink.d.ts +127 -127
  56. package/dist/test-sink.js +1 -1
  57. package/dist/time.d.ts +4 -4
  58. package/dist/time.js +1 -1
  59. package/dist/timing.d.ts +65 -0
  60. package/dist/timing.js +82 -0
  61. package/dist/usage.d.ts +103 -47
  62. package/dist/usage.js +197 -31
  63. package/dist/workspace.d.ts +34 -34
  64. package/dist/workspace.js +1 -1
  65. package/dist/zod-values.d.ts +3 -0
  66. package/dist/zod-values.js +2 -0
  67. package/dist/zod.d.ts +2 -0
  68. package/dist/zod.js +2 -0
  69. package/generated/v1/examples/attempts.list.response.json +4 -0
  70. package/generated/v1/examples/attempts.read.response.json +4 -0
  71. package/generated/v1/examples/billing.autotopup.request.json +5 -0
  72. package/generated/v1/examples/billing.autotopup.response.json +120 -0
  73. package/generated/v1/examples/billing.autotopuppreview.request.json +19 -0
  74. package/generated/v1/examples/billing.autotopuppreview.response.json +45 -0
  75. package/generated/v1/examples/billing.budgets.request.json +13 -0
  76. package/generated/v1/examples/billing.budgets.response.json +22 -0
  77. package/generated/v1/examples/billing.ceiling.request.json +8 -0
  78. package/generated/v1/examples/billing.ceiling.response.json +120 -0
  79. package/generated/v1/examples/billing.change.request.json +5 -0
  80. package/generated/v1/examples/billing.change.response.json +12 -0
  81. package/generated/v1/examples/billing.funding.response.json +120 -0
  82. package/generated/v1/examples/billing.fundingquote.request.json +7 -0
  83. package/generated/v1/examples/billing.fundingquote.response.json +13 -0
  84. package/generated/v1/examples/billing.ledger.response.json +23 -0
  85. package/generated/v1/examples/billing.notices.response.json +41 -0
  86. package/generated/v1/examples/billing.notificationsettings.response.json +17 -0
  87. package/generated/v1/examples/billing.notificationsettingsupdate.request.json +9 -0
  88. package/generated/v1/examples/billing.notificationsettingsupdate.response.json +17 -0
  89. package/generated/v1/examples/billing.portal.response.json +3 -0
  90. package/generated/v1/examples/billing.projects.response.json +12 -0
  91. package/generated/v1/examples/billing.purchase.request.json +5 -0
  92. package/generated/v1/examples/billing.purchase.response.json +120 -0
  93. package/generated/v1/examples/billing.quote.request.json +4 -0
  94. package/generated/v1/examples/billing.quote.response.json +19 -0
  95. package/generated/v1/examples/billing.reconcile.response.json +73 -0
  96. package/generated/v1/examples/billing.refundrequest.request.json +10 -0
  97. package/generated/v1/examples/billing.refundrequest.response.json +11 -0
  98. package/generated/v1/examples/billing.refundresolution.request.json +4 -0
  99. package/generated/v1/examples/billing.refundresolution.response.json +120 -0
  100. package/generated/v1/examples/billing.summary.response.json +73 -0
  101. package/generated/v1/examples/endpoints.acknowledgeSigningKeyRotation.response.json +18 -0
  102. package/generated/v1/examples/endpoints.create.response.json +1 -1
  103. package/generated/v1/examples/endpoints.disable.response.json +0 -1
  104. package/generated/v1/examples/{endpoints.verify.response.json → endpoints.enable.response.json} +4 -5
  105. package/generated/v1/examples/endpoints.list.response.json +1 -2
  106. package/generated/v1/examples/endpoints.read.response.json +2 -2
  107. package/generated/v1/examples/endpoints.revealSigningSecret.response.json +7 -0
  108. package/generated/v1/examples/endpoints.rotateSigningKey.response.json +1 -2
  109. package/generated/v1/examples/endpoints.update.response.json +1 -1
  110. package/generated/v1/examples/executions.list.response.json +20 -0
  111. package/generated/v1/examples/exports.cancel.response.json +11 -0
  112. package/generated/v1/examples/exports.create.request.json +1 -0
  113. package/generated/v1/examples/exports.create.response.json +8 -0
  114. package/generated/v1/examples/exports.part.response.json +5 -0
  115. package/generated/v1/examples/exports.read.response.json +8 -0
  116. package/generated/v1/examples/occurrences.read.response.json +4 -0
  117. package/generated/v1/examples/organizations.close.request.json +5 -0
  118. package/generated/v1/examples/organizations.close.response.json +10 -0
  119. package/generated/v1/examples/organizations.lifecycle.response.json +10 -0
  120. package/generated/v1/examples/organizations.restore.request.json +3 -0
  121. package/generated/v1/examples/organizations.restore.response.json +10 -0
  122. package/generated/v1/examples/projects.archive.request.json +3 -0
  123. package/generated/v1/examples/projects.archive.response.json +14 -0
  124. package/generated/v1/examples/projects.create.response.json +10 -1
  125. package/generated/v1/examples/projects.delete.response.json +9 -0
  126. package/generated/v1/examples/projects.list.response.json +12 -2
  127. package/generated/v1/examples/projects.rename.request.json +3 -0
  128. package/generated/v1/examples/projects.rename.response.json +14 -0
  129. package/generated/v1/examples/schedules.archive.response.json +3 -0
  130. package/generated/v1/examples/schedules.cancel.response.json +3 -0
  131. package/generated/v1/examples/schedules.create.request.json +4 -0
  132. package/generated/v1/examples/schedules.create.response.json +3 -0
  133. package/generated/v1/examples/schedules.list.response.json +3 -0
  134. package/generated/v1/examples/schedules.pause.response.json +3 -0
  135. package/generated/v1/examples/schedules.read.response.json +6 -0
  136. package/generated/v1/examples/schedules.replace.request.json +4 -0
  137. package/generated/v1/examples/schedules.replace.response.json +3 -0
  138. package/generated/v1/examples/schedules.resume.response.json +3 -0
  139. package/generated/v1/examples/timing.summary.response.json +35 -0
  140. package/generated/v1/examples/usage.read.response.json +1 -0
  141. package/generated/v1/first-value-journey.json +19 -10
  142. package/generated/v1/manifest.json +936 -23
  143. package/generated/v1/openapi.json +29983 -5784
  144. package/generated/v1/policy-matrix.json +278 -47
  145. package/generated/v1/schemas/attempts.list.response.json +24 -1
  146. package/generated/v1/schemas/attempts.read.response.json +24 -1
  147. package/generated/v1/schemas/billing.autotopup.request-headers.json +13 -0
  148. package/generated/v1/schemas/billing.autotopup.request.json +22 -0
  149. package/generated/v1/schemas/billing.autotopup.response-headers.json +10 -0
  150. package/generated/v1/schemas/billing.autotopup.response.json +552 -0
  151. package/generated/v1/schemas/billing.autotopuppreview.request.json +77 -0
  152. package/generated/v1/schemas/billing.autotopuppreview.response.json +277 -0
  153. package/generated/v1/schemas/billing.budgets.request-headers.json +13 -0
  154. package/generated/v1/schemas/billing.budgets.request.json +66 -0
  155. package/generated/v1/schemas/billing.budgets.response-headers.json +10 -0
  156. package/generated/v1/schemas/billing.budgets.response.json +92 -0
  157. package/generated/v1/schemas/billing.ceiling.request-headers.json +13 -0
  158. package/generated/v1/schemas/billing.ceiling.request.json +40 -0
  159. package/generated/v1/schemas/billing.ceiling.response-headers.json +10 -0
  160. package/generated/v1/schemas/billing.ceiling.response.json +552 -0
  161. package/generated/v1/schemas/billing.change.request-headers.json +13 -0
  162. package/generated/v1/schemas/billing.change.request.json +22 -0
  163. package/generated/v1/schemas/billing.change.response.json +119 -0
  164. package/generated/v1/schemas/billing.funding.response.json +552 -0
  165. package/generated/v1/schemas/billing.fundingquote.request.json +28 -0
  166. package/generated/v1/schemas/billing.fundingquote.response.json +61 -0
  167. package/generated/v1/schemas/billing.ledger.query.json +16 -0
  168. package/generated/v1/schemas/billing.ledger.response.json +125 -0
  169. package/generated/v1/schemas/billing.notices.query.json +16 -0
  170. package/generated/v1/schemas/billing.notices.response.json +278 -0
  171. package/generated/v1/schemas/billing.notificationsettings.response.json +70 -0
  172. package/generated/v1/schemas/billing.notificationsettingsupdate.request-headers.json +13 -0
  173. package/generated/v1/schemas/billing.notificationsettingsupdate.request.json +36 -0
  174. package/generated/v1/schemas/billing.notificationsettingsupdate.response-headers.json +10 -0
  175. package/generated/v1/schemas/billing.notificationsettingsupdate.response.json +70 -0
  176. package/generated/v1/schemas/billing.portal.response.json +11 -0
  177. package/generated/v1/schemas/billing.projects.response.json +119 -0
  178. package/generated/v1/schemas/billing.purchase.request-headers.json +13 -0
  179. package/generated/v1/schemas/billing.purchase.request.json +22 -0
  180. package/generated/v1/schemas/billing.purchase.response-headers.json +10 -0
  181. package/generated/v1/schemas/billing.purchase.response.json +552 -0
  182. package/generated/v1/schemas/billing.quote.request.json +20 -0
  183. package/generated/v1/schemas/billing.quote.response.json +86 -0
  184. package/generated/v1/schemas/billing.reconcile.response.json +468 -0
  185. package/generated/v1/schemas/billing.refundrequest.request-headers.json +13 -0
  186. package/generated/v1/schemas/billing.refundrequest.request.json +42 -0
  187. package/generated/v1/schemas/billing.refundrequest.response-headers.json +10 -0
  188. package/generated/v1/schemas/billing.refundrequest.response.json +45 -0
  189. package/generated/v1/schemas/billing.refundresolution.request-headers.json +13 -0
  190. package/generated/v1/schemas/billing.refundresolution.request.json +61 -0
  191. package/generated/v1/schemas/billing.refundresolution.response-headers.json +10 -0
  192. package/generated/v1/schemas/billing.refundresolution.response.json +552 -0
  193. package/generated/v1/schemas/billing.summary.response.json +468 -0
  194. package/generated/v1/schemas/context.read.response.json +2 -0
  195. package/generated/v1/schemas/credentials.connection.response.json +2 -0
  196. package/generated/v1/schemas/credentials.create.request.json +2 -0
  197. package/generated/v1/schemas/credentials.create.response.json +2 -0
  198. package/generated/v1/schemas/credentials.list.response.json +2 -0
  199. package/generated/v1/schemas/credentials.revoke.response.json +2 -0
  200. package/generated/v1/schemas/credentials.rotate.response.json +4 -0
  201. package/generated/v1/schemas/{endpoints.verify.request-headers.json → endpoints.acknowledgeSigningKeyRotation.request-headers.json} +2 -1
  202. package/generated/v1/schemas/{endpoints.verify.response.json → endpoints.acknowledgeSigningKeyRotation.response.json} +8 -21
  203. package/generated/v1/schemas/endpoints.create.request.json +5 -0
  204. package/generated/v1/schemas/endpoints.create.response.json +8 -21
  205. package/generated/v1/schemas/endpoints.disable.response.json +8 -21
  206. package/generated/v1/schemas/endpoints.enable.response-headers.json +11 -0
  207. package/generated/v1/schemas/endpoints.enable.response.json +87 -0
  208. package/generated/v1/schemas/endpoints.list.response.json +8 -21
  209. package/generated/v1/schemas/endpoints.read.response.json +8 -21
  210. package/generated/v1/schemas/endpoints.revealSigningSecret.response.json +43 -0
  211. package/generated/v1/schemas/endpoints.rotateSigningKey.response.json +8 -21
  212. package/generated/v1/schemas/endpoints.update.request.json +5 -0
  213. package/generated/v1/schemas/endpoints.update.response.json +8 -21
  214. package/generated/v1/schemas/executions.list.query.json +46 -0
  215. package/generated/v1/schemas/executions.list.response.json +116 -0
  216. package/generated/v1/schemas/exports.cancel.response.json +48 -0
  217. package/generated/v1/schemas/exports.create.request.json +6 -0
  218. package/generated/v1/schemas/exports.create.response.json +38 -0
  219. package/generated/v1/schemas/exports.part.query.json +11 -0
  220. package/generated/v1/schemas/exports.part.response.json +22 -0
  221. package/generated/v1/schemas/exports.read.response.json +38 -0
  222. package/generated/v1/schemas/grants.list.response.json +2 -0
  223. package/generated/v1/schemas/grants.revoke.response.json +2 -0
  224. package/generated/v1/schemas/occurrences.list.query.json +5 -0
  225. package/generated/v1/schemas/occurrences.list.response.json +23 -0
  226. package/generated/v1/schemas/occurrences.read.response.json +23 -0
  227. package/generated/v1/schemas/occurrences.redeliver.response.json +24 -1
  228. package/generated/v1/schemas/organizations.close.request.json +20 -0
  229. package/generated/v1/schemas/organizations.close.response.json +68 -0
  230. package/generated/v1/schemas/organizations.lifecycle.response.json +68 -0
  231. package/generated/v1/schemas/organizations.restore.request.json +13 -0
  232. package/generated/v1/schemas/organizations.restore.response.json +68 -0
  233. package/generated/v1/schemas/projects.archive.request-headers.json +11 -0
  234. package/generated/v1/schemas/projects.archive.request.json +10 -0
  235. package/generated/v1/schemas/projects.archive.response-headers.json +11 -0
  236. package/generated/v1/schemas/projects.archive.response.json +79 -0
  237. package/generated/v1/schemas/projects.create.response.json +55 -1
  238. package/generated/v1/schemas/projects.delete.request-headers.json +11 -0
  239. package/generated/v1/schemas/projects.delete.response.json +37 -0
  240. package/generated/v1/schemas/projects.list.response.json +61 -2
  241. package/generated/v1/schemas/projects.rename.request-headers.json +11 -0
  242. package/generated/v1/schemas/projects.rename.request.json +12 -0
  243. package/generated/v1/schemas/projects.rename.response-headers.json +11 -0
  244. package/generated/v1/schemas/projects.rename.response.json +79 -0
  245. package/generated/v1/schemas/schedules.archive.response.json +90 -2
  246. package/generated/v1/schemas/schedules.cancel.response.json +90 -2
  247. package/generated/v1/schemas/schedules.create.request.json +24 -3
  248. package/generated/v1/schemas/schedules.create.response.json +90 -2
  249. package/generated/v1/schemas/schedules.list.query.json +13 -0
  250. package/generated/v1/schemas/schedules.list.response.json +67 -2
  251. package/generated/v1/schemas/schedules.pause.response.json +90 -2
  252. package/generated/v1/schemas/schedules.read.response.json +90 -2
  253. package/generated/v1/schemas/schedules.replace.request.json +24 -3
  254. package/generated/v1/schemas/schedules.replace.response.json +90 -2
  255. package/generated/v1/schemas/schedules.resume.response.json +90 -2
  256. package/generated/v1/schemas/timing.summary.response.json +191 -0
  257. package/generated/v1/schemas/usage.read.query.json +7 -0
  258. package/generated/v1/schemas/usage.read.response.json +36 -1
  259. package/generated/v1/snippets/billing.autotopup.json +6 -0
  260. package/generated/v1/snippets/billing.autotopuppreview.json +6 -0
  261. package/generated/v1/snippets/billing.budgets.json +6 -0
  262. package/generated/v1/snippets/billing.ceiling.json +6 -0
  263. package/generated/v1/snippets/billing.change.json +6 -0
  264. package/generated/v1/snippets/billing.funding.json +6 -0
  265. package/generated/v1/snippets/billing.fundingquote.json +6 -0
  266. package/generated/v1/snippets/billing.ledger.json +6 -0
  267. package/generated/v1/snippets/billing.notices.json +6 -0
  268. package/generated/v1/snippets/billing.notificationsettings.json +6 -0
  269. package/generated/v1/snippets/billing.notificationsettingsupdate.json +6 -0
  270. package/generated/v1/snippets/billing.portal.json +6 -0
  271. package/generated/v1/snippets/billing.projects.json +6 -0
  272. package/generated/v1/snippets/billing.purchase.json +6 -0
  273. package/generated/v1/snippets/billing.quote.json +6 -0
  274. package/generated/v1/snippets/billing.reconcile.json +6 -0
  275. package/generated/v1/snippets/billing.refundrequest.json +6 -0
  276. package/generated/v1/snippets/billing.refundresolution.json +6 -0
  277. package/generated/v1/snippets/billing.summary.json +6 -0
  278. package/generated/v1/snippets/endpoints.acknowledgeSigningKeyRotation.json +6 -0
  279. package/generated/v1/snippets/{endpoints.verify.json → endpoints.enable.json} +3 -3
  280. package/generated/v1/snippets/endpoints.revealSigningSecret.json +6 -0
  281. package/generated/v1/snippets/executions.list.json +6 -0
  282. package/generated/v1/snippets/exports.cancel.json +6 -0
  283. package/generated/v1/snippets/exports.create.json +6 -0
  284. package/generated/v1/snippets/exports.part.json +6 -0
  285. package/generated/v1/snippets/exports.read.json +6 -0
  286. package/generated/v1/snippets/organizations.close.json +6 -0
  287. package/generated/v1/snippets/organizations.lifecycle.json +6 -0
  288. package/generated/v1/snippets/organizations.restore.json +6 -0
  289. package/generated/v1/snippets/projects.archive.json +6 -0
  290. package/generated/v1/snippets/projects.delete.json +6 -0
  291. package/generated/v1/snippets/projects.rename.json +6 -0
  292. package/generated/v1/snippets/schedules.create.json +3 -3
  293. package/generated/v1/snippets/schedules.replace.json +3 -3
  294. package/generated/v1/snippets/timing.summary.json +6 -0
  295. package/package.json +1 -6
  296. package/dist/callback-ownership.d.ts +0 -58
  297. package/dist/callback-ownership.js +0 -71
  298. package/generated/v1/callback-endpoint-verification.json +0 -59
  299. /package/generated/v1/schemas/{endpoints.verify.response-headers.json → endpoints.acknowledgeSigningKeyRotation.response-headers.json} +0 -0
@@ -0,0 +1,34 @@
1
+ import { z } from "./zod.js";
2
+ export declare const organizationLifecycleSchema: import("zod").ZodObject<{
3
+ organizationId: import("zod").ZodString;
4
+ generation: import("zod").ZodNumber;
5
+ phase: import("zod").ZodEnum<{
6
+ active: "active";
7
+ closing: "closing";
8
+ closed: "closed";
9
+ restoring: "restoring";
10
+ purging: "purging";
11
+ erased: "erased";
12
+ }>;
13
+ requestedAt: import("zod").ZodNullable<import("zod").ZodString>;
14
+ reversibleUntil: import("zod").ZodNullable<import("zod").ZodString>;
15
+ purgeDeadline: import("zod").ZodNullable<import("zod").ZodString>;
16
+ immediate: import("zod").ZodBoolean;
17
+ converged: import("zod").ZodBoolean;
18
+ }, import("zod/v4/core").$strict>;
19
+ export declare const organizationClosureRequestSchema: import("zod").ZodObject<{
20
+ expectedGeneration: import("zod").ZodNumber;
21
+ immediate: import("zod").ZodBoolean;
22
+ confirmation: import("zod").ZodLiteral<"delete organization">;
23
+ }, import("zod/v4/core").$strict>;
24
+ export declare const organizationRestoreRequestSchema: import("zod").ZodObject<{
25
+ expectedGeneration: import("zod").ZodNumber;
26
+ }, import("zod/v4/core").$strict>;
27
+ export type OrganizationLifecycle = z.infer<typeof organizationLifecycleSchema>;
28
+ export declare const ORGANIZATION_LIFECYCLE_OPERATIONS: readonly [import("./operations.js").OperationDefinition & {
29
+ readonly id: "organizations.lifecycle";
30
+ }, import("./operations.js").OperationDefinition & {
31
+ readonly id: "organizations.close";
32
+ }, import("./operations.js").OperationDefinition & {
33
+ readonly id: "organizations.restore";
34
+ }];
@@ -0,0 +1,122 @@
1
+ import { organizationIdSchema } from "./identifiers.js";
2
+ import { API_UNUSED_RESPONSE_SCHEMA, defineOperations, } from "./operation-definitions.js";
3
+ import { timestampSchema } from "./time.js";
4
+ import { z } from "./zod.js";
5
+ export const organizationLifecycleSchema = z.strictObject({
6
+ organizationId: organizationIdSchema,
7
+ generation: z.number().int().nonnegative(),
8
+ phase: z.enum([
9
+ "active",
10
+ "closing",
11
+ "closed",
12
+ "restoring",
13
+ "purging",
14
+ "erased",
15
+ ]),
16
+ requestedAt: timestampSchema.nullable(),
17
+ reversibleUntil: timestampSchema.nullable(),
18
+ purgeDeadline: timestampSchema.nullable(),
19
+ immediate: z.boolean(),
20
+ converged: z.boolean(),
21
+ });
22
+ export const organizationClosureRequestSchema = z.strictObject({
23
+ expectedGeneration: z.number().int().nonnegative(),
24
+ immediate: z.boolean(),
25
+ confirmation: z.literal("delete organization"),
26
+ });
27
+ export const organizationRestoreRequestSchema = z.strictObject({
28
+ expectedGeneration: z.number().int().positive(),
29
+ });
30
+ const example = {
31
+ organizationId: "org_01h8xyz9k2m4n6p8r0t2v4w6y8",
32
+ generation: 1,
33
+ phase: "closed",
34
+ requestedAt: "2026-09-12T12:00:00.000Z",
35
+ reversibleUntil: "2026-09-19T12:00:00.000Z",
36
+ purgeDeadline: "2026-10-12T12:00:00.000Z",
37
+ immediate: false,
38
+ converged: true,
39
+ };
40
+ const common = {
41
+ creates: false,
42
+ idempotent: true,
43
+ mcp: {
44
+ kind: "unavailable",
45
+ reason: "Organization closure and recovery require a signed-in administrator; delegated credentials cannot acquire organization-wide authority.",
46
+ },
47
+ principals: ["session"],
48
+ problems: [
49
+ "invalid_request",
50
+ "not_found",
51
+ "state_conflict",
52
+ "version_conflict",
53
+ ],
54
+ response: globalThis.GREATWAIT_API_REQUEST_REGISTRY
55
+ ? API_UNUSED_RESPONSE_SCHEMA
56
+ : organizationLifecycleSchema,
57
+ scopes: ["projects:administer"],
58
+ sessionAuthority: "organization",
59
+ surfaces: ["api", "mock"],
60
+ example: globalThis.GREATWAIT_RUNTIME_WITHOUT_EXAMPLES
61
+ ? {}
62
+ : example,
63
+ };
64
+ export const ORGANIZATION_LIFECYCLE_OPERATIONS = defineOperations([
65
+ {
66
+ ...common,
67
+ id: "organizations.lifecycle",
68
+ problems: ["not_found", "service_unavailable"],
69
+ method: "GET",
70
+ mutates: false,
71
+ path: "/v1/organization/lifecycle",
72
+ summary: globalThis.GREATWAIT_API_REQUEST_REGISTRY
73
+ ? ""
74
+ : "Read organization closure progress",
75
+ description: globalThis.GREATWAIT_RUNTIME_CONTRACTS_ONLY
76
+ ? ""
77
+ : "Reads the signed-in administrator's organization closure generation and progress, including the reversible window. It remains available during closure so the administrator can request recovery.",
78
+ },
79
+ {
80
+ ...common,
81
+ id: "organizations.close",
82
+ method: "POST",
83
+ mutates: true,
84
+ path: "/v1/organization/close",
85
+ summary: globalThis.GREATWAIT_API_REQUEST_REGISTRY
86
+ ? ""
87
+ : "Close the organization and request erasure",
88
+ description: globalThis.GREATWAIT_RUNTIME_CONTRACTS_ONLY
89
+ ? ""
90
+ : "Stops customer access, execution and new purchases across the organization. Ordinary closure can be reversed for seven days; immediate erasure skips that window. Non-financial erasure completes within thirty days unless suspended by an operator legal hold. Financial records remain under the configured retention policy. An interrupted request resumes under the same generation; closure is acknowledged only after every configured scheduling shard is fenced.",
91
+ request: organizationClosureRequestSchema,
92
+ requestExample: globalThis
93
+ .GREATWAIT_RUNTIME_WITHOUT_EXAMPLES
94
+ ? {}
95
+ : {
96
+ expectedGeneration: 0,
97
+ immediate: false,
98
+ confirmation: "delete organization",
99
+ },
100
+ },
101
+ {
102
+ ...common,
103
+ id: "organizations.restore",
104
+ method: "POST",
105
+ mutates: true,
106
+ path: "/v1/organization/restore",
107
+ summary: globalThis.GREATWAIT_API_REQUEST_REGISTRY
108
+ ? ""
109
+ : "Cancel organization erasure during its reversible window",
110
+ description: globalThis.GREATWAIT_RUNTIME_CONTRACTS_ONLY
111
+ ? ""
112
+ : "Restores access after every configured scheduling shard acknowledges the new generation. Immediate erasure and expired reversible windows cannot be restored. Recovery preserves each schedule's pause and lateness policy and does not reauthorize automatic top-up.",
113
+ request: organizationRestoreRequestSchema,
114
+ requestExample: globalThis
115
+ .GREATWAIT_RUNTIME_WITHOUT_EXAMPLES
116
+ ? {}
117
+ : { expectedGeneration: 1 },
118
+ example: globalThis.GREATWAIT_RUNTIME_WITHOUT_EXAMPLES
119
+ ? {}
120
+ : { ...example, generation: 2, phase: "active" },
121
+ },
122
+ ]);
@@ -540,6 +540,12 @@ export interface ListOccurrencesQuery {
540
540
  readonly after?: OccurrencePagePosition;
541
541
  readonly authority: Authority;
542
542
  readonly limit: number;
543
+ /**
544
+ * Which end to walk from; oldest when absent. A cursor belongs to the order
545
+ * it was issued under. Spelled out rather than imported so this module keeps
546
+ * carrying no runtime import of the contract barrel.
547
+ */
548
+ readonly order?: "newest" | "oldest";
543
549
  readonly scheduleId: string;
544
550
  }
545
551
  export type ListOccurrencesOutcome = PartitionRefused | {
@@ -621,6 +627,8 @@ export interface ScheduleWriteCommand {
621
627
  }
622
628
  /** Replace a schedule's definition, starting a new generation. */
623
629
  export interface ReplaceScheduleCommand extends ScheduleWriteCommand {
630
+ /** A new name; absent keeps the stored one (W4-14). */
631
+ readonly name?: string;
624
632
  /**
625
633
  * The replacement's delivery settings.
626
634
  *
@@ -740,6 +748,24 @@ export type ForecastOutcome = PartitionRefused | {
740
748
  */
741
749
  readonly asOfMs?: number;
742
750
  readonly buckets: readonly ForecastPartitionBucket[];
751
+ /**
752
+ * The instant this answer actually reached, when it is not the one asked
753
+ * for.
754
+ *
755
+ * **A plan horizon shortens a forecast rather than refusing it**, which
756
+ * is the right trade — a plan that buys six hours is telling a customer
757
+ * how far it can see, and answering "no forecast at all" because they
758
+ * asked for a day would be a worse reading of the same purchase. What
759
+ * was missing is the other half: the published window said twenty-four
760
+ * hours and the last eighteen of them were empty, so a caller sizing
761
+ * capacity read "nothing planned" where the truth was "not projected",
762
+ * and under-read by three quarters. The dashboard drew it as eighteen
763
+ * hours of zero bars.
764
+ *
765
+ * Absent when the answer covered the whole window, which is every source
766
+ * with no horizon over it.
767
+ */
768
+ readonly coveredToMs?: number;
743
769
  readonly truncated: boolean;
744
770
  };
745
771
  /**
package/dist/policy.d.ts CHANGED
@@ -47,10 +47,10 @@ export declare function grantableScopes(): readonly Scope[];
47
47
  * that will be refused `authentication_required` on the only route it names,
48
48
  * for ever, and nothing about the key says so.
49
49
  *
50
- * `projects:read` was the first such scope and `projects:write` is the second —
51
- * both belong to operations that accept only a signed-in member, because a
52
- * key's authority already *is* one project. Deriving the list rather than
53
- * naming them is what keeps a third from arriving unnoticed.
50
+ * `projects:read` remains excluded because enumerating an organization is a
51
+ * signed-in member's question. Project writes are different: a key's authority
52
+ * already names exactly the project that rename/archive/delete may affect, so
53
+ * those scopes become usable when their operations do.
54
54
  */
55
55
  export declare function credentialScopes(): readonly Scope[];
56
56
  /** One row of the generated policy matrix. */
package/dist/policy.js CHANGED
@@ -50,9 +50,13 @@ function allOperations() {
50
50
  * Clerk's and this product does not do it, so this is the whole of what `admin`
51
51
  * means here.
52
52
  */
53
- const MEMBER_SCOPES = SCOPES.filter((scope) => scope !== "credentials:administer");
53
+ const MEMBER_SCOPES = SCOPES.filter((scope) => scope !== "billing:write" &&
54
+ scope !== "credentials:administer" &&
55
+ scope !== "projects:administer");
56
+ const BILLING_SCOPES = SCOPES.filter((scope) => scope !== "credentials:administer" && scope !== "projects:administer");
54
57
  export const ROLE_SCOPE_CEILINGS = {
55
58
  admin: SCOPES,
59
+ billing: BILLING_SCOPES,
56
60
  member: MEMBER_SCOPES,
57
61
  };
58
62
  /** Everything a role may hold, expanded so a write implies its read. */
@@ -129,10 +133,10 @@ export function grantableScopes() {
129
133
  * that will be refused `authentication_required` on the only route it names,
130
134
  * for ever, and nothing about the key says so.
131
135
  *
132
- * `projects:read` was the first such scope and `projects:write` is the second —
133
- * both belong to operations that accept only a signed-in member, because a
134
- * key's authority already *is* one project. Deriving the list rather than
135
- * naming them is what keeps a third from arriving unnoticed.
136
+ * `projects:read` remains excluded because enumerating an organization is a
137
+ * signed-in member's question. Project writes are different: a key's authority
138
+ * already names exactly the project that rename/archive/delete may affect, so
139
+ * those scopes become usable when their operations do.
136
140
  */
137
141
  export function credentialScopes() {
138
142
  const usable = new Set(allOperations()
@@ -1,4 +1,4 @@
1
- import { z } from "zod";
1
+ import { z } from "./zod.js";
2
2
  /**
3
3
  * Refusals.
4
4
  *
@@ -13,7 +13,7 @@ import { z } from "zod";
13
13
  * being a breaking change; clients must never branch on them.
14
14
  */
15
15
  export declare const PROBLEM_CATEGORIES: readonly ["authentication", "authorization", "conflict", "invalid-request", "not-found", "rate-limited", "unavailable"];
16
- export declare const problemCategorySchema: z.ZodEnum<{
16
+ export declare const problemCategorySchema: import("zod").ZodEnum<{
17
17
  authentication: "authentication";
18
18
  authorization: "authorization";
19
19
  conflict: "conflict";
@@ -40,10 +40,6 @@ export declare const PROBLEM_CODES: {
40
40
  readonly category: "authentication";
41
41
  readonly status: 401;
42
42
  };
43
- readonly endpoint_unverified: {
44
- readonly category: "invalid-request";
45
- readonly status: 422;
46
- };
47
43
  readonly idempotency_key_reused: {
48
44
  readonly category: "conflict";
49
45
  readonly status: 409;
@@ -64,10 +60,18 @@ export declare const PROBLEM_CODES: {
64
60
  readonly category: "conflict";
65
61
  readonly status: 409;
66
62
  };
63
+ readonly project_archived: {
64
+ readonly category: "conflict";
65
+ readonly status: 409;
66
+ };
67
67
  readonly rate_limited: {
68
68
  readonly category: "rate-limited";
69
69
  readonly status: 429;
70
70
  };
71
+ readonly revision_conflict: {
72
+ readonly category: "conflict";
73
+ readonly status: 409;
74
+ };
71
75
  readonly scope_missing: {
72
76
  readonly category: "authorization";
73
77
  readonly status: 403;
@@ -90,17 +94,18 @@ export declare const PROBLEM_CODES: {
90
94
  };
91
95
  };
92
96
  export type ProblemCode = keyof typeof PROBLEM_CODES;
93
- export declare const problemCodeSchema: z.ZodEnum<{
97
+ export declare const problemCodeSchema: import("zod").ZodEnum<{
94
98
  authentication_required: "authentication_required";
95
99
  credential_expired: "credential_expired";
96
100
  credential_revoked: "credential_revoked";
97
- endpoint_unverified: "endpoint_unverified";
98
101
  idempotency_key_reused: "idempotency_key_reused";
99
102
  invalid_request: "invalid_request";
100
103
  not_found: "not_found";
101
104
  payload_too_large: "payload_too_large";
102
105
  plan_limit_reached: "plan_limit_reached";
106
+ project_archived: "project_archived";
103
107
  rate_limited: "rate_limited";
108
+ revision_conflict: "revision_conflict";
104
109
  scope_missing: "scope_missing";
105
110
  service_unavailable: "service_unavailable";
106
111
  state_conflict: "state_conflict";
@@ -109,40 +114,41 @@ export declare const problemCodeSchema: z.ZodEnum<{
109
114
  }>;
110
115
  /** Whether repeating the identical request could succeed later. */
111
116
  export declare function isRetryable(code: ProblemCode): boolean;
112
- export declare const fieldErrorSchema: z.ZodObject<{
113
- pointer: z.ZodString;
114
- reason: z.ZodString;
115
- }, z.core.$strip>;
117
+ export declare const fieldErrorSchema: import("zod").ZodObject<{
118
+ pointer: import("zod").ZodString;
119
+ reason: import("zod").ZodString;
120
+ }, import("zod/v4/core").$strip>;
116
121
  export type FieldError = z.infer<typeof fieldErrorSchema>;
117
- export declare const problemSchema: z.ZodObject<{
118
- code: z.ZodEnum<{
122
+ export declare const problemSchema: import("zod").ZodObject<{
123
+ code: import("zod").ZodEnum<{
119
124
  authentication_required: "authentication_required";
120
125
  credential_expired: "credential_expired";
121
126
  credential_revoked: "credential_revoked";
122
- endpoint_unverified: "endpoint_unverified";
123
127
  idempotency_key_reused: "idempotency_key_reused";
124
128
  invalid_request: "invalid_request";
125
129
  not_found: "not_found";
126
130
  payload_too_large: "payload_too_large";
127
131
  plan_limit_reached: "plan_limit_reached";
132
+ project_archived: "project_archived";
128
133
  rate_limited: "rate_limited";
134
+ revision_conflict: "revision_conflict";
129
135
  scope_missing: "scope_missing";
130
136
  service_unavailable: "service_unavailable";
131
137
  state_conflict: "state_conflict";
132
138
  test_to_live_escalation: "test_to_live_escalation";
133
139
  version_conflict: "version_conflict";
134
140
  }>;
135
- detail: z.ZodOptional<z.ZodString>;
136
- errors: z.ZodOptional<z.ZodArray<z.ZodObject<{
137
- pointer: z.ZodString;
138
- reason: z.ZodString;
139
- }, z.core.$strip>>>;
140
- retryAfterSeconds: z.ZodOptional<z.ZodNumber>;
141
- status: z.ZodNumber;
142
- title: z.ZodString;
143
- traceId: z.ZodOptional<z.ZodString>;
144
- type: z.ZodLiteral<"about:blank">;
145
- }, z.core.$strip>;
141
+ detail: import("zod").ZodOptional<import("zod").ZodString>;
142
+ errors: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
143
+ pointer: import("zod").ZodString;
144
+ reason: import("zod").ZodString;
145
+ }, import("zod/v4/core").$strip>>>;
146
+ retryAfterSeconds: import("zod").ZodOptional<import("zod").ZodNumber>;
147
+ status: import("zod").ZodNumber;
148
+ title: import("zod").ZodString;
149
+ traceId: import("zod").ZodOptional<import("zod").ZodString>;
150
+ type: import("zod").ZodLiteral<"about:blank">;
151
+ }, import("zod/v4/core").$strip>;
146
152
  export type Problem = z.infer<typeof problemSchema>;
147
153
  export interface ProblemOptions {
148
154
  readonly detail?: string;
package/dist/problems.js CHANGED
@@ -1,4 +1,4 @@
1
- import { z } from "zod";
1
+ import { z } from "./zod.js";
2
2
  /**
3
3
  * Refusals.
4
4
  *
@@ -36,13 +36,17 @@ export const PROBLEM_CODES = {
36
36
  // versus find out who revoked it.
37
37
  credential_expired: { category: "authentication", status: 401 },
38
38
  credential_revoked: { category: "authentication", status: 401 },
39
- endpoint_unverified: { category: "invalid-request", status: 422 },
40
39
  idempotency_key_reused: { category: "conflict", status: 409 },
41
40
  invalid_request: { category: "invalid-request", status: 400 },
42
41
  not_found: { category: "not-found", status: 404 },
43
42
  payload_too_large: { category: "invalid-request", status: 413 },
44
43
  plan_limit_reached: { category: "conflict", status: 409 },
44
+ // The target belongs to the caller, but its whole project is parked. This is
45
+ // deliberately distinct from `not_found`: foreign projects still receive
46
+ // that opaque answer, while an owner needs the move that restores their own.
47
+ project_archived: { category: "conflict", status: 409 },
45
48
  rate_limited: { category: "rate-limited", status: 429 },
49
+ revision_conflict: { category: "conflict", status: 409 },
46
50
  scope_missing: { category: "authorization", status: 403 },
47
51
  service_unavailable: { category: "unavailable", status: 503 },
48
52
  // The resource is in a state that does not permit what was asked — resuming a