@modern-admin/system-drizzle 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/schema/pg.d.ts +4982 -0
- package/dist/schema/pg.d.ts.map +1 -0
- package/dist/schema/pg.js +297 -0
- package/dist/schema/pg.js.map +1 -0
- package/dist/stores/ai-task-store.d.ts +20 -0
- package/dist/stores/ai-task-store.d.ts.map +1 -0
- package/dist/stores/ai-task-store.js +128 -0
- package/dist/stores/ai-task-store.js.map +1 -0
- package/dist/stores/cache-store.d.ts +23 -0
- package/dist/stores/cache-store.d.ts.map +1 -0
- package/dist/stores/cache-store.js +72 -0
- package/dist/stores/cache-store.js.map +1 -0
- package/dist/stores/config-store.d.ts +13 -0
- package/dist/stores/config-store.d.ts.map +1 -0
- package/dist/stores/config-store.js +60 -0
- package/dist/stores/config-store.js.map +1 -0
- package/dist/stores/history-store.d.ts +22 -0
- package/dist/stores/history-store.d.ts.map +1 -0
- package/dist/stores/history-store.js +62 -0
- package/dist/stores/history-store.js.map +1 -0
- package/dist/stores/log-store.d.ts +10 -0
- package/dist/stores/log-store.d.ts.map +1 -0
- package/dist/stores/log-store.js +62 -0
- package/dist/stores/log-store.js.map +1 -0
- package/dist/stores/webhook-store.d.ts +16 -0
- package/dist/stores/webhook-store.d.ts.map +1 -0
- package/dist/stores/webhook-store.js +129 -0
- package/dist/stores/webhook-store.js.map +1 -0
- package/dist/types.d.ts +23 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +12 -0
- package/dist/types.js.map +1 -0
- package/package.json +53 -0
- package/src/index.ts +65 -0
- package/src/schema/pg.ts +354 -0
- package/src/stores/ai-task-store.ts +174 -0
- package/src/stores/cache-store.ts +90 -0
- package/src/stores/config-store.ts +80 -0
- package/src/stores/history-store.ts +98 -0
- package/src/stores/log-store.ts +71 -0
- package/src/stores/webhook-store.ts +167 -0
- package/src/types.ts +27 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { uuidv7 } from '@modern-admin/core';
|
|
2
|
+
import { and, asc, eq, isNull } from 'drizzle-orm';
|
|
3
|
+
const rowToEntry = (row) => ({
|
|
4
|
+
scope: row.scope,
|
|
5
|
+
scopeId: row.scopeId,
|
|
6
|
+
key: row.key,
|
|
7
|
+
value: row.value,
|
|
8
|
+
updatedAt: row.updatedAt.toISOString(),
|
|
9
|
+
});
|
|
10
|
+
export class DrizzleConfigStore {
|
|
11
|
+
constructor(db, table) {
|
|
12
|
+
this.db = db;
|
|
13
|
+
this.table = table;
|
|
14
|
+
}
|
|
15
|
+
pkCondition(scope, scopeId, key) {
|
|
16
|
+
const scopeIdCond = scopeId === null
|
|
17
|
+
? isNull(this.table.scopeId)
|
|
18
|
+
: eq(this.table.scopeId, scopeId);
|
|
19
|
+
return and(eq(this.table.scope, scope), scopeIdCond, eq(this.table.key, key));
|
|
20
|
+
}
|
|
21
|
+
async get(scope, scopeId, key) {
|
|
22
|
+
const rows = (await this.db
|
|
23
|
+
.select()
|
|
24
|
+
.from(this.table)
|
|
25
|
+
.where(this.pkCondition(scope, scopeId, key))
|
|
26
|
+
.limit(1));
|
|
27
|
+
return rows[0]?.value;
|
|
28
|
+
}
|
|
29
|
+
async set(scope, scopeId, key, value) {
|
|
30
|
+
await this.db
|
|
31
|
+
.insert(this.table)
|
|
32
|
+
.values({
|
|
33
|
+
id: uuidv7(),
|
|
34
|
+
scope,
|
|
35
|
+
scopeId,
|
|
36
|
+
key,
|
|
37
|
+
value: value ?? null,
|
|
38
|
+
updatedAt: new Date(),
|
|
39
|
+
})
|
|
40
|
+
.onConflictDoUpdate({
|
|
41
|
+
target: [this.table.scope, this.table.scopeId, this.table.key],
|
|
42
|
+
set: { value: value ?? null, updatedAt: new Date() },
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
async delete(scope, scopeId, key) {
|
|
46
|
+
await this.db.delete(this.table).where(this.pkCondition(scope, scopeId, key));
|
|
47
|
+
}
|
|
48
|
+
async list(scope, scopeId) {
|
|
49
|
+
const scopeIdCond = scopeId === null
|
|
50
|
+
? isNull(this.table.scopeId)
|
|
51
|
+
: eq(this.table.scopeId, scopeId);
|
|
52
|
+
const rows = (await this.db
|
|
53
|
+
.select()
|
|
54
|
+
.from(this.table)
|
|
55
|
+
.where(and(eq(this.table.scope, scope), scopeIdCond))
|
|
56
|
+
.orderBy(asc(this.table.key)));
|
|
57
|
+
return rows.map(rowToEntry);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=config-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-store.js","sourceRoot":"","sources":["../../src/stores/config-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type HistoryEntry, type HistoryOp, type IHistoryStore } from '@modern-admin/core';
|
|
2
|
+
import type { DrizzleLike, SystemTables } from '../types.js';
|
|
3
|
+
export declare class DrizzleHistoryStore implements IHistoryStore {
|
|
4
|
+
private readonly db;
|
|
5
|
+
private readonly table;
|
|
6
|
+
constructor(db: DrizzleLike, table: SystemTables['maHistory']);
|
|
7
|
+
append(input: {
|
|
8
|
+
resourceId: string;
|
|
9
|
+
recordId: string;
|
|
10
|
+
op: HistoryOp;
|
|
11
|
+
userId?: string;
|
|
12
|
+
snapshot: Record<string, unknown>;
|
|
13
|
+
snapshotBefore?: Record<string, unknown>;
|
|
14
|
+
}): Promise<HistoryEntry>;
|
|
15
|
+
list(resourceId: string, recordId: string, options?: {
|
|
16
|
+
limit?: number;
|
|
17
|
+
offset?: number;
|
|
18
|
+
}): Promise<HistoryEntry[]>;
|
|
19
|
+
get(resourceId: string, recordId: string, revisionId: string): Promise<HistoryEntry | null>;
|
|
20
|
+
latest(resourceId: string, recordId: string): Promise<HistoryEntry | null>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=history-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history-store.d.ts","sourceRoot":"","sources":["../../src/stores/history-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElG,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AA2B5D,qBAAa,mBAAoB,YAAW,aAAa;IAErD,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,EAAE,EAAE,WAAW,EACf,KAAK,EAAE,YAAY,CAAC,WAAW,CAAC;IAG7C,MAAM,CAAC,KAAK,EAAE;QAClB,UAAU,EAAE,MAAM,CAAA;QAClB,QAAQ,EAAE,MAAM,CAAA;QAChB,EAAE,EAAE,SAAS,CAAA;QACb,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACjC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACzC,GAAG,OAAO,CAAC,YAAY,CAAC;IAgBnB,IAAI,CACR,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAChD,OAAO,CAAC,YAAY,EAAE,CAAC;IAgBpB,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAe3F,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;CAIjF"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { uuidv7 } from '@modern-admin/core';
|
|
2
|
+
import { and, desc, eq } from 'drizzle-orm';
|
|
3
|
+
const rowToEntry = (row) => ({
|
|
4
|
+
id: row.id,
|
|
5
|
+
resourceId: row.resourceId,
|
|
6
|
+
recordId: row.recordId,
|
|
7
|
+
op: row.op,
|
|
8
|
+
...(row.userId !== null ? { userId: row.userId } : {}),
|
|
9
|
+
snapshot: row.snapshot ?? {},
|
|
10
|
+
...(row.snapshotBefore !== null && row.snapshotBefore !== undefined
|
|
11
|
+
? { snapshotBefore: row.snapshotBefore }
|
|
12
|
+
: {}),
|
|
13
|
+
createdAt: row.createdAt.toISOString(),
|
|
14
|
+
});
|
|
15
|
+
export class DrizzleHistoryStore {
|
|
16
|
+
constructor(db, table) {
|
|
17
|
+
this.db = db;
|
|
18
|
+
this.table = table;
|
|
19
|
+
}
|
|
20
|
+
async append(input) {
|
|
21
|
+
const rows = (await this.db
|
|
22
|
+
.insert(this.table)
|
|
23
|
+
.values({
|
|
24
|
+
id: uuidv7(),
|
|
25
|
+
resourceId: input.resourceId,
|
|
26
|
+
recordId: input.recordId,
|
|
27
|
+
op: input.op,
|
|
28
|
+
userId: input.userId ?? null,
|
|
29
|
+
snapshot: input.snapshot,
|
|
30
|
+
snapshotBefore: input.snapshotBefore ?? null,
|
|
31
|
+
})
|
|
32
|
+
.returning());
|
|
33
|
+
return rowToEntry(rows[0]);
|
|
34
|
+
}
|
|
35
|
+
async list(resourceId, recordId, options = {}) {
|
|
36
|
+
const limit = options.limit ?? 50;
|
|
37
|
+
const offset = options.offset ?? 0;
|
|
38
|
+
let q = this.db
|
|
39
|
+
.select()
|
|
40
|
+
.from(this.table)
|
|
41
|
+
.where(and(eq(this.table.resourceId, resourceId), eq(this.table.recordId, recordId)))
|
|
42
|
+
.orderBy(desc(this.table.createdAt))
|
|
43
|
+
.limit(limit);
|
|
44
|
+
if (offset > 0)
|
|
45
|
+
q = q.offset(offset);
|
|
46
|
+
const rows = (await q);
|
|
47
|
+
return rows.map(rowToEntry);
|
|
48
|
+
}
|
|
49
|
+
async get(resourceId, recordId, revisionId) {
|
|
50
|
+
const rows = (await this.db
|
|
51
|
+
.select()
|
|
52
|
+
.from(this.table)
|
|
53
|
+
.where(and(eq(this.table.id, revisionId), eq(this.table.resourceId, resourceId), eq(this.table.recordId, recordId)))
|
|
54
|
+
.limit(1));
|
|
55
|
+
return rows[0] ? rowToEntry(rows[0]) : null;
|
|
56
|
+
}
|
|
57
|
+
async latest(resourceId, recordId) {
|
|
58
|
+
const rows = (await this.list(resourceId, recordId, { limit: 1 }));
|
|
59
|
+
return rows[0] ?? null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=history-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history-store.js","sourceRoot":"","sources":["../../src/stores/history-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type ActionLogEntry, type IQueryableLogStore } from '@modern-admin/core';
|
|
2
|
+
import type { DrizzleLike, SystemTables } from '../types.js';
|
|
3
|
+
export declare class DrizzleLogStore implements IQueryableLogStore {
|
|
4
|
+
private readonly db;
|
|
5
|
+
private readonly table;
|
|
6
|
+
constructor(db: DrizzleLike, table: SystemTables['maLog']);
|
|
7
|
+
record(entry: ActionLogEntry): Promise<void>;
|
|
8
|
+
list(filter?: Parameters<IQueryableLogStore['list']>[0]): Promise<ActionLogEntry[]>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=log-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-store.d.ts","sourceRoot":"","sources":["../../src/stores/log-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAEzF,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AA8B5D,qBAAa,eAAgB,YAAW,kBAAkB;IAEtD,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,EAAE,EAAE,WAAW,EACf,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC;IAGzC,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAc5C,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CAkB9F"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { uuidv7 } from '@modern-admin/core';
|
|
2
|
+
import { and, desc, eq, gte, inArray, lte } from 'drizzle-orm';
|
|
3
|
+
const rowToEntry = (row) => ({
|
|
4
|
+
id: row.id,
|
|
5
|
+
resourceId: row.resourceId,
|
|
6
|
+
action: row.action,
|
|
7
|
+
...(row.recordId !== null ? { recordId: row.recordId } : {}),
|
|
8
|
+
...(Array.isArray(row.recordIds) ? { recordIds: row.recordIds } : {}),
|
|
9
|
+
...(row.userId !== null ? { userId: row.userId } : {}),
|
|
10
|
+
...(row.payload !== null && row.payload !== undefined
|
|
11
|
+
? { payload: row.payload }
|
|
12
|
+
: {}),
|
|
13
|
+
...(row.result !== null && row.result !== undefined
|
|
14
|
+
? { result: row.result }
|
|
15
|
+
: {}),
|
|
16
|
+
at: Number(row.at),
|
|
17
|
+
});
|
|
18
|
+
export class DrizzleLogStore {
|
|
19
|
+
constructor(db, table) {
|
|
20
|
+
this.db = db;
|
|
21
|
+
this.table = table;
|
|
22
|
+
}
|
|
23
|
+
async record(entry) {
|
|
24
|
+
await this.db.insert(this.table).values({
|
|
25
|
+
id: entry.id ?? uuidv7(),
|
|
26
|
+
resourceId: entry.resourceId,
|
|
27
|
+
action: entry.action,
|
|
28
|
+
recordId: entry.recordId ?? null,
|
|
29
|
+
recordIds: entry.recordIds ?? null,
|
|
30
|
+
userId: entry.userId ?? null,
|
|
31
|
+
payload: entry.payload ?? null,
|
|
32
|
+
result: entry.result ?? null,
|
|
33
|
+
at: entry.at,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
async list(filter = {}) {
|
|
37
|
+
const conds = [];
|
|
38
|
+
if (filter.resourceId)
|
|
39
|
+
conds.push(eq(this.table.resourceId, filter.resourceId));
|
|
40
|
+
if (filter.recordId)
|
|
41
|
+
conds.push(eq(this.table.recordId, filter.recordId));
|
|
42
|
+
if (filter.userId)
|
|
43
|
+
conds.push(eq(this.table.userId, filter.userId));
|
|
44
|
+
if (filter.actions?.length)
|
|
45
|
+
conds.push(inArray(this.table.action, filter.actions));
|
|
46
|
+
if (filter.from)
|
|
47
|
+
conds.push(gte(this.table.at, filter.from.getTime()));
|
|
48
|
+
if (filter.to)
|
|
49
|
+
conds.push(lte(this.table.at, filter.to.getTime()));
|
|
50
|
+
let q = this.db.select().from(this.table);
|
|
51
|
+
if (conds.length)
|
|
52
|
+
q = q.where(conds.length === 1 ? conds[0] : and(...conds));
|
|
53
|
+
q = q.orderBy(desc(this.table.at));
|
|
54
|
+
if (filter.limit !== undefined)
|
|
55
|
+
q = q.limit(filter.limit);
|
|
56
|
+
if (filter.offset !== undefined)
|
|
57
|
+
q = q.offset(filter.offset);
|
|
58
|
+
const rows = (await q);
|
|
59
|
+
return rows.map(rowToEntry);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=log-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-store.js","sourceRoot":"","sources":["../../src/stores/log-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type IWebhookStore, type Webhook, type WebhookDelivery, type WebhookInput } from '@modern-admin/core';
|
|
2
|
+
import type { DrizzleLike, SystemTables } from '../types.js';
|
|
3
|
+
export declare class DrizzleWebhookStore implements IWebhookStore {
|
|
4
|
+
private readonly db;
|
|
5
|
+
private readonly hookTable;
|
|
6
|
+
private readonly deliveryTable;
|
|
7
|
+
constructor(db: DrizzleLike, hookTable: SystemTables['maWebhook'], deliveryTable: SystemTables['maWebhookDelivery']);
|
|
8
|
+
list(): Promise<Webhook[]>;
|
|
9
|
+
get(id: string): Promise<Webhook | null>;
|
|
10
|
+
create(input: WebhookInput): Promise<Webhook>;
|
|
11
|
+
update(id: string, patch: Partial<WebhookInput>): Promise<Webhook>;
|
|
12
|
+
delete(id: string): Promise<void>;
|
|
13
|
+
recordDelivery(delivery: Omit<WebhookDelivery, 'id' | 'createdAt'>): Promise<WebhookDelivery>;
|
|
14
|
+
listDeliveries(webhookId: string, limit?: number): Promise<WebhookDelivery[]>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=webhook-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-store.d.ts","sourceRoot":"","sources":["../../src/stores/webhook-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,OAAO,EACZ,KAAK,eAAe,EAEpB,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AA4D5D,qBAAa,mBAAoB,YAAW,aAAa;IAErD,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAFb,EAAE,EAAE,WAAW,EACf,SAAS,EAAE,YAAY,CAAC,WAAW,CAAC,EACpC,aAAa,EAAE,YAAY,CAAC,mBAAmB,CAAC;IAG7D,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAQ1B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IASxC,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB7C,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBlE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjC,cAAc,CAClB,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,WAAW,CAAC,GAClD,OAAO,CAAC,eAAe,CAAC;IAmBrB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CAShF"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { uuidv7, } from '@modern-admin/core';
|
|
2
|
+
import { desc, eq } from 'drizzle-orm';
|
|
3
|
+
const rowToWebhook = (row) => ({
|
|
4
|
+
id: row.id,
|
|
5
|
+
name: row.name,
|
|
6
|
+
url: row.url,
|
|
7
|
+
events: Array.isArray(row.events) ? row.events : [],
|
|
8
|
+
resourceId: row.resourceId,
|
|
9
|
+
enabled: row.enabled,
|
|
10
|
+
...(row.secret !== null ? { secret: row.secret } : {}),
|
|
11
|
+
headers: row.headers ?? {},
|
|
12
|
+
filters: row.filters ?? {},
|
|
13
|
+
payloadFields: Array.isArray(row.payloadFields) ? row.payloadFields : [],
|
|
14
|
+
createdAt: row.createdAt.toISOString(),
|
|
15
|
+
updatedAt: row.updatedAt.toISOString(),
|
|
16
|
+
});
|
|
17
|
+
const rowToDelivery = (row) => ({
|
|
18
|
+
id: row.id,
|
|
19
|
+
webhookId: row.webhookId,
|
|
20
|
+
event: row.event,
|
|
21
|
+
payload: row.payload ?? {},
|
|
22
|
+
status: row.status,
|
|
23
|
+
...(row.responseStatus !== null ? { responseStatus: row.responseStatus } : {}),
|
|
24
|
+
...(row.responseBody !== null ? { responseBody: row.responseBody } : {}),
|
|
25
|
+
...(row.error !== null ? { error: row.error } : {}),
|
|
26
|
+
attempt: row.attempt,
|
|
27
|
+
createdAt: row.createdAt.toISOString(),
|
|
28
|
+
...(row.deliveredAt !== null ? { deliveredAt: row.deliveredAt.toISOString() } : {}),
|
|
29
|
+
});
|
|
30
|
+
export class DrizzleWebhookStore {
|
|
31
|
+
constructor(db, hookTable, deliveryTable) {
|
|
32
|
+
this.db = db;
|
|
33
|
+
this.hookTable = hookTable;
|
|
34
|
+
this.deliveryTable = deliveryTable;
|
|
35
|
+
}
|
|
36
|
+
async list() {
|
|
37
|
+
const rows = (await this.db
|
|
38
|
+
.select()
|
|
39
|
+
.from(this.hookTable)
|
|
40
|
+
.orderBy(desc(this.hookTable.createdAt)));
|
|
41
|
+
return rows.map(rowToWebhook);
|
|
42
|
+
}
|
|
43
|
+
async get(id) {
|
|
44
|
+
const rows = (await this.db
|
|
45
|
+
.select()
|
|
46
|
+
.from(this.hookTable)
|
|
47
|
+
.where(eq(this.hookTable.id, id))
|
|
48
|
+
.limit(1));
|
|
49
|
+
return rows[0] ? rowToWebhook(rows[0]) : null;
|
|
50
|
+
}
|
|
51
|
+
async create(input) {
|
|
52
|
+
const rows = (await this.db
|
|
53
|
+
.insert(this.hookTable)
|
|
54
|
+
.values({
|
|
55
|
+
id: uuidv7(),
|
|
56
|
+
name: input.name,
|
|
57
|
+
url: input.url,
|
|
58
|
+
events: input.events,
|
|
59
|
+
resourceId: input.resourceId ?? null,
|
|
60
|
+
enabled: input.enabled ?? true,
|
|
61
|
+
secret: input.secret ?? null,
|
|
62
|
+
headers: input.headers ?? {},
|
|
63
|
+
filters: input.filters ?? {},
|
|
64
|
+
payloadFields: input.payloadFields ?? [],
|
|
65
|
+
})
|
|
66
|
+
.returning());
|
|
67
|
+
return rowToWebhook(rows[0]);
|
|
68
|
+
}
|
|
69
|
+
async update(id, patch) {
|
|
70
|
+
const data = { updatedAt: new Date() };
|
|
71
|
+
if (patch.name !== undefined)
|
|
72
|
+
data['name'] = patch.name;
|
|
73
|
+
if (patch.url !== undefined)
|
|
74
|
+
data['url'] = patch.url;
|
|
75
|
+
if (patch.events !== undefined)
|
|
76
|
+
data['events'] = patch.events;
|
|
77
|
+
if (patch.resourceId !== undefined)
|
|
78
|
+
data['resourceId'] = patch.resourceId ?? null;
|
|
79
|
+
if (patch.enabled !== undefined)
|
|
80
|
+
data['enabled'] = patch.enabled;
|
|
81
|
+
if (patch.secret !== undefined)
|
|
82
|
+
data['secret'] = patch.secret;
|
|
83
|
+
if (patch.headers !== undefined)
|
|
84
|
+
data['headers'] = patch.headers;
|
|
85
|
+
if (patch.filters !== undefined)
|
|
86
|
+
data['filters'] = patch.filters;
|
|
87
|
+
if (patch.payloadFields !== undefined)
|
|
88
|
+
data['payloadFields'] = patch.payloadFields;
|
|
89
|
+
const rows = (await this.db
|
|
90
|
+
.update(this.hookTable)
|
|
91
|
+
.set(data)
|
|
92
|
+
.where(eq(this.hookTable.id, id))
|
|
93
|
+
.returning());
|
|
94
|
+
if (!rows[0])
|
|
95
|
+
throw new Error(`Webhook not found: ${id}`);
|
|
96
|
+
return rowToWebhook(rows[0]);
|
|
97
|
+
}
|
|
98
|
+
async delete(id) {
|
|
99
|
+
await this.db.delete(this.hookTable).where(eq(this.hookTable.id, id));
|
|
100
|
+
}
|
|
101
|
+
async recordDelivery(delivery) {
|
|
102
|
+
const rows = (await this.db
|
|
103
|
+
.insert(this.deliveryTable)
|
|
104
|
+
.values({
|
|
105
|
+
id: uuidv7(),
|
|
106
|
+
webhookId: delivery.webhookId,
|
|
107
|
+
event: delivery.event,
|
|
108
|
+
payload: delivery.payload,
|
|
109
|
+
status: delivery.status,
|
|
110
|
+
responseStatus: delivery.responseStatus ?? null,
|
|
111
|
+
responseBody: delivery.responseBody ?? null,
|
|
112
|
+
error: delivery.error ?? null,
|
|
113
|
+
attempt: delivery.attempt,
|
|
114
|
+
deliveredAt: delivery.deliveredAt ? new Date(delivery.deliveredAt) : null,
|
|
115
|
+
})
|
|
116
|
+
.returning());
|
|
117
|
+
return rowToDelivery(rows[0]);
|
|
118
|
+
}
|
|
119
|
+
async listDeliveries(webhookId, limit = 50) {
|
|
120
|
+
const rows = (await this.db
|
|
121
|
+
.select()
|
|
122
|
+
.from(this.deliveryTable)
|
|
123
|
+
.where(eq(this.deliveryTable.webhookId, webhookId))
|
|
124
|
+
.orderBy(desc(this.deliveryTable.createdAt))
|
|
125
|
+
.limit(limit));
|
|
126
|
+
return rows.map(rowToDelivery);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=webhook-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-store.js","sourceRoot":"","sources":["../../src/stores/webhook-store.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structural Drizzle typings used by the system stores.
|
|
3
|
+
*
|
|
4
|
+
* Drizzle's typed `db` carries a heavy dialect-specific generic load
|
|
5
|
+
* (`PgDatabase`, `MySqlDatabase`, `BetterSQLite3Database`, …). To stay
|
|
6
|
+
* dialect-agnostic at the package boundary we accept a `DrizzleLike`
|
|
7
|
+
* surface — runtime calls go through a small handful of methods every
|
|
8
|
+
* builder exposes. Hosts pass their concrete `drizzle(...)` instance and
|
|
9
|
+
* it satisfies this shape structurally.
|
|
10
|
+
*/
|
|
11
|
+
import type { SystemTables } from './schema/pg.js';
|
|
12
|
+
/**
|
|
13
|
+
* Loose Drizzle client surface. The real `drizzle(...)` instance has a
|
|
14
|
+
* much richer typed API; we only depend on the methods we actually call.
|
|
15
|
+
*/
|
|
16
|
+
export type DrizzleLike = {
|
|
17
|
+
insert: (table: any) => any;
|
|
18
|
+
select: (fields?: any) => any;
|
|
19
|
+
update: (table: any) => any;
|
|
20
|
+
delete: (table: any) => any;
|
|
21
|
+
};
|
|
22
|
+
export type { SystemTables };
|
|
23
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAElD;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAA;IAC3B,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,GAAG,CAAA;IAC7B,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAA;IAC3B,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAA;CAC5B,CAAA;AAED,YAAY,EAAE,YAAY,EAAE,CAAA"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structural Drizzle typings used by the system stores.
|
|
3
|
+
*
|
|
4
|
+
* Drizzle's typed `db` carries a heavy dialect-specific generic load
|
|
5
|
+
* (`PgDatabase`, `MySqlDatabase`, `BetterSQLite3Database`, …). To stay
|
|
6
|
+
* dialect-agnostic at the package boundary we accept a `DrizzleLike`
|
|
7
|
+
* surface — runtime calls go through a small handful of methods every
|
|
8
|
+
* builder exposes. Hosts pass their concrete `drizzle(...)` instance and
|
|
9
|
+
* it satisfies this shape structurally.
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
package/package.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@modern-admin/system-drizzle",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Drizzle-backed implementation of Modern Admin system stores.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/modern-admin/modern-admin.git",
|
|
10
|
+
"directory": "packages/system-drizzle"
|
|
11
|
+
},
|
|
12
|
+
"main": "./dist/index.js",
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"default": "./dist/index.js"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"dist",
|
|
22
|
+
"src"
|
|
23
|
+
],
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"registry": "https://registry.npmjs.org",
|
|
26
|
+
"access": "public",
|
|
27
|
+
"main": "./dist/index.js",
|
|
28
|
+
"types": "./dist/index.d.ts",
|
|
29
|
+
"exports": {
|
|
30
|
+
".": {
|
|
31
|
+
"types": "./dist/index.d.ts",
|
|
32
|
+
"default": "./dist/index.js"
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"@modern-admin/core": "0.1.0"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@modern-admin/tsconfig": "0.1.0",
|
|
41
|
+
"@types/bun": "^1.3.13",
|
|
42
|
+
"drizzle-orm": "^0.45.0",
|
|
43
|
+
"typescript": "^6.0.3"
|
|
44
|
+
},
|
|
45
|
+
"peerDependencies": {
|
|
46
|
+
"drizzle-orm": ">=0.45"
|
|
47
|
+
},
|
|
48
|
+
"peerDependenciesMeta": {
|
|
49
|
+
"drizzle-orm": {
|
|
50
|
+
"optional": true
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// @modern-admin/system-drizzle — Drizzle-backed implementations of the
|
|
2
|
+
// runtime system stores defined in `@modern-admin/core/system`.
|
|
3
|
+
//
|
|
4
|
+
// Quick start (Postgres):
|
|
5
|
+
//
|
|
6
|
+
// import { drizzle } from 'drizzle-orm/node-postgres'
|
|
7
|
+
// import * as systemSchema from '@modern-admin/system-drizzle/pg'
|
|
8
|
+
// import { setupDrizzleSystem } from '@modern-admin/system-drizzle'
|
|
9
|
+
//
|
|
10
|
+
// const db = drizzle(client, { schema: { ...mySchema, ...systemSchema } })
|
|
11
|
+
// const system = setupDrizzleSystem(db, systemSchema)
|
|
12
|
+
//
|
|
13
|
+
// new ModernAdmin({
|
|
14
|
+
// databases: [...],
|
|
15
|
+
// plugins: [actionLoggingPlugin({ store: system.logStore })],
|
|
16
|
+
// })
|
|
17
|
+
//
|
|
18
|
+
// To use a different prefix or schema, copy `src/schema/pg.ts` into your
|
|
19
|
+
// project, edit table names, and pass the customised table objects in
|
|
20
|
+
// `setupDrizzleSystem(db, customTables)`.
|
|
21
|
+
|
|
22
|
+
import type { ISystemStores } from '@modern-admin/core'
|
|
23
|
+
import { DrizzleLogStore } from './stores/log-store.js'
|
|
24
|
+
import { DrizzleWebhookStore } from './stores/webhook-store.js'
|
|
25
|
+
import { DrizzleConfigStore } from './stores/config-store.js'
|
|
26
|
+
import { DrizzleHistoryStore } from './stores/history-store.js'
|
|
27
|
+
import { DrizzleAiTaskStore } from './stores/ai-task-store.js'
|
|
28
|
+
import { DrizzleCacheStore } from './stores/cache-store.js'
|
|
29
|
+
import type { DrizzleLike, SystemTables } from './types.js'
|
|
30
|
+
|
|
31
|
+
export interface DrizzleSystem extends ISystemStores {
|
|
32
|
+
logStore: DrizzleLogStore
|
|
33
|
+
webhookStore: DrizzleWebhookStore
|
|
34
|
+
configStore: DrizzleConfigStore
|
|
35
|
+
historyStore: DrizzleHistoryStore
|
|
36
|
+
aiTaskStore: DrizzleAiTaskStore
|
|
37
|
+
cacheStore: DrizzleCacheStore
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Build the full bundle of system stores from a Drizzle client + table
|
|
42
|
+
* objects. The host owns the `db` lifecycle; this just wires tables into
|
|
43
|
+
* thin store classes.
|
|
44
|
+
*/
|
|
45
|
+
export function setupDrizzleSystem(
|
|
46
|
+
db: DrizzleLike,
|
|
47
|
+
tables: SystemTables,
|
|
48
|
+
): DrizzleSystem {
|
|
49
|
+
return {
|
|
50
|
+
logStore: new DrizzleLogStore(db, tables.maLog),
|
|
51
|
+
webhookStore: new DrizzleWebhookStore(db, tables.maWebhook, tables.maWebhookDelivery),
|
|
52
|
+
configStore: new DrizzleConfigStore(db, tables.maConfig),
|
|
53
|
+
historyStore: new DrizzleHistoryStore(db, tables.maHistory),
|
|
54
|
+
aiTaskStore: new DrizzleAiTaskStore(db, tables.maAiTask, tables.maAiTaskEvent),
|
|
55
|
+
cacheStore: new DrizzleCacheStore(db, tables.maCache),
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export { DrizzleLogStore } from './stores/log-store.js'
|
|
60
|
+
export { DrizzleWebhookStore } from './stores/webhook-store.js'
|
|
61
|
+
export { DrizzleConfigStore } from './stores/config-store.js'
|
|
62
|
+
export { DrizzleHistoryStore } from './stores/history-store.js'
|
|
63
|
+
export { DrizzleAiTaskStore } from './stores/ai-task-store.js'
|
|
64
|
+
export { DrizzleCacheStore } from './stores/cache-store.js'
|
|
65
|
+
export type { DrizzleLike, SystemTables } from './types.js'
|