@aphexcms/cms-core 9.6.0 → 9.7.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 (259) hide show
  1. package/dist/api/documents.d.ts +28 -0
  2. package/dist/api/documents.d.ts.map +1 -1
  3. package/dist/api/documents.js +18 -0
  4. package/dist/api/schemas/documents.d.ts +19 -0
  5. package/dist/api/schemas/documents.d.ts.map +1 -1
  6. package/dist/api/schemas/documents.js +18 -0
  7. package/dist/client/ui.d.ts +1 -0
  8. package/dist/client/ui.d.ts.map +1 -1
  9. package/dist/client/ui.js +2 -0
  10. package/dist/components/admin/ActivityView.svelte +227 -0
  11. package/dist/components/admin/ActivityView.svelte.d.ts +4 -0
  12. package/dist/components/admin/ActivityView.svelte.d.ts.map +1 -0
  13. package/dist/components/admin/DocumentEditor.svelte +196 -10
  14. package/dist/components/admin/DocumentEditor.svelte.d.ts.map +1 -1
  15. package/dist/components/admin/ScheduleDialog.svelte +174 -0
  16. package/dist/components/admin/ScheduleDialog.svelte.d.ts +20 -0
  17. package/dist/components/admin/ScheduleDialog.svelte.d.ts.map +1 -0
  18. package/dist/components/layout/OrganizationSwitcher.svelte +3 -3
  19. package/dist/components/layout/sidebar/NavUser.svelte +5 -5
  20. package/dist/db/interfaces/events.d.ts +55 -0
  21. package/dist/db/interfaces/events.d.ts.map +1 -0
  22. package/dist/db/interfaces/events.js +1 -0
  23. package/dist/db/interfaces/index.d.ts +10 -2
  24. package/dist/db/interfaces/index.d.ts.map +1 -1
  25. package/dist/db/interfaces/plugin-storage.d.ts +39 -0
  26. package/dist/db/interfaces/plugin-storage.d.ts.map +1 -0
  27. package/dist/db/interfaces/plugin-storage.js +1 -0
  28. package/dist/events/catalog.d.ts +8 -0
  29. package/dist/events/catalog.d.ts.map +1 -0
  30. package/dist/events/catalog.js +11 -0
  31. package/dist/events/consumer.d.ts +79 -0
  32. package/dist/events/consumer.d.ts.map +1 -0
  33. package/dist/events/consumer.js +76 -0
  34. package/dist/events/define-event.d.ts +17 -0
  35. package/dist/events/define-event.d.ts.map +1 -0
  36. package/dist/events/define-event.js +7 -0
  37. package/dist/events/emit.d.ts +11 -0
  38. package/dist/events/emit.d.ts.map +1 -0
  39. package/dist/events/emit.js +20 -0
  40. package/dist/events/index.d.ts +4 -0
  41. package/dist/events/index.d.ts.map +1 -0
  42. package/dist/events/index.js +3 -0
  43. package/dist/field-validation/rule.d.ts.map +1 -1
  44. package/dist/field-validation/rule.js +15 -0
  45. package/dist/forms/define-form.d.ts +25 -0
  46. package/dist/forms/define-form.d.ts.map +1 -0
  47. package/dist/forms/define-form.js +22 -0
  48. package/dist/forms/index.d.ts +4 -0
  49. package/dist/forms/index.d.ts.map +1 -0
  50. package/dist/forms/index.js +5 -0
  51. package/dist/forms/types.d.ts +49 -0
  52. package/dist/forms/types.d.ts.map +1 -0
  53. package/dist/forms/types.js +1 -0
  54. package/dist/forms/validate.d.ts +9 -0
  55. package/dist/forms/validate.d.ts.map +1 -0
  56. package/dist/forms/validate.js +18 -0
  57. package/dist/hooks.d.ts.map +1 -1
  58. package/dist/hooks.js +15 -0
  59. package/dist/index.d.ts +2 -0
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +6 -0
  62. package/dist/jobs/document-jobs.d.ts +27 -0
  63. package/dist/jobs/document-jobs.d.ts.map +1 -0
  64. package/dist/jobs/document-jobs.js +42 -0
  65. package/dist/jobs/embedded-runner.d.ts +25 -0
  66. package/dist/jobs/embedded-runner.d.ts.map +1 -0
  67. package/dist/jobs/embedded-runner.js +46 -0
  68. package/dist/jobs/index.d.ts +7 -0
  69. package/dist/jobs/index.d.ts.map +1 -0
  70. package/dist/jobs/index.js +8 -0
  71. package/dist/jobs/relay.d.ts +27 -0
  72. package/dist/jobs/relay.d.ts.map +1 -0
  73. package/dist/jobs/relay.js +60 -0
  74. package/dist/jobs/run-batch.d.ts +52 -0
  75. package/dist/jobs/run-batch.d.ts.map +1 -0
  76. package/dist/jobs/run-batch.js +61 -0
  77. package/dist/jobs/run-due-jobs.d.ts +30 -0
  78. package/dist/jobs/run-due-jobs.d.ts.map +1 -0
  79. package/dist/jobs/run-due-jobs.js +69 -0
  80. package/dist/jobs/types.d.ts +18 -0
  81. package/dist/jobs/types.d.ts.map +1 -0
  82. package/dist/jobs/types.js +1 -0
  83. package/dist/lib/api/documents.d.ts +28 -0
  84. package/dist/lib/api/documents.d.ts.map +1 -1
  85. package/dist/lib/api/documents.js +18 -0
  86. package/dist/lib/api/documents.js.map +1 -1
  87. package/dist/lib/api/schemas/documents.d.ts +19 -0
  88. package/dist/lib/api/schemas/documents.d.ts.map +1 -1
  89. package/dist/lib/api/schemas/documents.js +18 -0
  90. package/dist/lib/api/schemas/documents.js.map +1 -1
  91. package/dist/lib/client/ui.d.ts +1 -0
  92. package/dist/lib/client/ui.d.ts.map +1 -1
  93. package/dist/lib/client/ui.js +2 -0
  94. package/dist/lib/client/ui.js.map +1 -1
  95. package/dist/lib/db/interfaces/events.d.ts +55 -0
  96. package/dist/lib/db/interfaces/events.d.ts.map +1 -0
  97. package/dist/lib/db/interfaces/events.js +2 -0
  98. package/dist/lib/db/interfaces/events.js.map +1 -0
  99. package/dist/lib/db/interfaces/index.d.ts +10 -2
  100. package/dist/lib/db/interfaces/index.d.ts.map +1 -1
  101. package/dist/lib/db/interfaces/plugin-storage.d.ts +39 -0
  102. package/dist/lib/db/interfaces/plugin-storage.d.ts.map +1 -0
  103. package/dist/lib/db/interfaces/plugin-storage.js +2 -0
  104. package/dist/lib/db/interfaces/plugin-storage.js.map +1 -0
  105. package/dist/lib/events/catalog.d.ts +8 -0
  106. package/dist/lib/events/catalog.d.ts.map +1 -0
  107. package/dist/lib/events/catalog.js +12 -0
  108. package/dist/lib/events/catalog.js.map +1 -0
  109. package/dist/lib/events/consumer.d.ts +79 -0
  110. package/dist/lib/events/consumer.d.ts.map +1 -0
  111. package/dist/lib/events/consumer.js +77 -0
  112. package/dist/lib/events/consumer.js.map +1 -0
  113. package/dist/lib/events/define-event.d.ts +17 -0
  114. package/dist/lib/events/define-event.d.ts.map +1 -0
  115. package/dist/lib/events/define-event.js +8 -0
  116. package/dist/lib/events/define-event.js.map +1 -0
  117. package/dist/lib/events/emit.d.ts +11 -0
  118. package/dist/lib/events/emit.d.ts.map +1 -0
  119. package/dist/lib/events/emit.js +21 -0
  120. package/dist/lib/events/emit.js.map +1 -0
  121. package/dist/lib/events/index.d.ts +4 -0
  122. package/dist/lib/events/index.d.ts.map +1 -0
  123. package/dist/lib/events/index.js +4 -0
  124. package/dist/lib/events/index.js.map +1 -0
  125. package/dist/lib/field-validation/rule.d.ts.map +1 -1
  126. package/dist/lib/field-validation/rule.js +15 -0
  127. package/dist/lib/field-validation/rule.js.map +1 -1
  128. package/dist/lib/forms/define-form.d.ts +25 -0
  129. package/dist/lib/forms/define-form.d.ts.map +1 -0
  130. package/dist/lib/forms/define-form.js +23 -0
  131. package/dist/lib/forms/define-form.js.map +1 -0
  132. package/dist/lib/forms/index.d.ts +4 -0
  133. package/dist/lib/forms/index.d.ts.map +1 -0
  134. package/dist/lib/forms/index.js +6 -0
  135. package/dist/lib/forms/index.js.map +1 -0
  136. package/dist/lib/forms/types.d.ts +49 -0
  137. package/dist/lib/forms/types.d.ts.map +1 -0
  138. package/dist/lib/forms/types.js +2 -0
  139. package/dist/lib/forms/types.js.map +1 -0
  140. package/dist/lib/forms/validate.d.ts +9 -0
  141. package/dist/lib/forms/validate.d.ts.map +1 -0
  142. package/dist/lib/forms/validate.js +19 -0
  143. package/dist/lib/forms/validate.js.map +1 -0
  144. package/dist/lib/hooks.d.ts.map +1 -1
  145. package/dist/lib/hooks.js +15 -0
  146. package/dist/lib/hooks.js.map +1 -1
  147. package/dist/lib/index.d.ts +2 -0
  148. package/dist/lib/index.d.ts.map +1 -1
  149. package/dist/lib/index.js +6 -0
  150. package/dist/lib/index.js.map +1 -1
  151. package/dist/lib/jobs/document-jobs.d.ts +27 -0
  152. package/dist/lib/jobs/document-jobs.d.ts.map +1 -0
  153. package/dist/lib/jobs/document-jobs.js +43 -0
  154. package/dist/lib/jobs/document-jobs.js.map +1 -0
  155. package/dist/lib/jobs/embedded-runner.d.ts +25 -0
  156. package/dist/lib/jobs/embedded-runner.d.ts.map +1 -0
  157. package/dist/lib/jobs/embedded-runner.js +47 -0
  158. package/dist/lib/jobs/embedded-runner.js.map +1 -0
  159. package/dist/lib/jobs/index.d.ts +7 -0
  160. package/dist/lib/jobs/index.d.ts.map +1 -0
  161. package/dist/lib/jobs/index.js +9 -0
  162. package/dist/lib/jobs/index.js.map +1 -0
  163. package/dist/lib/jobs/relay.d.ts +27 -0
  164. package/dist/lib/jobs/relay.d.ts.map +1 -0
  165. package/dist/lib/jobs/relay.js +61 -0
  166. package/dist/lib/jobs/relay.js.map +1 -0
  167. package/dist/lib/jobs/run-batch.d.ts +52 -0
  168. package/dist/lib/jobs/run-batch.d.ts.map +1 -0
  169. package/dist/lib/jobs/run-batch.js +62 -0
  170. package/dist/lib/jobs/run-batch.js.map +1 -0
  171. package/dist/lib/jobs/run-due-jobs.d.ts +30 -0
  172. package/dist/lib/jobs/run-due-jobs.d.ts.map +1 -0
  173. package/dist/lib/jobs/run-due-jobs.js +70 -0
  174. package/dist/lib/jobs/run-due-jobs.js.map +1 -0
  175. package/dist/lib/jobs/types.d.ts +18 -0
  176. package/dist/lib/jobs/types.d.ts.map +1 -0
  177. package/dist/lib/jobs/types.js +2 -0
  178. package/dist/lib/jobs/types.js.map +1 -0
  179. package/dist/lib/local-api/collection-api.d.ts +42 -0
  180. package/dist/lib/local-api/collection-api.d.ts.map +1 -1
  181. package/dist/lib/local-api/collection-api.js +179 -20
  182. package/dist/lib/local-api/collection-api.js.map +1 -1
  183. package/dist/lib/plugins/resolver.d.ts +12 -1
  184. package/dist/lib/plugins/resolver.d.ts.map +1 -1
  185. package/dist/lib/plugins/resolver.js +4 -1
  186. package/dist/lib/plugins/resolver.js.map +1 -1
  187. package/dist/lib/plugins/types.d.ts +47 -2
  188. package/dist/lib/plugins/types.d.ts.map +1 -1
  189. package/dist/lib/plugins/types.js.map +1 -1
  190. package/dist/lib/server/api/index.d.ts.map +1 -1
  191. package/dist/lib/server/api/index.js +8 -0
  192. package/dist/lib/server/api/index.js.map +1 -1
  193. package/dist/lib/server/api/routes/documents-publish.d.ts.map +1 -1
  194. package/dist/lib/server/api/routes/documents-publish.js +110 -0
  195. package/dist/lib/server/api/routes/documents-publish.js.map +1 -1
  196. package/dist/lib/server/api/routes/jobs.d.ts +4 -0
  197. package/dist/lib/server/api/routes/jobs.d.ts.map +1 -0
  198. package/dist/lib/server/api/routes/jobs.js +93 -0
  199. package/dist/lib/server/api/routes/jobs.js.map +1 -0
  200. package/dist/lib/server/api/routes/workers-run.d.ts +4 -0
  201. package/dist/lib/server/api/routes/workers-run.d.ts.map +1 -0
  202. package/dist/lib/server/api/routes/workers-run.js +41 -0
  203. package/dist/lib/server/api/routes/workers-run.js.map +1 -0
  204. package/dist/lib/server/index.d.ts +1 -0
  205. package/dist/lib/server/index.d.ts.map +1 -1
  206. package/dist/lib/server/index.js +2 -0
  207. package/dist/lib/server/index.js.map +1 -1
  208. package/dist/lib/services/version-service.d.ts +16 -0
  209. package/dist/lib/services/version-service.d.ts.map +1 -1
  210. package/dist/lib/services/version-service.js +68 -66
  211. package/dist/lib/services/version-service.js.map +1 -1
  212. package/dist/lib/types/config.d.ts +43 -0
  213. package/dist/lib/types/config.d.ts.map +1 -1
  214. package/dist/lib/types/events.d.ts +134 -0
  215. package/dist/lib/types/events.d.ts.map +1 -0
  216. package/dist/lib/types/events.js +4 -0
  217. package/dist/lib/types/events.js.map +1 -0
  218. package/dist/lib/types/index.d.ts +1 -0
  219. package/dist/lib/types/index.d.ts.map +1 -1
  220. package/dist/lib/types/index.js +1 -0
  221. package/dist/lib/types/index.js.map +1 -1
  222. package/dist/lib/utils/index.d.ts +1 -1
  223. package/dist/lib/utils/index.d.ts.map +1 -1
  224. package/dist/lib/utils/index.js.map +1 -1
  225. package/dist/local-api/collection-api.d.ts +42 -0
  226. package/dist/local-api/collection-api.d.ts.map +1 -1
  227. package/dist/local-api/collection-api.js +179 -20
  228. package/dist/plugins/resolver.d.ts +12 -1
  229. package/dist/plugins/resolver.d.ts.map +1 -1
  230. package/dist/plugins/resolver.js +4 -1
  231. package/dist/plugins/types.d.ts +47 -2
  232. package/dist/plugins/types.d.ts.map +1 -1
  233. package/dist/server/api/index.d.ts.map +1 -1
  234. package/dist/server/api/index.js +8 -0
  235. package/dist/server/api/routes/documents-publish.d.ts.map +1 -1
  236. package/dist/server/api/routes/documents-publish.js +110 -0
  237. package/dist/server/api/routes/jobs.d.ts +4 -0
  238. package/dist/server/api/routes/jobs.d.ts.map +1 -0
  239. package/dist/server/api/routes/jobs.js +92 -0
  240. package/dist/server/api/routes/workers-run.d.ts +4 -0
  241. package/dist/server/api/routes/workers-run.d.ts.map +1 -0
  242. package/dist/server/api/routes/workers-run.js +40 -0
  243. package/dist/server/index.d.ts +1 -0
  244. package/dist/server/index.d.ts.map +1 -1
  245. package/dist/server/index.js +2 -0
  246. package/dist/services/version-service.d.ts +16 -0
  247. package/dist/services/version-service.d.ts.map +1 -1
  248. package/dist/services/version-service.js +68 -66
  249. package/dist/types/config.d.ts +43 -0
  250. package/dist/types/config.d.ts.map +1 -1
  251. package/dist/types/events.d.ts +134 -0
  252. package/dist/types/events.d.ts.map +1 -0
  253. package/dist/types/events.js +3 -0
  254. package/dist/types/index.d.ts +1 -0
  255. package/dist/types/index.d.ts.map +1 -1
  256. package/dist/types/index.js +1 -0
  257. package/dist/utils/index.d.ts +1 -1
  258. package/dist/utils/index.d.ts.map +1 -1
  259. package/package.json +2 -1
