@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.
Files changed (46) hide show
  1. package/dist/index.d.ts +30 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +48 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/schema/pg.d.ts +4982 -0
  6. package/dist/schema/pg.d.ts.map +1 -0
  7. package/dist/schema/pg.js +297 -0
  8. package/dist/schema/pg.js.map +1 -0
  9. package/dist/stores/ai-task-store.d.ts +20 -0
  10. package/dist/stores/ai-task-store.d.ts.map +1 -0
  11. package/dist/stores/ai-task-store.js +128 -0
  12. package/dist/stores/ai-task-store.js.map +1 -0
  13. package/dist/stores/cache-store.d.ts +23 -0
  14. package/dist/stores/cache-store.d.ts.map +1 -0
  15. package/dist/stores/cache-store.js +72 -0
  16. package/dist/stores/cache-store.js.map +1 -0
  17. package/dist/stores/config-store.d.ts +13 -0
  18. package/dist/stores/config-store.d.ts.map +1 -0
  19. package/dist/stores/config-store.js +60 -0
  20. package/dist/stores/config-store.js.map +1 -0
  21. package/dist/stores/history-store.d.ts +22 -0
  22. package/dist/stores/history-store.d.ts.map +1 -0
  23. package/dist/stores/history-store.js +62 -0
  24. package/dist/stores/history-store.js.map +1 -0
  25. package/dist/stores/log-store.d.ts +10 -0
  26. package/dist/stores/log-store.d.ts.map +1 -0
  27. package/dist/stores/log-store.js +62 -0
  28. package/dist/stores/log-store.js.map +1 -0
  29. package/dist/stores/webhook-store.d.ts +16 -0
  30. package/dist/stores/webhook-store.d.ts.map +1 -0
  31. package/dist/stores/webhook-store.js +129 -0
  32. package/dist/stores/webhook-store.js.map +1 -0
  33. package/dist/types.d.ts +23 -0
  34. package/dist/types.d.ts.map +1 -0
  35. package/dist/types.js +12 -0
  36. package/dist/types.js.map +1 -0
  37. package/package.json +53 -0
  38. package/src/index.ts +65 -0
  39. package/src/schema/pg.ts +354 -0
  40. package/src/stores/ai-task-store.ts +174 -0
  41. package/src/stores/cache-store.ts +90 -0
  42. package/src/stores/config-store.ts +80 -0
  43. package/src/stores/history-store.ts +98 -0
  44. package/src/stores/log-store.ts +71 -0
  45. package/src/stores/webhook-store.ts +167 -0
  46. package/src/types.ts +27 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pg.d.ts","sourceRoot":"","sources":["../../src/schema/pg.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAOH;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAajB,CAAA;AAEF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAcpB,CAAA;AAEF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBpB,CAAA;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOzB,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBnB,CAAA;AAIF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQjB,CAAA;AAEF,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoBjB,CAAA;AAED,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAapB,CAAA;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuB7B,CAAA;AAED,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BpB,CAAA;AAED,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqBrB,CAAA;AAED,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuBpB,CAAA;AAED,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBzB,CAAA;AAED,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAanB,CAAA;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiBf,CAAA;AAEV,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAA"}
