@aphexcms/cms-core 9.5.2 → 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 (301) 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/api.d.ts +2 -0
  8. package/dist/client/api.d.ts.map +1 -0
  9. package/dist/client/api.js +11 -0
  10. package/dist/client/ui.d.ts +25 -0
  11. package/dist/client/ui.d.ts.map +1 -0
  12. package/dist/client/ui.js +53 -0
  13. package/dist/components/admin/ActivityView.svelte +227 -0
  14. package/dist/components/admin/ActivityView.svelte.d.ts +4 -0
  15. package/dist/components/admin/ActivityView.svelte.d.ts.map +1 -0
  16. package/dist/components/admin/DocumentEditor.svelte +197 -11
  17. package/dist/components/admin/DocumentEditor.svelte.d.ts.map +1 -1
  18. package/dist/components/admin/ScheduleDialog.svelte +174 -0
  19. package/dist/components/admin/ScheduleDialog.svelte.d.ts +20 -0
  20. package/dist/components/admin/ScheduleDialog.svelte.d.ts.map +1 -0
  21. package/dist/components/admin/fields/ArrayField.svelte +10 -2
  22. package/dist/components/admin/fields/ArrayField.svelte.d.ts.map +1 -1
  23. package/dist/components/layout/OrganizationSwitcher.svelte +3 -3
  24. package/dist/components/layout/sidebar/NavUser.svelte +5 -5
  25. package/dist/db/interfaces/events.d.ts +55 -0
  26. package/dist/db/interfaces/events.d.ts.map +1 -0
  27. package/dist/db/interfaces/events.js +1 -0
  28. package/dist/db/interfaces/index.d.ts +10 -2
  29. package/dist/db/interfaces/index.d.ts.map +1 -1
  30. package/dist/db/interfaces/plugin-storage.d.ts +39 -0
  31. package/dist/db/interfaces/plugin-storage.d.ts.map +1 -0
  32. package/dist/db/interfaces/plugin-storage.js +1 -0
  33. package/dist/events/catalog.d.ts +8 -0
  34. package/dist/events/catalog.d.ts.map +1 -0
  35. package/dist/events/catalog.js +11 -0
  36. package/dist/events/consumer.d.ts +79 -0
  37. package/dist/events/consumer.d.ts.map +1 -0
  38. package/dist/events/consumer.js +76 -0
  39. package/dist/events/define-event.d.ts +17 -0
  40. package/dist/events/define-event.d.ts.map +1 -0
  41. package/dist/events/define-event.js +7 -0
  42. package/dist/events/emit.d.ts +11 -0
  43. package/dist/events/emit.d.ts.map +1 -0
  44. package/dist/events/emit.js +20 -0
  45. package/dist/events/index.d.ts +4 -0
  46. package/dist/events/index.d.ts.map +1 -0
  47. package/dist/events/index.js +3 -0
  48. package/dist/field-validation/rule.d.ts.map +1 -1
  49. package/dist/field-validation/rule.js +15 -0
  50. package/dist/field-validation/utils.d.ts.map +1 -1
  51. package/dist/field-validation/utils.js +7 -1
  52. package/dist/forms/define-form.d.ts +25 -0
  53. package/dist/forms/define-form.d.ts.map +1 -0
  54. package/dist/forms/define-form.js +22 -0
  55. package/dist/forms/index.d.ts +4 -0
  56. package/dist/forms/index.d.ts.map +1 -0
  57. package/dist/forms/index.js +5 -0
  58. package/dist/forms/types.d.ts +49 -0
  59. package/dist/forms/types.d.ts.map +1 -0
  60. package/dist/forms/types.js +1 -0
  61. package/dist/forms/validate.d.ts +9 -0
  62. package/dist/forms/validate.d.ts.map +1 -0
  63. package/dist/forms/validate.js +18 -0
  64. package/dist/hooks.d.ts.map +1 -1
  65. package/dist/hooks.js +15 -0
  66. package/dist/index.d.ts +2 -0
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +6 -0
  69. package/dist/jobs/document-jobs.d.ts +27 -0
  70. package/dist/jobs/document-jobs.d.ts.map +1 -0
  71. package/dist/jobs/document-jobs.js +42 -0
  72. package/dist/jobs/embedded-runner.d.ts +25 -0
  73. package/dist/jobs/embedded-runner.d.ts.map +1 -0
  74. package/dist/jobs/embedded-runner.js +46 -0
  75. package/dist/jobs/index.d.ts +7 -0
  76. package/dist/jobs/index.d.ts.map +1 -0
  77. package/dist/jobs/index.js +8 -0
  78. package/dist/jobs/relay.d.ts +27 -0
  79. package/dist/jobs/relay.d.ts.map +1 -0
  80. package/dist/jobs/relay.js +60 -0
  81. package/dist/jobs/run-batch.d.ts +52 -0
  82. package/dist/jobs/run-batch.d.ts.map +1 -0
  83. package/dist/jobs/run-batch.js +61 -0
  84. package/dist/jobs/run-due-jobs.d.ts +30 -0
  85. package/dist/jobs/run-due-jobs.d.ts.map +1 -0
  86. package/dist/jobs/run-due-jobs.js +69 -0
  87. package/dist/jobs/types.d.ts +18 -0
  88. package/dist/jobs/types.d.ts.map +1 -0
  89. package/dist/jobs/types.js +1 -0
  90. package/dist/lib/api/documents.d.ts +28 -0
  91. package/dist/lib/api/documents.d.ts.map +1 -1
  92. package/dist/lib/api/documents.js +18 -0
  93. package/dist/lib/api/documents.js.map +1 -1
  94. package/dist/lib/api/schemas/documents.d.ts +19 -0
  95. package/dist/lib/api/schemas/documents.d.ts.map +1 -1
  96. package/dist/lib/api/schemas/documents.js +18 -0
  97. package/dist/lib/api/schemas/documents.js.map +1 -1
  98. package/dist/lib/client/api.d.ts +2 -0
  99. package/dist/lib/client/api.d.ts.map +1 -0
  100. package/dist/lib/client/api.js +12 -0
  101. package/dist/lib/client/api.js.map +1 -0
  102. package/dist/lib/client/ui.d.ts +25 -0
  103. package/dist/lib/client/ui.d.ts.map +1 -0
  104. package/dist/lib/client/ui.js +54 -0
  105. package/dist/lib/client/ui.js.map +1 -0
  106. package/dist/lib/db/interfaces/events.d.ts +55 -0
  107. package/dist/lib/db/interfaces/events.d.ts.map +1 -0
  108. package/dist/lib/db/interfaces/events.js +2 -0
  109. package/dist/lib/db/interfaces/events.js.map +1 -0
  110. package/dist/lib/db/interfaces/index.d.ts +10 -2
  111. package/dist/lib/db/interfaces/index.d.ts.map +1 -1
  112. package/dist/lib/db/interfaces/plugin-storage.d.ts +39 -0
  113. package/dist/lib/db/interfaces/plugin-storage.d.ts.map +1 -0
  114. package/dist/lib/db/interfaces/plugin-storage.js +2 -0
  115. package/dist/lib/db/interfaces/plugin-storage.js.map +1 -0
  116. package/dist/lib/events/catalog.d.ts +8 -0
  117. package/dist/lib/events/catalog.d.ts.map +1 -0
  118. package/dist/lib/events/catalog.js +12 -0
  119. package/dist/lib/events/catalog.js.map +1 -0
  120. package/dist/lib/events/consumer.d.ts +79 -0
  121. package/dist/lib/events/consumer.d.ts.map +1 -0
  122. package/dist/lib/events/consumer.js +77 -0
  123. package/dist/lib/events/consumer.js.map +1 -0
  124. package/dist/lib/events/define-event.d.ts +17 -0
  125. package/dist/lib/events/define-event.d.ts.map +1 -0
  126. package/dist/lib/events/define-event.js +8 -0
  127. package/dist/lib/events/define-event.js.map +1 -0
  128. package/dist/lib/events/emit.d.ts +11 -0
  129. package/dist/lib/events/emit.d.ts.map +1 -0
  130. package/dist/lib/events/emit.js +21 -0
  131. package/dist/lib/events/emit.js.map +1 -0
  132. package/dist/lib/events/index.d.ts +4 -0
  133. package/dist/lib/events/index.d.ts.map +1 -0
  134. package/dist/lib/events/index.js +4 -0
  135. package/dist/lib/events/index.js.map +1 -0
  136. package/dist/lib/field-validation/rule.d.ts.map +1 -1
  137. package/dist/lib/field-validation/rule.js +15 -0
  138. package/dist/lib/field-validation/rule.js.map +1 -1
  139. package/dist/lib/field-validation/utils.d.ts.map +1 -1
  140. package/dist/lib/field-validation/utils.js +7 -1
  141. package/dist/lib/field-validation/utils.js.map +1 -1
  142. package/dist/lib/forms/define-form.d.ts +25 -0
  143. package/dist/lib/forms/define-form.d.ts.map +1 -0
  144. package/dist/lib/forms/define-form.js +23 -0
  145. package/dist/lib/forms/define-form.js.map +1 -0
  146. package/dist/lib/forms/index.d.ts +4 -0
  147. package/dist/lib/forms/index.d.ts.map +1 -0
  148. package/dist/lib/forms/index.js +6 -0
  149. package/dist/lib/forms/index.js.map +1 -0
  150. package/dist/lib/forms/types.d.ts +49 -0
  151. package/dist/lib/forms/types.d.ts.map +1 -0
  152. package/dist/lib/forms/types.js +2 -0
  153. package/dist/lib/forms/types.js.map +1 -0
  154. package/dist/lib/forms/validate.d.ts +9 -0
  155. package/dist/lib/forms/validate.d.ts.map +1 -0
  156. package/dist/lib/forms/validate.js +19 -0
  157. package/dist/lib/forms/validate.js.map +1 -0
  158. package/dist/lib/hooks.d.ts.map +1 -1
  159. package/dist/lib/hooks.js +15 -0
  160. package/dist/lib/hooks.js.map +1 -1
  161. package/dist/lib/index.d.ts +2 -0
  162. package/dist/lib/index.d.ts.map +1 -1
  163. package/dist/lib/index.js +6 -0
  164. package/dist/lib/index.js.map +1 -1
  165. package/dist/lib/jobs/document-jobs.d.ts +27 -0
  166. package/dist/lib/jobs/document-jobs.d.ts.map +1 -0
  167. package/dist/lib/jobs/document-jobs.js +43 -0
  168. package/dist/lib/jobs/document-jobs.js.map +1 -0
  169. package/dist/lib/jobs/embedded-runner.d.ts +25 -0
  170. package/dist/lib/jobs/embedded-runner.d.ts.map +1 -0
  171. package/dist/lib/jobs/embedded-runner.js +47 -0
  172. package/dist/lib/jobs/embedded-runner.js.map +1 -0
  173. package/dist/lib/jobs/index.d.ts +7 -0
  174. package/dist/lib/jobs/index.d.ts.map +1 -0
  175. package/dist/lib/jobs/index.js +9 -0
  176. package/dist/lib/jobs/index.js.map +1 -0
  177. package/dist/lib/jobs/relay.d.ts +27 -0
  178. package/dist/lib/jobs/relay.d.ts.map +1 -0
  179. package/dist/lib/jobs/relay.js +61 -0
  180. package/dist/lib/jobs/relay.js.map +1 -0
  181. package/dist/lib/jobs/run-batch.d.ts +52 -0
  182. package/dist/lib/jobs/run-batch.d.ts.map +1 -0
  183. package/dist/lib/jobs/run-batch.js +62 -0
  184. package/dist/lib/jobs/run-batch.js.map +1 -0
  185. package/dist/lib/jobs/run-due-jobs.d.ts +30 -0
  186. package/dist/lib/jobs/run-due-jobs.d.ts.map +1 -0
  187. package/dist/lib/jobs/run-due-jobs.js +70 -0
  188. package/dist/lib/jobs/run-due-jobs.js.map +1 -0
  189. package/dist/lib/jobs/types.d.ts +18 -0
  190. package/dist/lib/jobs/types.d.ts.map +1 -0
  191. package/dist/lib/jobs/types.js +2 -0
  192. package/dist/lib/jobs/types.js.map +1 -0
  193. package/dist/lib/local-api/collection-api.d.ts +42 -0
  194. package/dist/lib/local-api/collection-api.d.ts.map +1 -1
  195. package/dist/lib/local-api/collection-api.js +200 -25
  196. package/dist/lib/local-api/collection-api.js.map +1 -1
  197. package/dist/lib/local-api/hooks.d.ts +7 -0
  198. package/dist/lib/local-api/hooks.d.ts.map +1 -0
  199. package/dist/lib/local-api/hooks.js +20 -0
  200. package/dist/lib/local-api/hooks.js.map +1 -0
  201. package/dist/lib/mcp/tools.js +1 -1
  202. package/dist/lib/mcp/tools.js.map +1 -1
  203. package/dist/lib/plugins/resolver.d.ts +12 -1
  204. package/dist/lib/plugins/resolver.d.ts.map +1 -1
  205. package/dist/lib/plugins/resolver.js +4 -1
  206. package/dist/lib/plugins/resolver.js.map +1 -1
  207. package/dist/lib/plugins/types.d.ts +47 -2
  208. package/dist/lib/plugins/types.d.ts.map +1 -1
  209. package/dist/lib/plugins/types.js.map +1 -1
  210. package/dist/lib/schema-utils/define-type.d.ts +32 -0
  211. package/dist/lib/schema-utils/define-type.d.ts.map +1 -0
  212. package/dist/lib/schema-utils/define-type.js +41 -0
  213. package/dist/lib/schema-utils/define-type.js.map +1 -0
  214. package/dist/lib/schema-utils/index.d.ts +1 -0
  215. package/dist/lib/schema-utils/index.d.ts.map +1 -1
  216. package/dist/lib/schema-utils/index.js +1 -0
  217. package/dist/lib/schema-utils/index.js.map +1 -1
  218. package/dist/lib/server/api/index.d.ts.map +1 -1
  219. package/dist/lib/server/api/index.js +8 -0
  220. package/dist/lib/server/api/index.js.map +1 -1
  221. package/dist/lib/server/api/routes/documents-publish.d.ts.map +1 -1
  222. package/dist/lib/server/api/routes/documents-publish.js +110 -0
  223. package/dist/lib/server/api/routes/documents-publish.js.map +1 -1
  224. package/dist/lib/server/api/routes/jobs.d.ts +4 -0
  225. package/dist/lib/server/api/routes/jobs.d.ts.map +1 -0
  226. package/dist/lib/server/api/routes/jobs.js +93 -0
  227. package/dist/lib/server/api/routes/jobs.js.map +1 -0
  228. package/dist/lib/server/api/routes/workers-run.d.ts +4 -0
  229. package/dist/lib/server/api/routes/workers-run.d.ts.map +1 -0
  230. package/dist/lib/server/api/routes/workers-run.js +41 -0
  231. package/dist/lib/server/api/routes/workers-run.js.map +1 -0
  232. package/dist/lib/server/index.d.ts +1 -0
  233. package/dist/lib/server/index.d.ts.map +1 -1
  234. package/dist/lib/server/index.js +2 -0
  235. package/dist/lib/server/index.js.map +1 -1
  236. package/dist/lib/services/version-service.d.ts +16 -0
  237. package/dist/lib/services/version-service.d.ts.map +1 -1
  238. package/dist/lib/services/version-service.js +72 -48
  239. package/dist/lib/services/version-service.js.map +1 -1
  240. package/dist/lib/types/config.d.ts +43 -0
  241. package/dist/lib/types/config.d.ts.map +1 -1
  242. package/dist/lib/types/events.d.ts +134 -0
  243. package/dist/lib/types/events.d.ts.map +1 -0
  244. package/dist/lib/types/events.js +4 -0
  245. package/dist/lib/types/events.js.map +1 -0
  246. package/dist/lib/types/index.d.ts +1 -0
  247. package/dist/lib/types/index.d.ts.map +1 -1
  248. package/dist/lib/types/index.js +1 -0
  249. package/dist/lib/types/index.js.map +1 -1
  250. package/dist/lib/types/schemas.d.ts +71 -0
  251. package/dist/lib/types/schemas.d.ts.map +1 -1
  252. package/dist/lib/utils/index.d.ts +1 -1
  253. package/dist/lib/utils/index.d.ts.map +1 -1
  254. package/dist/lib/utils/index.js.map +1 -1
  255. package/dist/local-api/collection-api.d.ts +42 -0
  256. package/dist/local-api/collection-api.d.ts.map +1 -1
  257. package/dist/local-api/collection-api.js +200 -25
  258. package/dist/local-api/hooks.d.ts +7 -0
  259. package/dist/local-api/hooks.d.ts.map +1 -0
  260. package/dist/local-api/hooks.js +19 -0
  261. package/dist/mcp/tools.js +1 -1
  262. package/dist/plugins/resolver.d.ts +12 -1
  263. package/dist/plugins/resolver.d.ts.map +1 -1
  264. package/dist/plugins/resolver.js +4 -1
  265. package/dist/plugins/types.d.ts +47 -2
  266. package/dist/plugins/types.d.ts.map +1 -1
  267. package/dist/schema-utils/define-type.d.ts +32 -0
  268. package/dist/schema-utils/define-type.d.ts.map +1 -0
  269. package/dist/schema-utils/define-type.js +40 -0
  270. package/dist/schema-utils/index.d.ts +1 -0
  271. package/dist/schema-utils/index.d.ts.map +1 -1
  272. package/dist/schema-utils/index.js +1 -0
  273. package/dist/server/api/index.d.ts.map +1 -1
  274. package/dist/server/api/index.js +8 -0
  275. package/dist/server/api/routes/documents-publish.d.ts.map +1 -1
  276. package/dist/server/api/routes/documents-publish.js +110 -0
  277. package/dist/server/api/routes/jobs.d.ts +4 -0
  278. package/dist/server/api/routes/jobs.d.ts.map +1 -0
  279. package/dist/server/api/routes/jobs.js +92 -0
  280. package/dist/server/api/routes/workers-run.d.ts +4 -0
  281. package/dist/server/api/routes/workers-run.d.ts.map +1 -0
  282. package/dist/server/api/routes/workers-run.js +40 -0
  283. package/dist/server/index.d.ts +1 -0
  284. package/dist/server/index.d.ts.map +1 -1
  285. package/dist/server/index.js +2 -0
  286. package/dist/services/version-service.d.ts +16 -0
  287. package/dist/services/version-service.d.ts.map +1 -1
  288. package/dist/services/version-service.js +72 -48
  289. package/dist/types/config.d.ts +43 -0
  290. package/dist/types/config.d.ts.map +1 -1
  291. package/dist/types/events.d.ts +134 -0
  292. package/dist/types/events.d.ts.map +1 -0
  293. package/dist/types/events.js +3 -0
  294. package/dist/types/index.d.ts +1 -0
  295. package/dist/types/index.d.ts.map +1 -1
  296. package/dist/types/index.js +1 -0
  297. package/dist/types/schemas.d.ts +71 -0
  298. package/dist/types/schemas.d.ts.map +1 -1
  299. package/dist/utils/index.d.ts +1 -1
  300. package/dist/utils/index.d.ts.map +1 -1
  301. 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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,kBAAkB;;;;;;;;;;;iBAShB,CAAC;AAEhB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;iBAQZ,CAAC;AAEhB,eAAO,MAAM,oBAAoB;;;;;;;iBAO/B,CAAC;AAIH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;iBAc7B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAIhC,CAAC;AAOH,eAAO,MAAM,sBAAsB;;iBAOjC,CAAC;AAIH,eAAO,MAAM,qBAAqB;;;;;iBAS/B,CAAC;AAEJ,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;iBAIjC,CAAC;AAIH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;iBAG9B,CAAC;AAIH,eAAO,MAAM,qBAAqB;;;;iBAQ/B,CAAC;AAEJ,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;iBAIjC,CAAC;AAIH,eAAO,MAAM,sBAAsB;;;iBAGjC,CAAC;AAIH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;iBAIlC,CAAC;AAIH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;iBAIpC,CAAC;AAOH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;iBAYhC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAI1E,eAAO,MAAM,iBAAiB;;;iBAG5B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;iBAYnB,CAAC;AAEhB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;iBAI/B,CAAC;AAIH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;iBAG7B,CAAC;AAIH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;iBAIjC,CAAC;AAIH,eAAO,MAAM,uBAAuB;;;;;;iBAKlC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;iBAUnC,CAAC;AAIH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AACzD,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AACpE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAE1E,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAC1E,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE5E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEtE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAC1E,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE5E,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAC5E,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC9E,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAClF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC9E,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAEhF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAClE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACxE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AACpE,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -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
