@sylphx/contract 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (571) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/LICENSE +21 -0
  3. package/README.md +164 -0
  4. package/dist/endpoint.d.ts +65 -0
  5. package/dist/endpoint.d.ts.map +1 -0
  6. package/dist/endpoint.js +22 -0
  7. package/dist/endpoints/admin-ai-playground.d.ts +93 -0
  8. package/dist/endpoints/admin-ai-playground.d.ts.map +1 -0
  9. package/dist/endpoints/admin-ai-playground.js +37 -0
  10. package/dist/endpoints/admin-anomalies.d.ts +108 -0
  11. package/dist/endpoints/admin-anomalies.d.ts.map +1 -0
  12. package/dist/endpoints/admin-anomalies.js +72 -0
  13. package/dist/endpoints/admin-apm.d.ts +102 -0
  14. package/dist/endpoints/admin-apm.d.ts.map +1 -0
  15. package/dist/endpoints/admin-apm.js +70 -0
  16. package/dist/endpoints/admin-audit.d.ts +714 -0
  17. package/dist/endpoints/admin-audit.d.ts.map +1 -0
  18. package/dist/endpoints/admin-audit.js +494 -0
  19. package/dist/endpoints/admin-billing.d.ts +82 -0
  20. package/dist/endpoints/admin-billing.d.ts.map +1 -0
  21. package/dist/endpoints/admin-billing.js +190 -0
  22. package/dist/endpoints/admin-bootstrap.d.ts +16 -0
  23. package/dist/endpoints/admin-bootstrap.d.ts.map +1 -0
  24. package/dist/endpoints/admin-bootstrap.js +28 -0
  25. package/dist/endpoints/admin-broadcasts.d.ts +105 -0
  26. package/dist/endpoints/admin-broadcasts.d.ts.map +1 -0
  27. package/dist/endpoints/admin-broadcasts.js +60 -0
  28. package/dist/endpoints/admin-builds.d.ts +33 -0
  29. package/dist/endpoints/admin-builds.d.ts.map +1 -0
  30. package/dist/endpoints/admin-builds.js +36 -0
  31. package/dist/endpoints/admin-config.d.ts +180 -0
  32. package/dist/endpoints/admin-config.d.ts.map +1 -0
  33. package/dist/endpoints/admin-config.js +108 -0
  34. package/dist/endpoints/admin-consent.d.ts +123 -0
  35. package/dist/endpoints/admin-consent.d.ts.map +1 -0
  36. package/dist/endpoints/admin-consent.js +126 -0
  37. package/dist/endpoints/admin-env-services.d.ts +28 -0
  38. package/dist/endpoints/admin-env-services.d.ts.map +1 -0
  39. package/dist/endpoints/admin-env-services.js +35 -0
  40. package/dist/endpoints/admin-impersonation.d.ts +105 -0
  41. package/dist/endpoints/admin-impersonation.d.ts.map +1 -0
  42. package/dist/endpoints/admin-impersonation.js +88 -0
  43. package/dist/endpoints/admin-invitations.d.ts +73 -0
  44. package/dist/endpoints/admin-invitations.d.ts.map +1 -0
  45. package/dist/endpoints/admin-invitations.js +55 -0
  46. package/dist/endpoints/admin-jwt-keys.d.ts +75 -0
  47. package/dist/endpoints/admin-jwt-keys.d.ts.map +1 -0
  48. package/dist/endpoints/admin-jwt-keys.js +63 -0
  49. package/dist/endpoints/admin-logs.d.ts +109 -0
  50. package/dist/endpoints/admin-logs.d.ts.map +1 -0
  51. package/dist/endpoints/admin-logs.js +78 -0
  52. package/dist/endpoints/admin-plans.d.ts +63 -0
  53. package/dist/endpoints/admin-plans.d.ts.map +1 -0
  54. package/dist/endpoints/admin-plans.js +47 -0
  55. package/dist/endpoints/admin-project-users.d.ts +148 -0
  56. package/dist/endpoints/admin-project-users.d.ts.map +1 -0
  57. package/dist/endpoints/admin-project-users.js +89 -0
  58. package/dist/endpoints/admin-projects.d.ts +124 -0
  59. package/dist/endpoints/admin-projects.d.ts.map +1 -0
  60. package/dist/endpoints/admin-projects.js +74 -0
  61. package/dist/endpoints/admin-quotas.d.ts +98 -0
  62. package/dist/endpoints/admin-quotas.d.ts.map +1 -0
  63. package/dist/endpoints/admin-quotas.js +67 -0
  64. package/dist/endpoints/admin-rate-limits.d.ts +50 -0
  65. package/dist/endpoints/admin-rate-limits.d.ts.map +1 -0
  66. package/dist/endpoints/admin-rate-limits.js +53 -0
  67. package/dist/endpoints/admin-reconcile.d.ts +28 -0
  68. package/dist/endpoints/admin-reconcile.d.ts.map +1 -0
  69. package/dist/endpoints/admin-reconcile.js +33 -0
  70. package/dist/endpoints/admin-resources.d.ts +51 -0
  71. package/dist/endpoints/admin-resources.d.ts.map +1 -0
  72. package/dist/endpoints/admin-resources.js +53 -0
  73. package/dist/endpoints/admin-secrets.d.ts +41 -0
  74. package/dist/endpoints/admin-secrets.d.ts.map +1 -0
  75. package/dist/endpoints/admin-secrets.js +33 -0
  76. package/dist/endpoints/admin-services.d.ts +29 -0
  77. package/dist/endpoints/admin-services.d.ts.map +1 -0
  78. package/dist/endpoints/admin-services.js +35 -0
  79. package/dist/endpoints/admin-tasks.d.ts +186 -0
  80. package/dist/endpoints/admin-tasks.d.ts.map +1 -0
  81. package/dist/endpoints/admin-tasks.js +67 -0
  82. package/dist/endpoints/admin-tenants.d.ts +26 -0
  83. package/dist/endpoints/admin-tenants.d.ts.map +1 -0
  84. package/dist/endpoints/admin-tenants.js +30 -0
  85. package/dist/endpoints/admin-traces.d.ts +124 -0
  86. package/dist/endpoints/admin-traces.d.ts.map +1 -0
  87. package/dist/endpoints/admin-traces.js +59 -0
  88. package/dist/endpoints/admin-users.d.ts +106 -0
  89. package/dist/endpoints/admin-users.d.ts.map +1 -0
  90. package/dist/endpoints/admin-users.js +83 -0
  91. package/dist/endpoints/admin-webhook-signature-versions.d.ts +59 -0
  92. package/dist/endpoints/admin-webhook-signature-versions.d.ts.map +1 -0
  93. package/dist/endpoints/admin-webhook-signature-versions.js +57 -0
  94. package/dist/endpoints/ai-admin.d.ts +30 -0
  95. package/dist/endpoints/ai-admin.d.ts.map +1 -0
  96. package/dist/endpoints/ai-admin.js +59 -0
  97. package/dist/endpoints/analytics-admin.d.ts +279 -0
  98. package/dist/endpoints/analytics-admin.d.ts.map +1 -0
  99. package/dist/endpoints/analytics-admin.js +308 -0
  100. package/dist/endpoints/analytics.d.ts +58 -0
  101. package/dist/endpoints/analytics.d.ts.map +1 -0
  102. package/dist/endpoints/analytics.js +43 -0
  103. package/dist/endpoints/audit-chain.d.ts +49 -0
  104. package/dist/endpoints/audit-chain.d.ts.map +1 -0
  105. package/dist/endpoints/audit-chain.js +29 -0
  106. package/dist/endpoints/audit.d.ts +50 -0
  107. package/dist/endpoints/audit.d.ts.map +1 -0
  108. package/dist/endpoints/audit.js +30 -0
  109. package/dist/endpoints/auth-admin.d.ts +65 -0
  110. package/dist/endpoints/auth-admin.d.ts.map +1 -0
  111. package/dist/endpoints/auth-admin.js +55 -0
  112. package/dist/endpoints/auth.d.ts +157 -0
  113. package/dist/endpoints/auth.d.ts.map +1 -0
  114. package/dist/endpoints/auth.js +214 -0
  115. package/dist/endpoints/backups.d.ts +51 -0
  116. package/dist/endpoints/backups.d.ts.map +1 -0
  117. package/dist/endpoints/backups.js +47 -0
  118. package/dist/endpoints/billing-console.d.ts +294 -0
  119. package/dist/endpoints/billing-console.d.ts.map +1 -0
  120. package/dist/endpoints/billing-console.js +167 -0
  121. package/dist/endpoints/billing-settings.d.ts +107 -0
  122. package/dist/endpoints/billing-settings.d.ts.map +1 -0
  123. package/dist/endpoints/billing-settings.js +117 -0
  124. package/dist/endpoints/branch-databases.d.ts +75 -0
  125. package/dist/endpoints/branch-databases.d.ts.map +1 -0
  126. package/dist/endpoints/branch-databases.js +61 -0
  127. package/dist/endpoints/challenge.d.ts +62 -0
  128. package/dist/endpoints/challenge.d.ts.map +1 -0
  129. package/dist/endpoints/challenge.js +52 -0
  130. package/dist/endpoints/ci-settings.d.ts +89 -0
  131. package/dist/endpoints/ci-settings.d.ts.map +1 -0
  132. package/dist/endpoints/ci-settings.js +78 -0
  133. package/dist/endpoints/consent-admin.d.ts +134 -0
  134. package/dist/endpoints/consent-admin.d.ts.map +1 -0
  135. package/dist/endpoints/consent-admin.js +83 -0
  136. package/dist/endpoints/databases.d.ts +251 -0
  137. package/dist/endpoints/databases.d.ts.map +1 -0
  138. package/dist/endpoints/databases.js +150 -0
  139. package/dist/endpoints/deployments.d.ts +280 -0
  140. package/dist/endpoints/deployments.d.ts.map +1 -0
  141. package/dist/endpoints/deployments.js +205 -0
  142. package/dist/endpoints/domains.d.ts +356 -0
  143. package/dist/endpoints/domains.d.ts.map +1 -0
  144. package/dist/endpoints/domains.js +149 -0
  145. package/dist/endpoints/edge-deployments.d.ts +92 -0
  146. package/dist/endpoints/edge-deployments.d.ts.map +1 -0
  147. package/dist/endpoints/edge-deployments.js +58 -0
  148. package/dist/endpoints/email-admin.d.ts +415 -0
  149. package/dist/endpoints/email-admin.d.ts.map +1 -0
  150. package/dist/endpoints/email-admin.js +253 -0
  151. package/dist/endpoints/email.d.ts +37 -0
  152. package/dist/endpoints/email.d.ts.map +1 -0
  153. package/dist/endpoints/email.js +42 -0
  154. package/dist/endpoints/engagement-admin.d.ts +98 -0
  155. package/dist/endpoints/engagement-admin.d.ts.map +1 -0
  156. package/dist/endpoints/engagement-admin.js +64 -0
  157. package/dist/endpoints/env-vars.d.ts +66 -0
  158. package/dist/endpoints/env-vars.d.ts.map +1 -0
  159. package/dist/endpoints/env-vars.js +47 -0
  160. package/dist/endpoints/environments.d.ts +456 -0
  161. package/dist/endpoints/environments.d.ts.map +1 -0
  162. package/dist/endpoints/environments.js +237 -0
  163. package/dist/endpoints/experiments.d.ts +500 -0
  164. package/dist/endpoints/experiments.d.ts.map +1 -0
  165. package/dist/endpoints/experiments.js +93 -0
  166. package/dist/endpoints/flags-admin.d.ts +74 -0
  167. package/dist/endpoints/flags-admin.d.ts.map +1 -0
  168. package/dist/endpoints/flags-admin.js +84 -0
  169. package/dist/endpoints/flags.d.ts +23 -0
  170. package/dist/endpoints/flags.d.ts.map +1 -0
  171. package/dist/endpoints/flags.js +17 -0
  172. package/dist/endpoints/github.d.ts +30 -0
  173. package/dist/endpoints/github.d.ts.map +1 -0
  174. package/dist/endpoints/github.js +37 -0
  175. package/dist/endpoints/image-opt.d.ts +43 -0
  176. package/dist/endpoints/image-opt.d.ts.map +1 -0
  177. package/dist/endpoints/image-opt.js +44 -0
  178. package/dist/endpoints/kv-admin.d.ts +58 -0
  179. package/dist/endpoints/kv-admin.d.ts.map +1 -0
  180. package/dist/endpoints/kv-admin.js +69 -0
  181. package/dist/endpoints/kv.d.ts +63 -0
  182. package/dist/endpoints/kv.d.ts.map +1 -0
  183. package/dist/endpoints/kv.js +82 -0
  184. package/dist/endpoints/monitoring-admin.d.ts +204 -0
  185. package/dist/endpoints/monitoring-admin.d.ts.map +1 -0
  186. package/dist/endpoints/monitoring-admin.js +119 -0
  187. package/dist/endpoints/monitoring.d.ts +63 -0
  188. package/dist/endpoints/monitoring.d.ts.map +1 -0
  189. package/dist/endpoints/monitoring.js +27 -0
  190. package/dist/endpoints/newsletter.d.ts +366 -0
  191. package/dist/endpoints/newsletter.d.ts.map +1 -0
  192. package/dist/endpoints/newsletter.js +232 -0
  193. package/dist/endpoints/notifications-admin.d.ts +268 -0
  194. package/dist/endpoints/notifications-admin.d.ts.map +1 -0
  195. package/dist/endpoints/notifications-admin.js +172 -0
  196. package/dist/endpoints/notifications.d.ts +225 -0
  197. package/dist/endpoints/notifications.d.ts.map +1 -0
  198. package/dist/endpoints/notifications.js +150 -0
  199. package/dist/endpoints/oidc.d.ts +67 -0
  200. package/dist/endpoints/oidc.d.ts.map +1 -0
  201. package/dist/endpoints/oidc.js +49 -0
  202. package/dist/endpoints/organizations.d.ts +702 -0
  203. package/dist/endpoints/organizations.d.ts.map +1 -0
  204. package/dist/endpoints/organizations.js +460 -0
  205. package/dist/endpoints/plans.d.ts +136 -0
  206. package/dist/endpoints/plans.d.ts.map +1 -0
  207. package/dist/endpoints/plans.js +83 -0
  208. package/dist/endpoints/privacy.d.ts +131 -0
  209. package/dist/endpoints/privacy.d.ts.map +1 -0
  210. package/dist/endpoints/privacy.js +98 -0
  211. package/dist/endpoints/project-manifest.d.ts +1044 -0
  212. package/dist/endpoints/project-manifest.d.ts.map +1 -0
  213. package/dist/endpoints/project-manifest.js +59 -0
  214. package/dist/endpoints/projects.d.ts +187 -0
  215. package/dist/endpoints/projects.d.ts.map +1 -0
  216. package/dist/endpoints/projects.js +58 -0
  217. package/dist/endpoints/rate-limits.d.ts +83 -0
  218. package/dist/endpoints/rate-limits.d.ts.map +1 -0
  219. package/dist/endpoints/rate-limits.js +54 -0
  220. package/dist/endpoints/realtime-admin.d.ts +42 -0
  221. package/dist/endpoints/realtime-admin.d.ts.map +1 -0
  222. package/dist/endpoints/realtime-admin.js +50 -0
  223. package/dist/endpoints/realtime.d.ts +35 -0
  224. package/dist/endpoints/realtime.d.ts.map +1 -0
  225. package/dist/endpoints/realtime.js +39 -0
  226. package/dist/endpoints/referrals-admin.d.ts +118 -0
  227. package/dist/endpoints/referrals-admin.d.ts.map +1 -0
  228. package/dist/endpoints/referrals-admin.js +59 -0
  229. package/dist/endpoints/refresh.d.ts +19 -0
  230. package/dist/endpoints/refresh.d.ts.map +1 -0
  231. package/dist/endpoints/refresh.js +25 -0
  232. package/dist/endpoints/regions.d.ts +41 -0
  233. package/dist/endpoints/regions.d.ts.map +1 -0
  234. package/dist/endpoints/regions.js +43 -0
  235. package/dist/endpoints/runners.d.ts +55 -0
  236. package/dist/endpoints/runners.d.ts.map +1 -0
  237. package/dist/endpoints/runners.js +45 -0
  238. package/dist/endpoints/saml.d.ts +147 -0
  239. package/dist/endpoints/saml.d.ts.map +1 -0
  240. package/dist/endpoints/saml.js +106 -0
  241. package/dist/endpoints/search.d.ts +62 -0
  242. package/dist/endpoints/search.d.ts.map +1 -0
  243. package/dist/endpoints/search.js +40 -0
  244. package/dist/endpoints/secrets.d.ts +95 -0
  245. package/dist/endpoints/secrets.d.ts.map +1 -0
  246. package/dist/endpoints/secrets.js +81 -0
  247. package/dist/endpoints/security.d.ts +231 -0
  248. package/dist/endpoints/security.d.ts.map +1 -0
  249. package/dist/endpoints/security.js +291 -0
  250. package/dist/endpoints/service-tokens.d.ts +392 -0
  251. package/dist/endpoints/service-tokens.d.ts.map +1 -0
  252. package/dist/endpoints/service-tokens.js +125 -0
  253. package/dist/endpoints/session-replay.d.ts +142 -0
  254. package/dist/endpoints/session-replay.d.ts.map +1 -0
  255. package/dist/endpoints/session-replay.js +53 -0
  256. package/dist/endpoints/storage-admin.d.ts +96 -0
  257. package/dist/endpoints/storage-admin.d.ts.map +1 -0
  258. package/dist/endpoints/storage-admin.js +113 -0
  259. package/dist/endpoints/storage.d.ts +167 -0
  260. package/dist/endpoints/storage.d.ts.map +1 -0
  261. package/dist/endpoints/storage.js +117 -0
  262. package/dist/endpoints/tasks.d.ts +141 -0
  263. package/dist/endpoints/tasks.d.ts.map +1 -0
  264. package/dist/endpoints/tasks.js +97 -0
  265. package/dist/endpoints/users.d.ts +103 -0
  266. package/dist/endpoints/users.d.ts.map +1 -0
  267. package/dist/endpoints/users.js +98 -0
  268. package/dist/endpoints/webhooks.d.ts +201 -0
  269. package/dist/endpoints/webhooks.d.ts.map +1 -0
  270. package/dist/endpoints/webhooks.js +120 -0
  271. package/dist/errors.d.ts +153 -0
  272. package/dist/errors.d.ts.map +1 -0
  273. package/dist/errors.js +73 -0
  274. package/dist/index.d.ts +12303 -0
  275. package/dist/index.d.ts.map +1 -0
  276. package/dist/index.js +390 -0
  277. package/dist/schemas/_primitives.d.ts +37 -0
  278. package/dist/schemas/_primitives.d.ts.map +1 -0
  279. package/dist/schemas/_primitives.js +38 -0
  280. package/dist/schemas/admin-ai-playground.d.ts +128 -0
  281. package/dist/schemas/admin-ai-playground.d.ts.map +1 -0
  282. package/dist/schemas/admin-ai-playground.js +84 -0
  283. package/dist/schemas/admin-anomalies.d.ts +131 -0
  284. package/dist/schemas/admin-anomalies.d.ts.map +1 -0
  285. package/dist/schemas/admin-anomalies.js +106 -0
  286. package/dist/schemas/admin-apm.d.ts +151 -0
  287. package/dist/schemas/admin-apm.d.ts.map +1 -0
  288. package/dist/schemas/admin-apm.js +96 -0
  289. package/dist/schemas/admin-audit.d.ts +625 -0
  290. package/dist/schemas/admin-audit.d.ts.map +1 -0
  291. package/dist/schemas/admin-audit.js +508 -0
  292. package/dist/schemas/admin-billing.d.ts +73 -0
  293. package/dist/schemas/admin-billing.d.ts.map +1 -0
  294. package/dist/schemas/admin-billing.js +60 -0
  295. package/dist/schemas/admin-bootstrap.d.ts +32 -0
  296. package/dist/schemas/admin-bootstrap.d.ts.map +1 -0
  297. package/dist/schemas/admin-bootstrap.js +37 -0
  298. package/dist/schemas/admin-broadcasts.d.ts +181 -0
  299. package/dist/schemas/admin-broadcasts.d.ts.map +1 -0
  300. package/dist/schemas/admin-broadcasts.js +93 -0
  301. package/dist/schemas/admin-builds.d.ts +108 -0
  302. package/dist/schemas/admin-builds.d.ts.map +1 -0
  303. package/dist/schemas/admin-builds.js +127 -0
  304. package/dist/schemas/admin-config.d.ts +248 -0
  305. package/dist/schemas/admin-config.d.ts.map +1 -0
  306. package/dist/schemas/admin-config.js +145 -0
  307. package/dist/schemas/admin-consent.d.ts +129 -0
  308. package/dist/schemas/admin-consent.d.ts.map +1 -0
  309. package/dist/schemas/admin-consent.js +76 -0
  310. package/dist/schemas/admin-env-services.d.ts +63 -0
  311. package/dist/schemas/admin-env-services.d.ts.map +1 -0
  312. package/dist/schemas/admin-env-services.js +81 -0
  313. package/dist/schemas/admin-impersonation.d.ts +150 -0
  314. package/dist/schemas/admin-impersonation.d.ts.map +1 -0
  315. package/dist/schemas/admin-impersonation.js +114 -0
  316. package/dist/schemas/admin-invitations.d.ts +119 -0
  317. package/dist/schemas/admin-invitations.d.ts.map +1 -0
  318. package/dist/schemas/admin-invitations.js +80 -0
  319. package/dist/schemas/admin-jwt-keys.d.ts +130 -0
  320. package/dist/schemas/admin-jwt-keys.d.ts.map +1 -0
  321. package/dist/schemas/admin-jwt-keys.js +83 -0
  322. package/dist/schemas/admin-logs.d.ts +170 -0
  323. package/dist/schemas/admin-logs.d.ts.map +1 -0
  324. package/dist/schemas/admin-logs.js +108 -0
  325. package/dist/schemas/admin-plans.d.ts +92 -0
  326. package/dist/schemas/admin-plans.d.ts.map +1 -0
  327. package/dist/schemas/admin-plans.js +62 -0
  328. package/dist/schemas/admin-project-users.d.ts +183 -0
  329. package/dist/schemas/admin-project-users.d.ts.map +1 -0
  330. package/dist/schemas/admin-project-users.js +108 -0
  331. package/dist/schemas/admin-projects.d.ts +237 -0
  332. package/dist/schemas/admin-projects.d.ts.map +1 -0
  333. package/dist/schemas/admin-projects.js +129 -0
  334. package/dist/schemas/admin-quotas.d.ts +161 -0
  335. package/dist/schemas/admin-quotas.d.ts.map +1 -0
  336. package/dist/schemas/admin-quotas.js +107 -0
  337. package/dist/schemas/admin-rate-limits.d.ts +90 -0
  338. package/dist/schemas/admin-rate-limits.d.ts.map +1 -0
  339. package/dist/schemas/admin-rate-limits.js +72 -0
  340. package/dist/schemas/admin-reconcile.d.ts +89 -0
  341. package/dist/schemas/admin-reconcile.d.ts.map +1 -0
  342. package/dist/schemas/admin-reconcile.js +86 -0
  343. package/dist/schemas/admin-resources.d.ts +129 -0
  344. package/dist/schemas/admin-resources.d.ts.map +1 -0
  345. package/dist/schemas/admin-resources.js +143 -0
  346. package/dist/schemas/admin-secrets.d.ts +113 -0
  347. package/dist/schemas/admin-secrets.d.ts.map +1 -0
  348. package/dist/schemas/admin-secrets.js +94 -0
  349. package/dist/schemas/admin-services.d.ts +71 -0
  350. package/dist/schemas/admin-services.d.ts.map +1 -0
  351. package/dist/schemas/admin-services.js +61 -0
  352. package/dist/schemas/admin-tasks.d.ts +239 -0
  353. package/dist/schemas/admin-tasks.d.ts.map +1 -0
  354. package/dist/schemas/admin-tasks.js +103 -0
  355. package/dist/schemas/admin-tenants.d.ts +45 -0
  356. package/dist/schemas/admin-tenants.d.ts.map +1 -0
  357. package/dist/schemas/admin-tenants.js +54 -0
  358. package/dist/schemas/admin-traces.d.ts +203 -0
  359. package/dist/schemas/admin-traces.d.ts.map +1 -0
  360. package/dist/schemas/admin-traces.js +128 -0
  361. package/dist/schemas/admin-users.d.ts +158 -0
  362. package/dist/schemas/admin-users.d.ts.map +1 -0
  363. package/dist/schemas/admin-users.js +110 -0
  364. package/dist/schemas/admin-webhook-signature-versions.d.ts +103 -0
  365. package/dist/schemas/admin-webhook-signature-versions.d.ts.map +1 -0
  366. package/dist/schemas/admin-webhook-signature-versions.js +73 -0
  367. package/dist/schemas/ai-admin.d.ts +39 -0
  368. package/dist/schemas/ai-admin.d.ts.map +1 -0
  369. package/dist/schemas/ai-admin.js +29 -0
  370. package/dist/schemas/ai.d.ts +120 -0
  371. package/dist/schemas/ai.d.ts.map +1 -0
  372. package/dist/schemas/ai.js +84 -0
  373. package/dist/schemas/analytics-admin.d.ts +104 -0
  374. package/dist/schemas/analytics-admin.d.ts.map +1 -0
  375. package/dist/schemas/analytics-admin.js +61 -0
  376. package/dist/schemas/analytics.d.ts +118 -0
  377. package/dist/schemas/analytics.d.ts.map +1 -0
  378. package/dist/schemas/analytics.js +80 -0
  379. package/dist/schemas/audit-chain.d.ts +81 -0
  380. package/dist/schemas/audit-chain.d.ts.map +1 -0
  381. package/dist/schemas/audit-chain.js +62 -0
  382. package/dist/schemas/auth-admin.d.ts +55 -0
  383. package/dist/schemas/auth-admin.d.ts.map +1 -0
  384. package/dist/schemas/auth-admin.js +48 -0
  385. package/dist/schemas/auth.d.ts +865 -0
  386. package/dist/schemas/auth.d.ts.map +1 -0
  387. package/dist/schemas/auth.js +815 -0
  388. package/dist/schemas/backups.d.ts +70 -0
  389. package/dist/schemas/backups.d.ts.map +1 -0
  390. package/dist/schemas/backups.js +38 -0
  391. package/dist/schemas/billing-console.d.ts +414 -0
  392. package/dist/schemas/billing-console.d.ts.map +1 -0
  393. package/dist/schemas/billing-console.js +298 -0
  394. package/dist/schemas/billing-settings.d.ts +156 -0
  395. package/dist/schemas/billing-settings.d.ts.map +1 -0
  396. package/dist/schemas/billing-settings.js +119 -0
  397. package/dist/schemas/billing.d.ts +211 -0
  398. package/dist/schemas/billing.d.ts.map +1 -0
  399. package/dist/schemas/billing.js +147 -0
  400. package/dist/schemas/branch-database.d.ts +98 -0
  401. package/dist/schemas/branch-database.d.ts.map +1 -0
  402. package/dist/schemas/branch-database.js +68 -0
  403. package/dist/schemas/challenge.d.ts +104 -0
  404. package/dist/schemas/challenge.d.ts.map +1 -0
  405. package/dist/schemas/challenge.js +74 -0
  406. package/dist/schemas/ci-settings.d.ts +122 -0
  407. package/dist/schemas/ci-settings.d.ts.map +1 -0
  408. package/dist/schemas/ci-settings.js +65 -0
  409. package/dist/schemas/consent-admin.d.ts +187 -0
  410. package/dist/schemas/consent-admin.d.ts.map +1 -0
  411. package/dist/schemas/consent-admin.js +114 -0
  412. package/dist/schemas/consent.d.ts +78 -0
  413. package/dist/schemas/consent.d.ts.map +1 -0
  414. package/dist/schemas/consent.js +68 -0
  415. package/dist/schemas/database.d.ts +104 -0
  416. package/dist/schemas/database.d.ts.map +1 -0
  417. package/dist/schemas/database.js +89 -0
  418. package/dist/schemas/deployment.d.ts +386 -0
  419. package/dist/schemas/deployment.d.ts.map +1 -0
  420. package/dist/schemas/deployment.js +282 -0
  421. package/dist/schemas/domain.d.ts +148 -0
  422. package/dist/schemas/domain.d.ts.map +1 -0
  423. package/dist/schemas/domain.js +86 -0
  424. package/dist/schemas/edge-deployments.d.ts +140 -0
  425. package/dist/schemas/edge-deployments.d.ts.map +1 -0
  426. package/dist/schemas/edge-deployments.js +87 -0
  427. package/dist/schemas/email-admin.d.ts +384 -0
  428. package/dist/schemas/email-admin.d.ts.map +1 -0
  429. package/dist/schemas/email-admin.js +313 -0
  430. package/dist/schemas/email.d.ts +46 -0
  431. package/dist/schemas/email.d.ts.map +1 -0
  432. package/dist/schemas/email.js +34 -0
  433. package/dist/schemas/engagement-admin.d.ts +148 -0
  434. package/dist/schemas/engagement-admin.d.ts.map +1 -0
  435. package/dist/schemas/engagement-admin.js +107 -0
  436. package/dist/schemas/env-var.d.ts +68 -0
  437. package/dist/schemas/env-var.d.ts.map +1 -0
  438. package/dist/schemas/env-var.js +52 -0
  439. package/dist/schemas/environment.d.ts +392 -0
  440. package/dist/schemas/environment.d.ts.map +1 -0
  441. package/dist/schemas/environment.js +211 -0
  442. package/dist/schemas/experiments.d.ts +540 -0
  443. package/dist/schemas/experiments.d.ts.map +1 -0
  444. package/dist/schemas/experiments.js +150 -0
  445. package/dist/schemas/flags-admin.d.ts +112 -0
  446. package/dist/schemas/flags-admin.d.ts.map +1 -0
  447. package/dist/schemas/flags-admin.js +84 -0
  448. package/dist/schemas/flags.d.ts +43 -0
  449. package/dist/schemas/flags.d.ts.map +1 -0
  450. package/dist/schemas/flags.js +27 -0
  451. package/dist/schemas/github.d.ts +34 -0
  452. package/dist/schemas/github.d.ts.map +1 -0
  453. package/dist/schemas/github.js +24 -0
  454. package/dist/schemas/ids.d.ts +39 -0
  455. package/dist/schemas/ids.d.ts.map +1 -0
  456. package/dist/schemas/ids.js +26 -0
  457. package/dist/schemas/image-opt.d.ts +70 -0
  458. package/dist/schemas/image-opt.d.ts.map +1 -0
  459. package/dist/schemas/image-opt.js +68 -0
  460. package/dist/schemas/kv-admin.d.ts +60 -0
  461. package/dist/schemas/kv-admin.d.ts.map +1 -0
  462. package/dist/schemas/kv-admin.js +43 -0
  463. package/dist/schemas/kv.d.ts +79 -0
  464. package/dist/schemas/kv.d.ts.map +1 -0
  465. package/dist/schemas/kv.js +54 -0
  466. package/dist/schemas/monitoring-admin.d.ts +314 -0
  467. package/dist/schemas/monitoring-admin.d.ts.map +1 -0
  468. package/dist/schemas/monitoring-admin.js +196 -0
  469. package/dist/schemas/monitoring.d.ts +143 -0
  470. package/dist/schemas/monitoring.d.ts.map +1 -0
  471. package/dist/schemas/monitoring.js +96 -0
  472. package/dist/schemas/newsletter.d.ts +366 -0
  473. package/dist/schemas/newsletter.d.ts.map +1 -0
  474. package/dist/schemas/newsletter.js +245 -0
  475. package/dist/schemas/notifications-admin.d.ts +337 -0
  476. package/dist/schemas/notifications-admin.d.ts.map +1 -0
  477. package/dist/schemas/notifications-admin.js +261 -0
  478. package/dist/schemas/notifications.d.ts +312 -0
  479. package/dist/schemas/notifications.d.ts.map +1 -0
  480. package/dist/schemas/notifications.js +235 -0
  481. package/dist/schemas/oidc.d.ts +74 -0
  482. package/dist/schemas/oidc.d.ts.map +1 -0
  483. package/dist/schemas/oidc.js +46 -0
  484. package/dist/schemas/organization-billing.d.ts +165 -0
  485. package/dist/schemas/organization-billing.d.ts.map +1 -0
  486. package/dist/schemas/organization-billing.js +156 -0
  487. package/dist/schemas/organization-project-users.d.ts +126 -0
  488. package/dist/schemas/organization-project-users.d.ts.map +1 -0
  489. package/dist/schemas/organization-project-users.js +88 -0
  490. package/dist/schemas/organization-projects.d.ts +129 -0
  491. package/dist/schemas/organization-projects.d.ts.map +1 -0
  492. package/dist/schemas/organization-projects.js +119 -0
  493. package/dist/schemas/organization-referrals.d.ts +129 -0
  494. package/dist/schemas/organization-referrals.d.ts.map +1 -0
  495. package/dist/schemas/organization-referrals.js +126 -0
  496. package/dist/schemas/organization-team.d.ts +123 -0
  497. package/dist/schemas/organization-team.d.ts.map +1 -0
  498. package/dist/schemas/organization-team.js +119 -0
  499. package/dist/schemas/organization.d.ts +210 -0
  500. package/dist/schemas/organization.d.ts.map +1 -0
  501. package/dist/schemas/organization.js +169 -0
  502. package/dist/schemas/plans.d.ts +211 -0
  503. package/dist/schemas/plans.d.ts.map +1 -0
  504. package/dist/schemas/plans.js +131 -0
  505. package/dist/schemas/privacy.d.ts +174 -0
  506. package/dist/schemas/privacy.d.ts.map +1 -0
  507. package/dist/schemas/privacy.js +132 -0
  508. package/dist/schemas/project-manifest.d.ts +1421 -0
  509. package/dist/schemas/project-manifest.d.ts.map +1 -0
  510. package/dist/schemas/project-manifest.js +318 -0
  511. package/dist/schemas/project.d.ts +132 -0
  512. package/dist/schemas/project.d.ts.map +1 -0
  513. package/dist/schemas/project.js +76 -0
  514. package/dist/schemas/realtime-admin.d.ts +51 -0
  515. package/dist/schemas/realtime-admin.d.ts.map +1 -0
  516. package/dist/schemas/realtime-admin.js +29 -0
  517. package/dist/schemas/realtime.d.ts +46 -0
  518. package/dist/schemas/realtime.d.ts.map +1 -0
  519. package/dist/schemas/realtime.js +32 -0
  520. package/dist/schemas/referrals-admin.d.ts +166 -0
  521. package/dist/schemas/referrals-admin.d.ts.map +1 -0
  522. package/dist/schemas/referrals-admin.js +123 -0
  523. package/dist/schemas/referrals.d.ts +148 -0
  524. package/dist/schemas/referrals.d.ts.map +1 -0
  525. package/dist/schemas/referrals.js +102 -0
  526. package/dist/schemas/refresh.d.ts +29 -0
  527. package/dist/schemas/refresh.d.ts.map +1 -0
  528. package/dist/schemas/refresh.js +18 -0
  529. package/dist/schemas/region.d.ts +118 -0
  530. package/dist/schemas/region.d.ts.map +1 -0
  531. package/dist/schemas/region.js +86 -0
  532. package/dist/schemas/resources.d.ts +345 -0
  533. package/dist/schemas/resources.d.ts.map +1 -0
  534. package/dist/schemas/resources.js +220 -0
  535. package/dist/schemas/runners.d.ts +93 -0
  536. package/dist/schemas/runners.d.ts.map +1 -0
  537. package/dist/schemas/runners.js +49 -0
  538. package/dist/schemas/saml.d.ts +254 -0
  539. package/dist/schemas/saml.d.ts.map +1 -0
  540. package/dist/schemas/saml.js +159 -0
  541. package/dist/schemas/search.d.ts +96 -0
  542. package/dist/schemas/search.d.ts.map +1 -0
  543. package/dist/schemas/search.js +57 -0
  544. package/dist/schemas/secret.d.ts +101 -0
  545. package/dist/schemas/secret.d.ts.map +1 -0
  546. package/dist/schemas/secret.js +79 -0
  547. package/dist/schemas/security.d.ts +345 -0
  548. package/dist/schemas/security.d.ts.map +1 -0
  549. package/dist/schemas/security.js +248 -0
  550. package/dist/schemas/service-tokens.d.ts +342 -0
  551. package/dist/schemas/service-tokens.d.ts.map +1 -0
  552. package/dist/schemas/service-tokens.js +101 -0
  553. package/dist/schemas/session-replay.d.ts +285 -0
  554. package/dist/schemas/session-replay.d.ts.map +1 -0
  555. package/dist/schemas/session-replay.js +145 -0
  556. package/dist/schemas/storage-admin.d.ts +351 -0
  557. package/dist/schemas/storage-admin.d.ts.map +1 -0
  558. package/dist/schemas/storage-admin.js +197 -0
  559. package/dist/schemas/storage.d.ts +257 -0
  560. package/dist/schemas/storage.d.ts.map +1 -0
  561. package/dist/schemas/storage.js +173 -0
  562. package/dist/schemas/tasks.d.ts +178 -0
  563. package/dist/schemas/tasks.d.ts.map +1 -0
  564. package/dist/schemas/tasks.js +102 -0
  565. package/dist/schemas/user.d.ts +103 -0
  566. package/dist/schemas/user.d.ts.map +1 -0
  567. package/dist/schemas/user.js +79 -0
  568. package/dist/schemas/webhooks.d.ts +259 -0
  569. package/dist/schemas/webhooks.d.ts.map +1 -0
  570. package/dist/schemas/webhooks.js +198 -0
  571. package/package.json +154 -0
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Admin Resources — operator recovery schemas (OPS-3).
3
+ *
4
+ * Mirrors `apps/api/src/server/platform/routes/admin/resources.ts`.
5
+ * Replaces the manual `DELETE FROM managed_resources WHERE id=...` from
6
+ * `docs/how-to/teardown-failure.md` (lines 113, 131) with a structured
7
+ * admin endpoint.
8
+ *
9
+ * Plane: `admin` (super-admin / scoped service-token only — scope
10
+ * `platform:resources:forcedelete`).
11
+ *
12
+ * Sibling slice OPS-2 (reseal) extends this file with its own schemas
13
+ * when it lands; keeping both under `admin-resources` so the audit
14
+ * `resourceType='managed_resource'` aligns with the surface name.
15
+ */
16
+ import { Schema } from 'effect';
17
+ /**
18
+ * Path param for `DELETE /admin/resources/:id`. Matches the TypeID grammar
19
+ * (`res_xxx`) — invalid input returns 400 at the validator boundary.
20
+ */
21
+ export declare const AdminResourceIdParams: Schema.Struct<{
22
+ id: Schema.filter<typeof Schema.String>;
23
+ }>;
24
+ export type AdminResourceIdParams = typeof AdminResourceIdParams.Type;
25
+ /**
26
+ * Query parameters for `DELETE /admin/resources/:id`.
27
+ *
28
+ * Semantics:
29
+ *
30
+ * - `reason` — required. Goes verbatim into the audit row.
31
+ * - `cascade` — when `true`, also tears down dependent rows (PITR
32
+ * restore points, project_platform_resources binding,
33
+ * project_resource_bindings rows). Default `false`.
34
+ * - `reallyForce` — escape hatch for rows whose `reconcile_status` is
35
+ * NOT `terminating`. Default `false`. The endpoint
36
+ * refuses the row otherwise (the reconciler should
37
+ * drive normal teardown — only rows already in
38
+ * `terminating` are valid candidates here).
39
+ */
40
+ export declare const AdminResourceForceDeleteQuery: Schema.Struct<{
41
+ reason: Schema.filter<Schema.filter<typeof Schema.String>>;
42
+ cascade: Schema.optional<Schema.transform<Schema.Union<[Schema.Literal<["true"]>, Schema.Literal<["false"]>]>, typeof Schema.Boolean>>;
43
+ reallyForce: Schema.optional<Schema.transform<Schema.Union<[Schema.Literal<["true"]>, Schema.Literal<["false"]>]>, typeof Schema.Boolean>>;
44
+ }>;
45
+ export type AdminResourceForceDeleteQuery = typeof AdminResourceForceDeleteQuery.Type;
46
+ /**
47
+ * Response envelope.
48
+ *
49
+ * - `id` — TypeID (`res_xxx`) of the row that was deleted.
50
+ * - `previousStatus` — `reconcile_status` value the row carried just
51
+ * before the DELETE landed. Operators use this to
52
+ * confirm the row was in `terminating` (or that
53
+ * `--really-force` was the override path).
54
+ * - `cascade` — echo of the request flag.
55
+ * - `reallyForce` — echo of the request flag.
56
+ * - `dependentsDeleted` — count of dependent rows additionally removed
57
+ * when cascade was true (PITR restore points,
58
+ * platform binding, project resource bindings).
59
+ * Always 0 when cascade=false.
60
+ */
61
+ export declare const AdminResourceForceDeleteResult: Schema.Struct<{
62
+ id: typeof Schema.String;
63
+ previousStatus: typeof Schema.String;
64
+ cascade: typeof Schema.Boolean;
65
+ reallyForce: typeof Schema.Boolean;
66
+ dependentsDeleted: typeof Schema.Number;
67
+ }>;
68
+ export type AdminResourceForceDeleteResult = typeof AdminResourceForceDeleteResult.Type;
69
+ /**
70
+ * Body of `POST /admin/resources/reseal`.
71
+ *
72
+ * - `keyId` — the active KEK ID the operator believes the platform
73
+ * is serving with. The endpoint refuses with 409 if the
74
+ * live ring's `activeKeyId` does not match — protecting
75
+ * against split-brain rotations where two operators race.
76
+ * - `filter` — reserved (see `ResealFilter`). Today the endpoint walks
77
+ * the canonical `buildRotationFields()` registry for ALL
78
+ * rows whose envelope is not under the active key; the
79
+ * filter is accepted but logged as ignored. When per-
80
+ * row scoping ships, the registry adapter will honour it.
81
+ *
82
+ * Idempotent: re-running with the same `keyId` rewrites zero rows once
83
+ * the registry has converged.
84
+ */
85
+ export declare const AdminResourceResealInput: Schema.Struct<{
86
+ keyId: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
87
+ filter: Schema.optional<Schema.Struct<{
88
+ projectId: Schema.optional<typeof Schema.String>;
89
+ envId: Schema.optional<typeof Schema.String>;
90
+ }>>;
91
+ }>;
92
+ export type AdminResourceResealInput = typeof AdminResourceResealInput.Type;
93
+ /**
94
+ * Per-field result. Mirrors `RotationFieldResult` from
95
+ * `packages/core/src/lib/crypto/rotation.ts` so the wire format stays a
96
+ * faithful projection of the in-process struct.
97
+ */
98
+ export declare const AdminResourceResealFieldResult: Schema.Struct<{
99
+ fieldName: typeof Schema.String;
100
+ rowsSeen: typeof Schema.Number;
101
+ rowsRotated: typeof Schema.Number;
102
+ rowsFailed: typeof Schema.Number;
103
+ failures: Schema.Array$<Schema.Struct<{
104
+ id: typeof Schema.String;
105
+ reason: typeof Schema.String;
106
+ }>>;
107
+ }>;
108
+ export type AdminResourceResealFieldResult = typeof AdminResourceResealFieldResult.Type;
109
+ /**
110
+ * Response envelope. `activeKeyId` is the server's authoritative answer
111
+ * (echo of the input on success).
112
+ */
113
+ export declare const AdminResourceResealResult: Schema.Struct<{
114
+ activeKeyId: typeof Schema.String;
115
+ totalRotated: typeof Schema.Number;
116
+ totalFailed: typeof Schema.Number;
117
+ fields: Schema.Array$<Schema.Struct<{
118
+ fieldName: typeof Schema.String;
119
+ rowsSeen: typeof Schema.Number;
120
+ rowsRotated: typeof Schema.Number;
121
+ rowsFailed: typeof Schema.Number;
122
+ failures: Schema.Array$<Schema.Struct<{
123
+ id: typeof Schema.String;
124
+ reason: typeof Schema.String;
125
+ }>>;
126
+ }>>;
127
+ }>;
128
+ export type AdminResourceResealResult = typeof AdminResourceResealResult.Type;
129
+ //# sourceMappingURL=admin-resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-resources.d.ts","sourceRoot":"","sources":["../../src/schemas/admin-resources.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAI/B;;;GAGG;AACH,eAAO,MAAM,qBAAqB;;EAMhC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,OAAO,qBAAqB,CAAC,IAAI,CAAA;AAgBrE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,6BAA6B;;;;EAIxC,CAAA;AACF,MAAM,MAAM,6BAA6B,GAAG,OAAO,6BAA6B,CAAC,IAAI,CAAA;AAErF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,8BAA8B;;;;;;EAMzC,CAAA;AACF,MAAM,MAAM,8BAA8B,GAAG,OAAO,8BAA8B,CAAC,IAAI,CAAA;AA6BvF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,wBAAwB;;;;;;EAGnC,CAAA;AACF,MAAM,MAAM,wBAAwB,GAAG,OAAO,wBAAwB,CAAC,IAAI,CAAA;AAE3E;;;;GAIG;AACH,eAAO,MAAM,8BAA8B;;;;;;;;;EAWzC,CAAA;AACF,MAAM,MAAM,8BAA8B,GAAG,OAAO,8BAA8B,CAAC,IAAI,CAAA;AAEvF;;;GAGG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;EAKpC,CAAA;AACF,MAAM,MAAM,yBAAyB,GAAG,OAAO,yBAAyB,CAAC,IAAI,CAAA"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Admin Resources — operator recovery schemas (OPS-3).
3
+ *
4
+ * Mirrors `apps/api/src/server/platform/routes/admin/resources.ts`.
5
+ * Replaces the manual `DELETE FROM managed_resources WHERE id=...` from
6
+ * `docs/how-to/teardown-failure.md` (lines 113, 131) with a structured
7
+ * admin endpoint.
8
+ *
9
+ * Plane: `admin` (super-admin / scoped service-token only — scope
10
+ * `platform:resources:forcedelete`).
11
+ *
12
+ * Sibling slice OPS-2 (reseal) extends this file with its own schemas
13
+ * when it lands; keeping both under `admin-resources` so the audit
14
+ * `resourceType='managed_resource'` aligns with the surface name.
15
+ */
16
+ import { Schema } from 'effect';
17
+ // ─── Force-delete (OPS-3) ───────────────────────────────────────────────
18
+ /**
19
+ * Path param for `DELETE /admin/resources/:id`. Matches the TypeID grammar
20
+ * (`res_xxx`) — invalid input returns 400 at the validator boundary.
21
+ */
22
+ export const AdminResourceIdParams = Schema.Struct({
23
+ id: Schema.String.pipe(Schema.pattern(/^res_[0-9a-z]{20,30}$/i, {
24
+ message: () => 'id must be a TypeID with prefix `res_`',
25
+ })),
26
+ });
27
+ /**
28
+ * Reason string for the audit trail. Length-bounded so audit_logs.metadata
29
+ * stays predictable.
30
+ */
31
+ const Reason = Schema.String.pipe(Schema.minLength(3), Schema.maxLength(500));
32
+ const BoolString = Schema.Union(Schema.Literal('true'), Schema.Literal('false')).pipe(Schema.transform(Schema.Boolean, {
33
+ strict: true,
34
+ decode: (s) => s === 'true',
35
+ encode: (b) => (b ? 'true' : 'false'),
36
+ }));
37
+ /**
38
+ * Query parameters for `DELETE /admin/resources/:id`.
39
+ *
40
+ * Semantics:
41
+ *
42
+ * - `reason` — required. Goes verbatim into the audit row.
43
+ * - `cascade` — when `true`, also tears down dependent rows (PITR
44
+ * restore points, project_platform_resources binding,
45
+ * project_resource_bindings rows). Default `false`.
46
+ * - `reallyForce` — escape hatch for rows whose `reconcile_status` is
47
+ * NOT `terminating`. Default `false`. The endpoint
48
+ * refuses the row otherwise (the reconciler should
49
+ * drive normal teardown — only rows already in
50
+ * `terminating` are valid candidates here).
51
+ */
52
+ export const AdminResourceForceDeleteQuery = Schema.Struct({
53
+ reason: Reason,
54
+ cascade: Schema.optional(BoolString),
55
+ reallyForce: Schema.optional(BoolString),
56
+ });
57
+ /**
58
+ * Response envelope.
59
+ *
60
+ * - `id` — TypeID (`res_xxx`) of the row that was deleted.
61
+ * - `previousStatus` — `reconcile_status` value the row carried just
62
+ * before the DELETE landed. Operators use this to
63
+ * confirm the row was in `terminating` (or that
64
+ * `--really-force` was the override path).
65
+ * - `cascade` — echo of the request flag.
66
+ * - `reallyForce` — echo of the request flag.
67
+ * - `dependentsDeleted` — count of dependent rows additionally removed
68
+ * when cascade was true (PITR restore points,
69
+ * platform binding, project resource bindings).
70
+ * Always 0 when cascade=false.
71
+ */
72
+ export const AdminResourceForceDeleteResult = Schema.Struct({
73
+ id: Schema.String,
74
+ previousStatus: Schema.String,
75
+ cascade: Schema.Boolean,
76
+ reallyForce: Schema.Boolean,
77
+ dependentsDeleted: Schema.Number,
78
+ });
79
+ // ─── Reseal (OPS-2) ─────────────────────────────────────────────────────
80
+ /**
81
+ * Active KEK identifier grammar. Sylphx KEK ids are short opaque strings
82
+ * (e.g. `kek-2026-04`); we constrain to printable ASCII so the audit
83
+ * row stays grep-friendly and the value can't smuggle control chars
84
+ * into log pipelines.
85
+ */
86
+ const KeyId = Schema.String.pipe(Schema.minLength(1), Schema.maxLength(64), Schema.pattern(/^[A-Za-z0-9._:-]+$/, {
87
+ message: () => 'keyId must match ^[A-Za-z0-9._:-]+$',
88
+ }));
89
+ /**
90
+ * Optional filter — currently unused by the rotation primitive (the
91
+ * canonical registry walks all rows under retired keys). Reserved for
92
+ * future per-project / per-env scoped rotations; accepted today so the
93
+ * shape stabilises before we expand the registry.
94
+ */
95
+ const ResealFilter = Schema.Struct({
96
+ projectId: Schema.optional(Schema.String),
97
+ envId: Schema.optional(Schema.String),
98
+ });
99
+ /**
100
+ * Body of `POST /admin/resources/reseal`.
101
+ *
102
+ * - `keyId` — the active KEK ID the operator believes the platform
103
+ * is serving with. The endpoint refuses with 409 if the
104
+ * live ring's `activeKeyId` does not match — protecting
105
+ * against split-brain rotations where two operators race.
106
+ * - `filter` — reserved (see `ResealFilter`). Today the endpoint walks
107
+ * the canonical `buildRotationFields()` registry for ALL
108
+ * rows whose envelope is not under the active key; the
109
+ * filter is accepted but logged as ignored. When per-
110
+ * row scoping ships, the registry adapter will honour it.
111
+ *
112
+ * Idempotent: re-running with the same `keyId` rewrites zero rows once
113
+ * the registry has converged.
114
+ */
115
+ export const AdminResourceResealInput = Schema.Struct({
116
+ keyId: KeyId,
117
+ filter: Schema.optional(ResealFilter),
118
+ });
119
+ /**
120
+ * Per-field result. Mirrors `RotationFieldResult` from
121
+ * `packages/core/src/lib/crypto/rotation.ts` so the wire format stays a
122
+ * faithful projection of the in-process struct.
123
+ */
124
+ export const AdminResourceResealFieldResult = Schema.Struct({
125
+ fieldName: Schema.String,
126
+ rowsSeen: Schema.Number,
127
+ rowsRotated: Schema.Number,
128
+ rowsFailed: Schema.Number,
129
+ failures: Schema.Array(Schema.Struct({
130
+ id: Schema.String,
131
+ reason: Schema.String,
132
+ })),
133
+ });
134
+ /**
135
+ * Response envelope. `activeKeyId` is the server's authoritative answer
136
+ * (echo of the input on success).
137
+ */
138
+ export const AdminResourceResealResult = Schema.Struct({
139
+ activeKeyId: Schema.String,
140
+ totalRotated: Schema.Number,
141
+ totalFailed: Schema.Number,
142
+ fields: Schema.Array(AdminResourceResealFieldResult),
143
+ });
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Admin Secrets — operator-driven secret rotation primitives.
3
+ *
4
+ * G-5: closes the production-ready audit gap on secret rotation. The
5
+ * Platform holds a small set of HMAC / encryption secrets in K8s Secret
6
+ * env-var slots (BREAK_GLASS_SECRET, PLATFORM_ENCRYPTION_KEY, …). Pre-G-5
7
+ * rotation was a manual two-person rule documented in
8
+ * `docs/runbooks/break-glass.md` §4 — not auditable, not metered, no
9
+ * automated reminder when a secret aged past 90 days.
10
+ *
11
+ * This endpoint surface gives operators a uniform CLI path to:
12
+ * - List rotatable secrets + their last-rotation age (`--dry-run`)
13
+ * - Initiate a rotation event for compliance (audit row + metric tick)
14
+ *
15
+ * The actual K8s secret value rotation is delegated to the runbook's
16
+ * existing two-person procedure; this endpoint is the AUDIT trail and
17
+ * the OBSERVABILITY anchor for `sylphx_secret_age_days`. We deliberately
18
+ * do NOT mint the new value server-side — minting would require holding
19
+ * the cluster KMS key in process memory, which is the very threat the
20
+ * rotation is hedging against. Operators paste the new value into the
21
+ * cluster Secret store; the endpoint records that it happened.
22
+ *
23
+ * Scope (`platform:secrets:rotate`) is service-token only; super-admin
24
+ * sessions are explicitly NOT accepted — a rotation MUST be a programmatic
25
+ * step in an Ops runbook, never an interactive Console click.
26
+ */
27
+ import { Schema } from 'effect';
28
+ /**
29
+ * The set of platform secrets that follow the Sylphx rotation cadence.
30
+ * Adding a new secret = adding a literal here AND a row in
31
+ * `secret_rotation_events` retention; CI guards both.
32
+ */
33
+ export declare const AdminSecretType: Schema.Literal<["break-glass", "encryption-key", "jwt-signing"]>;
34
+ export type AdminSecretType = typeof AdminSecretType.Type;
35
+ export declare const AdminRotateSecretInput: Schema.Struct<{
36
+ /** Which secret to rotate. */
37
+ type: Schema.Literal<["break-glass", "encryption-key", "jwt-signing"]>;
38
+ /**
39
+ * If true, returns the rotation eligibility report WITHOUT writing an
40
+ * audit row or emitting the metric tick. Always-safe; used by the CLI's
41
+ * `--dry-run` mode and by the periodic `sylphx_secret_age_days` alert
42
+ * cron to read state.
43
+ */
44
+ dryRun: Schema.optional<typeof Schema.Boolean>;
45
+ /**
46
+ * Operator note explaining WHY this rotation is happening. Required on
47
+ * non-dry-run calls (min 3 chars). Recorded on the audit row + on the
48
+ * `secret_rotation_events` ledger.
49
+ */
50
+ reason: Schema.optional<typeof Schema.String>;
51
+ }>;
52
+ export type AdminRotateSecretInput = typeof AdminRotateSecretInput.Type;
53
+ /**
54
+ * Per-secret rotation status — one row per known secret type.
55
+ *
56
+ * `lastRotatedAt` is null for a secret that has never been rotated since
57
+ * ledger ingest (greenfield clusters, freshly seeded `secret_rotation_events`).
58
+ * `ageDays` is `now() - lastRotatedAt` in days, or null when never-rotated;
59
+ * the alert rule fires when `ageDays > 90`.
60
+ */
61
+ export declare const AdminSecretStatus: Schema.Struct<{
62
+ type: Schema.Literal<["break-glass", "encryption-key", "jwt-signing"]>;
63
+ lastRotatedAt: Schema.NullOr<typeof Schema.String>;
64
+ ageDays: Schema.NullOr<typeof Schema.Number>;
65
+ /** Operator-facing rotation cadence in days (90 today). */
66
+ cadenceDays: typeof Schema.Number;
67
+ /** True iff `ageDays > cadenceDays` (or never-rotated). */
68
+ overdue: typeof Schema.Boolean;
69
+ /** Name of the K8s Secret + key the operator must update. */
70
+ clusterSecretRef: typeof Schema.String;
71
+ }>;
72
+ export type AdminSecretStatus = typeof AdminSecretStatus.Type;
73
+ export declare const AdminRotateSecretResult: Schema.Struct<{
74
+ /** True iff a real rotation event was recorded; false on dry-run. */
75
+ rotated: typeof Schema.Boolean;
76
+ /** Per-type rotation status snapshot (always populated). */
77
+ status: Schema.Struct<{
78
+ type: Schema.Literal<["break-glass", "encryption-key", "jwt-signing"]>;
79
+ lastRotatedAt: Schema.NullOr<typeof Schema.String>;
80
+ ageDays: Schema.NullOr<typeof Schema.Number>;
81
+ /** Operator-facing rotation cadence in days (90 today). */
82
+ cadenceDays: typeof Schema.Number;
83
+ /** True iff `ageDays > cadenceDays` (or never-rotated). */
84
+ overdue: typeof Schema.Boolean;
85
+ /** Name of the K8s Secret + key the operator must update. */
86
+ clusterSecretRef: typeof Schema.String;
87
+ }>;
88
+ /** ID of the audit_logs row written on a non-dry-run call. */
89
+ auditLogId: Schema.NullOr<typeof Schema.String>;
90
+ /** Operator-facing next-step instruction. */
91
+ message: typeof Schema.String;
92
+ }>;
93
+ export type AdminRotateSecretResult = typeof AdminRotateSecretResult.Type;
94
+ /**
95
+ * `GET /admin/secrets` — list every secret type + its rotation status.
96
+ * Used by the `sylphx_secret_age_days` alert and by the Console operator
97
+ * dashboard's secret-rotation widget.
98
+ */
99
+ export declare const AdminListSecretsResult: Schema.Struct<{
100
+ secrets: Schema.Array$<Schema.Struct<{
101
+ type: Schema.Literal<["break-glass", "encryption-key", "jwt-signing"]>;
102
+ lastRotatedAt: Schema.NullOr<typeof Schema.String>;
103
+ ageDays: Schema.NullOr<typeof Schema.Number>;
104
+ /** Operator-facing rotation cadence in days (90 today). */
105
+ cadenceDays: typeof Schema.Number;
106
+ /** True iff `ageDays > cadenceDays` (or never-rotated). */
107
+ overdue: typeof Schema.Boolean;
108
+ /** Name of the K8s Secret + key the operator must update. */
109
+ clusterSecretRef: typeof Schema.String;
110
+ }>>;
111
+ }>;
112
+ export type AdminListSecretsResult = typeof AdminListSecretsResult.Type;
113
+ //# sourceMappingURL=admin-secrets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-secrets.d.ts","sourceRoot":"","sources":["../../src/schemas/admin-secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B;;;;GAIG;AACH,eAAO,MAAM,eAAe,kEAQ3B,CAAA;AACD,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAA;AAEzD,eAAO,MAAM,sBAAsB;IAClC,8BAA8B;;IAE9B;;;;;OAKG;;IAEH;;;;OAIG;;EAEF,CAAA;AACF,MAAM,MAAM,sBAAsB,GAAG,OAAO,sBAAsB,CAAC,IAAI,CAAA;AAEvE;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB;;;;IAI7B,2DAA2D;;IAE3D,2DAA2D;;IAE3D,6DAA6D;;EAE5D,CAAA;AACF,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAA;AAE7D,eAAO,MAAM,uBAAuB;IACnC,qEAAqE;;IAErE,4DAA4D;;;;;QAZ5D,2DAA2D;;QAE3D,2DAA2D;;QAE3D,6DAA6D;;;IAU7D,8DAA8D;;IAE9D,6CAA6C;;EAE5C,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,OAAO,uBAAuB,CAAC,IAAI,CAAA;AAEzE;;;;GAIG;AACH,eAAO,MAAM,sBAAsB;;;;;QA1BlC,2DAA2D;;QAE3D,2DAA2D;;QAE3D,6DAA6D;;;EAwB5D,CAAA;AACF,MAAM,MAAM,sBAAsB,GAAG,OAAO,sBAAsB,CAAC,IAAI,CAAA"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Admin Secrets — operator-driven secret rotation primitives.
3
+ *
4
+ * G-5: closes the production-ready audit gap on secret rotation. The
5
+ * Platform holds a small set of HMAC / encryption secrets in K8s Secret
6
+ * env-var slots (BREAK_GLASS_SECRET, PLATFORM_ENCRYPTION_KEY, …). Pre-G-5
7
+ * rotation was a manual two-person rule documented in
8
+ * `docs/runbooks/break-glass.md` §4 — not auditable, not metered, no
9
+ * automated reminder when a secret aged past 90 days.
10
+ *
11
+ * This endpoint surface gives operators a uniform CLI path to:
12
+ * - List rotatable secrets + their last-rotation age (`--dry-run`)
13
+ * - Initiate a rotation event for compliance (audit row + metric tick)
14
+ *
15
+ * The actual K8s secret value rotation is delegated to the runbook's
16
+ * existing two-person procedure; this endpoint is the AUDIT trail and
17
+ * the OBSERVABILITY anchor for `sylphx_secret_age_days`. We deliberately
18
+ * do NOT mint the new value server-side — minting would require holding
19
+ * the cluster KMS key in process memory, which is the very threat the
20
+ * rotation is hedging against. Operators paste the new value into the
21
+ * cluster Secret store; the endpoint records that it happened.
22
+ *
23
+ * Scope (`platform:secrets:rotate`) is service-token only; super-admin
24
+ * sessions are explicitly NOT accepted — a rotation MUST be a programmatic
25
+ * step in an Ops runbook, never an interactive Console click.
26
+ */
27
+ import { Schema } from 'effect';
28
+ /**
29
+ * The set of platform secrets that follow the Sylphx rotation cadence.
30
+ * Adding a new secret = adding a literal here AND a row in
31
+ * `secret_rotation_events` retention; CI guards both.
32
+ */
33
+ export const AdminSecretType = Schema.Literal(
34
+ /** HMAC key for the `/admin/break-glass` endpoint (90-day cadence). */
35
+ 'break-glass',
36
+ /** AES-256-GCM key for at-rest encryption of secrets / webhooks. */
37
+ 'encryption-key',
38
+ /** RSA private key family for JWT signing — superseded by the
39
+ * `adminJwtKeys.rotate` namespace; included here for parity dashboards. */
40
+ 'jwt-signing');
41
+ export const AdminRotateSecretInput = Schema.Struct({
42
+ /** Which secret to rotate. */
43
+ type: AdminSecretType,
44
+ /**
45
+ * If true, returns the rotation eligibility report WITHOUT writing an
46
+ * audit row or emitting the metric tick. Always-safe; used by the CLI's
47
+ * `--dry-run` mode and by the periodic `sylphx_secret_age_days` alert
48
+ * cron to read state.
49
+ */
50
+ dryRun: Schema.optional(Schema.Boolean),
51
+ /**
52
+ * Operator note explaining WHY this rotation is happening. Required on
53
+ * non-dry-run calls (min 3 chars). Recorded on the audit row + on the
54
+ * `secret_rotation_events` ledger.
55
+ */
56
+ reason: Schema.optional(Schema.String),
57
+ });
58
+ /**
59
+ * Per-secret rotation status — one row per known secret type.
60
+ *
61
+ * `lastRotatedAt` is null for a secret that has never been rotated since
62
+ * ledger ingest (greenfield clusters, freshly seeded `secret_rotation_events`).
63
+ * `ageDays` is `now() - lastRotatedAt` in days, or null when never-rotated;
64
+ * the alert rule fires when `ageDays > 90`.
65
+ */
66
+ export const AdminSecretStatus = Schema.Struct({
67
+ type: AdminSecretType,
68
+ lastRotatedAt: Schema.NullOr(Schema.String),
69
+ ageDays: Schema.NullOr(Schema.Number),
70
+ /** Operator-facing rotation cadence in days (90 today). */
71
+ cadenceDays: Schema.Number,
72
+ /** True iff `ageDays > cadenceDays` (or never-rotated). */
73
+ overdue: Schema.Boolean,
74
+ /** Name of the K8s Secret + key the operator must update. */
75
+ clusterSecretRef: Schema.String,
76
+ });
77
+ export const AdminRotateSecretResult = Schema.Struct({
78
+ /** True iff a real rotation event was recorded; false on dry-run. */
79
+ rotated: Schema.Boolean,
80
+ /** Per-type rotation status snapshot (always populated). */
81
+ status: AdminSecretStatus,
82
+ /** ID of the audit_logs row written on a non-dry-run call. */
83
+ auditLogId: Schema.NullOr(Schema.String),
84
+ /** Operator-facing next-step instruction. */
85
+ message: Schema.String,
86
+ });
87
+ /**
88
+ * `GET /admin/secrets` — list every secret type + its rotation status.
89
+ * Used by the `sylphx_secret_age_days` alert and by the Console operator
90
+ * dashboard's secret-rotation widget.
91
+ */
92
+ export const AdminListSecretsResult = Schema.Struct({
93
+ secrets: Schema.Array(AdminSecretStatus),
94
+ });
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Admin Services — operator-only image-status drift schemas (drift-watchdog).
3
+ *
4
+ * Mirrors `apps/api/src/server/platform/routes/admin/services.ts`.
5
+ *
6
+ * The drift watchdog (`infra/addons/dogfood-smoke/manifests/image-drift-cronjob.yaml`)
7
+ * polls this endpoint every 10 minutes. For each Platform service it
8
+ * compares:
9
+ *
10
+ * - DB SSOT — `project_services.latest_image_ref` (the digest the
11
+ * build pipeline says is current).
12
+ * - K8s live — `deployment.spec.template.spec.containers[0].image`
13
+ * (the digest actually rolling on cluster).
14
+ *
15
+ * When the two diverge for >30 minutes the probe pages on-call. Inside the
16
+ * 30-minute grace window drift is tolerated (legit during a rolling deploy
17
+ * or a fresh build that hasn't propagated yet).
18
+ *
19
+ * Plane: `admin` (super-admin / scoped service-token only — scope
20
+ * `platform:services:read`).
21
+ */
22
+ import { Schema } from 'effect';
23
+ /**
24
+ * One row of the image-status report.
25
+ *
26
+ * - `name` — service name within the platform project
27
+ * (e.g. `api`, `controller`, `runtime`).
28
+ * - `dbRef` — `latest_image_ref` from `project_services`.
29
+ * `null` if the service has never been built.
30
+ * - `k8sRef` — image string from the live `Deployment`.
31
+ * `null` if the deployment is missing in K8s.
32
+ * - `driftMinutes` — minutes since the divergence first appeared.
33
+ * `0` when DB and K8s agree (or both null).
34
+ * `null` when one side is missing.
35
+ * - `inSync` — `true` iff `dbRef === k8sRef` AND both non-null.
36
+ * Probes alert when this is `false` past the grace
37
+ * window.
38
+ * - `dbUpdatedAt` — ISO timestamp the DB row was last touched
39
+ * (`project_services.updated_at`). Drives the
40
+ * `driftMinutes` calculation when DB is the lagger.
41
+ */
42
+ export declare const AdminServiceImageStatusRow: Schema.Struct<{
43
+ name: typeof Schema.String;
44
+ dbRef: Schema.NullOr<typeof Schema.String>;
45
+ k8sRef: Schema.NullOr<typeof Schema.String>;
46
+ driftMinutes: Schema.NullOr<typeof Schema.Number>;
47
+ inSync: typeof Schema.Boolean;
48
+ dbUpdatedAt: Schema.NullOr<typeof Schema.String>;
49
+ }>;
50
+ export type AdminServiceImageStatusRow = typeof AdminServiceImageStatusRow.Type;
51
+ /**
52
+ * Response of `GET /admin/services/image-status`.
53
+ *
54
+ * Always returns one row per Platform service (controller, api, runtime,
55
+ * web, exec-server, storage-gateway, storage-worker). Missing rows on
56
+ * either side surface as `dbRef=null` or `k8sRef=null` so the probe can
57
+ * still page on configuration drift, not just digest drift.
58
+ */
59
+ export declare const AdminServiceImageStatusResult: Schema.Struct<{
60
+ services: Schema.Array$<Schema.Struct<{
61
+ name: typeof Schema.String;
62
+ dbRef: Schema.NullOr<typeof Schema.String>;
63
+ k8sRef: Schema.NullOr<typeof Schema.String>;
64
+ driftMinutes: Schema.NullOr<typeof Schema.Number>;
65
+ inSync: typeof Schema.Boolean;
66
+ dbUpdatedAt: Schema.NullOr<typeof Schema.String>;
67
+ }>>;
68
+ checkedAt: typeof Schema.String;
69
+ }>;
70
+ export type AdminServiceImageStatusResult = typeof AdminServiceImageStatusResult.Type;
71
+ //# sourceMappingURL=admin-services.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-services.d.ts","sourceRoot":"","sources":["../../src/schemas/admin-services.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,0BAA0B;;;;;;;EAOrC,CAAA;AACF,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAC,IAAI,CAAA;AAE/E;;;;;;;GAOG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;EAGxC,CAAA;AACF,MAAM,MAAM,6BAA6B,GAAG,OAAO,6BAA6B,CAAC,IAAI,CAAA"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Admin Services — operator-only image-status drift schemas (drift-watchdog).
3
+ *
4
+ * Mirrors `apps/api/src/server/platform/routes/admin/services.ts`.
5
+ *
6
+ * The drift watchdog (`infra/addons/dogfood-smoke/manifests/image-drift-cronjob.yaml`)
7
+ * polls this endpoint every 10 minutes. For each Platform service it
8
+ * compares:
9
+ *
10
+ * - DB SSOT — `project_services.latest_image_ref` (the digest the
11
+ * build pipeline says is current).
12
+ * - K8s live — `deployment.spec.template.spec.containers[0].image`
13
+ * (the digest actually rolling on cluster).
14
+ *
15
+ * When the two diverge for >30 minutes the probe pages on-call. Inside the
16
+ * 30-minute grace window drift is tolerated (legit during a rolling deploy
17
+ * or a fresh build that hasn't propagated yet).
18
+ *
19
+ * Plane: `admin` (super-admin / scoped service-token only — scope
20
+ * `platform:services:read`).
21
+ */
22
+ import { Schema } from 'effect';
23
+ /**
24
+ * One row of the image-status report.
25
+ *
26
+ * - `name` — service name within the platform project
27
+ * (e.g. `api`, `controller`, `runtime`).
28
+ * - `dbRef` — `latest_image_ref` from `project_services`.
29
+ * `null` if the service has never been built.
30
+ * - `k8sRef` — image string from the live `Deployment`.
31
+ * `null` if the deployment is missing in K8s.
32
+ * - `driftMinutes` — minutes since the divergence first appeared.
33
+ * `0` when DB and K8s agree (or both null).
34
+ * `null` when one side is missing.
35
+ * - `inSync` — `true` iff `dbRef === k8sRef` AND both non-null.
36
+ * Probes alert when this is `false` past the grace
37
+ * window.
38
+ * - `dbUpdatedAt` — ISO timestamp the DB row was last touched
39
+ * (`project_services.updated_at`). Drives the
40
+ * `driftMinutes` calculation when DB is the lagger.
41
+ */
42
+ export const AdminServiceImageStatusRow = Schema.Struct({
43
+ name: Schema.String,
44
+ dbRef: Schema.NullOr(Schema.String),
45
+ k8sRef: Schema.NullOr(Schema.String),
46
+ driftMinutes: Schema.NullOr(Schema.Number),
47
+ inSync: Schema.Boolean,
48
+ dbUpdatedAt: Schema.NullOr(Schema.String),
49
+ });
50
+ /**
51
+ * Response of `GET /admin/services/image-status`.
52
+ *
53
+ * Always returns one row per Platform service (controller, api, runtime,
54
+ * web, exec-server, storage-gateway, storage-worker). Missing rows on
55
+ * either side surface as `dbRef=null` or `k8sRef=null` so the probe can
56
+ * still page on configuration drift, not just digest drift.
57
+ */
58
+ export const AdminServiceImageStatusResult = Schema.Struct({
59
+ services: Schema.Array(AdminServiceImageStatusRow),
60
+ checkedAt: Schema.String,
61
+ });