@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.
- package/LICENSE +21 -0
- package/dist/chunk-ULFOOXEW.js +11 -0
- package/dist/chunk-ULFOOXEW.js.map +1 -0
- package/dist/index.d.ts +58 -0
- package/dist/index.js +588 -0
- package/dist/index.js.map +1 -0
- package/dist/mysql.d.ts +16 -0
- package/dist/mysql.js +9 -0
- package/dist/mysql.js.map +1 -0
- package/dist/postgres.d.ts +3505 -0
- package/dist/postgres.js +374 -0
- package/dist/postgres.js.map +1 -0
- package/dist/schema.d.ts +28 -0
- package/dist/schema.js +13 -0
- package/dist/schema.js.map +1 -0
- package/dist/sqlite.d.ts +16 -0
- package/dist/sqlite.js +9 -0
- package/dist/sqlite.js.map +1 -0
- package/package.json +75 -0
- package/src/index.ts +914 -0
- package/src/mysql.ts +24 -0
- package/src/postgres.ts +487 -0
- package/src/schema.ts +27 -0
- package/src/sqlite.ts +24 -0
package/dist/postgres.js
ADDED
|
@@ -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":[]}
|
package/dist/schema.d.ts
ADDED
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/sqlite.d.ts
ADDED
|
@@ -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
|
+
}
|