@jini-ai/cms 0.1.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/LICENSE +201 -0
- package/README.md +84 -0
- package/dist/content-types/agent-tools.d.ts +65 -0
- package/dist/content-types/agent-tools.d.ts.map +1 -0
- package/dist/content-types/agent-tools.js +172 -0
- package/dist/content-types/agent-tools.js.map +1 -0
- package/dist/content-types/cleanup.d.ts +118 -0
- package/dist/content-types/cleanup.d.ts.map +1 -0
- package/dist/content-types/cleanup.js +65 -0
- package/dist/content-types/cleanup.js.map +1 -0
- package/dist/content-types/errors.d.ts +90 -0
- package/dist/content-types/errors.d.ts.map +1 -0
- package/dist/content-types/errors.js +119 -0
- package/dist/content-types/errors.js.map +1 -0
- package/dist/content-types/field-defs.d.ts +25 -0
- package/dist/content-types/field-defs.d.ts.map +1 -0
- package/dist/content-types/field-defs.js +155 -0
- package/dist/content-types/field-defs.js.map +1 -0
- package/dist/content-types/index-provisioning.d.ts +94 -0
- package/dist/content-types/index-provisioning.d.ts.map +1 -0
- package/dist/content-types/index-provisioning.js +133 -0
- package/dist/content-types/index-provisioning.js.map +1 -0
- package/dist/content-types/index.d.ts +63 -0
- package/dist/content-types/index.d.ts.map +1 -0
- package/dist/content-types/index.js +36 -0
- package/dist/content-types/index.js.map +1 -0
- package/dist/content-types/lifecycle-dispatch.d.ts +38 -0
- package/dist/content-types/lifecycle-dispatch.d.ts.map +1 -0
- package/dist/content-types/lifecycle-dispatch.js +28 -0
- package/dist/content-types/lifecycle-dispatch.js.map +1 -0
- package/dist/content-types/lifecycle.d.ts +104 -0
- package/dist/content-types/lifecycle.d.ts.map +1 -0
- package/dist/content-types/lifecycle.js +143 -0
- package/dist/content-types/lifecycle.js.map +1 -0
- package/dist/content-types/list.d.ts +44 -0
- package/dist/content-types/list.d.ts.map +1 -0
- package/dist/content-types/list.js +13 -0
- package/dist/content-types/list.js.map +1 -0
- package/dist/content-types/repo.memory.d.ts +72 -0
- package/dist/content-types/repo.memory.d.ts.map +1 -0
- package/dist/content-types/repo.memory.js +71 -0
- package/dist/content-types/repo.memory.js.map +1 -0
- package/dist/content-types/tool-registrations.d.ts +65 -0
- package/dist/content-types/tool-registrations.d.ts.map +1 -0
- package/dist/content-types/tool-registrations.js +180 -0
- package/dist/content-types/tool-registrations.js.map +1 -0
- package/dist/content-types/types.d.ts +78 -0
- package/dist/content-types/types.d.ts.map +1 -0
- package/dist/content-types/types.js +32 -0
- package/dist/content-types/types.js.map +1 -0
- package/dist/content-types/write-service.d.ts +141 -0
- package/dist/content-types/write-service.d.ts.map +1 -0
- package/dist/content-types/write-service.js +180 -0
- package/dist/content-types/write-service.js.map +1 -0
- package/dist/core/commands/change-set.d.ts +98 -0
- package/dist/core/commands/change-set.d.ts.map +1 -0
- package/dist/core/commands/change-set.js +2 -0
- package/dist/core/commands/change-set.js.map +1 -0
- package/dist/core/commands/command.d.ts +168 -0
- package/dist/core/commands/command.d.ts.map +1 -0
- package/dist/core/commands/command.js +173 -0
- package/dist/core/commands/command.js.map +1 -0
- package/dist/core/index.d.ts +45 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +43 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/ports.d.ts +139 -0
- package/dist/core/ports.d.ts.map +1 -0
- package/dist/core/ports.js +2 -0
- package/dist/core/ports.js.map +1 -0
- package/dist/core/tools/registration-kit.d.ts +308 -0
- package/dist/core/tools/registration-kit.d.ts.map +1 -0
- package/dist/core/tools/registration-kit.js +381 -0
- package/dist/core/tools/registration-kit.js.map +1 -0
- package/dist/entries/agent-tools.d.ts +78 -0
- package/dist/entries/agent-tools.d.ts.map +1 -0
- package/dist/entries/agent-tools.js +158 -0
- package/dist/entries/agent-tools.js.map +1 -0
- package/dist/entries/errors.d.ts +43 -0
- package/dist/entries/errors.d.ts.map +1 -0
- package/dist/entries/errors.js +59 -0
- package/dist/entries/errors.js.map +1 -0
- package/dist/entries/field-validation.d.ts +70 -0
- package/dist/entries/field-validation.d.ts.map +1 -0
- package/dist/entries/field-validation.js +87 -0
- package/dist/entries/field-validation.js.map +1 -0
- package/dist/entries/index.d.ts +55 -0
- package/dist/entries/index.d.ts.map +1 -0
- package/dist/entries/index.js +38 -0
- package/dist/entries/index.js.map +1 -0
- package/dist/entries/lifecycle-dispatch.d.ts +15 -0
- package/dist/entries/lifecycle-dispatch.d.ts.map +1 -0
- package/dist/entries/lifecycle-dispatch.js +16 -0
- package/dist/entries/lifecycle-dispatch.js.map +1 -0
- package/dist/entries/list.d.ts +47 -0
- package/dist/entries/list.d.ts.map +1 -0
- package/dist/entries/list.js +12 -0
- package/dist/entries/list.js.map +1 -0
- package/dist/entries/repo.memory.d.ts +64 -0
- package/dist/entries/repo.memory.d.ts.map +1 -0
- package/dist/entries/repo.memory.js +73 -0
- package/dist/entries/repo.memory.js.map +1 -0
- package/dist/entries/tool-registrations.d.ts +52 -0
- package/dist/entries/tool-registrations.d.ts.map +1 -0
- package/dist/entries/tool-registrations.js +141 -0
- package/dist/entries/tool-registrations.js.map +1 -0
- package/dist/entries/types.d.ts +55 -0
- package/dist/entries/types.d.ts.map +1 -0
- package/dist/entries/types.js +2 -0
- package/dist/entries/types.js.map +1 -0
- package/dist/entries/write-service.d.ts +202 -0
- package/dist/entries/write-service.d.ts.map +1 -0
- package/dist/entries/write-service.js +204 -0
- package/dist/entries/write-service.js.map +1 -0
- package/dist/identity/admin-crud-service.d.ts +252 -0
- package/dist/identity/admin-crud-service.d.ts.map +1 -0
- package/dist/identity/admin-crud-service.js +437 -0
- package/dist/identity/admin-crud-service.js.map +1 -0
- package/dist/identity/agent-tool-input.d.ts +58 -0
- package/dist/identity/agent-tool-input.d.ts.map +1 -0
- package/dist/identity/agent-tool-input.js +126 -0
- package/dist/identity/agent-tool-input.js.map +1 -0
- package/dist/identity/agent-tools.d.ts +101 -0
- package/dist/identity/agent-tools.d.ts.map +1 -0
- package/dist/identity/agent-tools.js +290 -0
- package/dist/identity/agent-tools.js.map +1 -0
- package/dist/identity/auth-service.d.ts +87 -0
- package/dist/identity/auth-service.d.ts.map +1 -0
- package/dist/identity/auth-service.js +141 -0
- package/dist/identity/auth-service.js.map +1 -0
- package/dist/identity/authorize.d.ts +90 -0
- package/dist/identity/authorize.d.ts.map +1 -0
- package/dist/identity/authorize.js +94 -0
- package/dist/identity/authorize.js.map +1 -0
- package/dist/identity/grant-service.d.ts +198 -0
- package/dist/identity/grant-service.d.ts.map +1 -0
- package/dist/identity/grant-service.js +361 -0
- package/dist/identity/grant-service.js.map +1 -0
- package/dist/identity/hasher.d.ts +39 -0
- package/dist/identity/hasher.d.ts.map +1 -0
- package/dist/identity/hasher.js +39 -0
- package/dist/identity/hasher.js.map +1 -0
- package/dist/identity/index.d.ts +59 -0
- package/dist/identity/index.d.ts.map +1 -0
- package/dist/identity/index.js +51 -0
- package/dist/identity/index.js.map +1 -0
- package/dist/identity/password-policy.d.ts +58 -0
- package/dist/identity/password-policy.d.ts.map +1 -0
- package/dist/identity/password-policy.js +67 -0
- package/dist/identity/password-policy.js.map +1 -0
- package/dist/identity/permission-migrations.d.ts +86 -0
- package/dist/identity/permission-migrations.d.ts.map +1 -0
- package/dist/identity/permission-migrations.js +67 -0
- package/dist/identity/permission-migrations.js.map +1 -0
- package/dist/identity/permissions.d.ts +35 -0
- package/dist/identity/permissions.d.ts.map +1 -0
- package/dist/identity/permissions.js +603 -0
- package/dist/identity/permissions.js.map +1 -0
- package/dist/identity/ports.d.ts +201 -0
- package/dist/identity/ports.d.ts.map +1 -0
- package/dist/identity/ports.js +2 -0
- package/dist/identity/ports.js.map +1 -0
- package/dist/identity/repo.memory.d.ts +164 -0
- package/dist/identity/repo.memory.d.ts.map +1 -0
- package/dist/identity/repo.memory.js +224 -0
- package/dist/identity/repo.memory.js.map +1 -0
- package/dist/identity/seed.d.ts +42 -0
- package/dist/identity/seed.d.ts.map +1 -0
- package/dist/identity/seed.js +277 -0
- package/dist/identity/seed.js.map +1 -0
- package/dist/identity/tool-registrations.d.ts +50 -0
- package/dist/identity/tool-registrations.d.ts.map +1 -0
- package/dist/identity/tool-registrations.js +419 -0
- package/dist/identity/tool-registrations.js.map +1 -0
- package/dist/identity/types.d.ts +185 -0
- package/dist/identity/types.d.ts.map +1 -0
- package/dist/identity/types.js +64 -0
- package/dist/identity/types.js.map +1 -0
- package/dist/identity/username.d.ts +12 -0
- package/dist/identity/username.d.ts.map +1 -0
- package/dist/identity/username.js +14 -0
- package/dist/identity/username.js.map +1 -0
- package/dist/media/agent-tools.d.ts +66 -0
- package/dist/media/agent-tools.d.ts.map +1 -0
- package/dist/media/agent-tools.js +131 -0
- package/dist/media/agent-tools.js.map +1 -0
- package/dist/media/blob-gc-lock.d.ts +37 -0
- package/dist/media/blob-gc-lock.d.ts.map +1 -0
- package/dist/media/blob-gc-lock.js +55 -0
- package/dist/media/blob-gc-lock.js.map +1 -0
- package/dist/media/blob-gc.d.ts +246 -0
- package/dist/media/blob-gc.d.ts.map +1 -0
- package/dist/media/blob-gc.js +254 -0
- package/dist/media/blob-gc.js.map +1 -0
- package/dist/media/blob-key.d.ts +28 -0
- package/dist/media/blob-key.d.ts.map +1 -0
- package/dist/media/blob-key.js +11 -0
- package/dist/media/blob-key.js.map +1 -0
- package/dist/media/blob-store.fs.d.ts +23 -0
- package/dist/media/blob-store.fs.d.ts.map +1 -0
- package/dist/media/blob-store.fs.js +48 -0
- package/dist/media/blob-store.fs.js.map +1 -0
- package/dist/media/blob-store.memory.d.ts +22 -0
- package/dist/media/blob-store.memory.d.ts.map +1 -0
- package/dist/media/blob-store.memory.js +23 -0
- package/dist/media/blob-store.memory.js.map +1 -0
- package/dist/media/content-type-sniffer.d.ts +49 -0
- package/dist/media/content-type-sniffer.d.ts.map +1 -0
- package/dist/media/content-type-sniffer.js +141 -0
- package/dist/media/content-type-sniffer.js.map +1 -0
- package/dist/media/image-transformer.d.ts +45 -0
- package/dist/media/image-transformer.d.ts.map +1 -0
- package/dist/media/image-transformer.js +23 -0
- package/dist/media/image-transformer.js.map +1 -0
- package/dist/media/image-transformer.sharp.d.ts +26 -0
- package/dist/media/image-transformer.sharp.d.ts.map +1 -0
- package/dist/media/image-transformer.sharp.js +91 -0
- package/dist/media/image-transformer.sharp.js.map +1 -0
- package/dist/media/index.d.ts +43 -0
- package/dist/media/index.d.ts.map +1 -0
- package/dist/media/index.js +31 -0
- package/dist/media/index.js.map +1 -0
- package/dist/media/media-service.d.ts +244 -0
- package/dist/media/media-service.d.ts.map +1 -0
- package/dist/media/media-service.js +345 -0
- package/dist/media/media-service.js.map +1 -0
- package/dist/media/ports.d.ts +142 -0
- package/dist/media/ports.d.ts.map +1 -0
- package/dist/media/ports.js +2 -0
- package/dist/media/ports.js.map +1 -0
- package/dist/media/rendition-service.d.ts +66 -0
- package/dist/media/rendition-service.d.ts.map +1 -0
- package/dist/media/rendition-service.js +135 -0
- package/dist/media/rendition-service.js.map +1 -0
- package/dist/media/repo.memory.d.ts +107 -0
- package/dist/media/repo.memory.d.ts.map +1 -0
- package/dist/media/repo.memory.js +131 -0
- package/dist/media/repo.memory.js.map +1 -0
- package/dist/media/tool-registrations.d.ts +42 -0
- package/dist/media/tool-registrations.d.ts.map +1 -0
- package/dist/media/tool-registrations.js +121 -0
- package/dist/media/tool-registrations.js.map +1 -0
- package/dist/media/transform-lock.d.ts +36 -0
- package/dist/media/transform-lock.d.ts.map +1 -0
- package/dist/media/transform-lock.js +50 -0
- package/dist/media/transform-lock.js.map +1 -0
- package/dist/media/transform-registry.d.ts +103 -0
- package/dist/media/transform-registry.d.ts.map +1 -0
- package/dist/media/transform-registry.js +87 -0
- package/dist/media/transform-registry.js.map +1 -0
- package/dist/media/transform-types.d.ts +82 -0
- package/dist/media/transform-types.d.ts.map +1 -0
- package/dist/media/transform-types.js +47 -0
- package/dist/media/transform-types.js.map +1 -0
- package/dist/media/types.d.ts +150 -0
- package/dist/media/types.d.ts.map +1 -0
- package/dist/media/types.js +26 -0
- package/dist/media/types.js.map +1 -0
- package/dist/navigation/agent-tools.d.ts +90 -0
- package/dist/navigation/agent-tools.d.ts.map +1 -0
- package/dist/navigation/agent-tools.js +225 -0
- package/dist/navigation/agent-tools.js.map +1 -0
- package/dist/navigation/contracts.d.ts +98 -0
- package/dist/navigation/contracts.d.ts.map +1 -0
- package/dist/navigation/contracts.js +70 -0
- package/dist/navigation/contracts.js.map +1 -0
- package/dist/navigation/index.d.ts +39 -0
- package/dist/navigation/index.d.ts.map +1 -0
- package/dist/navigation/index.js +30 -0
- package/dist/navigation/index.js.map +1 -0
- package/dist/navigation/menu-service.d.ts +256 -0
- package/dist/navigation/menu-service.d.ts.map +1 -0
- package/dist/navigation/menu-service.js +382 -0
- package/dist/navigation/menu-service.js.map +1 -0
- package/dist/navigation/ports.d.ts +147 -0
- package/dist/navigation/ports.d.ts.map +1 -0
- package/dist/navigation/ports.js +2 -0
- package/dist/navigation/ports.js.map +1 -0
- package/dist/navigation/read-model.d.ts +11 -0
- package/dist/navigation/read-model.d.ts.map +1 -0
- package/dist/navigation/read-model.js +27 -0
- package/dist/navigation/read-model.js.map +1 -0
- package/dist/navigation/reconcile.d.ts +57 -0
- package/dist/navigation/reconcile.d.ts.map +1 -0
- package/dist/navigation/reconcile.js +33 -0
- package/dist/navigation/reconcile.js.map +1 -0
- package/dist/navigation/repo.memory.d.ts +137 -0
- package/dist/navigation/repo.memory.d.ts.map +1 -0
- package/dist/navigation/repo.memory.js +95 -0
- package/dist/navigation/repo.memory.js.map +1 -0
- package/dist/navigation/resolver.d.ts +110 -0
- package/dist/navigation/resolver.d.ts.map +1 -0
- package/dist/navigation/resolver.js +131 -0
- package/dist/navigation/resolver.js.map +1 -0
- package/dist/navigation/tool-registrations.d.ts +43 -0
- package/dist/navigation/tool-registrations.d.ts.map +1 -0
- package/dist/navigation/tool-registrations.js +126 -0
- package/dist/navigation/tool-registrations.js.map +1 -0
- package/dist/navigation/types.d.ts +207 -0
- package/dist/navigation/types.d.ts.map +1 -0
- package/dist/navigation/types.js +14 -0
- package/dist/navigation/types.js.map +1 -0
- package/dist/presentation/index.d.ts +15 -0
- package/dist/presentation/index.d.ts.map +1 -0
- package/dist/presentation/index.js +15 -0
- package/dist/presentation/index.js.map +1 -0
- package/dist/presentation/presentation.d.ts +72 -0
- package/dist/presentation/presentation.d.ts.map +1 -0
- package/dist/presentation/presentation.js +51 -0
- package/dist/presentation/presentation.js.map +1 -0
- package/dist/presentation/repo.memory.d.ts +9 -0
- package/dist/presentation/repo.memory.d.ts.map +1 -0
- package/dist/presentation/repo.memory.js +21 -0
- package/dist/presentation/repo.memory.js.map +1 -0
- package/dist/server/index.d.ts +28 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +28 -0
- package/dist/server/index.js.map +1 -0
- package/dist/settings/agent-tools.d.ts +83 -0
- package/dist/settings/agent-tools.d.ts.map +1 -0
- package/dist/settings/agent-tools.js +200 -0
- package/dist/settings/agent-tools.js.map +1 -0
- package/dist/settings/agent-writable-preferences.d.ts +67 -0
- package/dist/settings/agent-writable-preferences.d.ts.map +1 -0
- package/dist/settings/agent-writable-preferences.js +144 -0
- package/dist/settings/agent-writable-preferences.js.map +1 -0
- package/dist/settings/change-feed.d.ts +74 -0
- package/dist/settings/change-feed.d.ts.map +1 -0
- package/dist/settings/change-feed.js +61 -0
- package/dist/settings/change-feed.js.map +1 -0
- package/dist/settings/definitions-dispatch.d.ts +51 -0
- package/dist/settings/definitions-dispatch.d.ts.map +1 -0
- package/dist/settings/definitions-dispatch.js +86 -0
- package/dist/settings/definitions-dispatch.js.map +1 -0
- package/dist/settings/dictionaries/index.d.ts +45 -0
- package/dist/settings/dictionaries/index.d.ts.map +1 -0
- package/dist/settings/dictionaries/index.js +69 -0
- package/dist/settings/dictionaries/index.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ar.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.ar.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ar.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.ar.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.bn.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.bn.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.bn.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.bn.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.de.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.de.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.de.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.de.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.es.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.es.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.es.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.es.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.fa.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.fa.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.fa.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.fa.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.fr.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.fr.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.fr.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.fr.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.hi.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.hi.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.hi.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.hi.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.hu.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.hu.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.hu.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.hu.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.id.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.id.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.id.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.id.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.it.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.it.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.it.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.it.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ja.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.ja.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ja.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.ja.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ko.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.ko.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ko.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.ko.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.pl.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.pl.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.pl.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.pl.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.pt-BR.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.pt-BR.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.pt-BR.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.pt-BR.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ru.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.ru.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ru.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.ru.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.th.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.th.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.th.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.th.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.tr.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.tr.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.tr.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.tr.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.uk.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.uk.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.uk.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.uk.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ur.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.ur.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.ur.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.ur.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.zh-CN.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.zh-CN.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.zh-CN.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.zh-CN.js.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.zh-TW.d.ts +3 -0
- package/dist/settings/dictionaries/settings-dialog.zh-TW.d.ts.map +1 -0
- package/dist/settings/dictionaries/settings-dialog.zh-TW.js +28 -0
- package/dist/settings/dictionaries/settings-dialog.zh-TW.js.map +1 -0
- package/dist/settings/ensure-definitions.d.ts +88 -0
- package/dist/settings/ensure-definitions.d.ts.map +1 -0
- package/dist/settings/ensure-definitions.js +91 -0
- package/dist/settings/ensure-definitions.js.map +1 -0
- package/dist/settings/errors.d.ts +36 -0
- package/dist/settings/errors.d.ts.map +1 -0
- package/dist/settings/errors.js +40 -0
- package/dist/settings/errors.js.map +1 -0
- package/dist/settings/index.d.ts +37 -0
- package/dist/settings/index.d.ts.map +1 -0
- package/dist/settings/index.js +36 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/settings/ports.d.ts +117 -0
- package/dist/settings/ports.d.ts.map +1 -0
- package/dist/settings/ports.js +2 -0
- package/dist/settings/ports.js.map +1 -0
- package/dist/settings/purge-service.d.ts +53 -0
- package/dist/settings/purge-service.d.ts.map +1 -0
- package/dist/settings/purge-service.js +105 -0
- package/dist/settings/purge-service.js.map +1 -0
- package/dist/settings/repo.memory.d.ts +119 -0
- package/dist/settings/repo.memory.d.ts.map +1 -0
- package/dist/settings/repo.memory.js +199 -0
- package/dist/settings/repo.memory.js.map +1 -0
- package/dist/settings/settings.d.ts +124 -0
- package/dist/settings/settings.d.ts.map +1 -0
- package/dist/settings/settings.js +238 -0
- package/dist/settings/settings.js.map +1 -0
- package/dist/settings/tool-registrations.d.ts +56 -0
- package/dist/settings/tool-registrations.d.ts.map +1 -0
- package/dist/settings/tool-registrations.js +240 -0
- package/dist/settings/tool-registrations.js.map +1 -0
- package/dist/settings/types.d.ts +125 -0
- package/dist/settings/types.d.ts.map +1 -0
- package/dist/settings/types.js +3 -0
- package/dist/settings/types.js.map +1 -0
- package/dist/settings/ui-tab-definitions.d.ts +41 -0
- package/dist/settings/ui-tab-definitions.d.ts.map +1 -0
- package/dist/settings/ui-tab-definitions.js +148 -0
- package/dist/settings/ui-tab-definitions.js.map +1 -0
- package/dist/settings/write-service.d.ts +314 -0
- package/dist/settings/write-service.d.ts.map +1 -0
- package/dist/settings/write-service.js +677 -0
- package/dist/settings/write-service.js.map +1 -0
- package/dist/taxonomy/agent-tools.d.ts +76 -0
- package/dist/taxonomy/agent-tools.d.ts.map +1 -0
- package/dist/taxonomy/agent-tools.js +178 -0
- package/dist/taxonomy/agent-tools.js.map +1 -0
- package/dist/taxonomy/content-lookup.d.ts +45 -0
- package/dist/taxonomy/content-lookup.d.ts.map +1 -0
- package/dist/taxonomy/content-lookup.js +9 -0
- package/dist/taxonomy/content-lookup.js.map +1 -0
- package/dist/taxonomy/index.d.ts +38 -0
- package/dist/taxonomy/index.d.ts.map +1 -0
- package/dist/taxonomy/index.js +38 -0
- package/dist/taxonomy/index.js.map +1 -0
- package/dist/taxonomy/list.d.ts +39 -0
- package/dist/taxonomy/list.d.ts.map +1 -0
- package/dist/taxonomy/list.js +19 -0
- package/dist/taxonomy/list.js.map +1 -0
- package/dist/taxonomy/merge-term.d.ts +94 -0
- package/dist/taxonomy/merge-term.d.ts.map +1 -0
- package/dist/taxonomy/merge-term.js +65 -0
- package/dist/taxonomy/merge-term.js.map +1 -0
- package/dist/taxonomy/repo.memory.d.ts +160 -0
- package/dist/taxonomy/repo.memory.d.ts.map +1 -0
- package/dist/taxonomy/repo.memory.js +171 -0
- package/dist/taxonomy/repo.memory.js.map +1 -0
- package/dist/taxonomy/validation-chain.d.ts +114 -0
- package/dist/taxonomy/validation-chain.d.ts.map +1 -0
- package/dist/taxonomy/validation-chain.js +152 -0
- package/dist/taxonomy/validation-chain.js.map +1 -0
- package/dist/taxonomy/write-service.d.ts +387 -0
- package/dist/taxonomy/write-service.d.ts.map +1 -0
- package/dist/taxonomy/write-service.js +350 -0
- package/dist/taxonomy/write-service.js.map +1 -0
- package/dist/workspace/agent-tools.d.ts +67 -0
- package/dist/workspace/agent-tools.d.ts.map +1 -0
- package/dist/workspace/agent-tools.js +103 -0
- package/dist/workspace/agent-tools.js.map +1 -0
- package/dist/workspace/create.d.ts +116 -0
- package/dist/workspace/create.d.ts.map +1 -0
- package/dist/workspace/create.js +69 -0
- package/dist/workspace/create.js.map +1 -0
- package/dist/workspace/delete.d.ts +50 -0
- package/dist/workspace/delete.d.ts.map +1 -0
- package/dist/workspace/delete.js +24 -0
- package/dist/workspace/delete.js.map +1 -0
- package/dist/workspace/index.d.ts +27 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +27 -0
- package/dist/workspace/index.js.map +1 -0
- package/dist/workspace/repo.memory.d.ts +34 -0
- package/dist/workspace/repo.memory.d.ts.map +1 -0
- package/dist/workspace/repo.memory.js +50 -0
- package/dist/workspace/repo.memory.js.map +1 -0
- package/dist/workspace/tool-registrations.d.ts +38 -0
- package/dist/workspace/tool-registrations.d.ts.map +1 -0
- package/dist/workspace/tool-registrations.js +71 -0
- package/dist/workspace/tool-registrations.js.map +1 -0
- package/dist/workspace/update.d.ts +52 -0
- package/dist/workspace/update.d.ts.map +1 -0
- package/dist/workspace/update.js +41 -0
- package/dist/workspace/update.js.map +1 -0
- package/package.json +149 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thrown when a command's idempotency key was already used in the workspace.
|
|
3
|
+
* Callers should re-read current state instead of retrying the mutation.
|
|
4
|
+
*/
|
|
5
|
+
export class DuplicateCommandError extends Error {
|
|
6
|
+
changeSetId;
|
|
7
|
+
constructor(message, changeSetId) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.changeSetId = changeSetId;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Thrown when `authorize()` denies the caller. Routes map
|
|
14
|
+
* this to 403 `FORBIDDEN`. Raised before the idempotency check (INV-04) — a
|
|
15
|
+
* replayed command id from a denied caller therefore never produces
|
|
16
|
+
* `DuplicateCommandError` either (EC-08).
|
|
17
|
+
*/
|
|
18
|
+
export class ForbiddenError extends Error {
|
|
19
|
+
permission;
|
|
20
|
+
reason;
|
|
21
|
+
constructor(message, permission, reason) {
|
|
22
|
+
super(message);
|
|
23
|
+
this.permission = permission;
|
|
24
|
+
this.reason = reason;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Detects a UNIQUE-constraint violation on `changeSets.insert()`'s idempotency-key index —
|
|
29
|
+
* the losing side of the TOCTOU race between the pre-execute `findByIdempotencyKey` check and
|
|
30
|
+
* this same key's insert (two concurrent requests can both pass the check before either inserts;
|
|
31
|
+
* the DB's real unique index then rejects the second write). Duck-typed on `.code` rather than an
|
|
32
|
+
* `instanceof` class check: `core/commands` stays storage-agnostic (see this file's header — it
|
|
33
|
+
* never imports a SQLite adapter), and `better-sqlite3`'s `SqliteError` is not a dependency here.
|
|
34
|
+
* `SQLITE_CONSTRAINT_UNIQUE` is deliberately not treated as conclusive on its own — a caller must
|
|
35
|
+
* still re-query for the winning row (see `executeCommand`'s catch block) before trusting this,
|
|
36
|
+
* since an adapter could throw the same code for an unrelated UNIQUE index.
|
|
37
|
+
*/
|
|
38
|
+
function isIdempotencyKeyConflict(error) {
|
|
39
|
+
return (typeof error === "object" &&
|
|
40
|
+
error !== null &&
|
|
41
|
+
error.code === "SQLITE_CONSTRAINT_UNIQUE");
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Execute a mutation through the command gateway.
|
|
45
|
+
*
|
|
46
|
+
* Order matters: idempotency check → inverse capture → execute → record.
|
|
47
|
+
* If execute throws, nothing is recorded; if inverse capture throws, the
|
|
48
|
+
* mutation never runs.
|
|
49
|
+
*
|
|
50
|
+
* The feature mutation and its change-set record commit as one unit of work
|
|
51
|
+
* (REQ-01): if `changeSets.insert` fails after `execute` has applied the
|
|
52
|
+
* mutation, the gateway rolls the mutation back via `mutation.rollback` and
|
|
53
|
+
* re-throws, so no change set and no outbox event survive (EC-08 / AC-17,
|
|
54
|
+
* INV-01).
|
|
55
|
+
*
|
|
56
|
+
* The `change-set.applied` event is passed as `changeSets.insert()`'s third argument, not a
|
|
57
|
+
* separate `deps.outbox.enqueue()` call afterward — a durable adapter co-persists it inside the
|
|
58
|
+
* same transaction as the change-set record, so it can never land without a durable delivery
|
|
59
|
+
* record (or vice versa). This still does NOT cover the domain mutation itself
|
|
60
|
+
* (`mutation.execute()` stays outside any shared transaction, covered only by the compensating
|
|
61
|
+
* rollback above), and it covers only this producer. See
|
|
62
|
+
* `docs/decisions/change-set-outbox-transaction-boundary.md` for the full rationale, including the
|
|
63
|
+
* other direct `OutboxPort.enqueue()` producers this decision deliberately leaves untouched.
|
|
64
|
+
*/
|
|
65
|
+
export async function executeCommand(required, _optional = {}) {
|
|
66
|
+
const { deps, command, mutation } = required;
|
|
67
|
+
// authorize() runs BEFORE the idempotency check, so
|
|
68
|
+
// a denied caller never learns whether a replayed command id previously
|
|
69
|
+
// succeeded (no DUPLICATE_COMMAND / changeSetId leak, EC-08). `permission`
|
|
70
|
+
// and `authorize` are wired together or not at all (see ExecuteCommandDeps
|
|
71
|
+
// doc) — partial wiring is a programming error, not a silent allow/skip.
|
|
72
|
+
if (Boolean(deps.authorize) !== Boolean(command.permission)) {
|
|
73
|
+
throw new Error("executeCommand: command.permission and deps.authorize must be supplied together " +
|
|
74
|
+
"— partial wiring would silently skip or misapply authorization");
|
|
75
|
+
}
|
|
76
|
+
if (deps.authorize && command.permission) {
|
|
77
|
+
const authResult = await deps.authorize({
|
|
78
|
+
principalId: command.actor.id,
|
|
79
|
+
permission: command.permission,
|
|
80
|
+
workspaceId: command.workspaceId,
|
|
81
|
+
entityType: mutation.entityType,
|
|
82
|
+
entityId: mutation.entityId,
|
|
83
|
+
});
|
|
84
|
+
if (!authResult.allowed) {
|
|
85
|
+
throw new ForbiddenError(`principal '${command.actor.id}' is not authorized for '${command.permission}' (${authResult.reason})`, command.permission, authResult.reason);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (command.idempotencyKey) {
|
|
89
|
+
const existing = await deps.changeSets.findByIdempotencyKey({
|
|
90
|
+
workspaceId: command.workspaceId,
|
|
91
|
+
idempotencyKey: command.idempotencyKey,
|
|
92
|
+
});
|
|
93
|
+
if (existing) {
|
|
94
|
+
throw new DuplicateCommandError(`command with idempotency key '${command.idempotencyKey}' was already executed`, existing.id);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const inversePayload = await mutation.captureInverse();
|
|
98
|
+
const result = await mutation.execute();
|
|
99
|
+
const entityVersionAtApply = mutation.captureEntityVersion?.(result) ?? undefined;
|
|
100
|
+
const now = deps.clock.nowIso();
|
|
101
|
+
const changeSetId = deps.idGen.newId();
|
|
102
|
+
// BR-04: the event rides into insert()'s third argument (see this function's doc comment) so a
|
|
103
|
+
// durable adapter co-persists it atomically with the record it belongs to. Built unconditionally
|
|
104
|
+
// (cheap, pure data) but only passed through when an outbox is actually wired.
|
|
105
|
+
const event = {
|
|
106
|
+
id: deps.idGen.newId(),
|
|
107
|
+
name: "change-set.applied",
|
|
108
|
+
occurredAt: now,
|
|
109
|
+
aggregateId: changeSetId,
|
|
110
|
+
workspaceId: command.workspaceId,
|
|
111
|
+
actorId: command.actor.id,
|
|
112
|
+
changeSetId,
|
|
113
|
+
payload: {
|
|
114
|
+
changeSetId,
|
|
115
|
+
entityType: mutation.entityType,
|
|
116
|
+
entityId: mutation.entityId,
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
// Unit of work: the change-set record (and, when an outbox is wired, its delivery event) must
|
|
120
|
+
// land together, or the feature mutation is rolled back (REQ-01 / EC-08). On the in-memory
|
|
121
|
+
// adapter this is a compensating restore via `mutation.rollback`; the SQLite adapter does this
|
|
122
|
+
// as one real transaction and the rollback becomes a no-op for this step.
|
|
123
|
+
try {
|
|
124
|
+
await deps.changeSets.insert({
|
|
125
|
+
id: changeSetId,
|
|
126
|
+
workspaceId: command.workspaceId,
|
|
127
|
+
actorId: command.actor.id,
|
|
128
|
+
status: "applied",
|
|
129
|
+
summary: command.summary,
|
|
130
|
+
idempotencyKey: command.idempotencyKey,
|
|
131
|
+
intentRef: command.intentRef,
|
|
132
|
+
createdAt: now,
|
|
133
|
+
appliedAt: now,
|
|
134
|
+
}, [
|
|
135
|
+
{
|
|
136
|
+
id: deps.idGen.newId(),
|
|
137
|
+
changeSetId,
|
|
138
|
+
entityType: mutation.entityType,
|
|
139
|
+
entityId: mutation.entityId,
|
|
140
|
+
operation: mutation.operation,
|
|
141
|
+
inversePayload: inversePayload ?? undefined,
|
|
142
|
+
entityVersionAtApply,
|
|
143
|
+
position: 0,
|
|
144
|
+
},
|
|
145
|
+
], deps.outbox ? event : undefined);
|
|
146
|
+
}
|
|
147
|
+
catch (recordError) {
|
|
148
|
+
// AC-17 / EC-08: the mutation applied but its record did not. Undo the
|
|
149
|
+
// mutation so INV-01 holds (no mutation without a record). We surface the
|
|
150
|
+
// original persist error; a rollback that itself throws is a harder failure
|
|
151
|
+
// that the SQLite transaction path is designed to remove.
|
|
152
|
+
await mutation.rollback?.();
|
|
153
|
+
// TOCTOU: the idempotency check above and this insert are separated by
|
|
154
|
+
// `captureInverse`/`execute`, so two concurrent requests on the same key can both pass the
|
|
155
|
+
// check before either inserts — the DB's unique index then rejects the loser here instead of
|
|
156
|
+
// at the check. Re-throw as the intended `DuplicateCommandError` (referencing the WINNING
|
|
157
|
+
// change set) rather than letting the raw driver error escape, so callers' existing
|
|
158
|
+
// `instanceof DuplicateCommandError` handling (409) catches this race the same as the
|
|
159
|
+
// already-covered non-racing replay.
|
|
160
|
+
if (command.idempotencyKey && isIdempotencyKeyConflict(recordError)) {
|
|
161
|
+
const winner = await deps.changeSets.findByIdempotencyKey({
|
|
162
|
+
workspaceId: command.workspaceId,
|
|
163
|
+
idempotencyKey: command.idempotencyKey,
|
|
164
|
+
});
|
|
165
|
+
if (winner) {
|
|
166
|
+
throw new DuplicateCommandError(`command with idempotency key '${command.idempotencyKey}' was already executed`, winner.id);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
throw recordError;
|
|
170
|
+
}
|
|
171
|
+
return { result, changeSetId };
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/core/commands/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file `@jini-ai/cms/core` — the framework-free kernel of the CMS capability.
|
|
3
|
+
*
|
|
4
|
+
* ## What belongs here
|
|
5
|
+
*
|
|
6
|
+
* Everything that must run in any JavaScript runtime: the shared runtime ports (clock, id
|
|
7
|
+
* generation, outbox, domain events), the auditable mutation write path, and the tool-registration
|
|
8
|
+
* kit every domain's agent-tool layer builds on. No Express, no `node:*`, no DOM, no concrete
|
|
9
|
+
* adapters.
|
|
10
|
+
*
|
|
11
|
+
* ## What belongs in `../server`
|
|
12
|
+
*
|
|
13
|
+
* Only the Node-bound half: concrete repository implementations (SQLite/Postgres), filesystem blob
|
|
14
|
+
* stores, and anything importing `node:*`.
|
|
15
|
+
*
|
|
16
|
+
* ## Why the split is drawn here, and why it is enforced by `exports` rather than convention
|
|
17
|
+
*
|
|
18
|
+
* This mirrors a defect measured in the CMS runtime this is ported from. There, the content model
|
|
19
|
+
* and its HTTP composition root lived in one `src/` tree with no enforced boundary, and 53 import
|
|
20
|
+
* edges ended up pointing *into* the composition root — including 22 domain modules importing a
|
|
21
|
+
* 454-line route-deps type whose first line was `import type { Express } from "express"`. The
|
|
22
|
+
* consequence, visible in git history, was that no content module could be changed without also
|
|
23
|
+
* changing the server: its theme module and its server co-changed in 71% of commits touching the
|
|
24
|
+
* former.
|
|
25
|
+
*
|
|
26
|
+
* A package's `exports` map is exactly the enforcement a single `src/` tree cannot provide: a
|
|
27
|
+
* consumer of `@jini-ai/cms/core` physically cannot reach a Node adapter, and `/core` physically
|
|
28
|
+
* cannot import a transport type, because the module resolver refuses it. Keep it that way — if a
|
|
29
|
+
* core module wants something from `/server`, the dependency is pointing the wrong way and the fix
|
|
30
|
+
* is a port (interface) in core, not a widened export.
|
|
31
|
+
*
|
|
32
|
+
* ## Why the barrel does not re-export `./commands/appliers`
|
|
33
|
+
*
|
|
34
|
+
* There is no `appliers` module here, and that is deliberate rather than an oversight. In the
|
|
35
|
+
* source repo the equivalent barrel re-exported an inverse-applier registry that named two specific
|
|
36
|
+
* content features by import. Because every domain's tool layer reaches the kernel, that single
|
|
37
|
+
* re-export put a dependency on those two features into every domain module in the tree — the
|
|
38
|
+
* measured reason no domain could be extracted on its own. A per-entity applier registry belongs
|
|
39
|
+
* behind a registration call the host makes, not behind a kernel barrel.
|
|
40
|
+
*/
|
|
41
|
+
export type { UUID, ISODateTime, JsonPrimitive, JsonValue, JsonObject, JsonArray, DomainEvent, EventBusPort, OutboxRecord, OutboxPort, ClockPort, IdGeneratorPort, } from './ports.js';
|
|
42
|
+
export type { ChangeSetStatus, ChangeSetOperation, ChangeSetRecord, ChangeSetItemRecord, ChangeSetWithItems, ChangeSetRepoPort, } from './commands/change-set.js';
|
|
43
|
+
export * from './commands/command.js';
|
|
44
|
+
export * from './tools/registration-kit.js';
|
|
45
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,YAAY,EACV,IAAI,EACJ,WAAW,EACX,aAAa,EACb,SAAS,EACT,UAAU,EACV,SAAS,EACT,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,SAAS,EACT,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAElC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file `@jini-ai/cms/core` — the framework-free kernel of the CMS capability.
|
|
3
|
+
*
|
|
4
|
+
* ## What belongs here
|
|
5
|
+
*
|
|
6
|
+
* Everything that must run in any JavaScript runtime: the shared runtime ports (clock, id
|
|
7
|
+
* generation, outbox, domain events), the auditable mutation write path, and the tool-registration
|
|
8
|
+
* kit every domain's agent-tool layer builds on. No Express, no `node:*`, no DOM, no concrete
|
|
9
|
+
* adapters.
|
|
10
|
+
*
|
|
11
|
+
* ## What belongs in `../server`
|
|
12
|
+
*
|
|
13
|
+
* Only the Node-bound half: concrete repository implementations (SQLite/Postgres), filesystem blob
|
|
14
|
+
* stores, and anything importing `node:*`.
|
|
15
|
+
*
|
|
16
|
+
* ## Why the split is drawn here, and why it is enforced by `exports` rather than convention
|
|
17
|
+
*
|
|
18
|
+
* This mirrors a defect measured in the CMS runtime this is ported from. There, the content model
|
|
19
|
+
* and its HTTP composition root lived in one `src/` tree with no enforced boundary, and 53 import
|
|
20
|
+
* edges ended up pointing *into* the composition root — including 22 domain modules importing a
|
|
21
|
+
* 454-line route-deps type whose first line was `import type { Express } from "express"`. The
|
|
22
|
+
* consequence, visible in git history, was that no content module could be changed without also
|
|
23
|
+
* changing the server: its theme module and its server co-changed in 71% of commits touching the
|
|
24
|
+
* former.
|
|
25
|
+
*
|
|
26
|
+
* A package's `exports` map is exactly the enforcement a single `src/` tree cannot provide: a
|
|
27
|
+
* consumer of `@jini-ai/cms/core` physically cannot reach a Node adapter, and `/core` physically
|
|
28
|
+
* cannot import a transport type, because the module resolver refuses it. Keep it that way — if a
|
|
29
|
+
* core module wants something from `/server`, the dependency is pointing the wrong way and the fix
|
|
30
|
+
* is a port (interface) in core, not a widened export.
|
|
31
|
+
*
|
|
32
|
+
* ## Why the barrel does not re-export `./commands/appliers`
|
|
33
|
+
*
|
|
34
|
+
* There is no `appliers` module here, and that is deliberate rather than an oversight. In the
|
|
35
|
+
* source repo the equivalent barrel re-exported an inverse-applier registry that named two specific
|
|
36
|
+
* content features by import. Because every domain's tool layer reaches the kernel, that single
|
|
37
|
+
* re-export put a dependency on those two features into every domain module in the tree — the
|
|
38
|
+
* measured reason no domain could be extracted on its own. A per-entity applier registry belongs
|
|
39
|
+
* behind a registration call the host makes, not behind a kernel barrel.
|
|
40
|
+
*/
|
|
41
|
+
export * from './commands/command.js';
|
|
42
|
+
export * from './tools/registration-kit.js';
|
|
43
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AA0BH,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Core port contracts for the CMS runtime.
|
|
3
|
+
*
|
|
4
|
+
* Purpose:
|
|
5
|
+
* Defines the stable interfaces that domain/application code depends on.
|
|
6
|
+
*
|
|
7
|
+
* How it relates to the project:
|
|
8
|
+
* - `features/*` import these contracts to stay framework/provider-agnostic.
|
|
9
|
+
* - `core/memory-bus.ts` provides in-memory implementations for local dev/tests.
|
|
10
|
+
* - `core/outbox-worker.ts` orchestrates reliable async delivery using these ports.
|
|
11
|
+
* - `server/app.ts` composes concrete implementations and runs the slice.
|
|
12
|
+
*
|
|
13
|
+
* Architectural role:
|
|
14
|
+
* This file is the dependency inversion seam. Concrete infrastructure can change
|
|
15
|
+
* without changing feature logic as long as implementations satisfy these types.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Shared primitives and runtime ports used by the CMS core.
|
|
19
|
+
*
|
|
20
|
+
* Design goal:
|
|
21
|
+
* Core/domain code depends on interfaces from this file only, never on concrete
|
|
22
|
+
* infrastructure SDKs or framework-specific implementations.
|
|
23
|
+
*/
|
|
24
|
+
export type UUID = string;
|
|
25
|
+
export type ISODateTime = string;
|
|
26
|
+
export type JsonPrimitive = string | number | boolean | null;
|
|
27
|
+
export type JsonValue = JsonPrimitive | JsonObject | JsonArray;
|
|
28
|
+
export interface JsonObject {
|
|
29
|
+
[key: string]: JsonValue;
|
|
30
|
+
}
|
|
31
|
+
export type JsonArray = JsonValue[];
|
|
32
|
+
/**
|
|
33
|
+
* Immutable domain event emitted by synchronous command handlers and delivered
|
|
34
|
+
* asynchronously via the outbox pipeline.
|
|
35
|
+
*/
|
|
36
|
+
export interface DomainEvent<TPayload = Record<string, unknown>> {
|
|
37
|
+
/** Unique identifier for the event record. */
|
|
38
|
+
id: UUID;
|
|
39
|
+
/** Stable event name, e.g. `workspace.created`. */
|
|
40
|
+
name: string;
|
|
41
|
+
/** ISO timestamp describing when the event was produced. */
|
|
42
|
+
occurredAt: ISODateTime;
|
|
43
|
+
/** Optional aggregate root identifier related to this event. */
|
|
44
|
+
aggregateId?: UUID;
|
|
45
|
+
/**
|
|
46
|
+
* Tenant/workspace boundary. Required: every domain event belongs to a
|
|
47
|
+
* workspace. Platform-level events must be a deliberate future
|
|
48
|
+
* decision, not an omission.
|
|
49
|
+
*/
|
|
50
|
+
workspaceId: UUID;
|
|
51
|
+
/**
|
|
52
|
+
* Principal (user or AI agent) that caused this event. Reserved change-set
|
|
53
|
+
* vocabulary; optional until the identity library lands.
|
|
54
|
+
*/
|
|
55
|
+
actorId?: UUID;
|
|
56
|
+
/**
|
|
57
|
+
* Change set this event belongs to, enabling propose/preview/apply/revert
|
|
58
|
+
* grouping. Reserved change-set vocabulary.
|
|
59
|
+
*/
|
|
60
|
+
changeSetId?: UUID;
|
|
61
|
+
/** Event-specific payload. */
|
|
62
|
+
payload: TPayload;
|
|
63
|
+
/** Free-form metadata (trace IDs, source, etc.). */
|
|
64
|
+
metadata?: Record<string, unknown>;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Event bus abstraction used by the application layer.
|
|
68
|
+
*
|
|
69
|
+
* This is intentionally generic so implementations can be in-memory, queue-based,
|
|
70
|
+
* broker-based, or provider-managed without changing domain logic.
|
|
71
|
+
*/
|
|
72
|
+
export interface EventBusPort {
|
|
73
|
+
/** Publish a single event to subscribers. */
|
|
74
|
+
publish<TPayload>(event: DomainEvent<TPayload>): Promise<void>;
|
|
75
|
+
/** Publish multiple events in order. */
|
|
76
|
+
publishBatch<TPayload>(events: Array<DomainEvent<TPayload>>): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Subscribe a handler to an event name.
|
|
79
|
+
* Returns an async unsubscriber function.
|
|
80
|
+
*/
|
|
81
|
+
subscribe<TPayload>(eventName: string, handler: (event: DomainEvent<TPayload>) => Promise<void>): Promise<() => Promise<void>>;
|
|
82
|
+
/**
|
|
83
|
+
* Subscribe a handler to every event published on this bus, regardless of name. Additive to
|
|
84
|
+
* `subscribe` — existing per-name callers are unaffected.
|
|
85
|
+
* The Integrations fan-out (`registerWebhookFanout`) is the first real consumer: it narrows
|
|
86
|
+
* by topic itself rather than requiring a fixed list of event names up front.
|
|
87
|
+
*/
|
|
88
|
+
subscribeAll(handler: (event: DomainEvent) => Promise<void>): Promise<() => Promise<void>>;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Persisted outbox row used for reliable async event delivery.
|
|
92
|
+
*/
|
|
93
|
+
export interface OutboxRecord {
|
|
94
|
+
/** Primary key for the outbox row (same as `event.id`). */
|
|
95
|
+
id: UUID;
|
|
96
|
+
/**
|
|
97
|
+
* The full event envelope. The outbox must preserve everything the producer
|
|
98
|
+
* emitted (workspaceId, aggregateId, actorId, occurredAt, metadata) so
|
|
99
|
+
* delivery replays the original event, not a reconstruction.
|
|
100
|
+
*/
|
|
101
|
+
event: DomainEvent;
|
|
102
|
+
/** Delivery lifecycle state. */
|
|
103
|
+
status: "pending" | "processing" | "delivered" | "failed";
|
|
104
|
+
/** Number of delivery attempts so far. */
|
|
105
|
+
attempts: number;
|
|
106
|
+
/** Retry eligibility timestamp. */
|
|
107
|
+
nextAttemptAt: ISODateTime;
|
|
108
|
+
/** Most recent delivery failure reason. */
|
|
109
|
+
lastError?: string;
|
|
110
|
+
/** Row creation timestamp. */
|
|
111
|
+
createdAt: ISODateTime;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Reliable outbox contract.
|
|
115
|
+
*
|
|
116
|
+
* Command handlers enqueue events here in the same unit of work as the write.
|
|
117
|
+
* A worker later claims and delivers rows to the event bus.
|
|
118
|
+
*/
|
|
119
|
+
export interface OutboxPort {
|
|
120
|
+
/** Append an event for later delivery. */
|
|
121
|
+
enqueue(event: DomainEvent): Promise<void>;
|
|
122
|
+
/** Claim pending rows for processing. */
|
|
123
|
+
claimPending(batchSize: number, nowIso: ISODateTime): Promise<OutboxRecord[]>;
|
|
124
|
+
/** Mark a row as delivered. */
|
|
125
|
+
markDelivered(id: UUID): Promise<void>;
|
|
126
|
+
/** Mark a row as failed and set next retry time. */
|
|
127
|
+
markFailed(id: UUID, error: string, nextAttemptAt: ISODateTime): Promise<void>;
|
|
128
|
+
}
|
|
129
|
+
/** Clock abstraction to make time deterministic in tests. */
|
|
130
|
+
export interface ClockPort {
|
|
131
|
+
/** Current wall-clock time as ISO string. */
|
|
132
|
+
nowIso(): ISODateTime;
|
|
133
|
+
}
|
|
134
|
+
/** ID generator abstraction to keep ID strategy swappable and testable. */
|
|
135
|
+
export interface IdGeneratorPort {
|
|
136
|
+
/** Create a new globally unique ID. */
|
|
137
|
+
newId(): UUID;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=ports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/core/ports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/core/ports.ts"],"names":[],"mappings":""}
|