@@ -46,6 +46,31 @@ export declare class DocumentsApi {
46
46
  * Unpublish document (revert to draft only)
47
47
  */
48
48
  static unpublish(id: string): Promise<ApiResponse<DocumentDTO>>;
49
+ /**
50
+ * Schedule a publish/unpublish for a future time (ISO-8601 `runAt`).
51
+ * Enqueues a job the worker runs at that time — the permission check happens now.
52
+ */
53
+ static schedule(id: string, body: {
54
+ action: 'publish' | 'unpublish';
55
+ runAt: string;
56
+ }): Promise<ApiResponse<{
57
+ jobId: string;
58
+ type: string;
59
+ runAt: string;
60
+ status: string;
61
+ }>>;
62
+ /** Pending scheduled publish/unpublish for a document (for the editor's schedule indicator). */
63
+ static getSchedule(id: string): Promise<ApiResponse<Array<{
64
+ jobId: string;
65
+ type: string;
66
+ runAt: string;
67
+ status: string;
68
+ createdAt: string;
69
+ }>>>;
70
+ /** Cancel the pending schedule for a document. */
71
+ static cancelSchedule(id: string): Promise<ApiResponse<{
72
+ cancelled: number;
73
+ }>>;
49
74
  /**
50
75
  * Delete document by ID
51
76
  */
@@ -84,6 +109,9 @@ export declare const documents: {
84
109
  updateById: typeof DocumentsApi.updateById;
85
110
  publish: typeof DocumentsApi.publish;
86
111
  unpublish: typeof DocumentsApi.unpublish;
112
+ schedule: typeof DocumentsApi.schedule;
113
+ getSchedule: typeof DocumentsApi.getSchedule;
114
+ cancelSchedule: typeof DocumentsApi.cancelSchedule;
87
115
  deleteById: typeof DocumentsApi.deleteById;
88
116
  getByType: typeof DocumentsApi.getByType;
89
117
  getPublished: typeof DocumentsApi.getPublished;
@@ -1 +1 @@
1
- {"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../src/lib/api/documents.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EACX,WAAW,EACX,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EACjB,MAAM,qBAAqB,CAAC;AAI7B,MAAM,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;AAEpD,qBAAa,YAAY;IACxB;;;OAGG;WACU,IAAI,CAAC,MAAM,GAAE,kBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;IAUvF;;OAEG;WACU,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAInE;;;;OAIG;WACU,iBAAiB,CAC7B,EAAE,EAAE,MAAM,GACR,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC,CAAC;IAMnF;;;;;OAKG;WACU,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;IAKxE;;OAEG;WACU,MAAM,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAInF;;;;OAIG;WACU,UAAU,CACtB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,qBAAqB,GACzB,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAIpC;;OAEG;WACU,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAInE;;OAEG;WACU,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAIrE;;OAEG;WACU,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAI/D;;OAEG;WACU,SAAS,CACrB,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAM,GAC9C,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;IAItC;;OAEG;WACU,YAAY,CACxB,MAAM,GAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAM,GAC7C,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;IAItC;;OAEG;WACU,SAAS,CACrB,MAAM,GAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAM,GAC7C,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;IAItC;;OAEG;WACU,YAAY,CACxB,EAAE,EAAE,MAAM,EACV,MAAM,CAAC,EAAE,iBAAiB,GACxB,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC;IAI1C;;OAEG;WACU,UAAU,CACtB,EAAE,EAAE,MAAM,EACV,aAAa,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IAIxC;;OAEG;WACU,cAAc,CAC1B,EAAE,EAAE,MAAM,EACV,aAAa,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;CAGpC;AAGD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;CAgBrB,CAAC"}
1
+ {"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../src/lib/api/documents.ts"],"names":[],"mappings":"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"}
@@ -64,6 +64,21 @@ export class DocumentsApi {
64
64
  static async unpublish(id) {
65
65
  return apiClient.delete(`/documents/${id}/publish`);
66
66
  }
67
+ /**
68
+ * Schedule a publish/unpublish for a future time (ISO-8601 `runAt`).
69
+ * Enqueues a job the worker runs at that time — the permission check happens now.
70
+ */
71
+ static async schedule(id, body) {
72
+ return apiClient.post(`/documents/${id}/schedule`, body);
73
+ }
74
+ /** Pending scheduled publish/unpublish for a document (for the editor's schedule indicator). */
75
+ static async getSchedule(id) {
76
+ return apiClient.get(`/documents/${id}/schedule`);
77
+ }
78
+ /** Cancel the pending schedule for a document. */
79
+ static async cancelSchedule(id) {
80
+ return apiClient.delete(`/documents/${id}/schedule`);
81
+ }
67
82
  /**
68
83
  * Delete document by ID
69
84
  */
@@ -117,6 +132,9 @@ export const documents = {
117
132
  updateById: DocumentsApi.updateById.bind(DocumentsApi),
118
133
  publish: DocumentsApi.publish.bind(DocumentsApi),
119
134
  unpublish: DocumentsApi.unpublish.bind(DocumentsApi),
135
+ schedule: DocumentsApi.schedule.bind(DocumentsApi),
136
+ getSchedule: DocumentsApi.getSchedule.bind(DocumentsApi),
137
+ cancelSchedule: DocumentsApi.cancelSchedule.bind(DocumentsApi),
120
138
  deleteById: DocumentsApi.deleteById.bind(DocumentsApi),
121
139
  getByType: DocumentsApi.getByType.bind(DocumentsApi),
122
140
  getPublished: DocumentsApi.getPublished.bind(DocumentsApi),
@@ -306,6 +306,23 @@ export declare const restoreVersionResponse: z.ZodObject<{
306
306
  }, z.core.$loose>;
307
307
  message: z.ZodOptional<z.ZodString>;
308
308
  }, z.core.$strip>;
309
+ export declare const scheduleDocumentRequest: z.ZodObject<{
310
+ action: z.ZodEnum<{
311
+ publish: "publish";
312
+ unpublish: "unpublish";
313
+ }>;
314
+ runAt: z.ZodString;
315
+ }, z.core.$strip>;
316
+ export declare const scheduleDocumentResponse: z.ZodObject<{
317
+ success: z.ZodLiteral<true>;
318
+ data: z.ZodObject<{
319
+ jobId: z.ZodString;
320
+ type: z.ZodString;
321
+ runAt: z.ZodString;
322
+ status: z.ZodString;
323
+ }, z.core.$strip>;
324
+ message: z.ZodOptional<z.ZodString>;
325
+ }, z.core.$strip>;
309
326
  export type DocumentDTO = z.infer<typeof documentSchema>;
310
327
  export type PaginationMeta = z.infer<typeof paginationMetaSchema>;
311
328
  export type ListDocumentsQuery = z.input<typeof listDocumentsQuery>;
@@ -318,6 +335,8 @@ export type UpdateDocumentResponse = z.infer<typeof updateDocumentResponse>;
318
335
  export type DeleteDocumentResponse = z.infer<typeof deleteDocumentResponse>;
319
336
  export type PublishDocumentResponse = z.infer<typeof publishDocumentResponse>;
320
337
  export type UnpublishDocumentResponse = z.infer<typeof unpublishDocumentResponse>;
338
+ export type ScheduleDocumentRequest = z.infer<typeof scheduleDocumentRequest>;
339
+ export type ScheduleDocumentResponse = z.infer<typeof scheduleDocumentResponse>;
321
340
  export type DocumentVersion = z.infer<typeof documentVersionSchema>;
322
341
  export type ListVersionsQuery = z.input<typeof listVersionsQuery>;
323
342
  export type ListVersionsResponse = z.infer<typeof listVersionsResponse>;
@@ -1 +1 @@
1
- {"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../../src/lib/api/schemas/documents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../../src/lib/api/schemas/documents.ts"],"names":[],"mappings":"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"}
@@ -165,3 +165,21 @@ export const restoreVersionResponse = z.object({
165
165
  data: documentSchema,
166
166
  message: z.string().optional()
167
167
  });
168
+ // ---------- POST /documents/:id/schedule ----------
169
+ export const scheduleDocumentRequest = z.object({
170
+ /** Which action to run at `runAt`. */
171
+ action: z.enum(['publish', 'unpublish']),
172
+ /** ISO-8601 timestamp for when the action should run. */
173
+ runAt: z.string().datetime()
174
+ });
175
+ export const scheduleDocumentResponse = z.object({
176
+ success: z.literal(true),
177
+ // The scheduled job's identity + when it will run (job payload is identifiers only).
178
+ data: z.object({
179
+ jobId: z.string(),
180
+ type: z.string(),
181
+ runAt: z.string(),
182
+ status: z.string()
183
+ }),
184
+ message: z.string().optional()
185
+ });
@@ -14,6 +14,7 @@ export { setBlockPreviews, useBlockPreviews, type BlockPreviewProps, type BlockP
14
14
  export { default as Sidebar } from '../components/layout/Sidebar.svelte';
15
15
  export { default as PermissionsDebug } from '../components/admin/PermissionsDebug.svelte';
16
16
  export { default as PluginSettingsPanel } from '../components/admin/PluginSettingsPanel.svelte';
17
+ export { default as ActivityView } from '../components/admin/ActivityView.svelte';
17
18
  export * from '../utils/index.js';
18
19
  export * from '../api/index.js';
19
20
  export type { ApiResponse } from '../api/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/lib/client/ui.ts"],"names":[],"mappings":"AAgBA,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGlG,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAG1C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGjF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG9E,OAAO,EACN,UAAU,EACV,aAAa,EACb,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EACN,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EACN,cAAc,EACd,WAAW,EACX,WAAW,EACX,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,UAAU,EACf,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACN,qBAAqB,EACrB,cAAc,EACd,KAAK,kBAAkB,EACvB,MAAM,+BAA+B,CAAC;AAGvC,cAAc,uBAAuB,CAAC;AAItC,OAAO,EACN,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAE1F,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AAGhG,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,EACN,aAAa,EACb,KAAK,oBAAoB,EACzB,MAAM,0DAA0D,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,6DAA6D,CAAC;AAG3G,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/lib/client/ui.ts"],"names":[],"mappings":"AAgBA,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGlG,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAG1C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGjF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG9E,OAAO,EACN,UAAU,EACV,aAAa,EACb,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EACN,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EACN,cAAc,EACd,WAAW,EACX,WAAW,EACX,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,UAAU,EACf,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACN,qBAAqB,EACrB,cAAc,EACd,KAAK,kBAAkB,EACvB,MAAM,+BAA+B,CAAC;AAGvC,cAAc,uBAAuB,CAAC;AAItC,OAAO,EACN,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAE1F,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AAEhG,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAGlF,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,EACN,aAAa,EACb,KAAK,oBAAoB,EACzB,MAAM,0DAA0D,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,6DAA6D,CAAC;AAG3G,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/client/ui.js CHANGED
@@ -39,6 +39,8 @@ export { default as Sidebar } from '../components/layout/Sidebar.svelte';
39
39
  export { default as PermissionsDebug } from '../components/admin/PermissionsDebug.svelte';
40
40
  // Plugin settings panel — renders its own inputs, does not pull the field registry.
41
41
  export { default as PluginSettingsPanel } from '../components/admin/PluginSettingsPanel.svelte';
42
+ // Job/event history (read-only observability). Light — plain fetch + tables, no field editor.
43
+ export { default as ActivityView } from '../components/admin/ActivityView.svelte';
42
44
  // Browser-safe utilities + API client
43
45
  export * from '../utils/index.js';
44
46
  export * from '../api/index.js';
@@ -0,0 +1,227 @@
1
+ <script lang="ts">
2
+ // Read-only operational history for the durable spine — the queryability Sanity's old
3
+ // out-of-dataset scheduling lacked. Jobs tab = scheduled/queued work and its outcome;
4
+ // Events tab = the append-only domain-event log. Fetches GET /api/jobs and /api/events
5
+ // (gated on document.read). No mutation controls — replay/cancel can come later.
6
+ import { onMount } from 'svelte';
7
+ import { Button } from '@aphexcms/ui/shadcn/button';
8
+ import { Badge } from '@aphexcms/ui/shadcn/badge';
9
+ import { RefreshCw, CalendarClock, Radio } from '@lucide/svelte';
10
+ import { apiClient } from '../../api/client';
11
+ import type { Job, DomainEvent, JobStatus } from '../../types/events';
12
+
13
+ type Tab = 'jobs' | 'events';
14
+ let tab = $state<Tab>('jobs');
15
+
16
+ let jobs = $state<Job[]>([]);
17
+ let events = $state<DomainEvent[]>([]);
18
+ let loading = $state(false);
19
+ let error = $state<string | null>(null);
20
+ let total = $state(0);
21
+
22
+ const statuses: Array<JobStatus | 'all'> = [
23
+ 'all',
24
+ 'pending',
25
+ 'leased',
26
+ 'completed',
27
+ 'failed',
28
+ 'cancelled'
29
+ ];
30
+ let statusFilter = $state<JobStatus | 'all'>('all');
31
+
32
+ // Badge colour per status — leased/pending are in-flight, completed good, failed bad.
33
+ const statusVariant: Record<JobStatus, 'default' | 'secondary' | 'destructive' | 'outline'> = {
34
+ pending: 'secondary',
35
+ leased: 'secondary',
36
+ completed: 'default',
37
+ failed: 'destructive',
38
+ cancelled: 'outline'
39
+ };
40
+
41
+ function fmt(d: string | Date | null | undefined): string {
42
+ if (!d) return '—';
43
+ const date = typeof d === 'string' ? new Date(d) : d;
44
+ return Number.isNaN(date.getTime()) ? '—' : date.toLocaleString();
45
+ }
46
+
47
+ async function load() {
48
+ loading = true;
49
+ error = null;
50
+ try {
51
+ if (tab === 'jobs') {
52
+ const params: Record<string, string> = { limit: '100' };
53
+ if (statusFilter !== 'all') params.status = statusFilter;
54
+ const res = await apiClient.get<Job[]>('/jobs', params);
55
+ if (res.success) {
56
+ jobs = res.data ?? [];
57
+ total = res.pagination?.total ?? jobs.length;
58
+ } else {
59
+ error = res.error ?? 'Failed to load jobs';
60
+ }
61
+ } else {
62
+ const res = await apiClient.get<DomainEvent[]>('/events', { limit: '100' });
63
+ if (res.success) {
64
+ events = res.data ?? [];
65
+ total = res.pagination?.total ?? events.length;
66
+ } else {
67
+ error = res.error ?? 'Failed to load events';
68
+ }
69
+ }
70
+ } catch (err) {
71
+ error = err instanceof Error ? err.message : 'Failed to load';
72
+ } finally {
73
+ loading = false;
74
+ }
75
+ }
76
+
77
+ function switchTab(next: Tab) {
78
+ if (tab === next) return;
79
+ tab = next;
80
+ load();
81
+ }
82
+
83
+ // Reload jobs when the status filter changes (only relevant on the jobs tab).
84
+ $effect(() => {
85
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- reactive dependency: re-run when statusFilter changes
86
+ statusFilter;
87
+ if (tab === 'jobs') load();
88
+ });
89
+
90
+ onMount(load);
91
+ </script>
92
+
93
+ <div class="mx-auto w-full max-w-5xl p-4 sm:p-6">
94
+ <div class="mb-4 flex items-center justify-between gap-3">
95
+ <div>
96
+ <h1 class="text-lg font-semibold">Activity</h1>
97
+ <p class="text-muted-foreground text-sm">Scheduled jobs and the domain-event log.</p>
98
+ </div>
99
+ <Button variant="outline" size="sm" onclick={load} disabled={loading} class="gap-1.5">
100
+ <RefreshCw class="h-3.5 w-3.5 {loading ? 'animate-spin' : ''}" /> Refresh
101
+ </Button>
102
+ </div>
103
+
104
+ <!-- Tabs -->
105
+ <div class="border-rule mb-3 flex gap-1 border-b">
106
+ <button
107
+ class="flex items-center gap-1.5 border-b-2 px-3 py-2 text-sm transition-colors {tab ===
108
+ 'jobs'
109
+ ? 'border-primary text-foreground'
110
+ : 'text-muted-foreground hover:text-foreground border-transparent'}"
111
+ onclick={() => switchTab('jobs')}
112
+ >
113
+ <CalendarClock class="h-3.5 w-3.5" /> Jobs
114
+ </button>
115
+ <button
116
+ class="flex items-center gap-1.5 border-b-2 px-3 py-2 text-sm transition-colors {tab ===
117
+ 'events'
118
+ ? 'border-primary text-foreground'
119
+ : 'text-muted-foreground hover:text-foreground border-transparent'}"
120
+ onclick={() => switchTab('events')}
121
+ >
122
+ <Radio class="h-3.5 w-3.5" /> Events
123
+ </button>
124
+ </div>
125
+
126
+ {#if tab === 'jobs'}
127
+ <div class="mb-3 flex flex-wrap items-center gap-1.5">
128
+ {#each statuses as s (s)}
129
+ <button
130
+ class="rounded-full border px-2.5 py-1 text-xs capitalize transition-colors {statusFilter ===
131
+ s
132
+ ? 'bg-primary text-primary-foreground border-transparent'
133
+ : 'text-muted-foreground hover:bg-muted'}"
134
+ onclick={() => (statusFilter = s)}
135
+ >
136
+ {s}
137
+ </button>
138
+ {/each}
139
+ </div>
140
+ {/if}
141
+
142
+ {#if error}
143
+ <div
144
+ class="border-destructive/40 bg-destructive/10 text-destructive rounded-md border p-3 text-sm"
145
+ >
146
+ {error}
147
+ </div>
148
+ {:else if loading && jobs.length === 0 && events.length === 0}
149
+ <div class="text-muted-foreground p-8 text-center text-sm">Loading…</div>
150
+ {:else if tab === 'jobs'}
151
+ {#if jobs.length === 0}
152
+ <div class="text-muted-foreground p-8 text-center text-sm">No jobs.</div>
153
+ {:else}
154
+ <div class="border-rule overflow-x-auto rounded-md border">
155
+ <table class="w-full text-sm">
156
+ <thead class="bg-muted/50 text-muted-foreground text-xs">
157
+ <tr>
158
+ <th class="px-3 py-2 text-left font-medium">Type</th>
159
+ <th class="px-3 py-2 text-left font-medium">Status</th>
160
+ <th class="px-3 py-2 text-left font-medium">Run at</th>
161
+ <th class="px-3 py-2 text-left font-medium">Attempts</th>
162
+ <th class="px-3 py-2 text-left font-medium">Last error</th>
163
+ <th class="px-3 py-2 text-left font-medium">Created</th>
164
+ </tr>
165
+ </thead>
166
+ <tbody>
167
+ {#each jobs as job (job.id)}
168
+ <tr class="border-rule border-t">
169
+ <td class="px-3 py-2 font-mono text-xs">{job.type}</td>
170
+ <td class="px-3 py-2">
171
+ <Badge variant={statusVariant[job.status]} class="capitalize">{job.status}</Badge>
172
+ </td>
173
+ <td class="px-3 py-2 whitespace-nowrap">{fmt(job.runAt)}</td>
174
+ <td class="px-3 py-2">{job.attempts}/{job.maxAttempts}</td>
175
+ <td
176
+ class="text-muted-foreground max-w-[220px] truncate px-3 py-2"
177
+ title={job.lastError ?? ''}
178
+ >
179
+ {job.lastError ?? '—'}
180
+ </td>
181
+ <td class="text-muted-foreground px-3 py-2 whitespace-nowrap"
182
+ >{fmt(job.createdAt)}</td
183
+ >
184
+ </tr>
185
+ {/each}
186
+ </tbody>
187
+ </table>
188
+ </div>
189
+ <p class="text-muted-foreground mt-2 text-xs">Showing {jobs.length} of {total}.</p>
190
+ {/if}
191
+ {:else if events.length === 0}
192
+ <div class="text-muted-foreground p-8 text-center text-sm">No events.</div>
193
+ {:else}
194
+ <div class="border-rule overflow-x-auto rounded-md border">
195
+ <table class="w-full text-sm">
196
+ <thead class="bg-muted/50 text-muted-foreground text-xs">
197
+ <tr>
198
+ <th class="px-3 py-2 text-left font-medium">Type</th>
199
+ <th class="px-3 py-2 text-left font-medium">Payload</th>
200
+ <th class="px-3 py-2 text-left font-medium">By</th>
201
+ <th class="px-3 py-2 text-left font-medium">When</th>
202
+ </tr>
203
+ </thead>
204
+ <tbody>
205
+ {#each events as event (event.id)}
206
+ <tr class="border-rule border-t">
207
+ <td class="px-3 py-2 font-mono text-xs">{event.type}</td>
208
+ <td
209
+ class="text-muted-foreground max-w-[320px] truncate px-3 py-2 font-mono text-xs"
210
+ title={JSON.stringify(event.payload)}
211
+ >
212
+ {JSON.stringify(event.payload)}
213
+ </td>
214
+ <td class="text-muted-foreground px-3 py-2 font-mono text-xs"
215
+ >{event.createdBy ?? '—'}</td
216
+ >
217
+ <td class="text-muted-foreground px-3 py-2 whitespace-nowrap"
218
+ >{fmt(event.createdAt)}</td
219
+ >
220
+ </tr>
221
+ {/each}
222
+ </tbody>
223
+ </table>
224
+ </div>
225
+ <p class="text-muted-foreground mt-2 text-xs">Showing {events.length} of {total}.</p>
226
+ {/if}
227
+ </div>
@@ -0,0 +1,4 @@
1
+ declare const ActivityView: import("svelte").Component<Record<string, never>, {}, "">;
2
+ type ActivityView = ReturnType<typeof ActivityView>;
3
+ export default ActivityView;
4
+ //# sourceMappingURL=ActivityView.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActivityView.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/admin/ActivityView.svelte.ts"],"names":[],"mappings":"AA6NA,QAAA,MAAM,YAAY,2DAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}