@weave-kit/engine 0.7.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +79 -0
- package/README.md +7 -0
- package/dist/adapters/graphql/http.d.ts +24 -0
- package/dist/adapters/graphql/http.d.ts.map +1 -0
- package/dist/adapters/graphql/http.js +147 -0
- package/dist/adapters/graphql/http.js.map +1 -0
- package/dist/adapters/graphql/index.d.ts +33 -0
- package/dist/adapters/graphql/index.d.ts.map +1 -0
- package/dist/adapters/graphql/index.js +24 -0
- package/dist/adapters/graphql/index.js.map +1 -0
- package/dist/adapters/graphql/loader.d.ts +4 -0
- package/dist/adapters/graphql/loader.d.ts.map +1 -0
- package/dist/adapters/graphql/loader.js +135 -0
- package/dist/adapters/graphql/loader.js.map +1 -0
- package/dist/adapters/graphql/resolvers.d.ts +52 -0
- package/dist/adapters/graphql/resolvers.d.ts.map +1 -0
- package/dist/adapters/graphql/resolvers.js +110 -0
- package/dist/adapters/graphql/resolvers.js.map +1 -0
- package/dist/adapters/graphql/scalars.d.ts +8 -0
- package/dist/adapters/graphql/scalars.d.ts.map +1 -0
- package/dist/adapters/graphql/scalars.js +14 -0
- package/dist/adapters/graphql/scalars.js.map +1 -0
- package/dist/adapters/graphql/schema.d.ts +9 -0
- package/dist/adapters/graphql/schema.d.ts.map +1 -0
- package/dist/adapters/graphql/schema.js +297 -0
- package/dist/adapters/graphql/schema.js.map +1 -0
- package/dist/adapters/graphql/security.d.ts +29 -0
- package/dist/adapters/graphql/security.d.ts.map +1 -0
- package/dist/adapters/graphql/security.js +81 -0
- package/dist/adapters/graphql/security.js.map +1 -0
- package/dist/adapters/graphql/types.d.ts +69 -0
- package/dist/adapters/graphql/types.d.ts.map +1 -0
- package/dist/adapters/graphql/types.js +2 -0
- package/dist/adapters/graphql/types.js.map +1 -0
- package/dist/adapters/mcp/generate.d.ts.map +1 -1
- package/dist/adapters/mcp/generate.js +4 -3
- 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 +2 -0
- package/dist/adapters/mcp/http.d.ts.map +1 -1
- package/dist/adapters/mcp/http.js +34 -16
- package/dist/adapters/mcp/http.js.map +1 -1
- package/dist/adapters/mcp/index.d.ts +2 -0
- package/dist/adapters/mcp/index.d.ts.map +1 -1
- package/dist/adapters/mcp/index.js +2 -1
- package/dist/adapters/mcp/index.js.map +1 -1
- package/dist/adapters/mcp/session.d.ts +11 -3
- package/dist/adapters/mcp/session.d.ts.map +1 -1
- package/dist/adapters/mcp/session.js +12 -0
- package/dist/adapters/mcp/session.js.map +1 -1
- package/dist/adapters/mcp/tools.d.ts.map +1 -1
- package/dist/adapters/mcp/tools.js +16 -7
- package/dist/adapters/mcp/tools.js.map +1 -1
- package/dist/adapters/openapi/document.d.ts.map +1 -1
- package/dist/adapters/openapi/document.js +9 -2
- package/dist/adapters/openapi/document.js.map +1 -1
- package/dist/adapters/openapi/schema.d.ts +8 -6
- package/dist/adapters/openapi/schema.d.ts.map +1 -1
- package/dist/adapters/openapi/schema.js +41 -9
- package/dist/adapters/openapi/schema.js.map +1 -1
- package/dist/adapters/openapi/types.d.ts +2 -0
- package/dist/adapters/openapi/types.d.ts.map +1 -1
- package/dist/adapters/rest/plugin.d.ts.map +1 -1
- package/dist/adapters/rest/plugin.js +11 -8
- package/dist/adapters/rest/plugin.js.map +1 -1
- package/dist/adapters/rest/workflow.js +8 -8
- package/dist/adapters/rest/workflow.js.map +1 -1
- package/dist/cli/commands/deploy.d.ts +6 -0
- package/dist/cli/commands/deploy.d.ts.map +1 -0
- package/dist/cli/commands/deploy.js +88 -0
- package/dist/cli/commands/deploy.js.map +1 -0
- package/dist/cli/commands/enums.d.ts +14 -0
- package/dist/cli/commands/enums.d.ts.map +1 -0
- package/dist/cli/commands/enums.js +83 -0
- package/dist/cli/commands/enums.js.map +1 -0
- package/dist/cli/commands/field-add.d.ts.map +1 -1
- package/dist/cli/commands/field-add.js +12 -4
- package/dist/cli/commands/field-add.js.map +1 -1
- package/dist/cli/commands/graphql-schema.d.ts +9 -0
- package/dist/cli/commands/graphql-schema.d.ts.map +1 -0
- package/dist/cli/commands/graphql-schema.js +35 -0
- package/dist/cli/commands/graphql-schema.js.map +1 -0
- package/dist/cli/commands/openapi.d.ts.map +1 -1
- package/dist/cli/commands/openapi.js +4 -1
- package/dist/cli/commands/openapi.js.map +1 -1
- package/dist/cli/index.js +36 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/types/commands.d.ts +24 -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 +5 -0
- package/dist/cli/types/values.d.ts.map +1 -1
- package/dist/cli/types/values.js +5 -0
- package/dist/cli/types/values.js.map +1 -1
- package/dist/core/api/error.d.ts +3 -2
- package/dist/core/api/error.d.ts.map +1 -1
- package/dist/core/api/error.js +20 -16
- package/dist/core/api/error.js.map +1 -1
- package/dist/core/audit/index.d.ts +2 -2
- package/dist/core/audit/index.d.ts.map +1 -1
- package/dist/core/audit/index.js +1 -1
- package/dist/core/audit/index.js.map +1 -1
- package/dist/core/audit/types.d.ts +25 -2
- package/dist/core/audit/types.d.ts.map +1 -1
- package/dist/core/audit/types.js +11 -0
- package/dist/core/audit/types.js.map +1 -1
- package/dist/core/i18n/ar.d.ts.map +1 -1
- package/dist/core/i18n/ar.js +8 -0
- 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 +8 -0
- package/dist/core/i18n/de.js.map +1 -1
- package/dist/core/i18n/en.d.ts +8 -0
- package/dist/core/i18n/en.d.ts.map +1 -1
- package/dist/core/i18n/en.js +8 -0
- 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 +8 -0
- 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 +8 -0
- 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 +8 -0
- 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 +8 -0
- 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 +8 -0
- 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 +8 -0
- 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 +8 -0
- 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 +8 -0
- 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 +8 -0
- 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 +8 -0
- 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 +8 -0
- package/dist/core/i18n/zh.js.map +1 -1
- package/dist/core/object/describe.d.ts +11 -0
- package/dist/core/object/describe.d.ts.map +1 -1
- package/dist/core/object/describe.js +8 -0
- package/dist/core/object/describe.js.map +1 -1
- package/dist/core/object/enums.d.ts +5 -0
- package/dist/core/object/enums.d.ts.map +1 -0
- package/dist/core/object/enums.js +67 -0
- package/dist/core/object/enums.js.map +1 -0
- package/dist/core/object/gen-types.d.ts +2 -2
- package/dist/core/object/gen-types.d.ts.map +1 -1
- package/dist/core/object/gen-types.js +39 -2
- package/dist/core/object/gen-types.js.map +1 -1
- package/dist/core/object/index.d.ts +1 -0
- package/dist/core/object/index.d.ts.map +1 -1
- package/dist/core/object/index.js +1 -0
- 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 +11 -0
- package/dist/core/object/migrations.js.map +1 -1
- package/dist/core/object/registry.d.ts +4 -1
- package/dist/core/object/registry.d.ts.map +1 -1
- package/dist/core/object/registry.js +5 -2
- 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/validate/field.d.ts +3 -1
- package/dist/core/object/validate/field.d.ts.map +1 -1
- package/dist/core/object/validate/field.js +63 -29
- package/dist/core/object/validate/field.js.map +1 -1
- package/dist/core/object/validate/object.d.ts +6 -1
- package/dist/core/object/validate/object.d.ts.map +1 -1
- package/dist/core/object/validate/object.js +5 -1
- package/dist/core/object/validate/object.js.map +1 -1
- package/dist/core/storage/apply.d.ts +3 -1
- package/dist/core/storage/apply.d.ts.map +1 -1
- package/dist/core/storage/apply.js +6 -2
- package/dist/core/storage/apply.js.map +1 -1
- package/dist/core/storage/index.d.ts +1 -0
- package/dist/core/storage/index.d.ts.map +1 -1
- package/dist/core/storage/index.js.map +1 -1
- package/dist/core/storage/meta.d.ts +4 -3
- package/dist/core/storage/meta.d.ts.map +1 -1
- package/dist/core/storage/meta.js +5 -4
- package/dist/core/storage/meta.js.map +1 -1
- package/dist/core/storage/migrate.d.ts +8 -0
- package/dist/core/storage/migrate.d.ts.map +1 -1
- package/dist/core/storage/migrate.js +33 -12
- package/dist/core/storage/migrate.js.map +1 -1
- package/dist/core/storage/queryable.d.ts +14 -0
- package/dist/core/storage/queryable.d.ts.map +1 -0
- package/dist/core/storage/queryable.js +2 -0
- package/dist/core/storage/queryable.js.map +1 -0
- package/dist/core/storage/system-tables.d.ts +2 -0
- package/dist/core/storage/system-tables.d.ts.map +1 -1
- package/dist/core/storage/system-tables.js +39 -0
- package/dist/core/storage/system-tables.js.map +1 -1
- package/dist/core/tools/types.d.ts +1 -1
- package/dist/core/tools/types.d.ts.map +1 -1
- package/dist/core/types/enum-registry.d.ts +33 -0
- package/dist/core/types/enum-registry.d.ts.map +1 -0
- package/dist/core/types/enum-registry.js +21 -0
- package/dist/core/types/enum-registry.js.map +1 -0
- package/dist/core/types/index.d.ts +3 -0
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/index.js +2 -0
- package/dist/core/types/index.js.map +1 -1
- package/dist/core/types/principal.d.ts +34 -0
- package/dist/core/types/principal.d.ts.map +1 -0
- package/dist/core/types/principal.js +32 -0
- package/dist/core/types/principal.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/runtime/data-access/cursor.d.ts +9 -0
- package/dist/runtime/data-access/cursor.d.ts.map +1 -0
- package/dist/runtime/data-access/cursor.js +26 -0
- package/dist/runtime/data-access/cursor.js.map +1 -0
- package/dist/runtime/data-access/index.d.ts +2 -0
- package/dist/runtime/data-access/index.d.ts.map +1 -1
- package/dist/runtime/data-access/index.js +2 -0
- package/dist/runtime/data-access/index.js.map +1 -1
- package/dist/runtime/data-access/query.d.ts +1 -1
- package/dist/runtime/data-access/query.d.ts.map +1 -1
- package/dist/runtime/data-access/query.js +109 -36
- package/dist/runtime/data-access/query.js.map +1 -1
- package/dist/runtime/data-access/rbac.d.ts +2 -2
- package/dist/runtime/data-access/rbac.d.ts.map +1 -1
- package/dist/runtime/data-access/rbac.js +86 -47
- package/dist/runtime/data-access/rbac.js.map +1 -1
- package/dist/runtime/data-access/types.d.ts +24 -9
- package/dist/runtime/data-access/types.d.ts.map +1 -1
- package/dist/runtime/data-access/types.js +9 -1
- package/dist/runtime/data-access/types.js.map +1 -1
- package/dist/runtime/engine.d.ts +13 -2
- package/dist/runtime/engine.d.ts.map +1 -1
- package/dist/runtime/engine.js +57 -14
- package/dist/runtime/engine.js.map +1 -1
- package/dist/runtime/enums/index.d.ts +3 -0
- package/dist/runtime/enums/index.d.ts.map +1 -0
- package/dist/runtime/enums/index.js +2 -0
- package/dist/runtime/enums/index.js.map +1 -0
- package/dist/runtime/enums/loader.d.ts +27 -0
- package/dist/runtime/enums/loader.d.ts.map +1 -0
- package/dist/runtime/enums/loader.js +61 -0
- package/dist/runtime/enums/loader.js.map +1 -0
- package/dist/runtime/git/autoCommit.d.ts +1 -1
- package/dist/runtime/git/autoCommit.d.ts.map +1 -1
- package/dist/runtime/git/autoCommit.js +20 -1
- package/dist/runtime/git/autoCommit.js.map +1 -1
- package/dist/runtime/git/loader.d.ts +5 -1
- package/dist/runtime/git/loader.d.ts.map +1 -1
- package/dist/runtime/git/loader.js +6 -1
- package/dist/runtime/git/loader.js.map +1 -1
- package/dist/runtime/git/sync.d.ts +18 -3
- package/dist/runtime/git/sync.d.ts.map +1 -1
- package/dist/runtime/git/sync.js +25 -25
- package/dist/runtime/git/sync.js.map +1 -1
- package/dist/runtime/metadata/cache.d.ts +17 -5
- package/dist/runtime/metadata/cache.d.ts.map +1 -1
- package/dist/runtime/metadata/cache.js +46 -19
- package/dist/runtime/metadata/cache.js.map +1 -1
- package/dist/runtime/metadata/index.d.ts +3 -1
- package/dist/runtime/metadata/index.d.ts.map +1 -1
- package/dist/runtime/metadata/index.js +2 -1
- package/dist/runtime/metadata/index.js.map +1 -1
- package/dist/runtime/metadata/revision.d.ts +41 -0
- package/dist/runtime/metadata/revision.d.ts.map +1 -0
- package/dist/runtime/metadata/revision.js +53 -0
- package/dist/runtime/metadata/revision.js.map +1 -0
- package/dist/runtime/tools/executor.d.ts +1 -1
- package/dist/runtime/tools/executor.d.ts.map +1 -1
- package/dist/runtime/tools/executor.js +2 -1
- package/dist/runtime/tools/executor.js.map +1 -1
- package/dist/subsystems/audit/index.d.ts +10 -2
- package/dist/subsystems/audit/index.d.ts.map +1 -1
- package/dist/subsystems/audit/index.js +14 -1
- package/dist/subsystems/audit/index.js.map +1 -1
- package/dist/subsystems/audit/outbox.d.ts +33 -0
- package/dist/subsystems/audit/outbox.d.ts.map +1 -0
- package/dist/subsystems/audit/outbox.js +111 -0
- package/dist/subsystems/audit/outbox.js.map +1 -0
- package/dist/subsystems/audit/store.d.ts +3 -2
- package/dist/subsystems/audit/store.d.ts.map +1 -1
- package/dist/subsystems/audit/store.js +9 -7
- package/dist/subsystems/audit/store.js.map +1 -1
- package/dist/subsystems/script/bridge.d.ts.map +1 -1
- package/dist/subsystems/script/bridge.js +2 -1
- package/dist/subsystems/script/bridge.js.map +1 -1
- package/dist/subsystems/workflow/scheduler.d.ts.map +1 -1
- package/dist/subsystems/workflow/scheduler.js +2 -1
- package/dist/subsystems/workflow/scheduler.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/runtime/git/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/runtime/git/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE3E,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAiC5C;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAA0B;IACzD,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC5D,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,IAAI,WAAW,CAAC,4BAA4B,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE;QAC3D,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC,CAAC;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEhD,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAEvG,IAAI,KAAK,GAA6C,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACnF,IAAI,QAA4D,CAAC;IAEjE,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE;QACxC,WAAW,EAAE,GAAG;QAChB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,QAAQ,EACN,OAAO,CAAC,MAAM,KAAK,IAAI;YACrB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;gBACf,KAAK,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACnD,QAAQ,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE;oBAC3C,WAAW,EAAE,UAAU;oBACvB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;oBACnC,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,KAAK,EAAE,OAAO,CAAC,KAAK;iBACrB,CAAC,CAAC;YACL,CAAC;KACR,CAAC,CAAC;IAEH,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AACrE,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Pool } from 'pg';
|
|
2
|
+
import type { SqlQueryable } from '../../core/index.js';
|
|
2
3
|
export interface MetadataRow {
|
|
3
4
|
objectName: string;
|
|
4
5
|
contentHash: string;
|
|
@@ -10,16 +11,27 @@ export interface MetadataEntry {
|
|
|
10
11
|
definition: unknown;
|
|
11
12
|
}
|
|
12
13
|
/** read the whole metadata cache keyed by object name */
|
|
13
|
-
export declare function readMetadataCache(
|
|
14
|
-
/** upsert metadata cache entries
|
|
14
|
+
export declare function readMetadataCache(db: SqlQueryable): Promise<Map<string, MetadataRow>>;
|
|
15
|
+
/** upsert metadata cache entries on an existing SqlQueryable (no transaction management) */
|
|
16
|
+
export declare function writeMetadataCacheOn(db: SqlQueryable, entries: MetadataEntry[]): Promise<void>;
|
|
17
|
+
/** upsert metadata cache entries inside its own transaction */
|
|
15
18
|
export declare function writeMetadataCache(pool: Pool, entries: MetadataEntry[]): Promise<void>;
|
|
16
19
|
/** drop metadata cache rows for objects that no longer exist on disk */
|
|
17
|
-
export declare function invalidateMetadata(
|
|
20
|
+
export declare function invalidateMetadata(db: SqlQueryable, names: string[]): Promise<void>;
|
|
18
21
|
/**
|
|
19
|
-
* Bring the metadata cache in sync
|
|
20
|
-
*
|
|
22
|
+
* Bring the metadata cache in sync on an existing SqlQueryable (no transaction
|
|
23
|
+
* management) — used inside the atomic deploy transaction. Returns which
|
|
21
24
|
* objects were updated (content hash changed) and removed.
|
|
22
25
|
*/
|
|
26
|
+
export declare function syncMetadataCacheOn(db: SqlQueryable, files: MetadataEntry[]): Promise<{
|
|
27
|
+
updated: string[];
|
|
28
|
+
removed: string[];
|
|
29
|
+
}>;
|
|
30
|
+
/**
|
|
31
|
+
* Bring the metadata cache in sync with the loaded schema files: upsert the
|
|
32
|
+
* current definitions and prune rows for removed objects. Runs in one
|
|
33
|
+
* transaction.
|
|
34
|
+
*/
|
|
23
35
|
export declare function syncMetadataCache(pool: Pool, files: MetadataEntry[]): Promise<{
|
|
24
36
|
updated: string[];
|
|
25
37
|
removed: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/runtime/metadata/cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/runtime/metadata/cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAIxD,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,yDAAyD;AACzD,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAa3F;AAED,4FAA4F;AAC5F,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAapG;AAED,+DAA+D;AAC/D,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAa5F;AAED,wEAAwE;AACxE,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzF;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,YAAY,EAChB,KAAK,EAAE,aAAa,EAAE,GACrB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAOnD;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,aAAa,EAAE,GACrB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAanD"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const TABLE = 'weavekit_metadata';
|
|
2
2
|
/** read the whole metadata cache keyed by object name */
|
|
3
|
-
export async function readMetadataCache(
|
|
4
|
-
const result = await
|
|
3
|
+
export async function readMetadataCache(db) {
|
|
4
|
+
const result = await db.query(`SELECT object_name, content_hash, applied_at FROM ${TABLE}`);
|
|
5
5
|
const map = new Map();
|
|
6
6
|
for (const row of result.rows) {
|
|
7
7
|
map.set(row.object_name, {
|
|
@@ -12,21 +12,27 @@ export async function readMetadataCache(pool) {
|
|
|
12
12
|
}
|
|
13
13
|
return map;
|
|
14
14
|
}
|
|
15
|
-
/** upsert metadata cache entries
|
|
15
|
+
/** upsert metadata cache entries on an existing SqlQueryable (no transaction management) */
|
|
16
|
+
export async function writeMetadataCacheOn(db, entries) {
|
|
17
|
+
if (entries.length === 0)
|
|
18
|
+
return;
|
|
19
|
+
for (const entry of entries) {
|
|
20
|
+
await db.query(`INSERT INTO ${TABLE} (object_name, content_hash, definition, updated_at)
|
|
21
|
+
VALUES ($1, $2, $3::jsonb, now())
|
|
22
|
+
ON CONFLICT (object_name) DO UPDATE
|
|
23
|
+
SET content_hash = EXCLUDED.content_hash,
|
|
24
|
+
definition = EXCLUDED.definition,
|
|
25
|
+
updated_at = now()`, [entry.name, entry.contentHash, JSON.stringify(entry.definition)]);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** upsert metadata cache entries inside its own transaction */
|
|
16
29
|
export async function writeMetadataCache(pool, entries) {
|
|
17
30
|
if (entries.length === 0)
|
|
18
31
|
return;
|
|
19
32
|
const client = await pool.connect();
|
|
20
33
|
try {
|
|
21
34
|
await client.query('BEGIN');
|
|
22
|
-
|
|
23
|
-
await client.query(`INSERT INTO ${TABLE} (object_name, content_hash, definition, updated_at)
|
|
24
|
-
VALUES ($1, $2, $3::jsonb, now())
|
|
25
|
-
ON CONFLICT (object_name) DO UPDATE
|
|
26
|
-
SET content_hash = EXCLUDED.content_hash,
|
|
27
|
-
definition = EXCLUDED.definition,
|
|
28
|
-
updated_at = now()`, [entry.name, entry.contentHash, JSON.stringify(entry.definition)]);
|
|
29
|
-
}
|
|
35
|
+
await writeMetadataCacheOn(client, entries);
|
|
30
36
|
await client.query('COMMIT');
|
|
31
37
|
}
|
|
32
38
|
catch (error) {
|
|
@@ -38,22 +44,43 @@ export async function writeMetadataCache(pool, entries) {
|
|
|
38
44
|
}
|
|
39
45
|
}
|
|
40
46
|
/** drop metadata cache rows for objects that no longer exist on disk */
|
|
41
|
-
export async function invalidateMetadata(
|
|
47
|
+
export async function invalidateMetadata(db, names) {
|
|
42
48
|
if (names.length === 0)
|
|
43
49
|
return;
|
|
44
|
-
await
|
|
50
|
+
await db.query(`DELETE FROM ${TABLE} WHERE object_name = ANY($1)`, [names]);
|
|
45
51
|
}
|
|
46
52
|
/**
|
|
47
|
-
* Bring the metadata cache in sync
|
|
48
|
-
*
|
|
53
|
+
* Bring the metadata cache in sync on an existing SqlQueryable (no transaction
|
|
54
|
+
* management) — used inside the atomic deploy transaction. Returns which
|
|
49
55
|
* objects were updated (content hash changed) and removed.
|
|
50
56
|
*/
|
|
51
|
-
export async function
|
|
52
|
-
const existing = await readMetadataCache(
|
|
57
|
+
export async function syncMetadataCacheOn(db, files) {
|
|
58
|
+
const existing = await readMetadataCache(db);
|
|
53
59
|
const updated = files.filter((f) => existing.get(f.name)?.contentHash !== f.contentHash).map((f) => f.name);
|
|
54
60
|
const removed = [...existing.keys()].filter((name) => !files.some((f) => f.name === name));
|
|
55
|
-
await
|
|
56
|
-
await invalidateMetadata(
|
|
61
|
+
await writeMetadataCacheOn(db, files);
|
|
62
|
+
await invalidateMetadata(db, removed);
|
|
57
63
|
return { updated, removed };
|
|
58
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Bring the metadata cache in sync with the loaded schema files: upsert the
|
|
67
|
+
* current definitions and prune rows for removed objects. Runs in one
|
|
68
|
+
* transaction.
|
|
69
|
+
*/
|
|
70
|
+
export async function syncMetadataCache(pool, files) {
|
|
71
|
+
const client = await pool.connect();
|
|
72
|
+
try {
|
|
73
|
+
await client.query('BEGIN');
|
|
74
|
+
const result = await syncMetadataCacheOn(client, files);
|
|
75
|
+
await client.query('COMMIT');
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
await client.query('ROLLBACK');
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
finally {
|
|
83
|
+
client.release();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
59
86
|
//# sourceMappingURL=cache.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/runtime/metadata/cache.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/runtime/metadata/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
export { readMetadataCache, writeMetadataCache, invalidateMetadata, syncMetadataCache, } from './cache.js';
|
|
1
|
+
export { readMetadataCache, writeMetadataCache, writeMetadataCacheOn, invalidateMetadata, syncMetadataCache, syncMetadataCacheOn, } from './cache.js';
|
|
2
2
|
export type { MetadataRow, MetadataEntry } from './cache.js';
|
|
3
|
+
export { computeSchemaHash, latestSchemaRevision, writeSchemaRevision, } from './revision.js';
|
|
4
|
+
export type { SchemaRevision, SchemaRevisionInput } from './revision.js';
|
|
3
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/metadata/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/metadata/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export { readMetadataCache, writeMetadataCache, invalidateMetadata, syncMetadataCache, } from './cache.js';
|
|
1
|
+
export { readMetadataCache, writeMetadataCache, writeMetadataCacheOn, invalidateMetadata, syncMetadataCache, syncMetadataCacheOn, } from './cache.js';
|
|
2
|
+
export { computeSchemaHash, latestSchemaRevision, writeSchemaRevision, } from './revision.js';
|
|
2
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/metadata/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/metadata/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type SqlQueryable } from '../../core/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Global schema revisions (`weavekit_schema_revision`): an append-only history
|
|
4
|
+
* anchored on a deterministic aggregate content hash over the schema files.
|
|
5
|
+
* This is the "schema revision = database revision = runtime revision" anchor —
|
|
6
|
+
* Git / DB / metadata cache / runtime can all be compared to one id.
|
|
7
|
+
*/
|
|
8
|
+
export interface SchemaRevision {
|
|
9
|
+
revision: number;
|
|
10
|
+
contentHash: string;
|
|
11
|
+
parentRevision: number | null;
|
|
12
|
+
sourceCommit: string | null;
|
|
13
|
+
actor: string | null;
|
|
14
|
+
objects: string[];
|
|
15
|
+
status: string;
|
|
16
|
+
createdAt: Date;
|
|
17
|
+
}
|
|
18
|
+
export interface SchemaRevisionInput {
|
|
19
|
+
contentHash: string;
|
|
20
|
+
sourceCommit?: string;
|
|
21
|
+
actor?: string;
|
|
22
|
+
objects: readonly string[];
|
|
23
|
+
status?: string;
|
|
24
|
+
}
|
|
25
|
+
/** deterministic, order-independent aggregate hash over the per-object content hashes */
|
|
26
|
+
export declare function computeSchemaHash(files: readonly {
|
|
27
|
+
name: string;
|
|
28
|
+
contentHash: string;
|
|
29
|
+
}[]): string;
|
|
30
|
+
/** the most recent revision, or null when none has been recorded */
|
|
31
|
+
export declare function latestSchemaRevision(db: SqlQueryable): Promise<SchemaRevision | null>;
|
|
32
|
+
/**
|
|
33
|
+
* Record a schema revision. Idempotent by content hash: when the latest
|
|
34
|
+
* revision already carries the same hash, no new row is written and the
|
|
35
|
+
* existing id is returned. `parent_revision` links the chain.
|
|
36
|
+
*/
|
|
37
|
+
export declare function writeSchemaRevision(db: SqlQueryable, input: SchemaRevisionInput): Promise<{
|
|
38
|
+
revision: number;
|
|
39
|
+
created: boolean;
|
|
40
|
+
}>;
|
|
41
|
+
//# sourceMappingURL=revision.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revision.d.ts","sourceRoot":"","sources":["../../../src/runtime/metadata/revision.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEvE;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,yFAAyF;AACzF,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EAAE,GACtD,MAAM,CAMR;AAgBD,oEAAoE;AACpE,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAI3F;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,YAAY,EAChB,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAmBjD"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { SYSTEM_TABLES } from '../../core/index.js';
|
|
3
|
+
const TABLE = SYSTEM_TABLES.SCHEMA_REVISION;
|
|
4
|
+
/** deterministic, order-independent aggregate hash over the per-object content hashes */
|
|
5
|
+
export function computeSchemaHash(files) {
|
|
6
|
+
const canonical = [...files]
|
|
7
|
+
.map((f) => `${f.name}:${f.contentHash}`)
|
|
8
|
+
.sort()
|
|
9
|
+
.join('\n');
|
|
10
|
+
return createHash('sha256').update(canonical, 'utf8').digest('hex');
|
|
11
|
+
}
|
|
12
|
+
function rowToRevision(row) {
|
|
13
|
+
const parent = row.parent_revision;
|
|
14
|
+
return {
|
|
15
|
+
revision: Number(row.revision),
|
|
16
|
+
contentHash: String(row.content_hash),
|
|
17
|
+
parentRevision: parent === null || parent === undefined ? null : Number(parent),
|
|
18
|
+
sourceCommit: row.source_commit ?? null,
|
|
19
|
+
actor: row.actor ?? null,
|
|
20
|
+
objects: row.objects ?? [],
|
|
21
|
+
status: String(row.status),
|
|
22
|
+
createdAt: row.created_at,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/** the most recent revision, or null when none has been recorded */
|
|
26
|
+
export async function latestSchemaRevision(db) {
|
|
27
|
+
const res = await db.query(`SELECT * FROM ${TABLE} ORDER BY revision DESC LIMIT 1`);
|
|
28
|
+
const row = res.rows[0];
|
|
29
|
+
return row === undefined ? null : rowToRevision(row);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Record a schema revision. Idempotent by content hash: when the latest
|
|
33
|
+
* revision already carries the same hash, no new row is written and the
|
|
34
|
+
* existing id is returned. `parent_revision` links the chain.
|
|
35
|
+
*/
|
|
36
|
+
export async function writeSchemaRevision(db, input) {
|
|
37
|
+
const latest = await latestSchemaRevision(db);
|
|
38
|
+
if (latest !== null && latest.contentHash === input.contentHash) {
|
|
39
|
+
return { revision: latest.revision, created: false };
|
|
40
|
+
}
|
|
41
|
+
const res = await db.query(`INSERT INTO ${TABLE} (content_hash, parent_revision, source_commit, actor, objects, status)
|
|
42
|
+
VALUES ($1, $2, $3, $4, $5::jsonb, $6)
|
|
43
|
+
RETURNING revision`, [
|
|
44
|
+
input.contentHash,
|
|
45
|
+
latest?.revision ?? null,
|
|
46
|
+
input.sourceCommit ?? null,
|
|
47
|
+
input.actor ?? null,
|
|
48
|
+
JSON.stringify(input.objects),
|
|
49
|
+
input.status ?? 'active',
|
|
50
|
+
]);
|
|
51
|
+
return { revision: Number(res.rows[0].revision), created: true };
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=revision.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revision.js","sourceRoot":"","sources":["../../../src/runtime/metadata/revision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAqB,MAAM,qBAAqB,CAAC;AA2BvE,MAAM,KAAK,GAAG,aAAa,CAAC,eAAe,CAAC;AAE5C,yFAAyF;AACzF,MAAM,UAAU,iBAAiB,CAC/B,KAAuD;IAEvD,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC;SACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;SACxC,IAAI,EAAE;SACN,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,aAAa,CAAC,GAA4B;IACjD,MAAM,MAAM,GAAG,GAAG,CAAC,eAAe,CAAC;IACnC,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC9B,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;QACrC,cAAc,EAAE,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;QAC/E,YAAY,EAAG,GAAG,CAAC,aAA+B,IAAI,IAAI;QAC1D,KAAK,EAAG,GAAG,CAAC,KAAuB,IAAI,IAAI;QAC3C,OAAO,EAAG,GAAG,CAAC,OAA2B,IAAI,EAAE;QAC/C,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;QAC1B,SAAS,EAAE,GAAG,CAAC,UAAkB;KAClC,CAAC;AACJ,CAAC;AAED,oEAAoE;AACpE,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,EAAgB;IACzD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,iBAAiB,KAAK,iCAAiC,CAAC,CAAC;IACpF,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAwC,CAAC;IAC/D,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AACvD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,EAAgB,EAChB,KAA0B;IAE1B,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAC9C,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC;QAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACvD,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,KAAK,CACxB,eAAe,KAAK;;wBAEA,EACpB;QACE,KAAK,CAAC,WAAW;QACjB,MAAM,EAAE,QAAQ,IAAI,IAAI;QACxB,KAAK,CAAC,YAAY,IAAI,IAAI;QAC1B,KAAK,CAAC,KAAK,IAAI,IAAI;QACnB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;QAC7B,KAAK,CAAC,MAAM,IAAI,QAAQ;KACzB,CACF,CAAC;IACF,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAA0B,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC7F,CAAC"}
|
|
@@ -34,7 +34,7 @@ export interface ToolExecutorOptions {
|
|
|
34
34
|
pool: Pool;
|
|
35
35
|
registry: ObjectRegistry;
|
|
36
36
|
audit?: AuditSink;
|
|
37
|
-
/** rate-limit / alert handle (adapter-provided;
|
|
37
|
+
/** rate-limit / alert handle (adapter-provided; agent credential scope) */
|
|
38
38
|
guardrails: ToolGuardrails;
|
|
39
39
|
approvals?: ApprovalsQueue;
|
|
40
40
|
/** guardrail policies evaluated before every custom-tool call (empty = no gate) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/runtime/tools/executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAG/B,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAuD,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAoB,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC/T,OAAO,KAAK,EAAE,gBAAgB,EAAkC,MAAM,yBAAyB,CAAC;AAIhG;;;;;;;;;GASG;AAEH,uFAAuF;AACvF,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAQtG;AAED,iHAAiH;AACjH,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG;IAC3C,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvG,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,SAAS,CAAC;IAAC,OAAO,CAAC,EAAE,gBAAgB,CAAA;CAAO,GAC9D,cAAc,CAqDhB;AAED,MAAM,WAAW,mBAAmB;IAClC,qEAAqE;IACrE,UAAU,EAAE,gBAAgB,CAAC;IAC7B,iEAAiE;IACjE,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/runtime/tools/executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAG/B,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAuD,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAoB,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC/T,OAAO,KAAK,EAAE,gBAAgB,EAAkC,MAAM,yBAAyB,CAAC;AAIhG;;;;;;;;;GASG;AAEH,uFAAuF;AACvF,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAQtG;AAED,iHAAiH;AACjH,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG;IAC3C,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvG,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,SAAS,CAAC;IAAC,OAAO,CAAC,EAAE,gBAAgB,CAAA;CAAO,GAC9D,cAAc,CAqDhB;AAED,MAAM,WAAW,mBAAmB;IAClC,qEAAqE;IACrE,UAAU,EAAE,gBAAgB,CAAC;IAC7B,iEAAiE;IACjE,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,2EAA2E;IAC3E,UAAU,EAAE,cAAc,CAAC;IAC3B,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,mFAAmF;IACnF,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,eAAe,CAAC;IACzB,KAAK,EAAE,SAAS,CAAC;IACjB,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,mFAAmF;AACnF,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,cAAc,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,4EAA4E;IAC5E,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,sBAAsB,EAAE,CAAC;IAC3F,sFAAsF;IACtF,OAAO,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,wBAAwB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAChH,uEAAuE;IACvE,SAAS,EAAE,aAAa,CAAC;CAC1B;AAcD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAkH7E;AAED,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { NOOP_AUDIT_SINK, createMemoryApprovalsBackend } from '../../core/index.js';
|
|
1
|
+
import { NOOP_AUDIT_SINK, createMemoryApprovalsBackend, userPrincipal } from '../../core/index.js';
|
|
2
2
|
import { AUDIT_ACTOR_TYPES } from '../../core/index.js';
|
|
3
3
|
import { withTx as dataAccessWithTx } from '../data-access/index.js';
|
|
4
4
|
import { applyMask, evaluateCall } from './policies.js';
|
|
@@ -139,6 +139,7 @@ export function createToolExecutor(options) {
|
|
|
139
139
|
const base = {
|
|
140
140
|
pool: options.pool,
|
|
141
141
|
registry: options.registry,
|
|
142
|
+
principal: userPrincipal(req.subject),
|
|
142
143
|
locale: req.locale ?? options.locale,
|
|
143
144
|
};
|
|
144
145
|
const ctx = toolContext(base, req);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/runtime/tools/executor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/runtime/tools/executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { Pool } from 'pg';
|
|
2
2
|
import type { AuditEvent, AuditSink } from '../../core/audit/index.js';
|
|
3
3
|
import type { AuditQuery, AuditQueryResult } from './store.js';
|
|
4
|
-
export { AUDIT_ACTOR_TYPES, DATA_ACTIONS, NOOP_AUDIT_SINK } from '../../core/audit/index.js';
|
|
5
|
-
export type { AuditActorType, AuditEvent, AuditFilter, AuditSink, DataAction } from '../../core/audit/index.js';
|
|
4
|
+
export { AUDIT_ACTOR_TYPES, AUDIT_MODES, DATA_ACTIONS, NOOP_AUDIT_SINK } from '../../core/audit/index.js';
|
|
5
|
+
export type { AuditActorType, AuditEvent, AuditFilter, AuditMode, AuditSink, DataAction } from '../../core/audit/index.js';
|
|
6
6
|
export type { AuditQuery, AuditQueryResult } from './store.js';
|
|
7
|
+
export { createOutboxAuditSink, startAuditOutboxRelay, writeOutboxInTx } from './outbox.js';
|
|
8
|
+
export type { AuditOutboxRelay, AuditOutboxRelayOptions } from './outbox.js';
|
|
7
9
|
/** audit engine: storage (single/batch insert) + query + lifecycle */
|
|
8
10
|
export interface AuditEngine extends AuditSink {
|
|
9
11
|
record(event: AuditEvent): Promise<void>;
|
|
@@ -14,6 +16,12 @@ export interface AuditEngine extends AuditSink {
|
|
|
14
16
|
}
|
|
15
17
|
/** create the PG-backed audit engine (table provisioned by `weave migrate`) */
|
|
16
18
|
export declare function createAudit(pool: Pool): Promise<AuditEngine>;
|
|
19
|
+
/**
|
|
20
|
+
* Transactional-mode sink: the audit row is written with the business write in
|
|
21
|
+
* the caller's transaction (`recordInTx`); non-transactional calls write
|
|
22
|
+
* directly. No process buffer — a failure rolls the audit back with the change.
|
|
23
|
+
*/
|
|
24
|
+
export declare function createTransactionalAuditSink(audit: AuditEngine): AuditSink;
|
|
17
25
|
export interface BufferedSinkOptions {
|
|
18
26
|
/** events per batch; defaults to 50 */
|
|
19
27
|
batchSize?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/subsystems/audit/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEvE,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/subsystems/audit/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEvE,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC1G,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC3H,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC5F,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAE7E,sEAAsE;AACtE,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACtD,gFAAgF;IAChF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,+EAA+E;AAC/E,wBAAsB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAelE;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,CAM1E;AAED,MAAM,WAAW,mBAAmB;IAClC,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0FAA0F;IAC1F,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAKD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS,EAChB,OAAO,GAAE,mBAAwB,GAChC,SAAS,GAAG;IAAE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CA8FxC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { insertAudit, insertAuditBatch, queryAudit } from './store.js';
|
|
2
|
-
export { AUDIT_ACTOR_TYPES, DATA_ACTIONS, NOOP_AUDIT_SINK } from '../../core/audit/index.js';
|
|
2
|
+
export { AUDIT_ACTOR_TYPES, AUDIT_MODES, DATA_ACTIONS, NOOP_AUDIT_SINK } from '../../core/audit/index.js';
|
|
3
|
+
export { createOutboxAuditSink, startAuditOutboxRelay, writeOutboxInTx } from './outbox.js';
|
|
3
4
|
/** create the PG-backed audit engine (table provisioned by `weave migrate`) */
|
|
4
5
|
export async function createAudit(pool) {
|
|
5
6
|
return {
|
|
@@ -17,6 +18,18 @@ export async function createAudit(pool) {
|
|
|
17
18
|
},
|
|
18
19
|
};
|
|
19
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Transactional-mode sink: the audit row is written with the business write in
|
|
23
|
+
* the caller's transaction (`recordInTx`); non-transactional calls write
|
|
24
|
+
* directly. No process buffer — a failure rolls the audit back with the change.
|
|
25
|
+
*/
|
|
26
|
+
export function createTransactionalAuditSink(audit) {
|
|
27
|
+
return {
|
|
28
|
+
record: (event) => audit.record(event),
|
|
29
|
+
recordBatch: (events) => audit.recordBatch(events),
|
|
30
|
+
recordInTx: (event, client) => insertAudit(client, event),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
20
33
|
/** hard cap on retained events when the sink is unreachable — above this the oldest are dropped + reported (prevents OOM) */
|
|
21
34
|
const MAX_BUFFERED_EVENTS = 10_000;
|
|
22
35
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/subsystems/audit/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGvE,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/subsystems/audit/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGvE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAG1G,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAY5F,+EAA+E;AAC/E,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAU;IAC1C,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,KAAK;YAChB,MAAM,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC;QACD,KAAK,CAAC,WAAW,CAAC,MAAM;YACtB,MAAM,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,MAAM;YAChB,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClC,CAAC;QACD,KAAK,CAAC,KAAK;YACT,0BAA0B;QAC5B,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAAC,KAAkB;IAC7D,OAAO;QACL,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;QACtC,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;QAClD,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC;KAC1D,CAAC;AACJ,CAAC;AAWD,6HAA6H;AAC7H,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEnC;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAgB,EAChB,UAA+B,EAAE;IAEjC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,GAAG,CAAC;IACvC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,KAAY,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAE3G,IAAI,MAAM,GAAiB,EAAE,CAAC;IAC9B,IAAI,KAAgD,CAAC;IACrD,IAAI,QAAmC,CAAC;IACxC,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,KAAK,UAAU,QAAQ;QACrB,MAAM,MAAM,GAAG,MAAM,CAAC;QACtB,MAAM,GAAG,EAAE,CAAC;QACZ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAChC,IAAI,CAAC;YACH,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBACpC,MAAM,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,KAAK,IAAI,MAAM;oBAAE,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,mEAAmE;YACnE,uEAAuE;YACvE,uEAAuE;YACvE,+DAA+D;YAC/D,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;YAC1B,IAAI,MAAM,CAAC,MAAM,GAAG,mBAAmB,EAAE,CAAC;gBACxC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;gBACnD,OAAO,CACL,IAAI,KAAK,CACP,kCAAkC,OAAO,CAAC,MAAM,qCAC9C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,GAAG,CACJ,CACF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,KAAK,UAAU,QAAQ;QACrB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,QAAQ,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;gBACjC,QAAQ,GAAG,SAAS,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,MAAM,QAAQ,CAAC;QACjB,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,QAAQ,EAAE,CAAC;IACpC,CAAC;IAED,SAAS,QAAQ;QACf,IAAI,MAAM,IAAI,KAAK,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO;QACpE,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,KAAK,GAAG,SAAS,CAAC;YAClB,KAAK,QAAQ,EAAE,CAAC;QAClB,CAAC,EAAE,OAAO,CAAC,CAAC;QACZ,0EAA0E;QAC1E,2EAA2E;QAC3E,6EAA6E;QAC7E,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAClB,CAAC;IAED,SAAS,OAAO,CAAC,MAAoB;QACnC,IAAI,MAAM;YAAE,OAAO;QACnB,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;QACvB,IAAI,MAAM,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;YAC/B,KAAK,QAAQ,EAAE,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,KAAK;YAChB,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACnB,CAAC;QACD,KAAK,CAAC,WAAW,CAAC,MAAM;YACtB,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC;QACD,KAAK,CAAC,KAAK;YACT,wEAAwE;YACxE,iEAAiE;YACjE,MAAM,GAAG,IAAI,CAAC;YACd,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,KAAK,GAAG,SAAS,CAAC;YACpB,CAAC;YACD,MAAM,QAAQ,EAAE,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Pool, PoolClient } from 'pg';
|
|
2
|
+
import type { AuditEvent, AuditSink } from '../../core/audit/index.js';
|
|
3
|
+
/** insert an outbox row inside the caller's transaction (durable-mode producer) */
|
|
4
|
+
export declare function writeOutboxInTx(client: PoolClient, event: AuditEvent): Promise<void>;
|
|
5
|
+
/**
|
|
6
|
+
* Durable-mode sink: transactional writes go to `weavekit_audit_outbox` (same
|
|
7
|
+
* transaction as the business write); non-transactional writes (RBAC denials,
|
|
8
|
+
* tool calls) enqueue through the pool. A relay then delivers to
|
|
9
|
+
* `weavekit_audit` + the live channel.
|
|
10
|
+
*/
|
|
11
|
+
export declare function createOutboxAuditSink(pool: Pool): AuditSink;
|
|
12
|
+
export interface AuditOutboxRelayOptions {
|
|
13
|
+
pool: Pool;
|
|
14
|
+
/** called after each event is durably written (SSE dual-emit) */
|
|
15
|
+
publish?: (event: AuditEvent) => void;
|
|
16
|
+
pollMs?: number;
|
|
17
|
+
batchSize?: number;
|
|
18
|
+
onError?: (error: Error) => void;
|
|
19
|
+
}
|
|
20
|
+
export interface AuditOutboxRelay {
|
|
21
|
+
/** drain pending rows now (idempotent) */
|
|
22
|
+
drain(): Promise<void>;
|
|
23
|
+
/** stop polling and drain once (used by engine.close) */
|
|
24
|
+
close(): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Background relay draining `weavekit_audit_outbox` into `weavekit_audit` and
|
|
28
|
+
* the live channel. Multi-instance safe (`FOR UPDATE SKIP LOCKED`), and
|
|
29
|
+
* at-least-once: rows are deleted only after a successful insert + commit, so a
|
|
30
|
+
* crash between insert and delete redelivers.
|
|
31
|
+
*/
|
|
32
|
+
export declare function startAuditOutboxRelay(options: AuditOutboxRelayOptions): AuditOutboxRelay;
|
|
33
|
+
//# sourceMappingURL=outbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outbox.d.ts","sourceRoot":"","sources":["../../../src/subsystems/audit/outbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAE3C,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAGvE,mFAAmF;AACnF,wBAAsB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAK1F;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,CAY3D;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,IAAI,CAAC;IACX,iEAAiE;IACjE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,0CAA0C;IAC1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,yDAAyD;IACzD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,uBAAuB,GAAG,gBAAgB,CA+ExF"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { SYSTEM_TABLES } from '../../core/index.js';
|
|
2
|
+
import { insertAuditBatch } from './store.js';
|
|
3
|
+
/** insert an outbox row inside the caller's transaction (durable-mode producer) */
|
|
4
|
+
export async function writeOutboxInTx(client, event) {
|
|
5
|
+
await client.query(`INSERT INTO ${SYSTEM_TABLES.AUDIT_OUTBOX} (event) VALUES ($1::jsonb)`, [JSON.stringify(event)]);
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Durable-mode sink: transactional writes go to `weavekit_audit_outbox` (same
|
|
9
|
+
* transaction as the business write); non-transactional writes (RBAC denials,
|
|
10
|
+
* tool calls) enqueue through the pool. A relay then delivers to
|
|
11
|
+
* `weavekit_audit` + the live channel.
|
|
12
|
+
*/
|
|
13
|
+
export function createOutboxAuditSink(pool) {
|
|
14
|
+
return {
|
|
15
|
+
async record(event) {
|
|
16
|
+
await pool.query(`INSERT INTO ${SYSTEM_TABLES.AUDIT_OUTBOX} (event) VALUES ($1::jsonb)`, [JSON.stringify(event)]);
|
|
17
|
+
},
|
|
18
|
+
async recordInTx(event, client) {
|
|
19
|
+
await writeOutboxInTx(client, event);
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Background relay draining `weavekit_audit_outbox` into `weavekit_audit` and
|
|
25
|
+
* the live channel. Multi-instance safe (`FOR UPDATE SKIP LOCKED`), and
|
|
26
|
+
* at-least-once: rows are deleted only after a successful insert + commit, so a
|
|
27
|
+
* crash between insert and delete redelivers.
|
|
28
|
+
*/
|
|
29
|
+
export function startAuditOutboxRelay(options) {
|
|
30
|
+
const pollMs = options.pollMs ?? 1000;
|
|
31
|
+
const batchSize = options.batchSize ?? 100;
|
|
32
|
+
const onError = options.onError ?? ((error) => console.error('audit outbox relay failed:', error.message));
|
|
33
|
+
let timer;
|
|
34
|
+
let running = false;
|
|
35
|
+
let closed = false;
|
|
36
|
+
async function drainOnce() {
|
|
37
|
+
for (;;) {
|
|
38
|
+
const client = await options.pool.connect();
|
|
39
|
+
let events = [];
|
|
40
|
+
try {
|
|
41
|
+
await client.query('BEGIN');
|
|
42
|
+
const res = await client.query(`SELECT id, event FROM ${SYSTEM_TABLES.AUDIT_OUTBOX} ORDER BY id FOR UPDATE SKIP LOCKED LIMIT $1`, [batchSize]);
|
|
43
|
+
const rows = res.rows;
|
|
44
|
+
if (rows.length === 0) {
|
|
45
|
+
await client.query('COMMIT');
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
events = rows.map((r) => r.event);
|
|
49
|
+
await insertAuditBatch(client, events);
|
|
50
|
+
await client.query(`DELETE FROM ${SYSTEM_TABLES.AUDIT_OUTBOX} WHERE id = ANY($1)`, [rows.map((r) => r.id)]);
|
|
51
|
+
await client.query('COMMIT');
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
await client.query('ROLLBACK').catch(() => { });
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
client.release();
|
|
59
|
+
}
|
|
60
|
+
if (options.publish !== undefined)
|
|
61
|
+
for (const event of events)
|
|
62
|
+
options.publish(event);
|
|
63
|
+
if (events.length < batchSize)
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function schedule() {
|
|
68
|
+
if (closed || timer !== undefined || running)
|
|
69
|
+
return;
|
|
70
|
+
timer = setTimeout(() => {
|
|
71
|
+
timer = undefined;
|
|
72
|
+
void run();
|
|
73
|
+
}, pollMs);
|
|
74
|
+
timer.unref?.();
|
|
75
|
+
}
|
|
76
|
+
async function run() {
|
|
77
|
+
if (running || closed)
|
|
78
|
+
return;
|
|
79
|
+
running = true;
|
|
80
|
+
try {
|
|
81
|
+
await drainOnce();
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
onError(error instanceof Error ? error : new Error(String(error)));
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
running = false;
|
|
88
|
+
schedule();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
schedule();
|
|
92
|
+
return {
|
|
93
|
+
async drain() {
|
|
94
|
+
await drainOnce();
|
|
95
|
+
},
|
|
96
|
+
async close() {
|
|
97
|
+
closed = true;
|
|
98
|
+
if (timer !== undefined) {
|
|
99
|
+
clearTimeout(timer);
|
|
100
|
+
timer = undefined;
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
await drainOnce();
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
onError(error instanceof Error ? error : new Error(String(error)));
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=outbox.js.map
|