@undefineds.co/xpod 0.3.31 → 0.3.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/auth/AuthContext.d.ts +3 -2
- package/dist/api/auth/AuthContext.js +2 -1
- package/dist/api/auth/AuthContext.js.map +1 -1
- package/dist/api/auth/ClientCredentialsAuthenticator.d.ts +2 -12
- package/dist/api/auth/ClientCredentialsAuthenticator.js +4 -4
- package/dist/api/auth/ClientCredentialsAuthenticator.js.map +1 -1
- package/dist/api/auth/ServiceTokenAuthenticator.d.ts +2 -2
- package/dist/api/auth/ServiceTokenAuthenticator.js.map +1 -1
- package/dist/api/chatkit/pod-store.d.ts +3 -0
- package/dist/api/chatkit/pod-store.js +93 -59
- package/dist/api/chatkit/pod-store.js.map +1 -1
- package/dist/api/chatkit/schema.d.ts +5 -6
- package/dist/api/container/business-token.d.ts +1 -1
- package/dist/api/container/business-token.js +5 -1
- package/dist/api/container/business-token.js.map +1 -1
- package/dist/api/container/common.js +14 -10
- package/dist/api/container/common.js.map +1 -1
- package/dist/api/container/routes.js +16 -3
- package/dist/api/container/routes.js.map +1 -1
- package/dist/api/container/types.d.ts +2 -4
- package/dist/api/container/types.js.map +1 -1
- package/dist/api/handlers/ChatHandler.d.ts +1 -1
- package/dist/api/handlers/ChatHandler.js +1 -1
- package/dist/api/handlers/ChatHandler.js.map +1 -1
- package/dist/api/handlers/EdgeNodeSignalHandler.js +3 -1
- package/dist/api/handlers/EdgeNodeSignalHandler.js.map +1 -1
- package/dist/api/handlers/PodManagementHandler.d.ts +2 -0
- package/dist/api/handlers/PodManagementHandler.js +114 -12
- package/dist/api/handlers/PodManagementHandler.js.map +1 -1
- package/dist/api/handlers/ProvisionHandler.d.ts +27 -0
- package/dist/api/handlers/ProvisionHandler.js +339 -32
- package/dist/api/handlers/ProvisionHandler.js.map +1 -1
- package/dist/api/handlers/QuotaHandler.js +0 -12
- package/dist/api/handlers/QuotaHandler.js.map +1 -1
- package/dist/api/handlers/index.d.ts +0 -1
- package/dist/api/handlers/index.js +0 -1
- package/dist/api/handlers/index.js.map +1 -1
- package/dist/api/matrix/PodMatrixStore.js +26 -21
- package/dist/api/matrix/PodMatrixStore.js.map +1 -1
- package/dist/api/runs/InngestRunExecutionBackend.d.ts +2 -2
- package/dist/api/runs/schema.d.ts +5 -7
- package/dist/api/runs/store.js +6 -4
- package/dist/api/runs/store.js.map +1 -1
- package/dist/api/runtime.js +3 -3
- package/dist/api/runtime.js.map +1 -1
- package/dist/api/tasks/InngestTaskScheduler.d.ts +4 -4
- package/dist/api/tasks/schema.d.ts +17 -13
- package/dist/api/tasks/schema.js +7 -2
- package/dist/api/tasks/schema.js.map +1 -1
- package/dist/api/tasks/store.js +1 -2
- package/dist/api/tasks/store.js.map +1 -1
- package/dist/components/context.jsonld +12 -0
- package/dist/edge/EdgeNodeAgent.d.ts +1 -1
- package/dist/edge/EdgeNodeAgent.js +1 -1
- package/dist/edge/EdgeNodeAgent.js.map +1 -1
- package/dist/edge/EdgeNodeDnsCoordinator.d.ts +1 -0
- package/dist/edge/EdgeNodeDnsCoordinator.js +9 -3
- package/dist/edge/EdgeNodeDnsCoordinator.js.map +1 -1
- package/dist/edge/EdgeNodeDnsCoordinator.jsonld +4 -0
- package/dist/edge/EdgeNodeHealthProbeService.d.ts +3 -0
- package/dist/edge/EdgeNodeHealthProbeService.js +22 -2
- package/dist/edge/EdgeNodeHealthProbeService.js.map +1 -1
- package/dist/edge/EdgeNodeHealthProbeService.jsonld +12 -0
- package/dist/http/ClusterIngressRouter.js +6 -3
- package/dist/http/ClusterIngressRouter.js.map +1 -1
- package/dist/http/ClusterWebSocketConfigurator.js +6 -2
- package/dist/http/ClusterWebSocketConfigurator.js.map +1 -1
- package/dist/http/EdgeNodeDirectDebugHttpHandler.d.ts +2 -0
- package/dist/http/EdgeNodeDirectDebugHttpHandler.js +18 -3
- package/dist/http/EdgeNodeDirectDebugHttpHandler.js.map +1 -1
- package/dist/http/EdgeNodeDirectDebugHttpHandler.jsonld +8 -0
- package/dist/http/EdgeNodeProxyHttpHandler.js +6 -2
- package/dist/http/EdgeNodeProxyHttpHandler.js.map +1 -1
- package/dist/http/cluster/PodMigrationHttpHandler.d.ts +2 -2
- package/dist/http/cluster/PodMigrationHttpHandler.js +2 -2
- package/dist/http/cluster/PodMigrationHttpHandler.js.map +1 -1
- package/dist/http/quota/QuotaAdminHttpHandler.js +27 -21
- package/dist/http/quota/QuotaAdminHttpHandler.js.map +1 -1
- package/dist/http/search/SearchHttpHandler.js +2 -2
- package/dist/http/search/SearchHttpHandler.js.map +1 -1
- package/dist/identity/drizzle/AccountRepository.d.ts +4 -22
- package/dist/identity/drizzle/AccountRepository.js +9 -113
- package/dist/identity/drizzle/AccountRepository.js.map +1 -1
- package/dist/identity/drizzle/AccountRoleRepository.d.ts +5 -5
- package/dist/identity/drizzle/AccountRoleRepository.js +204 -97
- package/dist/identity/drizzle/AccountRoleRepository.js.map +1 -1
- package/dist/identity/drizzle/DdnsRepository.d.ts +5 -20
- package/dist/identity/drizzle/DdnsRepository.js +13 -49
- package/dist/identity/drizzle/DdnsRepository.js.map +1 -1
- package/dist/identity/drizzle/EdgeNodeRepository.d.ts +13 -6
- package/dist/identity/drizzle/EdgeNodeRepository.js +167 -66
- package/dist/identity/drizzle/EdgeNodeRepository.js.map +1 -1
- package/dist/identity/drizzle/PodLookupRepository.d.ts +7 -36
- package/dist/identity/drizzle/PodLookupRepository.js +103 -126
- package/dist/identity/drizzle/PodLookupRepository.js.map +1 -1
- package/dist/identity/drizzle/ServiceTokenRepository.d.ts +13 -1
- package/dist/identity/drizzle/ServiceTokenRepository.js +7 -0
- package/dist/identity/drizzle/ServiceTokenRepository.js.map +1 -1
- package/dist/identity/drizzle/db.d.ts +2 -1
- package/dist/identity/drizzle/db.js +173 -297
- package/dist/identity/drizzle/db.js.map +1 -1
- package/dist/identity/drizzle/schema.pg.d.ts +3 -11
- package/dist/identity/drizzle/schema.pg.js +10 -45
- package/dist/identity/drizzle/schema.pg.js.map +1 -1
- package/dist/identity/drizzle/schema.sqlite.d.ts +88 -531
- package/dist/identity/drizzle/schema.sqlite.js +13 -46
- package/dist/identity/drizzle/schema.sqlite.js.map +1 -1
- package/dist/identity/oidc/ScopedPickWebIdHandler.d.ts +3 -0
- package/dist/identity/oidc/ScopedPickWebIdHandler.js +18 -6
- package/dist/identity/oidc/ScopedPickWebIdHandler.js.map +1 -1
- package/dist/identity/oidc/ScopedPickWebIdHandler.jsonld +22 -0
- package/dist/provision/ProvisionCodeCodec.js +10 -1
- package/dist/provision/ProvisionCodeCodec.js.map +1 -1
- package/dist/provision/ProvisionPodCreator.d.ts +8 -2
- package/dist/provision/ProvisionPodCreator.js +134 -41
- package/dist/provision/ProvisionPodCreator.js.map +1 -1
- package/dist/provision/ProvisionPodCreator.jsonld +38 -3
- package/dist/quota/DrizzleQuotaService.d.ts +0 -4
- package/dist/quota/DrizzleQuotaService.js +1 -21
- package/dist/quota/DrizzleQuotaService.js.map +1 -1
- package/dist/quota/DrizzleQuotaService.jsonld +0 -16
- package/dist/quota/NoopQuotaService.d.ts +0 -4
- package/dist/quota/NoopQuotaService.js +0 -8
- package/dist/quota/NoopQuotaService.js.map +1 -1
- package/dist/quota/NoopQuotaService.jsonld +0 -16
- package/dist/quota/QuotaService.d.ts +0 -4
- package/dist/quota/QuotaService.js.map +1 -1
- package/dist/quota/QuotaService.jsonld +0 -16
- package/dist/service/EdgeNodeSignalClient.d.ts +0 -2
- package/dist/service/EdgeNodeSignalClient.js +0 -4
- package/dist/service/EdgeNodeSignalClient.js.map +1 -1
- package/dist/service/PodMigrationService.d.ts +2 -2
- package/dist/service/PodMigrationService.js +4 -4
- package/dist/service/PodMigrationService.js.map +1 -1
- package/dist/setup/LocalSetupServiceTokenRepository.d.ts +22 -0
- package/dist/setup/LocalSetupServiceTokenRepository.js +68 -0
- package/dist/setup/LocalSetupServiceTokenRepository.js.map +1 -0
- package/dist/storage/quota/PerAccountQuotaStrategy.js +2 -2
- package/dist/storage/quota/PerAccountQuotaStrategy.js.map +1 -1
- package/dist/storage/quota/UsageRepository.d.ts +10 -32
- package/dist/storage/quota/UsageRepository.js +84 -281
- package/dist/storage/quota/UsageRepository.js.map +1 -1
- package/dist/storage/vector/VectorIndexingListener.js +2 -2
- package/dist/storage/vector/VectorIndexingListener.js.map +1 -1
- package/dist/subdomain/SubdomainService.d.ts +1 -1
- package/dist/subdomain/SubdomainService.js +1 -1
- package/dist/subdomain/SubdomainService.js.map +1 -1
- package/dist/subdomain/SubdomainService.jsonld +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/exact-records.d.ts +21 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/exact-records.d.ts.map +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/exact-records.js +85 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/exact-records.js.map +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/default-id-template.d.ts +10 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/default-id-template.d.ts.map +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/default-id-template.js +365 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/default-id-template.js.map +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/index.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/index.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/index.js +3 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/index.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/insert-query-builder.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/insert-query-builder.js +5 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/insert-query-builder.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/repository.d.ts +2 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/repository.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/repository.js +2 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/repository.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-reference.d.ts +18 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-reference.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-reference.js +234 -10
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-reference.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/pod-table.d.ts +13 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/pod-table.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/pod-table.js +19 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/pod-table.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/exact-records.d.ts +21 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/exact-records.d.ts.map +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/exact-records.js +78 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/exact-records.js.map +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/default-id-template.d.ts +10 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/default-id-template.d.ts.map +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/default-id-template.js +362 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/default-id-template.js.map +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/index.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/index.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/index.js +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/index.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/insert-query-builder.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/insert-query-builder.js +5 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/insert-query-builder.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/repository.d.ts +2 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/repository.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/repository.js +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/repository.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-reference.d.ts +18 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-reference.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-reference.js +225 -10
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-reference.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/pod-table.d.ts +13 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/pod-table.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/pod-table.js +19 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/pod-table.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/index.d.ts +5 -4
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/index.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/index.js +4 -3
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/index.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/index.d.ts +5 -4
- package/node_modules/@undefineds.co/drizzle-solid/dist/index.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/index.js +20 -3
- package/node_modules/@undefineds.co/drizzle-solid/dist/index.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/package.json +1 -1
- package/package.json +3 -3
- package/dist/api/handlers/ApiKeyHandler.d.ts +0 -15
- package/dist/api/handlers/ApiKeyHandler.js +0 -153
- package/dist/api/handlers/ApiKeyHandler.js.map +0 -1
- package/dist/api/store/DrizzleClientCredentialsStore.d.ts +0 -51
- package/dist/api/store/DrizzleClientCredentialsStore.js +0 -115
- package/dist/api/store/DrizzleClientCredentialsStore.js.map +0 -1
|
@@ -32,10 +32,12 @@ exports.closeAllIdentityConnections = closeAllIdentityConnections;
|
|
|
32
32
|
exports.isDatabaseSqlite = isDatabaseSqlite;
|
|
33
33
|
exports.executeQuery = executeQuery;
|
|
34
34
|
exports.executeStatement = executeStatement;
|
|
35
|
+
exports.ensureCloudClusterTables = ensureCloudClusterTables;
|
|
35
36
|
exports.toDbTimestamp = toDbTimestamp;
|
|
36
37
|
exports.fromDbTimestamp = fromDbTimestamp;
|
|
37
38
|
const pg_1 = require("pg");
|
|
38
39
|
const node_postgres_1 = require("drizzle-orm/node-postgres");
|
|
40
|
+
const drizzle_orm_1 = require("drizzle-orm");
|
|
39
41
|
const pgSchema = __importStar(require("./schema.pg"));
|
|
40
42
|
const sqliteSchema = __importStar(require("./schema.sqlite"));
|
|
41
43
|
const PostgresPoolManager_1 = require("../../storage/database/PostgresPoolManager");
|
|
@@ -46,13 +48,14 @@ const SqliteRuntime_1 = require("../../storage/SqliteRuntime");
|
|
|
46
48
|
*
|
|
47
49
|
* @example
|
|
48
50
|
* const schema = getSchema(db);
|
|
49
|
-
* await db.select().from(schema.
|
|
51
|
+
* await db.select().from(schema.usage).where(eq(schema.usage.scopeId, id));
|
|
50
52
|
*/
|
|
51
53
|
function getSchema(db) {
|
|
52
54
|
return isDatabaseSqlite(db) ? sqliteSchema : pgSchema;
|
|
53
55
|
}
|
|
54
56
|
const dbCache = new Map();
|
|
55
57
|
const dbInitPromises = new WeakMap();
|
|
58
|
+
const cloudClusterInitPromises = new WeakMap();
|
|
56
59
|
const JSON_OIDS = [114, 3802];
|
|
57
60
|
for (const oid of JSON_OIDS) {
|
|
58
61
|
// Explicitly return raw string to avoid "Type Conflict" with CSS
|
|
@@ -194,6 +197,149 @@ async function executeStatement(db, query) {
|
|
|
194
197
|
// PostgreSQL: db.execute() works for statements too
|
|
195
198
|
await db.execute(query);
|
|
196
199
|
}
|
|
200
|
+
async function ensureCloudClusterTables(db) {
|
|
201
|
+
await ensureDatabaseReady(db);
|
|
202
|
+
if (db && typeof db === 'object') {
|
|
203
|
+
const cached = cloudClusterInitPromises.get(db);
|
|
204
|
+
if (cached) {
|
|
205
|
+
await cached;
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
const initPromise = doEnsureCloudClusterTables(db).catch((error) => {
|
|
209
|
+
cloudClusterInitPromises.delete(db);
|
|
210
|
+
throw error;
|
|
211
|
+
});
|
|
212
|
+
cloudClusterInitPromises.set(db, initPromise);
|
|
213
|
+
await initPromise;
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
await doEnsureCloudClusterTables(db);
|
|
217
|
+
}
|
|
218
|
+
async function doEnsureCloudClusterTables(db) {
|
|
219
|
+
if (isDatabaseSqlite(db)) {
|
|
220
|
+
db.run((0, drizzle_orm_1.sql) `
|
|
221
|
+
CREATE TABLE IF NOT EXISTS cluster_ddns_record (
|
|
222
|
+
subdomain TEXT PRIMARY KEY,
|
|
223
|
+
domain TEXT NOT NULL,
|
|
224
|
+
ip_address TEXT,
|
|
225
|
+
ipv6_address TEXT,
|
|
226
|
+
record_type TEXT DEFAULT 'A',
|
|
227
|
+
node_id TEXT,
|
|
228
|
+
username TEXT,
|
|
229
|
+
status TEXT DEFAULT 'active',
|
|
230
|
+
banned_reason TEXT,
|
|
231
|
+
ttl INTEGER DEFAULT 60,
|
|
232
|
+
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
233
|
+
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
234
|
+
)
|
|
235
|
+
`);
|
|
236
|
+
db.run((0, drizzle_orm_1.sql) `
|
|
237
|
+
CREATE TABLE IF NOT EXISTS cluster_service_token (
|
|
238
|
+
id TEXT PRIMARY KEY,
|
|
239
|
+
token_hash TEXT NOT NULL UNIQUE,
|
|
240
|
+
service_type TEXT NOT NULL,
|
|
241
|
+
service_id TEXT NOT NULL,
|
|
242
|
+
scopes TEXT NOT NULL,
|
|
243
|
+
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
244
|
+
expires_at INTEGER
|
|
245
|
+
)
|
|
246
|
+
`);
|
|
247
|
+
db.run((0, drizzle_orm_1.sql) `
|
|
248
|
+
CREATE TABLE IF NOT EXISTS cluster_node (
|
|
249
|
+
id TEXT PRIMARY KEY,
|
|
250
|
+
display_name TEXT,
|
|
251
|
+
token_hash TEXT NOT NULL,
|
|
252
|
+
node_type TEXT DEFAULT 'edge',
|
|
253
|
+
subdomain TEXT UNIQUE,
|
|
254
|
+
access_mode TEXT,
|
|
255
|
+
ipv4 TEXT,
|
|
256
|
+
public_port INTEGER,
|
|
257
|
+
public_url TEXT,
|
|
258
|
+
service_token_hash TEXT,
|
|
259
|
+
provision_code_hash TEXT,
|
|
260
|
+
internal_ip TEXT,
|
|
261
|
+
internal_port INTEGER,
|
|
262
|
+
hostname TEXT,
|
|
263
|
+
ipv6 TEXT,
|
|
264
|
+
version TEXT,
|
|
265
|
+
capabilities TEXT,
|
|
266
|
+
metadata TEXT,
|
|
267
|
+
pod_base_urls TEXT,
|
|
268
|
+
connectivity_status TEXT DEFAULT 'unknown',
|
|
269
|
+
last_connectivity_check INTEGER,
|
|
270
|
+
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
271
|
+
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
272
|
+
last_seen INTEGER
|
|
273
|
+
)
|
|
274
|
+
`);
|
|
275
|
+
db.run((0, drizzle_orm_1.sql) `CREATE INDEX IF NOT EXISTS idx_cluster_ddns_record_domain ON cluster_ddns_record(domain)`);
|
|
276
|
+
db.run((0, drizzle_orm_1.sql) `CREATE INDEX IF NOT EXISTS idx_cluster_ddns_record_node ON cluster_ddns_record(node_id)`);
|
|
277
|
+
db.run((0, drizzle_orm_1.sql) `CREATE INDEX IF NOT EXISTS idx_cluster_node_subdomain ON cluster_node(subdomain)`);
|
|
278
|
+
db.run((0, drizzle_orm_1.sql) `CREATE INDEX IF NOT EXISTS idx_cluster_node_access_mode ON cluster_node(access_mode)`);
|
|
279
|
+
db.run((0, drizzle_orm_1.sql) `CREATE INDEX IF NOT EXISTS idx_cluster_node_connectivity_status ON cluster_node(connectivity_status)`);
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
await db.execute((0, drizzle_orm_1.sql) `
|
|
283
|
+
CREATE TABLE IF NOT EXISTS cluster_ddns_record (
|
|
284
|
+
subdomain TEXT PRIMARY KEY,
|
|
285
|
+
domain TEXT NOT NULL,
|
|
286
|
+
ip_address TEXT,
|
|
287
|
+
ipv6_address TEXT,
|
|
288
|
+
record_type TEXT DEFAULT 'A',
|
|
289
|
+
node_id TEXT,
|
|
290
|
+
username TEXT,
|
|
291
|
+
status TEXT DEFAULT 'active',
|
|
292
|
+
banned_reason TEXT,
|
|
293
|
+
ttl INTEGER DEFAULT 60,
|
|
294
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
295
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
296
|
+
)
|
|
297
|
+
`);
|
|
298
|
+
await db.execute((0, drizzle_orm_1.sql) `
|
|
299
|
+
CREATE TABLE IF NOT EXISTS cluster_service_token (
|
|
300
|
+
id TEXT PRIMARY KEY,
|
|
301
|
+
token_hash TEXT NOT NULL UNIQUE,
|
|
302
|
+
service_type TEXT NOT NULL,
|
|
303
|
+
service_id TEXT NOT NULL,
|
|
304
|
+
scopes TEXT NOT NULL,
|
|
305
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
306
|
+
expires_at TIMESTAMPTZ
|
|
307
|
+
)
|
|
308
|
+
`);
|
|
309
|
+
await db.execute((0, drizzle_orm_1.sql) `
|
|
310
|
+
CREATE TABLE IF NOT EXISTS cluster_node (
|
|
311
|
+
id TEXT PRIMARY KEY,
|
|
312
|
+
display_name TEXT,
|
|
313
|
+
token_hash TEXT NOT NULL,
|
|
314
|
+
node_type TEXT DEFAULT 'edge',
|
|
315
|
+
subdomain TEXT UNIQUE,
|
|
316
|
+
access_mode TEXT,
|
|
317
|
+
ipv4 TEXT,
|
|
318
|
+
public_port BIGINT,
|
|
319
|
+
public_url TEXT,
|
|
320
|
+
service_token_hash TEXT,
|
|
321
|
+
provision_code_hash TEXT,
|
|
322
|
+
internal_ip TEXT,
|
|
323
|
+
internal_port BIGINT,
|
|
324
|
+
hostname TEXT,
|
|
325
|
+
ipv6 TEXT,
|
|
326
|
+
version TEXT,
|
|
327
|
+
capabilities JSONB,
|
|
328
|
+
metadata JSONB,
|
|
329
|
+
pod_base_urls TEXT,
|
|
330
|
+
connectivity_status TEXT DEFAULT 'unknown',
|
|
331
|
+
last_connectivity_check TIMESTAMPTZ,
|
|
332
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
333
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
334
|
+
last_seen TIMESTAMPTZ
|
|
335
|
+
)
|
|
336
|
+
`);
|
|
337
|
+
await db.execute((0, drizzle_orm_1.sql) `CREATE INDEX IF NOT EXISTS idx_cluster_ddns_record_domain ON cluster_ddns_record(domain)`);
|
|
338
|
+
await db.execute((0, drizzle_orm_1.sql) `CREATE INDEX IF NOT EXISTS idx_cluster_ddns_record_node ON cluster_ddns_record(node_id)`);
|
|
339
|
+
await db.execute((0, drizzle_orm_1.sql) `CREATE INDEX IF NOT EXISTS idx_cluster_node_subdomain ON cluster_node(subdomain)`);
|
|
340
|
+
await db.execute((0, drizzle_orm_1.sql) `CREATE INDEX IF NOT EXISTS idx_cluster_node_access_mode ON cluster_node(access_mode)`);
|
|
341
|
+
await db.execute((0, drizzle_orm_1.sql) `CREATE INDEX IF NOT EXISTS idx_cluster_node_connectivity_status ON cluster_node(connectivity_status)`);
|
|
342
|
+
}
|
|
197
343
|
/**
|
|
198
344
|
* Convert a Date to a value suitable for the database.
|
|
199
345
|
* SQLite uses Unix timestamps (seconds), PostgreSQL uses Date objects.
|
|
@@ -225,25 +371,10 @@ function fromDbTimestamp(value) {
|
|
|
225
371
|
*/
|
|
226
372
|
function ensureSqliteTables(sqlite) {
|
|
227
373
|
sqlite.exec(`
|
|
228
|
-
CREATE TABLE IF NOT EXISTS
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
ingress_bytes INTEGER NOT NULL DEFAULT 0,
|
|
232
|
-
egress_bytes INTEGER NOT NULL DEFAULT 0,
|
|
233
|
-
storage_limit_bytes INTEGER,
|
|
234
|
-
bandwidth_limit_bps INTEGER,
|
|
235
|
-
compute_seconds INTEGER NOT NULL DEFAULT 0,
|
|
236
|
-
tokens_used INTEGER NOT NULL DEFAULT 0,
|
|
237
|
-
compute_limit_seconds INTEGER,
|
|
238
|
-
token_limit_monthly INTEGER,
|
|
239
|
-
period_start INTEGER,
|
|
240
|
-
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
241
|
-
);
|
|
242
|
-
|
|
243
|
-
CREATE TABLE IF NOT EXISTS identity_pod_usage (
|
|
244
|
-
pod_id TEXT PRIMARY KEY,
|
|
374
|
+
CREATE TABLE IF NOT EXISTS identity_usage (
|
|
375
|
+
scope_type TEXT NOT NULL,
|
|
376
|
+
scope_id TEXT NOT NULL,
|
|
245
377
|
account_id TEXT NOT NULL,
|
|
246
|
-
storage_url TEXT,
|
|
247
378
|
storage_bytes INTEGER NOT NULL DEFAULT 0,
|
|
248
379
|
ingress_bytes INTEGER NOT NULL DEFAULT 0,
|
|
249
380
|
egress_bytes INTEGER NOT NULL DEFAULT 0,
|
|
@@ -254,82 +385,10 @@ function ensureSqliteTables(sqlite) {
|
|
|
254
385
|
compute_limit_seconds INTEGER,
|
|
255
386
|
token_limit_monthly INTEGER,
|
|
256
387
|
period_start INTEGER,
|
|
257
|
-
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
258
|
-
);
|
|
259
|
-
|
|
260
|
-
CREATE TABLE IF NOT EXISTS identity_edge_node (
|
|
261
|
-
id TEXT PRIMARY KEY,
|
|
262
|
-
display_name TEXT,
|
|
263
|
-
token_hash TEXT NOT NULL,
|
|
264
|
-
account_id TEXT,
|
|
265
|
-
node_type TEXT DEFAULT 'edge',
|
|
266
|
-
subdomain TEXT UNIQUE,
|
|
267
|
-
access_mode TEXT,
|
|
268
|
-
ipv4 TEXT,
|
|
269
|
-
public_port INTEGER,
|
|
270
|
-
public_url TEXT,
|
|
271
|
-
service_token_hash TEXT,
|
|
272
|
-
provision_code_hash TEXT,
|
|
273
|
-
internal_ip TEXT,
|
|
274
|
-
internal_port INTEGER,
|
|
275
|
-
hostname TEXT,
|
|
276
|
-
ipv6 TEXT,
|
|
277
|
-
version TEXT,
|
|
278
|
-
capabilities TEXT,
|
|
279
|
-
metadata TEXT,
|
|
280
|
-
connectivity_status TEXT DEFAULT 'unknown',
|
|
281
|
-
last_connectivity_check INTEGER,
|
|
282
|
-
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
283
388
|
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
284
|
-
|
|
389
|
+
PRIMARY KEY (scope_type, scope_id)
|
|
285
390
|
);
|
|
286
391
|
|
|
287
|
-
CREATE TABLE IF NOT EXISTS identity_edge_node_pod (
|
|
288
|
-
node_id TEXT NOT NULL REFERENCES identity_edge_node(id) ON DELETE CASCADE,
|
|
289
|
-
base_url TEXT NOT NULL
|
|
290
|
-
);
|
|
291
|
-
|
|
292
|
-
CREATE TABLE IF NOT EXISTS api_client_credentials (
|
|
293
|
-
client_id TEXT PRIMARY KEY,
|
|
294
|
-
client_secret_encrypted TEXT NOT NULL,
|
|
295
|
-
web_id TEXT NOT NULL,
|
|
296
|
-
account_id TEXT NOT NULL,
|
|
297
|
-
display_name TEXT,
|
|
298
|
-
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
299
|
-
);
|
|
300
|
-
|
|
301
|
-
CREATE TABLE IF NOT EXISTS identity_ddns_domain (
|
|
302
|
-
domain TEXT PRIMARY KEY,
|
|
303
|
-
status TEXT DEFAULT 'active',
|
|
304
|
-
provider TEXT,
|
|
305
|
-
zone_id TEXT,
|
|
306
|
-
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
307
|
-
);
|
|
308
|
-
|
|
309
|
-
CREATE TABLE IF NOT EXISTS identity_ddns_record (
|
|
310
|
-
subdomain TEXT PRIMARY KEY,
|
|
311
|
-
domain TEXT NOT NULL,
|
|
312
|
-
ip_address TEXT,
|
|
313
|
-
ipv6_address TEXT,
|
|
314
|
-
record_type TEXT DEFAULT 'A',
|
|
315
|
-
node_id TEXT,
|
|
316
|
-
username TEXT,
|
|
317
|
-
status TEXT DEFAULT 'active',
|
|
318
|
-
banned_reason TEXT,
|
|
319
|
-
ttl INTEGER DEFAULT 60,
|
|
320
|
-
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
321
|
-
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
322
|
-
);
|
|
323
|
-
|
|
324
|
-
CREATE TABLE IF NOT EXISTS identity_service_token (
|
|
325
|
-
id TEXT PRIMARY KEY,
|
|
326
|
-
token_hash TEXT NOT NULL UNIQUE,
|
|
327
|
-
service_type TEXT NOT NULL,
|
|
328
|
-
service_id TEXT NOT NULL,
|
|
329
|
-
scopes TEXT NOT NULL,
|
|
330
|
-
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
331
|
-
expires_at INTEGER
|
|
332
|
-
);
|
|
333
392
|
`);
|
|
334
393
|
// Migrate existing tables: add new columns if missing
|
|
335
394
|
migrateSqliteColumns(sqlite);
|
|
@@ -347,53 +406,12 @@ function migrateSqliteColumns(sqlite) {
|
|
|
347
406
|
// Column already exists — ignore
|
|
348
407
|
}
|
|
349
408
|
};
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
const edgeNodeColumns = [
|
|
359
|
-
['node_type', `TEXT DEFAULT 'edge'`],
|
|
360
|
-
['subdomain', 'TEXT'],
|
|
361
|
-
['access_mode', 'TEXT'],
|
|
362
|
-
['ipv4', 'TEXT'],
|
|
363
|
-
['public_port', 'INTEGER'],
|
|
364
|
-
['public_url', 'TEXT'],
|
|
365
|
-
['service_token_hash', 'TEXT'],
|
|
366
|
-
['provision_code_hash', 'TEXT'],
|
|
367
|
-
['internal_ip', 'TEXT'],
|
|
368
|
-
['internal_port', 'INTEGER'],
|
|
369
|
-
['hostname', 'TEXT'],
|
|
370
|
-
['ipv6', 'TEXT'],
|
|
371
|
-
['version', 'TEXT'],
|
|
372
|
-
['capabilities', 'TEXT'],
|
|
373
|
-
['metadata', 'TEXT'],
|
|
374
|
-
['connectivity_status', `TEXT DEFAULT 'unknown'`],
|
|
375
|
-
['last_connectivity_check', 'INTEGER'],
|
|
376
|
-
['last_seen', 'INTEGER'],
|
|
377
|
-
];
|
|
378
|
-
for (const [column, type] of edgeNodeColumns) {
|
|
379
|
-
addColumn('identity_edge_node', column, type);
|
|
380
|
-
}
|
|
381
|
-
// Usage tables: compute/token columns
|
|
382
|
-
addColumn('identity_account_usage', 'compute_seconds', 'INTEGER NOT NULL DEFAULT 0');
|
|
383
|
-
addColumn('identity_account_usage', 'tokens_used', 'INTEGER NOT NULL DEFAULT 0');
|
|
384
|
-
addColumn('identity_account_usage', 'compute_limit_seconds', 'INTEGER');
|
|
385
|
-
addColumn('identity_account_usage', 'token_limit_monthly', 'INTEGER');
|
|
386
|
-
addColumn('identity_account_usage', 'period_start', 'INTEGER');
|
|
387
|
-
addColumn('identity_pod_usage', 'compute_seconds', 'INTEGER NOT NULL DEFAULT 0');
|
|
388
|
-
addColumn('identity_pod_usage', 'tokens_used', 'INTEGER NOT NULL DEFAULT 0');
|
|
389
|
-
addColumn('identity_pod_usage', 'compute_limit_seconds', 'INTEGER');
|
|
390
|
-
addColumn('identity_pod_usage', 'token_limit_monthly', 'INTEGER');
|
|
391
|
-
addColumn('identity_pod_usage', 'period_start', 'INTEGER');
|
|
392
|
-
addColumn('identity_pod_usage', 'storage_url', 'TEXT');
|
|
393
|
-
}
|
|
394
|
-
function sqliteColumnExists(sqlite, table, column) {
|
|
395
|
-
const rows = sqlite.prepare(`PRAGMA table_info(${table})`).all();
|
|
396
|
-
return rows.some((row) => row.name === column);
|
|
409
|
+
// Usage table: compute/token columns
|
|
410
|
+
addColumn('identity_usage', 'compute_seconds', 'INTEGER NOT NULL DEFAULT 0');
|
|
411
|
+
addColumn('identity_usage', 'tokens_used', 'INTEGER NOT NULL DEFAULT 0');
|
|
412
|
+
addColumn('identity_usage', 'compute_limit_seconds', 'INTEGER');
|
|
413
|
+
addColumn('identity_usage', 'token_limit_monthly', 'INTEGER');
|
|
414
|
+
addColumn('identity_usage', 'period_start', 'INTEGER');
|
|
397
415
|
}
|
|
398
416
|
/**
|
|
399
417
|
* Add columns that may be missing from older PostgreSQL databases.
|
|
@@ -415,179 +433,37 @@ async function migratePgColumns(pool) {
|
|
|
415
433
|
// Ignore errors (table might not exist yet)
|
|
416
434
|
}
|
|
417
435
|
};
|
|
418
|
-
// Usage
|
|
419
|
-
await addColumn('
|
|
420
|
-
await addColumn('
|
|
421
|
-
await addColumn('
|
|
422
|
-
await addColumn('
|
|
423
|
-
await addColumn('
|
|
424
|
-
await addColumn('identity_pod_usage', 'compute_seconds', 'BIGINT NOT NULL DEFAULT 0');
|
|
425
|
-
await addColumn('identity_pod_usage', 'tokens_used', 'BIGINT NOT NULL DEFAULT 0');
|
|
426
|
-
await addColumn('identity_pod_usage', 'compute_limit_seconds', 'BIGINT');
|
|
427
|
-
await addColumn('identity_pod_usage', 'token_limit_monthly', 'BIGINT');
|
|
428
|
-
await addColumn('identity_pod_usage', 'period_start', 'TIMESTAMP WITH TIME ZONE');
|
|
429
|
-
await addColumn('identity_pod_usage', 'storage_url', 'TEXT');
|
|
430
|
-
// Service token table
|
|
431
|
-
try {
|
|
432
|
-
await pool.query(`
|
|
433
|
-
CREATE TABLE IF NOT EXISTS identity_service_token (
|
|
434
|
-
id TEXT PRIMARY KEY,
|
|
435
|
-
token_hash TEXT NOT NULL UNIQUE,
|
|
436
|
-
service_type TEXT NOT NULL,
|
|
437
|
-
service_id TEXT NOT NULL,
|
|
438
|
-
scopes TEXT NOT NULL,
|
|
439
|
-
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
|
|
440
|
-
expires_at TIMESTAMP WITH TIME ZONE
|
|
441
|
-
);
|
|
442
|
-
`);
|
|
443
|
-
}
|
|
444
|
-
catch {
|
|
445
|
-
// Ignore if already exists
|
|
446
|
-
}
|
|
436
|
+
// Usage table: compute/token columns
|
|
437
|
+
await addColumn('identity_usage', 'compute_seconds', 'BIGINT NOT NULL DEFAULT 0');
|
|
438
|
+
await addColumn('identity_usage', 'tokens_used', 'BIGINT NOT NULL DEFAULT 0');
|
|
439
|
+
await addColumn('identity_usage', 'compute_limit_seconds', 'BIGINT');
|
|
440
|
+
await addColumn('identity_usage', 'token_limit_monthly', 'BIGINT');
|
|
441
|
+
await addColumn('identity_usage', 'period_start', 'TIMESTAMP WITH TIME ZONE');
|
|
447
442
|
}
|
|
448
443
|
async function ensurePostgresTables(pool) {
|
|
449
444
|
await pool.query(`
|
|
450
|
-
CREATE TABLE IF NOT EXISTS
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
ingress_bytes BIGINT NOT NULL DEFAULT 0,
|
|
454
|
-
egress_bytes BIGINT NOT NULL DEFAULT 0,
|
|
455
|
-
storage_limit_bytes BIGINT,
|
|
456
|
-
bandwidth_limit_bps BIGINT,
|
|
457
|
-
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
458
|
-
);
|
|
459
|
-
|
|
460
|
-
CREATE TABLE IF NOT EXISTS identity_pod_usage (
|
|
461
|
-
pod_id TEXT PRIMARY KEY,
|
|
445
|
+
CREATE TABLE IF NOT EXISTS identity_usage (
|
|
446
|
+
scope_type TEXT NOT NULL,
|
|
447
|
+
scope_id TEXT NOT NULL,
|
|
462
448
|
account_id TEXT NOT NULL,
|
|
463
|
-
storage_url TEXT,
|
|
464
449
|
storage_bytes BIGINT NOT NULL DEFAULT 0,
|
|
465
450
|
ingress_bytes BIGINT NOT NULL DEFAULT 0,
|
|
466
451
|
egress_bytes BIGINT NOT NULL DEFAULT 0,
|
|
467
452
|
storage_limit_bytes BIGINT,
|
|
468
453
|
bandwidth_limit_bps BIGINT,
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
display_name TEXT,
|
|
475
|
-
token_hash TEXT NOT NULL,
|
|
476
|
-
account_id TEXT,
|
|
477
|
-
node_type TEXT DEFAULT 'edge',
|
|
478
|
-
subdomain TEXT UNIQUE,
|
|
479
|
-
access_mode TEXT,
|
|
480
|
-
ipv4 TEXT,
|
|
481
|
-
public_port BIGINT,
|
|
482
|
-
public_url TEXT,
|
|
483
|
-
service_token_hash TEXT,
|
|
484
|
-
provision_code_hash TEXT,
|
|
485
|
-
internal_ip TEXT,
|
|
486
|
-
internal_port BIGINT,
|
|
487
|
-
hostname TEXT,
|
|
488
|
-
ipv6 TEXT,
|
|
489
|
-
version TEXT,
|
|
490
|
-
capabilities JSONB,
|
|
491
|
-
metadata JSONB,
|
|
492
|
-
connectivity_status TEXT DEFAULT 'unknown',
|
|
493
|
-
last_connectivity_check TIMESTAMPTZ,
|
|
494
|
-
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
454
|
+
compute_seconds BIGINT NOT NULL DEFAULT 0,
|
|
455
|
+
tokens_used BIGINT NOT NULL DEFAULT 0,
|
|
456
|
+
compute_limit_seconds BIGINT,
|
|
457
|
+
token_limit_monthly BIGINT,
|
|
458
|
+
period_start TIMESTAMPTZ,
|
|
495
459
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
496
|
-
|
|
497
|
-
);
|
|
498
|
-
|
|
499
|
-
CREATE TABLE IF NOT EXISTS identity_edge_node_pod (
|
|
500
|
-
node_id TEXT NOT NULL REFERENCES identity_edge_node(id) ON DELETE CASCADE,
|
|
501
|
-
base_url TEXT NOT NULL
|
|
460
|
+
PRIMARY KEY (scope_type, scope_id)
|
|
502
461
|
);
|
|
503
462
|
|
|
504
|
-
CREATE TABLE IF NOT EXISTS api_client_credentials (
|
|
505
|
-
client_id TEXT PRIMARY KEY,
|
|
506
|
-
client_secret_encrypted TEXT NOT NULL,
|
|
507
|
-
web_id TEXT NOT NULL,
|
|
508
|
-
account_id TEXT NOT NULL,
|
|
509
|
-
display_name TEXT,
|
|
510
|
-
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
511
|
-
);
|
|
512
|
-
|
|
513
|
-
CREATE TABLE IF NOT EXISTS identity_ddns_domain (
|
|
514
|
-
domain TEXT PRIMARY KEY,
|
|
515
|
-
status TEXT DEFAULT 'active',
|
|
516
|
-
provider TEXT,
|
|
517
|
-
zone_id TEXT,
|
|
518
|
-
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
519
|
-
);
|
|
520
|
-
|
|
521
|
-
CREATE TABLE IF NOT EXISTS identity_ddns_record (
|
|
522
|
-
subdomain TEXT PRIMARY KEY,
|
|
523
|
-
domain TEXT NOT NULL,
|
|
524
|
-
ip_address TEXT,
|
|
525
|
-
ipv6_address TEXT,
|
|
526
|
-
record_type TEXT DEFAULT 'A',
|
|
527
|
-
node_id TEXT,
|
|
528
|
-
username TEXT,
|
|
529
|
-
status TEXT DEFAULT 'active',
|
|
530
|
-
banned_reason TEXT,
|
|
531
|
-
ttl INTEGER DEFAULT 60,
|
|
532
|
-
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
533
|
-
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
534
|
-
);
|
|
535
|
-
|
|
536
|
-
CREATE TABLE IF NOT EXISTS identity_service_token (
|
|
537
|
-
id TEXT PRIMARY KEY,
|
|
538
|
-
token_hash TEXT NOT NULL UNIQUE,
|
|
539
|
-
service_type TEXT NOT NULL,
|
|
540
|
-
service_id TEXT NOT NULL,
|
|
541
|
-
scopes TEXT NOT NULL,
|
|
542
|
-
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
543
|
-
expires_at TIMESTAMPTZ
|
|
544
|
-
);
|
|
545
463
|
`);
|
|
546
464
|
await migratePostgresColumns(pool);
|
|
547
465
|
}
|
|
548
466
|
async function migratePostgresColumns(pool) {
|
|
549
|
-
|
|
550
|
-
await pool.query(`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS ${column} ${type}`);
|
|
551
|
-
};
|
|
552
|
-
await pool.query('ALTER TABLE identity_edge_node DROP COLUMN IF EXISTS owner_account_id');
|
|
553
|
-
await pool.query(`
|
|
554
|
-
DO $$
|
|
555
|
-
BEGIN
|
|
556
|
-
IF EXISTS (
|
|
557
|
-
SELECT 1
|
|
558
|
-
FROM information_schema.columns
|
|
559
|
-
WHERE table_name = 'identity_edge_node' AND column_name = 'public_ip'
|
|
560
|
-
) AND NOT EXISTS (
|
|
561
|
-
SELECT 1
|
|
562
|
-
FROM information_schema.columns
|
|
563
|
-
WHERE table_name = 'identity_edge_node' AND column_name = 'ipv4'
|
|
564
|
-
) THEN
|
|
565
|
-
ALTER TABLE identity_edge_node RENAME COLUMN public_ip TO ipv4;
|
|
566
|
-
END IF;
|
|
567
|
-
END $$;
|
|
568
|
-
`);
|
|
569
|
-
const edgeNodeColumns = [
|
|
570
|
-
['node_type', `TEXT DEFAULT 'edge'`],
|
|
571
|
-
['subdomain', 'TEXT'],
|
|
572
|
-
['access_mode', 'TEXT'],
|
|
573
|
-
['ipv4', 'TEXT'],
|
|
574
|
-
['public_port', 'BIGINT'],
|
|
575
|
-
['public_url', 'TEXT'],
|
|
576
|
-
['service_token_hash', 'TEXT'],
|
|
577
|
-
['provision_code_hash', 'TEXT'],
|
|
578
|
-
['internal_ip', 'TEXT'],
|
|
579
|
-
['internal_port', 'BIGINT'],
|
|
580
|
-
['hostname', 'TEXT'],
|
|
581
|
-
['ipv6', 'TEXT'],
|
|
582
|
-
['version', 'TEXT'],
|
|
583
|
-
['capabilities', 'JSONB'],
|
|
584
|
-
['metadata', 'JSONB'],
|
|
585
|
-
['connectivity_status', `TEXT DEFAULT 'unknown'`],
|
|
586
|
-
['last_connectivity_check', 'TIMESTAMPTZ'],
|
|
587
|
-
['last_seen', 'TIMESTAMPTZ'],
|
|
588
|
-
];
|
|
589
|
-
for (const [column, type] of edgeNodeColumns) {
|
|
590
|
-
await addColumn('identity_edge_node', column, type);
|
|
591
|
-
}
|
|
467
|
+
void pool;
|
|
592
468
|
}
|
|
593
469
|
//# sourceMappingURL=db.js.map
|