@weave-kit/engine 0.4.0 → 0.6.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/CHANGELOG.md +61 -0
- package/README.md +6 -6
- package/dist/adapters/auth/index.d.ts +4 -2
- package/dist/adapters/auth/index.d.ts.map +1 -1
- package/dist/adapters/auth/index.js +1 -0
- package/dist/adapters/auth/index.js.map +1 -1
- package/dist/adapters/auth/source.d.ts +4 -4
- package/dist/adapters/auth/source.d.ts.map +1 -1
- package/dist/adapters/auth/subject.d.ts +22 -0
- package/dist/adapters/auth/subject.d.ts.map +1 -0
- package/dist/adapters/auth/subject.js +42 -0
- package/dist/adapters/auth/subject.js.map +1 -0
- package/dist/adapters/auth/verify.d.ts +12 -0
- package/dist/adapters/auth/verify.d.ts.map +1 -0
- package/dist/adapters/auth/verify.js +2 -0
- package/dist/adapters/auth/verify.js.map +1 -0
- package/dist/adapters/events/index.d.ts +2 -1
- package/dist/adapters/events/index.d.ts.map +1 -1
- package/dist/adapters/events/index.js +2 -1
- package/dist/adapters/events/index.js.map +1 -1
- package/dist/adapters/mcp/generate.d.ts +3 -3
- package/dist/adapters/mcp/generate.d.ts.map +1 -1
- package/dist/adapters/mcp/generate.js +34 -11
- package/dist/adapters/mcp/generate.js.map +1 -1
- package/dist/adapters/mcp/guardrails.d.ts +1 -1
- package/dist/adapters/mcp/http.d.ts +3 -1
- package/dist/adapters/mcp/http.d.ts.map +1 -1
- package/dist/adapters/mcp/http.js +2 -2
- package/dist/adapters/mcp/http.js.map +1 -1
- package/dist/adapters/mcp/index.d.ts +13 -4
- package/dist/adapters/mcp/index.d.ts.map +1 -1
- package/dist/adapters/mcp/index.js +12 -8
- package/dist/adapters/mcp/index.js.map +1 -1
- package/dist/adapters/mcp/session.d.ts +5 -5
- package/dist/adapters/mcp/session.d.ts.map +1 -1
- package/dist/adapters/mcp/tools.d.ts +6 -0
- package/dist/adapters/mcp/tools.d.ts.map +1 -1
- package/dist/adapters/mcp/tools.js +38 -14
- package/dist/adapters/mcp/tools.js.map +1 -1
- package/dist/adapters/mcp/types.d.ts +3 -1
- package/dist/adapters/mcp/types.d.ts.map +1 -1
- package/dist/adapters/mcp/types.js +1 -1
- package/dist/adapters/mcp/types.js.map +1 -1
- package/dist/adapters/openapi/document.d.ts.map +1 -1
- package/dist/adapters/openapi/document.js +72 -2
- package/dist/adapters/openapi/document.js.map +1 -1
- package/dist/adapters/openapi/schema.d.ts.map +1 -1
- package/dist/adapters/openapi/schema.js +47 -7
- package/dist/adapters/openapi/schema.js.map +1 -1
- package/dist/adapters/openapi/types.d.ts +1 -0
- package/dist/adapters/openapi/types.d.ts.map +1 -1
- package/dist/adapters/openapi/types.js +2 -0
- package/dist/adapters/openapi/types.js.map +1 -1
- package/dist/adapters/rest/approvals.d.ts +2 -2
- package/dist/adapters/rest/approvals.js +2 -2
- package/dist/adapters/rest/audit.d.ts +2 -2
- package/dist/adapters/rest/audit.js +2 -2
- package/dist/adapters/rest/common.d.ts +3 -3
- package/dist/adapters/rest/common.d.ts.map +1 -1
- package/dist/adapters/rest/common.js +1 -1
- package/dist/adapters/rest/guardrails.d.ts +1 -1
- package/dist/adapters/rest/guardrails.js +1 -1
- package/dist/adapters/rest/identities.d.ts +4 -4
- package/dist/adapters/rest/identities.d.ts.map +1 -1
- package/dist/adapters/rest/identities.js +3 -3
- package/dist/adapters/rest/identities.js.map +1 -1
- package/dist/adapters/rest/identityAdmin.d.ts +18 -0
- package/dist/adapters/rest/identityAdmin.d.ts.map +1 -0
- package/dist/adapters/rest/identityAdmin.js +58 -0
- package/dist/adapters/rest/identityAdmin.js.map +1 -0
- package/dist/adapters/rest/index.d.ts +4 -0
- package/dist/adapters/rest/index.d.ts.map +1 -1
- package/dist/adapters/rest/index.js +3 -0
- package/dist/adapters/rest/index.js.map +1 -1
- package/dist/adapters/rest/metadata.d.ts +1 -1
- package/dist/adapters/rest/metadata.js +1 -1
- package/dist/adapters/rest/pages.d.ts +1 -1
- package/dist/adapters/rest/pages.d.ts.map +1 -1
- package/dist/adapters/rest/permissions.d.ts +1 -1
- package/dist/adapters/rest/permissions.js +1 -1
- package/dist/adapters/rest/plugin.d.ts +2 -2
- package/dist/adapters/rest/plugin.d.ts.map +1 -1
- package/dist/adapters/rest/schemas.d.ts +1 -1
- package/dist/adapters/rest/schemas.d.ts.map +1 -1
- package/dist/adapters/rest/workflow.d.ts +15 -0
- package/dist/adapters/rest/workflow.d.ts.map +1 -0
- package/dist/adapters/rest/workflow.js +89 -0
- package/dist/adapters/rest/workflow.js.map +1 -0
- package/dist/adapters/rest/workflowSource.d.ts +15 -0
- package/dist/adapters/rest/workflowSource.d.ts.map +1 -0
- package/dist/adapters/rest/workflowSource.js +63 -0
- package/dist/adapters/rest/workflowSource.js.map +1 -0
- package/dist/cli/commands/build.js +1 -1
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/connect.d.ts +1 -1
- package/dist/cli/commands/default-view.d.ts +2 -2
- package/dist/cli/commands/default-view.js +2 -2
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +18 -9
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/commands/field-add.d.ts.map +1 -1
- package/dist/cli/commands/field-add.js +12 -6
- package/dist/cli/commands/field-add.js.map +1 -1
- package/dist/cli/commands/field-types.d.ts.map +1 -1
- package/dist/cli/commands/field-types.js +10 -1
- package/dist/cli/commands/field-types.js.map +1 -1
- package/dist/cli/commands/identity.d.ts +15 -0
- package/dist/cli/commands/identity.d.ts.map +1 -0
- package/dist/cli/commands/identity.js +115 -0
- package/dist/cli/commands/identity.js.map +1 -0
- package/dist/cli/commands/introspect.d.ts.map +1 -1
- package/dist/cli/commands/introspect.js +23 -0
- package/dist/cli/commands/introspect.js.map +1 -1
- package/dist/cli/commands/mcp-config.js +1 -1
- package/dist/cli/commands/mcp-config.js.map +1 -1
- package/dist/cli/commands/migrate.js +2 -2
- package/dist/cli/commands/migrate.js.map +1 -1
- package/dist/cli/commands/module.d.ts +2 -2
- package/dist/cli/commands/module.d.ts.map +1 -1
- package/dist/cli/commands/module.js +2 -2
- package/dist/cli/commands/module.js.map +1 -1
- package/dist/cli/commands/object-create.d.ts.map +1 -1
- package/dist/cli/commands/object-create.js +15 -15
- package/dist/cli/commands/object-create.js.map +1 -1
- package/dist/cli/commands/schema-map.d.ts.map +1 -1
- package/dist/cli/commands/schema-map.js +6 -0
- package/dist/cli/commands/schema-map.js.map +1 -1
- package/dist/cli/commands/workflow-close.d.ts +9 -0
- package/dist/cli/commands/workflow-close.d.ts.map +1 -0
- package/dist/cli/commands/workflow-close.js +48 -0
- package/dist/cli/commands/workflow-close.js.map +1 -0
- package/dist/cli/commands/workflow-migrate.d.ts +11 -0
- package/dist/cli/commands/workflow-migrate.d.ts.map +1 -0
- package/dist/cli/commands/workflow-migrate.js +120 -0
- package/dist/cli/commands/workflow-migrate.js.map +1 -0
- package/dist/cli/commands/workflow-open.d.ts +10 -0
- package/dist/cli/commands/workflow-open.d.ts.map +1 -0
- package/dist/cli/commands/workflow-open.js +112 -0
- package/dist/cli/commands/workflow-open.js.map +1 -0
- package/dist/cli/commands/workflow-starter.d.ts +10 -0
- package/dist/cli/commands/workflow-starter.d.ts.map +1 -0
- package/dist/cli/commands/workflow-starter.js +29 -0
- package/dist/cli/commands/workflow-starter.js.map +1 -0
- package/dist/cli/commands/workflow-switch.d.ts +10 -0
- package/dist/cli/commands/workflow-switch.d.ts.map +1 -0
- package/dist/cli/commands/workflow-switch.js +60 -0
- package/dist/cli/commands/workflow-switch.js.map +1 -0
- package/dist/cli/commands/workflow-upgrade.d.ts +12 -0
- package/dist/cli/commands/workflow-upgrade.d.ts.map +1 -0
- package/dist/cli/commands/workflow-upgrade.js +116 -0
- package/dist/cli/commands/workflow-upgrade.js.map +1 -0
- package/dist/cli/index.js +74 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/project-types/manifest.d.ts +25 -0
- package/dist/cli/project-types/manifest.d.ts.map +1 -0
- package/dist/cli/project-types/manifest.js +40 -0
- package/dist/cli/project-types/manifest.js.map +1 -0
- package/dist/cli/ready-screen.js +1 -1
- package/dist/cli/ready-screen.js.map +1 -1
- package/dist/cli/scaffold.d.ts.map +1 -1
- package/dist/cli/scaffold.js +21 -34
- package/dist/cli/scaffold.js.map +1 -1
- package/dist/cli/types/commands.d.ts +48 -0
- package/dist/cli/types/commands.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +1 -1
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/types/values.d.ts +9 -0
- package/dist/cli/types/values.d.ts.map +1 -1
- package/dist/cli/types/values.js +9 -0
- package/dist/cli/types/values.js.map +1 -1
- package/dist/core/api/error.d.ts.map +1 -1
- package/dist/core/api/error.js +7 -4
- package/dist/core/api/error.js.map +1 -1
- package/dist/core/audit/types.d.ts +4 -2
- package/dist/core/audit/types.d.ts.map +1 -1
- package/dist/core/audit/types.js +2 -0
- package/dist/core/audit/types.js.map +1 -1
- package/dist/core/formula/validate.d.ts.map +1 -1
- package/dist/core/formula/validate.js +6 -0
- package/dist/core/formula/validate.js.map +1 -1
- package/dist/core/i18n/ar.d.ts.map +1 -1
- package/dist/core/i18n/ar.js +59 -3
- package/dist/core/i18n/ar.js.map +1 -1
- package/dist/core/i18n/de.d.ts.map +1 -1
- package/dist/core/i18n/de.js +59 -3
- package/dist/core/i18n/de.js.map +1 -1
- package/dist/core/i18n/en.d.ts +60 -4
- package/dist/core/i18n/en.d.ts.map +1 -1
- package/dist/core/i18n/en.js +60 -4
- package/dist/core/i18n/en.js.map +1 -1
- package/dist/core/i18n/es.d.ts.map +1 -1
- package/dist/core/i18n/es.js +59 -3
- package/dist/core/i18n/es.js.map +1 -1
- package/dist/core/i18n/fr.d.ts.map +1 -1
- package/dist/core/i18n/fr.js +59 -3
- package/dist/core/i18n/fr.js.map +1 -1
- package/dist/core/i18n/hi.d.ts.map +1 -1
- package/dist/core/i18n/hi.js +59 -3
- package/dist/core/i18n/hi.js.map +1 -1
- package/dist/core/i18n/id.d.ts.map +1 -1
- package/dist/core/i18n/id.js +59 -3
- package/dist/core/i18n/id.js.map +1 -1
- package/dist/core/i18n/ja.d.ts.map +1 -1
- package/dist/core/i18n/ja.js +59 -3
- package/dist/core/i18n/ja.js.map +1 -1
- package/dist/core/i18n/ko.d.ts.map +1 -1
- package/dist/core/i18n/ko.js +59 -3
- package/dist/core/i18n/ko.js.map +1 -1
- package/dist/core/i18n/pt.d.ts.map +1 -1
- package/dist/core/i18n/pt.js +59 -3
- package/dist/core/i18n/pt.js.map +1 -1
- package/dist/core/i18n/ru.d.ts.map +1 -1
- package/dist/core/i18n/ru.js +59 -3
- package/dist/core/i18n/ru.js.map +1 -1
- package/dist/core/i18n/vi.d.ts.map +1 -1
- package/dist/core/i18n/vi.js +59 -3
- package/dist/core/i18n/vi.js.map +1 -1
- package/dist/core/i18n/zh-hant.d.ts.map +1 -1
- package/dist/core/i18n/zh-hant.js +59 -3
- package/dist/core/i18n/zh-hant.js.map +1 -1
- package/dist/core/i18n/zh.d.ts.map +1 -1
- package/dist/core/i18n/zh.js +60 -4
- package/dist/core/i18n/zh.js.map +1 -1
- package/dist/core/object/describe.d.ts +62 -3
- package/dist/core/object/describe.d.ts.map +1 -1
- package/dist/core/object/describe.js +81 -11
- package/dist/core/object/describe.js.map +1 -1
- package/dist/core/object/gen-types.d.ts.map +1 -1
- package/dist/core/object/gen-types.js +14 -1
- package/dist/core/object/gen-types.js.map +1 -1
- package/dist/core/object/graph.d.ts +3 -0
- package/dist/core/object/graph.d.ts.map +1 -1
- package/dist/core/object/graph.js +90 -14
- package/dist/core/object/graph.js.map +1 -1
- package/dist/core/object/index.d.ts +6 -2
- package/dist/core/object/index.d.ts.map +1 -1
- package/dist/core/object/index.js +5 -1
- package/dist/core/object/index.js.map +1 -1
- package/dist/core/object/migrations.d.ts.map +1 -1
- package/dist/core/object/migrations.js +45 -0
- package/dist/core/object/migrations.js.map +1 -1
- package/dist/core/object/parse.d.ts +7 -0
- package/dist/core/object/parse.d.ts.map +1 -1
- package/dist/core/object/parse.js +32 -1
- package/dist/core/object/parse.js.map +1 -1
- package/dist/core/object/record-key.d.ts +19 -0
- package/dist/core/object/record-key.d.ts.map +1 -0
- package/dist/core/object/record-key.js +100 -0
- package/dist/core/object/record-key.js.map +1 -0
- package/dist/core/object/registry.js +1 -1
- package/dist/core/object/registry.js.map +1 -1
- package/dist/core/object/schema-version.d.ts +1 -1
- package/dist/core/object/schema-version.js +1 -1
- package/dist/core/object/system-objects.d.ts +16 -0
- package/dist/core/object/system-objects.d.ts.map +1 -0
- package/dist/core/object/system-objects.js +72 -0
- package/dist/core/object/system-objects.js.map +1 -0
- package/dist/core/object/validate/constraints.d.ts +9 -0
- package/dist/core/object/validate/constraints.d.ts.map +1 -0
- package/dist/core/object/validate/constraints.js +45 -0
- package/dist/core/object/validate/constraints.js.map +1 -0
- package/dist/core/object/validate/field.d.ts.map +1 -1
- package/dist/core/object/validate/field.js +339 -66
- package/dist/core/object/validate/field.js.map +1 -1
- package/dist/core/object/validate/formulas.d.ts.map +1 -1
- package/dist/core/object/validate/formulas.js +6 -0
- package/dist/core/object/validate/formulas.js.map +1 -1
- package/dist/core/object/validate/object.d.ts +2 -0
- package/dist/core/object/validate/object.d.ts.map +1 -1
- package/dist/core/object/validate/object.js +54 -19
- package/dist/core/object/validate/object.js.map +1 -1
- package/dist/core/object/validate/permissions.d.ts.map +1 -1
- package/dist/core/object/validate/permissions.js +4 -0
- package/dist/core/object/validate/permissions.js.map +1 -1
- package/dist/core/object/validate/primitives.d.ts +0 -1
- package/dist/core/object/validate/primitives.d.ts.map +1 -1
- package/dist/core/object/validate/primitives.js +1 -2
- package/dist/core/object/validate/primitives.js.map +1 -1
- package/dist/core/object/validate/workflow.d.ts +10 -0
- package/dist/core/object/validate/workflow.d.ts.map +1 -0
- package/dist/core/object/validate/workflow.js +143 -0
- package/dist/core/object/validate/workflow.js.map +1 -0
- package/dist/core/object/workflow-hash.d.ts +10 -0
- package/dist/core/object/workflow-hash.d.ts.map +1 -0
- package/dist/core/object/workflow-hash.js +27 -0
- package/dist/core/object/workflow-hash.js.map +1 -0
- package/dist/core/object/workflow-migrations.d.ts +27 -0
- package/dist/core/object/workflow-migrations.d.ts.map +1 -0
- package/dist/core/object/workflow-migrations.js +125 -0
- package/dist/core/object/workflow-migrations.js.map +1 -0
- package/dist/core/provider/event/index.d.ts +1 -1
- package/dist/core/provider/event/index.d.ts.map +1 -1
- package/dist/core/provider/event/index.js.map +1 -1
- package/dist/core/provider/event/types.d.ts +17 -2
- package/dist/core/provider/event/types.d.ts.map +1 -1
- package/dist/core/provider/event/types.js +2 -1
- package/dist/core/provider/event/types.js.map +1 -1
- package/dist/core/provider/identity/directory.d.ts +90 -0
- package/dist/core/provider/identity/directory.d.ts.map +1 -0
- package/dist/core/provider/identity/directory.js +3 -0
- package/dist/core/provider/identity/directory.js.map +1 -0
- package/dist/core/provider/identity/index.d.ts +5 -1
- package/dist/core/provider/identity/index.d.ts.map +1 -1
- package/dist/core/provider/identity/index.js +2 -1
- package/dist/core/provider/identity/index.js.map +1 -1
- package/dist/core/provider/identity/source.d.ts +22 -0
- package/dist/core/provider/identity/source.d.ts.map +1 -0
- package/dist/core/provider/identity/source.js +3 -0
- package/dist/core/provider/identity/source.js.map +1 -0
- package/dist/core/provider/identity/types.d.ts +62 -7
- package/dist/core/provider/identity/types.d.ts.map +1 -1
- package/dist/core/provider/identity/types.js +13 -0
- package/dist/core/provider/identity/types.js.map +1 -1
- package/dist/core/proxy/types.d.ts +4 -4
- package/dist/core/proxy/types.d.ts.map +1 -1
- package/dist/core/rbac/authorize.d.ts +10 -9
- package/dist/core/rbac/authorize.d.ts.map +1 -1
- package/dist/core/rbac/authorize.js +23 -18
- package/dist/core/rbac/authorize.js.map +1 -1
- package/dist/core/rbac/details.d.ts +33 -0
- package/dist/core/rbac/details.d.ts.map +1 -0
- package/dist/core/rbac/details.js +74 -0
- package/dist/core/rbac/details.js.map +1 -0
- package/dist/core/rbac/fields.d.ts +2 -1
- package/dist/core/rbac/fields.d.ts.map +1 -1
- package/dist/core/rbac/fields.js +3 -2
- package/dist/core/rbac/fields.js.map +1 -1
- package/dist/core/rbac/index.d.ts +3 -2
- package/dist/core/rbac/index.d.ts.map +1 -1
- package/dist/core/rbac/index.js +2 -1
- package/dist/core/rbac/index.js.map +1 -1
- package/dist/core/rbac/resolve.d.ts +3 -1
- package/dist/core/rbac/resolve.d.ts.map +1 -1
- package/dist/core/rbac/resolve.js +17 -9
- package/dist/core/rbac/resolve.js.map +1 -1
- package/dist/core/rbac/rls.d.ts +6 -0
- package/dist/core/rbac/rls.d.ts.map +1 -1
- package/dist/core/rbac/rls.js +52 -7
- package/dist/core/rbac/rls.js.map +1 -1
- package/dist/core/rbac/rowScope.d.ts +13 -6
- package/dist/core/rbac/rowScope.d.ts.map +1 -1
- package/dist/core/rbac/rowScope.js +88 -16
- package/dist/core/rbac/rowScope.js.map +1 -1
- package/dist/core/rbac/types.d.ts +6 -7
- package/dist/core/rbac/types.d.ts.map +1 -1
- package/dist/core/script/types.d.ts +1 -1
- package/dist/core/script/types.d.ts.map +1 -1
- package/dist/core/storage/diff.d.ts +10 -2
- package/dist/core/storage/diff.d.ts.map +1 -1
- package/dist/core/storage/diff.js +40 -18
- package/dist/core/storage/diff.js.map +1 -1
- package/dist/core/storage/index.d.ts +7 -1
- package/dist/core/storage/index.d.ts.map +1 -1
- package/dist/core/storage/index.js +6 -1
- package/dist/core/storage/index.js.map +1 -1
- package/dist/core/storage/inspect.d.ts +12 -3
- package/dist/core/storage/inspect.d.ts.map +1 -1
- package/dist/core/storage/inspect.js +39 -22
- package/dist/core/storage/inspect.js.map +1 -1
- package/dist/core/storage/introspect.d.ts +9 -2
- package/dist/core/storage/introspect.d.ts.map +1 -1
- package/dist/core/storage/introspect.js +100 -43
- package/dist/core/storage/introspect.js.map +1 -1
- package/dist/core/storage/link-table.d.ts +47 -0
- package/dist/core/storage/link-table.d.ts.map +1 -0
- package/dist/core/storage/link-table.js +110 -0
- package/dist/core/storage/link-table.js.map +1 -0
- package/dist/core/storage/map.d.ts +14 -5
- package/dist/core/storage/map.d.ts.map +1 -1
- package/dist/core/storage/map.js +207 -39
- package/dist/core/storage/map.js.map +1 -1
- package/dist/core/storage/meta.d.ts +6 -3
- package/dist/core/storage/meta.d.ts.map +1 -1
- package/dist/core/storage/meta.js +9 -5
- package/dist/core/storage/meta.js.map +1 -1
- package/dist/core/storage/migrate.d.ts.map +1 -1
- package/dist/core/storage/migrate.js +144 -11
- package/dist/core/storage/migrate.js.map +1 -1
- package/dist/core/storage/record-key-sql.d.ts +19 -0
- package/dist/core/storage/record-key-sql.d.ts.map +1 -0
- package/dist/core/storage/record-key-sql.js +43 -0
- package/dist/core/storage/record-key-sql.js.map +1 -0
- package/dist/core/storage/record-meta.d.ts +68 -0
- package/dist/core/storage/record-meta.d.ts.map +1 -0
- package/dist/core/storage/record-meta.js +108 -0
- package/dist/core/storage/record-meta.js.map +1 -0
- package/dist/core/storage/report.d.ts +10 -0
- package/dist/core/storage/report.d.ts.map +1 -1
- package/dist/core/storage/report.js +31 -9
- package/dist/core/storage/report.js.map +1 -1
- package/dist/core/storage/sql-literals.d.ts +9 -0
- package/dist/core/storage/sql-literals.d.ts.map +1 -0
- package/dist/core/storage/sql-literals.js +13 -0
- package/dist/core/storage/sql-literals.js.map +1 -0
- package/dist/core/storage/system-tables.d.ts +44 -0
- package/dist/core/storage/system-tables.d.ts.map +1 -0
- package/dist/core/storage/system-tables.js +268 -0
- package/dist/core/storage/system-tables.js.map +1 -0
- package/dist/core/tools/policies.d.ts +2 -2
- package/dist/core/tools/policies.js +2 -2
- package/dist/core/tools/types.d.ts +6 -6
- package/dist/core/tools/types.d.ts.map +1 -1
- package/dist/core/tools/values.d.ts +5 -0
- package/dist/core/tools/values.d.ts.map +1 -1
- package/dist/core/tools/values.js +9 -1
- package/dist/core/tools/values.js.map +1 -1
- package/dist/core/types/currency.d.ts +9 -0
- package/dist/core/types/currency.d.ts.map +1 -0
- package/dist/core/types/currency.js +28 -0
- package/dist/core/types/currency.js.map +1 -0
- package/dist/core/types/field-type.d.ts +60 -6
- package/dist/core/types/field-type.d.ts.map +1 -1
- package/dist/core/types/field-type.js +19 -3
- package/dist/core/types/field-type.js.map +1 -1
- package/dist/core/types/fields.d.ts +118 -20
- package/dist/core/types/fields.d.ts.map +1 -1
- package/dist/core/types/index.d.ts +11 -9
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/index.js +5 -4
- package/dist/core/types/index.js.map +1 -1
- package/dist/core/types/object.d.ts +27 -2
- package/dist/core/types/object.d.ts.map +1 -1
- package/dist/core/types/permission.d.ts +5 -0
- package/dist/core/types/permission.d.ts.map +1 -1
- package/dist/core/types/primaryField.d.ts +6 -1
- package/dist/core/types/primaryField.d.ts.map +1 -1
- package/dist/core/types/primaryField.js +8 -1
- package/dist/core/types/primaryField.js.map +1 -1
- package/dist/core/types/registry.d.ts +6 -4
- package/dist/core/types/registry.d.ts.map +1 -1
- package/dist/core/types/registry.js +40 -30
- package/dist/core/types/registry.js.map +1 -1
- package/dist/core/types/values.d.ts +102 -27
- package/dist/core/types/values.d.ts.map +1 -1
- package/dist/core/types/values.js +68 -29
- package/dist/core/types/values.js.map +1 -1
- package/dist/core/types/workflow.d.ts +140 -0
- package/dist/core/types/workflow.d.ts.map +1 -0
- package/dist/core/types/workflow.js +49 -0
- package/dist/core/types/workflow.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/event/bus.d.ts.map +1 -1
- package/dist/infrastructure/event/bus.js +14 -0
- package/dist/infrastructure/event/bus.js.map +1 -1
- package/dist/infrastructure/identity.d.ts +2 -2
- package/dist/infrastructure/identity.d.ts.map +1 -1
- package/dist/infrastructure/identity.js.map +1 -1
- package/dist/layout-format.d.ts +6 -6
- package/dist/layout-format.js +4 -4
- package/dist/runtime/data-access/builder.d.ts +15 -5
- package/dist/runtime/data-access/builder.d.ts.map +1 -1
- package/dist/runtime/data-access/builder.js +222 -30
- package/dist/runtime/data-access/builder.js.map +1 -1
- package/dist/runtime/data-access/details.d.ts.map +1 -1
- package/dist/runtime/data-access/details.js +7 -2
- package/dist/runtime/data-access/details.js.map +1 -1
- package/dist/runtime/data-access/formula.d.ts +11 -3
- package/dist/runtime/data-access/formula.d.ts.map +1 -1
- package/dist/runtime/data-access/formula.js +82 -19
- package/dist/runtime/data-access/formula.js.map +1 -1
- package/dist/runtime/data-access/index.d.ts +1 -1
- package/dist/runtime/data-access/index.d.ts.map +1 -1
- package/dist/runtime/data-access/index.js +1 -1
- package/dist/runtime/data-access/index.js.map +1 -1
- package/dist/runtime/data-access/link.d.ts +7 -0
- package/dist/runtime/data-access/link.d.ts.map +1 -0
- package/dist/runtime/data-access/link.js +80 -0
- package/dist/runtime/data-access/link.js.map +1 -0
- package/dist/runtime/data-access/query.d.ts +48 -3
- package/dist/runtime/data-access/query.d.ts.map +1 -1
- package/dist/runtime/data-access/query.js +399 -45
- package/dist/runtime/data-access/query.js.map +1 -1
- package/dist/runtime/data-access/rbac.d.ts.map +1 -1
- package/dist/runtime/data-access/rbac.js +134 -16
- package/dist/runtime/data-access/rbac.js.map +1 -1
- package/dist/runtime/data-access/seqno.d.ts +0 -2
- package/dist/runtime/data-access/seqno.d.ts.map +1 -1
- package/dist/runtime/data-access/seqno.js +0 -9
- package/dist/runtime/data-access/seqno.js.map +1 -1
- package/dist/runtime/data-access/sql-executor.d.ts +13 -3
- package/dist/runtime/data-access/sql-executor.d.ts.map +1 -1
- package/dist/runtime/data-access/sql-executor.js +20 -14
- package/dist/runtime/data-access/sql-executor.js.map +1 -1
- package/dist/runtime/data-access/sql-gate.d.ts +4 -4
- package/dist/runtime/data-access/sql-gate.d.ts.map +1 -1
- package/dist/runtime/data-access/sql-gate.js +5 -5
- package/dist/runtime/data-access/sql-gate.js.map +1 -1
- package/dist/runtime/data-access/tx.d.ts +1 -1
- package/dist/runtime/data-access/tx.js +1 -1
- package/dist/runtime/data-access/types.d.ts +31 -3
- package/dist/runtime/data-access/types.d.ts.map +1 -1
- package/dist/runtime/data-access/validate.d.ts.map +1 -1
- package/dist/runtime/data-access/validate.js +186 -39
- package/dist/runtime/data-access/validate.js.map +1 -1
- package/dist/runtime/data-access/workflow.d.ts +146 -0
- package/dist/runtime/data-access/workflow.d.ts.map +1 -0
- package/dist/runtime/data-access/workflow.js +636 -0
- package/dist/runtime/data-access/workflow.js.map +1 -0
- package/dist/runtime/engine.d.ts +89 -14
- package/dist/runtime/engine.d.ts.map +1 -1
- package/dist/runtime/engine.js +123 -26
- package/dist/runtime/engine.js.map +1 -1
- package/dist/runtime/fieldtypes/loader.d.ts.map +1 -1
- package/dist/runtime/fieldtypes/loader.js +84 -2
- package/dist/runtime/fieldtypes/loader.js.map +1 -1
- package/dist/runtime/git/guardrailSource.d.ts +1 -1
- package/dist/runtime/git/index.d.ts +4 -2
- package/dist/runtime/git/index.d.ts.map +1 -1
- package/dist/runtime/git/index.js +2 -1
- package/dist/runtime/git/index.js.map +1 -1
- package/dist/runtime/git/layoutSource.d.ts +1 -1
- package/dist/runtime/git/loader.d.ts.map +1 -1
- package/dist/runtime/git/loader.js +18 -6
- package/dist/runtime/git/loader.js.map +1 -1
- package/dist/runtime/git/pageCatalog.d.ts +1 -1
- package/dist/runtime/git/schemaChange.d.ts +22 -0
- package/dist/runtime/git/schemaChange.d.ts.map +1 -1
- package/dist/runtime/git/schemaChange.js +28 -2
- package/dist/runtime/git/schemaChange.js.map +1 -1
- package/dist/runtime/git/schemaSource.d.ts +1 -1
- package/dist/runtime/git/sourceFile.d.ts +1 -1
- package/dist/runtime/git/sourceFile.js +1 -1
- package/dist/runtime/git/sourceTransaction.d.ts +1 -1
- package/dist/runtime/git/workflowSource.d.ts +40 -0
- package/dist/runtime/git/workflowSource.d.ts.map +1 -0
- package/dist/runtime/git/workflowSource.js +45 -0
- package/dist/runtime/git/workflowSource.js.map +1 -0
- package/dist/runtime/identity/admin.d.ts +18 -0
- package/dist/runtime/identity/admin.d.ts.map +1 -0
- package/dist/runtime/identity/admin.js +27 -0
- package/dist/runtime/identity/admin.js.map +1 -0
- package/dist/runtime/identity/directory.d.ts +12 -0
- package/dist/runtime/identity/directory.d.ts.map +1 -0
- package/dist/runtime/identity/directory.js +22 -0
- package/dist/runtime/identity/directory.js.map +1 -0
- package/dist/runtime/identity/index.d.ts +11 -0
- package/dist/runtime/identity/index.d.ts.map +1 -0
- package/dist/runtime/identity/index.js +8 -0
- package/dist/runtime/identity/index.js.map +1 -0
- package/dist/runtime/identity/resolve.d.ts +10 -0
- package/dist/runtime/identity/resolve.d.ts.map +1 -0
- package/dist/runtime/identity/resolve.js +16 -0
- package/dist/runtime/identity/resolve.js.map +1 -0
- package/dist/runtime/identity/sources/function.d.ts +10 -0
- package/dist/runtime/identity/sources/function.d.ts.map +1 -0
- package/dist/runtime/identity/sources/function.js +9 -0
- package/dist/runtime/identity/sources/function.js.map +1 -0
- package/dist/runtime/identity/sources/pg.d.ts +42 -0
- package/dist/runtime/identity/sources/pg.d.ts.map +1 -0
- package/dist/runtime/identity/sources/pg.js +121 -0
- package/dist/runtime/identity/sources/pg.js.map +1 -0
- package/dist/runtime/identity/store.d.ts +27 -0
- package/dist/runtime/identity/store.d.ts.map +1 -0
- package/dist/runtime/identity/store.js +139 -0
- package/dist/runtime/identity/store.js.map +1 -0
- package/dist/runtime/identity/sync.d.ts +34 -0
- package/dist/runtime/identity/sync.d.ts.map +1 -0
- package/dist/runtime/identity/sync.js +149 -0
- package/dist/runtime/identity/sync.js.map +1 -0
- package/dist/runtime/metadata/cache.d.ts +0 -2
- package/dist/runtime/metadata/cache.d.ts.map +1 -1
- package/dist/runtime/metadata/cache.js +0 -11
- package/dist/runtime/metadata/cache.js.map +1 -1
- package/dist/runtime/metadata/index.d.ts +1 -1
- package/dist/runtime/metadata/index.d.ts.map +1 -1
- package/dist/runtime/metadata/index.js +1 -1
- package/dist/runtime/metadata/index.js.map +1 -1
- package/dist/runtime/record-meta/index.d.ts +2 -0
- package/dist/runtime/record-meta/index.d.ts.map +1 -0
- package/dist/runtime/record-meta/index.js +2 -0
- package/dist/runtime/record-meta/index.js.map +1 -0
- package/dist/runtime/record-meta/store.d.ts +43 -0
- package/dist/runtime/record-meta/store.d.ts.map +1 -0
- package/dist/runtime/record-meta/store.js +88 -0
- package/dist/runtime/record-meta/store.js.map +1 -0
- package/dist/runtime/sql-analyzer/index.d.ts.map +1 -1
- package/dist/runtime/sql-analyzer/index.js +59 -0
- package/dist/runtime/sql-analyzer/index.js.map +1 -1
- package/dist/runtime/tools/executor.d.ts +11 -11
- package/dist/runtime/tools/executor.d.ts.map +1 -1
- package/dist/runtime/tools/executor.js +6 -6
- package/dist/runtime/tools/executor.js.map +1 -1
- package/dist/runtime/tools/index.d.ts +2 -0
- package/dist/runtime/tools/index.d.ts.map +1 -1
- package/dist/runtime/tools/index.js +1 -0
- package/dist/runtime/tools/index.js.map +1 -1
- package/dist/runtime/tools/policies.d.ts +22 -5
- package/dist/runtime/tools/policies.d.ts.map +1 -1
- package/dist/runtime/tools/policies.js +42 -12
- package/dist/runtime/tools/policies.js.map +1 -1
- package/dist/runtime/tunnel/connector.d.ts +1 -1
- package/dist/runtime/tunnel/forwarder.js +1 -1
- package/dist/runtime/tunnel/framing.d.ts +1 -1
- package/dist/runtime/tunnel/server.d.ts +1 -1
- package/dist/subsystems/approvals/index.d.ts +4 -4
- package/dist/subsystems/approvals/index.d.ts.map +1 -1
- package/dist/subsystems/approvals/index.js +5 -6
- package/dist/subsystems/approvals/index.js.map +1 -1
- package/dist/subsystems/approvals/store.d.ts +1 -3
- package/dist/subsystems/approvals/store.d.ts.map +1 -1
- package/dist/subsystems/approvals/store.js +1 -16
- package/dist/subsystems/approvals/store.js.map +1 -1
- package/dist/subsystems/audit/index.d.ts +1 -1
- package/dist/subsystems/audit/index.d.ts.map +1 -1
- package/dist/subsystems/audit/index.js +2 -3
- package/dist/subsystems/audit/index.js.map +1 -1
- package/dist/subsystems/audit/store.d.ts +0 -2
- package/dist/subsystems/audit/store.d.ts.map +1 -1
- package/dist/subsystems/audit/store.js +0 -21
- package/dist/subsystems/audit/store.js.map +1 -1
- package/dist/subsystems/quota/store.d.ts +9 -0
- package/dist/subsystems/quota/store.d.ts.map +1 -1
- package/dist/subsystems/quota/store.js +0 -8
- package/dist/subsystems/quota/store.js.map +1 -1
- package/dist/subsystems/script/backend/isolated-vm.js +1 -1
- package/dist/subsystems/script/backend/types.d.ts +2 -2
- package/dist/subsystems/script/backend/types.d.ts.map +1 -1
- package/dist/subsystems/script/bridge.d.ts +1 -1
- package/dist/subsystems/script/bridge.d.ts.map +1 -1
- package/dist/subsystems/script/bridge.js +6 -4
- package/dist/subsystems/script/bridge.js.map +1 -1
- package/dist/subsystems/script/dispatcher.d.ts.map +1 -1
- package/dist/subsystems/script/dispatcher.js +3 -1
- package/dist/subsystems/script/dispatcher.js.map +1 -1
- package/dist/subsystems/workflow/index.d.ts +4 -0
- package/dist/subsystems/workflow/index.d.ts.map +1 -0
- package/dist/subsystems/workflow/index.js +3 -0
- package/dist/subsystems/workflow/index.js.map +1 -0
- package/dist/subsystems/workflow/scheduler.d.ts +27 -0
- package/dist/subsystems/workflow/scheduler.d.ts.map +1 -0
- package/dist/subsystems/workflow/scheduler.js +109 -0
- package/dist/subsystems/workflow/scheduler.js.map +1 -0
- package/dist/subsystems/workflow/store.d.ts +10 -0
- package/dist/subsystems/workflow/store.d.ts.map +1 -0
- package/dist/subsystems/workflow/store.js +44 -0
- package/dist/subsystems/workflow/store.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +7 -3
|
@@ -1,11 +1,64 @@
|
|
|
1
|
+
import { systemObjects } from '../object/index.js';
|
|
1
2
|
import { FIELD_TYPES } from '../types/index.js';
|
|
2
3
|
import { SchemaError, primaryKeyOf } from '../types/index.js';
|
|
3
4
|
import { applyStatements } from './apply.js';
|
|
4
5
|
import { buildExpectedTable, diffAll, diffRls, diffTable } from './diff.js';
|
|
5
6
|
import { inspectSchema } from './inspect.js';
|
|
6
|
-
import {
|
|
7
|
+
import { buildLinkTables } from './link-table.js';
|
|
8
|
+
import { setMeta } from './meta.js';
|
|
7
9
|
import { createPool } from './pool.js';
|
|
8
|
-
|
|
10
|
+
import { buildRecordMetaTable } from './record-meta.js';
|
|
11
|
+
import { sqlIdent, sqlLiteral } from './sql-literals.js';
|
|
12
|
+
import { SYSTEM_TABLES, buildSystemTables, systemHardeningStatements } from './system-tables.js';
|
|
13
|
+
import { isSafeRlsRole } from '../rbac/index.js';
|
|
14
|
+
const q = (id) => `"${id}"`;
|
|
15
|
+
/**
|
|
16
|
+
* DDL to ensure the native enum types referenced by managed objects exist.
|
|
17
|
+
* `CREATE TYPE` when the type is missing; `ALTER TYPE … ADD VALUE IF NOT EXISTS`
|
|
18
|
+
* only for managed (created / `alter: true`) objects — never for adopted,
|
|
19
|
+
* read-only tables (the engine must not ALTER a customer's type).
|
|
20
|
+
*/
|
|
21
|
+
async function buildEnumStatements(pool, defs, managed) {
|
|
22
|
+
const declared = new Map();
|
|
23
|
+
for (const def of defs.values()) {
|
|
24
|
+
if (!managed.has(def.name))
|
|
25
|
+
continue;
|
|
26
|
+
for (const field of def.fields) {
|
|
27
|
+
const e = field;
|
|
28
|
+
if (e.type !== FIELD_TYPES.ENUM || e.enumType === undefined || !Array.isArray(e.options))
|
|
29
|
+
continue;
|
|
30
|
+
const set = declared.get(e.enumType) ?? new Set();
|
|
31
|
+
for (const option of e.options)
|
|
32
|
+
set.add(String(option));
|
|
33
|
+
declared.set(e.enumType, set);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (declared.size === 0)
|
|
37
|
+
return [];
|
|
38
|
+
const res = await pool.query(`SELECT t.typname AS name, e.enumlabel AS label
|
|
39
|
+
FROM pg_type t JOIN pg_enum e ON e.enumtypid = t.oid
|
|
40
|
+
WHERE t.typtype = 'e'`);
|
|
41
|
+
const existing = new Map();
|
|
42
|
+
for (const row of res.rows) {
|
|
43
|
+
const set = existing.get(row.name) ?? new Set();
|
|
44
|
+
set.add(row.label);
|
|
45
|
+
existing.set(row.name, set);
|
|
46
|
+
}
|
|
47
|
+
const statements = [];
|
|
48
|
+
for (const [name, options] of declared) {
|
|
49
|
+
const labels = existing.get(name);
|
|
50
|
+
if (labels === undefined) {
|
|
51
|
+
statements.push(`CREATE TYPE ${q(name)} AS ENUM (${[...options].map(sqlLiteral).join(', ')})`);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
for (const option of options) {
|
|
55
|
+
if (!labels.has(option))
|
|
56
|
+
statements.push(`ALTER TYPE ${q(name)} ADD VALUE IF NOT EXISTS ${sqlLiteral(option)}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return statements;
|
|
61
|
+
}
|
|
9
62
|
/**
|
|
10
63
|
* Best-effort provisioning of the restricted-SQL role: `CREATE ROLE` (needs
|
|
11
64
|
* CREATEROLE; failure → warning + false) and `GRANT` membership for
|
|
@@ -16,7 +69,7 @@ async function provisionRlsRole(pool, role, warnings) {
|
|
|
16
69
|
const existing = await pool.query('SELECT 1 FROM pg_roles WHERE rolname = $1', [role]);
|
|
17
70
|
if (existing.rows.length === 0) {
|
|
18
71
|
try {
|
|
19
|
-
await pool.query(`CREATE ROLE ${role}`);
|
|
72
|
+
await pool.query(`CREATE ROLE ${sqlIdent(role)}`);
|
|
20
73
|
}
|
|
21
74
|
catch {
|
|
22
75
|
warnings.push(`could not create role "${role}" (needs CREATEROLE) — create it manually to enable RLS`);
|
|
@@ -24,13 +77,30 @@ async function provisionRlsRole(pool, role, warnings) {
|
|
|
24
77
|
}
|
|
25
78
|
}
|
|
26
79
|
try {
|
|
27
|
-
|
|
80
|
+
// no dynamic SQL: decide membership in JS, then GRANT with a quoted identifier
|
|
81
|
+
const res = await pool.query(`SELECT pg_has_role(current_user, $1, 'MEMBER') AS member`, [role]);
|
|
82
|
+
if (res.rows[0].member !== true) {
|
|
83
|
+
await pool.query(`GRANT ${sqlIdent(role)} TO current_user`);
|
|
84
|
+
}
|
|
28
85
|
}
|
|
29
86
|
catch (error) {
|
|
30
87
|
warnings.push(`could not grant role "${role}" to current user: ${String(error.message)}`);
|
|
31
88
|
}
|
|
32
89
|
return true;
|
|
33
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* True when `PUBLIC` still holds `TRUNCATE` on `table`, i.e. the append-only
|
|
93
|
+
* hardening `REVOKE` is worth emitting. New tables grant nothing to `PUBLIC`
|
|
94
|
+
* by default, so a clean run emits no hardening statement (keeps migrate
|
|
95
|
+
* idempotent).
|
|
96
|
+
*/
|
|
97
|
+
async function publicHasTruncate(pool, table) {
|
|
98
|
+
const res = await pool.query(`SELECT EXISTS (
|
|
99
|
+
SELECT 1 FROM pg_class c, aclexplode(coalesce(c.relacl, acldefault('r', c.relowner))) a
|
|
100
|
+
WHERE c.oid = to_regclass($1) AND a.grantee = 0 AND a.privilege_type = 'TRUNCATE'
|
|
101
|
+
) AS needs`, [table]);
|
|
102
|
+
return res.rows[0]?.needs === true;
|
|
103
|
+
}
|
|
34
104
|
/**
|
|
35
105
|
* State-diff migration: compare each engine-managed object's expected table
|
|
36
106
|
* against the live `information_schema`, generate DDL, apply inside a
|
|
@@ -52,9 +122,9 @@ export async function migrate(registry, options = {}) {
|
|
|
52
122
|
const warnings = [];
|
|
53
123
|
const pool = createPool(url);
|
|
54
124
|
try {
|
|
55
|
-
const defs = new Map(registry.list().map((d) => [d.name, d]));
|
|
125
|
+
const defs = new Map([...systemObjects(), ...registry.list()].map((d) => [d.name, d]));
|
|
56
126
|
const actual = await inspectSchema(pool);
|
|
57
|
-
if (options.rls !== undefined && !
|
|
127
|
+
if (options.rls !== undefined && !isSafeRlsRole(options.rls.role)) {
|
|
58
128
|
throw new Error(`invalid RLS role name "${options.rls.role}"`);
|
|
59
129
|
}
|
|
60
130
|
// new objects (no live table by that name) are diffed and created; objects
|
|
@@ -64,6 +134,31 @@ export async function migrate(registry, options = {}) {
|
|
|
64
134
|
.filter((d) => d.alter === true || actual.get(d.name) === undefined)
|
|
65
135
|
.map((d) => buildExpectedTable(d, defs, registry.fieldTypes));
|
|
66
136
|
const statements = diffAll(expected, actual);
|
|
137
|
+
// native enum types must exist before the tables that reference them
|
|
138
|
+
const enumStatements = await buildEnumStatements(pool, defs, new Set(expected.map((t) => t.name)));
|
|
139
|
+
// engine-owned per-object record metadata side tables: one per object (R1),
|
|
140
|
+
// created idempotently for every object regardless of `alter`/ownership —
|
|
141
|
+
// they never touch the customer's own table
|
|
142
|
+
const metaTables = [...defs.keys()].map((name) => buildRecordMetaTable(name));
|
|
143
|
+
const metaStatements = diffAll(metaTables, actual);
|
|
144
|
+
// engine-owned many-to-many link tables for every `multiRelation` field:
|
|
145
|
+
// one per (object, field), created idempotently regardless of `alter`.
|
|
146
|
+
const linkTables = buildLinkTables(defs, registry.fieldTypes);
|
|
147
|
+
const linkStatements = diffAll(linkTables, actual);
|
|
148
|
+
// engine-owned system tables (metadata cache / seq / audit / approvals /
|
|
149
|
+
// timers / counters) + their ACL hardening: provisioned here (and only
|
|
150
|
+
// here) so the runtime never runs DDL and can be least-privileged.
|
|
151
|
+
// one-time reshape of the legacy workflow timer table
|
|
152
|
+
// (id/state/workflow_version -> record_key/node_id): engine-owned and
|
|
153
|
+
// transient, so drop+recreate is safe (there are no users yet).
|
|
154
|
+
const legacyTimers = actual.get(SYSTEM_TABLES.WORKFLOW_TIMERS);
|
|
155
|
+
const dropLegacyTimers = legacyTimers !== undefined &&
|
|
156
|
+
legacyTimers.columns.some((c) => c.name === 'state') &&
|
|
157
|
+
!legacyTimers.columns.some((c) => c.name === 'record_key');
|
|
158
|
+
if (dropLegacyTimers)
|
|
159
|
+
actual.delete(SYSTEM_TABLES.WORKFLOW_TIMERS);
|
|
160
|
+
const systemStatements = diffAll(buildSystemTables(), actual);
|
|
161
|
+
const hardening = (await publicHasTruncate(pool, SYSTEM_TABLES.AUDIT)) ? systemHardeningStatements() : [];
|
|
67
162
|
// existing tables are read-only unless the object opted in (`alter: true`):
|
|
68
163
|
// verify every declared field is a live column (prevents REST/MCP pointing
|
|
69
164
|
// at ghost columns). With `alter: true`, missing fields become ADD COLUMN
|
|
@@ -83,8 +178,9 @@ export async function migrate(registry, options = {}) {
|
|
|
83
178
|
continue;
|
|
84
179
|
for (const field of def.fields) {
|
|
85
180
|
// details fields have no column on the parent (the child table carries
|
|
86
|
-
// parent_id/parent_type/parent_idx)
|
|
87
|
-
|
|
181
|
+
// parent_id/parent_type/parent_idx); multiRelation fields have no column
|
|
182
|
+
// either (a link table carries the pairs) — never ghost-column checks
|
|
183
|
+
if (field.type === FIELD_TYPES.DETAILS || field.type === FIELD_TYPES.MULTI_RELATION)
|
|
88
184
|
continue;
|
|
89
185
|
if (!cols.has(field.name)) {
|
|
90
186
|
throw new SchemaError('object.field.columnMissing', { object: def.name, table: def.name, field: field.name });
|
|
@@ -103,7 +199,7 @@ export async function migrate(registry, options = {}) {
|
|
|
103
199
|
if (roleReady) {
|
|
104
200
|
const { rows } = await pool.query('SELECT current_user AS u');
|
|
105
201
|
const currentUser = String(rows[0].u);
|
|
106
|
-
for (const def of
|
|
202
|
+
for (const def of registry.list()) {
|
|
107
203
|
const actualTable = actual.get(def.name);
|
|
108
204
|
const applies = actualTable === undefined || (def.alter === true && actualTable.owner === currentUser);
|
|
109
205
|
if (!applies) {
|
|
@@ -114,20 +210,57 @@ export async function migrate(registry, options = {}) {
|
|
|
114
210
|
}
|
|
115
211
|
rlsStatements = rlsStatements.concat(diffRls(def, actualTable, options.rls.role));
|
|
116
212
|
}
|
|
213
|
+
// link tables are engine plumbing (never registry-visible): enable
|
|
214
|
+
// RLS with no policy so the restricted role reads 0 rows even if it is
|
|
215
|
+
// ever granted, a second layer behind the sql-gate. The engine runs as
|
|
216
|
+
// the owner and bypasses RLS, so its own reads are unaffected.
|
|
217
|
+
for (const table of linkTables) {
|
|
218
|
+
if (actual.get(table.name)?.rlsEnabled !== true) {
|
|
219
|
+
rlsStatements.push(`ALTER TABLE ${q(table.name)} ENABLE ROW LEVEL SECURITY;`);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
117
222
|
}
|
|
118
223
|
}
|
|
119
|
-
const allStatements = [
|
|
224
|
+
const allStatements = [
|
|
225
|
+
...enumStatements,
|
|
226
|
+
...(dropLegacyTimers ? [`DROP TABLE ${q(SYSTEM_TABLES.WORKFLOW_TIMERS)};`] : []),
|
|
227
|
+
...statements,
|
|
228
|
+
...metaStatements,
|
|
229
|
+
...linkStatements,
|
|
230
|
+
...systemStatements,
|
|
231
|
+
...rlsStatements,
|
|
232
|
+
...hardening,
|
|
233
|
+
];
|
|
120
234
|
if (!dryRun && allStatements.length > 0) {
|
|
121
|
-
await ensureMetaTable(pool);
|
|
122
235
|
await applyStatements(pool, allStatements);
|
|
123
236
|
const ts = new Date().toISOString();
|
|
124
237
|
for (const name of applied)
|
|
125
238
|
await setMeta(pool, `schema.applied.${name}`, ts);
|
|
126
239
|
}
|
|
240
|
+
// content-address every object's workflow definition (append-only, idempotent)
|
|
241
|
+
// so running instances can resolve the exact revision they were pinned to.
|
|
242
|
+
if (!dryRun)
|
|
243
|
+
await registerWorkflowDefinitions(pool, defs);
|
|
127
244
|
return { statements: allStatements, applied, dryRun, warnings };
|
|
128
245
|
}
|
|
129
246
|
finally {
|
|
130
247
|
await pool.end();
|
|
131
248
|
}
|
|
132
249
|
}
|
|
250
|
+
/**
|
|
251
|
+
* Upsert each object's current workflow definition into
|
|
252
|
+
* `weavekit_workflow_definitions` (keyed by content hash). Idempotent; the
|
|
253
|
+
* `version_seq` is a monotonic display/switch ordinal. Never rewrites or drops
|
|
254
|
+
* an existing row (append-only revision history for instance pinning).
|
|
255
|
+
*/
|
|
256
|
+
async function registerWorkflowDefinitions(pool, defs) {
|
|
257
|
+
const table = q(SYSTEM_TABLES.WORKFLOW_DEFINITIONS);
|
|
258
|
+
for (const def of defs.values()) {
|
|
259
|
+
if (def.workflow === undefined || def.workflowHash === undefined)
|
|
260
|
+
continue;
|
|
261
|
+
await pool.query(`INSERT INTO ${table} (object, hash, version_seq, definition)
|
|
262
|
+
VALUES ($1, $2, (SELECT COALESCE(MAX(version_seq), 0) + 1 FROM ${table} WHERE object = $1), $3::jsonb)
|
|
263
|
+
ON CONFLICT (object, hash) DO NOTHING`, [def.name, def.workflowHash, JSON.stringify(def.workflow)]);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
133
266
|
//# sourceMappingURL=migrate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/core/storage/migrate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE5E,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/core/storage/migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { FieldDefinition, ObjectDefinition } from '../types/index.js';
|
|
2
|
+
import { type FieldTypeRegistry } from '../types/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* SQL-side canonical text of a primary-key value, byte-for-byte equal to the JS
|
|
5
|
+
* `canonicalizePrimaryValue` (see the contract test). Temporal values are
|
|
6
|
+
* formatted with `to_char` (session-independent, microsecond precision) so a
|
|
7
|
+
* record_key computed in SQL equals one computed in JS — required for the
|
|
8
|
+
* record-metadata JOIN and any SQL-side key comparison.
|
|
9
|
+
*
|
|
10
|
+
* `ref` is the (already qualified) column reference, e.g. `t."created_at"`.
|
|
11
|
+
*/
|
|
12
|
+
export declare function pkValueTextSql(field: FieldDefinition, ref: string, registry?: FieldTypeRegistry): string;
|
|
13
|
+
/**
|
|
14
|
+
* SQL expression producing a row's `record_key` from its primary columns:
|
|
15
|
+
* `concat( octet_length(v1) || ':' || v1, … )` — the length-prefixed encoding
|
|
16
|
+
* (`octet_length` is the UTF-8 byte length, matching `TextEncoder`).
|
|
17
|
+
*/
|
|
18
|
+
export declare function recordKeySql(def: ObjectDefinition, ref: (fieldName: string) => string, registry?: FieldTypeRegistry): string;
|
|
19
|
+
//# sourceMappingURL=record-key-sql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-key-sql.d.ts","sourceRoot":"","sources":["../../../src/core/storage/record-key-sql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAG3B;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,iBAA+C,GACxD,MAAM,CAkBR;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,EAClC,QAAQ,GAAE,iBAA+C,GACxD,MAAM,CAMR"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { DEFAULT_FIELD_TYPE_REGISTRY, fieldBase, primaryFieldsOf, } from '../types/index.js';
|
|
2
|
+
import { FIELD_TYPES } from '../types/values.js';
|
|
3
|
+
/**
|
|
4
|
+
* SQL-side canonical text of a primary-key value, byte-for-byte equal to the JS
|
|
5
|
+
* `canonicalizePrimaryValue` (see the contract test). Temporal values are
|
|
6
|
+
* formatted with `to_char` (session-independent, microsecond precision) so a
|
|
7
|
+
* record_key computed in SQL equals one computed in JS — required for the
|
|
8
|
+
* record-metadata JOIN and any SQL-side key comparison.
|
|
9
|
+
*
|
|
10
|
+
* `ref` is the (already qualified) column reference, e.g. `t."created_at"`.
|
|
11
|
+
*/
|
|
12
|
+
export function pkValueTextSql(field, ref, registry = DEFAULT_FIELD_TYPE_REGISTRY) {
|
|
13
|
+
const base = fieldBase(registry, field.type);
|
|
14
|
+
switch (base) {
|
|
15
|
+
case FIELD_TYPES.UUID:
|
|
16
|
+
return `lower(${ref}::text)`;
|
|
17
|
+
case FIELD_TYPES.DATE:
|
|
18
|
+
return `to_char(${ref}, 'YYYY-MM-DD')`;
|
|
19
|
+
case FIELD_TYPES.TIME:
|
|
20
|
+
return `to_char(${ref}, 'HH24:MI:SS.US')`;
|
|
21
|
+
case FIELD_TYPES.TIMETZ:
|
|
22
|
+
return `to_char(${ref}, 'HH24:MI:SS.USOF')`;
|
|
23
|
+
case FIELD_TYPES.TIMESTAMP:
|
|
24
|
+
return `to_char(${ref}, 'YYYY-MM-DD"T"HH24:MI:SS.US')`;
|
|
25
|
+
case FIELD_TYPES.TIMESTAMPTZ:
|
|
26
|
+
return `(to_char(${ref} AT TIME ZONE 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS.US') || 'Z')`;
|
|
27
|
+
default:
|
|
28
|
+
return `${ref}::text`;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* SQL expression producing a row's `record_key` from its primary columns:
|
|
33
|
+
* `concat( octet_length(v1) || ':' || v1, … )` — the length-prefixed encoding
|
|
34
|
+
* (`octet_length` is the UTF-8 byte length, matching `TextEncoder`).
|
|
35
|
+
*/
|
|
36
|
+
export function recordKeySql(def, ref, registry = DEFAULT_FIELD_TYPE_REGISTRY) {
|
|
37
|
+
const parts = primaryFieldsOf(def).map((field) => {
|
|
38
|
+
const expr = pkValueTextSql(field, ref(field.name), registry);
|
|
39
|
+
return `(octet_length(${expr})::text || ':' || ${expr})`;
|
|
40
|
+
});
|
|
41
|
+
return `concat(${parts.join(', ')})`;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=record-key-sql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-key-sql.js","sourceRoot":"","sources":["../../../src/core/storage/record-key-sql.ts"],"names":[],"mappings":"AACA,OAAO,EACL,2BAA2B,EAC3B,SAAS,EACT,eAAe,GAEhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAsB,EACtB,GAAW,EACX,WAA8B,2BAA2B;IAEzD,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,WAAW,CAAC,IAAI;YACnB,OAAO,SAAS,GAAG,SAAS,CAAC;QAC/B,KAAK,WAAW,CAAC,IAAI;YACnB,OAAO,WAAW,GAAG,iBAAiB,CAAC;QACzC,KAAK,WAAW,CAAC,IAAI;YACnB,OAAO,WAAW,GAAG,oBAAoB,CAAC;QAC5C,KAAK,WAAW,CAAC,MAAM;YACrB,OAAO,WAAW,GAAG,sBAAsB,CAAC;QAC9C,KAAK,WAAW,CAAC,SAAS;YACxB,OAAO,WAAW,GAAG,iCAAiC,CAAC;QACzD,KAAK,WAAW,CAAC,WAAW;YAC1B,OAAO,YAAY,GAAG,4DAA4D,CAAC;QACrF;YACE,OAAO,GAAG,GAAG,QAAQ,CAAC;IAC1B,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,GAAqB,EACrB,GAAkC,EAClC,WAA8B,2BAA2B;IAEzD,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/C,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC9D,OAAO,iBAAiB,IAAI,qBAAqB,IAAI,GAAG,CAAC;IAC3D,CAAC,CAAC,CAAC;IACH,OAAO,UAAU,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { ExpectedTable } from './diff.js';
|
|
2
|
+
/**
|
|
3
|
+
* Engine-owned per-object record metadata ("side table").
|
|
4
|
+
*
|
|
5
|
+
* The iron rule is that the engine never touches a customer table. System
|
|
6
|
+
* metadata (status / ownership / timestamps / workflow binding) therefore lives
|
|
7
|
+
* in an engine-owned table named `weavekit_record__<object>`, keyed by the
|
|
8
|
+
* `record_key` encoding of the record's (possibly composite) primary key
|
|
9
|
+
* (see `core/object/record-key.ts`).
|
|
10
|
+
*
|
|
11
|
+
* One table exists per object (R1: every object, no opt-in) and rows are
|
|
12
|
+
* **sparse** — a record with no engine metadata has no row, so a table only
|
|
13
|
+
* holds entries that actually carry system state.
|
|
14
|
+
*/
|
|
15
|
+
export declare const RECORD_META_TABLE_PREFIX = "weavekit_record__";
|
|
16
|
+
/** column names of a record metadata side table (single source) */
|
|
17
|
+
export declare const RECORD_META_COLUMNS: {
|
|
18
|
+
readonly RECORD_KEY: "record_key";
|
|
19
|
+
readonly STATUS: "status";
|
|
20
|
+
readonly OWNER_ID: "owner_id";
|
|
21
|
+
readonly CREATED_BY: "created_by";
|
|
22
|
+
readonly MODIFIED_BY: "modified_by";
|
|
23
|
+
readonly CREATED_TIME: "created_time";
|
|
24
|
+
readonly MODIFIED_TIME: "modified_time";
|
|
25
|
+
readonly WORKFLOW_INSTANCE_ID: "workflow_instance_id";
|
|
26
|
+
};
|
|
27
|
+
/** default `status` for a record with a metadata row */
|
|
28
|
+
export declare const RECORD_META_DEFAULT_STATUS: "draft";
|
|
29
|
+
/** reserved prefix for record-metadata virtual fields exposed on reads */
|
|
30
|
+
export declare const RECORD_META_VIRTUAL_PREFIX = "weave_";
|
|
31
|
+
/**
|
|
32
|
+
* the identity virtual field: every record's external id — its `record_key`.
|
|
33
|
+
* Derived from the customer primary key (never a stored column), so clients and
|
|
34
|
+
* agents can round-trip a row back into `REST /:id` / MCP `id`.
|
|
35
|
+
*/
|
|
36
|
+
export declare const RECORD_META_ID_FIELD = "weave_id";
|
|
37
|
+
/** one virtual system field exposed on reads / `describe` (type semantics only) */
|
|
38
|
+
export interface RecordMetaVirtualFieldSpec {
|
|
39
|
+
name: string;
|
|
40
|
+
type: string;
|
|
41
|
+
options?: readonly string[];
|
|
42
|
+
multiple?: boolean;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Virtual system fields exposed on reads and in `describe`, in stable order
|
|
46
|
+
* (`weave_id` first). `weave_id` is computed from the customer primary key;
|
|
47
|
+
* the rest live in the side table. Names are reserved so they never collide
|
|
48
|
+
* with a customer's business fields.
|
|
49
|
+
*/
|
|
50
|
+
export declare const RECORD_META_VIRTUAL_FIELD_SPECS: readonly RecordMetaVirtualFieldSpec[];
|
|
51
|
+
/** virtual system field names (derived from the specs — single source) */
|
|
52
|
+
export declare const RECORD_META_VIRTUAL_FIELDS: readonly string[];
|
|
53
|
+
/** true when a requested field name is a record-metadata virtual field */
|
|
54
|
+
export declare function isRecordMetaVirtualField(name: string): boolean;
|
|
55
|
+
/** true when a virtual field is backed by the side table (all but the derived `weave_id`) */
|
|
56
|
+
export declare function isSideTableVirtualField(name: string): boolean;
|
|
57
|
+
/** side-table name for an object */
|
|
58
|
+
export declare function recordMetaTableName(object: string): string;
|
|
59
|
+
/** true when a live table name is an engine record-metadata side table */
|
|
60
|
+
export declare function isRecordMetaTable(name: string): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* The expected (DDL) shape of an object's record metadata side table. `owner_id`
|
|
63
|
+
* / `created_by` / `modified_by` are intentionally FK-less here: the identity
|
|
64
|
+
* tables (`weavekit_user`) land with the identity subsystem, and orphan cleanup
|
|
65
|
+
* is handled at the data-access layer, not by a hard FK.
|
|
66
|
+
*/
|
|
67
|
+
export declare function buildRecordMetaTable(object: string): ExpectedTable;
|
|
68
|
+
//# sourceMappingURL=record-meta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-meta.d.ts","sourceRoot":"","sources":["../../../src/core/storage/record-meta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG/C;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,wBAAwB,sBAAsB,CAAC;AAE5D,mEAAmE;AACnE,eAAO,MAAM,mBAAmB;;;;;;;;;CAStB,CAAC;AAEX,wDAAwD;AACxD,eAAO,MAAM,0BAA0B,SAAqB,CAAC;AAE7D,0EAA0E;AAC1E,eAAO,MAAM,0BAA0B,WAAW,CAAC;AAEnD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,aAAoC,CAAC;AAEtE,mFAAmF;AACnF,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,EAAE,SAAS,0BAA0B,EAShF,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,0BAA0B,EAAE,SAAS,MAAM,EAAuD,CAAC;AAEhH,0EAA0E;AAC1E,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,6FAA6F;AAC7F,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED,oCAAoC;AACpC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CA8BlE"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { FIELD_TYPES, WEAVE_STATUS } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Engine-owned per-object record metadata ("side table").
|
|
4
|
+
*
|
|
5
|
+
* The iron rule is that the engine never touches a customer table. System
|
|
6
|
+
* metadata (status / ownership / timestamps / workflow binding) therefore lives
|
|
7
|
+
* in an engine-owned table named `weavekit_record__<object>`, keyed by the
|
|
8
|
+
* `record_key` encoding of the record's (possibly composite) primary key
|
|
9
|
+
* (see `core/object/record-key.ts`).
|
|
10
|
+
*
|
|
11
|
+
* One table exists per object (R1: every object, no opt-in) and rows are
|
|
12
|
+
* **sparse** — a record with no engine metadata has no row, so a table only
|
|
13
|
+
* holds entries that actually carry system state.
|
|
14
|
+
*/
|
|
15
|
+
export const RECORD_META_TABLE_PREFIX = 'weavekit_record__';
|
|
16
|
+
/** column names of a record metadata side table (single source) */
|
|
17
|
+
export const RECORD_META_COLUMNS = {
|
|
18
|
+
RECORD_KEY: 'record_key',
|
|
19
|
+
STATUS: 'status',
|
|
20
|
+
OWNER_ID: 'owner_id',
|
|
21
|
+
CREATED_BY: 'created_by',
|
|
22
|
+
MODIFIED_BY: 'modified_by',
|
|
23
|
+
CREATED_TIME: 'created_time',
|
|
24
|
+
MODIFIED_TIME: 'modified_time',
|
|
25
|
+
WORKFLOW_INSTANCE_ID: 'workflow_instance_id',
|
|
26
|
+
};
|
|
27
|
+
/** default `status` for a record with a metadata row */
|
|
28
|
+
export const RECORD_META_DEFAULT_STATUS = WEAVE_STATUS.DRAFT;
|
|
29
|
+
/** reserved prefix for record-metadata virtual fields exposed on reads */
|
|
30
|
+
export const RECORD_META_VIRTUAL_PREFIX = 'weave_';
|
|
31
|
+
/**
|
|
32
|
+
* the identity virtual field: every record's external id — its `record_key`.
|
|
33
|
+
* Derived from the customer primary key (never a stored column), so clients and
|
|
34
|
+
* agents can round-trip a row back into `REST /:id` / MCP `id`.
|
|
35
|
+
*/
|
|
36
|
+
export const RECORD_META_ID_FIELD = `${RECORD_META_VIRTUAL_PREFIX}id`;
|
|
37
|
+
/**
|
|
38
|
+
* Virtual system fields exposed on reads and in `describe`, in stable order
|
|
39
|
+
* (`weave_id` first). `weave_id` is computed from the customer primary key;
|
|
40
|
+
* the rest live in the side table. Names are reserved so they never collide
|
|
41
|
+
* with a customer's business fields.
|
|
42
|
+
*/
|
|
43
|
+
export const RECORD_META_VIRTUAL_FIELD_SPECS = [
|
|
44
|
+
{ name: RECORD_META_ID_FIELD, type: FIELD_TYPES.STRING },
|
|
45
|
+
{ name: `${RECORD_META_VIRTUAL_PREFIX}${RECORD_META_COLUMNS.STATUS}`, type: FIELD_TYPES.ENUM, options: Object.values(WEAVE_STATUS) },
|
|
46
|
+
{ name: `${RECORD_META_VIRTUAL_PREFIX}${RECORD_META_COLUMNS.OWNER_ID}`, type: FIELD_TYPES.STRING },
|
|
47
|
+
{ name: `${RECORD_META_VIRTUAL_PREFIX}${RECORD_META_COLUMNS.CREATED_BY}`, type: FIELD_TYPES.STRING },
|
|
48
|
+
{ name: `${RECORD_META_VIRTUAL_PREFIX}${RECORD_META_COLUMNS.MODIFIED_BY}`, type: FIELD_TYPES.STRING },
|
|
49
|
+
{ name: `${RECORD_META_VIRTUAL_PREFIX}${RECORD_META_COLUMNS.CREATED_TIME}`, type: FIELD_TYPES.TIMESTAMPTZ },
|
|
50
|
+
{ name: `${RECORD_META_VIRTUAL_PREFIX}${RECORD_META_COLUMNS.MODIFIED_TIME}`, type: FIELD_TYPES.TIMESTAMPTZ },
|
|
51
|
+
{ name: `${RECORD_META_VIRTUAL_PREFIX}${RECORD_META_COLUMNS.WORKFLOW_INSTANCE_ID}`, type: FIELD_TYPES.STRING },
|
|
52
|
+
];
|
|
53
|
+
/** virtual system field names (derived from the specs — single source) */
|
|
54
|
+
export const RECORD_META_VIRTUAL_FIELDS = RECORD_META_VIRTUAL_FIELD_SPECS.map((s) => s.name);
|
|
55
|
+
/** true when a requested field name is a record-metadata virtual field */
|
|
56
|
+
export function isRecordMetaVirtualField(name) {
|
|
57
|
+
return RECORD_META_VIRTUAL_FIELDS.includes(name);
|
|
58
|
+
}
|
|
59
|
+
/** true when a virtual field is backed by the side table (all but the derived `weave_id`) */
|
|
60
|
+
export function isSideTableVirtualField(name) {
|
|
61
|
+
return isRecordMetaVirtualField(name) && name !== RECORD_META_ID_FIELD;
|
|
62
|
+
}
|
|
63
|
+
/** side-table name for an object */
|
|
64
|
+
export function recordMetaTableName(object) {
|
|
65
|
+
return `${RECORD_META_TABLE_PREFIX}${object}`;
|
|
66
|
+
}
|
|
67
|
+
/** true when a live table name is an engine record-metadata side table */
|
|
68
|
+
export function isRecordMetaTable(name) {
|
|
69
|
+
return name.startsWith(RECORD_META_TABLE_PREFIX);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The expected (DDL) shape of an object's record metadata side table. `owner_id`
|
|
73
|
+
* / `created_by` / `modified_by` are intentionally FK-less here: the identity
|
|
74
|
+
* tables (`weavekit_user`) land with the identity subsystem, and orphan cleanup
|
|
75
|
+
* is handled at the data-access layer, not by a hard FK.
|
|
76
|
+
*/
|
|
77
|
+
export function buildRecordMetaTable(object) {
|
|
78
|
+
const name = recordMetaTableName(object);
|
|
79
|
+
const text = { type: 'TEXT', notNull: false, primary: false, unique: false };
|
|
80
|
+
const ts = { type: 'TIMESTAMPTZ', notNull: false, primary: false, unique: false };
|
|
81
|
+
return {
|
|
82
|
+
name,
|
|
83
|
+
columns: [
|
|
84
|
+
{ name: RECORD_META_COLUMNS.RECORD_KEY, type: 'TEXT', notNull: true, primary: true, unique: false },
|
|
85
|
+
{
|
|
86
|
+
name: RECORD_META_COLUMNS.STATUS,
|
|
87
|
+
type: 'TEXT',
|
|
88
|
+
notNull: true,
|
|
89
|
+
default: `'${RECORD_META_DEFAULT_STATUS}'`,
|
|
90
|
+
primary: false,
|
|
91
|
+
unique: false,
|
|
92
|
+
},
|
|
93
|
+
{ name: RECORD_META_COLUMNS.OWNER_ID, ...text },
|
|
94
|
+
{ name: RECORD_META_COLUMNS.CREATED_BY, ...text },
|
|
95
|
+
{ name: RECORD_META_COLUMNS.MODIFIED_BY, ...text },
|
|
96
|
+
{ name: RECORD_META_COLUMNS.CREATED_TIME, ...ts },
|
|
97
|
+
{ name: RECORD_META_COLUMNS.MODIFIED_TIME, ...ts },
|
|
98
|
+
{ name: RECORD_META_COLUMNS.WORKFLOW_INSTANCE_ID, type: 'TEXT', notNull: false, primary: false, unique: false },
|
|
99
|
+
],
|
|
100
|
+
fks: [],
|
|
101
|
+
indexes: [
|
|
102
|
+
{ name: `${name}_status_idx`, method: 'btree', columns: [RECORD_META_COLUMNS.STATUS] },
|
|
103
|
+
{ name: `${name}_owner_idx`, method: 'btree', columns: [RECORD_META_COLUMNS.OWNER_ID] },
|
|
104
|
+
],
|
|
105
|
+
uniques: [],
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=record-meta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-meta.js","sourceRoot":"","sources":["../../../src/core/storage/record-meta.ts"],"names":[],"mappings":"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"}
|
|
@@ -62,6 +62,13 @@ export interface MappingFk {
|
|
|
62
62
|
/** the FK constraint exists on the live table */
|
|
63
63
|
present: boolean;
|
|
64
64
|
}
|
|
65
|
+
/** a declared table-level UNIQUE constraint (composite/scoped) */
|
|
66
|
+
export interface MappingConstraint {
|
|
67
|
+
name: string;
|
|
68
|
+
columns: string[];
|
|
69
|
+
/** the backing unique index/constraint exists on the live table */
|
|
70
|
+
present: boolean;
|
|
71
|
+
}
|
|
65
72
|
export interface MappingRls {
|
|
66
73
|
enabled: boolean;
|
|
67
74
|
owner: string;
|
|
@@ -77,6 +84,8 @@ export interface MappingTable {
|
|
|
77
84
|
columns: MappingColumn[];
|
|
78
85
|
indexes: MappingIndex[];
|
|
79
86
|
fks: MappingFk[];
|
|
87
|
+
/** declared table-level UNIQUE constraints (composite/scoped) */
|
|
88
|
+
constraints: MappingConstraint[];
|
|
80
89
|
/** `details` edges declared on the object (no column on the parent table) */
|
|
81
90
|
details: Array<{
|
|
82
91
|
field: string;
|
|
@@ -99,6 +108,7 @@ export interface MappingTotals {
|
|
|
99
108
|
columnsExtra: number;
|
|
100
109
|
indexDrift: number;
|
|
101
110
|
fkDrift: number;
|
|
111
|
+
constraintDrift: number;
|
|
102
112
|
}
|
|
103
113
|
export interface MappingReport {
|
|
104
114
|
tables: MappingTable[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/core/storage/report.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/core/storage/report.ts"],"names":[],"mappings":"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"}
|