@beechcms/core 0.9.5 → 0.9.7

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 (217) hide show
  1. package/LICENSE +21 -0
  2. package/dist/auth/login-request.d.ts +16 -0
  3. package/dist/auth/login-request.d.ts.map +1 -0
  4. package/dist/auth/login-request.js +22 -0
  5. package/dist/automations-grammar-words.d.ts +2 -0
  6. package/dist/automations-grammar-words.d.ts.map +1 -0
  7. package/dist/automations-grammar-words.js +8 -0
  8. package/dist/automations.repository.interface.d.ts +19 -0
  9. package/dist/automations.repository.interface.d.ts.map +1 -0
  10. package/dist/automations.repository.interface.js +3 -0
  11. package/dist/automations.runner.interface.d.ts +10 -0
  12. package/dist/automations.runner.interface.d.ts.map +1 -0
  13. package/dist/automations.runner.interface.js +3 -0
  14. package/dist/automations.runner.stub.d.ts +5 -0
  15. package/dist/automations.runner.stub.d.ts.map +1 -0
  16. package/dist/automations.runner.stub.js +7 -0
  17. package/dist/automations.types.d.ts +75 -0
  18. package/dist/automations.types.d.ts.map +1 -0
  19. package/dist/automations.types.js +3 -0
  20. package/dist/clock.d.ts +25 -0
  21. package/dist/clock.d.ts.map +1 -0
  22. package/dist/clock.js +11 -0
  23. package/dist/content/content.repository.d.ts +22 -22
  24. package/dist/content/content.repository.d.ts.map +1 -1
  25. package/dist/content/retention.d.ts +13 -0
  26. package/dist/content/retention.d.ts.map +1 -0
  27. package/dist/content/retention.js +20 -0
  28. package/dist/content/slug-utils.d.ts +7 -0
  29. package/dist/content/slug-utils.d.ts.map +1 -1
  30. package/dist/content/slug-utils.js +12 -0
  31. package/dist/content-scan.repository.d.ts +9 -0
  32. package/dist/content-scan.repository.d.ts.map +1 -0
  33. package/dist/content-scan.repository.js +3 -0
  34. package/dist/content.repository.d.ts +247 -0
  35. package/dist/content.repository.d.ts.map +1 -0
  36. package/dist/content.repository.js +59 -0
  37. package/dist/dashboard-layout/dashboard-layout.d.ts +2 -2
  38. package/dist/dashboard-layout/dashboard-layout.d.ts.map +1 -1
  39. package/dist/dashboard-layout/dashboard-layout.js +3 -3
  40. package/dist/dashboard-layout/relation-avatar.d.ts +12 -0
  41. package/dist/dashboard-layout/relation-avatar.d.ts.map +1 -0
  42. package/dist/dashboard-layout/relation-avatar.js +18 -0
  43. package/dist/dashboard-layout/seed-layout.d.ts.map +1 -1
  44. package/dist/dashboard-layout/seed-layout.js +17 -1
  45. package/dist/dashboard-layout.d.ts +154 -0
  46. package/dist/dashboard-layout.d.ts.map +1 -0
  47. package/dist/dashboard-layout.js +186 -0
  48. package/dist/dashboard-layout.repository.d.ts +18 -0
  49. package/dist/dashboard-layout.repository.d.ts.map +1 -0
  50. package/dist/dashboard-layout.repository.js +3 -0
  51. package/dist/dashboard-permissions.d.ts +3 -0
  52. package/dist/dashboard-permissions.d.ts.map +1 -0
  53. package/dist/dashboard-permissions.js +11 -0
  54. package/dist/dashboard-scopes.d.ts +12 -0
  55. package/dist/dashboard-scopes.d.ts.map +1 -0
  56. package/dist/dashboard-scopes.js +30 -0
  57. package/dist/define-seed.d.ts +3 -0
  58. package/dist/define-seed.d.ts.map +1 -0
  59. package/dist/define-seed.js +5 -0
  60. package/dist/demo-data.repository.d.ts +5 -0
  61. package/dist/demo-data.repository.d.ts.map +1 -0
  62. package/dist/demo-data.repository.js +3 -0
  63. package/dist/email.provider.d.ts +32 -0
  64. package/dist/email.provider.d.ts.map +1 -0
  65. package/dist/email.provider.js +4 -0
  66. package/dist/engine/ddl/ddl.d.ts +4 -6
  67. package/dist/engine/ddl/ddl.d.ts.map +1 -1
  68. package/dist/engine/ddl/ddl.js +13 -27
  69. package/dist/engine/ddl/seed-ddl.d.ts.map +1 -1
  70. package/dist/engine/ddl/seed-ddl.js +10 -2
  71. package/dist/engine/ddl.d.ts +0 -23
  72. package/dist/engine/ddl.d.ts.map +1 -1
  73. package/dist/engine/ddl.js +3 -59
  74. package/dist/engine/localization.d.ts +127 -0
  75. package/dist/engine/localization.d.ts.map +1 -0
  76. package/dist/engine/localization.js +212 -0
  77. package/dist/engine/privacy.service.d.ts.map +1 -1
  78. package/dist/engine/query/active-clause.d.ts +2 -3
  79. package/dist/engine/query/active-clause.d.ts.map +1 -1
  80. package/dist/engine/query/active-clause.js +3 -4
  81. package/dist/engine/query/query.js +8 -8
  82. package/dist/engine/query/search-support.d.ts +32 -0
  83. package/dist/engine/query/search-support.d.ts.map +1 -0
  84. package/dist/engine/query/search-support.js +34 -0
  85. package/dist/engine/query.d.ts.map +1 -1
  86. package/dist/engine/query.js +0 -12
  87. package/dist/engine/schema-fingerprint.d.ts +2 -0
  88. package/dist/engine/schema-fingerprint.d.ts.map +1 -1
  89. package/dist/engine/schema-fingerprint.js +2 -0
  90. package/dist/engine/seed-ddl.d.ts +1 -4
  91. package/dist/engine/seed-ddl.d.ts.map +1 -1
  92. package/dist/engine/seed-ddl.js +2 -17
  93. package/dist/engine/seed-registry.d.ts.map +1 -1
  94. package/dist/engine/seed-types-generator.d.ts +2 -17
  95. package/dist/engine/seed-types-generator.d.ts.map +1 -1
  96. package/dist/engine/seed-types-generator.js +3 -31
  97. package/dist/engine/seed-validation.d.ts.map +1 -1
  98. package/dist/engine/seed-validation.js +0 -10
  99. package/dist/engine/seeds/seed-definition-diff.d.ts +1 -1
  100. package/dist/engine/seeds/seed-definition-diff.d.ts.map +1 -1
  101. package/dist/engine/seeds/seed-definition-diff.js +2 -2
  102. package/dist/engine/seeds/seed-validation.d.ts.map +1 -1
  103. package/dist/engine/seeds/seed-validation.js +3 -12
  104. package/dist/engine/types.d.ts +7 -7
  105. package/dist/engine/types.d.ts.map +1 -1
  106. package/dist/engine.d.ts +144 -0
  107. package/dist/engine.d.ts.map +1 -0
  108. package/dist/engine.js +741 -0
  109. package/dist/file-types.d.ts +13 -0
  110. package/dist/file-types.d.ts.map +1 -0
  111. package/dist/file-types.js +85 -0
  112. package/dist/hooks.d.ts +29 -0
  113. package/dist/hooks.d.ts.map +1 -0
  114. package/dist/hooks.js +3 -0
  115. package/dist/id-generator.d.ts +26 -0
  116. package/dist/id-generator.d.ts.map +1 -0
  117. package/dist/id-generator.js +12 -0
  118. package/dist/idempotency.repository.d.ts +13 -0
  119. package/dist/idempotency.repository.d.ts.map +1 -0
  120. package/dist/idempotency.repository.js +3 -0
  121. package/dist/index.d.ts +1 -0
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js +1 -0
  124. package/dist/kanban-position.repository.d.ts +19 -0
  125. package/dist/kanban-position.repository.d.ts.map +1 -0
  126. package/dist/kanban-position.repository.js +3 -0
  127. package/dist/kanban.d.ts +75 -0
  128. package/dist/kanban.d.ts.map +1 -0
  129. package/dist/kanban.js +82 -0
  130. package/dist/layout-permissions.d.ts +3 -0
  131. package/dist/layout-permissions.d.ts.map +1 -0
  132. package/dist/layout-permissions.js +11 -0
  133. package/dist/media.repository.d.ts +61 -0
  134. package/dist/media.repository.d.ts.map +1 -0
  135. package/dist/media.repository.js +3 -0
  136. package/dist/notifications/notification.repository.d.ts +6 -3
  137. package/dist/notifications/notification.repository.d.ts.map +1 -1
  138. package/dist/policies.d.ts +10 -0
  139. package/dist/policies.d.ts.map +1 -0
  140. package/dist/policies.js +33 -0
  141. package/dist/queue.interface.d.ts +39 -0
  142. package/dist/queue.interface.d.ts.map +1 -0
  143. package/dist/queue.interface.js +3 -0
  144. package/dist/queue.stub.d.ts +6 -0
  145. package/dist/queue.stub.d.ts.map +1 -0
  146. package/dist/queue.stub.js +8 -0
  147. package/dist/relations.d.ts +28 -0
  148. package/dist/relations.d.ts.map +1 -0
  149. package/dist/relations.js +25 -0
  150. package/dist/richtext-render.d.ts +11 -0
  151. package/dist/richtext-render.d.ts.map +1 -0
  152. package/dist/richtext-render.js +87 -0
  153. package/dist/richtext.d.ts +11 -0
  154. package/dist/richtext.d.ts.map +1 -0
  155. package/dist/richtext.js +13 -0
  156. package/dist/scheduler.interface.d.ts +4 -0
  157. package/dist/scheduler.interface.d.ts.map +1 -0
  158. package/dist/scheduler.interface.js +3 -0
  159. package/dist/scheduler.stub.d.ts +5 -0
  160. package/dist/scheduler.stub.d.ts.map +1 -0
  161. package/dist/scheduler.stub.js +7 -0
  162. package/dist/schema-mutator.d.ts +26 -0
  163. package/dist/schema-mutator.d.ts.map +1 -0
  164. package/dist/schema-mutator.js +3 -0
  165. package/dist/security/time-trap.d.ts +3 -2
  166. package/dist/security/time-trap.d.ts.map +1 -1
  167. package/dist/security/time-trap.js +5 -4
  168. package/dist/seed-ddl-destructive.d.ts +40 -0
  169. package/dist/seed-ddl-destructive.d.ts.map +1 -0
  170. package/dist/seed-ddl-destructive.js +149 -0
  171. package/dist/seed-ddl.d.ts +40 -0
  172. package/dist/seed-ddl.d.ts.map +1 -0
  173. package/dist/seed-ddl.js +100 -0
  174. package/dist/seed-layout.d.ts +145 -0
  175. package/dist/seed-layout.d.ts.map +1 -0
  176. package/dist/seed-layout.js +192 -0
  177. package/dist/seed-layout.repository.d.ts +22 -0
  178. package/dist/seed-layout.repository.d.ts.map +1 -0
  179. package/dist/seed-layout.repository.js +3 -0
  180. package/dist/seed-registry.d.ts +71 -0
  181. package/dist/seed-registry.d.ts.map +1 -0
  182. package/dist/seed-registry.js +143 -0
  183. package/dist/seed-types-generator.d.ts +1 -1
  184. package/dist/seed-types-generator.d.ts.map +1 -1
  185. package/dist/seed-validation.d.ts +23 -0
  186. package/dist/seed-validation.d.ts.map +1 -0
  187. package/dist/seed-validation.js +224 -0
  188. package/dist/seed.repository.d.ts +37 -0
  189. package/dist/seed.repository.d.ts.map +1 -0
  190. package/dist/seed.repository.js +3 -0
  191. package/dist/seeds.d.ts +20 -0
  192. package/dist/seeds.d.ts.map +1 -0
  193. package/dist/seeds.js +21 -0
  194. package/dist/settings/site-settings.repository.d.ts +2 -0
  195. package/dist/settings/site-settings.repository.d.ts.map +1 -1
  196. package/dist/site-settings.repository.d.ts +16 -0
  197. package/dist/site-settings.repository.d.ts.map +1 -0
  198. package/dist/site-settings.repository.js +3 -0
  199. package/dist/slug-utils.d.ts +18 -0
  200. package/dist/slug-utils.d.ts.map +1 -0
  201. package/dist/slug-utils.js +32 -0
  202. package/dist/storage.d.ts +46 -0
  203. package/dist/storage.d.ts.map +1 -0
  204. package/dist/storage.js +3 -0
  205. package/dist/types.d.ts +243 -0
  206. package/dist/types.d.ts.map +1 -0
  207. package/dist/types.js +3 -0
  208. package/dist/validation.d.ts +50 -0
  209. package/dist/validation.d.ts.map +1 -0
  210. package/dist/validation.js +660 -0
  211. package/dist/webhook-validation.d.ts +3 -0
  212. package/dist/webhook-validation.d.ts.map +1 -0
  213. package/dist/webhook-validation.js +6 -0
  214. package/package.json +1 -1
  215. package/dist/content/content-lock.repository.d.ts +0 -63
  216. package/dist/content/content-lock.repository.d.ts.map +0 -1
  217. package/dist/content/content-lock.repository.js +0 -15
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024-2026 Flavio De Musso
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,16 @@
1
+ import { z } from 'zod';
2
+ /** Same bounds the setup and reset-password flows enforce, so a password that can be created can log in. */
3
+ export declare const LOGIN_PASSWORD_MIN_LENGTH = 8;
4
+ export declare const LOGIN_PASSWORD_MAX_LENGTH = 128;
5
+ /** bcrypt silently truncates at 72 bytes; refusing longer input stops two passwords sharing a hash. */
6
+ export declare const LOGIN_PASSWORD_MAX_BYTES = 72;
7
+ /**
8
+ * Body of `POST /auth/login`. The single source of both the runtime check and the type the typed
9
+ * client sends: the output email is already trimmed and lowercased, the form it is stored in.
10
+ */
11
+ export declare const loginRequestSchema: z.ZodObject<{
12
+ email: z.ZodString;
13
+ password: z.ZodString;
14
+ }, z.core.$strip>;
15
+ export type LoginRequest = z.input<typeof loginRequestSchema>;
16
+ //# sourceMappingURL=login-request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-request.d.ts","sourceRoot":"","sources":["../../src/auth/login-request.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,4GAA4G;AAC5G,eAAO,MAAM,yBAAyB,IAAI,CAAA;AAC1C,eAAO,MAAM,yBAAyB,MAAM,CAAA;AAE5C,uGAAuG;AACvG,eAAO,MAAM,wBAAwB,KAAK,CAAA;AAE1C;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;iBAO7B,CAAA;AAEF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA"}
@@ -0,0 +1,22 @@
1
+ // SPDX-License-Identifier: BUSL-1.1
2
+ // Copyright (c) 2024–2026 Flavio De Musso. All rights reserved.
3
+ // See LICENSE in the repository root for license terms.
4
+ import { z } from 'zod';
5
+ import { isValidAccountEmail } from './account-email.js';
6
+ /** Same bounds the setup and reset-password flows enforce, so a password that can be created can log in. */
7
+ export const LOGIN_PASSWORD_MIN_LENGTH = 8;
8
+ export const LOGIN_PASSWORD_MAX_LENGTH = 128;
9
+ /** bcrypt silently truncates at 72 bytes; refusing longer input stops two passwords sharing a hash. */
10
+ export const LOGIN_PASSWORD_MAX_BYTES = 72;
11
+ /**
12
+ * Body of `POST /auth/login`. The single source of both the runtime check and the type the typed
13
+ * client sends: the output email is already trimmed and lowercased, the form it is stored in.
14
+ */
15
+ export const loginRequestSchema = z.object({
16
+ email: z.string().trim().toLowerCase().refine(isValidAccountEmail),
17
+ password: z
18
+ .string()
19
+ .min(LOGIN_PASSWORD_MIN_LENGTH)
20
+ .max(LOGIN_PASSWORD_MAX_LENGTH)
21
+ .refine((password) => new TextEncoder().encode(password).length <= LOGIN_PASSWORD_MAX_BYTES),
22
+ });
@@ -0,0 +1,2 @@
1
+ export declare const AUTOMATION_RESERVED_WORDS: Set<string>;
2
+ //# sourceMappingURL=automations-grammar-words.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automations-grammar-words.d.ts","sourceRoot":"","sources":["../src/automations-grammar-words.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,yBAAyB,aAKpC,CAAA"}
@@ -0,0 +1,8 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright (c) 2024–2026 Flavio De Musso
3
+ export const AUTOMATION_RESERVED_WORDS = new Set([
4
+ 'this', 'batch', 'all', 'firstone', 'lastone', 'byid', 'where',
5
+ 'array',
6
+ 'count', 'sum', 'avg', 'min', 'max', 'pluck',
7
+ 'true', 'false', 'null',
8
+ ]);
@@ -0,0 +1,19 @@
1
+ import type { Automation, AutomationAction, AutomationTrigger, AutomationTriggerEvent, WhenNode } from './automations.types.js';
2
+ export interface CreateAutomationInput {
3
+ seed_slug: string;
4
+ name: string;
5
+ triggers: AutomationTrigger[];
6
+ trigger_conditions: WhenNode | null;
7
+ actions: AutomationAction[];
8
+ }
9
+ export type UpdateAutomationInput = Partial<CreateAutomationInput>;
10
+ export interface IAutomationRepository {
11
+ list(seedSlug: string): Promise<Automation[]>;
12
+ findById(id: string): Promise<Automation | null>;
13
+ create(input: CreateAutomationInput): Promise<string>;
14
+ update(id: string, input: UpdateAutomationInput): Promise<void>;
15
+ toggle(id: string, enabled: boolean): Promise<void>;
16
+ delete(id: string): Promise<void>;
17
+ findActive(seedSlug: string, event: AutomationTriggerEvent): Promise<Automation[]>;
18
+ }
19
+ //# sourceMappingURL=automations.repository.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automations.repository.interface.d.ts","sourceRoot":"","sources":["../src/automations.repository.interface.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAE/H,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,iBAAiB,EAAE,CAAA;IAC7B,kBAAkB,EAAE,QAAQ,GAAG,IAAI,CAAA;IACnC,OAAO,EAAE,gBAAgB,EAAE,CAAA;CAC5B;AAED,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAA;AAElE,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;IAC7C,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAA;IAChD,MAAM,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACrD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/D,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjC,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;CACnF"}
@@ -0,0 +1,3 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright (c) 2024–2026 Flavio De Musso
3
+ export {};
@@ -0,0 +1,10 @@
1
+ import type { AutomationTriggerEvent } from './automations.types.js';
2
+ export interface AutomationEventPayload {
3
+ seedSlug: string;
4
+ event: AutomationTriggerEvent;
5
+ entry: Record<string, unknown>;
6
+ }
7
+ export interface IAutomationRunner {
8
+ run(payload: AutomationEventPayload): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=automations.runner.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automations.runner.interface.d.ts","sourceRoot":"","sources":["../src/automations.runner.interface.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAEpE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,sBAAsB,CAAA;IAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACpD"}
@@ -0,0 +1,3 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright (c) 2024–2026 Flavio De Musso
3
+ export {};
@@ -0,0 +1,5 @@
1
+ import type { IAutomationRunner, AutomationEventPayload } from './automations.runner.interface.js';
2
+ export declare class NoOpAutomationRunner implements IAutomationRunner {
3
+ run(_payload: AutomationEventPayload): Promise<void>;
4
+ }
5
+ //# sourceMappingURL=automations.runner.stub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automations.runner.stub.d.ts","sourceRoot":"","sources":["../src/automations.runner.stub.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAA;AAElG,qBAAa,oBAAqB,YAAW,iBAAiB;IACtD,GAAG,CAAC,QAAQ,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;CAG3D"}
@@ -0,0 +1,7 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright (c) 2024–2026 Flavio De Musso
3
+ export class NoOpAutomationRunner {
4
+ async run(_payload) {
5
+ // intentionally empty
6
+ }
7
+ }
@@ -0,0 +1,75 @@
1
+ export type AutomationTriggerEvent = 'create' | 'update' | 'delete' | 'cron';
2
+ export interface AutomationTrigger {
3
+ event: AutomationTriggerEvent;
4
+ cron?: string | null;
5
+ }
6
+ export interface TriggerCondition {
7
+ field: string;
8
+ op: 'eq' | 'neq' | 'contains' | 'gt' | 'lt' | 'isempty' | 'isnotempty';
9
+ value: unknown;
10
+ }
11
+ export type WhenOperand = {
12
+ kind: 'literal';
13
+ value: unknown;
14
+ } | {
15
+ kind: 'ref';
16
+ key: string;
17
+ };
18
+ export type WhenOp = 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'contains' | 'startswith' | 'endswith' | 'in' | 'notin' | 'isempty' | 'isnotempty' | 'matches';
19
+ export interface WhenPredicate {
20
+ kind: 'predicate';
21
+ left: WhenOperand;
22
+ op: WhenOp;
23
+ right?: WhenOperand;
24
+ }
25
+ export interface WhenGroup {
26
+ kind: 'group';
27
+ op: 'AND' | 'OR';
28
+ children: WhenNode[];
29
+ negate?: boolean;
30
+ }
31
+ export type WhenNode = WhenPredicate | WhenGroup;
32
+ export interface SetVariableAction {
33
+ type: 'set_variable';
34
+ name: string;
35
+ seed_slug?: string;
36
+ fixed_id?: string;
37
+ column?: string;
38
+ filters?: TriggerCondition[];
39
+ order_by?: string;
40
+ order?: 'asc' | 'desc';
41
+ /** @deprecated Read but ignored at runtime. Removed on next save. */
42
+ load_type?: 'fruit' | 'branch';
43
+ }
44
+ export type AutomationAction = {
45
+ type: 'webhook';
46
+ url: string;
47
+ method?: 'POST' | 'GET' | 'PUT';
48
+ headers?: Record<string, string>;
49
+ body_template?: string;
50
+ } | {
51
+ type: 'send_mail';
52
+ to: string;
53
+ subject_template: string;
54
+ body_template: string;
55
+ } | {
56
+ type: 'edit_field';
57
+ field: string;
58
+ value: unknown;
59
+ } | {
60
+ type: 'create_entry';
61
+ seed_slug: string;
62
+ field_map: Record<string, string>;
63
+ } | SetVariableAction;
64
+ export interface Automation {
65
+ id: string;
66
+ seed_slug: string;
67
+ name: string;
68
+ enabled: boolean;
69
+ triggers: AutomationTrigger[];
70
+ trigger_conditions: WhenNode | null;
71
+ actions: AutomationAction[];
72
+ created_at: number;
73
+ updated_at: number;
74
+ }
75
+ //# sourceMappingURL=automations.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automations.types.d.ts","sourceRoot":"","sources":["../src/automations.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright (c) 2024–2026 Flavio De Musso
3
+ export {};
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Time abstraction. Hides direct calls to {@link Date.now} so callers can
3
+ * swap in deterministic clocks during tests without resorting to global
4
+ * timer mocks (e.g. vi.useFakeTimers, sinon, monkey-patching Date).
5
+ */
6
+ export interface IClock {
7
+ /**
8
+ * Returns the current Unix timestamp in milliseconds.
9
+ * Equivalent to Date.now() in production.
10
+ * Overridable in tests for deterministic time-sensitive assertions.
11
+ */
12
+ now(): number;
13
+ /**
14
+ * Returns the current Unix timestamp in whole seconds.
15
+ * Equivalent to Math.floor(Date.now() / 1000) in production.
16
+ * Used by JWT issuance, session expiry, and analytics day-bucket computations.
17
+ */
18
+ nowSeconds(): number;
19
+ }
20
+ /**
21
+ * Production singleton. Delegates to the host runtime clock. Stateless and
22
+ * therefore safe to share across requests.
23
+ */
24
+ export declare const SystemClock: IClock;
25
+ //# sourceMappingURL=clock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clock.d.ts","sourceRoot":"","sources":["../src/clock.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,WAAW,MAAM;IACrB;;;;OAIG;IACH,GAAG,IAAI,MAAM,CAAA;IAEb;;;;OAIG;IACH,UAAU,IAAI,MAAM,CAAA;CACrB;AAID;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,MAGzB,CAAA"}
package/dist/clock.js ADDED
@@ -0,0 +1,11 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright (c) 2024–2026 Flavio De Musso
3
+ const MILLISECONDS_PER_SECOND = 1000;
4
+ /**
5
+ * Production singleton. Delegates to the host runtime clock. Stateless and
6
+ * therefore safe to share across requests.
7
+ */
8
+ export const SystemClock = {
9
+ now: () => Date.now(),
10
+ nowSeconds: () => Math.floor(Date.now() / MILLISECONDS_PER_SECOND),
11
+ };
@@ -145,6 +145,15 @@ export interface RepositoryOptions {
145
145
  */
146
146
  ifMatch?: number;
147
147
  }
148
+ /** Options for `purge`. */
149
+ export interface PurgeOptions extends RepositoryOptions {
150
+ /**
151
+ * Which rows the purge may erase. Default `'trashed'`: an ordinary purge only ever erases an entry
152
+ * already in the Trash. `'any'` is reserved for ledger reconciliation, which must re-erase a row a
153
+ * database restore resurrected as live.
154
+ */
155
+ trashed?: Exclude<TrashedMode, 'active'>;
156
+ }
148
157
  /**
149
158
  * Declarative multi-write operation translated into a single `db.batch` call.
150
159
  * Used for coordinated writes across one or more seeds when D1's lack of
@@ -184,7 +193,7 @@ export type BatchWrite = {
184
193
  export interface PurgeResult {
185
194
  /** The row as it existed immediately before erasure — the source of the R2 media keys. */
186
195
  row: Record<string, any>;
187
- /** True when a ledger event was appended. False only for a seed without `softDelete`. */
196
+ /** True when a ledger event was appended. False only when the repository has no ledger configured. */
188
197
  ledgerWritten: boolean;
189
198
  }
