@ddd-ts-kit/audit 0.0.0-stage → 0.1.1
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/README.md +559 -2
- package/dist/chain/audit-checkpoint.d.ts +7 -0
- package/dist/chain/audit-checkpoint.d.ts.map +1 -0
- package/dist/chain/audit-checkpoint.js +2 -0
- package/dist/chain/audit-checkpoint.js.map +1 -0
- package/dist/chain/canonicalize.d.ts +8 -0
- package/dist/chain/canonicalize.d.ts.map +1 -0
- package/dist/chain/canonicalize.js +26 -0
- package/dist/chain/canonicalize.js.map +1 -0
- package/dist/chain/chain-head.d.ts +8 -0
- package/dist/chain/chain-head.d.ts.map +1 -0
- package/dist/chain/chain-head.js +2 -0
- package/dist/chain/chain-head.js.map +1 -0
- package/dist/chain/chain-of-tenant.d.ts +9 -0
- package/dist/chain/chain-of-tenant.d.ts.map +1 -0
- package/dist/chain/chain-of-tenant.js +10 -0
- package/dist/chain/chain-of-tenant.js.map +1 -0
- package/dist/chain/empty-chain.d.ts +3 -0
- package/dist/chain/empty-chain.d.ts.map +1 -0
- package/dist/chain/empty-chain.js +5 -0
- package/dist/chain/empty-chain.js.map +1 -0
- package/dist/chain/genesis-hash.d.ts +3 -0
- package/dist/chain/genesis-hash.d.ts.map +1 -0
- package/dist/chain/genesis-hash.js +3 -0
- package/dist/chain/genesis-hash.js.map +1 -0
- package/dist/chain/hash-of.d.ts +5 -0
- package/dist/chain/hash-of.d.ts.map +1 -0
- package/dist/chain/hash-of.js +8 -0
- package/dist/chain/hash-of.js.map +1 -0
- package/dist/chain/head-after.d.ts +4 -0
- package/dist/chain/head-after.d.ts.map +1 -0
- package/dist/chain/head-after.js +4 -0
- package/dist/chain/head-after.js.map +1 -0
- package/dist/chain/seal-checkpoint.d.ts +4 -0
- package/dist/chain/seal-checkpoint.d.ts.map +1 -0
- package/dist/chain/seal-checkpoint.js +7 -0
- package/dist/chain/seal-checkpoint.js.map +1 -0
- package/dist/chain/seal.d.ts +5 -0
- package/dist/chain/seal.d.ts.map +1 -0
- package/dist/chain/seal.js +13 -0
- package/dist/chain/seal.js.map +1 -0
- package/dist/chain/sealing-options.d.ts +12 -0
- package/dist/chain/sealing-options.d.ts.map +1 -0
- package/dist/chain/sealing-options.js +2 -0
- package/dist/chain/sealing-options.js.map +1 -0
- package/dist/drizzle/audit-chains-table.d.ts +61 -0
- package/dist/drizzle/audit-chains-table.d.ts.map +1 -0
- package/dist/drizzle/audit-chains-table.js +12 -0
- package/dist/drizzle/audit-chains-table.js.map +1 -0
- package/dist/drizzle/audit-entries-table.d.ts +424 -0
- package/dist/drizzle/audit-entries-table.d.ts.map +1 -0
- package/dist/drizzle/audit-entries-table.js +44 -0
- package/dist/drizzle/audit-entries-table.js.map +1 -0
- package/dist/drizzle/audit-guard-statements.d.ts +7 -0
- package/dist/drizzle/audit-guard-statements.d.ts.map +1 -0
- package/dist/drizzle/audit-guard-statements.js +10 -0
- package/dist/drizzle/audit-guard-statements.js.map +1 -0
- package/dist/drizzle/drizzle-audit-context.d.ts +7 -0
- package/dist/drizzle/drizzle-audit-context.d.ts.map +1 -0
- package/dist/drizzle/drizzle-audit-context.js +2 -0
- package/dist/drizzle/drizzle-audit-context.js.map +1 -0
- package/dist/drizzle/drizzle-audit-trail.d.ts +17 -0
- package/dist/drizzle/drizzle-audit-trail.d.ts.map +1 -0
- package/dist/drizzle/drizzle-audit-trail.js +28 -0
- package/dist/drizzle/drizzle-audit-trail.js.map +1 -0
- package/dist/drizzle/table-in.d.ts +4 -0
- package/dist/drizzle/table-in.d.ts.map +1 -0
- package/dist/drizzle/table-in.js +6 -0
- package/dist/drizzle/table-in.js.map +1 -0
- package/dist/drizzle.d.ts +6 -0
- package/dist/drizzle.d.ts.map +1 -0
- package/dist/drizzle.js +5 -0
- package/dist/drizzle.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/knex/create-audit-tables.d.ts +9 -0
- package/dist/knex/create-audit-tables.d.ts.map +1 -0
- package/dist/knex/create-audit-tables.js +12 -0
- package/dist/knex/create-audit-tables.js.map +1 -0
- package/dist/knex/drop-audit-tables.d.ts +5 -0
- package/dist/knex/drop-audit-tables.d.ts.map +1 -0
- package/dist/knex/drop-audit-tables.js +8 -0
- package/dist/knex/drop-audit-tables.js.map +1 -0
- package/dist/knex/knex-audit-context.d.ts +6 -0
- package/dist/knex/knex-audit-context.d.ts.map +1 -0
- package/dist/knex/knex-audit-context.js +2 -0
- package/dist/knex/knex-audit-context.js.map +1 -0
- package/dist/knex/knex-audit-trail.d.ts +14 -0
- package/dist/knex/knex-audit-trail.d.ts.map +1 -0
- package/dist/knex/knex-audit-trail.js +22 -0
- package/dist/knex/knex-audit-trail.js.map +1 -0
- package/dist/knex.d.ts +6 -0
- package/dist/knex.d.ts.map +1 -0
- package/dist/knex.js +4 -0
- package/dist/knex.js.map +1 -0
- package/dist/redaction/audit-masker.d.ts +8 -0
- package/dist/redaction/audit-masker.d.ts.map +1 -0
- package/dist/redaction/audit-masker.js +5 -0
- package/dist/redaction/audit-masker.js.map +1 -0
- package/dist/redaction/audit-projection.d.ts +13 -0
- package/dist/redaction/audit-projection.d.ts.map +1 -0
- package/dist/redaction/audit-projection.js +2 -0
- package/dist/redaction/audit-projection.js.map +1 -0
- package/dist/redaction/audited-field.d.ts +3 -0
- package/dist/redaction/audited-field.d.ts.map +1 -0
- package/dist/redaction/audited-field.js +2 -0
- package/dist/redaction/audited-field.js.map +1 -0
- package/dist/redaction/audited-fields.d.ts +16 -0
- package/dist/redaction/audited-fields.d.ts.map +1 -0
- package/dist/redaction/audited-fields.js +24 -0
- package/dist/redaction/audited-fields.js.map +1 -0
- package/dist/redaction/audited-message.d.ts +9 -0
- package/dist/redaction/audited-message.d.ts.map +1 -0
- package/dist/redaction/audited-message.js +2 -0
- package/dist/redaction/audited-message.js.map +1 -0
- package/dist/redaction/audited-projection.d.ts +10 -0
- package/dist/redaction/audited-projection.d.ts.map +1 -0
- package/dist/redaction/audited-projection.js +9 -0
- package/dist/redaction/audited-projection.js.map +1 -0
- package/dist/redaction/changes-of.d.ts +11 -0
- package/dist/redaction/changes-of.d.ts.map +1 -0
- package/dist/redaction/changes-of.js +37 -0
- package/dist/redaction/changes-of.js.map +1 -0
- package/dist/redaction/hmac-masker.d.ts +12 -0
- package/dist/redaction/hmac-masker.d.ts.map +1 -0
- package/dist/redaction/hmac-masker.js +14 -0
- package/dist/redaction/hmac-masker.js.map +1 -0
- package/dist/redaction/masked-field.d.ts +6 -0
- package/dist/redaction/masked-field.d.ts.map +1 -0
- package/dist/redaction/masked-field.js +2 -0
- package/dist/redaction/masked-field.js.map +1 -0
- package/dist/redaction/masked.d.ts +3 -0
- package/dist/redaction/masked.d.ts.map +1 -0
- package/dist/redaction/masked.js +4 -0
- package/dist/redaction/masked.js.map +1 -0
- package/dist/redaction/masking-subject.d.ts +9 -0
- package/dist/redaction/masking-subject.d.ts.map +1 -0
- package/dist/redaction/masking-subject.js +2 -0
- package/dist/redaction/masking-subject.js.map +1 -0
- package/dist/redaction/missing-masker-error.d.ts +5 -0
- package/dist/redaction/missing-masker-error.d.ts.map +1 -0
- package/dist/redaction/missing-masker-error.js +8 -0
- package/dist/redaction/missing-masker-error.js.map +1 -0
- package/dist/search/comparing.d.ts +8 -0
- package/dist/search/comparing.d.ts.map +1 -0
- package/dist/search/comparing.js +23 -0
- package/dist/search/comparing.js.map +1 -0
- package/dist/search/cursor-position.d.ts +7 -0
- package/dist/search/cursor-position.d.ts.map +1 -0
- package/dist/search/cursor-position.js +2 -0
- package/dist/search/cursor-position.js.map +1 -0
- package/dist/search/decode-cursor.d.ts +3 -0
- package/dist/search/decode-cursor.d.ts.map +1 -0
- package/dist/search/decode-cursor.js +21 -0
- package/dist/search/decode-cursor.js.map +1 -0
- package/dist/search/encode-cursor.d.ts +3 -0
- package/dist/search/encode-cursor.d.ts.map +1 -0
- package/dist/search/encode-cursor.js +5 -0
- package/dist/search/encode-cursor.js.map +1 -0
- package/dist/search/matches.d.ts +5 -0
- package/dist/search/matches.d.ts.map +1 -0
- package/dist/search/matches.js +34 -0
- package/dist/search/matches.js.map +1 -0
- package/dist/search/order-of.d.ts +4 -0
- package/dist/search/order-of.d.ts.map +1 -0
- package/dist/search/order-of.js +5 -0
- package/dist/search/order-of.js.map +1 -0
- package/dist/search/search-order.d.ts +6 -0
- package/dist/search/search-order.d.ts.map +1 -0
- package/dist/search/search-order.js +2 -0
- package/dist/search/search-order.js.map +1 -0
- package/dist/sources/allowed-reads.d.ts +9 -0
- package/dist/sources/allowed-reads.d.ts.map +1 -0
- package/dist/sources/allowed-reads.js +2 -0
- package/dist/sources/allowed-reads.js.map +1 -0
- package/dist/sources/audit-decisions.d.ts +19 -0
- package/dist/sources/audit-decisions.d.ts.map +1 -0
- package/dist/sources/audit-decisions.js +48 -0
- package/dist/sources/audit-decisions.js.map +1 -0
- package/dist/sources/audit-fact.d.ts +4 -0
- package/dist/sources/audit-fact.d.ts.map +1 -0
- package/dist/sources/audit-fact.js +2 -0
- package/dist/sources/audit-fact.js.map +1 -0
- package/dist/sources/audit-integration-events.d.ts +23 -0
- package/dist/sources/audit-integration-events.d.ts.map +1 -0
- package/dist/sources/audit-integration-events.js +59 -0
- package/dist/sources/audit-integration-events.js.map +1 -0
- package/dist/sources/audit-middleware.d.ts +33 -0
- package/dist/sources/audit-middleware.d.ts.map +1 -0
- package/dist/sources/audit-middleware.js +113 -0
- package/dist/sources/audit-middleware.js.map +1 -0
- package/dist/sources/audit-record-of.d.ts +10 -0
- package/dist/sources/audit-record-of.d.ts.map +1 -0
- package/dist/sources/audit-record-of.js +10 -0
- package/dist/sources/audit-record-of.js.map +1 -0
- package/dist/sources/audit-source.d.ts +8 -0
- package/dist/sources/audit-source.d.ts.map +1 -0
- package/dist/sources/audit-source.js +2 -0
- package/dist/sources/audit-source.js.map +1 -0
- package/dist/sources/audit-subscription.d.ts +7 -0
- package/dist/sources/audit-subscription.d.ts.map +1 -0
- package/dist/sources/audit-subscription.js +2 -0
- package/dist/sources/audit-subscription.js.map +1 -0
- package/dist/sources/audited-events.d.ts +7 -0
- package/dist/sources/audited-events.d.ts.map +1 -0
- package/dist/sources/audited-events.js +2 -0
- package/dist/sources/audited-events.js.map +1 -0
- package/dist/sources/authorization-decision.d.ts +21 -0
- package/dist/sources/authorization-decision.d.ts.map +1 -0
- package/dist/sources/authorization-decision.js +2 -0
- package/dist/sources/authorization-decision.js.map +1 -0
- package/dist/sources/record-in.d.ts +5 -0
- package/dist/sources/record-in.d.ts.map +1 -0
- package/dist/sources/record-in.js +19 -0
- package/dist/sources/record-in.js.map +1 -0
- package/dist/sql/audit-chains-table-name.d.ts +2 -0
- package/dist/sql/audit-chains-table-name.d.ts.map +1 -0
- package/dist/sql/audit-chains-table-name.js +2 -0
- package/dist/sql/audit-chains-table-name.js.map +1 -0
- package/dist/sql/audit-entries-table-name.d.ts +2 -0
- package/dist/sql/audit-entries-table-name.d.ts.map +1 -0
- package/dist/sql/audit-entries-table-name.js +2 -0
- package/dist/sql/audit-entries-table-name.js.map +1 -0
- package/dist/sql/audit-guard-sql.d.ts +8 -0
- package/dist/sql/audit-guard-sql.d.ts.map +1 -0
- package/dist/sql/audit-guard-sql.js +17 -0
- package/dist/sql/audit-guard-sql.js.map +1 -0
- package/dist/sql/audit-tables-options.d.ts +5 -0
- package/dist/sql/audit-tables-options.d.ts.map +1 -0
- package/dist/sql/audit-tables-options.js +2 -0
- package/dist/sql/audit-tables-options.js.map +1 -0
- package/dist/sql/audit-tables-sql.d.ts +7 -0
- package/dist/sql/audit-tables-sql.d.ts.map +1 -0
- package/dist/sql/audit-tables-sql.js +48 -0
- package/dist/sql/audit-tables-sql.js.map +1 -0
- package/dist/sql/audit-tables.d.ts +8 -0
- package/dist/sql/audit-tables.d.ts.map +1 -0
- package/dist/sql/audit-tables.js +7 -0
- package/dist/sql/audit-tables.js.map +1 -0
- package/dist/sql/drop-audit-tables-sql.d.ts +4 -0
- package/dist/sql/drop-audit-tables-sql.d.ts.map +1 -0
- package/dist/sql/drop-audit-tables-sql.js +12 -0
- package/dist/sql/drop-audit-tables-sql.js.map +1 -0
- package/dist/sql/entry-of.d.ts +5 -0
- package/dist/sql/entry-of.d.ts.map +1 -0
- package/dist/sql/entry-of.js +109 -0
- package/dist/sql/entry-of.js.map +1 -0
- package/dist/sql/insert-of.d.ts +4 -0
- package/dist/sql/insert-of.d.ts.map +1 -0
- package/dist/sql/insert-of.js +51 -0
- package/dist/sql/insert-of.js.map +1 -0
- package/dist/sql/named.d.ts +3 -0
- package/dist/sql/named.d.ts.map +1 -0
- package/dist/sql/named.js +6 -0
- package/dist/sql/named.js.map +1 -0
- package/dist/sql/postgres-audit-trail.d.ts +25 -0
- package/dist/sql/postgres-audit-trail.d.ts.map +1 -0
- package/dist/sql/postgres-audit-trail.js +111 -0
- package/dist/sql/postgres-audit-trail.js.map +1 -0
- package/dist/sql/qualified.d.ts +3 -0
- package/dist/sql/qualified.d.ts.map +1 -0
- package/dist/sql/qualified.js +5 -0
- package/dist/sql/qualified.js.map +1 -0
- package/dist/sql/rows-of.d.ts +4 -0
- package/dist/sql/rows-of.d.ts.map +1 -0
- package/dist/sql/rows-of.js +14 -0
- package/dist/sql/rows-of.js.map +1 -0
- package/dist/sql/sql-row.d.ts +2 -0
- package/dist/sql/sql-row.d.ts.map +1 -0
- package/dist/sql/sql-row.js +2 -0
- package/dist/sql/sql-row.js.map +1 -0
- package/dist/sql/sql-session.d.ts +9 -0
- package/dist/sql/sql-session.d.ts.map +1 -0
- package/dist/sql/sql-session.js +2 -0
- package/dist/sql/sql-session.js.map +1 -0
- package/dist/sql/sql.d.ts +12 -0
- package/dist/sql/sql.d.ts.map +1 -0
- package/dist/sql/sql.js +35 -0
- package/dist/sql/sql.js.map +1 -0
- package/dist/testing/audit-trail-contract.d.ts +16 -0
- package/dist/testing/audit-trail-contract.d.ts.map +1 -0
- package/dist/testing/audit-trail-contract.js +208 -0
- package/dist/testing/audit-trail-contract.js.map +1 -0
- package/dist/testing/audit-trail-under-contract.d.ts +4 -0
- package/dist/testing/audit-trail-under-contract.d.ts.map +1 -0
- package/dist/testing/audit-trail-under-contract.js +2 -0
- package/dist/testing/audit-trail-under-contract.js.map +1 -0
- package/dist/testing/records/a-record.d.ts +3 -0
- package/dist/testing/records/a-record.d.ts.map +1 -0
- package/dist/testing/records/a-record.js +14 -0
- package/dist/testing/records/a-record.js.map +1 -0
- package/dist/testing/records/full-record.d.ts +3 -0
- package/dist/testing/records/full-record.d.ts.map +1 -0
- package/dist/testing/records/full-record.js +16 -0
- package/dist/testing/records/full-record.js.map +1 -0
- package/dist/testing/records/in-tenant.d.ts +3 -0
- package/dist/testing/records/in-tenant.d.ts.map +1 -0
- package/dist/testing/records/in-tenant.js +5 -0
- package/dist/testing/records/in-tenant.js.map +1 -0
- package/dist/testing/records/journal.d.ts +4 -0
- package/dist/testing/records/journal.d.ts.map +1 -0
- package/dist/testing/records/journal.js +32 -0
- package/dist/testing/records/journal.js.map +1 -0
- package/dist/testing/records/later.d.ts +4 -0
- package/dist/testing/records/later.d.ts.map +1 -0
- package/dist/testing/records/later.js +6 -0
- package/dist/testing/records/later.js.map +1 -0
- package/dist/testing.d.ts +3 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +2 -0
- package/dist/testing.js.map +1 -0
- package/dist/trail/audit-trail-options.d.ts +8 -0
- package/dist/trail/audit-trail-options.d.ts.map +1 -0
- package/dist/trail/audit-trail-options.js +2 -0
- package/dist/trail/audit-trail-options.js.map +1 -0
- package/dist/trail/in-memory-audit-trail.d.ts +16 -0
- package/dist/trail/in-memory-audit-trail.d.ts.map +1 -0
- package/dist/trail/in-memory-audit-trail.js +48 -0
- package/dist/trail/in-memory-audit-trail.js.map +1 -0
- package/dist/verify/chain-break-kind.d.ts +8 -0
- package/dist/verify/chain-break-kind.d.ts.map +1 -0
- package/dist/verify/chain-break-kind.js +2 -0
- package/dist/verify/chain-break-kind.js.map +1 -0
- package/dist/verify/chain-break.d.ts +12 -0
- package/dist/verify/chain-break.d.ts.map +1 -0
- package/dist/verify/chain-break.js +2 -0
- package/dist/verify/chain-break.js.map +1 -0
- package/dist/verify/chain-verification.d.ts +10 -0
- package/dist/verify/chain-verification.d.ts.map +1 -0
- package/dist/verify/chain-verification.js +2 -0
- package/dist/verify/chain-verification.js.map +1 -0
- package/dist/verify/verify-chain.d.ts +20 -0
- package/dist/verify/verify-chain.d.ts.map +1 -0
- package/dist/verify/verify-chain.js +110 -0
- package/dist/verify/verify-chain.js.map +1 -0
- package/package.json +70 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-source.d.ts","sourceRoot":"","sources":["../../src/sources/audit-source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE7E,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-source.js","sourceRoot":"","sources":["../../src/sources/audit-source.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { IntegrationEventCallback } from '@ddd-ts-kit/kernel';
|
|
2
|
+
/** What `subscribeAll` of `@ddd-ts-kit/events` takes. */
|
|
3
|
+
export interface AuditSubscription {
|
|
4
|
+
readonly type: string;
|
|
5
|
+
readonly handler: IntegrationEventCallback;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=audit-subscription.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-subscription.d.ts","sourceRoot":"","sources":["../../src/sources/audit-subscription.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAEnE,yDAAyD;AACzD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;CAC5C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-subscription.js","sourceRoot":"","sources":["../../src/sources/audit-subscription.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audited-events.d.ts","sourceRoot":"","sources":["../../src/sources/audited-events.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,MAAM,WAAW,aAAa;IAC5B,GAAG,IAAI,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC7C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audited-events.js","sourceRoot":"","sources":["../../src/sources/audited-events.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { AuditResource } from '@ddd-ts-kit/kernel';
|
|
2
|
+
/**
|
|
3
|
+
* What the `onDecision` hook of `@ddd-ts-kit/auth` hands over, restated structurally so that
|
|
4
|
+
* this package does not depend on it. Any `DecisionRecord` fits.
|
|
5
|
+
*/
|
|
6
|
+
export interface AuthorizationDecision {
|
|
7
|
+
readonly actorId: string;
|
|
8
|
+
readonly permissionId: string;
|
|
9
|
+
readonly resource?: AuditResource;
|
|
10
|
+
readonly decision: {
|
|
11
|
+
readonly allowed: true;
|
|
12
|
+
} | {
|
|
13
|
+
readonly allowed: false;
|
|
14
|
+
readonly reason: string;
|
|
15
|
+
};
|
|
16
|
+
/** The command or query the decision was taken for. */
|
|
17
|
+
readonly useCase?: string;
|
|
18
|
+
/** Whether that use case is a command or a query; absent for a decision taken outside a bus. */
|
|
19
|
+
readonly kind?: 'command' | 'query';
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=authorization-decision.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorization-decision.d.ts","sourceRoot":"","sources":["../../src/sources/authorization-decision.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IAElC,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAErG,uDAAuD;IACvD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAE1B,gGAAgG;IAChG,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;CACrC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorization-decision.js","sourceRoot":"","sources":["../../src/sources/authorization-decision.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { AuditRecord, ExecutionContext } from '@ddd-ts-kit/kernel';
|
|
2
|
+
import type { AuditFact } from './audit-fact.js';
|
|
3
|
+
import type { AuditSource } from './audit-source.js';
|
|
4
|
+
export declare function recordIn(context: ExecutionContext, source: Omit<AuditSource, 'scope'>, fact: AuditFact): AuditRecord;
|
|
5
|
+
//# sourceMappingURL=record-in.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-in.d.ts","sourceRoot":"","sources":["../../src/sources/record-in.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,WAAW,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,GAAG,WAAW,CAepH"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export function recordIn(context, source, fact) {
|
|
2
|
+
const session = context.session;
|
|
3
|
+
return {
|
|
4
|
+
id: source.ids.next(),
|
|
5
|
+
occurredAt: source.clock.now(),
|
|
6
|
+
...fact,
|
|
7
|
+
actor: auditActorOf(context),
|
|
8
|
+
...(context.tenantId === undefined ? {} : { tenantId: context.tenantId }),
|
|
9
|
+
...(session?.impersonatedBy === undefined ? {} : { impersonatedBy: session.impersonatedBy }),
|
|
10
|
+
...(session === undefined ? {} : { sessionId: session.id }),
|
|
11
|
+
correlationId: context.correlationId,
|
|
12
|
+
...(context.causationId === undefined ? {} : { causationId: context.causationId }),
|
|
13
|
+
origin: context.origin,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function auditActorOf({ actor }) {
|
|
17
|
+
return { id: actor.id, type: actor.type, ...(actor.tenantId === undefined ? {} : { tenantId: actor.tenantId }) };
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=record-in.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-in.js","sourceRoot":"","sources":["../../src/sources/record-in.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,QAAQ,CAAC,OAAyB,EAAE,MAAkC,EAAE,IAAe;IACrG,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAEhC,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;QACrB,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QAC9B,GAAG,IAAI;QACP,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC;QAC5B,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;QACzE,GAAG,CAAC,OAAO,EAAE,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;QAC5F,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;QAC3D,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;QAClF,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,EAAE,KAAK,EAAoB;IAC/C,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;AACnH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-chains-table-name.d.ts","sourceRoot":"","sources":["../../src/sql/audit-chains-table-name.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-chains-table-name.js","sourceRoot":"","sources":["../../src/sql/audit-chains-table-name.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-entries-table-name.d.ts","sourceRoot":"","sources":["../../src/sql/audit-entries-table-name.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-entries-table-name.js","sourceRoot":"","sources":["../../src/sql/audit-entries-table-name.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,eAAe,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AuditTablesOptions } from './audit-tables-options.js';
|
|
2
|
+
/**
|
|
3
|
+
* The guard of `audit_entries`: triggers that refuse UPDATE, DELETE and TRUNCATE, whoever
|
|
4
|
+
* asks. A role that owns the table can still drop them: see the README for the privileges to
|
|
5
|
+
* revoke and for anchoring.
|
|
6
|
+
*/
|
|
7
|
+
export declare function auditGuardSql(options?: AuditTablesOptions): string[];
|
|
8
|
+
//# sourceMappingURL=audit-guard-sql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-guard-sql.d.ts","sourceRoot":"","sources":["../../src/sql/audit-guard-sql.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAGpE;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,EAAE,CASxE"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { AUDIT_ENTRIES_TABLE } from './audit-entries-table-name.js';
|
|
2
|
+
import { named } from './named.js';
|
|
3
|
+
/**
|
|
4
|
+
* The guard of `audit_entries`: triggers that refuse UPDATE, DELETE and TRUNCATE, whoever
|
|
5
|
+
* asks. A role that owns the table can still drop them: see the README for the privileges to
|
|
6
|
+
* revoke and for anchoring.
|
|
7
|
+
*/
|
|
8
|
+
export function auditGuardSql(options = {}) {
|
|
9
|
+
const entries = named(options.schema, AUDIT_ENTRIES_TABLE);
|
|
10
|
+
const guard = named(options.schema, 'audit_entries_append_only');
|
|
11
|
+
return [
|
|
12
|
+
`create function ${guard}() returns trigger language plpgsql as $guard$ begin raise exception 'audit entries are append-only: % refused', tg_op using errcode = 'restrict_violation'; end $guard$`,
|
|
13
|
+
`create trigger "audit_entries_no_rewrite" before update or delete on ${entries} for each row execute function ${guard}()`,
|
|
14
|
+
`create trigger "audit_entries_no_truncate" before truncate on ${entries} for each statement execute function ${guard}()`,
|
|
15
|
+
];
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=audit-guard-sql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-guard-sql.js","sourceRoot":"","sources":["../../src/sql/audit-guard-sql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEpE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,OAAO,GAAuB,EAAE;IAC5D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;IAEjE,OAAO;QACL,mBAAmB,KAAK,0KAA0K;QAClM,wEAAwE,OAAO,kCAAkC,KAAK,IAAI;QAC1H,iEAAiE,OAAO,wCAAwC,KAAK,IAAI;KAC1H,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-tables-options.d.ts","sourceRoot":"","sources":["../../src/sql/audit-tables-options.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,mGAAmG;IACnG,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-tables-options.js","sourceRoot":"","sources":["../../src/sql/audit-tables-options.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AuditTablesOptions } from './audit-tables-options.js';
|
|
2
|
+
/**
|
|
3
|
+
* The tables of the trail on PostgreSQL, one statement per element: `audit_entries`, the
|
|
4
|
+
* chain heads that serialize the appends, the indexes of the reader, then the guard.
|
|
5
|
+
*/
|
|
6
|
+
export declare function auditTablesSql(options?: AuditTablesOptions): string[];
|
|
7
|
+
//# sourceMappingURL=audit-tables-sql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-tables-sql.d.ts","sourceRoot":"","sources":["../../src/sql/audit-tables-sql.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AA8BpE;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,EAAE,CAazE"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { AUDIT_CHAINS_TABLE } from './audit-chains-table-name.js';
|
|
2
|
+
import { AUDIT_ENTRIES_TABLE } from './audit-entries-table-name.js';
|
|
3
|
+
import { auditGuardSql } from './audit-guard-sql.js';
|
|
4
|
+
import { named } from './named.js';
|
|
5
|
+
const ENTRY_COLUMNS = [
|
|
6
|
+
'"id" text not null unique',
|
|
7
|
+
'"chain" text not null',
|
|
8
|
+
'"sequence" bigint not null',
|
|
9
|
+
'"occurred_at" timestamptz(3) not null',
|
|
10
|
+
'"category" text not null',
|
|
11
|
+
'"action" text not null',
|
|
12
|
+
'"outcome" text not null',
|
|
13
|
+
'"reason" text',
|
|
14
|
+
'"actor_id" text not null',
|
|
15
|
+
'"actor_type" text not null',
|
|
16
|
+
'"actor_tenant_id" text',
|
|
17
|
+
'"tenant_id" text',
|
|
18
|
+
'"impersonated_by" text',
|
|
19
|
+
'"session_id" text',
|
|
20
|
+
'"resource_type" text',
|
|
21
|
+
'"resource_id" text',
|
|
22
|
+
'"context" text',
|
|
23
|
+
'"correlation_id" text not null',
|
|
24
|
+
'"causation_id" text',
|
|
25
|
+
'"origin" text not null',
|
|
26
|
+
'"changes" jsonb',
|
|
27
|
+
`"extensions" jsonb not null default '{}'::jsonb`,
|
|
28
|
+
'"previous_hash" text not null',
|
|
29
|
+
'"hash" text not null',
|
|
30
|
+
];
|
|
31
|
+
/**
|
|
32
|
+
* The tables of the trail on PostgreSQL, one statement per element: `audit_entries`, the
|
|
33
|
+
* chain heads that serialize the appends, the indexes of the reader, then the guard.
|
|
34
|
+
*/
|
|
35
|
+
export function auditTablesSql(options = {}) {
|
|
36
|
+
const entries = named(options.schema, AUDIT_ENTRIES_TABLE);
|
|
37
|
+
return [
|
|
38
|
+
...(options.schema === undefined ? [] : [`create schema if not exists ${named(undefined, options.schema)}`]),
|
|
39
|
+
`create table ${named(options.schema, AUDIT_CHAINS_TABLE)} ("chain" text primary key, "sequence" bigint not null, "hash" text not null)`,
|
|
40
|
+
`create table ${entries} (${ENTRY_COLUMNS.join(', ')}, primary key ("chain", "sequence"))`,
|
|
41
|
+
`create index "audit_entries_occurred_idx" on ${entries} ("occurred_at", "chain", "sequence")`,
|
|
42
|
+
`create index "audit_entries_actor_idx" on ${entries} ("actor_id", "occurred_at")`,
|
|
43
|
+
`create index "audit_entries_resource_idx" on ${entries} ("resource_type", "resource_id")`,
|
|
44
|
+
`create index "audit_entries_correlation_idx" on ${entries} ("correlation_id")`,
|
|
45
|
+
...auditGuardSql(options),
|
|
46
|
+
];
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=audit-tables-sql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-tables-sql.js","sourceRoot":"","sources":["../../src/sql/audit-tables-sql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,aAAa,GAAG;IACpB,2BAA2B;IAC3B,uBAAuB;IACvB,4BAA4B;IAC5B,uCAAuC;IACvC,0BAA0B;IAC1B,wBAAwB;IACxB,yBAAyB;IACzB,eAAe;IACf,0BAA0B;IAC1B,4BAA4B;IAC5B,wBAAwB;IACxB,kBAAkB;IAClB,wBAAwB;IACxB,mBAAmB;IACnB,sBAAsB;IACtB,oBAAoB;IACpB,gBAAgB;IAChB,gCAAgC;IAChC,qBAAqB;IACrB,wBAAwB;IACxB,iBAAiB;IACjB,iDAAiD;IACjD,+BAA+B;IAC/B,sBAAsB;CACvB,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAO,GAAuB,EAAE;IAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAE3D,OAAO;QACL,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,+BAA+B,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5G,gBAAgB,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,kBAAkB,CAAC,+EAA+E;QACxI,gBAAgB,OAAO,KAAK,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,sCAAsC;QAC1F,gDAAgD,OAAO,uCAAuC;QAC9F,6CAA6C,OAAO,8BAA8B;QAClF,gDAAgD,OAAO,mCAAmC;QAC1F,mDAAmD,OAAO,qBAAqB;QAC/E,GAAG,aAAa,CAAC,OAAO,CAAC;KAC1B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AuditTablesOptions } from './audit-tables-options.js';
|
|
2
|
+
import type { Sql } from './sql.js';
|
|
3
|
+
export interface AuditTables {
|
|
4
|
+
readonly entries: Sql;
|
|
5
|
+
readonly chains: Sql;
|
|
6
|
+
}
|
|
7
|
+
export declare function auditTables({ schema }?: AuditTablesOptions): AuditTables;
|
|
8
|
+
//# sourceMappingURL=audit-tables.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-tables.d.ts","sourceRoot":"","sources":["../../src/sql/audit-tables.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAEpC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;CACtB;AAED,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,GAAE,kBAAuB,GAAG,WAAW,CAE5E"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AUDIT_CHAINS_TABLE } from './audit-chains-table-name.js';
|
|
2
|
+
import { AUDIT_ENTRIES_TABLE } from './audit-entries-table-name.js';
|
|
3
|
+
import { qualified } from './qualified.js';
|
|
4
|
+
export function auditTables({ schema } = {}) {
|
|
5
|
+
return { entries: qualified(schema, AUDIT_ENTRIES_TABLE), chains: qualified(schema, AUDIT_CHAINS_TABLE) };
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=audit-tables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-tables.js","sourceRoot":"","sources":["../../src/sql/audit-tables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAQ3C,MAAM,UAAU,WAAW,CAAC,EAAE,MAAM,EAAE,GAAuB,EAAE;IAC7D,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAAE,CAAC;AAC5G,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { AuditTablesOptions } from './audit-tables-options.js';
|
|
2
|
+
/** The `down` of `auditTablesSql`. The schema itself is left in place. */
|
|
3
|
+
export declare function dropAuditTablesSql(options?: AuditTablesOptions): string[];
|
|
4
|
+
//# sourceMappingURL=drop-audit-tables-sql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drop-audit-tables-sql.d.ts","sourceRoot":"","sources":["../../src/sql/drop-audit-tables-sql.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,EAAE,CAM7E"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AUDIT_CHAINS_TABLE } from './audit-chains-table-name.js';
|
|
2
|
+
import { AUDIT_ENTRIES_TABLE } from './audit-entries-table-name.js';
|
|
3
|
+
import { named } from './named.js';
|
|
4
|
+
/** The `down` of `auditTablesSql`. The schema itself is left in place. */
|
|
5
|
+
export function dropAuditTablesSql(options = {}) {
|
|
6
|
+
return [
|
|
7
|
+
`drop table if exists ${named(options.schema, AUDIT_ENTRIES_TABLE)}`,
|
|
8
|
+
`drop table if exists ${named(options.schema, AUDIT_CHAINS_TABLE)}`,
|
|
9
|
+
`drop function if exists ${named(options.schema, 'audit_entries_append_only')}()`,
|
|
10
|
+
];
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=drop-audit-tables-sql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drop-audit-tables-sql.js","sourceRoot":"","sources":["../../src/sql/drop-audit-tables-sql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEpE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,0EAA0E;AAC1E,MAAM,UAAU,kBAAkB,CAAC,OAAO,GAAuB,EAAE;IACjE,OAAO;QACL,wBAAwB,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAAE;QACpE,wBAAwB,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAAE;QACnE,2BAA2B,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,2BAA2B,CAAC,IAAI;KAClF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { AuditEntry } from '@ddd-ts-kit/kernel';
|
|
2
|
+
import type { SqlRow } from './sql-row.js';
|
|
3
|
+
/** The mapper: a row comes back as the driver gives it, and leaves as an entry or not at all. */
|
|
4
|
+
export declare function entryOf(row: SqlRow): AuditEntry;
|
|
5
|
+
//# sourceMappingURL=entry-of.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-of.d.ts","sourceRoot":"","sources":["../../src/sql/entry-of.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKV,UAAU,EAIX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,iGAAiG;AACjG,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CA2B/C"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/** The mapper: a row comes back as the driver gives it, and leaves as an entry or not at all. */
|
|
2
|
+
export function entryOf(row) {
|
|
3
|
+
const resource = resourceOf(row);
|
|
4
|
+
const changes = changesOf(json(row['changes']));
|
|
5
|
+
return {
|
|
6
|
+
id: text(row, 'id'),
|
|
7
|
+
chain: text(row, 'chain'),
|
|
8
|
+
sequence: Number(row['sequence']),
|
|
9
|
+
occurredAt: instant(row['occurred_at']),
|
|
10
|
+
category: text(row, 'category'),
|
|
11
|
+
action: text(row, 'action'),
|
|
12
|
+
outcome: outcomeOf(text(row, 'outcome')),
|
|
13
|
+
...optional('reason', row['reason']),
|
|
14
|
+
actor: actorOf(row),
|
|
15
|
+
...optional('tenantId', row['tenant_id']),
|
|
16
|
+
...optional('impersonatedBy', row['impersonated_by']),
|
|
17
|
+
...optional('sessionId', row['session_id']),
|
|
18
|
+
...(resource === undefined ? {} : { resource }),
|
|
19
|
+
...optional('context', row['context']),
|
|
20
|
+
correlationId: text(row, 'correlation_id'),
|
|
21
|
+
...optional('causationId', row['causation_id']),
|
|
22
|
+
origin: text(row, 'origin'),
|
|
23
|
+
...(changes === undefined ? {} : { changes }),
|
|
24
|
+
extensions: extensionsOf(json(row['extensions'])),
|
|
25
|
+
previousHash: text(row, 'previous_hash'),
|
|
26
|
+
hash: text(row, 'hash'),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function text(row, column) {
|
|
30
|
+
const value = row[column];
|
|
31
|
+
if (typeof value !== 'string') {
|
|
32
|
+
throw new TypeError(`Column ${column} of an audit entry is not a text`);
|
|
33
|
+
}
|
|
34
|
+
return value;
|
|
35
|
+
}
|
|
36
|
+
function optional(key, value) {
|
|
37
|
+
const present = {};
|
|
38
|
+
if (typeof value === 'string') {
|
|
39
|
+
present[key] = value;
|
|
40
|
+
}
|
|
41
|
+
return present;
|
|
42
|
+
}
|
|
43
|
+
function instant(value) {
|
|
44
|
+
if (value instanceof Date) {
|
|
45
|
+
return value;
|
|
46
|
+
}
|
|
47
|
+
if (typeof value === 'string' || typeof value === 'number') {
|
|
48
|
+
return new Date(value);
|
|
49
|
+
}
|
|
50
|
+
throw new TypeError('Column occurred_at of an audit entry is not an instant');
|
|
51
|
+
}
|
|
52
|
+
/** node-postgres parses jsonb; a driver that does not hands the text over. */
|
|
53
|
+
function json(value) {
|
|
54
|
+
return typeof value === 'string' ? JSON.parse(value) : value;
|
|
55
|
+
}
|
|
56
|
+
const OUTCOMES = ['allowed', 'denied', 'succeeded', 'failed'];
|
|
57
|
+
function outcomeOf(value) {
|
|
58
|
+
if (isOutcome(value)) {
|
|
59
|
+
return value;
|
|
60
|
+
}
|
|
61
|
+
throw new TypeError(`"${value}" is not an audit outcome`);
|
|
62
|
+
}
|
|
63
|
+
function isOutcome(value) {
|
|
64
|
+
return OUTCOMES.includes(value);
|
|
65
|
+
}
|
|
66
|
+
const ACTOR_TYPES = [
|
|
67
|
+
'user',
|
|
68
|
+
'service',
|
|
69
|
+
'system',
|
|
70
|
+
'anonymous',
|
|
71
|
+
'unknown',
|
|
72
|
+
];
|
|
73
|
+
function actorOf(row) {
|
|
74
|
+
const type = text(row, 'actor_type');
|
|
75
|
+
if (!isActorType(type)) {
|
|
76
|
+
throw new TypeError(`"${type}" is not an actor type`);
|
|
77
|
+
}
|
|
78
|
+
return { id: text(row, 'actor_id'), type, ...optional('tenantId', row['actor_tenant_id']) };
|
|
79
|
+
}
|
|
80
|
+
function isActorType(value) {
|
|
81
|
+
return ACTOR_TYPES.includes(value);
|
|
82
|
+
}
|
|
83
|
+
function resourceOf(row) {
|
|
84
|
+
const type = row['resource_type'];
|
|
85
|
+
const id = row['resource_id'];
|
|
86
|
+
return typeof type === 'string' && typeof id === 'string' ? { type, id } : undefined;
|
|
87
|
+
}
|
|
88
|
+
function changesOf(value) {
|
|
89
|
+
if (typeof value !== 'object' || value === null) {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
const changes = {};
|
|
93
|
+
for (const [field, change] of Object.entries(value)) {
|
|
94
|
+
if (isChange(change)) {
|
|
95
|
+
changes[field] = change;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return changes;
|
|
99
|
+
}
|
|
100
|
+
function isChange(value) {
|
|
101
|
+
if (value === null || typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
return typeof value === 'object' && 'masked' in value && typeof value.masked === 'string';
|
|
105
|
+
}
|
|
106
|
+
function extensionsOf(value) {
|
|
107
|
+
return typeof value === 'object' && value !== null ? value : {};
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=entry-of.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-of.js","sourceRoot":"","sources":["../../src/sql/entry-of.ts"],"names":[],"mappings":"AAYA,iGAAiG;AACjG,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEhD,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;QACnB,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC;QACzB,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACjC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACvC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC;QAC/B,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;QAC3B,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACxC,GAAG,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC;QACnB,GAAG,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;QACzC,GAAG,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACrD,GAAG,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;QAC3C,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;QAC/C,GAAG,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QACtC,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC;QAC1C,GAAG,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;QAC/C,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;QAC3B,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;QAC7C,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;QACjD,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC;QACxC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;KACxB,CAAC;AACJ,CAAC;AAED,SAAS,IAAI,CAAC,GAAW,EAAE,MAAc;IACvC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;IAE1B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,SAAS,CAAC,UAAU,MAAM,kCAAkC,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAqB,GAAQ,EAAE,KAAc;IAC5D,MAAM,OAAO,GAA4B,EAAE,CAAC;IAE5C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3D,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,IAAI,SAAS,CAAC,wDAAwD,CAAC,CAAC;AAChF,CAAC;AAED,8EAA8E;AAC9E,SAAS,IAAI,CAAC,KAAc;IAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/D,CAAC;AAED,MAAM,QAAQ,GAAsB,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAmC,CAAC;AAEnH,SAAS,SAAS,CAAC,KAAa;IAC9B,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,SAAS,CAAC,IAAI,KAAK,2BAA2B,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,WAAW,GAAsB;IACrC,MAAM;IACN,SAAS;IACT,QAAQ;IACR,WAAW;IACX,SAAS;CAC8B,CAAC;AAE1C,SAAS,OAAO,CAAC,GAAW;IAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAErC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,SAAS,CAAC,IAAI,IAAI,wBAAwB,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC;AAC9F,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC;IAClC,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC;IAE9B,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACvF,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAgC,EAAE,CAAC;IAEhD,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC3G,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC;AAC5F,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insert-of.d.ts","sourceRoot":"","sources":["../../src/sql/insert-of.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAA2B,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;AA6B7D,wBAAgB,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,GAAG,GAAG,CAO7D"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { identifier, joined, sql } from './sql.js';
|
|
2
|
+
const COLUMNS = [
|
|
3
|
+
'id',
|
|
4
|
+
'chain',
|
|
5
|
+
'sequence',
|
|
6
|
+
'occurred_at',
|
|
7
|
+
'category',
|
|
8
|
+
'action',
|
|
9
|
+
'outcome',
|
|
10
|
+
'reason',
|
|
11
|
+
'actor_id',
|
|
12
|
+
'actor_type',
|
|
13
|
+
'actor_tenant_id',
|
|
14
|
+
'tenant_id',
|
|
15
|
+
'impersonated_by',
|
|
16
|
+
'session_id',
|
|
17
|
+
'resource_type',
|
|
18
|
+
'resource_id',
|
|
19
|
+
'context',
|
|
20
|
+
'correlation_id',
|
|
21
|
+
'causation_id',
|
|
22
|
+
'origin',
|
|
23
|
+
'changes',
|
|
24
|
+
'extensions',
|
|
25
|
+
'previous_hash',
|
|
26
|
+
'hash',
|
|
27
|
+
];
|
|
28
|
+
export function insertOf(entries, entry) {
|
|
29
|
+
const columns = joined(COLUMNS.map((column) => identifier(column)), ', ');
|
|
30
|
+
return sql `insert into ${entries} (${columns}) values (${joined(valuesOf(entry), ', ')})`;
|
|
31
|
+
}
|
|
32
|
+
function valuesOf(entry) {
|
|
33
|
+
const { actor, resource } = entry;
|
|
34
|
+
return [
|
|
35
|
+
sql `${entry.id}, ${entry.chain}, ${entry.sequence}, ${entry.occurredAt.toISOString()}::timestamptz`,
|
|
36
|
+
sql `${entry.category}, ${entry.action}, ${entry.outcome}, ${orNull(entry.reason)}`,
|
|
37
|
+
sql `${actor.id}, ${actor.type}, ${orNull(actor.tenantId)}, ${orNull(entry.tenantId)}`,
|
|
38
|
+
sql `${orNull(entry.impersonatedBy)}, ${orNull(entry.sessionId)}`,
|
|
39
|
+
sql `${orNull(resource?.type)}, ${orNull(resource?.id)}, ${orNull(entry.context)}`,
|
|
40
|
+
sql `${entry.correlationId}, ${orNull(entry.causationId)}, ${entry.origin}`,
|
|
41
|
+
sql `${jsonOrNull(entry.changes)}::jsonb, ${JSON.stringify(entry.extensions)}::jsonb`,
|
|
42
|
+
sql `${entry.previousHash}, ${entry.hash}`,
|
|
43
|
+
];
|
|
44
|
+
}
|
|
45
|
+
function orNull(value) {
|
|
46
|
+
return value ?? null;
|
|
47
|
+
}
|
|
48
|
+
function jsonOrNull(value) {
|
|
49
|
+
return value === undefined ? null : JSON.stringify(value);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=insert-of.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insert-of.js","sourceRoot":"","sources":["../../src/sql/insert-of.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAY,MAAM,UAAU,CAAC;AAE7D,MAAM,OAAO,GAAG;IACd,IAAI;IACJ,OAAO;IACP,UAAU;IACV,aAAa;IACb,UAAU;IACV,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,UAAU;IACV,YAAY;IACZ,iBAAiB;IACjB,WAAW;IACX,iBAAiB;IACjB,YAAY;IACZ,eAAe;IACf,aAAa;IACb,SAAS;IACT,gBAAgB;IAChB,cAAc;IACd,QAAQ;IACR,SAAS;IACT,YAAY;IACZ,eAAe;IACf,MAAM;CACE,CAAC;AAEX,MAAM,UAAU,QAAQ,CAAC,OAAY,EAAE,KAAiB;IACtD,MAAM,OAAO,GAAG,MAAM,CACpB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAC3C,IAAI,CACL,CAAC;IAEF,OAAO,GAAG,CAAA,eAAe,OAAO,KAAK,OAAO,aAAa,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC;AAC5F,CAAC;AAED,SAAS,QAAQ,CAAC,KAAiB;IACjC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAElC,OAAO;QACL,GAAG,CAAA,GAAG,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,eAAe;QACnG,GAAG,CAAA,GAAG,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;QAClF,GAAG,CAAA,GAAG,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;QACrF,GAAG,CAAA,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;QAChE,GAAG,CAAA,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;QACjF,GAAG,CAAA,GAAG,KAAK,CAAC,aAAa,KAAK,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE;QAC1E,GAAG,CAAA,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS;QACpF,GAAG,CAAA,GAAG,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC,IAAI,EAAE;KAC1C,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,KAAyB;IACvC,OAAO,KAAK,IAAI,IAAI,CAAC;AACvB,CAAC;AAED,SAAS,UAAU,CAAC,KAAyB;IAC3C,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"named.d.ts","sourceRoot":"","sources":["../../src/sql/named.ts"],"names":[],"mappings":"AAEA,oGAAoG;AACpG,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtE"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { qualified } from './qualified.js';
|
|
2
|
+
/** The quoted, qualified name as text, for a statement of a migration, which takes no parameter. */
|
|
3
|
+
export function named(schema, name) {
|
|
4
|
+
return qualified(schema, name).strings.join('');
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=named.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"named.js","sourceRoot":"","sources":["../../src/sql/named.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,oGAAoG;AACpG,MAAM,UAAU,KAAK,CAAC,MAA0B,EAAE,IAAY;IAC5D,OAAO,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type AuditEntry, type AuditFilter, type AuditReader, type AuditRecord, type AuditSortField, type AuditTrail, type Page, type PageRequest } from '@ddd-ts-kit/kernel';
|
|
2
|
+
import type { AuditTrailOptions } from '../trail/audit-trail-options.js';
|
|
3
|
+
import type { AuditTables } from './audit-tables.js';
|
|
4
|
+
import type { SqlSession } from './sql-session.js';
|
|
5
|
+
/**
|
|
6
|
+
* The trail in PostgreSQL, whatever the query builder: the adapters give it a session, which
|
|
7
|
+
* is the transaction of the unit of work in progress when there is one.
|
|
8
|
+
*
|
|
9
|
+
* An append locks the head row of its chain (`SELECT ... FOR UPDATE`) until its transaction
|
|
10
|
+
* ends, so two appends to one chain never read the same head and the chain cannot fork. Under
|
|
11
|
+
* REPEATABLE READ or SERIALIZABLE the second one fails with a serialization error instead of
|
|
12
|
+
* waiting: the caller retries its unit of work, as for any other statement.
|
|
13
|
+
*/
|
|
14
|
+
export declare class PostgresAuditTrail implements AuditTrail, AuditReader {
|
|
15
|
+
private readonly session;
|
|
16
|
+
private readonly tables;
|
|
17
|
+
private readonly options;
|
|
18
|
+
constructor(session: () => SqlSession, tables: AuditTables, options?: AuditTrailOptions);
|
|
19
|
+
record(record: AuditRecord): Promise<void>;
|
|
20
|
+
search(filter: AuditFilter, page: PageRequest<AuditSortField>): Promise<Page<AuditEntry>>;
|
|
21
|
+
private lockHead;
|
|
22
|
+
private select;
|
|
23
|
+
private count;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=postgres-audit-trail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-audit-trail.d.ts","sourceRoot":"","sources":["../../src/sql/postgres-audit-trail.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,IAAI,EACT,KAAK,WAAW,EACjB,MAAM,oBAAoB,CAAC;AAU5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD;;;;;;;;GAQG;AACH,qBAAa,kBAAmB,YAAW,UAAU,EAAE,WAAW;IAE9D,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAH1B,YACmB,OAAO,EAAE,MAAM,UAAU,EACzB,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,iBAAsB,EAC9C;IAEE,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAc/C;IAEK,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAgB9F;YAEa,QAAQ;YAoBR,MAAM;YAMN,KAAK;CAOpB"}
|