@openmdm/drizzle-adapter 0.2.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.
@@ -0,0 +1,374 @@
1
+ // src/postgres.ts
2
+ import {
3
+ pgTable,
4
+ pgEnum,
5
+ text,
6
+ varchar,
7
+ boolean,
8
+ integer,
9
+ bigint,
10
+ timestamp,
11
+ json,
12
+ index,
13
+ uniqueIndex,
14
+ primaryKey
15
+ } from "drizzle-orm/pg-core";
16
+ import { relations } from "drizzle-orm";
17
+ var deviceStatusEnum = pgEnum("mdm_device_status", [
18
+ "pending",
19
+ "enrolled",
20
+ "unenrolled",
21
+ "blocked"
22
+ ]);
23
+ var commandStatusEnum = pgEnum("mdm_command_status", [
24
+ "pending",
25
+ "sent",
26
+ "acknowledged",
27
+ "completed",
28
+ "failed",
29
+ "cancelled"
30
+ ]);
31
+ var pushProviderEnum = pgEnum("mdm_push_provider", [
32
+ "fcm",
33
+ "mqtt",
34
+ "websocket"
35
+ ]);
36
+ var deployTargetTypeEnum = pgEnum("mdm_deploy_target_type", [
37
+ "policy",
38
+ "group"
39
+ ]);
40
+ var deployActionEnum = pgEnum("mdm_deploy_action", [
41
+ "install",
42
+ "update",
43
+ "uninstall"
44
+ ]);
45
+ var mdmDevices = pgTable(
46
+ "mdm_devices",
47
+ {
48
+ id: varchar("id", { length: 36 }).primaryKey(),
49
+ externalId: varchar("external_id", { length: 255 }),
50
+ enrollmentId: varchar("enrollment_id", { length: 255 }).notNull().unique(),
51
+ status: deviceStatusEnum("status").notNull().default("pending"),
52
+ // Device Info
53
+ model: varchar("model", { length: 255 }),
54
+ manufacturer: varchar("manufacturer", { length: 255 }),
55
+ osVersion: varchar("os_version", { length: 50 }),
56
+ serialNumber: varchar("serial_number", { length: 255 }),
57
+ imei: varchar("imei", { length: 50 }),
58
+ macAddress: varchar("mac_address", { length: 50 }),
59
+ androidId: varchar("android_id", { length: 100 }),
60
+ // MDM State
61
+ policyId: varchar("policy_id", { length: 36 }).references(
62
+ () => mdmPolicies.id,
63
+ { onDelete: "set null" }
64
+ ),
65
+ lastHeartbeat: timestamp("last_heartbeat", { withTimezone: true }),
66
+ lastSync: timestamp("last_sync", { withTimezone: true }),
67
+ // Telemetry
68
+ batteryLevel: integer("battery_level"),
69
+ storageUsed: bigint("storage_used", { mode: "number" }),
70
+ storageTotal: bigint("storage_total", { mode: "number" }),
71
+ latitude: varchar("latitude", { length: 50 }),
72
+ longitude: varchar("longitude", { length: 50 }),
73
+ locationTimestamp: timestamp("location_timestamp", { withTimezone: true }),
74
+ // JSON fields
75
+ installedApps: json("installed_apps").$type(),
76
+ tags: json("tags").$type(),
77
+ metadata: json("metadata").$type(),
78
+ // Timestamps
79
+ createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
80
+ updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow()
81
+ },
82
+ (table) => [
83
+ index("mdm_devices_status_idx").on(table.status),
84
+ index("mdm_devices_policy_id_idx").on(table.policyId),
85
+ index("mdm_devices_last_heartbeat_idx").on(table.lastHeartbeat),
86
+ index("mdm_devices_mac_address_idx").on(table.macAddress),
87
+ index("mdm_devices_serial_number_idx").on(table.serialNumber)
88
+ ]
89
+ );
90
+ var mdmPolicies = pgTable(
91
+ "mdm_policies",
92
+ {
93
+ id: varchar("id", { length: 36 }).primaryKey(),
94
+ name: varchar("name", { length: 255 }).notNull(),
95
+ description: text("description"),
96
+ isDefault: boolean("is_default").notNull().default(false),
97
+ settings: json("settings").notNull().$type(),
98
+ createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
99
+ updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow()
100
+ },
101
+ (table) => [
102
+ index("mdm_policies_name_idx").on(table.name),
103
+ index("mdm_policies_is_default_idx").on(table.isDefault)
104
+ ]
105
+ );
106
+ var mdmApplications = pgTable(
107
+ "mdm_applications",
108
+ {
109
+ id: varchar("id", { length: 36 }).primaryKey(),
110
+ name: varchar("name", { length: 255 }).notNull(),
111
+ packageName: varchar("package_name", { length: 255 }).notNull(),
112
+ version: varchar("version", { length: 50 }).notNull(),
113
+ versionCode: integer("version_code").notNull(),
114
+ url: text("url").notNull(),
115
+ hash: varchar("hash", { length: 64 }),
116
+ // SHA-256
117
+ size: bigint("size", { mode: "number" }),
118
+ minSdkVersion: integer("min_sdk_version"),
119
+ // Deployment settings
120
+ showIcon: boolean("show_icon").notNull().default(true),
121
+ runAfterInstall: boolean("run_after_install").notNull().default(false),
122
+ runAtBoot: boolean("run_at_boot").notNull().default(false),
123
+ isSystem: boolean("is_system").notNull().default(false),
124
+ // State
125
+ isActive: boolean("is_active").notNull().default(true),
126
+ // Metadata
127
+ metadata: json("metadata").$type(),
128
+ createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
129
+ updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow()
130
+ },
131
+ (table) => [
132
+ index("mdm_applications_package_name_idx").on(table.packageName),
133
+ uniqueIndex("mdm_applications_package_version_idx").on(
134
+ table.packageName,
135
+ table.version
136
+ ),
137
+ index("mdm_applications_is_active_idx").on(table.isActive)
138
+ ]
139
+ );
140
+ var mdmCommands = pgTable(
141
+ "mdm_commands",
142
+ {
143
+ id: varchar("id", { length: 36 }).primaryKey(),
144
+ deviceId: varchar("device_id", { length: 36 }).notNull().references(() => mdmDevices.id, { onDelete: "cascade" }),
145
+ type: varchar("type", { length: 50 }).notNull(),
146
+ payload: json("payload").$type(),
147
+ status: commandStatusEnum("status").notNull().default("pending"),
148
+ result: json("result").$type(),
149
+ error: text("error"),
150
+ createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
151
+ sentAt: timestamp("sent_at", { withTimezone: true }),
152
+ acknowledgedAt: timestamp("acknowledged_at", { withTimezone: true }),
153
+ completedAt: timestamp("completed_at", { withTimezone: true })
154
+ },
155
+ (table) => [
156
+ index("mdm_commands_device_id_idx").on(table.deviceId),
157
+ index("mdm_commands_status_idx").on(table.status),
158
+ index("mdm_commands_device_status_idx").on(table.deviceId, table.status),
159
+ index("mdm_commands_created_at_idx").on(table.createdAt)
160
+ ]
161
+ );
162
+ var mdmEvents = pgTable(
163
+ "mdm_events",
164
+ {
165
+ id: varchar("id", { length: 36 }).primaryKey(),
166
+ deviceId: varchar("device_id", { length: 36 }).notNull().references(() => mdmDevices.id, { onDelete: "cascade" }),
167
+ type: varchar("type", { length: 100 }).notNull(),
168
+ payload: json("payload").notNull().$type(),
169
+ createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow()
170
+ },
171
+ (table) => [
172
+ index("mdm_events_device_id_idx").on(table.deviceId),
173
+ index("mdm_events_type_idx").on(table.type),
174
+ index("mdm_events_device_type_idx").on(table.deviceId, table.type),
175
+ index("mdm_events_created_at_idx").on(table.createdAt)
176
+ ]
177
+ );
178
+ var mdmGroups = pgTable(
179
+ "mdm_groups",
180
+ {
181
+ id: varchar("id", { length: 36 }).primaryKey(),
182
+ name: varchar("name", { length: 255 }).notNull(),
183
+ description: text("description"),
184
+ policyId: varchar("policy_id", { length: 36 }).references(
185
+ () => mdmPolicies.id,
186
+ { onDelete: "set null" }
187
+ ),
188
+ parentId: varchar("parent_id", { length: 36 }),
189
+ metadata: json("metadata").$type(),
190
+ createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
191
+ updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow()
192
+ },
193
+ (table) => [
194
+ index("mdm_groups_name_idx").on(table.name),
195
+ index("mdm_groups_policy_id_idx").on(table.policyId),
196
+ index("mdm_groups_parent_id_idx").on(table.parentId)
197
+ ]
198
+ );
199
+ var mdmDeviceGroups = pgTable(
200
+ "mdm_device_groups",
201
+ {
202
+ deviceId: varchar("device_id", { length: 36 }).notNull().references(() => mdmDevices.id, { onDelete: "cascade" }),
203
+ groupId: varchar("group_id", { length: 36 }).notNull().references(() => mdmGroups.id, { onDelete: "cascade" }),
204
+ createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow()
205
+ },
206
+ (table) => [
207
+ primaryKey({ columns: [table.deviceId, table.groupId] }),
208
+ index("mdm_device_groups_group_id_idx").on(table.groupId)
209
+ ]
210
+ );
211
+ var mdmPushTokens = pgTable(
212
+ "mdm_push_tokens",
213
+ {
214
+ id: varchar("id", { length: 36 }).primaryKey(),
215
+ deviceId: varchar("device_id", { length: 36 }).notNull().references(() => mdmDevices.id, { onDelete: "cascade" }),
216
+ provider: pushProviderEnum("provider").notNull(),
217
+ token: text("token").notNull(),
218
+ isActive: boolean("is_active").notNull().default(true),
219
+ createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
220
+ updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow()
221
+ },
222
+ (table) => [
223
+ index("mdm_push_tokens_device_id_idx").on(table.deviceId),
224
+ uniqueIndex("mdm_push_tokens_provider_token_idx").on(
225
+ table.provider,
226
+ table.token
227
+ ),
228
+ index("mdm_push_tokens_is_active_idx").on(table.isActive)
229
+ ]
230
+ );
231
+ var mdmAppDeployments = pgTable(
232
+ "mdm_app_deployments",
233
+ {
234
+ id: varchar("id", { length: 36 }).primaryKey(),
235
+ applicationId: varchar("application_id", { length: 36 }).notNull().references(() => mdmApplications.id, { onDelete: "cascade" }),
236
+ targetType: deployTargetTypeEnum("target_type").notNull(),
237
+ targetId: varchar("target_id", { length: 36 }).notNull(),
238
+ action: deployActionEnum("action").notNull().default("install"),
239
+ isRequired: boolean("is_required").notNull().default(false),
240
+ createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow()
241
+ },
242
+ (table) => [
243
+ index("mdm_app_deployments_application_id_idx").on(table.applicationId),
244
+ index("mdm_app_deployments_target_idx").on(table.targetType, table.targetId)
245
+ ]
246
+ );
247
+ var mdmDevicesRelations = relations(mdmDevices, ({ one, many }) => ({
248
+ policy: one(mdmPolicies, {
249
+ fields: [mdmDevices.policyId],
250
+ references: [mdmPolicies.id]
251
+ }),
252
+ commands: many(mdmCommands),
253
+ events: many(mdmEvents),
254
+ pushTokens: many(mdmPushTokens),
255
+ deviceGroups: many(mdmDeviceGroups)
256
+ }));
257
+ var mdmPoliciesRelations = relations(mdmPolicies, ({ many }) => ({
258
+ devices: many(mdmDevices),
259
+ groups: many(mdmGroups)
260
+ }));
261
+ var mdmCommandsRelations = relations(mdmCommands, ({ one }) => ({
262
+ device: one(mdmDevices, {
263
+ fields: [mdmCommands.deviceId],
264
+ references: [mdmDevices.id]
265
+ })
266
+ }));
267
+ var mdmEventsRelations = relations(mdmEvents, ({ one }) => ({
268
+ device: one(mdmDevices, {
269
+ fields: [mdmEvents.deviceId],
270
+ references: [mdmDevices.id]
271
+ })
272
+ }));
273
+ var mdmGroupsRelations = relations(mdmGroups, ({ one, many }) => ({
274
+ policy: one(mdmPolicies, {
275
+ fields: [mdmGroups.policyId],
276
+ references: [mdmPolicies.id]
277
+ }),
278
+ parent: one(mdmGroups, {
279
+ fields: [mdmGroups.parentId],
280
+ references: [mdmGroups.id],
281
+ relationName: "parentChild"
282
+ }),
283
+ children: many(mdmGroups, { relationName: "parentChild" }),
284
+ deviceGroups: many(mdmDeviceGroups)
285
+ }));
286
+ var mdmDeviceGroupsRelations = relations(
287
+ mdmDeviceGroups,
288
+ ({ one }) => ({
289
+ device: one(mdmDevices, {
290
+ fields: [mdmDeviceGroups.deviceId],
291
+ references: [mdmDevices.id]
292
+ }),
293
+ group: one(mdmGroups, {
294
+ fields: [mdmDeviceGroups.groupId],
295
+ references: [mdmGroups.id]
296
+ })
297
+ })
298
+ );
299
+ var mdmPushTokensRelations = relations(mdmPushTokens, ({ one }) => ({
300
+ device: one(mdmDevices, {
301
+ fields: [mdmPushTokens.deviceId],
302
+ references: [mdmDevices.id]
303
+ })
304
+ }));
305
+ var mdmApplicationsRelations = relations(
306
+ mdmApplications,
307
+ ({ many }) => ({
308
+ deployments: many(mdmAppDeployments)
309
+ })
310
+ );
311
+ var mdmAppDeploymentsRelations = relations(
312
+ mdmAppDeployments,
313
+ ({ one }) => ({
314
+ application: one(mdmApplications, {
315
+ fields: [mdmAppDeployments.applicationId],
316
+ references: [mdmApplications.id]
317
+ })
318
+ })
319
+ );
320
+ var mdmSchema = {
321
+ // Tables
322
+ mdmDevices,
323
+ mdmPolicies,
324
+ mdmApplications,
325
+ mdmCommands,
326
+ mdmEvents,
327
+ mdmGroups,
328
+ mdmDeviceGroups,
329
+ mdmPushTokens,
330
+ mdmAppDeployments,
331
+ // Enums
332
+ deviceStatusEnum,
333
+ commandStatusEnum,
334
+ pushProviderEnum,
335
+ deployTargetTypeEnum,
336
+ deployActionEnum,
337
+ // Relations
338
+ mdmDevicesRelations,
339
+ mdmPoliciesRelations,
340
+ mdmCommandsRelations,
341
+ mdmEventsRelations,
342
+ mdmGroupsRelations,
343
+ mdmDeviceGroupsRelations,
344
+ mdmPushTokensRelations,
345
+ mdmApplicationsRelations,
346
+ mdmAppDeploymentsRelations
347
+ };
348
+ export {
349
+ commandStatusEnum,
350
+ deployActionEnum,
351
+ deployTargetTypeEnum,
352
+ deviceStatusEnum,
353
+ mdmAppDeployments,
354
+ mdmAppDeploymentsRelations,
355
+ mdmApplications,
356
+ mdmApplicationsRelations,
357
+ mdmCommands,
358
+ mdmCommandsRelations,
359
+ mdmDeviceGroups,
360
+ mdmDeviceGroupsRelations,
361
+ mdmDevices,
362
+ mdmDevicesRelations,
363
+ mdmEvents,
364
+ mdmEventsRelations,
365
+ mdmGroups,
366
+ mdmGroupsRelations,
367
+ mdmPolicies,
368
+ mdmPoliciesRelations,
369
+ mdmPushTokens,
370
+ mdmPushTokensRelations,
371
+ mdmSchema,
372
+ pushProviderEnum
373
+ };
374
+ //# sourceMappingURL=postgres.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/postgres.ts"],"sourcesContent":["/**\n * OpenMDM Drizzle Schema for PostgreSQL\n *\n * Ready-to-use Drizzle table definitions for PostgreSQL databases.\n *\n * @example\n * ```typescript\n * import { mdmDevices, mdmPolicies } from '@openmdm/drizzle-adapter/postgres';\n * import { drizzle } from 'drizzle-orm/node-postgres';\n *\n * const db = drizzle(pool, { schema: { mdmDevices, mdmPolicies, ... } });\n * ```\n */\n\nimport {\n pgTable,\n pgEnum,\n text,\n varchar,\n boolean,\n integer,\n bigint,\n timestamp,\n json,\n index,\n uniqueIndex,\n primaryKey,\n} from 'drizzle-orm/pg-core';\nimport { relations } from 'drizzle-orm';\n\n// ============================================\n// Enums\n// ============================================\n\nexport const deviceStatusEnum = pgEnum('mdm_device_status', [\n 'pending',\n 'enrolled',\n 'unenrolled',\n 'blocked',\n]);\n\nexport const commandStatusEnum = pgEnum('mdm_command_status', [\n 'pending',\n 'sent',\n 'acknowledged',\n 'completed',\n 'failed',\n 'cancelled',\n]);\n\nexport const pushProviderEnum = pgEnum('mdm_push_provider', [\n 'fcm',\n 'mqtt',\n 'websocket',\n]);\n\nexport const deployTargetTypeEnum = pgEnum('mdm_deploy_target_type', [\n 'policy',\n 'group',\n]);\n\nexport const deployActionEnum = pgEnum('mdm_deploy_action', [\n 'install',\n 'update',\n 'uninstall',\n]);\n\n// ============================================\n// Devices Table\n// ============================================\n\nexport const mdmDevices = pgTable(\n 'mdm_devices',\n {\n id: varchar('id', { length: 36 }).primaryKey(),\n externalId: varchar('external_id', { length: 255 }),\n enrollmentId: varchar('enrollment_id', { length: 255 }).notNull().unique(),\n status: deviceStatusEnum('status').notNull().default('pending'),\n\n // Device Info\n model: varchar('model', { length: 255 }),\n manufacturer: varchar('manufacturer', { length: 255 }),\n osVersion: varchar('os_version', { length: 50 }),\n serialNumber: varchar('serial_number', { length: 255 }),\n imei: varchar('imei', { length: 50 }),\n macAddress: varchar('mac_address', { length: 50 }),\n androidId: varchar('android_id', { length: 100 }),\n\n // MDM State\n policyId: varchar('policy_id', { length: 36 }).references(\n () => mdmPolicies.id,\n { onDelete: 'set null' }\n ),\n lastHeartbeat: timestamp('last_heartbeat', { withTimezone: true }),\n lastSync: timestamp('last_sync', { withTimezone: true }),\n\n // Telemetry\n batteryLevel: integer('battery_level'),\n storageUsed: bigint('storage_used', { mode: 'number' }),\n storageTotal: bigint('storage_total', { mode: 'number' }),\n latitude: varchar('latitude', { length: 50 }),\n longitude: varchar('longitude', { length: 50 }),\n locationTimestamp: timestamp('location_timestamp', { withTimezone: true }),\n\n // JSON fields\n installedApps: json('installed_apps').$type<\n Array<{ packageName: string; version: string; versionCode?: number }>\n >(),\n tags: json('tags').$type<Record<string, string>>(),\n metadata: json('metadata').$type<Record<string, unknown>>(),\n\n // Timestamps\n createdAt: timestamp('created_at', { withTimezone: true })\n .notNull()\n .defaultNow(),\n updatedAt: timestamp('updated_at', { withTimezone: true })\n .notNull()\n .defaultNow(),\n },\n (table) => [\n index('mdm_devices_status_idx').on(table.status),\n index('mdm_devices_policy_id_idx').on(table.policyId),\n index('mdm_devices_last_heartbeat_idx').on(table.lastHeartbeat),\n index('mdm_devices_mac_address_idx').on(table.macAddress),\n index('mdm_devices_serial_number_idx').on(table.serialNumber),\n ]\n);\n\n// ============================================\n// Policies Table\n// ============================================\n\nexport const mdmPolicies = pgTable(\n 'mdm_policies',\n {\n id: varchar('id', { length: 36 }).primaryKey(),\n name: varchar('name', { length: 255 }).notNull(),\n description: text('description'),\n isDefault: boolean('is_default').notNull().default(false),\n settings: json('settings').notNull().$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .notNull()\n .defaultNow(),\n updatedAt: timestamp('updated_at', { withTimezone: true })\n .notNull()\n .defaultNow(),\n },\n (table) => [\n index('mdm_policies_name_idx').on(table.name),\n index('mdm_policies_is_default_idx').on(table.isDefault),\n ]\n);\n\n// ============================================\n// Applications Table\n// ============================================\n\nexport const mdmApplications = pgTable(\n 'mdm_applications',\n {\n id: varchar('id', { length: 36 }).primaryKey(),\n name: varchar('name', { length: 255 }).notNull(),\n packageName: varchar('package_name', { length: 255 }).notNull(),\n version: varchar('version', { length: 50 }).notNull(),\n versionCode: integer('version_code').notNull(),\n url: text('url').notNull(),\n hash: varchar('hash', { length: 64 }), // SHA-256\n size: bigint('size', { mode: 'number' }),\n minSdkVersion: integer('min_sdk_version'),\n\n // Deployment settings\n showIcon: boolean('show_icon').notNull().default(true),\n runAfterInstall: boolean('run_after_install').notNull().default(false),\n runAtBoot: boolean('run_at_boot').notNull().default(false),\n isSystem: boolean('is_system').notNull().default(false),\n\n // State\n isActive: boolean('is_active').notNull().default(true),\n\n // Metadata\n metadata: json('metadata').$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .notNull()\n .defaultNow(),\n updatedAt: timestamp('updated_at', { withTimezone: true })\n .notNull()\n .defaultNow(),\n },\n (table) => [\n index('mdm_applications_package_name_idx').on(table.packageName),\n uniqueIndex('mdm_applications_package_version_idx').on(\n table.packageName,\n table.version\n ),\n index('mdm_applications_is_active_idx').on(table.isActive),\n ]\n);\n\n// ============================================\n// Commands Table\n// ============================================\n\nexport const mdmCommands = pgTable(\n 'mdm_commands',\n {\n id: varchar('id', { length: 36 }).primaryKey(),\n deviceId: varchar('device_id', { length: 36 })\n .notNull()\n .references(() => mdmDevices.id, { onDelete: 'cascade' }),\n type: varchar('type', { length: 50 }).notNull(),\n payload: json('payload').$type<Record<string, unknown>>(),\n status: commandStatusEnum('status').notNull().default('pending'),\n result: json('result').$type<{\n success: boolean;\n message?: string;\n data?: unknown;\n }>(),\n error: text('error'),\n createdAt: timestamp('created_at', { withTimezone: true })\n .notNull()\n .defaultNow(),\n sentAt: timestamp('sent_at', { withTimezone: true }),\n acknowledgedAt: timestamp('acknowledged_at', { withTimezone: true }),\n completedAt: timestamp('completed_at', { withTimezone: true }),\n },\n (table) => [\n index('mdm_commands_device_id_idx').on(table.deviceId),\n index('mdm_commands_status_idx').on(table.status),\n index('mdm_commands_device_status_idx').on(table.deviceId, table.status),\n index('mdm_commands_created_at_idx').on(table.createdAt),\n ]\n);\n\n// ============================================\n// Events Table\n// ============================================\n\nexport const mdmEvents = pgTable(\n 'mdm_events',\n {\n id: varchar('id', { length: 36 }).primaryKey(),\n deviceId: varchar('device_id', { length: 36 })\n .notNull()\n .references(() => mdmDevices.id, { onDelete: 'cascade' }),\n type: varchar('type', { length: 100 }).notNull(),\n payload: json('payload').notNull().$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .notNull()\n .defaultNow(),\n },\n (table) => [\n index('mdm_events_device_id_idx').on(table.deviceId),\n index('mdm_events_type_idx').on(table.type),\n index('mdm_events_device_type_idx').on(table.deviceId, table.type),\n index('mdm_events_created_at_idx').on(table.createdAt),\n ]\n);\n\n// ============================================\n// Groups Table\n// ============================================\n\nexport const mdmGroups = pgTable(\n 'mdm_groups',\n {\n id: varchar('id', { length: 36 }).primaryKey(),\n name: varchar('name', { length: 255 }).notNull(),\n description: text('description'),\n policyId: varchar('policy_id', { length: 36 }).references(\n () => mdmPolicies.id,\n { onDelete: 'set null' }\n ),\n parentId: varchar('parent_id', { length: 36 }),\n metadata: json('metadata').$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .notNull()\n .defaultNow(),\n updatedAt: timestamp('updated_at', { withTimezone: true })\n .notNull()\n .defaultNow(),\n },\n (table) => [\n index('mdm_groups_name_idx').on(table.name),\n index('mdm_groups_policy_id_idx').on(table.policyId),\n index('mdm_groups_parent_id_idx').on(table.parentId),\n ]\n);\n\n// ============================================\n// Device Groups (Many-to-Many)\n// ============================================\n\nexport const mdmDeviceGroups = pgTable(\n 'mdm_device_groups',\n {\n deviceId: varchar('device_id', { length: 36 })\n .notNull()\n .references(() => mdmDevices.id, { onDelete: 'cascade' }),\n groupId: varchar('group_id', { length: 36 })\n .notNull()\n .references(() => mdmGroups.id, { onDelete: 'cascade' }),\n createdAt: timestamp('created_at', { withTimezone: true })\n .notNull()\n .defaultNow(),\n },\n (table) => [\n primaryKey({ columns: [table.deviceId, table.groupId] }),\n index('mdm_device_groups_group_id_idx').on(table.groupId),\n ]\n);\n\n// ============================================\n// Push Tokens Table\n// ============================================\n\nexport const mdmPushTokens = pgTable(\n 'mdm_push_tokens',\n {\n id: varchar('id', { length: 36 }).primaryKey(),\n deviceId: varchar('device_id', { length: 36 })\n .notNull()\n .references(() => mdmDevices.id, { onDelete: 'cascade' }),\n provider: pushProviderEnum('provider').notNull(),\n token: text('token').notNull(),\n isActive: boolean('is_active').notNull().default(true),\n createdAt: timestamp('created_at', { withTimezone: true })\n .notNull()\n .defaultNow(),\n updatedAt: timestamp('updated_at', { withTimezone: true })\n .notNull()\n .defaultNow(),\n },\n (table) => [\n index('mdm_push_tokens_device_id_idx').on(table.deviceId),\n uniqueIndex('mdm_push_tokens_provider_token_idx').on(\n table.provider,\n table.token\n ),\n index('mdm_push_tokens_is_active_idx').on(table.isActive),\n ]\n);\n\n// ============================================\n// App Deployments Table\n// ============================================\n\nexport const mdmAppDeployments = pgTable(\n 'mdm_app_deployments',\n {\n id: varchar('id', { length: 36 }).primaryKey(),\n applicationId: varchar('application_id', { length: 36 })\n .notNull()\n .references(() => mdmApplications.id, { onDelete: 'cascade' }),\n targetType: deployTargetTypeEnum('target_type').notNull(),\n targetId: varchar('target_id', { length: 36 }).notNull(),\n action: deployActionEnum('action').notNull().default('install'),\n isRequired: boolean('is_required').notNull().default(false),\n createdAt: timestamp('created_at', { withTimezone: true })\n .notNull()\n .defaultNow(),\n },\n (table) => [\n index('mdm_app_deployments_application_id_idx').on(table.applicationId),\n index('mdm_app_deployments_target_idx').on(table.targetType, table.targetId),\n ]\n);\n\n// ============================================\n// Relations\n// ============================================\n\nexport const mdmDevicesRelations = relations(mdmDevices, ({ one, many }) => ({\n policy: one(mdmPolicies, {\n fields: [mdmDevices.policyId],\n references: [mdmPolicies.id],\n }),\n commands: many(mdmCommands),\n events: many(mdmEvents),\n pushTokens: many(mdmPushTokens),\n deviceGroups: many(mdmDeviceGroups),\n}));\n\nexport const mdmPoliciesRelations = relations(mdmPolicies, ({ many }) => ({\n devices: many(mdmDevices),\n groups: many(mdmGroups),\n}));\n\nexport const mdmCommandsRelations = relations(mdmCommands, ({ one }) => ({\n device: one(mdmDevices, {\n fields: [mdmCommands.deviceId],\n references: [mdmDevices.id],\n }),\n}));\n\nexport const mdmEventsRelations = relations(mdmEvents, ({ one }) => ({\n device: one(mdmDevices, {\n fields: [mdmEvents.deviceId],\n references: [mdmDevices.id],\n }),\n}));\n\nexport const mdmGroupsRelations = relations(mdmGroups, ({ one, many }) => ({\n policy: one(mdmPolicies, {\n fields: [mdmGroups.policyId],\n references: [mdmPolicies.id],\n }),\n parent: one(mdmGroups, {\n fields: [mdmGroups.parentId],\n references: [mdmGroups.id],\n relationName: 'parentChild',\n }),\n children: many(mdmGroups, { relationName: 'parentChild' }),\n deviceGroups: many(mdmDeviceGroups),\n}));\n\nexport const mdmDeviceGroupsRelations = relations(\n mdmDeviceGroups,\n ({ one }) => ({\n device: one(mdmDevices, {\n fields: [mdmDeviceGroups.deviceId],\n references: [mdmDevices.id],\n }),\n group: one(mdmGroups, {\n fields: [mdmDeviceGroups.groupId],\n references: [mdmGroups.id],\n }),\n })\n);\n\nexport const mdmPushTokensRelations = relations(mdmPushTokens, ({ one }) => ({\n device: one(mdmDevices, {\n fields: [mdmPushTokens.deviceId],\n references: [mdmDevices.id],\n }),\n}));\n\nexport const mdmApplicationsRelations = relations(\n mdmApplications,\n ({ many }) => ({\n deployments: many(mdmAppDeployments),\n })\n);\n\nexport const mdmAppDeploymentsRelations = relations(\n mdmAppDeployments,\n ({ one }) => ({\n application: one(mdmApplications, {\n fields: [mdmAppDeployments.applicationId],\n references: [mdmApplications.id],\n }),\n })\n);\n\n// ============================================\n// Export all tables for easy schema setup\n// ============================================\n\nexport const mdmSchema = {\n // Tables\n mdmDevices,\n mdmPolicies,\n mdmApplications,\n mdmCommands,\n mdmEvents,\n mdmGroups,\n mdmDeviceGroups,\n mdmPushTokens,\n mdmAppDeployments,\n // Enums\n deviceStatusEnum,\n commandStatusEnum,\n pushProviderEnum,\n deployTargetTypeEnum,\n deployActionEnum,\n // Relations\n mdmDevicesRelations,\n mdmPoliciesRelations,\n mdmCommandsRelations,\n mdmEventsRelations,\n mdmGroupsRelations,\n mdmDeviceGroupsRelations,\n mdmPushTokensRelations,\n mdmApplicationsRelations,\n mdmAppDeploymentsRelations,\n};\n\nexport type MDMSchema = typeof mdmSchema;\n"],"mappings":"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","names":[]}
@@ -0,0 +1,28 @@
1
+ export { getColumnNames, getTableNames, mdmSchema } from '@openmdm/core/schema';
2
+
3
+ /**
4
+ * OpenMDM Drizzle Schema
5
+ *
6
+ * This file exports the schema definition for use with schema generators.
7
+ * For ready-to-use Drizzle tables, import from:
8
+ * - @openmdm/drizzle-adapter/postgres
9
+ * - @openmdm/drizzle-adapter/mysql
10
+ * - @openmdm/drizzle-adapter/sqlite
11
+ */
12
+
13
+ /**
14
+ * Table prefix for MDM tables.
15
+ * Can be customized via the adapter options.
16
+ */
17
+ declare const DEFAULT_TABLE_PREFIX = "mdm_";
18
+ /**
19
+ * Schema options for customizing table generation
20
+ */
21
+ interface SchemaOptions {
22
+ /** Prefix for all MDM tables (default: 'mdm_') */
23
+ tablePrefix?: string;
24
+ /** Custom schema name (PostgreSQL only) */
25
+ schema?: string;
26
+ }
27
+
28
+ export { DEFAULT_TABLE_PREFIX, type SchemaOptions };
package/dist/schema.js ADDED
@@ -0,0 +1,13 @@
1
+ import {
2
+ DEFAULT_TABLE_PREFIX,
3
+ getColumnNames,
4
+ getTableNames,
5
+ mdmSchema
6
+ } from "./chunk-ULFOOXEW.js";
7
+ export {
8
+ DEFAULT_TABLE_PREFIX,
9
+ getColumnNames,
10
+ getTableNames,
11
+ mdmSchema
12
+ };
13
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * OpenMDM Drizzle Schema for SQLite
3
+ *
4
+ * Ready-to-use Drizzle table definitions for SQLite databases.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * import { mdmDevices, mdmPolicies } from '@openmdm/drizzle-adapter/sqlite';
9
+ * import { drizzle } from 'drizzle-orm/better-sqlite3';
10
+ *
11
+ * const db = drizzle(sqlite, { schema: { mdmDevices, mdmPolicies, ... } });
12
+ * ```
13
+ */
14
+ declare const placeholder = "SQLite schema coming soon";
15
+
16
+ export { placeholder };
package/dist/sqlite.js ADDED
@@ -0,0 +1,9 @@
1
+ // src/sqlite.ts
2
+ var placeholder = "SQLite schema coming soon";
3
+ throw new Error(
4
+ "@openmdm/drizzle-adapter/sqlite is not yet implemented. Please use @openmdm/drizzle-adapter/postgres for now, or contribute the SQLite schema!"
5
+ );
6
+ export {
7
+ placeholder
8
+ };
9
+ //# sourceMappingURL=sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/sqlite.ts"],"sourcesContent":["/**\n * OpenMDM Drizzle Schema for SQLite\n *\n * Ready-to-use Drizzle table definitions for SQLite databases.\n *\n * @example\n * ```typescript\n * import { mdmDevices, mdmPolicies } from '@openmdm/drizzle-adapter/sqlite';\n * import { drizzle } from 'drizzle-orm/better-sqlite3';\n *\n * const db = drizzle(sqlite, { schema: { mdmDevices, mdmPolicies, ... } });\n * ```\n */\n\n// SQLite schema implementation\n// TODO: Implement SQLite-specific schema\n// For now, users should use the PostgreSQL schema as reference\n\nexport const placeholder = 'SQLite schema coming soon';\n\nthrow new Error(\n '@openmdm/drizzle-adapter/sqlite is not yet implemented. ' +\n 'Please use @openmdm/drizzle-adapter/postgres for now, or contribute the SQLite schema!'\n);\n"],"mappings":";AAkBO,IAAM,cAAc;AAE3B,MAAM,IAAI;AAAA,EACR;AAEF;","names":[]}
package/package.json ADDED
@@ -0,0 +1,75 @@
1
+ {
2
+ "name": "@openmdm/drizzle-adapter",
3
+ "version": "0.2.0",
4
+ "description": "Drizzle ORM adapter for OpenMDM",
5
+ "author": "OpenMDM Contributors",
6
+ "type": "module",
7
+ "sideEffects": false,
8
+ "main": "./dist/index.js",
9
+ "module": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js"
15
+ },
16
+ "./schema": {
17
+ "types": "./dist/schema.d.ts",
18
+ "import": "./dist/schema.js"
19
+ },
20
+ "./postgres": {
21
+ "types": "./dist/postgres.d.ts",
22
+ "import": "./dist/postgres.js"
23
+ },
24
+ "./mysql": {
25
+ "types": "./dist/mysql.d.ts",
26
+ "import": "./dist/mysql.js"
27
+ },
28
+ "./sqlite": {
29
+ "types": "./dist/sqlite.d.ts",
30
+ "import": "./dist/sqlite.js"
31
+ }
32
+ },
33
+ "files": [
34
+ "dist",
35
+ "src"
36
+ ],
37
+ "dependencies": {
38
+ "nanoid": "^5.0.0",
39
+ "@openmdm/core": "0.2.0"
40
+ },
41
+ "devDependencies": {
42
+ "drizzle-orm": "^0.38.0",
43
+ "tsup": "^8.0.0",
44
+ "typescript": "^5.5.0"
45
+ },
46
+ "peerDependencies": {
47
+ "drizzle-orm": ">=0.30.0"
48
+ },
49
+ "keywords": [
50
+ "openmdm",
51
+ "drizzle",
52
+ "orm",
53
+ "adapter",
54
+ "database"
55
+ ],
56
+ "license": "MIT",
57
+ "repository": {
58
+ "type": "git",
59
+ "url": "git+https://github.com/azoila/openmdm.git",
60
+ "directory": "packages/adapters/drizzle"
61
+ },
62
+ "homepage": "https://openmdm.dev",
63
+ "bugs": {
64
+ "url": "https://github.com/azoila/openmdm/issues"
65
+ },
66
+ "publishConfig": {
67
+ "access": "public"
68
+ },
69
+ "scripts": {
70
+ "build": "tsup",
71
+ "dev": "tsup --watch",
72
+ "typecheck": "tsc --noEmit",
73
+ "clean": "rm -rf dist"
74
+ }
75
+ }