190
199
  /** Per-id outcome of a bulk trash operation, mirroring `bulkUpdate`'s shape. */
@@ -249,14 +258,6 @@ export interface ContentRepository {
249
258
  * Throws EntryConflictError if `options.ifMatch` is set and no longer matches the live row's `updated_at`.
250
259
  */
251
260
  update(seed: Seed, id: string, data: Record<string, any>, status?: string, options?: RepositoryOptions): Promise<void>;
252
- /**
253
- * Deletes an entry from the live table.
254
- * Returns the deleted row data (useful for media cleanup).
255
- * Throws EntryNotFoundError if the ID does not exist.
256
- */
257
- delete(seed: Seed, id: string, options?: RepositoryOptions): Promise<{
258
- row: Record<string, any>;
259
- }>;
260
261
  /**
261
262
  * Atomically increments/decrements a numeric field with optional min/max guards.
262
263
  * Bypasses document-level lifecycle hooks — it's a single UPDATE statement,
@@ -350,19 +351,19 @@ export interface ContentRepository {
350
351
  }>;
351
352
  /**
352
353
  * Reversible delete: stamps `deleted_at` and returns the row as it was.
353
- * Runs `beforeDelete`/`afterDelete`, exactly like `delete`.
354
+ * Stamps `deleted_at` from the repository's `IClock` and renames the slug with `toTrashedSlug`.
355
+ * Runs `beforeDelete`/`afterDelete`.
354
356
  * Leaves junction rows, `_drafts` rows and R2 media untouched — a trashed entry must be
355
357
  * restorable whole.
356
- * @throws RepositoryError if `seed.softDelete` is not true.
357
358
  * @throws EntryNotFoundError if no live row with `id` exists.
358
359
  */
359
360
  softDelete(seed: Seed, id: string, options?: RepositoryOptions): Promise<{
360
361
  row: Record<string, any>;
361
362
  }>;
362
363
  /**
363
- * Clears `deleted_at`. When the entry's slug was taken by a live entry in the meantime the
364
- * UNIQUE constraint rejects the update; the implementation catches it and restores under an
365
- * auto-renamed slug rather than failing the operation (feature brief §4).
364
+ * Clears `deleted_at` and restores `fromTrashedSlug(slug)`. When that slug was taken by a live
365
+ * entry in the meantime the UNIQUE constraint rejects the update; the implementation catches it
366
+ * and falls back to `<original>-restored-<id8>` rather than failing the operation (feature brief §4).
366
367
  * @returns The restored row, carrying the slug it actually ended up with.
367
368
  * @throws EntryNotFoundError if no TRASHED row with `id` exists.
368
369
  */
@@ -372,12 +373,12 @@ export interface ContentRepository {
372
373
  /**
373
374
  * Irreversible erasure: runs `beforeDelete`, reads the row, deletes it (junction and
374
375
  * `_drafts` rows follow via ON DELETE CASCADE), appends the ledger event, runs `afterDelete`.
375
- * Works on a live row and on a trashed one.
376
+ * Only erases a trashed row unless `PurgeOptions.trashed` is `'any'`.
376
377
  * R2 media deletion is NOT performed here — the caller owns it (VSA: no external I/O in the
377
378
  * repository beyond the ledger port).
378
- * @throws EntryNotFoundError if no row with `id` exists.
379
+ * @throws EntryNotFoundError if no row matching the `PurgeOptions.trashed` mode with `id` exists.
379
380
  */
380
- purge(seed: Seed, id: string, options?: RepositoryOptions): Promise<PurgeResult>;
381
+ purge(seed: Seed, id: string, options?: PurgeOptions): Promise<PurgeResult>;
381
382
  /** `restore` applied per id. Never partially fails the batch: each id reports its own outcome. */
382
383
  bulkRestore(seed: Seed, ids: string[], options?: RepositoryOptions): Promise<BulkDeleteResult>;
383
384
  /**
@@ -388,11 +389,10 @@ export interface ContentRepository {
388
389
  }>;
389
390
  /**
390
391
  * Pure query, no side effects: ids of trashed entries whose retention window has elapsed
391
- * (`deleted_at + seed.retentionDays * 86400 <= now`).
392
- * Returns [] when the seed has no `retentionDays` or no `softDelete`.
393
- * Deliberately NOT wired to any scheduler — the recurring-automation adapter is future work
394
- * (feature brief §2). `now` is supplied by the caller's `IClock`; never read the clock here.
392
+ * (`deleted_at + retentionDays * 86400 <= now`), oldest deletion first, at most `limit`.
393
+ * `retentionDays` is the EFFECTIVE value (`resolveRetentionDays`); `0` = never purge → [] without querying.
394
+ * `now` is unix seconds supplied by the caller's `IClock`; never read the clock here.
395
395
  */
396
- findExpiredByRetention(seed: Seed, now: number, limit: number): Promise<string[]>;
396
+ findExpiredByRetention(seed: Seed, retentionDays: number, now: number, limit: number): Promise<string[]>;
397
397
  }
398
398
  //# sourceMappingURL=content.repository.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"content.repository.d.ts","sourceRoot":"","sources":["../../src/content/content.repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"content.repository.d.ts","sourceRoot":"","sources":["../../src/content/content.repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { Seed } from '../engine/types.js';
2
+ /** Global Trash retention when the setting was never configured (feature brief §2). */
3
+ export declare const DEFAULT_TRASH_RETENTION_DAYS = 14;
4
+ /** Upper bound for any retention value: ~100 years. Keeps `days * 86400` far inside safe-integer range. */
5
+ export declare const MAX_RETENTION_DAYS = 36500;
6
+ /** True for an integer in [0, MAX_RETENTION_DAYS]. `0` means "never purge". Rejects NaN, floats, strings, null. */
7
+ export declare function isValidRetentionDays(value: unknown): value is number;
8
+ /**
9
+ * Effective retention for one seed: the seed's own `retentionDays` when it is a number (including 0),
10
+ * otherwise `globalRetentionDays`. `0` = never purge. Pure; never throws.
11
+ */
12
+ export declare function resolveRetentionDays(seed: Pick<Seed, 'retentionDays'>, globalRetentionDays: number): number;
13
+ //# sourceMappingURL=retention.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retention.d.ts","sourceRoot":"","sources":["../../src/content/retention.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAE9C,uFAAuF;AACvF,eAAO,MAAM,4BAA4B,KAAK,CAAA;AAE9C,2GAA2G;AAC3G,eAAO,MAAM,kBAAkB,QAAQ,CAAA;AAEvC,mHAAmH;AACnH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAKpE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,mBAAmB,EAAE,MAAM,GAAG,MAAM,CAE3G"}
@@ -0,0 +1,20 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright (c) 2024–2026 Flavio De Musso
3
+ /** Global Trash retention when the setting was never configured (feature brief §2). */
4
+ export const DEFAULT_TRASH_RETENTION_DAYS = 14;
5
+ /** Upper bound for any retention value: ~100 years. Keeps `days * 86400` far inside safe-integer range. */
6
+ export const MAX_RETENTION_DAYS = 36500;
7
+ /** True for an integer in [0, MAX_RETENTION_DAYS]. `0` means "never purge". Rejects NaN, floats, strings, null. */
8
+ export function isValidRetentionDays(value) {
9
+ return typeof value === 'number'
10
+ && Number.isInteger(value)
11
+ && value >= 0
12
+ && value <= MAX_RETENTION_DAYS;
13
+ }
14
+ /**
15
+ * Effective retention for one seed: the seed's own `retentionDays` when it is a number (including 0),
16
+ * otherwise `globalRetentionDays`. `0` = never purge. Pure; never throws.
17
+ */
18
+ export function resolveRetentionDays(seed, globalRetentionDays) {
19
+ return typeof seed.retentionDays === 'number' ? seed.retentionDays : globalRetentionDays;
20
+ }
@@ -5,8 +5,15 @@
5
5
  /**
6
6
  * Converte una stringa in uno slug URL-safe.
7
7
  * Limita la lunghezza a 15 caratteri come richiesto.
8
+ * Never emits `_`, so a live slug can never carry `TRASHED_SLUG_INFIX`.
8
9
  */
9
10
  export declare function slugify(value: string): string;
11
+ /** Separator between an entry's slug and its deletion timestamp while it sits in the Trash. */
12
+ export declare const TRASHED_SLUG_INFIX = "_old_";
13
+ /** `<slug>_old_<deletedAtMs>`, lower-cased. Frees the slug for reuse under any UNIQUE constraint. */
14
+ export declare function toTrashedSlug(slug: string, deletedAtMs: number): string;
15
+ /** Inverse of toTrashedSlug: strips a trailing `_old_<digits>`; returns the input unchanged when absent. */
16
+ export declare function fromTrashedSlug(slug: string): string;
10
17
  /**
11
18
  * Genera uno slug da un input (es. titolo o nome) o un fallback UUID.
12
19
  */
@@ -1 +1 @@
1
- {"version":3,"file":"slug-utils.d.ts","sourceRoot":"","sources":["../../src/content/slug-utils.ts"],"names":[],"mappings":"AAGA;;;GAGG;AAEH;;;GAGG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAU7C;AAGD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CASnG"}
1
+ {"version":3,"file":"slug-utils.d.ts","sourceRoot":"","sources":["../../src/content/slug-utils.ts"],"names":[],"mappings":"AAGA;;;GAGG;AAEH;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAU7C;AAED,+FAA+F;AAC/F,eAAO,MAAM,kBAAkB,UAAU,CAAA;AAIzC,qGAAqG;AACrG,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED,4GAA4G;AAC5G,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CASnG"}
@@ -7,6 +7,7 @@
7
7
  /**
8
8
  * Converte una stringa in uno slug URL-safe.
9
9
  * Limita la lunghezza a 15 caratteri come richiesto.
10
+ * Never emits `_`, so a live slug can never carry `TRASHED_SLUG_INFIX`.
10
11
  */
11
12
  export function slugify(value) {
12
13
  return value
@@ -19,6 +20,17 @@ export function slugify(value) {
19
20
  .slice(0, 15) // Limita a 15 caratteri
20
21
  .replace(/-+$/g, ''); // Rimuove trattini rimasti alla fine dopo il taglio
21
22
  }
23
+ /** Separator between an entry's slug and its deletion timestamp while it sits in the Trash. */
24
+ export const TRASHED_SLUG_INFIX = '_old_';
25
+ const TRASHED_SLUG_SUFFIX = new RegExp(`${TRASHED_SLUG_INFIX}\\d+$`);
26
+ /** `<slug>_old_<deletedAtMs>`, lower-cased. Frees the slug for reuse under any UNIQUE constraint. */
27
+ export function toTrashedSlug(slug, deletedAtMs) {
28
+ return `${slug.toLowerCase()}${TRASHED_SLUG_INFIX}${deletedAtMs}`;
29
+ }
30
+ /** Inverse of toTrashedSlug: strips a trailing `_old_<digits>`; returns the input unchanged when absent. */
31
+ export function fromTrashedSlug(slug) {
32
+ return slug.replace(TRASHED_SLUG_SUFFIX, '');
33
+ }
22
34
  /**
23
35
  * Genera uno slug da un input (es. titolo o nome) o un fallback UUID.
24
36
  */
@@ -0,0 +1,9 @@
1
+ import type { Seed } from './types.js';
2
+ export interface IContentScanRepository {
3
+ /**
4
+ * Scans across all registered seeds to identify media keys that are currently referenced
5
+ * by any content entry. Used for orphaned media detection and storage analytics.
6
+ */
7
+ getReferencedMediaKeys(seeds: Seed[]): Promise<Set<string>>;
8
+ }
9
+ //# sourceMappingURL=content-scan.repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-scan.repository.d.ts","sourceRoot":"","sources":["../src/content-scan.repository.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEtC,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,sBAAsB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;CAC5D"}
@@ -0,0 +1,3 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright (c) 2024–2026 Flavio De Musso
3
+ export {};