+ });
@@ -0,0 +1,2 @@
1
+ export * from '../api/index.js';
2
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/client/api.ts"],"names":[],"mappings":"AAUA,cAAc,cAAc,CAAC"}
@@ -0,0 +1,11 @@
1
+ // Narrow client entrypoint: API client functions only, no Svelte components.
2
+ //
3
+ // The main `@aphexcms/cms-core/client` barrel re-exports the whole admin UI —
4
+ // DocumentEditor, ArrayField and the rich-text editor it pulls (TipTap + @dnd-kit).
5
+ // Because those are side-effectful Svelte modules, importing *anything* from the
6
+ // barrel drags the entire graph into the route's chunk (~1.18 MB min / 328 kB gzip),
7
+ // even a page that only wants an API function.
8
+ //
9
+ // Utility pages that just call the API (invitations, god-mode) import from here so
10
+ // they stay off that chunk. Same symbols as the barrel's `export * from '../api.js'`.
11
+ export * from '../api/index.js';
@@ -0,0 +1,25 @@
1
+ export * from '../types/index.js';
2
+ export type { SidebarUser, SidebarNavItem, SidebarBranding, SidebarData } from '../types/sidebar.js';
3
+ export * from '../field-validation/rule.js';
4
+ export * from '../field-validation/utils.js';
5
+ export { createContentHash, hasUnpublishedChanges } from '../utils/content-hash.js';
6
+ export { setSchemaContext, getSchemaContext } from '../schema-context.svelte.js';
7
+ export { AdminSlots, setAdminSlots, useAdminSlots, type AdminSlotName, type AdminSlotEntry } from '../admin/slots.svelte.js';
8
+ export type { AdminArea } from '../admin/types.js';
9
+ export { setFieldComponents, useFieldComponents, type FieldComponentLookup } from '../admin/field-components.svelte.js';
10
+ export { createAdminNav, setAdminNav, useAdminNav, type AdminNav, type AdminParam, type ParamPatch } from '../admin/nav.svelte.js';
11
+ export { setPermissionsContext, usePermissions, type PermissionsContext } from '../permissions-context.svelte.js';
12
+ export * from '../schema-utils/index.js';
13
+ export { setBlockPreviews, useBlockPreviews, type BlockPreviewProps, type BlockPreviewLookup } from '../admin/block-previews.svelte.js';
14
+ export { default as Sidebar } from '../components/layout/Sidebar.svelte';
15
+ export { default as PermissionsDebug } from '../components/admin/PermissionsDebug.svelte';
16
+ export { default as PluginSettingsPanel } from '../components/admin/PluginSettingsPanel.svelte';
17
+ export { default as ActivityView } from '../components/admin/ActivityView.svelte';
18
+ export * from '../utils/index.js';
19
+ export * from '../api/index.js';
20
+ export type { ApiResponse } from '../api/index.js';
21
+ export { toast } from 'svelte-sonner';
22
+ export { confirmDialog, type ConfirmDialogOptions } from '../components/admin/confirm-dialog/confirm-dialog.svelte.js';
23
+ export { default as ConfirmDialogHost } from '../components/admin/confirm-dialog/ConfirmDialogHost.svelte';
24
+ export { stegaClean } from '../preview/stega.js';
25
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +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;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"}
@@ -0,0 +1,53 @@
1
+ // Narrow client entrypoint: admin chrome + context primitives, WITHOUT the
2
+ // document editor and field widgets.
3
+ //
4
+ // The main `@aphexcms/cms-core/client` barrel also re-exports DocumentEditor,
5
+ // SchemaField, AdminApp and every *Field component. Those pull the whole field
6
+ // registry (+@dnd-kit, +lucide) into one chunk (~597 kB min / 155 kB gzip). A
7
+ // page that only wants Sidebar, a confirm dialog or the permissions context is
8
+ // downloaded that entire chunk purely because it shares the barrel — Rollup's
9
+ // download unit is the chunk, not the tree-shaken symbol.
10
+ //
11
+ // Everything re-exported here is verified free of field-component imports, so
12
+ // the admin layout and non-editor admin pages (settings, members, roles…) can
13
+ // import from `/client/ui` and stay off the editor chunk. The editor route that
14
+ // mounts AdminApp/DocumentEditor keeps importing from the full `/client`.
15
+ // Core + sidebar types
16
+ export * from '../types/index.js';
17
+ // Field validation (client-side Rule + helpers) — plain JS
18
+ export * from '../field-validation/rule.js';
19
+ export * from '../field-validation/utils.js';
20
+ // Content hashing (change detection)
21
+ export { createContentHash, hasUnpublishedChanges } from '../utils/content-hash.js';
22
+ // Schema context
23
+ export { setSchemaContext, getSchemaContext } from '../schema-context.svelte.js';
24
+ // Admin extension slots (plugin seam)
25
+ export { AdminSlots, setAdminSlots, useAdminSlots } from '../admin/slots.svelte.js';
26
+ // Field-input widget registry (plugins register components for a field's `input`)
27
+ export { setFieldComponents, useFieldComponents } from '../admin/field-components.svelte.js';
28
+ // Admin URL navigation
29
+ export { createAdminNav, setAdminNav, useAdminNav } from '../admin/nav.svelte.js';
30
+ // Permissions context (capability-based UI gating)
31
+ export { setPermissionsContext, usePermissions } from '../permissions-context.svelte.js';
32
+ // Schema utilities
33
+ export * from '../schema-utils/index.js';
34
+ // Inline editor previews for custom rich-text block types (registration only —
35
+ // the previews themselves are app-owned and lazy).
36
+ export { setBlockPreviews, useBlockPreviews } from '../admin/block-previews.svelte.js';
37
+ // Admin chrome
38
+ export { default as Sidebar } from '../components/layout/Sidebar.svelte';
39
+ export { default as PermissionsDebug } from '../components/admin/PermissionsDebug.svelte';
40
+ // Plugin settings panel — renders its own inputs, does not pull the field registry.
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';
44
+ // Browser-safe utilities + API client
45
+ export * from '../utils/index.js';
46
+ export * from '../api/index.js';
47
+ // Toast notifications
48
+ export { toast } from 'svelte-sonner';
49
+ // Confirm dialog (imperative API + host)
50
+ export { confirmDialog } from '../components/admin/confirm-dialog/confirm-dialog.svelte.js';
51
+ export { default as ConfirmDialogHost } from '../components/admin/confirm-dialog/ConfirmDialogHost.svelte';
52
+ // Live-preview stega helper (small)
53
+ export { stegaClean } from '../preview/stega.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"}