fluxmail 0.4.1 → 0.5.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/README.md +6 -4
- package/dist/accounts/defaultGoogleOAuth.d.ts +4 -0
- package/dist/accounts/defaultGoogleOAuth.d.ts.map +1 -0
- package/dist/accounts/defaultGoogleOAuth.js +7 -0
- package/dist/accounts/defaultGoogleOAuth.js.map +1 -0
- package/dist/accounts/gmailConnection.js +2 -2
- package/dist/accounts/gmailConnection.js.map +1 -1
- package/dist/accounts/googleAuth.d.ts +10 -7
- package/dist/accounts/googleAuth.d.ts.map +1 -1
- package/dist/accounts/googleAuth.js +48 -17
- package/dist/accounts/googleAuth.js.map +1 -1
- package/dist/accounts/microsoftAuth.js +1 -1
- package/dist/accounts/microsoftAuth.js.map +1 -1
- package/dist/accounts/registry.d.ts +9 -8
- package/dist/accounts/registry.d.ts.map +1 -1
- package/dist/accounts/registry.js +166 -96
- package/dist/accounts/registry.js.map +1 -1
- package/dist/auth.d.ts +106 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +452 -0
- package/dist/auth.js.map +1 -0
- package/dist/authorization.d.ts +9 -0
- package/dist/authorization.d.ts.map +1 -0
- package/dist/authorization.js +23 -0
- package/dist/authorization.js.map +1 -0
- package/dist/cli.d.ts +7 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +734 -358
- package/dist/cli.js.map +1 -1
- package/dist/cliInstances.d.ts +37 -0
- package/dist/cliInstances.d.ts.map +1 -0
- package/dist/cliInstances.js +170 -0
- package/dist/cliInstances.js.map +1 -0
- package/dist/config.d.ts +16 -10
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +125 -35
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +8 -4
- package/dist/context.js.map +1 -1
- package/dist/http/admin.d.ts +57 -3
- package/dist/http/admin.d.ts.map +1 -1
- package/dist/http/admin.js +188 -67
- package/dist/http/admin.js.map +1 -1
- package/dist/http/app.d.ts.map +1 -1
- package/dist/http/app.js +78 -54
- package/dist/http/app.js.map +1 -1
- package/dist/http/identity.d.ts +114 -0
- package/dist/http/identity.d.ts.map +1 -0
- package/dist/http/identity.js +931 -0
- package/dist/http/identity.js.map +1 -0
- package/dist/http/operationRoutes.d.ts +8 -0
- package/dist/http/operationRoutes.d.ts.map +1 -0
- package/dist/http/operationRoutes.js +13 -0
- package/dist/http/operationRoutes.js.map +1 -0
- package/dist/http/rest.d.ts +11 -3
- package/dist/http/rest.d.ts.map +1 -1
- package/dist/http/rest.js +138 -66
- package/dist/http/rest.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp/buildServer.d.ts +1 -1
- package/dist/mcp/buildServer.d.ts.map +1 -1
- package/dist/mcp/buildServer.js +14 -19
- package/dist/mcp/buildServer.js.map +1 -1
- package/dist/permissions.d.ts +1 -1
- package/dist/permissions.d.ts.map +1 -1
- package/dist/permissions.js +7 -1
- package/dist/permissions.js.map +1 -1
- package/dist/scheduler/sendScheduler.d.ts +1 -2
- package/dist/scheduler/sendScheduler.d.ts.map +1 -1
- package/dist/scheduler/sendScheduler.js +1 -2
- package/dist/scheduler/sendScheduler.js.map +1 -1
- package/dist/service/emailService.d.ts +8 -16
- package/dist/service/emailService.d.ts.map +1 -1
- package/dist/service/emailService.js +25 -38
- package/dist/service/emailService.js.map +1 -1
- package/dist/storage/adminAudit.d.ts +15 -2
- package/dist/storage/adminAudit.d.ts.map +1 -1
- package/dist/storage/adminAudit.js +22 -27
- package/dist/storage/adminAudit.js.map +1 -1
- package/dist/storage/apiKeys.d.ts +8 -8
- package/dist/storage/apiKeys.d.ts.map +1 -1
- package/dist/storage/apiKeys.js +16 -11
- package/dist/storage/apiKeys.js.map +1 -1
- package/dist/storage/db.d.ts +593 -31
- package/dist/storage/db.d.ts.map +1 -1
- package/dist/storage/db.js +330 -45
- package/dist/storage/db.js.map +1 -1
- package/dist/storage/fileLock.d.ts +7 -0
- package/dist/storage/fileLock.d.ts.map +1 -0
- package/dist/storage/fileLock.js +183 -0
- package/dist/storage/fileLock.js.map +1 -0
- package/dist/storage/gmailConnectionGrants.d.ts +3 -4
- package/dist/storage/gmailConnectionGrants.d.ts.map +1 -1
- package/dist/storage/gmailConnectionGrants.js +6 -6
- package/dist/storage/gmailConnectionGrants.js.map +1 -1
- package/dist/storage/members.d.ts +11 -0
- package/dist/storage/members.d.ts.map +1 -1
- package/dist/storage/members.js +70 -6
- package/dist/storage/members.js.map +1 -1
- package/dist/telemetry.d.ts +14 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +22 -0
- package/dist/telemetry.js.map +1 -1
- package/package.json +6 -5
package/dist/storage/db.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/storage/db.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/storage/db.ts"],"names":[],"mappings":"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"}
|
package/dist/storage/db.js
CHANGED
|
@@ -1,11 +1,38 @@
|
|
|
1
1
|
import Database from 'better-sqlite3';
|
|
2
2
|
import { drizzle } from 'drizzle-orm/better-sqlite3';
|
|
3
3
|
import { index, integer, primaryKey, sqliteTable, text, uniqueIndex } from 'drizzle-orm/sqlite-core';
|
|
4
|
+
import { existsSync, mkdirSync, statSync } from 'node:fs';
|
|
5
|
+
import { randomBytes } from 'node:crypto';
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
import { VERSION } from '../version.js';
|
|
8
|
+
import { withFileLock } from './fileLock.js';
|
|
9
|
+
export const CURRENT_STORE_FORMAT = 1;
|
|
10
|
+
export const MIN_SUPPORTED_STORE_FORMAT = 1;
|
|
11
|
+
export const MAX_SUPPORTED_STORE_FORMAT = CURRENT_STORE_FORMAT;
|
|
12
|
+
export const LEGACY_STORE_FORMAT = 0;
|
|
13
|
+
const MIGRATION_LOCK_TIMEOUT_MS = 5 * 60_000;
|
|
14
|
+
const MIGRATION_LOCK_STALE_MS = 30 * 60_000;
|
|
15
|
+
export class IncompatibleStoreError extends Error {
|
|
16
|
+
compatibility;
|
|
17
|
+
code = 'incompatible_store';
|
|
18
|
+
constructor(compatibility) {
|
|
19
|
+
const supportedFormats = compatibility.minimumSupportedFormat === compatibility.maximumSupportedFormat
|
|
20
|
+
? `format ${compatibility.minimumSupportedFormat}`
|
|
21
|
+
: `formats ${compatibility.minimumSupportedFormat} through ${compatibility.maximumSupportedFormat}`;
|
|
22
|
+
const action = compatibility.storeFormat > compatibility.maximumSupportedFormat
|
|
23
|
+
? 'Update Fluxmail'
|
|
24
|
+
: 'Use a Fluxmail version that supports this store';
|
|
25
|
+
super(`This Fluxmail data uses store format ${compatibility.storeFormat}, but Fluxmail ${compatibility.engineVersion} supports ${supportedFormats}. ${action} before opening ${compatibility.dataDir}. Fluxmail did not change the store.`);
|
|
26
|
+
this.compatibility = compatibility;
|
|
27
|
+
this.name = 'IncompatibleStoreError';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
4
30
|
export const members = sqliteTable('members', {
|
|
5
31
|
id: text('id').primaryKey(),
|
|
6
32
|
name: text('name').notNull(),
|
|
7
33
|
email: text('email'),
|
|
8
34
|
role: text('role').notNull().default('member'),
|
|
35
|
+
status: text('status').notNull().default('pending'),
|
|
9
36
|
createdAt: integer('created_at').notNull(),
|
|
10
37
|
}, (table) => [uniqueIndex('members_email_unique').on(table.email)]);
|
|
11
38
|
export const accounts = sqliteTable('accounts', {
|
|
@@ -15,11 +42,11 @@ export const accounts = sqliteTable('accounts', {
|
|
|
15
42
|
displayName: text('display_name'),
|
|
16
43
|
status: text('status').notNull().default('active'),
|
|
17
44
|
createdAt: integer('created_at').notNull(),
|
|
18
|
-
/**
|
|
19
|
-
|
|
20
|
-
|
|
45
|
+
/** Transitional nulls only exist until a migrated installation claims its first administrator. */
|
|
46
|
+
ownerMemberId: text('member_id').references(() => members.id, { onDelete: 'restrict' }),
|
|
47
|
+
sharedWithAll: integer('shared_with_all', { mode: 'boolean' }).notNull().default(false),
|
|
21
48
|
}, (table) => [uniqueIndex('accounts_provider_email_unique').on(table.provider, table.email)]);
|
|
22
|
-
export const
|
|
49
|
+
export const accountMemberGrants = sqliteTable('account_member_grants', {
|
|
23
50
|
accountId: text('account_id')
|
|
24
51
|
.notNull()
|
|
25
52
|
.references(() => accounts.id, { onDelete: 'cascade' }),
|
|
@@ -42,6 +69,7 @@ export const accountCredentials = sqliteTable('account_credentials', {
|
|
|
42
69
|
/** AES-256-GCM encrypted provider-specific credentials. */
|
|
43
70
|
encryptedCredentials: text('encrypted_credentials').notNull(),
|
|
44
71
|
updatedAt: integer('updated_at').notNull(),
|
|
72
|
+
revision: integer('revision').notNull().default(1),
|
|
45
73
|
});
|
|
46
74
|
export const imapMessages = sqliteTable('imap_messages', {
|
|
47
75
|
id: text('id').primaryKey(),
|
|
@@ -72,8 +100,10 @@ export const apiKeys = sqliteTable('api_keys', {
|
|
|
72
100
|
keyHash: text('key_hash').notNull().unique(),
|
|
73
101
|
createdAt: integer('created_at').notNull(),
|
|
74
102
|
lastUsedAt: integer('last_used_at'),
|
|
75
|
-
/** Member the key was issued to
|
|
76
|
-
memberId: text('member_id')
|
|
103
|
+
/** Member the key was issued to. */
|
|
104
|
+
memberId: text('member_id')
|
|
105
|
+
.notNull()
|
|
106
|
+
.references(() => members.id, { onDelete: 'cascade' }),
|
|
77
107
|
/** Named MCP permission profile, or "custom" when customCapabilities is populated. */
|
|
78
108
|
permissionProfile: text('permission_profile').notNull().default('full'),
|
|
79
109
|
/** JSON array of explicit MCP capabilities for custom policies. */
|
|
@@ -83,12 +113,57 @@ export const apiKeys = sqliteTable('api_keys', {
|
|
|
83
113
|
/** NULL means no extra narrowing; otherwise a JSON array of canonical account ids. */
|
|
84
114
|
accountIds: text('account_ids'),
|
|
85
115
|
});
|
|
116
|
+
export const memberCredentials = sqliteTable('member_credentials', {
|
|
117
|
+
memberId: text('member_id')
|
|
118
|
+
.primaryKey()
|
|
119
|
+
.references(() => members.id, { onDelete: 'cascade' }),
|
|
120
|
+
passwordHash: text('password_hash').notNull(),
|
|
121
|
+
passwordVersion: integer('password_version').notNull().default(1),
|
|
122
|
+
updatedAt: integer('updated_at').notNull(),
|
|
123
|
+
});
|
|
124
|
+
export const memberSessions = sqliteTable('member_sessions', {
|
|
125
|
+
id: text('id').primaryKey(),
|
|
126
|
+
memberId: text('member_id')
|
|
127
|
+
.notNull()
|
|
128
|
+
.references(() => members.id, { onDelete: 'cascade' }),
|
|
129
|
+
tokenHash: text('token_hash').notNull().unique(),
|
|
130
|
+
deviceName: text('device_name').notNull(),
|
|
131
|
+
createdAt: integer('created_at').notNull(),
|
|
132
|
+
expiresAt: integer('expires_at').notNull(),
|
|
133
|
+
lastUsedAt: integer('last_used_at').notNull(),
|
|
134
|
+
revokedAt: integer('revoked_at'),
|
|
135
|
+
}, (table) => [index('member_sessions_member').on(table.memberId), index('member_sessions_expiry').on(table.expiresAt)]);
|
|
136
|
+
export const memberAuthTokens = sqliteTable('member_auth_tokens', {
|
|
137
|
+
id: text('id').primaryKey(),
|
|
138
|
+
memberId: text('member_id')
|
|
139
|
+
.notNull()
|
|
140
|
+
.references(() => members.id, { onDelete: 'cascade' }),
|
|
141
|
+
kind: text('kind').notNull(),
|
|
142
|
+
tokenHash: text('token_hash').notNull().unique(),
|
|
143
|
+
createdByMemberId: text('created_by_member_id').references(() => members.id, { onDelete: 'set null' }),
|
|
144
|
+
createdAt: integer('created_at').notNull(),
|
|
145
|
+
expiresAt: integer('expires_at').notNull(),
|
|
146
|
+
usedAt: integer('used_at'),
|
|
147
|
+
}, (table) => [
|
|
148
|
+
index('member_auth_tokens_member').on(table.memberId),
|
|
149
|
+
index('member_auth_tokens_expiry').on(table.expiresAt),
|
|
150
|
+
]);
|
|
151
|
+
export const authRateLimits = sqliteTable('auth_rate_limits', {
|
|
152
|
+
key: text('key').primaryKey(),
|
|
153
|
+
attempts: integer('attempts').notNull(),
|
|
154
|
+
windowStartedAt: integer('window_started_at').notNull(),
|
|
155
|
+
}, (table) => [index('auth_rate_limits_window').on(table.windowStartedAt)]);
|
|
156
|
+
export const instanceSettings = sqliteTable('instance_settings', {
|
|
157
|
+
key: text('key').primaryKey(),
|
|
158
|
+
value: text('value').notNull(),
|
|
159
|
+
});
|
|
86
160
|
export const adminAuditEvents = sqliteTable('admin_audit_events', {
|
|
87
161
|
id: integer('id').primaryKey({ autoIncrement: true }),
|
|
88
162
|
timestamp: integer('timestamp').notNull(),
|
|
89
163
|
operation: text('operation').notNull(),
|
|
90
164
|
outcome: text('outcome').notNull(),
|
|
91
165
|
actorKeyId: text('actor_key_id'),
|
|
166
|
+
actorSessionId: text('actor_session_id'),
|
|
92
167
|
actorMemberId: text('actor_member_id'),
|
|
93
168
|
resourceType: text('resource_type'),
|
|
94
169
|
resourceId: text('resource_id'),
|
|
@@ -98,10 +173,10 @@ export const gmailConnectionGrants = sqliteTable('gmail_connection_grants', {
|
|
|
98
173
|
/** SHA-256 hex digest. The raw token is printed once and never stored. */
|
|
99
174
|
tokenHash: text('token_hash').primaryKey(),
|
|
100
175
|
scope: text('scope').notNull(),
|
|
101
|
-
|
|
176
|
+
ownerMemberId: text('owner_member_id'),
|
|
102
177
|
reauthorizeAccountId: text('reauthorize_account_id'),
|
|
103
|
-
|
|
104
|
-
|
|
178
|
+
sharedWithAll: integer('shared_with_all', { mode: 'boolean' }),
|
|
179
|
+
grantedMemberIds: text('granted_member_ids'),
|
|
105
180
|
createdAt: integer('created_at').notNull(),
|
|
106
181
|
expiresAt: integer('expires_at').notNull(),
|
|
107
182
|
consumedAt: integer('consumed_at'),
|
|
@@ -152,6 +227,7 @@ CREATE TABLE IF NOT EXISTS members (
|
|
|
152
227
|
name TEXT NOT NULL,
|
|
153
228
|
email TEXT,
|
|
154
229
|
role TEXT NOT NULL DEFAULT 'member',
|
|
230
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
155
231
|
created_at INTEGER NOT NULL
|
|
156
232
|
);
|
|
157
233
|
CREATE UNIQUE INDEX IF NOT EXISTS members_email_unique ON members(email);
|
|
@@ -162,10 +238,10 @@ CREATE TABLE IF NOT EXISTS accounts (
|
|
|
162
238
|
display_name TEXT,
|
|
163
239
|
status TEXT NOT NULL DEFAULT 'active',
|
|
164
240
|
created_at INTEGER NOT NULL,
|
|
165
|
-
member_id TEXT REFERENCES members(id) ON DELETE
|
|
166
|
-
|
|
241
|
+
member_id TEXT REFERENCES members(id) ON DELETE RESTRICT,
|
|
242
|
+
shared_with_all INTEGER NOT NULL DEFAULT 0
|
|
167
243
|
);
|
|
168
|
-
CREATE TABLE IF NOT EXISTS
|
|
244
|
+
CREATE TABLE IF NOT EXISTS account_member_grants (
|
|
169
245
|
account_id TEXT NOT NULL REFERENCES accounts(id) ON DELETE CASCADE,
|
|
170
246
|
member_id TEXT NOT NULL REFERENCES members(id) ON DELETE CASCADE,
|
|
171
247
|
PRIMARY KEY (account_id, member_id)
|
|
@@ -178,7 +254,8 @@ CREATE TABLE IF NOT EXISTS oauth_tokens (
|
|
|
178
254
|
CREATE TABLE IF NOT EXISTS account_credentials (
|
|
179
255
|
account_id TEXT PRIMARY KEY REFERENCES accounts(id) ON DELETE CASCADE,
|
|
180
256
|
encrypted_credentials TEXT NOT NULL,
|
|
181
|
-
updated_at INTEGER NOT NULL
|
|
257
|
+
updated_at INTEGER NOT NULL,
|
|
258
|
+
revision INTEGER NOT NULL DEFAULT 1
|
|
182
259
|
);
|
|
183
260
|
CREATE TABLE IF NOT EXISTS imap_messages (
|
|
184
261
|
id TEXT PRIMARY KEY,
|
|
@@ -209,18 +286,59 @@ CREATE TABLE IF NOT EXISTS api_keys (
|
|
|
209
286
|
key_hash TEXT NOT NULL UNIQUE,
|
|
210
287
|
created_at INTEGER NOT NULL,
|
|
211
288
|
last_used_at INTEGER,
|
|
212
|
-
member_id TEXT REFERENCES members(id) ON DELETE
|
|
289
|
+
member_id TEXT NOT NULL REFERENCES members(id) ON DELETE CASCADE,
|
|
213
290
|
permission_profile TEXT NOT NULL DEFAULT 'full',
|
|
214
291
|
custom_capabilities TEXT,
|
|
215
292
|
supplemental_capabilities TEXT NOT NULL DEFAULT '[]',
|
|
216
293
|
account_ids TEXT
|
|
217
294
|
);
|
|
295
|
+
CREATE TABLE IF NOT EXISTS member_credentials (
|
|
296
|
+
member_id TEXT PRIMARY KEY REFERENCES members(id) ON DELETE CASCADE,
|
|
297
|
+
password_hash TEXT NOT NULL,
|
|
298
|
+
password_version INTEGER NOT NULL DEFAULT 1,
|
|
299
|
+
updated_at INTEGER NOT NULL
|
|
300
|
+
);
|
|
301
|
+
CREATE TABLE IF NOT EXISTS member_sessions (
|
|
302
|
+
id TEXT PRIMARY KEY,
|
|
303
|
+
member_id TEXT NOT NULL REFERENCES members(id) ON DELETE CASCADE,
|
|
304
|
+
token_hash TEXT NOT NULL UNIQUE,
|
|
305
|
+
device_name TEXT NOT NULL,
|
|
306
|
+
created_at INTEGER NOT NULL,
|
|
307
|
+
expires_at INTEGER NOT NULL,
|
|
308
|
+
last_used_at INTEGER NOT NULL,
|
|
309
|
+
revoked_at INTEGER
|
|
310
|
+
);
|
|
311
|
+
CREATE INDEX IF NOT EXISTS member_sessions_member ON member_sessions(member_id);
|
|
312
|
+
CREATE INDEX IF NOT EXISTS member_sessions_expiry ON member_sessions(expires_at);
|
|
313
|
+
CREATE TABLE IF NOT EXISTS member_auth_tokens (
|
|
314
|
+
id TEXT PRIMARY KEY,
|
|
315
|
+
member_id TEXT NOT NULL REFERENCES members(id) ON DELETE CASCADE,
|
|
316
|
+
kind TEXT NOT NULL,
|
|
317
|
+
token_hash TEXT NOT NULL UNIQUE,
|
|
318
|
+
created_by_member_id TEXT REFERENCES members(id) ON DELETE SET NULL,
|
|
319
|
+
created_at INTEGER NOT NULL,
|
|
320
|
+
expires_at INTEGER NOT NULL,
|
|
321
|
+
used_at INTEGER
|
|
322
|
+
);
|
|
323
|
+
CREATE INDEX IF NOT EXISTS member_auth_tokens_member ON member_auth_tokens(member_id);
|
|
324
|
+
CREATE INDEX IF NOT EXISTS member_auth_tokens_expiry ON member_auth_tokens(expires_at);
|
|
325
|
+
CREATE TABLE IF NOT EXISTS auth_rate_limits (
|
|
326
|
+
key TEXT PRIMARY KEY,
|
|
327
|
+
attempts INTEGER NOT NULL,
|
|
328
|
+
window_started_at INTEGER NOT NULL
|
|
329
|
+
);
|
|
330
|
+
CREATE INDEX IF NOT EXISTS auth_rate_limits_window ON auth_rate_limits(window_started_at);
|
|
331
|
+
CREATE TABLE IF NOT EXISTS instance_settings (
|
|
332
|
+
key TEXT PRIMARY KEY,
|
|
333
|
+
value TEXT NOT NULL
|
|
334
|
+
);
|
|
218
335
|
CREATE TABLE IF NOT EXISTS admin_audit_events (
|
|
219
336
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
220
337
|
timestamp INTEGER NOT NULL,
|
|
221
338
|
operation TEXT NOT NULL,
|
|
222
339
|
outcome TEXT NOT NULL,
|
|
223
340
|
actor_key_id TEXT,
|
|
341
|
+
actor_session_id TEXT,
|
|
224
342
|
actor_member_id TEXT,
|
|
225
343
|
resource_type TEXT,
|
|
226
344
|
resource_id TEXT,
|
|
@@ -228,13 +346,23 @@ CREATE TABLE IF NOT EXISTS admin_audit_events (
|
|
|
228
346
|
);
|
|
229
347
|
CREATE INDEX IF NOT EXISTS admin_audit_events_timestamp
|
|
230
348
|
ON admin_audit_events(timestamp);
|
|
349
|
+
CREATE TRIGGER IF NOT EXISTS admin_audit_events_no_update
|
|
350
|
+
BEFORE UPDATE ON admin_audit_events
|
|
351
|
+
BEGIN
|
|
352
|
+
SELECT RAISE(ABORT, 'security audit events are append-only');
|
|
353
|
+
END;
|
|
354
|
+
CREATE TRIGGER IF NOT EXISTS admin_audit_events_no_delete
|
|
355
|
+
BEFORE DELETE ON admin_audit_events
|
|
356
|
+
BEGIN
|
|
357
|
+
SELECT RAISE(ABORT, 'security audit events are append-only');
|
|
358
|
+
END;
|
|
231
359
|
CREATE TABLE IF NOT EXISTS gmail_connection_grants (
|
|
232
360
|
token_hash TEXT PRIMARY KEY,
|
|
233
361
|
scope TEXT NOT NULL,
|
|
234
|
-
|
|
362
|
+
owner_member_id TEXT,
|
|
235
363
|
reauthorize_account_id TEXT,
|
|
236
|
-
|
|
237
|
-
|
|
364
|
+
shared_with_all INTEGER,
|
|
365
|
+
granted_member_ids TEXT,
|
|
238
366
|
created_at INTEGER NOT NULL,
|
|
239
367
|
expires_at INTEGER NOT NULL,
|
|
240
368
|
consumed_at INTEGER
|
|
@@ -281,21 +409,75 @@ CREATE INDEX IF NOT EXISTS rest_idempotency_expires_at
|
|
|
281
409
|
function tableColumns(sqlite, table) {
|
|
282
410
|
return new Set(sqlite.prepare(`PRAGMA table_info(${table})`).all().map((column) => column.name));
|
|
283
411
|
}
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
412
|
+
function readStoreFormat(sqlite) {
|
|
413
|
+
return sqlite.pragma('user_version', { simple: true });
|
|
414
|
+
}
|
|
415
|
+
function compatibilityFor(dbPath, dataDir, storeFormat) {
|
|
416
|
+
return {
|
|
417
|
+
engineVersion: VERSION,
|
|
418
|
+
dataDir,
|
|
419
|
+
dbPath,
|
|
420
|
+
storeFormat,
|
|
421
|
+
minimumSupportedFormat: MIN_SUPPORTED_STORE_FORMAT,
|
|
422
|
+
maximumSupportedFormat: MAX_SUPPORTED_STORE_FORMAT,
|
|
423
|
+
compatible: storeFormat === LEGACY_STORE_FORMAT ||
|
|
424
|
+
(storeFormat >= MIN_SUPPORTED_STORE_FORMAT && storeFormat <= MAX_SUPPORTED_STORE_FORMAT),
|
|
425
|
+
requiresMigration: storeFormat === LEGACY_STORE_FORMAT || storeFormat < CURRENT_STORE_FORMAT,
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
export function inspectStoreCompatibility(dbPath, dataDir = dbPath === ':memory:' ? ':memory:' : path.dirname(dbPath)) {
|
|
429
|
+
if (dbPath === ':memory:' || !existsSync(dbPath) || statSync(dbPath).size === 0) {
|
|
430
|
+
return compatibilityFor(dbPath, dataDir, LEGACY_STORE_FORMAT);
|
|
431
|
+
}
|
|
432
|
+
const sqlite = new Database(dbPath, { readonly: true, fileMustExist: true });
|
|
433
|
+
try {
|
|
434
|
+
return compatibilityFor(dbPath, dataDir, readStoreFormat(sqlite));
|
|
435
|
+
}
|
|
436
|
+
finally {
|
|
437
|
+
sqlite.close();
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
function assertCompatible(compatibility) {
|
|
441
|
+
if (!compatibility.compatible)
|
|
442
|
+
throw new IncompatibleStoreError(compatibility);
|
|
443
|
+
}
|
|
444
|
+
function backupForMigration(sqlite, dbPath, fromFormat, toFormat) {
|
|
445
|
+
if (dbPath === ':memory:' || !existsSync(dbPath) || statSync(dbPath).size === 0)
|
|
446
|
+
return undefined;
|
|
447
|
+
const backupDir = path.join(path.dirname(dbPath), 'backups');
|
|
448
|
+
mkdirSync(backupDir, { recursive: true });
|
|
449
|
+
const stamp = new Date().toISOString().replaceAll(/[:.]/g, '-');
|
|
450
|
+
const databaseName = path.basename(dbPath, path.extname(dbPath)) || 'fluxmail';
|
|
451
|
+
const suffix = randomBytes(4).toString('hex');
|
|
452
|
+
const destination = path.join(backupDir, `${databaseName}-format-${fromFormat}-to-${toFormat}-${stamp}-${process.pid}-${suffix}.db`);
|
|
453
|
+
sqlite.exec(`VACUUM INTO '${destination.replaceAll("'", "''")}'`);
|
|
454
|
+
return destination;
|
|
455
|
+
}
|
|
456
|
+
function syncLegacyCredentialRows(sqlite) {
|
|
289
457
|
// Keep the generic credential row in sync if an older binary updated the
|
|
290
458
|
// legacy Gmail token table before this version reopened the database.
|
|
291
459
|
sqlite.exec(`
|
|
292
|
-
INSERT INTO account_credentials (account_id, encrypted_credentials, updated_at)
|
|
293
|
-
SELECT account_id, encrypted_tokens, updated_at FROM oauth_tokens WHERE true
|
|
460
|
+
INSERT INTO account_credentials (account_id, encrypted_credentials, updated_at, revision)
|
|
461
|
+
SELECT account_id, encrypted_tokens, updated_at, 1 FROM oauth_tokens WHERE true
|
|
294
462
|
ON CONFLICT(account_id) DO UPDATE SET
|
|
295
463
|
encrypted_credentials = excluded.encrypted_credentials,
|
|
296
|
-
updated_at = excluded.updated_at
|
|
464
|
+
updated_at = excluded.updated_at,
|
|
465
|
+
revision = account_credentials.revision + 1
|
|
297
466
|
WHERE excluded.updated_at > account_credentials.updated_at
|
|
298
467
|
`);
|
|
468
|
+
}
|
|
469
|
+
function migrateToFormatOne(sqlite) {
|
|
470
|
+
const existingMemberColumns = tableColumns(sqlite, 'members');
|
|
471
|
+
const existingApiKeyColumns = tableColumns(sqlite, 'api_keys');
|
|
472
|
+
const existingAccountColumns = tableColumns(sqlite, 'accounts');
|
|
473
|
+
const hadLegacyAccountShares = tableColumns(sqlite, 'account_member_shares').size > 0;
|
|
474
|
+
const legacyAuthentication = (existingMemberColumns.size > 0 && !existingMemberColumns.has('status')) ||
|
|
475
|
+
(existingMemberColumns.size === 0 && existingApiKeyColumns.size > 0);
|
|
476
|
+
sqlite.exec(BOOTSTRAP_SQL);
|
|
477
|
+
const credentialCols = tableColumns(sqlite, 'account_credentials');
|
|
478
|
+
if (!credentialCols.has('revision')) {
|
|
479
|
+
sqlite.exec('ALTER TABLE account_credentials ADD COLUMN revision INTEGER NOT NULL DEFAULT 1');
|
|
480
|
+
}
|
|
299
481
|
const scheduledCols = tableColumns(sqlite, 'scheduled_sends');
|
|
300
482
|
if (!scheduledCols.has('claim_token'))
|
|
301
483
|
sqlite.exec('ALTER TABLE scheduled_sends ADD COLUMN claim_token TEXT');
|
|
@@ -310,29 +492,35 @@ export function openDb(dbPath) {
|
|
|
310
492
|
WHERE id = (SELECT id FROM members ORDER BY created_at, id LIMIT 1)
|
|
311
493
|
`);
|
|
312
494
|
}
|
|
495
|
+
if (!memberCols.has('status')) {
|
|
496
|
+
sqlite.exec("ALTER TABLE members ADD COLUMN status TEXT NOT NULL DEFAULT 'pending'");
|
|
497
|
+
}
|
|
313
498
|
if (!tableColumns(sqlite, 'accounts').has('member_id')) {
|
|
314
499
|
sqlite.exec('ALTER TABLE accounts ADD COLUMN member_id TEXT REFERENCES members(id) ON DELETE SET NULL');
|
|
315
500
|
}
|
|
316
501
|
const accountCols = tableColumns(sqlite, 'accounts');
|
|
317
|
-
if (!accountCols.has('
|
|
318
|
-
sqlite.exec('ALTER TABLE accounts ADD COLUMN
|
|
319
|
-
sqlite.exec(
|
|
502
|
+
if (!accountCols.has('shared_with_all')) {
|
|
503
|
+
sqlite.exec('ALTER TABLE accounts ADD COLUMN shared_with_all INTEGER NOT NULL DEFAULT 0');
|
|
504
|
+
sqlite.exec(existingAccountColumns.has('sharing_mode')
|
|
505
|
+
? "UPDATE accounts SET shared_with_all = CASE WHEN sharing_mode = 'all' THEN 1 ELSE 0 END"
|
|
506
|
+
: 'UPDATE accounts SET shared_with_all = CASE WHEN member_id IS NULL THEN 1 ELSE 0 END');
|
|
320
507
|
}
|
|
321
508
|
sqlite.exec(`
|
|
322
|
-
CREATE TABLE IF NOT EXISTS
|
|
509
|
+
CREATE TABLE IF NOT EXISTS account_member_grants (
|
|
323
510
|
account_id TEXT NOT NULL REFERENCES accounts(id) ON DELETE CASCADE,
|
|
324
511
|
member_id TEXT NOT NULL REFERENCES members(id) ON DELETE CASCADE,
|
|
325
512
|
PRIMARY KEY (account_id, member_id)
|
|
326
513
|
)
|
|
327
514
|
`);
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
515
|
+
if (hadLegacyAccountShares) {
|
|
516
|
+
sqlite.exec(`
|
|
517
|
+
INSERT OR IGNORE INTO account_member_grants (account_id, member_id)
|
|
518
|
+
SELECT account_id, member_id FROM account_member_shares
|
|
519
|
+
`);
|
|
520
|
+
sqlite.exec('DROP TABLE account_member_shares');
|
|
521
|
+
}
|
|
522
|
+
if (accountCols.has('sharing_mode'))
|
|
523
|
+
sqlite.exec('ALTER TABLE accounts DROP COLUMN sharing_mode');
|
|
336
524
|
if (!tableColumns(sqlite, 'api_keys').has('member_id')) {
|
|
337
525
|
sqlite.exec('ALTER TABLE api_keys ADD COLUMN member_id TEXT REFERENCES members(id) ON DELETE SET NULL');
|
|
338
526
|
}
|
|
@@ -345,9 +533,10 @@ export function openDb(dbPath) {
|
|
|
345
533
|
}
|
|
346
534
|
if (!apiKeyCols.has('supplemental_capabilities')) {
|
|
347
535
|
sqlite.exec("ALTER TABLE api_keys ADD COLUMN supplemental_capabilities TEXT NOT NULL DEFAULT '[]'");
|
|
348
|
-
// Preserve the account-management authority
|
|
349
|
-
//
|
|
350
|
-
// must still be granted explicitly.
|
|
536
|
+
// Preserve the account-management authority held by legacy administrator
|
|
537
|
+
// keys before administrative capabilities existed. Broader capabilities
|
|
538
|
+
// must still be granted explicitly. The breaking auth migration below
|
|
539
|
+
// revokes these keys before authenticated service access resumes.
|
|
351
540
|
sqlite.exec(`
|
|
352
541
|
UPDATE api_keys
|
|
353
542
|
SET supplemental_capabilities = '["admin.accounts"]'
|
|
@@ -373,13 +562,55 @@ export function openDb(dbPath) {
|
|
|
373
562
|
if (!apiKeyCols.has('account_ids')) {
|
|
374
563
|
sqlite.exec('ALTER TABLE api_keys ADD COLUMN account_ids TEXT');
|
|
375
564
|
}
|
|
565
|
+
if (legacyAuthentication)
|
|
566
|
+
sqlite.exec('DELETE FROM api_keys');
|
|
567
|
+
if (!tableColumns(sqlite, 'admin_audit_events').has('actor_session_id')) {
|
|
568
|
+
sqlite.exec('ALTER TABLE admin_audit_events ADD COLUMN actor_session_id TEXT');
|
|
569
|
+
}
|
|
376
570
|
const grantCols = tableColumns(sqlite, 'gmail_connection_grants');
|
|
377
|
-
if (!grantCols.has('
|
|
378
|
-
sqlite.exec('ALTER TABLE gmail_connection_grants ADD COLUMN
|
|
571
|
+
if (!grantCols.has('owner_member_id')) {
|
|
572
|
+
sqlite.exec('ALTER TABLE gmail_connection_grants ADD COLUMN owner_member_id TEXT');
|
|
573
|
+
if (grantCols.has('member_id')) {
|
|
574
|
+
sqlite.exec('UPDATE gmail_connection_grants SET owner_member_id = member_id');
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
if (!grantCols.has('shared_with_all')) {
|
|
578
|
+
sqlite.exec('ALTER TABLE gmail_connection_grants ADD COLUMN shared_with_all INTEGER');
|
|
579
|
+
if (grantCols.has('sharing_mode')) {
|
|
580
|
+
sqlite.exec("UPDATE gmail_connection_grants SET shared_with_all = CASE sharing_mode WHEN 'all' THEN 1 WHEN 'explicit' THEN 0 ELSE NULL END");
|
|
581
|
+
}
|
|
379
582
|
}
|
|
380
|
-
if (!grantCols.has('
|
|
381
|
-
sqlite.exec('ALTER TABLE gmail_connection_grants ADD COLUMN
|
|
583
|
+
if (!grantCols.has('granted_member_ids')) {
|
|
584
|
+
sqlite.exec('ALTER TABLE gmail_connection_grants ADD COLUMN granted_member_ids TEXT');
|
|
585
|
+
if (grantCols.has('shared_member_ids')) {
|
|
586
|
+
sqlite.exec('UPDATE gmail_connection_grants SET granted_member_ids = shared_member_ids');
|
|
587
|
+
}
|
|
382
588
|
}
|
|
589
|
+
if (grantCols.has('member_id'))
|
|
590
|
+
sqlite.exec('ALTER TABLE gmail_connection_grants DROP COLUMN member_id');
|
|
591
|
+
if (grantCols.has('sharing_mode'))
|
|
592
|
+
sqlite.exec('ALTER TABLE gmail_connection_grants DROP COLUMN sharing_mode');
|
|
593
|
+
if (grantCols.has('shared_member_ids')) {
|
|
594
|
+
sqlite.exec('ALTER TABLE gmail_connection_grants DROP COLUMN shared_member_ids');
|
|
595
|
+
}
|
|
596
|
+
// Login emails are case-insensitive. Keep the earliest duplicate address
|
|
597
|
+
// and require later legacy records to receive a new email before enrollment.
|
|
598
|
+
sqlite.exec(`
|
|
599
|
+
UPDATE members
|
|
600
|
+
SET email = NULL
|
|
601
|
+
WHERE email IS NOT NULL
|
|
602
|
+
AND EXISTS (
|
|
603
|
+
SELECT 1 FROM members AS winner
|
|
604
|
+
WHERE winner.email IS NOT NULL
|
|
605
|
+
AND lower(winner.email) = lower(members.email)
|
|
606
|
+
AND (
|
|
607
|
+
winner.created_at < members.created_at
|
|
608
|
+
OR (winner.created_at = members.created_at AND winner.id < members.id)
|
|
609
|
+
)
|
|
610
|
+
)
|
|
611
|
+
`);
|
|
612
|
+
sqlite.exec('DROP INDEX IF EXISTS members_email_unique');
|
|
613
|
+
sqlite.exec('CREATE UNIQUE INDEX IF NOT EXISTS members_email_unique_ci ON members(lower(email))');
|
|
383
614
|
// Account identity is the mailbox address, regardless of provider. Gmail
|
|
384
615
|
// wins when an older database contains the same address as both Gmail and IMAP.
|
|
385
616
|
sqlite.exec(`
|
|
@@ -403,6 +634,60 @@ export function openDb(dbPath) {
|
|
|
403
634
|
`);
|
|
404
635
|
sqlite.exec('DROP INDEX IF EXISTS accounts_provider_email_unique');
|
|
405
636
|
sqlite.exec('CREATE UNIQUE INDEX IF NOT EXISTS accounts_email_unique_ci ON accounts(lower(email))');
|
|
406
|
-
|
|
637
|
+
sqlite.exec(`
|
|
638
|
+
INSERT INTO instance_settings (key, value) VALUES ('schema_version', '2')
|
|
639
|
+
ON CONFLICT(key) DO UPDATE SET value = excluded.value
|
|
640
|
+
`);
|
|
641
|
+
sqlite.exec(`
|
|
642
|
+
INSERT OR IGNORE INTO instance_settings (key, value) VALUES ('bootstrap_complete', '0')
|
|
643
|
+
`);
|
|
644
|
+
}
|
|
645
|
+
const MIGRATIONS = [{ format: 1, run: migrateToFormatOne }];
|
|
646
|
+
function openCompatibleDb(dbPath, dataDir, options) {
|
|
647
|
+
const sqlite = new Database(dbPath);
|
|
648
|
+
try {
|
|
649
|
+
sqlite.pragma('busy_timeout = 5000');
|
|
650
|
+
sqlite.pragma('foreign_keys = ON');
|
|
651
|
+
const beforeMigration = compatibilityFor(dbPath, dataDir, readStoreFormat(sqlite));
|
|
652
|
+
assertCompatible(beforeMigration);
|
|
653
|
+
if (beforeMigration.requiresMigration && options.backupBeforeMigration !== false) {
|
|
654
|
+
backupForMigration(sqlite, dbPath, beforeMigration.storeFormat, CURRENT_STORE_FORMAT);
|
|
655
|
+
}
|
|
656
|
+
const migrate = sqlite.transaction(() => {
|
|
657
|
+
let storeFormat = readStoreFormat(sqlite);
|
|
658
|
+
assertCompatible(compatibilityFor(dbPath, dataDir, storeFormat));
|
|
659
|
+
for (const migration of MIGRATIONS) {
|
|
660
|
+
if (storeFormat >= migration.format)
|
|
661
|
+
continue;
|
|
662
|
+
migration.run(sqlite);
|
|
663
|
+
sqlite.pragma(`user_version = ${migration.format}`);
|
|
664
|
+
storeFormat = migration.format;
|
|
665
|
+
}
|
|
666
|
+
if (storeFormat !== CURRENT_STORE_FORMAT) {
|
|
667
|
+
throw new Error(`Fluxmail has no migration from store format ${storeFormat} to ${CURRENT_STORE_FORMAT}`);
|
|
668
|
+
}
|
|
669
|
+
syncLegacyCredentialRows(sqlite);
|
|
670
|
+
});
|
|
671
|
+
migrate.immediate();
|
|
672
|
+
sqlite.pragma('journal_mode = WAL');
|
|
673
|
+
return drizzle(sqlite);
|
|
674
|
+
}
|
|
675
|
+
catch (error) {
|
|
676
|
+
sqlite.close();
|
|
677
|
+
throw error;
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
export function openDb(dbPath, options = {}) {
|
|
681
|
+
const dataDir = options.dataDir ?? (dbPath === ':memory:' ? ':memory:' : path.dirname(dbPath));
|
|
682
|
+
const inspected = inspectStoreCompatibility(dbPath, dataDir);
|
|
683
|
+
assertCompatible(inspected);
|
|
684
|
+
if (dbPath === ':memory:' || !inspected.requiresMigration) {
|
|
685
|
+
return openCompatibleDb(dbPath, dataDir, options);
|
|
686
|
+
}
|
|
687
|
+
return withFileLock(`${dbPath}.migration.lock`, {
|
|
688
|
+
timeoutMs: MIGRATION_LOCK_TIMEOUT_MS,
|
|
689
|
+
staleMs: MIGRATION_LOCK_STALE_MS,
|
|
690
|
+
description: `migration of ${dbPath}`,
|
|
691
|
+
}, () => openCompatibleDb(dbPath, dataDir, options));
|
|
407
692
|
}
|
|
408
693
|
//# sourceMappingURL=db.js.map
|
package/dist/storage/db.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/storage/db.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/storage/db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileLock.d.ts","sourceRoot":"","sources":["../../src/storage/fileLock.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAmJD,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CA2ChG"}
|