@marinoscar/platform-contract 0.1.0-next.3 → 0.1.0-next.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 (673) hide show
  1. package/CHANGELOG.md +173 -0
  2. package/README.md +23 -1
  3. package/dist/cjs/ai/capabilities.d.ts +85 -0
  4. package/dist/cjs/ai/capabilities.d.ts.map +1 -0
  5. package/dist/cjs/ai/capabilities.js +93 -0
  6. package/dist/cjs/ai/capabilities.js.map +1 -0
  7. package/dist/cjs/ai/constants.d.ts +239 -0
  8. package/dist/cjs/ai/constants.d.ts.map +1 -0
  9. package/dist/cjs/ai/constants.js +233 -0
  10. package/dist/cjs/ai/constants.js.map +1 -0
  11. package/dist/cjs/ai/features.d.ts +24 -0
  12. package/dist/cjs/ai/features.d.ts.map +1 -0
  13. package/dist/cjs/ai/features.js +33 -0
  14. package/dist/cjs/ai/features.js.map +1 -0
  15. package/dist/cjs/ai/index.d.ts +11 -0
  16. package/dist/cjs/ai/index.d.ts.map +1 -0
  17. package/dist/cjs/ai/index.js +81 -0
  18. package/dist/cjs/ai/index.js.map +1 -0
  19. package/dist/cjs/ai/org-keys.d.ts +50 -0
  20. package/dist/cjs/ai/org-keys.d.ts.map +1 -0
  21. package/dist/cjs/ai/org-keys.js +43 -0
  22. package/dist/cjs/ai/org-keys.js.map +1 -0
  23. package/dist/cjs/ai/schemas.d.ts +642 -0
  24. package/dist/cjs/ai/schemas.d.ts.map +1 -0
  25. package/dist/cjs/ai/schemas.js +894 -0
  26. package/dist/cjs/ai/schemas.js.map +1 -0
  27. package/dist/cjs/android-app/constants.d.ts +337 -0
  28. package/dist/cjs/android-app/constants.d.ts.map +1 -0
  29. package/dist/cjs/android-app/constants.js +312 -0
  30. package/dist/cjs/android-app/constants.js.map +1 -0
  31. package/dist/cjs/android-app/index.d.ts +5 -0
  32. package/dist/cjs/android-app/index.d.ts.map +1 -0
  33. package/dist/cjs/android-app/index.js +57 -0
  34. package/dist/cjs/android-app/index.js.map +1 -0
  35. package/dist/cjs/android-app/schemas.d.ts +358 -0
  36. package/dist/cjs/android-app/schemas.d.ts.map +1 -0
  37. package/dist/cjs/android-app/schemas.js +310 -0
  38. package/dist/cjs/android-app/schemas.js.map +1 -0
  39. package/dist/cjs/credentials/constants.d.ts +35 -0
  40. package/dist/cjs/credentials/constants.d.ts.map +1 -0
  41. package/dist/cjs/credentials/constants.js +39 -0
  42. package/dist/cjs/credentials/constants.js.map +1 -0
  43. package/dist/cjs/credentials/index.d.ts +5 -0
  44. package/dist/cjs/credentials/index.d.ts.map +1 -0
  45. package/dist/cjs/credentials/index.js +17 -0
  46. package/dist/cjs/credentials/index.js.map +1 -0
  47. package/dist/cjs/credentials/schemas.d.ts +64 -0
  48. package/dist/cjs/credentials/schemas.d.ts.map +1 -0
  49. package/dist/cjs/credentials/schemas.js +82 -0
  50. package/dist/cjs/credentials/schemas.js.map +1 -0
  51. package/dist/cjs/db-backup/config.d.ts +76 -0
  52. package/dist/cjs/db-backup/config.d.ts.map +1 -0
  53. package/dist/cjs/db-backup/config.js +115 -0
  54. package/dist/cjs/db-backup/config.js.map +1 -0
  55. package/dist/cjs/db-backup/constants.d.ts +314 -0
  56. package/dist/cjs/db-backup/constants.d.ts.map +1 -0
  57. package/dist/cjs/db-backup/constants.js +243 -0
  58. package/dist/cjs/db-backup/constants.js.map +1 -0
  59. package/dist/cjs/db-backup/index.d.ts +19 -0
  60. package/dist/cjs/db-backup/index.d.ts.map +1 -0
  61. package/dist/cjs/db-backup/index.js +81 -0
  62. package/dist/cjs/db-backup/index.js.map +1 -0
  63. package/dist/cjs/db-backup/node-credential.d.ts +37 -0
  64. package/dist/cjs/db-backup/node-credential.d.ts.map +1 -0
  65. package/dist/cjs/db-backup/node-credential.js +107 -0
  66. package/dist/cjs/db-backup/node-credential.js.map +1 -0
  67. package/dist/cjs/db-backup/node-result.d.ts +34 -0
  68. package/dist/cjs/db-backup/node-result.d.ts.map +1 -0
  69. package/dist/cjs/db-backup/node-result.js +168 -0
  70. package/dist/cjs/db-backup/node-result.js.map +1 -0
  71. package/dist/cjs/db-backup/restore.d.ts +405 -0
  72. package/dist/cjs/db-backup/restore.d.ts.map +1 -0
  73. package/dist/cjs/db-backup/restore.js +497 -0
  74. package/dist/cjs/db-backup/restore.js.map +1 -0
  75. package/dist/cjs/db-backup/run-actions.d.ts +49 -0
  76. package/dist/cjs/db-backup/run-actions.d.ts.map +1 -0
  77. package/dist/cjs/db-backup/run-actions.js +121 -0
  78. package/dist/cjs/db-backup/run-actions.js.map +1 -0
  79. package/dist/cjs/db-backup/runs-list-query.d.ts +20 -0
  80. package/dist/cjs/db-backup/runs-list-query.d.ts.map +1 -0
  81. package/dist/cjs/db-backup/runs-list-query.js +53 -0
  82. package/dist/cjs/db-backup/runs-list-query.js.map +1 -0
  83. package/dist/cjs/db-backup/runs.d.ts +46 -0
  84. package/dist/cjs/db-backup/runs.d.ts.map +1 -0
  85. package/dist/cjs/db-backup/runs.js +232 -0
  86. package/dist/cjs/db-backup/runs.js.map +1 -0
  87. package/dist/cjs/db-backup/schemas.d.ts +9 -0
  88. package/dist/cjs/db-backup/schemas.d.ts.map +1 -0
  89. package/dist/cjs/db-backup/schemas.js +31 -0
  90. package/dist/cjs/db-backup/schemas.js.map +1 -0
  91. package/dist/cjs/db-backup/settings-schemas.d.ts +217 -0
  92. package/dist/cjs/db-backup/settings-schemas.d.ts.map +1 -0
  93. package/dist/cjs/db-backup/settings-schemas.js +319 -0
  94. package/dist/cjs/db-backup/settings-schemas.js.map +1 -0
  95. package/dist/cjs/email/constants.d.ts +82 -0
  96. package/dist/cjs/email/constants.d.ts.map +1 -0
  97. package/dist/cjs/email/constants.js +82 -0
  98. package/dist/cjs/email/constants.js.map +1 -0
  99. package/dist/cjs/email/index.d.ts +5 -0
  100. package/dist/cjs/email/index.d.ts.map +1 -0
  101. package/dist/cjs/email/index.js +30 -0
  102. package/dist/cjs/email/index.js.map +1 -0
  103. package/dist/cjs/email/schemas.d.ts +276 -0
  104. package/dist/cjs/email/schemas.d.ts.map +1 -0
  105. package/dist/cjs/email/schemas.js +280 -0
  106. package/dist/cjs/email/schemas.js.map +1 -0
  107. package/dist/cjs/exports/constants.d.ts +123 -0
  108. package/dist/cjs/exports/constants.d.ts.map +1 -0
  109. package/dist/cjs/exports/constants.js +109 -0
  110. package/dist/cjs/exports/constants.js.map +1 -0
  111. package/dist/cjs/exports/index.d.ts +5 -0
  112. package/dist/cjs/exports/index.d.ts.map +1 -0
  113. package/dist/cjs/exports/index.js +42 -0
  114. package/dist/cjs/exports/index.js.map +1 -0
  115. package/dist/cjs/exports/schemas.d.ts +386 -0
  116. package/dist/cjs/exports/schemas.d.ts.map +1 -0
  117. package/dist/cjs/exports/schemas.js +288 -0
  118. package/dist/cjs/exports/schemas.js.map +1 -0
  119. package/dist/cjs/identity/constants.d.ts +273 -0
  120. package/dist/cjs/identity/constants.d.ts.map +1 -0
  121. package/dist/cjs/identity/constants.js +248 -0
  122. package/dist/cjs/identity/constants.js.map +1 -0
  123. package/dist/cjs/identity/index.d.ts +5 -0
  124. package/dist/cjs/identity/index.d.ts.map +1 -0
  125. package/dist/cjs/identity/index.js +73 -0
  126. package/dist/cjs/identity/index.js.map +1 -0
  127. package/dist/cjs/identity/schemas.d.ts +784 -0
  128. package/dist/cjs/identity/schemas.d.ts.map +1 -0
  129. package/dist/cjs/identity/schemas.js +684 -0
  130. package/dist/cjs/identity/schemas.js.map +1 -0
  131. package/dist/cjs/jobs/constants.d.ts +135 -0
  132. package/dist/cjs/jobs/constants.d.ts.map +1 -0
  133. package/dist/cjs/jobs/constants.js +130 -0
  134. package/dist/cjs/jobs/constants.js.map +1 -0
  135. package/dist/cjs/jobs/index.d.ts +9 -0
  136. package/dist/cjs/jobs/index.d.ts.map +1 -0
  137. package/dist/cjs/jobs/index.js +59 -0
  138. package/dist/cjs/jobs/index.js.map +1 -0
  139. package/dist/cjs/jobs/retention-schemas.d.ts +252 -0
  140. package/dist/cjs/jobs/retention-schemas.d.ts.map +1 -0
  141. package/dist/cjs/jobs/retention-schemas.js +233 -0
  142. package/dist/cjs/jobs/retention-schemas.js.map +1 -0
  143. package/dist/cjs/jobs/schemas.d.ts +361 -0
  144. package/dist/cjs/jobs/schemas.d.ts.map +1 -0
  145. package/dist/cjs/jobs/schemas.js +706 -0
  146. package/dist/cjs/jobs/schemas.js.map +1 -0
  147. package/dist/cjs/jobs/settings-schemas.d.ts +84 -0
  148. package/dist/cjs/jobs/settings-schemas.d.ts.map +1 -0
  149. package/dist/cjs/jobs/settings-schemas.js +116 -0
  150. package/dist/cjs/jobs/settings-schemas.js.map +1 -0
  151. package/dist/cjs/nodes/admin-schemas.d.ts +204 -0
  152. package/dist/cjs/nodes/admin-schemas.d.ts.map +1 -0
  153. package/dist/cjs/nodes/admin-schemas.js +153 -0
  154. package/dist/cjs/nodes/admin-schemas.js.map +1 -0
  155. package/dist/cjs/nodes/constants.d.ts +86 -0
  156. package/dist/cjs/nodes/constants.d.ts.map +1 -0
  157. package/dist/cjs/nodes/constants.js +102 -0
  158. package/dist/cjs/nodes/constants.js.map +1 -0
  159. package/dist/cjs/nodes/index.d.ts +8 -0
  160. package/dist/cjs/nodes/index.d.ts.map +1 -0
  161. package/dist/cjs/nodes/index.js +50 -0
  162. package/dist/cjs/nodes/index.js.map +1 -0
  163. package/dist/cjs/nodes/schemas.d.ts +332 -0
  164. package/dist/cjs/nodes/schemas.d.ts.map +1 -0
  165. package/dist/cjs/nodes/schemas.js +937 -0
  166. package/dist/cjs/nodes/schemas.js.map +1 -0
  167. package/dist/cjs/nodes/settings-schemas.d.ts +82 -0
  168. package/dist/cjs/nodes/settings-schemas.d.ts.map +1 -0
  169. package/dist/cjs/nodes/settings-schemas.js +106 -0
  170. package/dist/cjs/nodes/settings-schemas.js.map +1 -0
  171. package/dist/cjs/notifications/constants.d.ts +197 -0
  172. package/dist/cjs/notifications/constants.d.ts.map +1 -0
  173. package/dist/cjs/notifications/constants.js +181 -0
  174. package/dist/cjs/notifications/constants.js.map +1 -0
  175. package/dist/cjs/notifications/index.d.ts +5 -0
  176. package/dist/cjs/notifications/index.d.ts.map +1 -0
  177. package/dist/cjs/notifications/index.js +86 -0
  178. package/dist/cjs/notifications/index.js.map +1 -0
  179. package/dist/cjs/notifications/schemas.d.ts +1016 -0
  180. package/dist/cjs/notifications/schemas.d.ts.map +1 -0
  181. package/dist/cjs/notifications/schemas.js +851 -0
  182. package/dist/cjs/notifications/schemas.js.map +1 -0
  183. package/dist/cjs/onboarding/constants.d.ts +138 -0
  184. package/dist/cjs/onboarding/constants.d.ts.map +1 -0
  185. package/dist/cjs/onboarding/constants.js +123 -0
  186. package/dist/cjs/onboarding/constants.js.map +1 -0
  187. package/dist/cjs/onboarding/index.d.ts +5 -0
  188. package/dist/cjs/onboarding/index.d.ts.map +1 -0
  189. package/dist/cjs/onboarding/index.js +42 -0
  190. package/dist/cjs/onboarding/index.js.map +1 -0
  191. package/dist/cjs/onboarding/schemas.d.ts +360 -0
  192. package/dist/cjs/onboarding/schemas.d.ts.map +1 -0
  193. package/dist/cjs/onboarding/schemas.js +260 -0
  194. package/dist/cjs/onboarding/schemas.js.map +1 -0
  195. package/dist/cjs/settings/constants.d.ts +206 -0
  196. package/dist/cjs/settings/constants.d.ts.map +1 -0
  197. package/dist/cjs/settings/constants.js +200 -0
  198. package/dist/cjs/settings/constants.js.map +1 -0
  199. package/dist/cjs/settings/index.d.ts +6 -0
  200. package/dist/cjs/settings/index.d.ts.map +1 -0
  201. package/dist/cjs/settings/index.js +62 -0
  202. package/dist/cjs/settings/index.js.map +1 -0
  203. package/dist/cjs/settings/schemas.d.ts +574 -0
  204. package/dist/cjs/settings/schemas.d.ts.map +1 -0
  205. package/dist/cjs/settings/schemas.js +437 -0
  206. package/dist/cjs/settings/schemas.js.map +1 -0
  207. package/dist/cjs/settings/types.d.ts +79 -0
  208. package/dist/cjs/settings/types.d.ts.map +1 -0
  209. package/dist/cjs/settings/types.js +6 -0
  210. package/dist/cjs/settings/types.js.map +1 -0
  211. package/dist/cjs/sharing/constants.d.ts +216 -0
  212. package/dist/cjs/sharing/constants.d.ts.map +1 -0
  213. package/dist/cjs/sharing/constants.js +163 -0
  214. package/dist/cjs/sharing/constants.js.map +1 -0
  215. package/dist/cjs/sharing/enum.d.ts +5 -0
  216. package/dist/cjs/sharing/enum.d.ts.map +1 -0
  217. package/dist/cjs/sharing/enum.js +9 -0
  218. package/dist/cjs/sharing/enum.js.map +1 -0
  219. package/dist/cjs/sharing/grants.d.ts +490 -0
  220. package/dist/cjs/sharing/grants.d.ts.map +1 -0
  221. package/dist/cjs/sharing/grants.js +447 -0
  222. package/dist/cjs/sharing/grants.js.map +1 -0
  223. package/dist/cjs/sharing/groups.d.ts +410 -0
  224. package/dist/cjs/sharing/groups.d.ts.map +1 -0
  225. package/dist/cjs/sharing/groups.js +375 -0
  226. package/dist/cjs/sharing/groups.js.map +1 -0
  227. package/dist/cjs/sharing/index.d.ts +5 -0
  228. package/dist/cjs/sharing/index.d.ts.map +1 -0
  229. package/dist/cjs/sharing/index.js +77 -0
  230. package/dist/cjs/sharing/index.js.map +1 -0
  231. package/dist/cjs/sharing/schemas.d.ts +3 -0
  232. package/dist/cjs/sharing/schemas.d.ts.map +1 -0
  233. package/dist/cjs/sharing/schemas.js +21 -0
  234. package/dist/cjs/sharing/schemas.js.map +1 -0
  235. package/dist/cjs/storage/constants.d.ts +111 -0
  236. package/dist/cjs/storage/constants.d.ts.map +1 -0
  237. package/dist/cjs/storage/constants.js +107 -0
  238. package/dist/cjs/storage/constants.js.map +1 -0
  239. package/dist/cjs/storage/index.d.ts +27 -0
  240. package/dist/cjs/storage/index.d.ts.map +1 -0
  241. package/dist/cjs/storage/index.js +69 -0
  242. package/dist/cjs/storage/index.js.map +1 -0
  243. package/dist/cjs/storage/objects-complete-upload.d.ts +19 -0
  244. package/dist/cjs/storage/objects-complete-upload.d.ts.map +1 -0
  245. package/dist/cjs/storage/objects-complete-upload.js +19 -0
  246. package/dist/cjs/storage/objects-complete-upload.js.map +1 -0
  247. package/dist/cjs/storage/objects-download-url.d.ts +17 -0
  248. package/dist/cjs/storage/objects-download-url.d.ts.map +1 -0
  249. package/dist/cjs/storage/objects-download-url.js +16 -0
  250. package/dist/cjs/storage/objects-download-url.js.map +1 -0
  251. package/dist/cjs/storage/objects-init-upload.d.ts +39 -0
  252. package/dist/cjs/storage/objects-init-upload.d.ts.map +1 -0
  253. package/dist/cjs/storage/objects-init-upload.js +40 -0
  254. package/dist/cjs/storage/objects-init-upload.js.map +1 -0
  255. package/dist/cjs/storage/objects-list-query.d.ts +50 -0
  256. package/dist/cjs/storage/objects-list-query.d.ts.map +1 -0
  257. package/dist/cjs/storage/objects-list-query.js +23 -0
  258. package/dist/cjs/storage/objects-list-query.js.map +1 -0
  259. package/dist/cjs/storage/objects-object-response.d.ts +49 -0
  260. package/dist/cjs/storage/objects-object-response.d.ts.map +1 -0
  261. package/dist/cjs/storage/objects-object-response.js +54 -0
  262. package/dist/cjs/storage/objects-object-response.js.map +1 -0
  263. package/dist/cjs/storage/objects-update-metadata.d.ts +16 -0
  264. package/dist/cjs/storage/objects-update-metadata.d.ts.map +1 -0
  265. package/dist/cjs/storage/objects-update-metadata.js +14 -0
  266. package/dist/cjs/storage/objects-update-metadata.js.map +1 -0
  267. package/dist/cjs/storage/schemas.d.ts +13 -0
  268. package/dist/cjs/storage/schemas.d.ts.map +1 -0
  269. package/dist/cjs/storage/schemas.js +35 -0
  270. package/dist/cjs/storage/schemas.js.map +1 -0
  271. package/dist/cjs/storage/settings-schemas.d.ts +188 -0
  272. package/dist/cjs/storage/settings-schemas.d.ts.map +1 -0
  273. package/dist/cjs/storage/settings-schemas.js +223 -0
  274. package/dist/cjs/storage/settings-schemas.js.map +1 -0
  275. package/dist/cjs/storage/storage-bucket-provision.d.ts +152 -0
  276. package/dist/cjs/storage/storage-bucket-provision.d.ts.map +1 -0
  277. package/dist/cjs/storage/storage-bucket-provision.js +216 -0
  278. package/dist/cjs/storage/storage-bucket-provision.js.map +1 -0
  279. package/dist/cjs/storage/storage-config-response.d.ts +99 -0
  280. package/dist/cjs/storage/storage-config-response.d.ts.map +1 -0
  281. package/dist/cjs/storage/storage-config-response.js +173 -0
  282. package/dist/cjs/storage/storage-config-response.js.map +1 -0
  283. package/dist/cjs/storage/storage-config-update.d.ts +46 -0
  284. package/dist/cjs/storage/storage-config-update.d.ts.map +1 -0
  285. package/dist/cjs/storage/storage-config-update.js +133 -0
  286. package/dist/cjs/storage/storage-config-update.js.map +1 -0
  287. package/dist/cjs/storage/storage-connection-test.d.ts +129 -0
  288. package/dist/cjs/storage/storage-connection-test.d.ts.map +1 -0
  289. package/dist/cjs/storage/storage-connection-test.js +244 -0
  290. package/dist/cjs/storage/storage-connection-test.js.map +1 -0
  291. package/dist/cjs/storage/storage-status.d.ts +16 -0
  292. package/dist/cjs/storage/storage-status.d.ts.map +1 -0
  293. package/dist/cjs/storage/storage-status.js +23 -0
  294. package/dist/cjs/storage/storage-status.js.map +1 -0
  295. package/dist/cjs/telemetry/config.d.ts +4 -0
  296. package/dist/cjs/telemetry/config.d.ts.map +1 -1
  297. package/dist/cjs/telemetry/config.js +16 -2
  298. package/dist/cjs/telemetry/config.js.map +1 -1
  299. package/dist/cjs/telemetry/connection.d.ts +1 -1
  300. package/dist/cjs/telemetry/constants.d.ts +378 -6
  301. package/dist/cjs/telemetry/constants.d.ts.map +1 -1
  302. package/dist/cjs/telemetry/constants.js +290 -5
  303. package/dist/cjs/telemetry/constants.js.map +1 -1
  304. package/dist/cjs/telemetry/dashboard.d.ts +188 -17
  305. package/dist/cjs/telemetry/dashboard.d.ts.map +1 -1
  306. package/dist/cjs/telemetry/dashboard.js +61 -3
  307. package/dist/cjs/telemetry/dashboard.js.map +1 -1
  308. package/dist/cjs/telemetry/index.d.ts +4 -4
  309. package/dist/cjs/telemetry/index.d.ts.map +1 -1
  310. package/dist/cjs/telemetry/index.js +35 -3
  311. package/dist/cjs/telemetry/index.js.map +1 -1
  312. package/dist/cjs/telemetry/presentation.d.ts +243 -0
  313. package/dist/cjs/telemetry/presentation.d.ts.map +1 -0
  314. package/dist/cjs/telemetry/presentation.js +300 -0
  315. package/dist/cjs/telemetry/presentation.js.map +1 -0
  316. package/dist/cjs/telemetry/query.d.ts +2 -2
  317. package/dist/cjs/telemetry/schemas.d.ts +5 -2
  318. package/dist/cjs/telemetry/schemas.d.ts.map +1 -1
  319. package/dist/cjs/telemetry/schemas.js +21 -1
  320. package/dist/cjs/telemetry/schemas.js.map +1 -1
  321. package/dist/cjs/telemetry/stack.d.ts +5 -5
  322. package/dist/cjs/telemetry/store.d.ts +111 -0
  323. package/dist/cjs/telemetry/store.d.ts.map +1 -0
  324. package/dist/cjs/telemetry/store.js +83 -0
  325. package/dist/cjs/telemetry/store.js.map +1 -0
  326. package/dist/cjs/user-data/constants.d.ts +157 -0
  327. package/dist/cjs/user-data/constants.d.ts.map +1 -0
  328. package/dist/cjs/user-data/constants.js +137 -0
  329. package/dist/cjs/user-data/constants.js.map +1 -0
  330. package/dist/cjs/user-data/index.d.ts +5 -0
  331. package/dist/cjs/user-data/index.d.ts.map +1 -0
  332. package/dist/cjs/user-data/index.js +46 -0
  333. package/dist/cjs/user-data/index.js.map +1 -0
  334. package/dist/cjs/user-data/schemas.d.ts +306 -0
  335. package/dist/cjs/user-data/schemas.d.ts.map +1 -0
  336. package/dist/cjs/user-data/schemas.js +333 -0
  337. package/dist/cjs/user-data/schemas.js.map +1 -0
  338. package/dist/esm/ai/capabilities.d.ts +85 -0
  339. package/dist/esm/ai/capabilities.d.ts.map +1 -0
  340. package/dist/esm/ai/capabilities.js +90 -0
  341. package/dist/esm/ai/capabilities.js.map +1 -0
  342. package/dist/esm/ai/constants.d.ts +239 -0
  343. package/dist/esm/ai/constants.d.ts.map +1 -0
  344. package/dist/esm/ai/constants.js +229 -0
  345. package/dist/esm/ai/constants.js.map +1 -0
  346. package/dist/esm/ai/features.d.ts +24 -0
  347. package/dist/esm/ai/features.d.ts.map +1 -0
  348. package/dist/esm/ai/features.js +30 -0
  349. package/dist/esm/ai/features.js.map +1 -0
  350. package/dist/esm/ai/index.d.ts +11 -0
  351. package/dist/esm/ai/index.d.ts.map +1 -0
  352. package/dist/esm/ai/index.js +16 -0
  353. package/dist/esm/ai/index.js.map +1 -0
  354. package/dist/esm/ai/org-keys.d.ts +50 -0
  355. package/dist/esm/ai/org-keys.d.ts.map +1 -0
  356. package/dist/esm/ai/org-keys.js +40 -0
  357. package/dist/esm/ai/org-keys.js.map +1 -0
  358. package/dist/esm/ai/schemas.d.ts +642 -0
  359. package/dist/esm/ai/schemas.d.ts.map +1 -0
  360. package/dist/esm/ai/schemas.js +889 -0
  361. package/dist/esm/ai/schemas.js.map +1 -0
  362. package/dist/esm/android-app/constants.d.ts +337 -0
  363. package/dist/esm/android-app/constants.d.ts.map +1 -0
  364. package/dist/esm/android-app/constants.js +306 -0
  365. package/dist/esm/android-app/constants.js.map +1 -0
  366. package/dist/esm/android-app/index.d.ts +5 -0
  367. package/dist/esm/android-app/index.d.ts.map +1 -0
  368. package/dist/esm/android-app/index.js +8 -0
  369. package/dist/esm/android-app/index.js.map +1 -0
  370. package/dist/esm/android-app/schemas.d.ts +358 -0
  371. package/dist/esm/android-app/schemas.d.ts.map +1 -0
  372. package/dist/esm/android-app/schemas.js +306 -0
  373. package/dist/esm/android-app/schemas.js.map +1 -0
  374. package/dist/esm/credentials/constants.d.ts +35 -0
  375. package/dist/esm/credentials/constants.d.ts.map +1 -0
  376. package/dist/esm/credentials/constants.js +36 -0
  377. package/dist/esm/credentials/constants.js.map +1 -0
  378. package/dist/esm/credentials/index.d.ts +5 -0
  379. package/dist/esm/credentials/index.d.ts.map +1 -0
  380. package/dist/esm/credentials/index.js +8 -0
  381. package/dist/esm/credentials/index.js.map +1 -0
  382. package/dist/esm/credentials/schemas.d.ts +64 -0
  383. package/dist/esm/credentials/schemas.d.ts.map +1 -0
  384. package/dist/esm/credentials/schemas.js +79 -0
  385. package/dist/esm/credentials/schemas.js.map +1 -0
  386. package/dist/esm/db-backup/config.d.ts +76 -0
  387. package/dist/esm/db-backup/config.d.ts.map +1 -0
  388. package/dist/esm/db-backup/config.js +112 -0
  389. package/dist/esm/db-backup/config.js.map +1 -0
  390. package/dist/esm/db-backup/constants.d.ts +314 -0
  391. package/dist/esm/db-backup/constants.d.ts.map +1 -0
  392. package/dist/esm/db-backup/constants.js +240 -0
  393. package/dist/esm/db-backup/constants.js.map +1 -0
  394. package/dist/esm/db-backup/index.d.ts +19 -0
  395. package/dist/esm/db-backup/index.d.ts.map +1 -0
  396. package/dist/esm/db-backup/index.js +25 -0
  397. package/dist/esm/db-backup/index.js.map +1 -0
  398. package/dist/esm/db-backup/node-credential.d.ts +37 -0
  399. package/dist/esm/db-backup/node-credential.d.ts.map +1 -0
  400. package/dist/esm/db-backup/node-credential.js +104 -0
  401. package/dist/esm/db-backup/node-credential.js.map +1 -0
  402. package/dist/esm/db-backup/node-result.d.ts +34 -0
  403. package/dist/esm/db-backup/node-result.d.ts.map +1 -0
  404. package/dist/esm/db-backup/node-result.js +165 -0
  405. package/dist/esm/db-backup/node-result.js.map +1 -0
  406. package/dist/esm/db-backup/restore.d.ts +405 -0
  407. package/dist/esm/db-backup/restore.d.ts.map +1 -0
  408. package/dist/esm/db-backup/restore.js +494 -0
  409. package/dist/esm/db-backup/restore.js.map +1 -0
  410. package/dist/esm/db-backup/run-actions.d.ts +49 -0
  411. package/dist/esm/db-backup/run-actions.d.ts.map +1 -0
  412. package/dist/esm/db-backup/run-actions.js +118 -0
  413. package/dist/esm/db-backup/run-actions.js.map +1 -0
  414. package/dist/esm/db-backup/runs-list-query.d.ts +20 -0
  415. package/dist/esm/db-backup/runs-list-query.d.ts.map +1 -0
  416. package/dist/esm/db-backup/runs-list-query.js +50 -0
  417. package/dist/esm/db-backup/runs-list-query.js.map +1 -0
  418. package/dist/esm/db-backup/runs.d.ts +46 -0
  419. package/dist/esm/db-backup/runs.d.ts.map +1 -0
  420. package/dist/esm/db-backup/runs.js +229 -0
  421. package/dist/esm/db-backup/runs.js.map +1 -0
  422. package/dist/esm/db-backup/schemas.d.ts +9 -0
  423. package/dist/esm/db-backup/schemas.d.ts.map +1 -0
  424. package/dist/esm/db-backup/schemas.js +15 -0
  425. package/dist/esm/db-backup/schemas.js.map +1 -0
  426. package/dist/esm/db-backup/settings-schemas.d.ts +217 -0
  427. package/dist/esm/db-backup/settings-schemas.d.ts.map +1 -0
  428. package/dist/esm/db-backup/settings-schemas.js +316 -0
  429. package/dist/esm/db-backup/settings-schemas.js.map +1 -0
  430. package/dist/esm/email/constants.d.ts +82 -0
  431. package/dist/esm/email/constants.d.ts.map +1 -0
  432. package/dist/esm/email/constants.js +79 -0
  433. package/dist/esm/email/constants.js.map +1 -0
  434. package/dist/esm/email/index.d.ts +5 -0
  435. package/dist/esm/email/index.d.ts.map +1 -0
  436. package/dist/esm/email/index.js +8 -0
  437. package/dist/esm/email/index.js.map +1 -0
  438. package/dist/esm/email/schemas.d.ts +276 -0
  439. package/dist/esm/email/schemas.d.ts.map +1 -0
  440. package/dist/esm/email/schemas.js +277 -0
  441. package/dist/esm/email/schemas.js.map +1 -0
  442. package/dist/esm/exports/constants.d.ts +123 -0
  443. package/dist/esm/exports/constants.d.ts.map +1 -0
  444. package/dist/esm/exports/constants.js +106 -0
  445. package/dist/esm/exports/constants.js.map +1 -0
  446. package/dist/esm/exports/index.d.ts +5 -0
  447. package/dist/esm/exports/index.d.ts.map +1 -0
  448. package/dist/esm/exports/index.js +7 -0
  449. package/dist/esm/exports/index.js.map +1 -0
  450. package/dist/esm/exports/schemas.d.ts +386 -0
  451. package/dist/esm/exports/schemas.d.ts.map +1 -0
  452. package/dist/esm/exports/schemas.js +285 -0
  453. package/dist/esm/exports/schemas.js.map +1 -0
  454. package/dist/esm/identity/constants.d.ts +273 -0
  455. package/dist/esm/identity/constants.d.ts.map +1 -0
  456. package/dist/esm/identity/constants.js +244 -0
  457. package/dist/esm/identity/constants.js.map +1 -0
  458. package/dist/esm/identity/index.d.ts +5 -0
  459. package/dist/esm/identity/index.d.ts.map +1 -0
  460. package/dist/esm/identity/index.js +10 -0
  461. package/dist/esm/identity/index.js.map +1 -0
  462. package/dist/esm/identity/schemas.d.ts +784 -0
  463. package/dist/esm/identity/schemas.d.ts.map +1 -0
  464. package/dist/esm/identity/schemas.js +681 -0
  465. package/dist/esm/identity/schemas.js.map +1 -0
  466. package/dist/esm/jobs/constants.d.ts +135 -0
  467. package/dist/esm/jobs/constants.d.ts.map +1 -0
  468. package/dist/esm/jobs/constants.js +127 -0
  469. package/dist/esm/jobs/constants.js.map +1 -0
  470. package/dist/esm/jobs/index.d.ts +9 -0
  471. package/dist/esm/jobs/index.d.ts.map +1 -0
  472. package/dist/esm/jobs/index.js +11 -0
  473. package/dist/esm/jobs/index.js.map +1 -0
  474. package/dist/esm/jobs/retention-schemas.d.ts +252 -0
  475. package/dist/esm/jobs/retention-schemas.d.ts.map +1 -0
  476. package/dist/esm/jobs/retention-schemas.js +229 -0
  477. package/dist/esm/jobs/retention-schemas.js.map +1 -0
  478. package/dist/esm/jobs/schemas.d.ts +361 -0
  479. package/dist/esm/jobs/schemas.d.ts.map +1 -0
  480. package/dist/esm/jobs/schemas.js +703 -0
  481. package/dist/esm/jobs/schemas.js.map +1 -0
  482. package/dist/esm/jobs/settings-schemas.d.ts +84 -0
  483. package/dist/esm/jobs/settings-schemas.d.ts.map +1 -0
  484. package/dist/esm/jobs/settings-schemas.js +113 -0
  485. package/dist/esm/jobs/settings-schemas.js.map +1 -0
  486. package/dist/esm/nodes/admin-schemas.d.ts +204 -0
  487. package/dist/esm/nodes/admin-schemas.d.ts.map +1 -0
  488. package/dist/esm/nodes/admin-schemas.js +150 -0
  489. package/dist/esm/nodes/admin-schemas.js.map +1 -0
  490. package/dist/esm/nodes/constants.d.ts +86 -0
  491. package/dist/esm/nodes/constants.d.ts.map +1 -0
  492. package/dist/esm/nodes/constants.js +99 -0
  493. package/dist/esm/nodes/constants.js.map +1 -0
  494. package/dist/esm/nodes/index.d.ts +8 -0
  495. package/dist/esm/nodes/index.d.ts.map +1 -0
  496. package/dist/esm/nodes/index.js +11 -0
  497. package/dist/esm/nodes/index.js.map +1 -0
  498. package/dist/esm/nodes/schemas.d.ts +332 -0
  499. package/dist/esm/nodes/schemas.d.ts.map +1 -0
  500. package/dist/esm/nodes/schemas.js +934 -0
  501. package/dist/esm/nodes/schemas.js.map +1 -0
  502. package/dist/esm/nodes/settings-schemas.d.ts +82 -0
  503. package/dist/esm/nodes/settings-schemas.d.ts.map +1 -0
  504. package/dist/esm/nodes/settings-schemas.js +103 -0
  505. package/dist/esm/nodes/settings-schemas.js.map +1 -0
  506. package/dist/esm/notifications/constants.d.ts +197 -0
  507. package/dist/esm/notifications/constants.d.ts.map +1 -0
  508. package/dist/esm/notifications/constants.js +178 -0
  509. package/dist/esm/notifications/constants.js.map +1 -0
  510. package/dist/esm/notifications/index.d.ts +5 -0
  511. package/dist/esm/notifications/index.d.ts.map +1 -0
  512. package/dist/esm/notifications/index.js +9 -0
  513. package/dist/esm/notifications/index.js.map +1 -0
  514. package/dist/esm/notifications/schemas.d.ts +1016 -0
  515. package/dist/esm/notifications/schemas.d.ts.map +1 -0
  516. package/dist/esm/notifications/schemas.js +848 -0
  517. package/dist/esm/notifications/schemas.js.map +1 -0
  518. package/dist/esm/onboarding/constants.d.ts +138 -0
  519. package/dist/esm/onboarding/constants.d.ts.map +1 -0
  520. package/dist/esm/onboarding/constants.js +120 -0
  521. package/dist/esm/onboarding/constants.js.map +1 -0
  522. package/dist/esm/onboarding/index.d.ts +5 -0
  523. package/dist/esm/onboarding/index.d.ts.map +1 -0
  524. package/dist/esm/onboarding/index.js +7 -0
  525. package/dist/esm/onboarding/index.js.map +1 -0
  526. package/dist/esm/onboarding/schemas.d.ts +360 -0
  527. package/dist/esm/onboarding/schemas.d.ts.map +1 -0
  528. package/dist/esm/onboarding/schemas.js +257 -0
  529. package/dist/esm/onboarding/schemas.js.map +1 -0
  530. package/dist/esm/settings/constants.d.ts +206 -0
  531. package/dist/esm/settings/constants.d.ts.map +1 -0
  532. package/dist/esm/settings/constants.js +197 -0
  533. package/dist/esm/settings/constants.js.map +1 -0
  534. package/dist/esm/settings/index.d.ts +6 -0
  535. package/dist/esm/settings/index.d.ts.map +1 -0
  536. package/dist/esm/settings/index.js +11 -0
  537. package/dist/esm/settings/index.js.map +1 -0
  538. package/dist/esm/settings/schemas.d.ts +574 -0
  539. package/dist/esm/settings/schemas.d.ts.map +1 -0
  540. package/dist/esm/settings/schemas.js +434 -0
  541. package/dist/esm/settings/schemas.js.map +1 -0
  542. package/dist/esm/settings/types.d.ts +79 -0
  543. package/dist/esm/settings/types.d.ts.map +1 -0
  544. package/dist/esm/settings/types.js +5 -0
  545. package/dist/esm/settings/types.js.map +1 -0
  546. package/dist/esm/sharing/constants.d.ts +216 -0
  547. package/dist/esm/sharing/constants.d.ts.map +1 -0
  548. package/dist/esm/sharing/constants.js +159 -0
  549. package/dist/esm/sharing/constants.js.map +1 -0
  550. package/dist/esm/sharing/enum.d.ts +5 -0
  551. package/dist/esm/sharing/enum.d.ts.map +1 -0
  552. package/dist/esm/sharing/enum.js +6 -0
  553. package/dist/esm/sharing/enum.js.map +1 -0
  554. package/dist/esm/sharing/grants.d.ts +490 -0
  555. package/dist/esm/sharing/grants.d.ts.map +1 -0
  556. package/dist/esm/sharing/grants.js +444 -0
  557. package/dist/esm/sharing/grants.js.map +1 -0
  558. package/dist/esm/sharing/groups.d.ts +410 -0
  559. package/dist/esm/sharing/groups.d.ts.map +1 -0
  560. package/dist/esm/sharing/groups.js +372 -0
  561. package/dist/esm/sharing/groups.js.map +1 -0
  562. package/dist/esm/sharing/index.d.ts +5 -0
  563. package/dist/esm/sharing/index.d.ts.map +1 -0
  564. package/dist/esm/sharing/index.js +11 -0
  565. package/dist/esm/sharing/index.js.map +1 -0
  566. package/dist/esm/sharing/schemas.d.ts +3 -0
  567. package/dist/esm/sharing/schemas.d.ts.map +1 -0
  568. package/dist/esm/sharing/schemas.js +5 -0
  569. package/dist/esm/sharing/schemas.js.map +1 -0
  570. package/dist/esm/storage/constants.d.ts +111 -0
  571. package/dist/esm/storage/constants.d.ts.map +1 -0
  572. package/dist/esm/storage/constants.js +104 -0
  573. package/dist/esm/storage/constants.js.map +1 -0
  574. package/dist/esm/storage/index.d.ts +27 -0
  575. package/dist/esm/storage/index.d.ts.map +1 -0
  576. package/dist/esm/storage/index.js +23 -0
  577. package/dist/esm/storage/index.js.map +1 -0
  578. package/dist/esm/storage/objects-complete-upload.d.ts +19 -0
  579. package/dist/esm/storage/objects-complete-upload.d.ts.map +1 -0
  580. package/dist/esm/storage/objects-complete-upload.js +16 -0
  581. package/dist/esm/storage/objects-complete-upload.js.map +1 -0
  582. package/dist/esm/storage/objects-download-url.d.ts +17 -0
  583. package/dist/esm/storage/objects-download-url.d.ts.map +1 -0
  584. package/dist/esm/storage/objects-download-url.js +13 -0
  585. package/dist/esm/storage/objects-download-url.js.map +1 -0
  586. package/dist/esm/storage/objects-init-upload.d.ts +39 -0
  587. package/dist/esm/storage/objects-init-upload.d.ts.map +1 -0
  588. package/dist/esm/storage/objects-init-upload.js +37 -0
  589. package/dist/esm/storage/objects-init-upload.js.map +1 -0
  590. package/dist/esm/storage/objects-list-query.d.ts +50 -0
  591. package/dist/esm/storage/objects-list-query.d.ts.map +1 -0
  592. package/dist/esm/storage/objects-list-query.js +20 -0
  593. package/dist/esm/storage/objects-list-query.js.map +1 -0
  594. package/dist/esm/storage/objects-object-response.d.ts +49 -0
  595. package/dist/esm/storage/objects-object-response.d.ts.map +1 -0
  596. package/dist/esm/storage/objects-object-response.js +51 -0
  597. package/dist/esm/storage/objects-object-response.js.map +1 -0
  598. package/dist/esm/storage/objects-update-metadata.d.ts +16 -0
  599. package/dist/esm/storage/objects-update-metadata.d.ts.map +1 -0
  600. package/dist/esm/storage/objects-update-metadata.js +11 -0
  601. package/dist/esm/storage/objects-update-metadata.js.map +1 -0
  602. package/dist/esm/storage/schemas.d.ts +13 -0
  603. package/dist/esm/storage/schemas.d.ts.map +1 -0
  604. package/dist/esm/storage/schemas.js +19 -0
  605. package/dist/esm/storage/schemas.js.map +1 -0
  606. package/dist/esm/storage/settings-schemas.d.ts +188 -0
  607. package/dist/esm/storage/settings-schemas.d.ts.map +1 -0
  608. package/dist/esm/storage/settings-schemas.js +220 -0
  609. package/dist/esm/storage/settings-schemas.js.map +1 -0
  610. package/dist/esm/storage/storage-bucket-provision.d.ts +152 -0
  611. package/dist/esm/storage/storage-bucket-provision.d.ts.map +1 -0
  612. package/dist/esm/storage/storage-bucket-provision.js +213 -0
  613. package/dist/esm/storage/storage-bucket-provision.js.map +1 -0
  614. package/dist/esm/storage/storage-config-response.d.ts +99 -0
  615. package/dist/esm/storage/storage-config-response.d.ts.map +1 -0
  616. package/dist/esm/storage/storage-config-response.js +170 -0
  617. package/dist/esm/storage/storage-config-response.js.map +1 -0
  618. package/dist/esm/storage/storage-config-update.d.ts +46 -0
  619. package/dist/esm/storage/storage-config-update.d.ts.map +1 -0
  620. package/dist/esm/storage/storage-config-update.js +130 -0
  621. package/dist/esm/storage/storage-config-update.js.map +1 -0
  622. package/dist/esm/storage/storage-connection-test.d.ts +129 -0
  623. package/dist/esm/storage/storage-connection-test.d.ts.map +1 -0
  624. package/dist/esm/storage/storage-connection-test.js +241 -0
  625. package/dist/esm/storage/storage-connection-test.js.map +1 -0
  626. package/dist/esm/storage/storage-status.d.ts +16 -0
  627. package/dist/esm/storage/storage-status.d.ts.map +1 -0
  628. package/dist/esm/storage/storage-status.js +20 -0
  629. package/dist/esm/storage/storage-status.js.map +1 -0
  630. package/dist/esm/telemetry/config.d.ts +4 -0
  631. package/dist/esm/telemetry/config.d.ts.map +1 -1
  632. package/dist/esm/telemetry/config.js +16 -2
  633. package/dist/esm/telemetry/config.js.map +1 -1
  634. package/dist/esm/telemetry/connection.d.ts +1 -1
  635. package/dist/esm/telemetry/constants.d.ts +378 -6
  636. package/dist/esm/telemetry/constants.d.ts.map +1 -1
  637. package/dist/esm/telemetry/constants.js +288 -4
  638. package/dist/esm/telemetry/constants.js.map +1 -1
  639. package/dist/esm/telemetry/dashboard.d.ts +188 -17
  640. package/dist/esm/telemetry/dashboard.d.ts.map +1 -1
  641. package/dist/esm/telemetry/dashboard.js +61 -3
  642. package/dist/esm/telemetry/dashboard.js.map +1 -1
  643. package/dist/esm/telemetry/index.d.ts +4 -4
  644. package/dist/esm/telemetry/index.d.ts.map +1 -1
  645. package/dist/esm/telemetry/index.js +2 -2
  646. package/dist/esm/telemetry/index.js.map +1 -1
  647. package/dist/esm/telemetry/presentation.d.ts +243 -0
  648. package/dist/esm/telemetry/presentation.d.ts.map +1 -0
  649. package/dist/esm/telemetry/presentation.js +297 -0
  650. package/dist/esm/telemetry/presentation.js.map +1 -0
  651. package/dist/esm/telemetry/query.d.ts +2 -2
  652. package/dist/esm/telemetry/schemas.d.ts +5 -2
  653. package/dist/esm/telemetry/schemas.d.ts.map +1 -1
  654. package/dist/esm/telemetry/schemas.js +3 -1
  655. package/dist/esm/telemetry/schemas.js.map +1 -1
  656. package/dist/esm/telemetry/stack.d.ts +5 -5
  657. package/dist/esm/telemetry/store.d.ts +111 -0
  658. package/dist/esm/telemetry/store.d.ts.map +1 -0
  659. package/dist/esm/telemetry/store.js +80 -0
  660. package/dist/esm/telemetry/store.js.map +1 -0
  661. package/dist/esm/user-data/constants.d.ts +157 -0
  662. package/dist/esm/user-data/constants.d.ts.map +1 -0
  663. package/dist/esm/user-data/constants.js +134 -0
  664. package/dist/esm/user-data/constants.js.map +1 -0
  665. package/dist/esm/user-data/index.d.ts +5 -0
  666. package/dist/esm/user-data/index.d.ts.map +1 -0
  667. package/dist/esm/user-data/index.js +7 -0
  668. package/dist/esm/user-data/index.js.map +1 -0
  669. package/dist/esm/user-data/schemas.d.ts +306 -0
  670. package/dist/esm/user-data/schemas.d.ts.map +1 -0
  671. package/dist/esm/user-data/schemas.js +330 -0
  672. package/dist/esm/user-data/schemas.js.map +1 -0
  673. package/package.json +151 -1
