@beignet/provider-db-drizzle 0.0.21 → 0.0.23
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 +13 -0
- package/README.md +145 -13
- package/dist/mysql/index.d.ts +40 -1
- package/dist/mysql/index.d.ts.map +1 -1
- package/dist/mysql/index.js +75 -1
- package/dist/mysql/index.js.map +1 -1
- package/dist/postgres/index.d.ts +36 -1
- package/dist/postgres/index.d.ts.map +1 -1
- package/dist/postgres/index.js +71 -1
- package/dist/postgres/index.js.map +1 -1
- package/dist/shared/audit-core.d.ts +33 -0
- package/dist/shared/audit-core.d.ts.map +1 -0
- package/dist/shared/audit-core.js +85 -0
- package/dist/shared/audit-core.js.map +1 -0
- package/dist/shared/health.d.ts +10 -0
- package/dist/shared/health.d.ts.map +1 -0
- package/dist/shared/health.js +14 -0
- package/dist/shared/health.js.map +1 -0
- package/dist/sqlite/index.d.ts +36 -2
- package/dist/sqlite/index.d.ts.map +1 -1
- package/dist/sqlite/index.js +71 -1
- package/dist/sqlite/index.js.map +1 -1
- package/package.json +2 -2
- package/src/mysql/index.ts +121 -1
- package/src/postgres/index.ts +117 -1
- package/src/shared/audit-core.ts +134 -0
- package/src/shared/health.ts +25 -0
- package/src/sqlite/index.ts +117 -1
package/dist/postgres/index.js
CHANGED
|
@@ -33,10 +33,21 @@ import { drizzle } from "drizzle-orm/node-postgres";
|
|
|
33
33
|
import { PgTransaction, } from "drizzle-orm/pg-core";
|
|
34
34
|
import pg from "pg";
|
|
35
35
|
import { z } from "zod";
|
|
36
|
+
import { createAuditLogInsertQuery, createAuditLogSqlRow, } from "../shared/audit-core.js";
|
|
37
|
+
import { dbHealthError, dbHealthOk } from "../shared/health.js";
|
|
36
38
|
import { createIdempotencyPortCore, formatIdempotencyMutationErrorMessage, } from "../shared/idempotency-core.js";
|
|
37
39
|
import { quoteIdentifier } from "../shared/identifiers.js";
|
|
38
40
|
import { createDbQueryLogger } from "../shared/instrumentation.js";
|
|
39
41
|
import { createOutboxPortCore, } from "../shared/outbox-core.js";
|
|
42
|
+
async function checkPostgresHealth(pool) {
|
|
43
|
+
try {
|
|
44
|
+
await pool.query("select 1");
|
|
45
|
+
return dbHealthOk("postgres");
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
return dbHealthError("postgres", error);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
40
51
|
/**
|
|
41
52
|
* Create a Unit of Work port backed by Drizzle's Postgres transaction API.
|
|
42
53
|
*
|
|
@@ -59,6 +70,60 @@ export function createDrizzlePostgresUnitOfWork(options) {
|
|
|
59
70
|
},
|
|
60
71
|
};
|
|
61
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Create idempotent SQL statements for the Drizzle Postgres audit log table.
|
|
75
|
+
*
|
|
76
|
+
* Run these during migrations or local setup before using
|
|
77
|
+
* `createDrizzlePostgresAuditLogPort(...)`.
|
|
78
|
+
*/
|
|
79
|
+
export function createDrizzlePostgresAuditLogSetupStatements(options = {}) {
|
|
80
|
+
const tableName = options.tableName ?? "audit_log";
|
|
81
|
+
const table = quoteIdentifier(tableName, '"');
|
|
82
|
+
const indexPrefix = tableName.replaceAll(/[^A-Za-z0-9_]/g, "_");
|
|
83
|
+
return [
|
|
84
|
+
`CREATE TABLE IF NOT EXISTS ${table} (
|
|
85
|
+
id text PRIMARY KEY NOT NULL,
|
|
86
|
+
action text NOT NULL,
|
|
87
|
+
actor_type text NOT NULL,
|
|
88
|
+
actor_id text,
|
|
89
|
+
actor_display_name text,
|
|
90
|
+
tenant_id text,
|
|
91
|
+
tenant_slug text,
|
|
92
|
+
resource_type text,
|
|
93
|
+
resource_id text,
|
|
94
|
+
resource_name text,
|
|
95
|
+
outcome text DEFAULT 'success' NOT NULL,
|
|
96
|
+
request_id text,
|
|
97
|
+
trace_id text,
|
|
98
|
+
message text,
|
|
99
|
+
metadata text,
|
|
100
|
+
actor_metadata text,
|
|
101
|
+
tenant_metadata text,
|
|
102
|
+
resource_metadata text,
|
|
103
|
+
occurred_at text NOT NULL
|
|
104
|
+
)`,
|
|
105
|
+
`CREATE INDEX IF NOT EXISTS ${quoteIdentifier(`${indexPrefix}_action_idx`, '"')} ON ${table} (action)`,
|
|
106
|
+
`CREATE INDEX IF NOT EXISTS ${quoteIdentifier(`${indexPrefix}_actor_idx`, '"')} ON ${table} (actor_type, actor_id)`,
|
|
107
|
+
`CREATE INDEX IF NOT EXISTS ${quoteIdentifier(`${indexPrefix}_occurred_at_idx`, '"')} ON ${table} (occurred_at)`,
|
|
108
|
+
`CREATE INDEX IF NOT EXISTS ${quoteIdentifier(`${indexPrefix}_request_idx`, '"')} ON ${table} (request_id)`,
|
|
109
|
+
`CREATE INDEX IF NOT EXISTS ${quoteIdentifier(`${indexPrefix}_resource_idx`, '"')} ON ${table} (resource_type, resource_id)`,
|
|
110
|
+
`CREATE INDEX IF NOT EXISTS ${quoteIdentifier(`${indexPrefix}_tenant_idx`, '"')} ON ${table} (tenant_id)`,
|
|
111
|
+
];
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Create a Beignet audit log port backed by a Drizzle Postgres database.
|
|
115
|
+
*
|
|
116
|
+
* The port accepts both the root Drizzle database and transaction clients, so
|
|
117
|
+
* applications can rebuild audit logging inside Unit of Work transaction ports.
|
|
118
|
+
*/
|
|
119
|
+
export function createDrizzlePostgresAuditLogPort(db, adapterOptions = {}) {
|
|
120
|
+
const table = sql.raw(quoteIdentifier(adapterOptions.tableName ?? "audit_log", '"'));
|
|
121
|
+
return {
|
|
122
|
+
async record(input) {
|
|
123
|
+
await db.execute(createAuditLogInsertQuery(table, createAuditLogSqlRow(input, adapterOptions)));
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
}
|
|
62
127
|
function readRowsAffected(result) {
|
|
63
128
|
const { rowCount, affectedRows } = result;
|
|
64
129
|
if (typeof rowCount === "number") {
|
|
@@ -276,7 +341,12 @@ export function createDrizzlePostgresProvider(options) {
|
|
|
276
341
|
? drizzle(pool, { schema, logger })
|
|
277
342
|
: drizzle(pool, { schema });
|
|
278
343
|
// 3. Build a typed DbPort
|
|
279
|
-
const dbPort = {
|
|
344
|
+
const dbPort = {
|
|
345
|
+
drizzle: db,
|
|
346
|
+
db,
|
|
347
|
+
pool,
|
|
348
|
+
checkHealth: () => checkPostgresHealth(pool),
|
|
349
|
+
};
|
|
280
350
|
return {
|
|
281
351
|
ports: { [portName]: dbPort },
|
|
282
352
|
async stop() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/postgres/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/postgres/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type ActivityActorType, type AuditLogEntry, type AuditLogEntryInput, type AuditLogOptions } from "@beignet/core/ports";
|
|
2
|
+
import { type SQL } from "drizzle-orm";
|
|
3
|
+
export interface DrizzleAuditLogCoreOptions extends AuditLogOptions {
|
|
4
|
+
/**
|
|
5
|
+
* Optional ID factory for deterministic tests or runtimes without
|
|
6
|
+
* `globalThis.crypto.randomUUID()`.
|
|
7
|
+
*/
|
|
8
|
+
createId?: () => string;
|
|
9
|
+
}
|
|
10
|
+
export type AuditLogSqlRow = {
|
|
11
|
+
id: string;
|
|
12
|
+
action: string;
|
|
13
|
+
actorType: ActivityActorType;
|
|
14
|
+
actorId: string | null;
|
|
15
|
+
actorDisplayName: string | null;
|
|
16
|
+
tenantId: string | null;
|
|
17
|
+
tenantSlug: string | null;
|
|
18
|
+
resourceType: string | null;
|
|
19
|
+
resourceId: string | null;
|
|
20
|
+
resourceName: string | null;
|
|
21
|
+
outcome: AuditLogEntry["outcome"];
|
|
22
|
+
requestId: string | null;
|
|
23
|
+
traceId: string | null;
|
|
24
|
+
message: string | null;
|
|
25
|
+
metadata: string | null;
|
|
26
|
+
actorMetadata: string | null;
|
|
27
|
+
tenantMetadata: string | null;
|
|
28
|
+
resourceMetadata: string | null;
|
|
29
|
+
occurredAt: string;
|
|
30
|
+
};
|
|
31
|
+
export declare function createAuditLogSqlRow(input: AuditLogEntryInput, options?: DrizzleAuditLogCoreOptions): AuditLogSqlRow;
|
|
32
|
+
export declare function createAuditLogInsertQuery(table: SQL, row: AuditLogSqlRow): SQL;
|
|
33
|
+
//# sourceMappingURL=audit-core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-core.d.ts","sourceRoot":"","sources":["../../src/shared/audit-core.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EAGrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,GAAG,EAAO,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,0BAA2B,SAAQ,eAAe;IACjE;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,iBAAiB,CAAC;IAC7B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAClC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAeF,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,kBAAkB,EACzB,OAAO,GAAE,0BAA+B,GACvC,cAAc,CA4BhB;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,GAAG,EACV,GAAG,EAAE,cAAc,GAClB,GAAG,CA4CL"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { normalizeAuditLogEntry, redactAuditLogEntry, } from "@beignet/core/ports";
|
|
2
|
+
import { sql } from "drizzle-orm";
|
|
3
|
+
function defaultCreateAuditLogId() {
|
|
4
|
+
if (typeof globalThis.crypto?.randomUUID !== "function") {
|
|
5
|
+
throw new Error("Drizzle audit log adapters require globalThis.crypto.randomUUID(). Pass createId when this runtime does not provide it.");
|
|
6
|
+
}
|
|
7
|
+
return globalThis.crypto.randomUUID();
|
|
8
|
+
}
|
|
9
|
+
function serialize(value) {
|
|
10
|
+
return value === undefined ? null : JSON.stringify(value);
|
|
11
|
+
}
|
|
12
|
+
export function createAuditLogSqlRow(input, options = {}) {
|
|
13
|
+
const normalized = normalizeAuditLogEntry(input);
|
|
14
|
+
const entry = options.redact
|
|
15
|
+
? options.redact(redactAuditLogEntry(normalized))
|
|
16
|
+
: redactAuditLogEntry(normalized);
|
|
17
|
+
const createId = options.createId ?? defaultCreateAuditLogId;
|
|
18
|
+
return {
|
|
19
|
+
id: createId(),
|
|
20
|
+
action: entry.action,
|
|
21
|
+
actorType: entry.actor.type,
|
|
22
|
+
actorId: entry.actor.id ?? null,
|
|
23
|
+
actorDisplayName: entry.actor.displayName ?? null,
|
|
24
|
+
tenantId: entry.tenant?.id ?? null,
|
|
25
|
+
tenantSlug: entry.tenant?.slug ?? null,
|
|
26
|
+
resourceType: entry.resource?.type ?? null,
|
|
27
|
+
resourceId: entry.resource?.id ?? null,
|
|
28
|
+
resourceName: entry.resource?.name ?? null,
|
|
29
|
+
outcome: entry.outcome,
|
|
30
|
+
requestId: entry.requestId ?? null,
|
|
31
|
+
traceId: entry.traceId ?? null,
|
|
32
|
+
message: entry.message ?? null,
|
|
33
|
+
metadata: serialize(entry.metadata),
|
|
34
|
+
actorMetadata: serialize(entry.actor.metadata),
|
|
35
|
+
tenantMetadata: serialize(entry.tenant?.metadata),
|
|
36
|
+
resourceMetadata: serialize(entry.resource?.metadata),
|
|
37
|
+
occurredAt: entry.occurredAt.toISOString(),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export function createAuditLogInsertQuery(table, row) {
|
|
41
|
+
return sql `
|
|
42
|
+
insert into ${table} (
|
|
43
|
+
id,
|
|
44
|
+
action,
|
|
45
|
+
actor_type,
|
|
46
|
+
actor_id,
|
|
47
|
+
actor_display_name,
|
|
48
|
+
tenant_id,
|
|
49
|
+
tenant_slug,
|
|
50
|
+
resource_type,
|
|
51
|
+
resource_id,
|
|
52
|
+
resource_name,
|
|
53
|
+
outcome,
|
|
54
|
+
request_id,
|
|
55
|
+
trace_id,
|
|
56
|
+
message,
|
|
57
|
+
metadata,
|
|
58
|
+
actor_metadata,
|
|
59
|
+
tenant_metadata,
|
|
60
|
+
resource_metadata,
|
|
61
|
+
occurred_at
|
|
62
|
+
) values (
|
|
63
|
+
${row.id},
|
|
64
|
+
${row.action},
|
|
65
|
+
${row.actorType},
|
|
66
|
+
${row.actorId},
|
|
67
|
+
${row.actorDisplayName},
|
|
68
|
+
${row.tenantId},
|
|
69
|
+
${row.tenantSlug},
|
|
70
|
+
${row.resourceType},
|
|
71
|
+
${row.resourceId},
|
|
72
|
+
${row.resourceName},
|
|
73
|
+
${row.outcome},
|
|
74
|
+
${row.requestId},
|
|
75
|
+
${row.traceId},
|
|
76
|
+
${row.message},
|
|
77
|
+
${row.metadata},
|
|
78
|
+
${row.actorMetadata},
|
|
79
|
+
${row.tenantMetadata},
|
|
80
|
+
${row.resourceMetadata},
|
|
81
|
+
${row.occurredAt}
|
|
82
|
+
)
|
|
83
|
+
`;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=audit-core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-core.js","sourceRoot":"","sources":["../../src/shared/audit-core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface DbHealth {
|
|
2
|
+
ok: boolean;
|
|
3
|
+
message?: string;
|
|
4
|
+
metadata: {
|
|
5
|
+
adapter: "sqlite" | "postgres" | "mysql";
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export declare function dbHealthOk(adapter: DbHealth["metadata"]["adapter"]): DbHealth;
|
|
9
|
+
export declare function dbHealthError(adapter: DbHealth["metadata"]["adapter"], error: unknown): DbHealth;
|
|
10
|
+
//# sourceMappingURL=health.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/shared/health.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QACR,OAAO,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;KAC1C,CAAC;CACH;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,GAAG,QAAQ,CAK7E;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,EACxC,KAAK,EAAE,OAAO,GACb,QAAQ,CAMV"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function dbHealthOk(adapter) {
|
|
2
|
+
return {
|
|
3
|
+
ok: true,
|
|
4
|
+
metadata: { adapter },
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
export function dbHealthError(adapter, error) {
|
|
8
|
+
return {
|
|
9
|
+
ok: false,
|
|
10
|
+
message: error instanceof Error ? error.message : String(error),
|
|
11
|
+
metadata: { adapter },
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/shared/health.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,UAAU,CAAC,OAAwC;IACjE,OAAO;QACL,EAAE,EAAE,IAAI;QACR,QAAQ,EAAE,EAAE,OAAO,EAAE;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,OAAwC,EACxC,KAAc;IAEd,OAAO;QACL,EAAE,EAAE,KAAK;QACT,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAC/D,QAAQ,EAAE,EAAE,OAAO,EAAE;KACtB,CAAC;AACJ,CAAC"}
|
package/dist/sqlite/index.d.ts
CHANGED
|
@@ -30,13 +30,15 @@
|
|
|
30
30
|
*/
|
|
31
31
|
import type { IdempotencyPort } from "@beignet/core/idempotency";
|
|
32
32
|
import type { OutboxPort } from "@beignet/core/outbox";
|
|
33
|
-
import { type BufferedDomainEventRecorder, type EventBusPort, type UnitOfWorkPort } from "@beignet/core/ports";
|
|
33
|
+
import { type AuditLogPort, type BufferedDomainEventRecorder, type EventBusPort, type UnitOfWorkPort } from "@beignet/core/ports";
|
|
34
34
|
import { type Client } from "@libsql/client";
|
|
35
35
|
import { type ExtractTablesWithRelations } from "drizzle-orm";
|
|
36
36
|
import { type LibSQLDatabase } from "drizzle-orm/libsql";
|
|
37
37
|
import type { LibSQLTransaction } from "drizzle-orm/libsql/session";
|
|
38
38
|
import type { SQLiteTransactionConfig } from "drizzle-orm/sqlite-core";
|
|
39
39
|
import { z } from "zod";
|
|
40
|
+
import { type DrizzleAuditLogCoreOptions } from "../shared/audit-core.js";
|
|
41
|
+
import { type DbHealth } from "../shared/health.js";
|
|
40
42
|
/**
|
|
41
43
|
* Typed database port interface.
|
|
42
44
|
* Exposes a typed Drizzle database instance for your schema.
|
|
@@ -60,7 +62,15 @@ export interface DbPort<TSchema extends Record<string, unknown> = Record<string,
|
|
|
60
62
|
* Use this for advanced operations not covered by Drizzle ORM.
|
|
61
63
|
*/
|
|
62
64
|
client: Client;
|
|
65
|
+
/**
|
|
66
|
+
* Check whether the underlying database client can run a cheap read query.
|
|
67
|
+
*
|
|
68
|
+
* Intended for app-owned readiness endpoints. This does not run migrations
|
|
69
|
+
* or mutate schema.
|
|
70
|
+
*/
|
|
71
|
+
checkHealth(): Promise<DbHealth>;
|
|
63
72
|
}
|
|
73
|
+
export type { DbHealth };
|
|
64
74
|
/**
|
|
65
75
|
* Drizzle database or transaction client accepted by repository factories.
|
|
66
76
|
*/
|
|
@@ -101,6 +111,31 @@ export interface DrizzleSqliteUnitOfWorkOptions<TSchema extends Record<string, u
|
|
|
101
111
|
* decides which transaction-scoped ports to create.
|
|
102
112
|
*/
|
|
103
113
|
export declare function createDrizzleSqliteUnitOfWork<TSchema extends Record<string, unknown>, TxPorts>(options: DrizzleSqliteUnitOfWorkOptions<TSchema, TxPorts>): UnitOfWorkPort<TxPorts>;
|
|
114
|
+
/**
|
|
115
|
+
* Options for a Drizzle SQLite-backed audit log port.
|
|
116
|
+
*/
|
|
117
|
+
export interface DrizzleSqliteAuditLogOptions extends DrizzleAuditLogCoreOptions {
|
|
118
|
+
/**
|
|
119
|
+
* Table that stores audit log entries.
|
|
120
|
+
*
|
|
121
|
+
* Default: "audit_log".
|
|
122
|
+
*/
|
|
123
|
+
tableName?: string;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Create idempotent SQL statements for the Drizzle SQLite audit log table.
|
|
127
|
+
*
|
|
128
|
+
* Run these during migrations or local setup before using
|
|
129
|
+
* `createDrizzleSqliteAuditLogPort(...)`.
|
|
130
|
+
*/
|
|
131
|
+
export declare function createDrizzleSqliteAuditLogSetupStatements(options?: DrizzleSqliteAuditLogOptions): readonly string[];
|
|
132
|
+
/**
|
|
133
|
+
* Create a Beignet audit log port backed by a Drizzle SQLite database.
|
|
134
|
+
*
|
|
135
|
+
* The port accepts both the root Drizzle database and transaction clients, so
|
|
136
|
+
* applications can rebuild audit logging inside Unit of Work transaction ports.
|
|
137
|
+
*/
|
|
138
|
+
export declare function createDrizzleSqliteAuditLogPort<TSchema extends Record<string, unknown>>(db: DrizzleSqliteDatabase<TSchema>, adapterOptions?: DrizzleSqliteAuditLogOptions): AuditLogPort;
|
|
104
139
|
/**
|
|
105
140
|
* Options for a Drizzle SQLite-backed outbox port.
|
|
106
141
|
*/
|
|
@@ -237,5 +272,4 @@ export declare function createDrizzleSqliteProvider<TSchema extends Record<strin
|
|
|
237
272
|
DB_URL: z.ZodString;
|
|
238
273
|
DB_AUTH_TOKEN: z.ZodOptional<z.ZodString>;
|
|
239
274
|
}, z.core.$strip>, Record<PortName, DbPort<TSchema>>, unknown, void>;
|
|
240
|
-
export {};
|
|
241
275
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sqlite/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EACL,KAAK,2BAA2B,EAEhC,KAAK,YAAY,EAEjB,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,KAAK,0BAA0B,EAAiB,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAW,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sqlite/index.ts"],"names":[],"mappings":"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"}
|
package/dist/sqlite/index.js
CHANGED
|
@@ -34,10 +34,21 @@ import { createClient } from "@libsql/client";
|
|
|
34
34
|
import { sql } from "drizzle-orm";
|
|
35
35
|
import { drizzle } from "drizzle-orm/libsql";
|
|
36
36
|
import { z } from "zod";
|
|
37
|
+
import { createAuditLogInsertQuery, createAuditLogSqlRow, } from "../shared/audit-core.js";
|
|
38
|
+
import { dbHealthError, dbHealthOk } from "../shared/health.js";
|
|
37
39
|
import { createIdempotencyPortCore, formatIdempotencyMutationErrorMessage, } from "../shared/idempotency-core.js";
|
|
38
40
|
import { quoteIdentifier } from "../shared/identifiers.js";
|
|
39
41
|
import { createDbQueryLogger } from "../shared/instrumentation.js";
|
|
40
42
|
import { createOutboxPortCore, } from "../shared/outbox-core.js";
|
|
43
|
+
async function checkSqliteHealth(client) {
|
|
44
|
+
try {
|
|
45
|
+
await client.execute("select 1");
|
|
46
|
+
return dbHealthOk("sqlite");
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
return dbHealthError("sqlite", error);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
41
52
|
/**
|
|
42
53
|
* Create a Unit of Work port backed by Drizzle's libSQL transaction API.
|
|
43
54
|
*
|
|
@@ -60,6 +71,60 @@ export function createDrizzleSqliteUnitOfWork(options) {
|
|
|
60
71
|
},
|
|
61
72
|
};
|
|
62
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Create idempotent SQL statements for the Drizzle SQLite audit log table.
|
|
76
|
+
*
|
|
77
|
+
* Run these during migrations or local setup before using
|
|
78
|
+
* `createDrizzleSqliteAuditLogPort(...)`.
|
|
79
|
+
*/
|
|
80
|
+
export function createDrizzleSqliteAuditLogSetupStatements(options = {}) {
|
|
81
|
+
const tableName = options.tableName ?? "audit_log";
|
|
82
|
+
const table = quoteIdentifier(tableName, '"');
|
|
83
|
+
const indexPrefix = tableName.replaceAll(/[^A-Za-z0-9_]/g, "_");
|
|
84
|
+
return [
|
|
85
|
+
`CREATE TABLE IF NOT EXISTS ${table} (
|
|
86
|
+
id text PRIMARY KEY NOT NULL,
|
|
87
|
+
action text NOT NULL,
|
|
88
|
+
actor_type text NOT NULL,
|
|
89
|
+
actor_id text,
|
|
90
|
+
actor_display_name text,
|
|
91
|
+
tenant_id text,
|
|
92
|
+
tenant_slug text,
|
|
93
|
+
resource_type text,
|
|
94
|
+
resource_id text,
|
|
95
|
+
resource_name text,
|
|
96
|
+
outcome text DEFAULT 'success' NOT NULL,
|
|
97
|
+
request_id text,
|
|
98
|
+
trace_id text,
|
|
99
|
+
message text,
|
|
100
|
+
metadata text,
|
|
101
|
+
actor_metadata text,
|
|
102
|
+
tenant_metadata text,
|
|
103
|
+
resource_metadata text,
|
|
104
|
+
occurred_at text NOT NULL
|
|
105
|
+
)`,
|
|
106
|
+
`CREATE INDEX IF NOT EXISTS ${quoteIdentifier(`${indexPrefix}_action_idx`, '"')} ON ${table} (action)`,
|
|
107
|
+
`CREATE INDEX IF NOT EXISTS ${quoteIdentifier(`${indexPrefix}_actor_idx`, '"')} ON ${table} (actor_type, actor_id)`,
|
|
108
|
+
`CREATE INDEX IF NOT EXISTS ${quoteIdentifier(`${indexPrefix}_occurred_at_idx`, '"')} ON ${table} (occurred_at)`,
|
|
109
|
+
`CREATE INDEX IF NOT EXISTS ${quoteIdentifier(`${indexPrefix}_request_idx`, '"')} ON ${table} (request_id)`,
|
|
110
|
+
`CREATE INDEX IF NOT EXISTS ${quoteIdentifier(`${indexPrefix}_resource_idx`, '"')} ON ${table} (resource_type, resource_id)`,
|
|
111
|
+
`CREATE INDEX IF NOT EXISTS ${quoteIdentifier(`${indexPrefix}_tenant_idx`, '"')} ON ${table} (tenant_id)`,
|
|
112
|
+
];
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Create a Beignet audit log port backed by a Drizzle SQLite database.
|
|
116
|
+
*
|
|
117
|
+
* The port accepts both the root Drizzle database and transaction clients, so
|
|
118
|
+
* applications can rebuild audit logging inside Unit of Work transaction ports.
|
|
119
|
+
*/
|
|
120
|
+
export function createDrizzleSqliteAuditLogPort(db, adapterOptions = {}) {
|
|
121
|
+
const table = sql.raw(quoteIdentifier(adapterOptions.tableName ?? "audit_log", '"'));
|
|
122
|
+
return {
|
|
123
|
+
async record(input) {
|
|
124
|
+
await db.run(createAuditLogInsertQuery(table, createAuditLogSqlRow(input, adapterOptions)));
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
}
|
|
63
128
|
function readRowsAffected(result) {
|
|
64
129
|
const rowsAffected = result.rowsAffected;
|
|
65
130
|
return typeof rowsAffected === "number" ? rowsAffected : undefined;
|
|
@@ -273,7 +338,12 @@ export function createDrizzleSqliteProvider(options) {
|
|
|
273
338
|
? drizzle(client, { schema, logger })
|
|
274
339
|
: drizzle(client, { schema });
|
|
275
340
|
// 3. Build a typed DbPort
|
|
276
|
-
const dbPort = {
|
|
341
|
+
const dbPort = {
|
|
342
|
+
drizzle: db,
|
|
343
|
+
db,
|
|
344
|
+
client,
|
|
345
|
+
checkHealth: () => checkSqliteHealth(client),
|
|
346
|
+
};
|
|
277
347
|
return {
|
|
278
348
|
ports: { [portName]: dbPort },
|
|
279
349
|
async stop() {
|
package/dist/sqlite/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sqlite/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sqlite/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@beignet/provider-db-drizzle",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.23",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"description": "Drizzle ORM database providers for Beignet — typed DbPort, unit of work, outbox, and idempotency for SQLite (libSQL/Turso), Postgres, and MySQL.",
|
|
5
|
+
"description": "Drizzle ORM database providers for Beignet — typed DbPort, unit of work, audit logs, outbox, and idempotency for SQLite (libSQL/Turso), Postgres, and MySQL.",
|
|
6
6
|
"exports": {
|
|
7
7
|
"./sqlite": {
|
|
8
8
|
"types": "./dist/sqlite/index.d.ts",
|