@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,419 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Identity's half of the agent-tool authorization wiring: maps `agent-tools.ts`'s fifteen catalog
|
|
3
|
+
* entries onto the users/roles/policies transitions `grant-service.ts`/`admin-crud-service.ts`
|
|
4
|
+
* export, plus the three repo-backed reads, as `ToolRegistration`s.
|
|
5
|
+
*
|
|
6
|
+
* `ToolPolicy.authorize` is a pass-through for all fifteen (see `buildDomainRegistrations`) for the
|
|
7
|
+
* "one evaluator" reason: the gate is the domain layer's, reached identically by every
|
|
8
|
+
* tool kind — mutations through their own service function, which opens with the check, and reads
|
|
9
|
+
* through {@link assertIdentityReadAllowed}, which calls the domain's own exported
|
|
10
|
+
* `assertCallerHasAnyPermission` rather than re-deriving an OR gate. A second check here would be a
|
|
11
|
+
* duplicate evaluator, and one any non-tool caller of the same service function would bypass. See
|
|
12
|
+
* `assistant/__tests__/tool-registrations.identity-authorization.test.ts`.
|
|
13
|
+
*/
|
|
14
|
+
import { buildDomainRegistrations, indexCatalogById, } from "../core/tools/registration-kit.js";
|
|
15
|
+
import { parseIdentityToolInput } from "./agent-tool-input.js";
|
|
16
|
+
import { identityAgentToolCatalog } from "./agent-tools.js";
|
|
17
|
+
import { assertCallerHasAnyPermission, assignRole, attachPolicy, createPolicy, createRole, createUser } from "./grant-service.js";
|
|
18
|
+
import { deletePolicy, deleteRole, disablePrincipal, enablePrincipal, updatePolicy, updateRole, updateUser } from "./admin-crud-service.js";
|
|
19
|
+
const CATALOG_BY_ID = indexCatalogById(identityAgentToolCatalog);
|
|
20
|
+
/**
|
|
21
|
+
* Assembles `auth-service.ts`'s `IdentityRepos` bag from {@link IdentityToolDeps}'s flat fields — a
|
|
22
|
+
* local duplicate of `server/routes/admin/users/deps.ts`'s `identityReposFrom` rather than an import
|
|
23
|
+
* of it, for the same reason `features/settings/tool-registrations.ts`'s header gives for
|
|
24
|
+
* duplicating `toWriteServiceDeps`: importing from the HTTP admin layer would invert this codebase's
|
|
25
|
+
* ports/adapters direction. It is a field mapping, not logic, so the two copies carry no behavioral
|
|
26
|
+
* drift risk.
|
|
27
|
+
*/
|
|
28
|
+
function identityReposFrom(deps) {
|
|
29
|
+
return {
|
|
30
|
+
principals: deps.principalRepo,
|
|
31
|
+
users: deps.userRepo,
|
|
32
|
+
sessions: deps.sessionRepo,
|
|
33
|
+
roles: deps.roleRepo,
|
|
34
|
+
policies: deps.policyRepo,
|
|
35
|
+
policyPermissions: deps.policyPermissionRepo,
|
|
36
|
+
rolePolicies: deps.rolePolicyRepo,
|
|
37
|
+
principalRoles: deps.principalRoleRepo,
|
|
38
|
+
principalPolicies: deps.principalPolicyRepo,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/** Assembles `grant-service.ts`'s/`admin-crud-service.ts`'s `AuthServiceDeps` bag from
|
|
42
|
+
* {@link IdentityToolDeps} — the local twin of `identityReposFrom` just above. */
|
|
43
|
+
function identityServiceDepsFrom(deps) {
|
|
44
|
+
return {
|
|
45
|
+
repos: identityReposFrom(deps),
|
|
46
|
+
hasher: deps.passwordHasher,
|
|
47
|
+
clock: deps.clock,
|
|
48
|
+
idGen: deps.idGen,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* This wiring layer's OWN risk classification, authored from what each handler below actually
|
|
53
|
+
* calls. See `DerivedRiskByToolId` in the kit for why it is independent of the catalog's own
|
|
54
|
+
* `sideEffects` declaration.
|
|
55
|
+
*/
|
|
56
|
+
export const identityDerivedRisk = new Map([
|
|
57
|
+
// -> authorize() + repo reads only; no save on any path.
|
|
58
|
+
["identity_user_list", "none"],
|
|
59
|
+
["identity_role_list", "none"],
|
|
60
|
+
["identity_policy_list", "none"],
|
|
61
|
+
// -> createUser (grant-service.ts): saves a principal row AND a users row (credential).
|
|
62
|
+
["identity_user_create", "mutates-durable-state"],
|
|
63
|
+
// -> updateUser (admin-crud-service.ts): users.save, email field only.
|
|
64
|
+
["identity_user_update_email", "mutates-durable-state"],
|
|
65
|
+
// -> disablePrincipal (admin-crud-service.ts): status flip, guarded by the INV-08 owner floor.
|
|
66
|
+
["identity_user_disable", "mutates-durable-state"],
|
|
67
|
+
// -> enablePrincipal (admin-crud-service.ts): status flip back to active.
|
|
68
|
+
["identity_user_enable", "mutates-durable-state"],
|
|
69
|
+
// -> createRole (grant-service.ts): roles.save, always isBuiltin=false.
|
|
70
|
+
["identity_role_create", "mutates-durable-state"],
|
|
71
|
+
// -> assignRole (grant-service.ts): principalRoles.save behind the INV-07 grant clamp. The one
|
|
72
|
+
// identity tool that confers permissions, hence the heaviest of these.
|
|
73
|
+
["identity_role_assign", "mutates-durable-state"],
|
|
74
|
+
// -> updateRole (admin-crud-service.ts): roles.save, refuses built-ins.
|
|
75
|
+
["identity_role_rename", "mutates-durable-state"],
|
|
76
|
+
// -> deleteRole (admin-crud-service.ts): roles.delete, refuses built-ins and referenced roles.
|
|
77
|
+
["identity_role_delete", "mutates-durable-state"],
|
|
78
|
+
// -> createPolicy (grant-service.ts): policies.save, always isBuiltin=false/isFrozen=false.
|
|
79
|
+
["identity_policy_create", "mutates-durable-state"],
|
|
80
|
+
// -> updatePolicy (admin-crud-service.ts): policies.save, refuses built-in/frozen.
|
|
81
|
+
["identity_policy_update", "mutates-durable-state"],
|
|
82
|
+
// -> deletePolicy (admin-crud-service.ts): policyPermissions.deleteByPolicyId + policies.delete,
|
|
83
|
+
// refuses built-in/frozen and still-referenced policies.
|
|
84
|
+
["identity_policy_delete", "mutates-durable-state"],
|
|
85
|
+
// -> attachPolicy (grant-service.ts): principalPolicies.save behind the INV-07 grant clamp — the
|
|
86
|
+
// direct-grant counterpart to identity_role_assign, same weight.
|
|
87
|
+
["identity_policy_attach", "mutates-durable-state"],
|
|
88
|
+
]);
|
|
89
|
+
/**
|
|
90
|
+
* Upper bound on the roster `identity_user_list` will fan out over.
|
|
91
|
+
*
|
|
92
|
+
* `routes/admin/users/list.ts` does the same O(n) per-user fan-out uncapped, on the documented
|
|
93
|
+
* "operator-managed roster, not member/content scale" assumption. That assumption is fine for a
|
|
94
|
+
* human screen and NOT fine here for a different reason than scale: this result is spent as model
|
|
95
|
+
* context, so an unexpectedly large roster would silently consume the run's context window. The
|
|
96
|
+
* cap truncates and SAYS SO in the payload rather than failing, so a caller that hits it can still
|
|
97
|
+
* work with what it got and knows not to treat the list as complete.
|
|
98
|
+
*/
|
|
99
|
+
const IDENTITY_USER_LIST_MAX = 200;
|
|
100
|
+
function requireIdentityCatalogEntry(toolId) {
|
|
101
|
+
const entry = CATALOG_BY_ID.get(toolId);
|
|
102
|
+
if (!entry)
|
|
103
|
+
throw new Error(`identity/tool-registrations.ts: catalog has no entry named '${toolId}' — identity/agent-tools.ts drifted`);
|
|
104
|
+
return entry;
|
|
105
|
+
}
|
|
106
|
+
function identityInput(toolId, input) {
|
|
107
|
+
const entry = requireIdentityCatalogEntry(toolId);
|
|
108
|
+
const parsed = parseIdentityToolInput({ schema: entry.inputSchema, input });
|
|
109
|
+
if (!parsed.ok) {
|
|
110
|
+
const recovery = "Fix the input and retry — this will not resolve on retry without an input change.";
|
|
111
|
+
throw new Error(`${parsed.error.message}. ${recovery} Schema for '${toolId}': ${JSON.stringify(entry.inputSchema)}`);
|
|
112
|
+
}
|
|
113
|
+
const value = parsed.value;
|
|
114
|
+
return {
|
|
115
|
+
req(field) {
|
|
116
|
+
const found = value[field];
|
|
117
|
+
if (found === undefined) {
|
|
118
|
+
throw new Error(`identity tool '${toolId}': the handler reads '${field}' as required, but the published inputSchema does not mark it required — add it to that schema's 'required' list, or read it with opt() and handle its absence`);
|
|
119
|
+
}
|
|
120
|
+
return found;
|
|
121
|
+
},
|
|
122
|
+
opt(field) {
|
|
123
|
+
return value[field];
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/** The permission set a tool's catalog entry declares — both halves when the gate is an OR. */
|
|
128
|
+
function identityPermissionsFor(toolId) {
|
|
129
|
+
const { authorization } = requireIdentityCatalogEntry(toolId);
|
|
130
|
+
return authorization.orPermission ? [authorization.permission, authorization.orPermission] : [authorization.permission];
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* The gate for the two READ tools.
|
|
134
|
+
*
|
|
135
|
+
* The mutating tools need no equivalent: their domain function opens with this same
|
|
136
|
+
* `assertCallerHasAnyPermission` call itself. Reads have no service-layer function to inherit it
|
|
137
|
+
* from — `identity` exports grant-writing transitions, not read wrappers, which is why
|
|
138
|
+
* `routes/admin/users/list.ts` also gates in the route and then reads the repo ports directly.
|
|
139
|
+
* This calls the domain's own exported helper rather than re-deriving an OR gate (and rather than
|
|
140
|
+
* the kit's generic `requireToolPermission`, which cannot express an OR), so the single
|
|
141
|
+
* evaluator is reached by an identical path from both tool kinds.
|
|
142
|
+
*/
|
|
143
|
+
async function assertIdentityReadAllowed(routeDeps, toolId, callerPrincipalId) {
|
|
144
|
+
await assertCallerHasAnyPermission({
|
|
145
|
+
deps: identityServiceDepsFrom(routeDeps),
|
|
146
|
+
workspaceId: routeDeps.workspaceId,
|
|
147
|
+
callerPrincipalId,
|
|
148
|
+
permissions: identityPermissionsFor(toolId),
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Projects a principal + its credential row into the explicit model-facing shape.
|
|
153
|
+
*
|
|
154
|
+
* The load-bearing omission is `UserRecord.passwordHash`: INV-05 keeps hashed secrets server-side,
|
|
155
|
+
* and this view has no field for one, so there is nothing to forward by accident even if a future
|
|
156
|
+
* `UserRecord` field is added. `workspaceId` is dropped for the same reason content-types'
|
|
157
|
+
* `toContentTypeView` drops it — the agent is scoped to one workspace it cannot change, so echoing
|
|
158
|
+
* the id spends model attention on a value that can never inform a decision.
|
|
159
|
+
*
|
|
160
|
+
* @param record.roleIds - The principal's role assignments, passed in rather than resolved here so
|
|
161
|
+
* the projection stays pure and the caller decides whether the extra repo read is worth it.
|
|
162
|
+
* @returns The model-facing view. `email` is present only when set, so a user without one carries
|
|
163
|
+
* no always-undefined key.
|
|
164
|
+
* @complexity O(r) in the role count (the array is copied so the caller cannot alias domain state).
|
|
165
|
+
* @overallScore 100
|
|
166
|
+
*/
|
|
167
|
+
function toIdentityUserView(record) {
|
|
168
|
+
const view = {
|
|
169
|
+
principalId: record.principal.id,
|
|
170
|
+
username: record.user.username,
|
|
171
|
+
status: record.principal.status,
|
|
172
|
+
roleIds: [...record.roleIds],
|
|
173
|
+
};
|
|
174
|
+
if (record.user.email)
|
|
175
|
+
view.email = record.user.email;
|
|
176
|
+
return view;
|
|
177
|
+
}
|
|
178
|
+
/** What an identity role tool returns to the model. `isBuiltin` is kept because it is what predicts a rename/delete refusal. */
|
|
179
|
+
function toIdentityRoleView(role) {
|
|
180
|
+
return { id: role.id, name: role.name, isBuiltin: role.isBuiltin };
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* What an identity policy tool returns to the model. `isBuiltin`/`isFrozen` are both kept because
|
|
184
|
+
* together they are what predicts an update/delete/write-permission refusal (mirrors
|
|
185
|
+
* `toIdentityRoleView`'s `isBuiltin`, extended for the second immutability flag policies carry that
|
|
186
|
+
* roles do not). `description` is present only when set, matching `toIdentityUserView`'s `email`.
|
|
187
|
+
*/
|
|
188
|
+
function toIdentityPolicyView(policy) {
|
|
189
|
+
const view = {
|
|
190
|
+
id: policy.id,
|
|
191
|
+
name: policy.name,
|
|
192
|
+
isBuiltin: policy.isBuiltin,
|
|
193
|
+
isFrozen: policy.isFrozen,
|
|
194
|
+
};
|
|
195
|
+
if (policy.description)
|
|
196
|
+
view.description = policy.description;
|
|
197
|
+
return view;
|
|
198
|
+
}
|
|
199
|
+
/** Read a principal's role-assignment ids. Shared by every tool that returns a user view. */
|
|
200
|
+
async function roleIdsFor(routeDeps, principalId) {
|
|
201
|
+
const links = await routeDeps.principalRoleRepo.listByPrincipalId({ workspaceId: routeDeps.workspaceId, principalId });
|
|
202
|
+
return links.map((link) => link.roleId);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Load the `UserRecord` paired with a principal the domain just returned.
|
|
206
|
+
*
|
|
207
|
+
* Every `kind='user'` principal has one by construction (CREATE_USER's atomicity guarantee), so
|
|
208
|
+
* the miss is defensive rather than an expected path — the same reasoning `routes/admin/users/
|
|
209
|
+
* disable.ts` records for its identical second lookup.
|
|
210
|
+
*/
|
|
211
|
+
async function requireUserRecord(routeDeps, principalId) {
|
|
212
|
+
const user = await routeDeps.userRepo.findByPrincipalId({ workspaceId: routeDeps.workspaceId, principalId });
|
|
213
|
+
if (!user)
|
|
214
|
+
throw new Error(`user '${principalId}' was not found`);
|
|
215
|
+
return user;
|
|
216
|
+
}
|
|
217
|
+
export function buildIdentityRegistrations(routeDeps) {
|
|
218
|
+
/** Assembled per call, not per handler, because every mutating handler needs the identical bag. */
|
|
219
|
+
const serviceDeps = () => identityServiceDepsFrom(routeDeps);
|
|
220
|
+
const handlers = {
|
|
221
|
+
identity_user_list: async (ctx) => {
|
|
222
|
+
identityInput("identity_user_list", ctx.input);
|
|
223
|
+
await assertIdentityReadAllowed(routeDeps, "identity_user_list", ctx.principal.id);
|
|
224
|
+
const principals = await routeDeps.principalRepo.list({ workspaceId: routeDeps.workspaceId });
|
|
225
|
+
// Humans only — `system`/`agent`/`api_key` principals (including the disabled `user-local`
|
|
226
|
+
// seed row) are not what "users" means on this surface, matching `routes/.../list.ts`.
|
|
227
|
+
const humans = principals.filter((principal) => principal.kind === "user");
|
|
228
|
+
const page = humans.slice(0, IDENTITY_USER_LIST_MAX);
|
|
229
|
+
const users = await Promise.all(page.map(async (principal) => {
|
|
230
|
+
const user = await routeDeps.userRepo.findByPrincipalId({ workspaceId: routeDeps.workspaceId, principalId: principal.id });
|
|
231
|
+
if (!user)
|
|
232
|
+
return null;
|
|
233
|
+
return toIdentityUserView({ principal, user, roleIds: await roleIdsFor(routeDeps, principal.id) });
|
|
234
|
+
}));
|
|
235
|
+
const listed = users.filter((user) => user !== null);
|
|
236
|
+
return humans.length > page.length
|
|
237
|
+
? { users: listed, truncated: true, totalCount: humans.length }
|
|
238
|
+
: { users: listed };
|
|
239
|
+
},
|
|
240
|
+
identity_role_list: async (ctx) => {
|
|
241
|
+
identityInput("identity_role_list", ctx.input);
|
|
242
|
+
await assertIdentityReadAllowed(routeDeps, "identity_role_list", ctx.principal.id);
|
|
243
|
+
const roles = await routeDeps.roleRepo.list({ workspaceId: routeDeps.workspaceId });
|
|
244
|
+
return { roles: roles.map(toIdentityRoleView) };
|
|
245
|
+
},
|
|
246
|
+
identity_policy_list: async (ctx) => {
|
|
247
|
+
identityInput("identity_policy_list", ctx.input);
|
|
248
|
+
await assertIdentityReadAllowed(routeDeps, "identity_policy_list", ctx.principal.id);
|
|
249
|
+
const policies = await routeDeps.policyRepo.list({ workspaceId: routeDeps.workspaceId });
|
|
250
|
+
return { policies: policies.map(toIdentityPolicyView) };
|
|
251
|
+
},
|
|
252
|
+
identity_user_create: async (ctx) => {
|
|
253
|
+
const input = identityInput("identity_user_create", ctx.input);
|
|
254
|
+
const { principal, user } = await createUser({
|
|
255
|
+
deps: serviceDeps(),
|
|
256
|
+
input: {
|
|
257
|
+
workspaceId: routeDeps.workspaceId,
|
|
258
|
+
callerPrincipalId: ctx.principal.id,
|
|
259
|
+
username: input.req("username"),
|
|
260
|
+
email: input.opt("email"),
|
|
261
|
+
password: input.req("password"),
|
|
262
|
+
},
|
|
263
|
+
});
|
|
264
|
+
// A brand-new principal has no assignments yet, so this is [] by construction, not a read.
|
|
265
|
+
return { user: toIdentityUserView({ principal, user, roleIds: [] }) };
|
|
266
|
+
},
|
|
267
|
+
identity_user_update_email: async (ctx) => {
|
|
268
|
+
const input = identityInput("identity_user_update_email", ctx.input);
|
|
269
|
+
const { user } = await updateUser({
|
|
270
|
+
deps: serviceDeps(),
|
|
271
|
+
input: {
|
|
272
|
+
workspaceId: routeDeps.workspaceId,
|
|
273
|
+
callerPrincipalId: ctx.principal.id,
|
|
274
|
+
principalId: input.req("principalId"),
|
|
275
|
+
// Absent stays absent: `updateUser` treats a falsy email as "clear", which is exactly
|
|
276
|
+
// what this tool's description tells the model omitting it does.
|
|
277
|
+
email: input.opt("email"),
|
|
278
|
+
},
|
|
279
|
+
});
|
|
280
|
+
const principal = await routeDeps.principalRepo.findById({ workspaceId: routeDeps.workspaceId, id: input.req("principalId") });
|
|
281
|
+
if (!principal)
|
|
282
|
+
throw new Error(`principal '${input.req("principalId")}' was not found`);
|
|
283
|
+
return { user: toIdentityUserView({ principal, user, roleIds: await roleIdsFor(routeDeps, principal.id) }) };
|
|
284
|
+
},
|
|
285
|
+
identity_user_disable: async (ctx) => {
|
|
286
|
+
const input = identityInput("identity_user_disable", ctx.input);
|
|
287
|
+
const { principal } = await disablePrincipal({
|
|
288
|
+
deps: serviceDeps(),
|
|
289
|
+
input: {
|
|
290
|
+
workspaceId: routeDeps.workspaceId,
|
|
291
|
+
callerPrincipalId: ctx.principal.id,
|
|
292
|
+
principalId: input.req("principalId"),
|
|
293
|
+
// Resolved by the caller, per `disablePrincipal`'s own contract — the same
|
|
294
|
+
// `await deps.ownerPrincipalId` the human disable route performs.
|
|
295
|
+
seededOwnerPrincipalId: await routeDeps.ownerPrincipalId,
|
|
296
|
+
},
|
|
297
|
+
});
|
|
298
|
+
const user = await requireUserRecord(routeDeps, principal.id);
|
|
299
|
+
return { user: toIdentityUserView({ principal, user, roleIds: await roleIdsFor(routeDeps, principal.id) }) };
|
|
300
|
+
},
|
|
301
|
+
identity_user_enable: async (ctx) => {
|
|
302
|
+
const input = identityInput("identity_user_enable", ctx.input);
|
|
303
|
+
const { principal } = await enablePrincipal({
|
|
304
|
+
deps: serviceDeps(),
|
|
305
|
+
input: { workspaceId: routeDeps.workspaceId, callerPrincipalId: ctx.principal.id, principalId: input.req("principalId") },
|
|
306
|
+
});
|
|
307
|
+
const user = await requireUserRecord(routeDeps, principal.id);
|
|
308
|
+
return { user: toIdentityUserView({ principal, user, roleIds: await roleIdsFor(routeDeps, principal.id) }) };
|
|
309
|
+
},
|
|
310
|
+
identity_role_create: async (ctx) => {
|
|
311
|
+
const input = identityInput("identity_role_create", ctx.input);
|
|
312
|
+
const { role } = await createRole({
|
|
313
|
+
deps: serviceDeps(),
|
|
314
|
+
input: { workspaceId: routeDeps.workspaceId, callerPrincipalId: ctx.principal.id, name: input.req("name") },
|
|
315
|
+
});
|
|
316
|
+
return { role: toIdentityRoleView(role) };
|
|
317
|
+
},
|
|
318
|
+
identity_role_assign: async (ctx) => {
|
|
319
|
+
const input = identityInput("identity_role_assign", ctx.input);
|
|
320
|
+
const { assignment } = await assignRole({
|
|
321
|
+
deps: serviceDeps(),
|
|
322
|
+
input: {
|
|
323
|
+
workspaceId: routeDeps.workspaceId,
|
|
324
|
+
callerPrincipalId: ctx.principal.id,
|
|
325
|
+
principalId: input.req("principalId"),
|
|
326
|
+
roleId: input.req("roleId"),
|
|
327
|
+
},
|
|
328
|
+
});
|
|
329
|
+
// The join row's own id is not addressable by any other tool, so it is dropped; what the
|
|
330
|
+
// model needs back is confirmation of WHICH pair is now linked.
|
|
331
|
+
return { assigned: { principalId: assignment.principalId, roleId: assignment.roleId } };
|
|
332
|
+
},
|
|
333
|
+
identity_role_rename: async (ctx) => {
|
|
334
|
+
const input = identityInput("identity_role_rename", ctx.input);
|
|
335
|
+
const { role } = await updateRole({
|
|
336
|
+
deps: serviceDeps(),
|
|
337
|
+
input: { workspaceId: routeDeps.workspaceId, callerPrincipalId: ctx.principal.id, roleId: input.req("roleId"), name: input.req("name") },
|
|
338
|
+
});
|
|
339
|
+
return { role: toIdentityRoleView(role) };
|
|
340
|
+
},
|
|
341
|
+
identity_role_delete: async (ctx) => {
|
|
342
|
+
const input = identityInput("identity_role_delete", ctx.input);
|
|
343
|
+
await deleteRole({
|
|
344
|
+
deps: serviceDeps(),
|
|
345
|
+
input: { workspaceId: routeDeps.workspaceId, callerPrincipalId: ctx.principal.id, roleId: input.req("roleId") },
|
|
346
|
+
});
|
|
347
|
+
// `deleteRole` resolves void; an empty tool result would read to the model as "nothing
|
|
348
|
+
// happened", so the deleted id is echoed as the acknowledgement.
|
|
349
|
+
return { deleted: { roleId: input.req("roleId") } };
|
|
350
|
+
},
|
|
351
|
+
identity_policy_create: async (ctx) => {
|
|
352
|
+
const input = identityInput("identity_policy_create", ctx.input);
|
|
353
|
+
const { policy } = await createPolicy({
|
|
354
|
+
deps: serviceDeps(),
|
|
355
|
+
input: {
|
|
356
|
+
workspaceId: routeDeps.workspaceId,
|
|
357
|
+
callerPrincipalId: ctx.principal.id,
|
|
358
|
+
name: input.req("name"),
|
|
359
|
+
// Absent stays absent: `input.description` is only present when the caller supplied it
|
|
360
|
+
// (`parseIdentityToolInput` omits absent optional keys entirely), so this passes through
|
|
361
|
+
// unchanged rather than coercing a caller-supplied empty string to "no description".
|
|
362
|
+
description: input.opt("description"),
|
|
363
|
+
},
|
|
364
|
+
});
|
|
365
|
+
return { policy: toIdentityPolicyView(policy) };
|
|
366
|
+
},
|
|
367
|
+
identity_policy_update: async (ctx) => {
|
|
368
|
+
const input = identityInput("identity_policy_update", ctx.input);
|
|
369
|
+
const { policy } = await updatePolicy({
|
|
370
|
+
deps: serviceDeps(),
|
|
371
|
+
input: {
|
|
372
|
+
workspaceId: routeDeps.workspaceId,
|
|
373
|
+
callerPrincipalId: ctx.principal.id,
|
|
374
|
+
policyId: input.req("policyId"),
|
|
375
|
+
// Same absent-stays-absent reasoning as identity_policy_create — `updatePolicy` itself
|
|
376
|
+
// distinguishes undefined ("leave unchanged") from an explicit empty string.
|
|
377
|
+
name: input.opt("name"),
|
|
378
|
+
description: input.opt("description"),
|
|
379
|
+
},
|
|
380
|
+
});
|
|
381
|
+
return { policy: toIdentityPolicyView(policy) };
|
|
382
|
+
},
|
|
383
|
+
identity_policy_delete: async (ctx) => {
|
|
384
|
+
const input = identityInput("identity_policy_delete", ctx.input);
|
|
385
|
+
await deletePolicy({
|
|
386
|
+
deps: serviceDeps(),
|
|
387
|
+
input: { workspaceId: routeDeps.workspaceId, callerPrincipalId: ctx.principal.id, policyId: input.req("policyId") },
|
|
388
|
+
});
|
|
389
|
+
// `deletePolicy` resolves void; an empty tool result would read to the model as "nothing
|
|
390
|
+
// happened", so the deleted id is echoed as the acknowledgement (mirrors identity_role_delete).
|
|
391
|
+
return { deleted: { policyId: input.req("policyId") } };
|
|
392
|
+
},
|
|
393
|
+
identity_policy_attach: async (ctx) => {
|
|
394
|
+
const input = identityInput("identity_policy_attach", ctx.input);
|
|
395
|
+
const { attachment } = await attachPolicy({
|
|
396
|
+
deps: serviceDeps(),
|
|
397
|
+
input: {
|
|
398
|
+
workspaceId: routeDeps.workspaceId,
|
|
399
|
+
callerPrincipalId: ctx.principal.id,
|
|
400
|
+
principalId: input.req("principalId"),
|
|
401
|
+
policyId: input.req("policyId"),
|
|
402
|
+
},
|
|
403
|
+
});
|
|
404
|
+
// The join row's own id is not addressable by any other tool, so it is dropped; what the
|
|
405
|
+
// model needs back is confirmation of WHICH pair is now linked (mirrors identity_role_assign).
|
|
406
|
+
return { attached: { principalId: attachment.principalId, policyId: attachment.policyId } };
|
|
407
|
+
},
|
|
408
|
+
};
|
|
409
|
+
// No `unwiredToolIds`: identity wires its ENTIRE catalog (which is why its own
|
|
410
|
+
// `AgentToolDefinition` makes `inputSchema` required rather than optional).
|
|
411
|
+
return buildDomainRegistrations({
|
|
412
|
+
domain: "identity",
|
|
413
|
+
catalogModule: "identity/agent-tools.ts",
|
|
414
|
+
catalog: CATALOG_BY_ID,
|
|
415
|
+
handlers,
|
|
416
|
+
derivedRisk: identityDerivedRisk,
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
//# sourceMappingURL=tool-registrations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registrations.js","sourceRoot":"","sources":["../../src/identity/tool-registrations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import type { ISODateTime, UUID } from "../core/ports.js";
|
|
2
|
+
/**
|
|
3
|
+
* @file Core domain types for the `identity` library.
|
|
4
|
+
*
|
|
5
|
+
* Purpose:
|
|
6
|
+
* Type-only definitions for the principal-centric identity & authorization
|
|
7
|
+
* model: every actor (human user, AI agent, API key, system) is rooted as a
|
|
8
|
+
* `PrincipalRecord`; humans get RBAC (`roles` -> `policies` -> permissions);
|
|
9
|
+
* machines get direct policy grants (`principal_policies`). Mirrors the
|
|
10
|
+
* `features/post` / `members` conventions: records + workspace-scoped ports
|
|
11
|
+
* live in `ports.ts`, no feature logic here.
|
|
12
|
+
*
|
|
13
|
+
* Scope note (core path, this pass):
|
|
14
|
+
* `agent`/`api_key` principal *lifecycle* transitions (CREATE_PRINCIPAL,
|
|
15
|
+
* ISSUE_API_KEY, ASSIGN_ROLE, ATTACH_POLICY, WRITE_POLICY_PERMISSION,
|
|
16
|
+
* DISABLE_PRINCIPAL) are OUT of scope for this pass (deferred — see the
|
|
17
|
+
* Programmer handoff). The `kind` enum and table shapes are still built to
|
|
18
|
+
* the full target schema so those transitions are additive later,
|
|
19
|
+
* not a repaint.
|
|
20
|
+
*/
|
|
21
|
+
/** Every actor is one of these. Only `user`/`system` are populated this pass. */
|
|
22
|
+
export type PrincipalKind = "user" | "agent" | "api_key" | "system";
|
|
23
|
+
/** Disable-only lifecycle (REQ-11/INV-02) — there is no hard-delete state. */
|
|
24
|
+
export type PrincipalStatus = "active" | "disabled";
|
|
25
|
+
/**
|
|
26
|
+
* Root identity row for every actor (REQ-01). `change_set.actorId` references
|
|
27
|
+
* a principal by composite `(workspaceId, id)` (REQ-10/INV-01).
|
|
28
|
+
*/
|
|
29
|
+
export interface PrincipalRecord {
|
|
30
|
+
id: UUID;
|
|
31
|
+
workspaceId: UUID;
|
|
32
|
+
kind: PrincipalKind;
|
|
33
|
+
displayName: string;
|
|
34
|
+
status: PrincipalStatus;
|
|
35
|
+
disabledAt?: ISODateTime | undefined;
|
|
36
|
+
createdAt: ISODateTime;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Human auth credentials. A `UserRecord` is only ever created together with a
|
|
40
|
+
* NEW `kind='user'` principal in the same transaction (REQ-01, MF-1) — never
|
|
41
|
+
* attached to a pre-existing principal. `username` is unique per workspace,
|
|
42
|
+
* compared case-insensitively and Unicode-NFC-normalized (behavior.spec §5).
|
|
43
|
+
*/
|
|
44
|
+
export interface UserRecord {
|
|
45
|
+
principalId: UUID;
|
|
46
|
+
workspaceId: UUID;
|
|
47
|
+
/** Stored pre-normalized (NFC + lowercase) so lookups are direct equality. */
|
|
48
|
+
username: string;
|
|
49
|
+
email?: string | undefined;
|
|
50
|
+
/** argon2id hash; the raw password is never stored (INV-05). */
|
|
51
|
+
passwordHash: string;
|
|
52
|
+
lastLoginAt?: ISODateTime | undefined;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Revocable server-side session (REQ-06). `tokenHash` is a hash of the opaque
|
|
56
|
+
* bearer value carried by the `HttpOnly`/`SameSite=Strict` cookie; the raw
|
|
57
|
+
* token is never persisted (INV-05). Lifetime is an **absolute** expiry fixed
|
|
58
|
+
* at creation (behavior.spec §4, RT-004) — no sliding renewal in v1.
|
|
59
|
+
*/
|
|
60
|
+
export interface SessionRecord {
|
|
61
|
+
id: UUID;
|
|
62
|
+
workspaceId: UUID;
|
|
63
|
+
principalId: UUID;
|
|
64
|
+
tokenHash: string;
|
|
65
|
+
createdAt: ISODateTime;
|
|
66
|
+
expiresAt: ISODateTime;
|
|
67
|
+
revokedAt?: ISODateTime;
|
|
68
|
+
ip?: string | undefined;
|
|
69
|
+
userAgent?: string | undefined;
|
|
70
|
+
}
|
|
71
|
+
/** Named RBAC role (REQ-02). Built-ins are seeded `isBuiltin=true`, immutable (INV-06). */
|
|
72
|
+
export interface RoleRecord {
|
|
73
|
+
id: UUID;
|
|
74
|
+
workspaceId: UUID;
|
|
75
|
+
name: string;
|
|
76
|
+
isBuiltin: boolean;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* A permission bundle (REQ-02). `isFrozen` is reserved for the API-key
|
|
80
|
+
* issuance-snapshot mechanism (REQ-08/F-054-01) — out of scope this pass, so
|
|
81
|
+
* every policy built here is `isFrozen=false`; the field exists so the schema
|
|
82
|
+
* is additive-ready, not a later repaint.
|
|
83
|
+
*/
|
|
84
|
+
export interface PolicyRecord {
|
|
85
|
+
id: UUID;
|
|
86
|
+
workspaceId: UUID;
|
|
87
|
+
name: string;
|
|
88
|
+
description?: string | undefined;
|
|
89
|
+
isBuiltin: boolean;
|
|
90
|
+
isFrozen: boolean;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* A single permission carried by a policy (REQ-02/REQ-03). `resourceType`
|
|
94
|
+
* null = unscoped; non-null = matches only when it equals `context.entityType`
|
|
95
|
+
* (REQ-04/AC-14). `constraintJson` non-null and uninterpretable => fail-closed
|
|
96
|
+
* deny (INV-03/AC-09) — the v1 evaluator interprets no constraint shape, so any
|
|
97
|
+
* non-null value here is treated as "cannot interpret."
|
|
98
|
+
*/
|
|
99
|
+
export interface PolicyPermissionRecord {
|
|
100
|
+
id: UUID;
|
|
101
|
+
workspaceId: UUID;
|
|
102
|
+
policyId: UUID;
|
|
103
|
+
/** Dotted catalog permission string, or `"*"` (owner built-in policy only). */
|
|
104
|
+
permission: string;
|
|
105
|
+
resourceType?: string | null;
|
|
106
|
+
constraintJson?: string | null;
|
|
107
|
+
}
|
|
108
|
+
/** Role -> policy join (REQ-02/REQ-10). Not user-writable in v1 (F-053-02) — seed-only rows. */
|
|
109
|
+
export interface RolePolicyRecord {
|
|
110
|
+
id: UUID;
|
|
111
|
+
workspaceId: UUID;
|
|
112
|
+
roleId: UUID;
|
|
113
|
+
policyId: UUID;
|
|
114
|
+
}
|
|
115
|
+
/** Principal -> role join, the human grant path (REQ-02/REQ-10). */
|
|
116
|
+
export interface PrincipalRoleRecord {
|
|
117
|
+
id: UUID;
|
|
118
|
+
workspaceId: UUID;
|
|
119
|
+
principalId: UUID;
|
|
120
|
+
roleId: UUID;
|
|
121
|
+
}
|
|
122
|
+
/** Principal -> policy direct grant, the machine grant path (REQ-02/REQ-08/REQ-10). */
|
|
123
|
+
export interface PrincipalPolicyRecord {
|
|
124
|
+
id: UUID;
|
|
125
|
+
workspaceId: UUID;
|
|
126
|
+
principalId: UUID;
|
|
127
|
+
policyId: UUID;
|
|
128
|
+
}
|
|
129
|
+
/** Raised on a malformed identity input (blank username, etc.). */
|
|
130
|
+
export declare class IdentityValidationError extends Error {
|
|
131
|
+
}
|
|
132
|
+
/** Raised when a referenced principal/user/role/policy is not found. */
|
|
133
|
+
export declare class IdentityNotFoundError extends Error {
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Raised on a unique-constraint clash (duplicate `username` in a workspace, AC-19). Also
|
|
137
|
+
* raised by `deleteRole`/`deletePolicy` (`admin-crud-service.ts`) when the target still has
|
|
138
|
+
* live references (INV-09, AC-31) — the same 409 `RESOURCE_CONFLICT` shape, a `details.field`
|
|
139
|
+
* distinguishes the two cases at the route layer (errors.spec.md §3).
|
|
140
|
+
*/
|
|
141
|
+
export declare class IdentityConflictError extends Error {
|
|
142
|
+
}
|
|
143
|
+
/** Raised by `login()` on bad credentials, a disabled principal, or a blank field (AC-02). */
|
|
144
|
+
export declare class AuthInvalidCredentialsError extends Error {
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* REQ-11/INV-08 — raised by `disablePrincipal` when the target is the seeded owner
|
|
148
|
+
* principal, or when disabling would drop the workspace's active owner-`*` count to zero. Maps to
|
|
149
|
+
* 409 `OWNER_REQUIRED` (errors.spec.md §2) — a pre-existing registered code that had no HTTP
|
|
150
|
+
* emission site until this amendment gave `DISABLE_PRINCIPAL` a route.
|
|
151
|
+
*/
|
|
152
|
+
export declare class OwnerRequiredError extends Error {
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* REQ-03/INV-07 — raised by `writePolicyPermission` when the permission string is
|
|
156
|
+
* not in the registered catalog. Maps to 400 `PERMISSION_UNKNOWN` (errors.spec.md §2) — kept
|
|
157
|
+
* distinct from `IdentityValidationError` (plain `VALIDATION_ERROR`) so the route can emit the
|
|
158
|
+
* correct typed code without string-matching the message.
|
|
159
|
+
*/
|
|
160
|
+
export declare class PermissionUnknownError extends Error {
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Raised when a grant-writing transition's caller-permission gate fails
|
|
164
|
+
* (e.g. `ASSIGN_ROLE` called by a principal without `role.manage`). Maps to
|
|
165
|
+
* 403 `FORBIDDEN` (errors.spec.md §2) — distinct from `GrantExceedsIssuerError`,
|
|
166
|
+
* which is the INV-07 clamp on the *grant's contents*, not the base gate.
|
|
167
|
+
*/
|
|
168
|
+
export declare class IdentityForbiddenError extends Error {
|
|
169
|
+
readonly permission: string;
|
|
170
|
+
readonly reason: string;
|
|
171
|
+
constructor(message: string, permission: string, reason: string);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Raised when a grant-writing transition (`ASSIGN_ROLE`, `ATTACH_POLICY`, and
|
|
175
|
+
* future `ISSUE_API_KEY`/`WRITE_POLICY_PERMISSION`) would confer a permission
|
|
176
|
+
* the caller does not itself hold unconstrained (INV-07 grant-authority
|
|
177
|
+
* clamp, feature.spec.md). Maps to 403 `GRANT_EXCEEDS_ISSUER`
|
|
178
|
+
* (errors.spec.md §2/§3) — `offendingPermissions` is the exact `details`
|
|
179
|
+
* payload shape that error code specifies.
|
|
180
|
+
*/
|
|
181
|
+
export declare class GrantExceedsIssuerError extends Error {
|
|
182
|
+
readonly offendingPermissions: string[];
|
|
183
|
+
constructor(message: string, offendingPermissions: string[]);
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/identity/types.ts"],"names":[],"mappings":"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"}
|