@@ -0,0 +1,848 @@
1
+ // =============================================================================
2
+ // Notifications: the wire contract of `/api/notifications`, the
3
+ // `notifications` settings namespaces, `/api/admin/push-config` and
4
+ // `/api/admin/broadcasts` (issue #738, PP-8.5; shapes from #121 to #618)
5
+ // =============================================================================
6
+ //
7
+ // The API slice (`@marinoscar/platform-api/notifications`) wraps each with
8
+ // `createZodDto` (and, for a request body naming channels, refines the open
9
+ // channel ids against its registry at run time); the web slice reads the
10
+ // inferred types. Moved from the API slice's dto files and the reference
11
+ // app's settings schemas with their meaning unchanged, except one thing:
12
+ // CHANNEL IDS ARE OPEN (`notificationChannelIdSchema`), so an app's channel
13
+ // needs no edit here and a preference for an unregistered channel is stored,
14
+ // not rejected or dropped.
15
+ //
16
+ // NO SECRET CROSSES THIS CONTRACT. The VAPID private key lives in the
17
+ // encrypted credential store and is never part of a stored value or a
18
+ // response; the compile-time proofs at the bottom fail the build the moment a
19
+ // secret-named field is added.
20
+ // =============================================================================
21
+ import { z } from 'zod';
22
+ import { BROADCAST_BODY_MAX, BROADCAST_CTA_LABEL_MAX, BROADCAST_LINK_MAX, BROADCAST_STATUSES, BROADCAST_TITLE_MAX, MAX_DISABLED_NOTIFICATION_EVENTS, NOTIFICATION_CHANNEL_ID_MAX_LENGTH, NOTIFICATION_CHANNEL_ID_PATTERN, NOTIFICATION_EVENT_KEY_PATTERN, NOTIFICATION_MAX_EVENT_KEY_LENGTH, PUSH_TEST_CONFIG_SOURCES, PUSH_TEST_OVERALL, PUSH_TEST_SEND_STATUSES, REMOVE_CONFIRMATION, ROTATE_CONFIRMATION, PUSH_SUBSCRIPTION_PLATFORMS, } from './constants.js';
23
+ // ---- keys ---------------------------------------------------------------------------
24
+ /**
25
+ * A channel id: any id matching `NOTIFICATION_CHANNEL_ID_PATTERN`. Open: the
26
+ * API checks membership in its channel registry where it matters (a request
27
+ * that writes a NEW preference or names a broadcast channel), never on a
28
+ * stored value.
29
+ *
30
+ * @stability stable
31
+ */
32
+ export const notificationChannelIdSchema = z
33
+ .string()
34
+ .min(1)
35
+ .max(NOTIFICATION_CHANNEL_ID_MAX_LENGTH)
36
+ .regex(NOTIFICATION_CHANNEL_ID_PATTERN);
37
+ /**
38
+ * An event key as a stored preference or a `disabledEvents` entry: a
39
+ * syntactic bound, NOT a registry check (an entry naming an event this build
40
+ * does not declare is stored and simply never matches).
41
+ *
42
+ * @stability stable
43
+ */
44
+ export const notificationEventKeySchema = z
45
+ .string()
46
+ .min(1)
47
+ .max(NOTIFICATION_MAX_EVENT_KEY_LENGTH)
48
+ .regex(NOTIFICATION_EVENT_KEY_PATTERN);
49
+ // ---- user settings: `notifications` ----------------------------------------------------
50
+ /**
51
+ * One channel's preferences: event key to the user's explicit choice.
52
+ * `boolean` only; an absent key means "use the event's default".
53
+ *
54
+ * @stability stable
55
+ */
56
+ export const notificationChannelPreferencesSchema = z.record(notificationEventKeySchema, z.boolean());
57
+ /**
58
+ * The `notifications` user settings namespace: channel to that channel's
59
+ * preferences, sparse at every level. Keyed by an OPEN channel id; the count
60
+ * of channels and of events per channel is bounded on the merged value by the
61
+ * API (`NOTIFICATION_MAX_CHANNELS`, `NOTIFICATION_MAX_EVENTS_PER_CHANNEL`).
62
+ *
63
+ * @stability stable
64
+ */
65
+ export const notificationsSchema = z.record(notificationChannelIdSchema, notificationChannelPreferencesSchema);
66
+ /**
67
+ * PATCH form of one channel's preferences: `null` deletes one event key,
68
+ * restoring the default.
69
+ *
70
+ * @stability stable
71
+ */
72
+ export const notificationChannelPreferencesPatchSchema = z.record(notificationEventKeySchema, z.boolean().nullable());
73
+ /**
74
+ * PATCH form of the `notifications` namespace. Three levels of delete: a
75
+ * `null` namespace clears it, a `null` channel (`email: null`) clears one
76
+ * channel, a `null` event key clears one event. A non-null channel object
77
+ * deep-merges per event.
78
+ *
79
+ * @stability stable
80
+ */
81
+ export const notificationsPatchSchema = z.record(notificationChannelIdSchema, notificationChannelPreferencesPatchSchema.nullable());
82
+ // ---- system settings: `notifications` --------------------------------------------------
83
+ /**
84
+ * One channel's deployment-wide switch (the value of one `channels` entry of
85
+ * the `notifications` system namespace).
86
+ *
87
+ * @stability experimental
88
+ */
89
+ export const notificationChannelPolicySchema = z.object({
90
+ /** Whether the channel delivers at all. `false` drops it from every dispatch (a `mandatory` event keeps its in-app row). */
91
+ enabled: z.boolean(),
92
+ });
93
+ /**
94
+ * The `channels` record of the `notifications` system namespace: channel id to
95
+ * that channel's switch, sparse. An absent channel is ENABLED (an operator opts
96
+ * a channel out, never in), which is also what makes a channel an app registers
97
+ * later deliver without anyone saving anything first. The id is open and is not
98
+ * checked against the registry here: an entry for a channel this build does not
99
+ * register is kept and never matches. `browser` is also written as the legacy
100
+ * `browserEnabled` boolean, kept in step with `channels.browser.enabled`.
101
+ *
102
+ * @extensionPoint schema
103
+ * @stability experimental
104
+ */
105
+ export const notificationChannelPoliciesSchema = z.record(notificationChannelIdSchema, notificationChannelPolicySchema);
106
+ /**
107
+ * The deployment-wide notification policy (`system_settings`
108
+ * `notifications`): whether the browser channel is on, which events are
109
+ * suppressed for everyone, and (`channels`) a switch per channel. A
110
+ * `mandatory` event's inbox row survives all of them.
111
+ *
112
+ * `browserEnabled` is the original switch and stays the spelling of the browser
113
+ * channel's; `channels.browser.enabled` is its alias (a write of either sets
114
+ * both). `channels` is absent on a row written before it existed, which reads
115
+ * as every channel enabled.
116
+ *
117
+ * @stability stable
118
+ */
119
+ export const systemNotificationsSchema = z.object({
120
+ /** Whether the browser channel is on (alias of `channels.browser.enabled`). */
121
+ browserEnabled: z.boolean(),
122
+ /** Event keys whose browser delivery is suppressed. */
123
+ disabledEvents: z.array(notificationEventKeySchema).max(MAX_DISABLED_NOTIFICATION_EVENTS),
124
+ /** A switch per channel; an absent channel is enabled. */
125
+ channels: notificationChannelPoliciesSchema.optional(),
126
+ });
127
+ /**
128
+ * PATCH counterpart: `disabledEvents` REPLACES wholesale (RFC 7396's rule for
129
+ * arrays: a merge could never re-enable an event); `channels` merges per
130
+ * channel.
131
+ *
132
+ * @stability stable
133
+ */
134
+ export const systemNotificationsPatchSchema = z.object({
135
+ /** Whether the browser channel is on. */
136
+ browserEnabled: z.boolean().optional(),
137
+ /** Event keys whose browser delivery is suppressed. */
138
+ disabledEvents: z.array(notificationEventKeySchema).max(MAX_DISABLED_NOTIFICATION_EVENTS).optional(),
139
+ /** Per-channel switches, merged into the stored record. */
140
+ channels: notificationChannelPoliciesSchema.optional(),
141
+ });
142
+ /**
143
+ * The `notifications` block of the `PUT /api/system-settings` body.
144
+ *
145
+ * @stability stable
146
+ */
147
+ export const notificationsSettingsSchema = z.object({
148
+ /** Whether the browser channel is on. */
149
+ browserEnabled: z.boolean(),
150
+ /** Event keys whose browser delivery is suppressed. */
151
+ disabledEvents: z.array(notificationEventKeySchema).max(MAX_DISABLED_NOTIFICATION_EVENTS),
152
+ /** A switch per channel; omitted means every channel enabled. */
153
+ channels: notificationChannelPoliciesSchema.optional(),
154
+ });
155
+ /**
156
+ * The `notifications` block of the `PATCH /api/system-settings` body.
157
+ *
158
+ * @stability stable
159
+ */
160
+ export const notificationsSettingsPatchSchema = z.object({
161
+ /** Whether the browser channel is on. */
162
+ browserEnabled: z.boolean().optional(),
163
+ /** Event keys whose browser delivery is suppressed. */
164
+ disabledEvents: z.array(notificationEventKeySchema).max(MAX_DISABLED_NOTIFICATION_EVENTS).optional(),
165
+ /** Per-channel switches, merged into the stored record. */
166
+ channels: notificationChannelPoliciesSchema.optional(),
167
+ });
168
+ /**
169
+ * The `notifications` block of the system settings response.
170
+ *
171
+ * @stability stable
172
+ */
173
+ export const notificationsResponseSchema = z.object({
174
+ /** Whether the browser channel is on. */
175
+ browserEnabled: z.boolean(),
176
+ /** Event keys whose browser delivery is suppressed. */
177
+ disabledEvents: z.array(z.string()),
178
+ /** A switch per channel; absent when none was ever saved (every channel enabled). */
179
+ channels: z.record(z.string(), notificationChannelPolicySchema).optional(),
180
+ });
181
+ /**
182
+ * The ORG LAYER of the `notifications` namespace (#738, through #733's
183
+ * `/api/org-settings`): what one organization may set for its own members. It
184
+ * may only TIGHTEN: `browserEnabled: false` turns browser delivery off for
185
+ * the org (the effective value is system AND org), `channels` turns other
186
+ * channels off for it (system AND org, per channel), and `disabledEvents`
187
+ * suppresses more events (the effective list is the union). Every field is
188
+ * optional: an org stores only what it overrides.
189
+ *
190
+ * @extensionPoint schema
191
+ * @stability experimental
192
+ */
193
+ export const orgNotificationsSchema = z.object({
194
+ /** Whether the browser channel is on. */
195
+ browserEnabled: z.boolean().optional(),
196
+ /** Event keys whose browser delivery is suppressed. */
197
+ disabledEvents: z.array(notificationEventKeySchema).max(MAX_DISABLED_NOTIFICATION_EVENTS).optional(),
198
+ /** Channels the organization turns off for its members (an `enabled: true` entry never loosens the system policy). */
199
+ channels: notificationChannelPoliciesSchema.optional(),
200
+ });
201
+ const broadcastStatusSchema = z.enum(BROADCAST_STATUSES);
202
+ const pushTestOverallSchema = z.enum(PUSH_TEST_OVERALL);
203
+ const pushTestConfigSourceSchema = z.enum(PUSH_TEST_CONFIG_SOURCES);
204
+ const pushTestSendStatusSchema = z.enum(PUSH_TEST_SEND_STATUSES);
205
+ const booleanQuerySchema = z.enum(['true', 'false']);
206
+ const pushSubscriptionPlatformSchema = z.enum(PUSH_SUBSCRIPTION_PLATFORMS);
207
+ // ---- /api/notifications --------------------------------------------------------------
208
+ /**
209
+ * One event as `GET /api/notifications/events` serves it: `channels` is
210
+ * capability narrowed by the policy in force (what the preferences matrix may
211
+ * offer), `declaredChannels` the registry's capability unfiltered.
212
+ *
213
+ * @stability stable
214
+ */
215
+ export const notificationEventSchema = z.object({
216
+ /** The event key, `<area>.<event>`; permanent. */
217
+ key: z.string(),
218
+ /** The user-facing name. */
219
+ label: z.string(),
220
+ /** The user-facing description. */
221
+ description: z.string(),
222
+ /** The channels the preferences matrix may offer: declared, narrowed by the policy in force. */
223
+ channels: z.array(notificationChannelIdSchema),
224
+ /** Every channel the event declares, unfiltered by policy. */
225
+ declaredChannels: z.array(notificationChannelIdSchema),
226
+ /** What an account with no stored preference gets. */
227
+ defaultEnabled: z.boolean(),
228
+ /** Whether a user may not opt out. */
229
+ mandatory: z.boolean(),
230
+ });
231
+ /**
232
+ * One delivery channel as `GET /api/notifications/channels` serves it: what a
233
+ * client needs to draw the channel (its label, where it sits) and to apply the
234
+ * rules that depend on it (which channels a critical broadcast may rely on,
235
+ * which a user may toggle, which a fresh broadcast starts with). The registry
236
+ * is the only source: a client holds no list of channels.
237
+ *
238
+ * @extensionPoint schema
239
+ * @stability experimental
240
+ */
241
+ export const notificationChannelDescriptorSchema = z.object({
242
+ /** The channel id; permanent. */
243
+ id: notificationChannelIdSchema,
244
+ /** The label an administrator or a user reads (`Email`, `Browser`). */
245
+ label: z.string(),
246
+ /** One sentence on what the channel delivers to. */
247
+ description: z.string(),
248
+ /** Whether a user may toggle the channel in their preferences. */
249
+ userConfigurable: z.boolean(),
250
+ /** Whether a critical broadcast may rely on this channel (it leaves a durable record a recipient can go back and read; `browser`). */
251
+ criticalCapable: z.boolean(),
252
+ /** Whether the broadcast events declare this channel, so a broadcast can be sent over it. */
253
+ broadcastCapable: z.boolean(),
254
+ /** Whether a new broadcast starts with this channel selected. */
255
+ broadcastDefault: z.boolean(),
256
+ /** Registration order, from 0: the order every client lists channels in. */
257
+ order: z.number().int().nonnegative(),
258
+ });
259
+ /**
260
+ * `GET /api/notifications/channels`: every registered delivery channel, in
261
+ * registration order.
262
+ *
263
+ * @stability experimental
264
+ */
265
+ export const notificationChannelsResponseSchema = z.array(notificationChannelDescriptorSchema);
266
+ /**
267
+ * `GET /api/notifications/config`: what a non-admin client needs to know
268
+ * about the capability (the policy in force for the caller, and Web Push).
269
+ *
270
+ * @stability stable
271
+ */
272
+ export const notificationConfigSchema = z.object({
273
+ /** Whether the browser channel is on. */
274
+ browserEnabled: z.boolean(),
275
+ /** Whether Web Push is configured and enabled. */
276
+ pushEnabled: z.boolean(),
277
+ /** The VAPID application server key (URL-safe base64), or null. */
278
+ vapidPublicKey: z.string().nullable(),
279
+ });
280
+ /**
281
+ * One inbox row.
282
+ *
283
+ * @stability stable
284
+ */
285
+ export const notificationSchema = z.object({
286
+ /** The id. */
287
+ id: z.uuid(),
288
+ /** The event key. */
289
+ eventKey: z.string(),
290
+ /** The title. */
291
+ title: z.string(),
292
+ /** The body text. */
293
+ body: z.string(),
294
+ /** A root-relative link, or null. */
295
+ link: z.string().nullable(),
296
+ /** When the user read it (ISO 8601), or null. */
297
+ readAt: z.iso.datetime().nullable(),
298
+ /** Creation time (ISO 8601). */
299
+ createdAt: z.iso.datetime(),
300
+ });
301
+ /**
302
+ * `GET /api/notifications` query: page, page size, unread only.
303
+ *
304
+ * @stability stable
305
+ */
306
+ export const notificationListQuerySchema = z.object({
307
+ /** The page number, from 1. */
308
+ page: z.coerce.number().int().min(1).default(1),
309
+ /** Rows per page (at most 100). */
310
+ pageSize: z.coerce.number().int().min(1).max(100).default(20),
311
+ /** `true` for unread rows only. */
312
+ unreadOnly: booleanQuerySchema
313
+ .default('false')
314
+ .transform((value) => value === 'true'),
315
+ });
316
+ /**
317
+ * `GET /api/notifications/unread-count`.
318
+ *
319
+ * @stability stable
320
+ */
321
+ export const unreadCountSchema = z.object({
322
+ /** Unread notifications. */
323
+ unreadCount: z.number().int().min(0),
324
+ });
325
+ /**
326
+ * One frame of `GET /api/notifications/stream` (`event: notification`).
327
+ * `toast` says whether the tab may show an OS toast (the policy in force),
328
+ * `pushed` whether this dispatch also sent Web Push (so the tab can skip its
329
+ * own toast).
330
+ *
331
+ * @stability stable
332
+ */
333
+ export const notificationStreamEventSchema = z.object({
334
+ /** The id. */
335
+ id: z.string(),
336
+ /** The event key. */
337
+ eventKey: z.string(),
338
+ /** The title. */
339
+ title: z.string(),
340
+ /** The body text. */
341
+ body: z.string(),
342
+ /** A root-relative link, or null. */
343
+ link: z.string().nullable(),
344
+ /** Creation time (ISO 8601). */
345
+ createdAt: z.string(),
346
+ /** Whether the tab may raise an OS toast (the policy in force). */
347
+ toast: z.boolean(),
348
+ /** Whether this dispatch also sent Web Push. */
349
+ pushed: z.boolean(),
350
+ });
351
+ // ---- push subscriptions -----------------------------------------------------------------
352
+ /**
353
+ * `POST /api/notifications/push/subscriptions`: a browser's
354
+ * `PushSubscription.toJSON()`.
355
+ *
356
+ * @stability stable
357
+ */
358
+ export const pushSubscribeSchema = z.object({
359
+ /** The push service endpoint (a capability URL). */
360
+ endpoint: z.string().min(1),
361
+ /** The subscription's keys. */
362
+ keys: z.object({
363
+ /** The client's P-256 public key. */
364
+ p256dh: z.string().min(1),
365
+ /** The client's auth secret. */
366
+ auth: z.string().min(1),
367
+ }),
368
+ /** When the browser says it expires (epoch ms), or null. */
369
+ expirationTime: z.number().nullable().optional(),
370
+ /**
371
+ * The surface subscribing (#746): `browser` (default) or `android_app` (the
372
+ * Android companion). An `android_app` post re-tags an existing `browser`
373
+ * row of the same endpoint; a `browser` post never downgrades an
374
+ * `android_app` row.
375
+ */
376
+ platform: pushSubscriptionPlatformSchema.optional(),
377
+ });
378
+ /**
379
+ * The subscribe response.
380
+ *
381
+ * @stability stable
382
+ */
383
+ export const pushSubscriptionResponseSchema = z.object({
384
+ /** The id. */
385
+ id: z.uuid(),
386
+ /** The registered endpoint. */
387
+ endpoint: z.string(),
388
+ /** The stored platform (#746): what the row is tagged after this call. */
389
+ platform: pushSubscriptionPlatformSchema,
390
+ /** Creation time (ISO 8601). */
391
+ createdAt: z.iso.datetime(),
392
+ });
393
+ /**
394
+ * `DELETE /api/notifications/push/subscriptions` body.
395
+ *
396
+ * @stability stable
397
+ */
398
+ export const pushUnsubscribeSchema = z.object({
399
+ /** The endpoint to remove. */
400
+ endpoint: z.string().min(1),
401
+ });
402
+ // ---- /api/admin/push-config -------------------------------------------------------------
403
+ /**
404
+ * A VAPID subject: a `mailto:` address or an `http(s)://` URL.
405
+ *
406
+ * @stability stable
407
+ */
408
+ export const vapidSubjectSchema = z
409
+ .string()
410
+ .trim()
411
+ .min(1)
412
+ .max(255)
413
+ .refine((value) => value.startsWith('mailto:') || value.startsWith('https://') || value.startsWith('http://'), {
414
+ message: 'VAPID subject must be a mailto: address or an http(s):// URL',
415
+ });
416
+ /**
417
+ * The stored Web Push settings row (`system_settings` key `webPush`). The
418
+ * private key is NOT here: it lives in the credential store.
419
+ *
420
+ * @stability stable
421
+ */
422
+ export const pushConfigSchema = z.object({
423
+ /** Whether Web Push is switched on. */
424
+ enabled: z.boolean(),
425
+ /** The VAPID public key, or null. */
426
+ publicKey: z.string().min(1).nullable(),
427
+ /** The VAPID subject (`mailto:` or `https://`), or null for the default. */
428
+ subject: vapidSubjectSchema.nullable(),
429
+ });
430
+ /**
431
+ * `POST /api/admin/push-config/generate` body.
432
+ *
433
+ * @stability stable
434
+ */
435
+ export const generatePushConfigSchema = z.object({
436
+ /** The VAPID subject; absent or null uses the default. */
437
+ subject: vapidSubjectSchema.nullable().optional(),
438
+ });
439
+ /**
440
+ * `PUT /api/admin/push-config` body (with `If-Match`).
441
+ *
442
+ * @stability stable
443
+ */
444
+ export const updatePushConfigSchema = z.object({
445
+ /** Whether Web Push is switched on. */
446
+ enabled: z.boolean(),
447
+ /** The VAPID subject, or null for the default. */
448
+ subject: vapidSubjectSchema.nullable(),
449
+ });
450
+ /**
451
+ * `POST /api/admin/push-config/rotate` body.
452
+ *
453
+ * @stability stable
454
+ */
455
+ export const rotatePushConfigSchema = z.object({
456
+ /** The literal confirmation word. */
457
+ confirmation: z.literal(ROTATE_CONFIRMATION),
458
+ /** A new VAPID subject; absent keeps the current one. */
459
+ subject: vapidSubjectSchema.nullable().optional(),
460
+ });
461
+ /**
462
+ * `DELETE /api/admin/push-config` body.
463
+ *
464
+ * @stability stable
465
+ */
466
+ export const removePushConfigSchema = z.object({
467
+ /** The literal confirmation word. */
468
+ confirmation: z.literal(REMOVE_CONFIRMATION),
469
+ });
470
+ /**
471
+ * The private key's masked status: never the key.
472
+ *
473
+ * @stability stable
474
+ */
475
+ export const privateKeyStatusSchema = z.object({
476
+ /** Whether a value is stored. */
477
+ configured: z.boolean(),
478
+ /** A short, non-secret hint of the stored value, or null. */
479
+ hint: z.string().nullable(),
480
+ /** When it was stored (ISO 8601), or null. */
481
+ updatedAt: z.iso.datetime().nullable(),
482
+ /** Who stored it, or null. */
483
+ updatedByUserId: z.uuid().nullable(),
484
+ });
485
+ /**
486
+ * The admin view of the Web Push configuration.
487
+ *
488
+ * @stability stable
489
+ */
490
+ export const pushConfigResponseSchema = pushConfigSchema.extend({
491
+ /** Whether a key pair is stored. */
492
+ configured: z.boolean(),
493
+ /** The VAPID private key's status (never its value). */
494
+ privateKeyStatus: privateKeyStatusSchema,
495
+ /** Why the stored row failed validation, or null. */
496
+ settingsError: z.string().nullable(),
497
+ /** The row version, sent back as `If-Match`. */
498
+ version: z.number().int(),
499
+ /** Last update (ISO 8601), or null. */
500
+ updatedAt: z.iso.datetime().nullable(),
501
+ /** Who saved last, or null. */
502
+ updatedBy: z
503
+ .object({
504
+ /** The id. */
505
+ id: z.uuid(),
506
+ /** Their address. */
507
+ email: z.email(),
508
+ })
509
+ .nullable(),
510
+ });
511
+ const BASE64URL_PATTERN = /^[A-Za-z0-9_-]+={0,2}$/;
512
+ /**
513
+ * `POST /api/admin/push-config/test` body: optionally this browser's endpoint
514
+ * and the server key it subscribed with, to diagnose the pair.
515
+ *
516
+ * @stability stable
517
+ */
518
+ export const pushTestRequestSchema = z
519
+ .object({
520
+ /** This browser's endpoint, to check it is registered. */
521
+ endpoint: z.url().max(2048).optional(),
522
+ /** This browser's subscription key (base64url), to compare with the server's. */
523
+ applicationServerKey: z
524
+ .string()
525
+ .max(200)
526
+ .regex(BASE64URL_PATTERN, 'applicationServerKey must be base64url-encoded')
527
+ .optional(),
528
+ })
529
+ .strict();
530
+ /**
531
+ * The push test's verdicts on the active configuration.
532
+ *
533
+ * @stability stable
534
+ */
535
+ export const pushTestConfigDiagnosticsSchema = z.object({
536
+ /** Where the configuration was read from. */
537
+ source: pushTestConfigSourceSchema,
538
+ /** The stored switch, or null without a configuration. */
539
+ enabled: z.boolean().nullable(),
540
+ /** Whether push would send right now. */
541
+ active: z.boolean(),
542
+ /** The public key in force, or null. */
543
+ publicKey: z.string().nullable(),
544
+ /** Whether the public key is a valid P-256 point. */
545
+ publicKeyValid: z.boolean(),
546
+ /** Whether the stored private key matches the public key, or null when either is missing. */
547
+ privateKeyMatchesPublicKey: z.boolean().nullable(),
548
+ /** The subject in force, or null. */
549
+ subject: z.string().nullable(),
550
+ /** Whether the subject is a valid `mailto:` or `http(s)` URL. */
551
+ subjectValid: z.boolean(),
552
+ /** What is wrong, in words. */
553
+ problems: z.array(z.string()),
554
+ });
555
+ /**
556
+ * The push test's verdicts on the calling browser.
557
+ *
558
+ * @stability stable
559
+ */
560
+ export const pushTestBrowserDiagnosticsSchema = z.object({
561
+ /** Whether the caller sent its own endpoint. */
562
+ endpointProvided: z.boolean(),
563
+ /** Whether that endpoint is registered for the caller, or null. */
564
+ endpointRegistered: z.boolean().nullable(),
565
+ /** Whether this browser's key matches the server's, or null. */
566
+ keyMatchesServer: z.boolean().nullable(),
567
+ });
568
+ /**
569
+ * Whether each push-capable event would reach the caller.
570
+ *
571
+ * @stability stable
572
+ */
573
+ export const pushTestEventDiagnosticsSchema = z.object({
574
+ /** The event key. */
575
+ eventKey: z.string(),
576
+ /** The user-facing name. */
577
+ label: z.string(),
578
+ /** Whether a user may not opt out. */
579
+ mandatory: z.boolean(),
580
+ /** Whether the deployment policy allows push for it. */
581
+ policyAllows: z.boolean(),
582
+ /** Whether the caller's preference allows push for it. */
583
+ preferenceAllows: z.boolean(),
584
+ });
585
+ /**
586
+ * One test send's result.
587
+ *
588
+ * @stability stable
589
+ */
590
+ export const pushTestSendResultSchema = z.object({
591
+ /** How the send ended. */
592
+ status: pushTestSendStatusSchema,
593
+ /** The push service's HTTP status, or null. */
594
+ statusCode: z.number().int().nullable(),
595
+ /** A short explanation, or null. */
596
+ message: z.string().nullable(),
597
+ /** The push service's response body (capped), or null. */
598
+ responseBody: z.string().nullable(),
599
+ /** How long it took, in milliseconds. */
600
+ durationMs: z.number(),
601
+ });
602
+ /**
603
+ * One of the caller's subscriptions and its test send. The endpoint appears
604
+ * only as a preview and its push service host.
605
+ *
606
+ * @stability stable
607
+ */
608
+ export const pushTestSubscriptionResultSchema = z.object({
609
+ /** The subscription id. */
610
+ id: z.string(),
611
+ /** The push service's host. */
612
+ pushService: z.string(),
613
+ /** A shortened, non-capability form of the endpoint. */
614
+ endpointPreview: z.string(),
615
+ /** Whether it is the calling browser's subscription. */
616
+ isThisBrowser: z.boolean(),
617
+ /** The subscribing browser, or null. */
618
+ userAgent: z.string().nullable(),
619
+ /** When it subscribed (ISO 8601). */
620
+ createdAt: z.iso.datetime(),
621
+ /** The last successful delivery (ISO 8601), or null. */
622
+ lastSuccessAt: z.iso.datetime().nullable(),
623
+ /** Consecutive delivery failures. */
624
+ failureCount: z.number().int(),
625
+ /** The test send to it. */
626
+ result: pushTestSendResultSchema,
627
+ });
628
+ /**
629
+ * `POST /api/admin/push-config/test` response.
630
+ *
631
+ * @stability stable
632
+ */
633
+ export const pushTestResponseSchema = z.object({
634
+ /** When the test ran (ISO 8601). */
635
+ ranAt: z.iso.datetime(),
636
+ /** How long the whole test took, in milliseconds. */
637
+ durationMs: z.number(),
638
+ /** The verdict. */
639
+ overall: pushTestOverallSchema,
640
+ /** The id the service worker acknowledges. */
641
+ testId: z.string(),
642
+ /** The configuration diagnostics. */
643
+ config: pushTestConfigDiagnosticsSchema,
644
+ /** The calling browser's diagnostics. */
645
+ browser: pushTestBrowserDiagnosticsSchema,
646
+ /** The events that may push, and whether each would. */
647
+ events: z.array(pushTestEventDiagnosticsSchema),
648
+ /** The caller's subscriptions and each one's send result. */
649
+ subscriptions: z.array(pushTestSubscriptionResultSchema),
650
+ /** What to do next, in words. */
651
+ hints: z.array(z.string()),
652
+ });
653
+ // ---- /api/admin/broadcasts --------------------------------------------------------------
654
+ const FORBIDDEN_LINK_CHARS = /[\u0000- \u007F]/;
655
+ const rootRelativeLink = z
656
+ .string()
657
+ .trim()
658
+ .min(1, 'link must not be empty')
659
+ .max(BROADCAST_LINK_MAX)
660
+ .refine((value) => !FORBIDDEN_LINK_CHARS.test(value), {
661
+ message: 'link must not contain spaces or control characters',
662
+ })
663
+ .refine((value) => value.startsWith('/'), {
664
+ message: 'link must be root-relative and start with "/"',
665
+ })
666
+ .refine((value) => !value.startsWith('//'), {
667
+ message: 'link must not be protocol-relative ("//…")',
668
+ })
669
+ .refine((value) => !value.startsWith('/\\'), {
670
+ message: 'link must not start with "/\\"',
671
+ });
672
+ /**
673
+ * `POST /api/admin/broadcasts` (and `/test`) body. `channels` are open ids
674
+ * (the API refuses an unregistered one); `targetOrgId` (#738) addresses one
675
+ * organization's active members instead of every active user, and only a
676
+ * system `broadcasts:write` holder may name one (an `org_broadcasts:write`
677
+ * holder's target is forced to their active organization).
678
+ *
679
+ * @extensionPoint schema
680
+ * @stability stable
681
+ */
682
+ export const createBroadcastSchema = z
683
+ .object({
684
+ /** The title. */
685
+ title: z.string().trim().min(1, 'title must not be empty').max(BROADCAST_TITLE_MAX),
686
+ /** The body text. */
687
+ body: z.string().trim().min(1, 'body must not be empty').max(BROADCAST_BODY_MAX),
688
+ /** A root-relative link (`/...`; never `//` or another origin). */
689
+ link: rootRelativeLink.optional(),
690
+ /** The email call-to-action label; needs `link`. */
691
+ ctaLabel: z.string().trim().min(1).max(BROADCAST_CTA_LABEL_MAX).optional(),
692
+ /** The channels (open channel ids). */
693
+ channels: z
694
+ .array(notificationChannelIdSchema)
695
+ .min(1, 'select at least one channel')
696
+ .refine((value) => new Set(value).size === value.length, {
697
+ message: 'channels must not contain duplicates',
698
+ }),
699
+ /** When to send (ISO 8601 with offset, in the future); absent sends now. */
700
+ scheduledFor: z.iso
701
+ .datetime({ offset: true })
702
+ .transform((value) => new Date(value))
703
+ .refine((value) => value.getTime() > Date.now(), {
704
+ message: 'scheduledFor must be in the future',
705
+ })
706
+ .optional(),
707
+ /** A critical broadcast cannot be muted (needs a channel flagged `criticalCapable`, `browser`). */
708
+ critical: z.boolean().default(false),
709
+ /** Target one organization's active members. A system administrator may name any organization or omit it (every active user); an organization administrator's broadcast always targets their active organization. */
710
+ targetOrgId: z.uuid().optional(),
711
+ })
712
+ .superRefine((value, ctx) => {
713
+ if (value.ctaLabel && !value.link) {
714
+ ctx.addIssue({ code: 'custom', path: ['ctaLabel'], message: 'ctaLabel requires link' });
715
+ }
716
+ });
717
+ /**
718
+ * One broadcast.
719
+ *
720
+ * @stability stable
721
+ */
722
+ export const broadcastSchema = z.object({
723
+ /** The id. */
724
+ id: z.uuid(),
725
+ /** The title. */
726
+ title: z.string(),
727
+ /** The body text. */
728
+ body: z.string(),
729
+ /** A root-relative link, or null. */
730
+ link: z.string().nullable(),
731
+ /** The email call-to-action label (needs `link`), or null. */
732
+ ctaLabel: z.string().nullable(),
733
+ /** The event key. */
734
+ eventKey: z.string(),
735
+ /** The channels (open channel ids). */
736
+ channels: z.array(z.string()),
737
+ /** The lifecycle status. */
738
+ status: broadcastStatusSchema,
739
+ /** When it is due (ISO 8601), or null for now. */
740
+ scheduledFor: z.iso.datetime().nullable(),
741
+ /** When the start job froze the audience, or null. */
742
+ startedAt: z.iso.datetime().nullable(),
743
+ /** When it settled, or null. */
744
+ finishedAt: z.iso.datetime().nullable(),
745
+ /** When it was canceled, or null. */
746
+ canceledAt: z.iso.datetime().nullable(),
747
+ /** The frozen audience cutoff, or null before it starts. */
748
+ audienceCutoff: z.iso.datetime().nullable(),
749
+ /** The frozen audience size, or null before it is counted (never 0 for unknown). */
750
+ recipientsTargeted: z.number().int().nullable(),
751
+ /** Recipients dispatched so far. */
752
+ recipientsDispatched: z.number().int(),
753
+ /** The last failure, or null. */
754
+ lastError: z.string().nullable(),
755
+ /** The author, or null once deleted. */
756
+ createdById: z.uuid().nullable(),
757
+ /** Creation time (ISO 8601). */
758
+ createdAt: z.iso.datetime(),
759
+ /** Last update (ISO 8601), or null. */
760
+ updatedAt: z.iso.datetime(),
761
+ /** The organization targeted (its active members only), or null for every active user. */
762
+ targetOrgId: z.uuid().nullable(),
763
+ });
764
+ /**
765
+ * One (channel, status) delivery count of a broadcast.
766
+ *
767
+ * @stability stable
768
+ */
769
+ export const broadcastDeliveryCountSchema = z.object({
770
+ /** The channel id. */
771
+ channel: z.string(),
772
+ /** The delivery status. */
773
+ status: z.string(),
774
+ /** Delivery attempts. */
775
+ count: z.number().int(),
776
+ });
777
+ /**
778
+ * A broadcast with its approximate delivery counts.
779
+ *
780
+ * @stability stable
781
+ */
782
+ export const broadcastDetailSchema = broadcastSchema.extend({
783
+ /** Delivery attempts by channel and status, approximate (attributed by event key and time window). */
784
+ approximateDeliveryAttempts: z.array(broadcastDeliveryCountSchema),
785
+ });
786
+ /**
787
+ * The create result: the row and any warnings (an unconfigured channel).
788
+ *
789
+ * @stability stable
790
+ */
791
+ export const broadcastCreateResultSchema = z.object({
792
+ /** The broadcast row. */
793
+ broadcast: broadcastSchema,
794
+ /** Non-fatal warnings to show (for example, browser notifications are off). */
795
+ warnings: z.array(z.string()),
796
+ });
797
+ /**
798
+ * `GET /api/admin/broadcasts/audience` query (#738): the target to count;
799
+ * absent counts every active user.
800
+ *
801
+ * @stability stable
802
+ */
803
+ export const broadcastAudienceQuerySchema = z.object({
804
+ /** Count one organization's active members instead of every active user. */
805
+ targetOrgId: z.uuid().optional(),
806
+ });
807
+ /**
808
+ * The audience size a broadcast sent now would reach.
809
+ *
810
+ * @stability stable
811
+ */
812
+ export const broadcastAudienceSchema = z.object({
813
+ /** Active users the broadcast would reach now. */
814
+ activeUsers: z.number().int(),
815
+ });
816
+ /**
817
+ * `POST /api/admin/broadcasts/test` result: sent to the caller only.
818
+ *
819
+ * @stability stable
820
+ */
821
+ export const broadcastTestResultSchema = z.object({
822
+ /** The event the test raised. */
823
+ eventKey: z.string(),
824
+ /** The channels the test went to. */
825
+ channels: z.array(z.string()),
826
+ /** The caller, the only recipient of a test. */
827
+ sentToUserId: z.uuid(),
828
+ });
829
+ /**
830
+ * `GET /api/admin/broadcasts` query.
831
+ *
832
+ * @stability stable
833
+ */
834
+ export const broadcastListQuerySchema = z.object({
835
+ /** The page number, from 1. */
836
+ page: z.coerce.number().int().min(1).default(1),
837
+ /** Rows per page (at most 100). */
838
+ pageSize: z.coerce.number().int().min(1).max(100).default(20),
839
+ /** Only broadcasts in this status. */
840
+ status: broadcastStatusSchema.optional(),
841
+ });
842
+ /**
843
+ * The proof, as a value: fails to compile when {@link PushContractCarriesNoSecret} is `never`.
844
+ *
845
+ * @stability stable
846
+ */
847
+ export const PUSH_CONTRACT_CARRIES_NO_SECRET = true;
848
+ //# sourceMappingURL=schemas.js.map