@beechcms/core 0.8.0 → 0.9.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.
- package/dist/auth/account-email.d.ts +3 -0
- package/dist/auth/account-email.d.ts.map +1 -0
- package/dist/auth/account-email.js +9 -0
- package/dist/auth/password-reset-token.repository.d.ts +13 -2
- package/dist/auth/password-reset-token.repository.d.ts.map +1 -1
- package/dist/auth/user.repository.d.ts +69 -4
- package/dist/auth/user.repository.d.ts.map +1 -1
- package/dist/automations-grammar-words.d.ts +2 -0
- package/dist/automations-grammar-words.d.ts.map +1 -0
- package/dist/automations-grammar-words.js +8 -0
- package/dist/automations.repository.interface.d.ts +19 -0
- package/dist/automations.repository.interface.d.ts.map +1 -0
- package/dist/automations.repository.interface.js +3 -0
- package/dist/automations.runner.interface.d.ts +10 -0
- package/dist/automations.runner.interface.d.ts.map +1 -0
- package/dist/automations.runner.interface.js +3 -0
- package/dist/automations.runner.stub.d.ts +5 -0
- package/dist/automations.runner.stub.d.ts.map +1 -0
- package/dist/automations.runner.stub.js +7 -0
- package/dist/automations.types.d.ts +75 -0
- package/dist/automations.types.d.ts.map +1 -0
- package/dist/automations.types.js +3 -0
- package/dist/clock.d.ts +25 -0
- package/dist/clock.d.ts.map +1 -0
- package/dist/clock.js +11 -0
- package/dist/common/canonical-json.d.ts +31 -0
- package/dist/common/canonical-json.d.ts.map +1 -0
- package/dist/common/canonical-json.js +91 -0
- package/dist/content/content-scan.repository.d.ts +1 -1
- package/dist/content/content.repository.d.ts +154 -3
- package/dist/content/content.repository.d.ts.map +1 -1
- package/dist/content/content.repository.js +62 -0
- package/dist/content/deletion-ledger.d.ts +39 -0
- package/dist/content/deletion-ledger.d.ts.map +1 -0
- package/dist/content/deletion-ledger.js +3 -0
- package/dist/content/seed-media-purge.repository.d.ts +34 -0
- package/dist/content/seed-media-purge.repository.d.ts.map +1 -0
- package/dist/content/seed-media-purge.repository.js +3 -0
- package/dist/content/seed.repository.d.ts +14 -0
- package/dist/content/seed.repository.d.ts.map +1 -1
- package/dist/content-scan.repository.d.ts +9 -0
- package/dist/content-scan.repository.d.ts.map +1 -0
- package/dist/content-scan.repository.js +3 -0
- package/dist/content.repository.d.ts +247 -0
- package/dist/content.repository.d.ts.map +1 -0
- package/dist/content.repository.js +59 -0
- package/dist/dashboard-layout/content-view.d.ts +757 -0
- package/dist/dashboard-layout/content-view.d.ts.map +1 -0
- package/dist/dashboard-layout/content-view.js +285 -0
- package/dist/dashboard-layout/content-view.repository.d.ts +39 -0
- package/dist/dashboard-layout/content-view.repository.d.ts.map +1 -0
- package/dist/dashboard-layout/content-view.repository.js +3 -0
- package/dist/dashboard-layout/dashboard-layout.d.ts +5 -0
- package/dist/dashboard-layout/dashboard-layout.d.ts.map +1 -1
- package/dist/dashboard-layout/dashboard-layout.js +17 -9
- package/dist/dashboard-layout/kanban/kanban.d.ts +32 -18
- package/dist/dashboard-layout/kanban/kanban.d.ts.map +1 -1
- package/dist/dashboard-layout/kanban/kanban.js +45 -21
- package/dist/dashboard-layout/seed-layout.d.ts +22 -31
- package/dist/dashboard-layout/seed-layout.d.ts.map +1 -1
- package/dist/dashboard-layout/seed-layout.js +93 -18
- package/dist/dashboard-layout/seed-layout.repository.d.ts +1 -5
- package/dist/dashboard-layout/seed-layout.repository.d.ts.map +1 -1
- package/dist/dashboard-layout.d.ts +154 -0
- package/dist/dashboard-layout.d.ts.map +1 -0
- package/dist/dashboard-layout.js +186 -0
- package/dist/dashboard-layout.repository.d.ts +18 -0
- package/dist/dashboard-layout.repository.d.ts.map +1 -0
- package/dist/dashboard-layout.repository.js +3 -0
- package/dist/dashboard-permissions.d.ts +3 -0
- package/dist/dashboard-permissions.d.ts.map +1 -0
- package/dist/dashboard-permissions.js +11 -0
- package/dist/dashboard-scopes.d.ts +12 -0
- package/dist/dashboard-scopes.d.ts.map +1 -0
- package/dist/dashboard-scopes.js +30 -0
- package/dist/define-seed.d.ts +3 -0
- package/dist/define-seed.d.ts.map +1 -0
- package/dist/define-seed.js +5 -0
- package/dist/demo-data.repository.d.ts +5 -0
- package/dist/demo-data.repository.d.ts.map +1 -0
- package/dist/demo-data.repository.js +3 -0
- package/dist/email.provider.d.ts +32 -0
- package/dist/email.provider.d.ts.map +1 -0
- package/dist/email.provider.js +4 -0
- package/dist/engine/ddl/ddl.d.ts +247 -0
- package/dist/engine/ddl/ddl.d.ts.map +1 -0
- package/dist/engine/ddl/ddl.js +653 -0
- package/dist/engine/ddl/schema-mutator.d.ts +29 -0
- package/dist/engine/ddl/schema-mutator.d.ts.map +1 -0
- package/dist/engine/ddl/schema-mutator.js +3 -0
- package/dist/engine/ddl/seed-ddl-destructive.d.ts +40 -0
- package/dist/engine/ddl/seed-ddl-destructive.d.ts.map +1 -0
- package/dist/engine/ddl/seed-ddl-destructive.js +149 -0
- package/dist/engine/ddl/seed-ddl.d.ts +43 -0
- package/dist/engine/ddl/seed-ddl.d.ts.map +1 -0
- package/dist/engine/ddl/seed-ddl.js +115 -0
- package/dist/engine/ddl/seed-purge-guards.d.ts +7 -0
- package/dist/engine/ddl/seed-purge-guards.d.ts.map +1 -0
- package/dist/engine/ddl/seed-purge-guards.js +19 -0
- package/dist/engine/engine.d.ts +4 -3
- package/dist/engine/engine.d.ts.map +1 -1
- package/dist/engine/engine.js +4 -3
- package/dist/engine/introspection/introspection.d.ts +101 -0
- package/dist/engine/introspection/introspection.d.ts.map +1 -0
- package/dist/engine/introspection/introspection.js +127 -0
- package/dist/engine/introspection/relation-audit.d.ts +46 -0
- package/dist/engine/introspection/relation-audit.d.ts.map +1 -0
- package/dist/engine/introspection/relation-audit.js +103 -0
- package/dist/engine/introspection/schema-fingerprint.d.ts +74 -0
- package/dist/engine/introspection/schema-fingerprint.d.ts.map +1 -0
- package/dist/engine/introspection/schema-fingerprint.js +102 -0
- package/dist/engine/introspection.d.ts +101 -0
- package/dist/engine/introspection.d.ts.map +1 -0
- package/dist/engine/introspection.js +127 -0
- package/dist/engine/localization/localization.d.ts +127 -0
- package/dist/engine/localization/localization.d.ts.map +1 -0
- package/dist/engine/localization/localization.js +212 -0
- package/dist/engine/localization.d.ts +127 -0
- package/dist/engine/localization.d.ts.map +1 -0
- package/dist/engine/localization.js +212 -0
- package/dist/engine/privacy/policies.d.ts +58 -0
- package/dist/engine/privacy/policies.d.ts.map +1 -0
- package/dist/engine/privacy/policies.js +191 -0
- package/dist/engine/privacy/privacy.service.d.ts +78 -0
- package/dist/engine/privacy/privacy.service.d.ts.map +1 -0
- package/dist/engine/privacy/privacy.service.js +138 -0
- package/dist/engine/privacy.service.d.ts.map +1 -1
- package/dist/engine/query/active-clause.d.ts +19 -0
- package/dist/engine/query/active-clause.d.ts.map +1 -0
- package/dist/engine/query/active-clause.js +27 -0
- package/dist/engine/query/query.d.ts +36 -0
- package/dist/engine/query/query.d.ts.map +1 -0
- package/dist/engine/query/query.js +393 -0
- package/dist/engine/query/relations.d.ts +28 -0
- package/dist/engine/query/relations.d.ts.map +1 -0
- package/dist/engine/query/relations.js +25 -0
- package/dist/engine/query/serialize.d.ts +22 -0
- package/dist/engine/query/serialize.d.ts.map +1 -0
- package/dist/engine/query/serialize.js +175 -0
- package/dist/engine/schema-fingerprint.d.ts +73 -0
- package/dist/engine/schema-fingerprint.d.ts.map +1 -0
- package/dist/engine/schema-fingerprint.js +97 -0
- package/dist/engine/seed-registry.d.ts.map +1 -1
- package/dist/engine/seeds/candidate-ids.d.ts +14 -0
- package/dist/engine/seeds/candidate-ids.d.ts.map +1 -0
- package/dist/engine/seeds/candidate-ids.js +40 -0
- package/dist/engine/seeds/define-seed.d.ts +3 -0
- package/dist/engine/seeds/define-seed.d.ts.map +1 -0
- package/dist/engine/seeds/define-seed.js +5 -0
- package/dist/engine/seeds/seed-definition-diff.d.ts +38 -0
- package/dist/engine/seeds/seed-definition-diff.d.ts.map +1 -0
- package/dist/engine/seeds/seed-definition-diff.js +51 -0
- package/dist/engine/seeds/seed-registry.d.ts +88 -0
- package/dist/engine/seeds/seed-registry.d.ts.map +1 -0
- package/dist/engine/seeds/seed-registry.js +194 -0
- package/dist/engine/seeds/seed-types-generator.d.ts +25 -0
- package/dist/engine/seeds/seed-types-generator.d.ts.map +1 -0
- package/dist/engine/seeds/seed-types-generator.js +116 -0
- package/dist/engine/seeds/seed-validation.d.ts +35 -0
- package/dist/engine/seeds/seed-validation.d.ts.map +1 -0
- package/dist/engine/seeds/seed-validation.js +384 -0
- package/dist/engine/seeds/seeds.d.ts +20 -0
- package/dist/engine/seeds/seeds.d.ts.map +1 -0
- package/dist/engine/seeds/seeds.js +21 -0
- package/dist/engine/seeds/tag-migration.d.ts +73 -0
- package/dist/engine/seeds/tag-migration.d.ts.map +1 -0
- package/dist/engine/seeds/tag-migration.js +212 -0
- package/dist/engine/seeds/tag-options.d.ts +15 -0
- package/dist/engine/seeds/tag-options.d.ts.map +1 -0
- package/dist/engine/seeds/tag-options.js +111 -0
- package/dist/engine/seeds/tag-value.d.ts +31 -0
- package/dist/engine/seeds/tag-value.d.ts.map +1 -0
- package/dist/engine/seeds/tag-value.js +51 -0
- package/dist/engine/types.d.ts +59 -7
- package/dist/engine/types.d.ts.map +1 -1
- package/dist/engine/validation/cache.d.ts.map +1 -1
- package/dist/engine/validation/cache.js +20 -4
- package/dist/engine/validation/emptiness.d.ts +12 -0
- package/dist/engine/validation/emptiness.d.ts.map +1 -0
- package/dist/engine/validation/emptiness.js +33 -0
- package/dist/engine/validation/index.d.ts +11 -0
- package/dist/engine/validation/index.d.ts.map +1 -1
- package/dist/engine/validation/index.js +29 -33
- package/dist/engine/validation/primitives.d.ts +12 -0
- package/dist/engine/validation/primitives.d.ts.map +1 -1
- package/dist/engine/validation/primitives.js +22 -0
- package/dist/engine/validation/richtext-sanitizer.d.ts +9 -1
- package/dist/engine/validation/richtext-sanitizer.d.ts.map +1 -1
- package/dist/engine/validation/richtext-sanitizer.js +36 -7
- package/dist/engine/validation/schema-builders.d.ts +16 -0
- package/dist/engine/validation/schema-builders.d.ts.map +1 -1
- package/dist/engine/validation/schema-builders.js +125 -18
- package/dist/engine.d.ts +144 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +741 -0
- package/dist/file-types.d.ts +13 -0
- package/dist/file-types.d.ts.map +1 -0
- package/dist/file-types.js +85 -0
- package/dist/hooks.d.ts +29 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +3 -0
- package/dist/id-generator.d.ts +26 -0
- package/dist/id-generator.d.ts.map +1 -0
- package/dist/id-generator.js +12 -0
- package/dist/idempotency.repository.d.ts +13 -0
- package/dist/idempotency.repository.d.ts.map +1 -0
- package/dist/idempotency.repository.js +3 -0
- package/dist/index.d.ts +34 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -11
- package/dist/kanban-position.repository.d.ts +19 -0
- package/dist/kanban-position.repository.d.ts.map +1 -0
- package/dist/kanban-position.repository.js +3 -0
- package/dist/kanban.d.ts +75 -0
- package/dist/kanban.d.ts.map +1 -0
- package/dist/kanban.js +82 -0
- package/dist/layout-permissions.d.ts +3 -0
- package/dist/layout-permissions.d.ts.map +1 -0
- package/dist/layout-permissions.js +11 -0
- package/dist/media/file-types.d.ts +12 -0
- package/dist/media/file-types.d.ts.map +1 -1
- package/dist/media/file-types.js +24 -4
- package/dist/media/image-transformer.d.ts +34 -0
- package/dist/media/image-transformer.d.ts.map +1 -0
- package/dist/media/image-transformer.js +3 -0
- package/dist/media/magic-bytes.d.ts.map +1 -1
- package/dist/media/magic-bytes.js +19 -9
- package/dist/media/media-transform.d.ts +92 -0
- package/dist/media/media-transform.d.ts.map +1 -0
- package/dist/media/media-transform.js +197 -0
- package/dist/media/media.repository.d.ts +5 -0
- package/dist/media/media.repository.d.ts.map +1 -1
- package/dist/media.repository.d.ts +61 -0
- package/dist/media.repository.d.ts.map +1 -0
- package/dist/media.repository.js +3 -0
- package/dist/notifications/notification.repository.d.ts +11 -2
- package/dist/notifications/notification.repository.d.ts.map +1 -1
- package/dist/oauth/authorization-code.repository.d.ts +10 -5
- package/dist/oauth/authorization-code.repository.d.ts.map +1 -1
- package/dist/oauth/role-guard.d.ts +30 -11
- package/dist/oauth/role-guard.d.ts.map +1 -1
- package/dist/oauth/role-guard.js +27 -5
- package/dist/oauth/token.repository.d.ts +2 -0
- package/dist/oauth/token.repository.d.ts.map +1 -1
- package/dist/policies.d.ts +10 -0
- package/dist/policies.d.ts.map +1 -0
- package/dist/policies.js +33 -0
- package/dist/queue/queue.interface.d.ts +9 -1
- package/dist/queue/queue.interface.d.ts.map +1 -1
- package/dist/queue/queue.stub.d.ts +1 -1
- package/dist/queue/queue.stub.d.ts.map +1 -1
- package/dist/queue/queue.stub.js +2 -3
- package/dist/queue.interface.d.ts +39 -0
- package/dist/queue.interface.d.ts.map +1 -0
- package/dist/queue.interface.js +3 -0
- package/dist/queue.stub.d.ts +6 -0
- package/dist/queue.stub.d.ts.map +1 -0
- package/dist/queue.stub.js +8 -0
- package/dist/rate-limit/token-bucket-rate-limiter.d.ts +7 -0
- package/dist/rate-limit/token-bucket-rate-limiter.d.ts.map +1 -1
- package/dist/rate-limit/token-bucket-rate-limiter.js +66 -0
- package/dist/rbac/evaluate.d.ts +57 -0
- package/dist/rbac/evaluate.d.ts.map +1 -0
- package/dist/rbac/evaluate.js +113 -0
- package/dist/rbac/invitation.repository.d.ts +84 -0
- package/dist/rbac/invitation.repository.d.ts.map +1 -0
- package/dist/rbac/invitation.repository.js +3 -0
- package/dist/rbac/permissions.d.ts +39 -0
- package/dist/rbac/permissions.d.ts.map +1 -0
- package/dist/rbac/permissions.js +43 -0
- package/dist/rbac/types.d.ts +130 -0
- package/dist/rbac/types.d.ts.map +1 -0
- package/dist/rbac/types.js +4 -0
- package/dist/relations.d.ts +28 -0
- package/dist/relations.d.ts.map +1 -0
- package/dist/relations.js +25 -0
- package/dist/richtext-render.d.ts +11 -0
- package/dist/richtext-render.d.ts.map +1 -0
- package/dist/richtext-render.js +87 -0
- package/dist/richtext.d.ts +11 -0
- package/dist/richtext.d.ts.map +1 -0
- package/dist/richtext.js +13 -0
- package/dist/scheduler.interface.d.ts +4 -0
- package/dist/scheduler.interface.d.ts.map +1 -0
- package/dist/scheduler.interface.js +3 -0
- package/dist/scheduler.stub.d.ts +5 -0
- package/dist/scheduler.stub.d.ts.map +1 -0
- package/dist/scheduler.stub.js +7 -0
- package/dist/schema/canonical.d.ts +15 -0
- package/dist/schema/canonical.d.ts.map +1 -0
- package/dist/schema/canonical.js +37 -0
- package/dist/schema/define.d.ts +42 -0
- package/dist/schema/define.d.ts.map +1 -0
- package/dist/schema/define.js +56 -0
- package/dist/schema/emit.d.ts +14 -0
- package/dist/schema/emit.d.ts.map +1 -0
- package/dist/schema/emit.js +43 -0
- package/dist/schema/index.d.ts +12 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +13 -0
- package/dist/schema/manifest-seeds.d.ts +12 -0
- package/dist/schema/manifest-seeds.d.ts.map +1 -0
- package/dist/schema/manifest-seeds.js +48 -0
- package/dist/schema/manifest-validation.d.ts +13 -0
- package/dist/schema/manifest-validation.d.ts.map +1 -0
- package/dist/schema/manifest-validation.js +41 -0
- package/dist/schema/manifest.types.d.ts +54 -0
- package/dist/schema/manifest.types.d.ts.map +1 -0
- package/dist/schema/manifest.types.js +7 -0
- package/dist/schema-mutator.d.ts +26 -0
- package/dist/schema-mutator.d.ts.map +1 -0
- package/dist/schema-mutator.js +3 -0
- package/dist/search/search.repository.d.ts +5 -4
- package/dist/search/search.repository.d.ts.map +1 -1
- package/dist/search/vector-extractor.d.ts.map +1 -1
- package/dist/search/vector-extractor.js +23 -2
- package/dist/search/vector.repository.d.ts +2 -1
- package/dist/search/vector.repository.d.ts.map +1 -1
- package/dist/security/time-trap-token.repository.d.ts +5 -3
- package/dist/security/time-trap-token.repository.d.ts.map +1 -1
- package/dist/seed-ddl-destructive.d.ts +40 -0
- package/dist/seed-ddl-destructive.d.ts.map +1 -0
- package/dist/seed-ddl-destructive.js +149 -0
- package/dist/seed-ddl.d.ts +40 -0
- package/dist/seed-ddl.d.ts.map +1 -0
- package/dist/seed-ddl.js +100 -0
- package/dist/seed-layout.d.ts +145 -0
- package/dist/seed-layout.d.ts.map +1 -0
- package/dist/seed-layout.js +192 -0
- package/dist/seed-layout.repository.d.ts +22 -0
- package/dist/seed-layout.repository.d.ts.map +1 -0
- package/dist/seed-layout.repository.js +3 -0
- package/dist/seed-registry.d.ts +71 -0
- package/dist/seed-registry.d.ts.map +1 -0
- package/dist/seed-registry.js +143 -0
- package/dist/seed-types-generator.d.ts +1 -1
- package/dist/seed-types-generator.d.ts.map +1 -1
- package/dist/seed-validation.d.ts +23 -0
- package/dist/seed-validation.d.ts.map +1 -0
- package/dist/seed-validation.js +224 -0
- package/dist/seed.repository.d.ts +37 -0
- package/dist/seed.repository.d.ts.map +1 -0
- package/dist/seed.repository.js +3 -0
- package/dist/seeds.d.ts +20 -0
- package/dist/seeds.d.ts.map +1 -0
- package/dist/seeds.js +21 -0
- package/dist/settings/site-settings.repository.d.ts +8 -0
- package/dist/settings/site-settings.repository.d.ts.map +1 -1
- package/dist/site-settings.repository.d.ts +16 -0
- package/dist/site-settings.repository.d.ts.map +1 -0
- package/dist/site-settings.repository.js +3 -0
- package/dist/slug-utils.d.ts +18 -0
- package/dist/slug-utils.d.ts.map +1 -0
- package/dist/slug-utils.js +32 -0
- package/dist/storage.d.ts +46 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +3 -0
- package/dist/transfer/csv.d.ts +34 -0
- package/dist/transfer/csv.d.ts.map +1 -0
- package/dist/transfer/csv.js +135 -0
- package/dist/transfer/flat-seed.d.ts +13 -0
- package/dist/transfer/flat-seed.d.ts.map +1 -0
- package/dist/transfer/flat-seed.js +50 -0
- package/dist/transfer/index.d.ts +7 -0
- package/dist/transfer/index.d.ts.map +1 -0
- package/dist/transfer/index.js +8 -0
- package/dist/transfer/ndjson.d.ts +25 -0
- package/dist/transfer/ndjson.d.ts.map +1 -0
- package/dist/transfer/ndjson.js +62 -0
- package/dist/transfer/row-mapping.d.ts +36 -0
- package/dist/transfer/row-mapping.d.ts.map +1 -0
- package/dist/transfer/row-mapping.js +97 -0
- package/dist/transfer/transfer.constants.d.ts +20 -0
- package/dist/transfer/transfer.constants.d.ts.map +1 -0
- package/dist/transfer/transfer.constants.js +21 -0
- package/dist/transfer/transfer.types.d.ts +46 -0
- package/dist/transfer/transfer.types.d.ts.map +1 -0
- package/dist/transfer/transfer.types.js +6 -0
- package/dist/types.d.ts +243 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/validation.d.ts +50 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +660 -0
- package/dist/webhook-validation.d.ts +3 -0
- package/dist/webhook-validation.d.ts.map +1 -0
- package/dist/webhook-validation.js +6 -0
- package/package.json +11 -6
- package/dist/.tsbuildinfo +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Seed, SelectOptions } from '../engine/types.js';
|
|
1
|
+
import { Seed, SelectOptions, TrashedMode } from '../engine/types.js';
|
|
2
2
|
/**
|
|
3
3
|
* One row of the cross-seed pending-drafts overview. Aggregates the minimum a
|
|
4
4
|
* reviewer needs to triage a draft without opening it: which seed it belongs to,
|
|
@@ -62,6 +62,59 @@ export declare class HookValidationError extends RepositoryError {
|
|
|
62
62
|
message: string;
|
|
63
63
|
}>);
|
|
64
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Thrown by `publishDraft` when the live entry was written after the draft captured its
|
|
67
|
+
* `live_snapshot_at`. Publishing would overwrite that write, so the repository refuses and the
|
|
68
|
+
* caller must discard the draft or re-create it from the current live version.
|
|
69
|
+
* Mapped to 409 Conflict by the API problem-mapper.
|
|
70
|
+
*/
|
|
71
|
+
export declare class DraftConflictError extends RepositoryError {
|
|
72
|
+
readonly seedSlug: string;
|
|
73
|
+
readonly entryId: string;
|
|
74
|
+
readonly snapshotAt: number | null;
|
|
75
|
+
readonly liveUpdatedAt: number;
|
|
76
|
+
constructor(params: {
|
|
77
|
+
seedSlug: string;
|
|
78
|
+
entryId: string;
|
|
79
|
+
snapshotAt: number | null;
|
|
80
|
+
liveUpdatedAt: number;
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Thrown by `update` when the caller supplied `options.ifMatch` and the live row's
|
|
85
|
+
* `updated_at` no longer matches it — another writer committed in between.
|
|
86
|
+
* Mapped to 409 Conflict by the API problem-mapper.
|
|
87
|
+
*/
|
|
88
|
+
export declare class EntryConflictError extends RepositoryError {
|
|
89
|
+
readonly seedSlug: string;
|
|
90
|
+
readonly entryId: string;
|
|
91
|
+
readonly expectedUpdatedAt: number;
|
|
92
|
+
readonly actualUpdatedAt: number;
|
|
93
|
+
constructor(params: {
|
|
94
|
+
seedSlug: string;
|
|
95
|
+
entryId: string;
|
|
96
|
+
expectedUpdatedAt: number;
|
|
97
|
+
actualUpdatedAt: number;
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Thrown by `saveDraft` when the caller supplied `options.ifMatch` and the pending draft
|
|
102
|
+
* row's `updated_at` no longer matches it — another writer saved a draft in between, and
|
|
103
|
+
* blindly merging on top of it would silently drop that writer's fields.
|
|
104
|
+
* Mapped to 409 Conflict by the API problem-mapper.
|
|
105
|
+
*/
|
|
106
|
+
export declare class DraftSaveConflictError extends RepositoryError {
|
|
107
|
+
readonly seedSlug: string;
|
|
108
|
+
readonly entryId: string;
|
|
109
|
+
readonly expectedUpdatedAt: number;
|
|
110
|
+
readonly actualUpdatedAt: number;
|
|
111
|
+
constructor(params: {
|
|
112
|
+
seedSlug: string;
|
|
113
|
+
entryId: string;
|
|
114
|
+
expectedUpdatedAt: number;
|
|
115
|
+
actualUpdatedAt: number;
|
|
116
|
+
});
|
|
117
|
+
}
|
|
65
118
|
export type BulkFieldUpdate = {
|
|
66
119
|
kind: 'set';
|
|
67
120
|
value: unknown;
|
|
@@ -85,6 +138,12 @@ export interface RepositoryOptions {
|
|
|
85
138
|
role?: string;
|
|
86
139
|
email?: string;
|
|
87
140
|
};
|
|
141
|
+
/**
|
|
142
|
+
* Optimistic concurrency guard for `update`: the `updated_at` the caller last read.
|
|
143
|
+
* When set, the write only applies if the live row's `updated_at` still matches;
|
|
144
|
+
* otherwise `update` throws {@link EntryConflictError}.
|
|
145
|
+
*/
|
|
146
|
+
ifMatch?: number;
|
|
88
147
|
}
|
|
89
148
|
/**
|
|
90
149
|
* Declarative multi-write operation translated into a single `db.batch` call.
|
|
@@ -121,6 +180,21 @@ export type BatchWrite = {
|
|
|
121
180
|
max?: number;
|
|
122
181
|
};
|
|
123
182
|
};
|
|
183
|
+
/** Everything a purge caller needs to finish cleanup outside the database. */
|
|
184
|
+
export interface PurgeResult {
|
|
185
|
+
/** The row as it existed immediately before erasure — the source of the R2 media keys. */
|
|
186
|
+
row: Record<string, any>;
|
|
187
|
+
/** True when a ledger event was appended. False only for a seed without `softDelete`. */
|
|
188
|
+
ledgerWritten: boolean;
|
|
189
|
+
}
|
|
190
|
+
/** Per-id outcome of a bulk trash operation, mirroring `bulkUpdate`'s shape. */
|
|
191
|
+
export interface BulkDeleteResult {
|
|
192
|
+
succeeded: string[];
|
|
193
|
+
failed: Array<{
|
|
194
|
+
id: string;
|
|
195
|
+
reason: string;
|
|
196
|
+
}>;
|
|
197
|
+
}
|
|
124
198
|
/**
|
|
125
199
|
* Interface defining the standard operations for content persistence.
|
|
126
200
|
* This is platform-agnostic and should be implemented for specific databases (e.g., D1).
|
|
@@ -135,14 +209,28 @@ export interface ContentRepository {
|
|
|
135
209
|
}>;
|
|
136
210
|
/**
|
|
137
211
|
* Finds a single entry by its unique ID.
|
|
212
|
+
* Trashed rows are invisible unless `options.trashed` says otherwise.
|
|
138
213
|
* Throws EntryNotFoundError if not found.
|
|
139
214
|
*/
|
|
140
|
-
findById(seed: Seed, id: string
|
|
215
|
+
findById(seed: Seed, id: string, options?: {
|
|
216
|
+
trashed?: TrashedMode;
|
|
217
|
+
}): Promise<Record<string, any>>;
|
|
141
218
|
/**
|
|
142
219
|
* Finds a single entry by its unique slug.
|
|
143
220
|
* Throws EntryNotFoundError if not found.
|
|
144
221
|
*/
|
|
145
222
|
findBySlug(seed: Seed, slug: string): Promise<Record<string, any>>;
|
|
223
|
+
/**
|
|
224
|
+
* Resolves the parent entry ids that reference any of `targetIds` through a MULTI relation
|
|
225
|
+
* branch (junction table). Single-value relations need no lookup — their target id lives in a
|
|
226
|
+
* column on the parent row and is filterable directly.
|
|
227
|
+
*
|
|
228
|
+
* Returns at most `limit` distinct parent ids, in no guaranteed order. Callers that must
|
|
229
|
+
* distinguish "complete" from "truncated" pass `limit = cap + 1` and compare the length.
|
|
230
|
+
*
|
|
231
|
+
* @throws RepositoryError if `branchAlias` is not a `multiple: true` relation branch of `seed`.
|
|
232
|
+
*/
|
|
233
|
+
findParentIdsByRelation(seed: Seed, branchAlias: string, targetIds: string[], limit: number): Promise<string[]>;
|
|
146
234
|
/**
|
|
147
235
|
* Computes facets (status counts and distinct tags) for a content type.
|
|
148
236
|
*/
|
|
@@ -158,6 +246,7 @@ export interface ContentRepository {
|
|
|
158
246
|
/**
|
|
159
247
|
* Partially updates an existing entry in the live table.
|
|
160
248
|
* Throws EntryNotFoundError if the ID does not exist.
|
|
249
|
+
* Throws EntryConflictError if `options.ifMatch` is set and no longer matches the live row's `updated_at`.
|
|
161
250
|
*/
|
|
162
251
|
update(seed: Seed, id: string, data: Record<string, any>, status?: string, options?: RepositoryOptions): Promise<void>;
|
|
163
252
|
/**
|
|
@@ -187,9 +276,17 @@ export interface ContentRepository {
|
|
|
187
276
|
/**
|
|
188
277
|
* Atomically applies an axis-value patch AND a kanban_positions upsert in one DB batch (KB-S04e).
|
|
189
278
|
* `patch` is null for same-column reorders (position only).
|
|
279
|
+
*
|
|
280
|
+
* @param ctx.ifMatch Optimistic concurrency guard for the axis-value patch: the `updated_at`
|
|
281
|
+
* the caller last read. When set and `patch` is non-null, the write only applies if the live
|
|
282
|
+
* row's `updated_at` still matches; otherwise throws {@link EntryConflictError}. Ignored when
|
|
283
|
+
* `patch` is null, since a position-only reorder does not read-modify-write column data.
|
|
284
|
+
* @throws EntryConflictError if `ctx.ifMatch` is set, `patch` is non-null, and the live row's
|
|
285
|
+
* `updated_at` no longer matches it.
|
|
190
286
|
*/
|
|
191
287
|
updateWithKanbanPosition(seed: Seed, id: string, patch: Record<string, unknown> | null, position: string, axisBranchId: string, ctx: {
|
|
192
288
|
actor: string;
|
|
289
|
+
ifMatch?: number;
|
|
193
290
|
}): Promise<{
|
|
194
291
|
success: boolean;
|
|
195
292
|
}>;
|
|
@@ -200,13 +297,21 @@ export interface ContentRepository {
|
|
|
200
297
|
runBatch(operations: BatchWrite[]): Promise<void>;
|
|
201
298
|
/**
|
|
202
299
|
* Saves or updates a pending draft in the mirror table.
|
|
300
|
+
* Throws DraftSaveConflictError if `options.ifMatch` is set and no longer matches the
|
|
301
|
+
* pending draft row's `updated_at`.
|
|
203
302
|
*/
|
|
204
|
-
saveDraft(seed: Seed, entryId: string, data: Record<string, any
|
|
303
|
+
saveDraft(seed: Seed, entryId: string, data: Record<string, any>, options?: RepositoryOptions): Promise<void>;
|
|
205
304
|
/**
|
|
206
305
|
* Retrieves the pending draft for a given entry.
|
|
207
306
|
* Returns null if no draft exists.
|
|
208
307
|
*/
|
|
209
308
|
getDraft(seed: Seed, entryId: string): Promise<Record<string, any> | null>;
|
|
309
|
+
/**
|
|
310
|
+
* Retrieves the pending draft row's `updated_at`, for use as an optimistic-concurrency
|
|
311
|
+
* guard by callers that read the draft before merging into it.
|
|
312
|
+
* Returns null if no draft exists (or drafts are disallowed for the seed).
|
|
313
|
+
*/
|
|
314
|
+
getDraftUpdatedAt(seed: Seed, entryId: string): Promise<number | null>;
|
|
210
315
|
/**
|
|
211
316
|
* Atomic promotion of a draft to the live table.
|
|
212
317
|
* Must use a transaction (db.batch) to update live and delete draft.
|
|
@@ -243,5 +348,51 @@ export interface ContentRepository {
|
|
|
243
348
|
reason: string;
|
|
244
349
|
}>;
|
|
245
350
|
}>;
|
|
351
|
+
/**
|
|
352
|
+
* Reversible delete: stamps `deleted_at` and returns the row as it was.
|
|
353
|
+
* Runs `beforeDelete`/`afterDelete`, exactly like `delete`.
|
|
354
|
+
* Leaves junction rows, `_drafts` rows and R2 media untouched — a trashed entry must be
|
|
355
|
+
* restorable whole.
|
|
356
|
+
* @throws RepositoryError if `seed.softDelete` is not true.
|
|
357
|
+
* @throws EntryNotFoundError if no live row with `id` exists.
|
|
358
|
+
*/
|
|
359
|
+
softDelete(seed: Seed, id: string, options?: RepositoryOptions): Promise<{
|
|
360
|
+
row: Record<string, any>;
|
|
361
|
+
}>;
|
|
362
|
+
/**
|
|
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).
|
|
366
|
+
* @returns The restored row, carrying the slug it actually ended up with.
|
|
367
|
+
* @throws EntryNotFoundError if no TRASHED row with `id` exists.
|
|
368
|
+
*/
|
|
369
|
+
restore(seed: Seed, id: string, options?: RepositoryOptions): Promise<{
|
|
370
|
+
row: Record<string, any>;
|
|
371
|
+
}>;
|
|
372
|
+
/**
|
|
373
|
+
* Irreversible erasure: runs `beforeDelete`, reads the row, deletes it (junction and
|
|
374
|
+
* `_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
|
+
* R2 media deletion is NOT performed here — the caller owns it (VSA: no external I/O in the
|
|
377
|
+
* repository beyond the ledger port).
|
|
378
|
+
* @throws EntryNotFoundError if no row with `id` exists.
|
|
379
|
+
*/
|
|
380
|
+
purge(seed: Seed, id: string, options?: RepositoryOptions): Promise<PurgeResult>;
|
|
381
|
+
/** `restore` applied per id. Never partially fails the batch: each id reports its own outcome. */
|
|
382
|
+
bulkRestore(seed: Seed, ids: string[], options?: RepositoryOptions): Promise<BulkDeleteResult>;
|
|
383
|
+
/**
|
|
384
|
+
* `purge` applied per id. Returns the purged rows so the caller can collect R2 media keys.
|
|
385
|
+
*/
|
|
386
|
+
bulkPurge(seed: Seed, ids: string[], options?: RepositoryOptions): Promise<BulkDeleteResult & {
|
|
387
|
+
rows: Record<string, any>[];
|
|
388
|
+
}>;
|
|
389
|
+
/**
|
|
390
|
+
* 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.
|
|
395
|
+
*/
|
|
396
|
+
findExpiredByRetention(seed: Seed, now: number, limit: number): Promise<string[]>;
|
|
246
397
|
}
|
|
247
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":"AAGA,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"content.repository.d.ts","sourceRoot":"","sources":["../../src/content/content.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,3 +57,65 @@ export class HookValidationError extends RepositoryError {
|
|
|
57
57
|
this.fields = fields;
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Thrown by `publishDraft` when the live entry was written after the draft captured its
|
|
62
|
+
* `live_snapshot_at`. Publishing would overwrite that write, so the repository refuses and the
|
|
63
|
+
* caller must discard the draft or re-create it from the current live version.
|
|
64
|
+
* Mapped to 409 Conflict by the API problem-mapper.
|
|
65
|
+
*/
|
|
66
|
+
export class DraftConflictError extends RepositoryError {
|
|
67
|
+
seedSlug;
|
|
68
|
+
entryId;
|
|
69
|
+
snapshotAt;
|
|
70
|
+
liveUpdatedAt;
|
|
71
|
+
constructor(params) {
|
|
72
|
+
super(`Draft conflict: entry '${params.entryId}' in '${params.seedSlug}' was modified at ` +
|
|
73
|
+
`${params.liveUpdatedAt}, after the draft snapshot ${params.snapshotAt}`);
|
|
74
|
+
this.name = 'DraftConflictError';
|
|
75
|
+
this.seedSlug = params.seedSlug;
|
|
76
|
+
this.entryId = params.entryId;
|
|
77
|
+
this.snapshotAt = params.snapshotAt;
|
|
78
|
+
this.liveUpdatedAt = params.liveUpdatedAt;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Thrown by `update` when the caller supplied `options.ifMatch` and the live row's
|
|
83
|
+
* `updated_at` no longer matches it — another writer committed in between.
|
|
84
|
+
* Mapped to 409 Conflict by the API problem-mapper.
|
|
85
|
+
*/
|
|
86
|
+
export class EntryConflictError extends RepositoryError {
|
|
87
|
+
seedSlug;
|
|
88
|
+
entryId;
|
|
89
|
+
expectedUpdatedAt;
|
|
90
|
+
actualUpdatedAt;
|
|
91
|
+
constructor(params) {
|
|
92
|
+
super(`Entry conflict: entry '${params.entryId}' in '${params.seedSlug}' was modified at ` +
|
|
93
|
+
`${params.actualUpdatedAt}, expected ${params.expectedUpdatedAt}`);
|
|
94
|
+
this.name = 'EntryConflictError';
|
|
95
|
+
this.seedSlug = params.seedSlug;
|
|
96
|
+
this.entryId = params.entryId;
|
|
97
|
+
this.expectedUpdatedAt = params.expectedUpdatedAt;
|
|
98
|
+
this.actualUpdatedAt = params.actualUpdatedAt;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Thrown by `saveDraft` when the caller supplied `options.ifMatch` and the pending draft
|
|
103
|
+
* row's `updated_at` no longer matches it — another writer saved a draft in between, and
|
|
104
|
+
* blindly merging on top of it would silently drop that writer's fields.
|
|
105
|
+
* Mapped to 409 Conflict by the API problem-mapper.
|
|
106
|
+
*/
|
|
107
|
+
export class DraftSaveConflictError extends RepositoryError {
|
|
108
|
+
seedSlug;
|
|
109
|
+
entryId;
|
|
110
|
+
expectedUpdatedAt;
|
|
111
|
+
actualUpdatedAt;
|
|
112
|
+
constructor(params) {
|
|
113
|
+
super(`Draft save conflict: draft for entry '${params.entryId}' in '${params.seedSlug}' was saved at ` +
|
|
114
|
+
`${params.actualUpdatedAt}, expected ${params.expectedUpdatedAt}`);
|
|
115
|
+
this.name = 'DraftSaveConflictError';
|
|
116
|
+
this.seedSlug = params.seedSlug;
|
|
117
|
+
this.entryId = params.entryId;
|
|
118
|
+
this.expectedUpdatedAt = params.expectedUpdatedAt;
|
|
119
|
+
this.actualUpdatedAt = params.actualUpdatedAt;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The GDPR erasure record. It lives OUTSIDE D1 on purpose: a D1 Time Travel restore rewinds
|
|
3
|
+
* every table it wrote, including any local ledger, which would defeat the one guarantee this
|
|
4
|
+
* record exists to give — that an erasure stays erased.
|
|
5
|
+
*/
|
|
6
|
+
export interface DeletionLedgerEvent {
|
|
7
|
+
/** Seed slug the purged entry belonged to. */
|
|
8
|
+
seedSlug: string;
|
|
9
|
+
/** Entry id, the reconciliation key against a restored `content_{slug}` row. */
|
|
10
|
+
entryId: string;
|
|
11
|
+
/** Entry slug at purge time. Diagnostic only; `entryId` is the identity. */
|
|
12
|
+
entrySlug: string | null;
|
|
13
|
+
/** Unix seconds (`IClock`), never `Date.now()`. */
|
|
14
|
+
purgedAt: number;
|
|
15
|
+
/** Who ordered the purge. `null` for a system/reconciliation purge. */
|
|
16
|
+
actorId: string | null;
|
|
17
|
+
/** 'purge' = operator action; 'reconcile' = re-applied after a restore. */
|
|
18
|
+
reason: 'purge' | 'reconcile';
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Append-only erasure log. `append` must be durable before the caller reports success:
|
|
22
|
+
* a purge whose event was lost is a purge that a restore can silently undo.
|
|
23
|
+
*/
|
|
24
|
+
export interface IDeletionLedger {
|
|
25
|
+
/** Records one erasure. Throws if the write did not land. */
|
|
26
|
+
append(event: DeletionLedgerEvent): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Streams recorded erasures for one seed, newest-first is NOT guaranteed.
|
|
29
|
+
* `cursor` is opaque and comes from the previous page's `nextCursor`.
|
|
30
|
+
*/
|
|
31
|
+
list(seedSlug: string, options?: {
|
|
32
|
+
limit?: number;
|
|
33
|
+
cursor?: string;
|
|
34
|
+
}): Promise<{
|
|
35
|
+
events: DeletionLedgerEvent[];
|
|
36
|
+
nextCursor?: string;
|
|
37
|
+
}>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=deletion-ledger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deletion-ledger.d.ts","sourceRoot":"","sources":["../../src/content/deletion-ledger.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAA;IAChB,gFAAgF;IAChF,OAAO,EAAE,MAAM,CAAA;IACf,4EAA4E;IAC5E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAA;IAChB,uEAAuE;IACvE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,2EAA2E;IAC3E,MAAM,EAAE,OAAO,GAAG,WAAW,CAAA;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,6DAA6D;IAC7D,MAAM,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjD;;;OAGG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAC7E,MAAM,EAAE,mBAAmB,EAAE,CAAA;QAC7B,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAC,CAAA;CACH"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { Seed } from '../engine/types.js';
|
|
2
|
+
export type SeedPurgePhase = 'live' | 'drafts' | 'purging' | 'done' | 'failed';
|
|
3
|
+
export interface SeedPurgeJob {
|
|
4
|
+
id: string;
|
|
5
|
+
slug: string;
|
|
6
|
+
definition: Seed;
|
|
7
|
+
phase: SeedPurgePhase;
|
|
8
|
+
cursor: number;
|
|
9
|
+
stagedCount: number;
|
|
10
|
+
purgedCount: number;
|
|
11
|
+
}
|
|
12
|
+
export interface SeedPurgeRow {
|
|
13
|
+
rowid: number;
|
|
14
|
+
data: Record<string, unknown>;
|
|
15
|
+
}
|
|
16
|
+
/** Durable, bounded staging and acknowledgement of media references during seed deletion. */
|
|
17
|
+
export interface ISeedMediaPurgeRepository {
|
|
18
|
+
begin(id: string, seed: Seed, now: number): Promise<void>;
|
|
19
|
+
get(id: string): Promise<SeedPurgeJob | null>;
|
|
20
|
+
getActiveBySlug(slug: string): Promise<SeedPurgeJob | null>;
|
|
21
|
+
listPendingIds(limit: number): Promise<string[]>;
|
|
22
|
+
claim(id: string, token: string, now: number, leaseSeconds: number): Promise<SeedPurgeJob | null>;
|
|
23
|
+
release(id: string, token: string): Promise<void>;
|
|
24
|
+
getColumns(table: string): Promise<Set<string> | null>;
|
|
25
|
+
readPage(table: string, columns: string[], cursor: number, limit: number): Promise<SeedPurgeRow[]>;
|
|
26
|
+
stagePage(id: string, token: string, cursor: number, keys: string[], now: number): Promise<void>;
|
|
27
|
+
moveToDrafts(id: string, token: string, now: number): Promise<void>;
|
|
28
|
+
dropAndStartPurge(id: string, token: string, statements: string[], now: number): Promise<void>;
|
|
29
|
+
abortDrop(id: string, token: string, now: number): Promise<void>;
|
|
30
|
+
listKeys(id: string, limit: number): Promise<string[]>;
|
|
31
|
+
completeKey(id: string, token: string, key: string, now: number): Promise<void>;
|
|
32
|
+
finish(id: string, token: string, now: number): Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=seed-media-purge.repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed-media-purge.repository.d.ts","sourceRoot":"","sources":["../../src/content/seed-media-purge.repository.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAE9C,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAA;AAE9E,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,IAAI,CAAA;IAChB,KAAK,EAAE,cAAc,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B;AAED,6FAA6F;AAC7F,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACzD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IAC7C,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IAC3D,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAChD,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IACjG,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjD,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAA;IACtD,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IAClG,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChG,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnE,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9F,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChE,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACtD,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/E,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC9D"}
|
|
@@ -38,6 +38,9 @@ export interface ISeedRepository {
|
|
|
38
38
|
* All-or-nothing: a guard mismatch or a failing statement writes nothing.
|
|
39
39
|
* The DDL strings MUST come from the core planners — this method never generates SQL. */
|
|
40
40
|
applyAtomic(input: SeedApplyInput): Promise<SeedApplyResult>;
|
|
41
|
+
/** Applies destructive DDL, the seed-row update or deletion, and the registry-version
|
|
42
|
+
* bump in one OCC-guarded batch. Kept separate from the additive apply contract. */
|
|
43
|
+
applyDestructiveAtomic(input: SeedDestructiveApplyInput): Promise<SeedApplyResult>;
|
|
41
44
|
}
|
|
42
45
|
/** Input for an atomic, OCC-guarded schema apply. */
|
|
43
46
|
export interface SeedApplyInput {
|
|
@@ -56,4 +59,15 @@ export interface SeedApplyResult {
|
|
|
56
59
|
/** The version now in D1: expectedVersion + 1 on success, the live value on conflict. */
|
|
57
60
|
version: number;
|
|
58
61
|
}
|
|
62
|
+
/** A destructive schema change planned by the core DDL generators. */
|
|
63
|
+
export type SeedDestructiveApplyInput = {
|
|
64
|
+
slug: string;
|
|
65
|
+
ddl: string[];
|
|
66
|
+
expectedVersion: number;
|
|
67
|
+
} & ({
|
|
68
|
+
operation: 'update';
|
|
69
|
+
definition: Seed;
|
|
70
|
+
} | {
|
|
71
|
+
operation: 'delete';
|
|
72
|
+
});
|
|
59
73
|
//# sourceMappingURL=seed.repository.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seed.repository.d.ts","sourceRoot":"","sources":["../../src/content/seed.repository.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAE9C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,IAAI,CAAA;IAChB,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAA;IAC5B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,UAAU,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IAC7B,kEAAkE;IAClE,OAAO,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;IAChC,wDAAwD;IACxD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAA;IAC7C,kGAAkG;IAClG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClF,+EAA+E;IAC/E,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC;gFAC4E;IAC5E,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,2BAA2B;IAC3B,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IACrC,2EAA2E;IAC3E,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IACtC;;;8FAG0F;IAC1F,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"seed.repository.d.ts","sourceRoot":"","sources":["../../src/content/seed.repository.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAE9C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,IAAI,CAAA;IAChB,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAA;IAC5B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,UAAU,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IAC7B,kEAAkE;IAClE,OAAO,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;IAChC,wDAAwD;IACxD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAA;IAC7C,kGAAkG;IAClG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClF,+EAA+E;IAC/E,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC;gFAC4E;IAC5E,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,2BAA2B;IAC3B,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IACrC,2EAA2E;IAC3E,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IACtC;;;8FAG0F;IAC1F,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAC5D;yFACqF;IACrF,sBAAsB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;CACnF;AAED,qDAAqD;AACrD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,gEAAgE;IAChE,UAAU,EAAE,IAAI,CAAA;IAChB,mFAAmF;IACnF,GAAG,EAAE,MAAM,EAAE,CAAA;IACb,gFAAgF;IAChF,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,oEAAoE;IACpE,OAAO,EAAE,OAAO,CAAA;IAChB,yFAAyF;IACzF,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,sEAAsE;AACtE,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,EAAE,CAAA;IACb,eAAe,EAAE,MAAM,CAAA;CACxB,GAAG,CACA;IAAE,SAAS,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,IAAI,CAAA;CAAE,GACzC;IAAE,SAAS,EAAE,QAAQ,CAAA;CAAE,CAC1B,CAAA"}
|
|
@@ -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"}
|