@@ -0,0 +1,297 @@
1
+ /**
2
+ * Drizzle pg-core table objects for the Modern Admin system tables.
3
+ *
4
+ * Mirrors the `prisma/modern-admin.prisma` fragment shipped with
5
+ * `@modern-admin/system-prisma` so the runtime stores see equivalent
6
+ * shapes regardless of which ORM the host picks.
7
+ *
8
+ * Tables fall into two groups:
9
+ *
10
+ * 1. **Better Auth** (`maUser`, `maSession`, `maAccount`,
11
+ * `maVerification`, `maApiKey`) — physical tables that back Better
12
+ * Auth's `user/session/account/verification` and the `apikey`
13
+ * plugin. Better Auth is configured to remap its logical names to
14
+ * these `ma_*` SQL tables; declaring them here means a single CLI
15
+ * run (`bunx @modern-admin/create-modern-admin generate`) wires up
16
+ * everything the runtime needs.
17
+ * 2. **Modern Admin core** (`maRole`, `maLog`, `maWebhook`, …) — the
18
+ * framework's own runtime tables.
19
+ *
20
+ * Usage:
21
+ *
22
+ * import * as systemSchema from '@modern-admin/system-drizzle/pg'
23
+ * export const schema = { ...mySchema, ...systemSchema }
24
+ * export const db = drizzle(client, { schema })
25
+ *
26
+ * Naming: every table has its `ma_*` SQL name baked into the table
27
+ * declaration. To use a different prefix, copy this file into your
28
+ * project, rename, and pass the renamed objects into `setupDrizzleSystem`.
29
+ */
30
+ import { sql } from 'drizzle-orm';
31
+ import { bigint, boolean, index, integer, jsonb, pgTable, text, timestamp, unique, uuid } from 'drizzle-orm/pg-core';
32
+ // ─── Better Auth ──────────────────────────────────────────────────────────
33
+ /**
34
+ * Panel admin (Better Auth `user` table, remapped to `ma_user`).
35
+ *
36
+ * Admin plugin contributes `role`/`banned`/`banReason`/`banExpires`. The
37
+ * `role` column references `ma_role.id` (which doubles as the
38
+ * user-visible name) and is what `ModernAdmin.invoke()` uses to look up
39
+ * the permissions matrix.
40
+ */
41
+ export const maUser = pgTable('ma_user', {
42
+ id: uuid('id').primaryKey().defaultRandom(),
43
+ name: text('name').notNull(),
44
+ email: text('email').notNull().unique(),
45
+ emailVerified: boolean('email_verified').notNull().default(false),
46
+ image: text('image'),
47
+ /** Role id (= name); resolves to a row in `ma_role` for permissions lookup. */
48
+ role: text('role'),
49
+ banned: boolean('banned').default(false),
50
+ banReason: text('ban_reason'),
51
+ banExpires: timestamp('ban_expires', { withTimezone: true }),
52
+ createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
53
+ updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
54
+ });
55
+ export const maSession = pgTable('ma_session', {
56
+ id: uuid('id').primaryKey().defaultRandom(),
57
+ expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),
58
+ token: text('token').notNull().unique(),
59
+ ipAddress: text('ip_address'),
60
+ userAgent: text('user_agent'),
61
+ userId: uuid('user_id')
62
+ .notNull()
63
+ .references(() => maUser.id, { onDelete: 'cascade' }),
64
+ /** Active impersonation source; admin plugin uses this to track
65
+ * "log in as" sessions so audit logs can attribute the real actor. */
66
+ impersonatedBy: text('impersonated_by'),
67
+ createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
68
+ updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
69
+ });
70
+ export const maAccount = pgTable('ma_account', {
71
+ id: uuid('id').primaryKey().defaultRandom(),
72
+ accountId: text('account_id').notNull(),
73
+ providerId: text('provider_id').notNull(),
74
+ userId: uuid('user_id')
75
+ .notNull()
76
+ .references(() => maUser.id, { onDelete: 'cascade' }),
77
+ accessToken: text('access_token'),
78
+ refreshToken: text('refresh_token'),
79
+ idToken: text('id_token'),
80
+ accessTokenExpiresAt: timestamp('access_token_expires_at', { withTimezone: true }),
81
+ refreshTokenExpiresAt: timestamp('refresh_token_expires_at', { withTimezone: true }),
82
+ scope: text('scope'),
83
+ /** Hashed password for the email/password strategy. OAuth/passkey rows
84
+ * leave this null — credentials are encoded in the provider tokens. */
85
+ password: text('password'),
86
+ createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
87
+ updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
88
+ });
89
+ export const maVerification = pgTable('ma_verification', {
90
+ id: uuid('id').primaryKey().defaultRandom(),
91
+ identifier: text('identifier').notNull(),
92
+ value: text('value').notNull(),
93
+ expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),
94
+ createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
95
+ updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
96
+ });
97
+ /**
98
+ * Better Auth api-key plugin storage. `permissions` is a JSON object
99
+ * `{ resourceId: action[] }` consumed by `ModernAdmin.invoke()`'s
100
+ * api-key gate (see also `maRole.permissions` for the role-based gate —
101
+ * both share the same matching helper).
102
+ */
103
+ export const maApiKey = pgTable('ma_apikey', {
104
+ id: uuid('id').primaryKey().defaultRandom(),
105
+ configId: text('config_id').notNull().default('default'),
106
+ name: text('name'),
107
+ start: text('start'),
108
+ prefix: text('prefix'),
109
+ key: text('key').notNull(),
110
+ referenceId: uuid('reference_id')
111
+ .notNull()
112
+ .references(() => maUser.id, { onDelete: 'cascade' }),
113
+ refillInterval: integer('refill_interval'),
114
+ refillAmount: integer('refill_amount'),
115
+ lastRefillAt: timestamp('last_refill_at', { withTimezone: true }),
116
+ enabled: boolean('enabled').notNull().default(true),
117
+ rateLimitEnabled: boolean('rate_limit_enabled').notNull().default(false),
118
+ rateLimitTimeWindow: integer('rate_limit_time_window'),
119
+ rateLimitMax: integer('rate_limit_max'),
120
+ requestCount: integer('request_count').notNull().default(0),
121
+ remaining: integer('remaining'),
122
+ lastRequest: timestamp('last_request', { withTimezone: true }),
123
+ expiresAt: timestamp('expires_at', { withTimezone: true }),
124
+ createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
125
+ updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
126
+ permissions: jsonb('permissions'),
127
+ metadata: jsonb('metadata'),
128
+ });
129
+ // ─── Modern Admin core ────────────────────────────────────────────────────
130
+ /**
131
+ * Configurable role with a permissions matrix.
132
+ *
133
+ * `permissions` shape: `Record<resourceId, action[]>`, where `'*'` is a
134
+ * wildcard for actions or for a resource key (matches every resource).
135
+ * The `id` doubles as the user-visible role name — there is no separate
136
+ * `name` column. Application code supplies `id` on insert (`'admin'`,
137
+ * `'editor'`, …); it's a meaningful business id, not a surrogate UUID.
138
+ *
139
+ * Renames aren't supported (would orphan every panel admin holding the
140
+ * role). The id is referenced from your panel-user table's `role`
141
+ * column — e.g. Better Auth's `ma_user.role`.
142
+ */
143
+ export const maRole = pgTable('ma_role', {
144
+ id: text('id').primaryKey(),
145
+ description: text('description'),
146
+ permissions: jsonb('permissions').notNull().default(sql `'{}'::jsonb`),
147
+ /** Built-in roles are seeded on boot and cannot be deleted via the UI. */
148
+ isBuiltin: boolean('is_builtin').notNull().default(false),
149
+ createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
150
+ updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
151
+ });
152
+ export const maLog = pgTable('ma_log', {
153
+ id: uuid('id').primaryKey().defaultRandom(),
154
+ resourceId: text('resource_id').notNull(),
155
+ action: text('action').notNull(),
156
+ recordId: text('record_id'),
157
+ recordIds: jsonb('record_ids'),
158
+ userId: text('user_id'),
159
+ payload: jsonb('payload'),
160
+ result: jsonb('result'),
161
+ /** Unix-ms timestamp captured at the after-hook. */
162
+ at: bigint('at', { mode: 'number' }).notNull(),
163
+ createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
164
+ }, (t) => ({
165
+ resourceActionIdx: index('ma_log_resource_action_idx').on(t.resourceId, t.action),
166
+ userIdx: index('ma_log_user_idx').on(t.userId),
167
+ createdAtIdx: index('ma_log_created_at_idx').on(t.createdAt),
168
+ }));
169
+ export const maWebhook = pgTable('ma_webhook', {
170
+ id: uuid('id').primaryKey().defaultRandom(),
171
+ name: text('name').notNull(),
172
+ url: text('url').notNull(),
173
+ events: jsonb('events').notNull(),
174
+ resourceId: text('resource_id'),
175
+ enabled: boolean('enabled').notNull().default(true),
176
+ secret: text('secret'),
177
+ headers: jsonb('headers').notNull().default(sql `'{}'::jsonb`),
178
+ filters: jsonb('filters').notNull().default(sql `'{}'::jsonb`),
179
+ payloadFields: jsonb('payload_fields').notNull().default(sql `'[]'::jsonb`),
180
+ createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
181
+ updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
182
+ });
183
+ export const maWebhookDelivery = pgTable('ma_webhook_delivery', {
184
+ id: uuid('id').primaryKey().defaultRandom(),
185
+ webhookId: uuid('webhook_id')
186
+ .notNull()
187
+ .references(() => maWebhook.id, { onDelete: 'cascade' }),
188
+ event: text('event').notNull(),
189
+ payload: jsonb('payload').notNull(),
190
+ status: text('status').notNull(),
191
+ responseStatus: integer('response_status'),
192
+ responseBody: text('response_body'),
193
+ error: text('error'),
194
+ attempt: integer('attempt').notNull().default(1),
195
+ createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
196
+ deliveredAt: timestamp('delivered_at', { withTimezone: true }),
197
+ }, (t) => ({
198
+ webhookCreatedAtIdx: index('ma_webhook_delivery_webhook_created_idx').on(t.webhookId, t.createdAt),
199
+ }));
200
+ export const maConfig = pgTable('ma_config', {
201
+ /**
202
+ * Surrogate primary key. Application code MUST set this with
203
+ * `uuidv7()` from `@modern-admin/core` on insert — Drizzle's
204
+ * `defaultRandom()` produces v4, which the project policy disallows.
205
+ */
206
+ id: uuid('id').primaryKey(),
207
+ scope: text('scope').notNull(),
208
+ /** `null` for global, userId for user, resourceId for resource. */
209
+ scopeId: text('scope_id'),
210
+ key: text('key').notNull(),
211
+ value: jsonb('value'),
212
+ updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
213
+ }, (t) => ({
214
+ // Postgres treats NULL values as distinct in unique constraints by
215
+ // default, so two `(scope='global', scopeId=null, key='foo')` rows
216
+ // would coexist. `nullsNotDistinct()` matches the prisma fragment's
217
+ // `@@unique` semantics and makes the global scope behave like a
218
+ // regular composite key. Drizzle's `nullsNotDistinct` lives on the
219
+ // `unique()` constraint builder, not on `uniqueIndex()`.
220
+ scopeKey: unique('ma_config_scope_scope_id_key_uq')
221
+ .on(t.scope, t.scopeId, t.key)
222
+ .nullsNotDistinct(),
223
+ }));
224
+ export const maHistory = pgTable('ma_history', {
225
+ id: uuid('id').primaryKey().defaultRandom(),
226
+ resourceId: text('resource_id').notNull(),
227
+ recordId: text('record_id').notNull(),
228
+ op: text('op').notNull(),
229
+ userId: text('user_id'),
230
+ snapshot: jsonb('snapshot').notNull(),
231
+ /** State of the record _before_ this revision — fed back into the
232
+ * resource on revert. Nullable for legacy rows. */
233
+ snapshotBefore: jsonb('snapshot_before'),
234
+ createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
235
+ }, (t) => ({
236
+ recordIdx: index('ma_history_record_idx').on(t.resourceId, t.recordId, t.createdAt),
237
+ }));
238
+ export const maAiTask = pgTable('ma_ai_task', {
239
+ id: uuid('id').primaryKey().defaultRandom(),
240
+ kind: text('kind').notNull(),
241
+ resourceId: text('resource_id'),
242
+ recordId: text('record_id'),
243
+ userId: text('user_id'),
244
+ status: text('status').notNull(),
245
+ input: jsonb('input').notNull().default(sql `'{}'::jsonb`),
246
+ output: jsonb('output'),
247
+ error: text('error'),
248
+ progress: integer('progress'),
249
+ createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
250
+ updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
251
+ startedAt: timestamp('started_at', { withTimezone: true }),
252
+ finishedAt: timestamp('finished_at', { withTimezone: true }),
253
+ }, (t) => ({
254
+ kindStatusIdx: index('ma_ai_task_kind_status_idx').on(t.kind, t.status),
255
+ userIdx: index('ma_ai_task_user_idx').on(t.userId),
256
+ recordIdx: index('ma_ai_task_record_idx').on(t.resourceId, t.recordId),
257
+ }));
258
+ export const maAiTaskEvent = pgTable('ma_ai_task_event', {
259
+ id: uuid('id').primaryKey().defaultRandom(),
260
+ taskId: uuid('task_id')
261
+ .notNull()
262
+ .references(() => maAiTask.id, { onDelete: 'cascade' }),
263
+ type: text('type').notNull(),
264
+ data: jsonb('data').notNull().default(sql `'{}'::jsonb`),
265
+ createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
266
+ }, (t) => ({
267
+ taskCreatedIdx: index('ma_ai_task_event_task_created_idx').on(t.taskId, t.createdAt),
268
+ }));
269
+ export const maCache = pgTable('ma_cache', {
270
+ key: text('key').primaryKey(),
271
+ value: jsonb('value'),
272
+ tags: jsonb('tags').notNull().default(sql `'[]'::jsonb`),
273
+ expiresAt: timestamp('expires_at', { withTimezone: true }),
274
+ createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
275
+ updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
276
+ }, (t) => ({
277
+ expiresIdx: index('ma_cache_expires_idx').on(t.expiresAt),
278
+ }));
279
+ export const systemTables = {
280
+ // Better Auth
281
+ maUser,
282
+ maSession,
283
+ maAccount,
284
+ maVerification,
285
+ maApiKey,
286
+ // Modern Admin core
287
+ maRole,
288
+ maLog,
289
+ maWebhook,
290
+ maWebhookDelivery,
291
+ maConfig,
292
+ maHistory,
293
+ maAiTask,
294
+ maAiTaskEvent,
295
+ maCache,
296
+ };
297
+ //# sourceMappingURL=pg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pg.js","sourceRoot":"","sources":["../../src/schema/pg.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type AiTask, type AiTaskEvent, type AiTaskInput, type AiTaskStatus, type IAiTaskStore } from '@modern-admin/core';
2
+ import type { DrizzleLike, SystemTables } from '../types.js';
3
+ export declare class DrizzleAiTaskStore implements IAiTaskStore {
4
+ private readonly db;
5
+ private readonly taskTable;
6
+ private readonly eventTable;
7
+ constructor(db: DrizzleLike, taskTable: SystemTables['maAiTask'], eventTable: SystemTables['maAiTaskEvent']);
8
+ enqueue(input: AiTaskInput): Promise<AiTask>;
9
+ get(id: string): Promise<AiTask | null>;
10
+ list(filter?: Parameters<IAiTaskStore['list']>[0]): Promise<AiTask[]>;
11
+ updateStatus(id: string, patch: {
12
+ status: AiTaskStatus;
13
+ progress?: number | null;
14
+ output?: Record<string, unknown>;
15
+ error?: string;
16
+ }): Promise<AiTask>;
17
+ appendEvent(taskId: string, type: string, data: Record<string, unknown>): Promise<AiTaskEvent>;
18
+ events(taskId: string, sinceId?: string): Promise<AiTaskEvent[]>;
19
+ }
20
+ //# sourceMappingURL=ai-task-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-task-store.d.ts","sourceRoot":"","sources":["../../src/stores/ai-task-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAwD5D,qBAAa,kBAAmB,YAAW,YAAY;IAEnD,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAFV,EAAE,EAAE,WAAW,EACf,SAAS,EAAE,YAAY,CAAC,UAAU,CAAC,EACnC,UAAU,EAAE,YAAY,CAAC,eAAe,CAAC;IAGtD,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAiB5C,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IASvC,IAAI,CAAC,MAAM,GAAE,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAkBzE,YAAY,CAChB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE;QACL,MAAM,EAAE,YAAY,CAAA;QACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QACxB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAChC,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,GACA,OAAO,CAAC,MAAM,CAAC;IA2BZ,WAAW,CACf,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,WAAW,CAAC;IAQjB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CAUvE"}
@@ -0,0 +1,128 @@
1
+ import { uuidv7, } from '@modern-admin/core';
2
+ import { and, asc, desc, eq, inArray } from 'drizzle-orm';
3
+ const rowToTask = (row) => ({
4
+ id: row.id,
5
+ kind: row.kind,
6
+ ...(row.resourceId !== null ? { resourceId: row.resourceId } : {}),
7
+ ...(row.recordId !== null ? { recordId: row.recordId } : {}),
8
+ ...(row.userId !== null ? { userId: row.userId } : {}),
9
+ status: row.status,
10
+ input: row.input ?? {},
11
+ ...(row.output !== null && row.output !== undefined
12
+ ? { output: row.output }
13
+ : {}),
14
+ ...(row.error !== null ? { error: row.error } : {}),
15
+ progress: row.progress,
16
+ createdAt: row.createdAt.toISOString(),
17
+ updatedAt: row.updatedAt.toISOString(),
18
+ ...(row.startedAt !== null ? { startedAt: row.startedAt.toISOString() } : {}),
19
+ ...(row.finishedAt !== null ? { finishedAt: row.finishedAt.toISOString() } : {}),
20
+ });
21
+ const rowToEvent = (row) => ({
22
+ id: row.id,
23
+ taskId: row.taskId,
24
+ type: row.type,
25
+ data: row.data ?? {},
26
+ createdAt: row.createdAt.toISOString(),
27
+ });
28
+ const TERMINAL = ['succeeded', 'failed', 'cancelled'];
29
+ export class DrizzleAiTaskStore {
30
+ constructor(db, taskTable, eventTable) {
31
+ this.db = db;
32
+ this.taskTable = taskTable;
33
+ this.eventTable = eventTable;
34
+ }
35
+ async enqueue(input) {
36
+ const rows = (await this.db
37
+ .insert(this.taskTable)
38
+ .values({
39
+ id: uuidv7(),
40
+ kind: input.kind,
41
+ resourceId: input.resourceId ?? null,
42
+ recordId: input.recordId ?? null,
43
+ userId: input.userId ?? null,
44
+ status: 'pending',
45
+ input: input.input ?? {},
46
+ progress: null,
47
+ })
48
+ .returning());
49
+ return rowToTask(rows[0]);
50
+ }
51
+ async get(id) {
52
+ const rows = (await this.db
53
+ .select()
54
+ .from(this.taskTable)
55
+ .where(eq(this.taskTable.id, id))
56
+ .limit(1));
57
+ return rows[0] ? rowToTask(rows[0]) : null;
58
+ }
59
+ async list(filter = {}) {
60
+ const conds = [];
61
+ if (filter.kind)
62
+ conds.push(eq(this.taskTable.kind, filter.kind));
63
+ if (filter.status) {
64
+ const list = Array.isArray(filter.status) ? filter.status : [filter.status];
65
+ conds.push(inArray(this.taskTable.status, list));
66
+ }
67
+ if (filter.userId)
68
+ conds.push(eq(this.taskTable.userId, filter.userId));
69
+ if (filter.resourceId)
70
+ conds.push(eq(this.taskTable.resourceId, filter.resourceId));
71
+ let q = this.db.select().from(this.taskTable);
72
+ if (conds.length)
73
+ q = q.where(conds.length === 1 ? conds[0] : and(...conds));
74
+ q = q.orderBy(desc(this.taskTable.createdAt));
75
+ if (filter.limit !== undefined)
76
+ q = q.limit(filter.limit);
77
+ const rows = (await q);
78
+ return rows.map(rowToTask);
79
+ }
80
+ async updateStatus(id, patch) {
81
+ const data = { status: patch.status, updatedAt: new Date() };
82
+ if (patch.progress !== undefined)
83
+ data['progress'] = patch.progress;
84
+ if (patch.output !== undefined)
85
+ data['output'] = patch.output;
86
+ if (patch.error !== undefined)
87
+ data['error'] = patch.error;
88
+ if (patch.status === 'running') {
89
+ const existing = (await this.db
90
+ .select()
91
+ .from(this.taskTable)
92
+ .where(eq(this.taskTable.id, id))
93
+ .limit(1));
94
+ if (existing[0] && !existing[0].startedAt)
95
+ data['startedAt'] = new Date();
96
+ }
97
+ if (TERMINAL.includes(patch.status)) {
98
+ data['finishedAt'] = new Date();
99
+ }
100
+ const rows = (await this.db
101
+ .update(this.taskTable)
102
+ .set(data)
103
+ .where(eq(this.taskTable.id, id))
104
+ .returning());
105
+ if (!rows[0])
106
+ throw new Error(`AI task not found: ${id}`);
107
+ return rowToTask(rows[0]);
108
+ }
109
+ async appendEvent(taskId, type, data) {
110
+ const rows = (await this.db
111
+ .insert(this.eventTable)
112
+ .values({ id: uuidv7(), taskId, type, data })
113
+ .returning());
114
+ return rowToEvent(rows[0]);
115
+ }
116
+ async events(taskId, sinceId) {
117
+ const all = (await this.db
118
+ .select()
119
+ .from(this.eventTable)
120
+ .where(eq(this.eventTable.taskId, taskId))
121
+ .orderBy(asc(this.eventTable.createdAt)));
122
+ if (!sinceId)
123
+ return all.map(rowToEvent);
124
+ const idx = all.findIndex((r) => r.id === sinceId);
125
+ return (idx < 0 ? all : all.slice(idx + 1)).map(rowToEvent);
126
+ }
127
+ }
128
+ //# sourceMappingURL=ai-task-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-task-store.js","sourceRoot":"","sources":["../../src/stores/ai-task-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { CacheEntry, ICacheStore } from '@modern-admin/core';
2
+ import type { DrizzleLike, SystemTables } from '../types.js';
3
+ export declare class DrizzleCacheStore implements ICacheStore {
4
+ private readonly db;
5
+ private readonly table;
6
+ constructor(db: DrizzleLike, table: SystemTables['maCache']);
7
+ get(key: string): Promise<CacheEntry | null>;
8
+ set(key: string, value: unknown, options?: {
9
+ ttlMs?: number;
10
+ tags?: string[];
11
+ }): Promise<void>;
12
+ delete(key: string): Promise<void>;
13
+ /**
14
+ * Tag invalidation walks the table because Drizzle's portable `jsonb`
15
+ * column type doesn't support array-contains via this generic adapter.
16
+ * For high-volume caches use a Postgres-specific implementation
17
+ * (`tags text[]` with `ANY(tags)`) or Redis. Correctness > throughput
18
+ * here by design.
19
+ */
20
+ invalidateTags(tags: string[]): Promise<number>;
21
+ prune(): Promise<number>;
22
+ }
23
+ //# sourceMappingURL=cache-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-store.d.ts","sourceRoot":"","sources":["../../src/stores/cache-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEjE,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAoB5D,qBAAa,iBAAkB,YAAW,WAAW;IAEjD,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,EAAE,EAAE,WAAW,EACf,KAAK,EAAE,YAAY,CAAC,SAAS,CAAC;IAG3C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAe5C,GAAG,CACP,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,EACd,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAO,GAChD,OAAO,CAAC,IAAI,CAAC;IAYV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC;;;;;;OAMG;IACG,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAY/C,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;CAO/B"}
@@ -0,0 +1,72 @@
1
+ import { eq, inArray, lt } from 'drizzle-orm';
2
+ const rowToEntry = (row) => ({
3
+ key: row.key,
4
+ value: row.value,
5
+ tags: Array.isArray(row.tags) ? row.tags : [],
6
+ expiresAt: row.expiresAt ? row.expiresAt.toISOString() : null,
7
+ createdAt: row.createdAt.toISOString(),
8
+ updatedAt: row.updatedAt.toISOString(),
9
+ });
10
+ export class DrizzleCacheStore {
11
+ constructor(db, table) {
12
+ this.db = db;
13
+ this.table = table;
14
+ }
15
+ async get(key) {
16
+ const rows = (await this.db
17
+ .select()
18
+ .from(this.table)
19
+ .where(eq(this.table.key, key))
20
+ .limit(1));
21
+ const row = rows[0];
22
+ if (!row)
23
+ return null;
24
+ if (row.expiresAt && row.expiresAt.getTime() < Date.now()) {
25
+ await this.db.delete(this.table).where(eq(this.table.key, key));
26
+ return null;
27
+ }
28
+ return rowToEntry(row);
29
+ }
30
+ async set(key, value, options = {}) {
31
+ const expiresAt = options.ttlMs ? new Date(Date.now() + options.ttlMs) : null;
32
+ const tags = options.tags ?? [];
33
+ await this.db
34
+ .insert(this.table)
35
+ .values({ key, value: value ?? null, tags, expiresAt, updatedAt: new Date() })
36
+ .onConflictDoUpdate({
37
+ target: this.table.key,
38
+ set: { value: value ?? null, tags, expiresAt, updatedAt: new Date() },
39
+ });
40
+ }
41
+ async delete(key) {
42
+ await this.db.delete(this.table).where(eq(this.table.key, key));
43
+ }
44
+ /**
45
+ * Tag invalidation walks the table because Drizzle's portable `jsonb`
46
+ * column type doesn't support array-contains via this generic adapter.
47
+ * For high-volume caches use a Postgres-specific implementation
48
+ * (`tags text[]` with `ANY(tags)`) or Redis. Correctness > throughput
49
+ * here by design.
50
+ */
51
+ async invalidateTags(tags) {
52
+ if (!tags.length)
53
+ return 0;
54
+ const set = new Set(tags);
55
+ const all = (await this.db.select().from(this.table));
56
+ const targetKeys = all
57
+ .filter((r) => Array.isArray(r.tags) && r.tags.some((t) => set.has(t)))
58
+ .map((r) => r.key);
59
+ if (!targetKeys.length)
60
+ return 0;
61
+ await this.db.delete(this.table).where(inArray(this.table.key, targetKeys));
62
+ return targetKeys.length;
63
+ }
64
+ async prune() {
65
+ const expired = (await this.db
66
+ .delete(this.table)
67
+ .where(lt(this.table.expiresAt, new Date()))
68
+ .returning());
69
+ return expired.length;
70
+ }
71
+ }
72
+ //# sourceMappingURL=cache-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-store.js","sourceRoot":"","sources":["../../src/stores/cache-store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAY7C,MAAM,UAAU,GAAG,CAAC,GAAa,EAAc,EAAE,CAAC,CAAC;IACjD,GAAG,EAAE,GAAG,CAAC,GAAG;IACZ,KAAK,EAAE,GAAG,CAAC,KAAK;IAChB,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,IAAiB,CAAC,CAAC,CAAC,EAAE;IAC3D,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;IAC7D,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;IACtC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;CACvC,CAAC,CAAA;AAEF,MAAM,OAAO,iBAAiB;IAC5B,YACmB,EAAe,EACf,KAA8B;QAD9B,OAAE,GAAF,EAAE,CAAa;QACf,UAAK,GAAL,KAAK,CAAyB;IAC9C,CAAC;IAEJ,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE;aACxB,MAAM,EAAE;aACR,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;aAChB,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;aAC9B,KAAK,CAAC,CAAC,CAAC,CAAe,CAAA;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QACnB,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAA;QACrB,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC1D,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;YAC/D,OAAO,IAAI,CAAA;QACb,CAAC;QACD,OAAO,UAAU,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;IAED,KAAK,CAAC,GAAG,CACP,GAAW,EACX,KAAc,EACd,UAA+C,EAAE;QAEjD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAC7E,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAA;QAC/B,MAAM,IAAI,CAAC,EAAE;aACV,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;aAClB,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;aAC7E,kBAAkB,CAAC;YAClB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG;YACtB,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE;SACtE,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;IACjE,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,cAAc,CAAC,IAAc;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,CAAA;QAC1B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAA;QACzB,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAe,CAAA;QACnE,MAAM,UAAU,GAAG,GAAG;aACnB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAK,CAAC,CAAC,IAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aACpF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QACpB,IAAI,CAAC,UAAU,CAAC,MAAM;YAAE,OAAO,CAAC,CAAA;QAChC,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAA;QAC3E,OAAO,UAAU,CAAC,MAAM,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE;aAC3B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;aAClB,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;aAC3C,SAAS,EAAE,CAAe,CAAA;QAC7B,OAAO,OAAO,CAAC,MAAM,CAAA;IACvB,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import { type ConfigEntry, type ConfigScope, type IConfigStore } from '@modern-admin/core';
2
+ import type { DrizzleLike, SystemTables } from '../types.js';
3
+ export declare class DrizzleConfigStore implements IConfigStore {
4
+ private readonly db;
5
+ private readonly table;
6
+ constructor(db: DrizzleLike, table: SystemTables['maConfig']);
7
+ private pkCondition;
8
+ get(scope: ConfigScope, scopeId: string | null, key: string): Promise<unknown>;
9
+ set(scope: ConfigScope, scopeId: string | null, key: string, value: unknown): Promise<void>;
10
+ delete(scope: ConfigScope, scopeId: string | null, key: string): Promise<void>;
11
+ list(scope: ConfigScope, scopeId: string | null): Promise<ConfigEntry[]>;
12
+ }
13
+ //# sourceMappingURL=config-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../../src/stores/config-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAElG,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAkB5D,qBAAa,kBAAmB,YAAW,YAAY;IAEnD,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,EAAE,EAAE,WAAW,EACf,KAAK,EAAE,YAAY,CAAC,UAAU,CAAC;IAGlD,OAAO,CAAC,WAAW;IAOb,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS9E,GAAG,CACP,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,IAAI,CAAC;IAiBV,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9E,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CAW/E"}