database-devtools 0.1.1 → 0.1.3
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/DatabaseDevTools-CdpQJBqG.d.ts +39 -0
- package/dist/DatabaseDevTools-sw1wX5nW.d.cts +39 -0
- package/dist/adapter/index.d.cts +3 -3
- package/dist/adapter/index.d.ts +3 -3
- package/dist/adapter/index.js +0 -1
- package/dist/{adapter-BjJm71wW.d.cts → adapter-DQyQ5ycj.d.cts} +1 -1
- package/dist/{adapter-DJSjDewg.d.ts → adapter-cIF5P6qI.d.ts} +1 -1
- package/dist/adapters/sqlite/index.d.cts +4 -4
- package/dist/adapters/sqlite/index.d.ts +4 -4
- package/dist/adapters/sqlite/index.js +0 -1
- package/dist/chunk-NHHA5CZP.js +2730 -0
- package/dist/chunk-NHHA5CZP.js.map +1 -0
- package/dist/chunk-S4Z7A4TW.js +116 -0
- package/dist/chunk-S4Z7A4TW.js.map +1 -0
- package/dist/{chunk-ZS5MZR75.js → chunk-UNVCJMJK.js} +4 -114
- package/dist/chunk-UNVCJMJK.js.map +1 -0
- package/dist/client/index.d.cts +4 -3
- package/dist/client/index.d.ts +4 -3
- package/dist/client/index.js +2 -2
- package/dist/{createDevToolsServer-B7NQ_5H4.d.cts → createDevToolsServer-Cqb7xzIv.d.cts} +1 -1
- package/dist/{createDevToolsServer-DlNMoCJR.d.ts → createDevToolsServer-D3QnP8Yb.d.ts} +1 -1
- package/dist/{handleDeviceSnapshot-cYGuitSc.d.cts → handleDeviceSnapshot-CIZ_00fE.d.cts} +2 -50
- package/dist/{handleDeviceSnapshot-CR-4QMdk.d.ts → handleDeviceSnapshot-DF9sS1Pm.d.ts} +2 -50
- package/dist/index.cjs +30 -43
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +13 -45
- package/dist/index.d.ts +13 -45
- package/dist/index.js +7 -2741
- package/dist/index.js.map +1 -1
- package/dist/inspector/index.d.cts +2 -2
- package/dist/inspector/index.d.ts +2 -2
- package/dist/inspector/index.js +0 -1
- package/dist/inspectors/sqlite/index.d.cts +2 -2
- package/dist/inspectors/sqlite/index.d.ts +2 -2
- package/dist/inspectors/sqlite/index.js +0 -1
- package/dist/inspectors/sqlite/index.js.map +1 -1
- package/dist/native.cjs +3933 -0
- package/dist/native.cjs.map +1 -0
- package/dist/native.d.cts +37 -0
- package/dist/native.d.ts +37 -0
- package/dist/native.js +12 -0
- package/dist/native.js.map +1 -0
- package/dist/{register-BuicFu9L.d.cts → register-DEZ0kK1p.d.cts} +2 -2
- package/dist/{register-aITLN9Q9.d.ts → register-Dawue1_L.d.ts} +2 -2
- package/dist/resolveDeviceDatabaseUrl-DhRP-h1Y.d.cts +49 -0
- package/dist/resolveDeviceDatabaseUrl-DhRP-h1Y.d.ts +49 -0
- package/dist/server/index.d.cts +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.js +0 -1
- package/dist/{snapshot-Dhyecgo2.d.cts → snapshot-Dknp_qP1.d.cts} +1 -1
- package/dist/{snapshot-Dhyecgo2.d.ts → snapshot-Dknp_qP1.d.ts} +1 -1
- package/dist/types/protocol.js +0 -1
- package/dist/{types-CKVRCX-e.d.ts → types-6nco_RRp.d.ts} +2 -2
- package/dist/{types-CIA11diJ.d.cts → types-BQHZtFwx.d.cts} +2 -2
- package/dist/{types-CF6qEU-_.d.ts → types-DkVlU6t-.d.ts} +2 -2
- package/dist/{types-BRLJdBRY.d.cts → types-gT3gDw_T.d.cts} +2 -2
- package/dist/web/assets/{index-DQrPRTOy.js → index-DogMAkgu.js} +1 -1
- package/dist/web/index.html +1 -1
- package/package.json +8 -6
- package/dist/chunk-DGUM43GV.js +0 -10
- package/dist/chunk-DGUM43GV.js.map +0 -1
- package/dist/chunk-ZS5MZR75.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/client/resolveDeviceDatabaseUrl.ts","../src/client/deviceDatabase.ts","../src/client/resolveProjectDatabaseUrl.ts","../src/client/projectDatabase.ts"],"names":["resolveApiBase"],"mappings":"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","file":"chunk-S4Z7A4TW.js","sourcesContent":["import {\r\n PROJECT_DEVICE_EXPORTS_API_PATH,\r\n wsUrlToHttpUrl,\r\n} from '../types/protocol';\r\nimport type { ResolveProjectDatabaseUrlOptions } from './resolveProjectDatabaseUrl';\r\n\r\nfunction resolveApiBase(serverUrl: string, options?: ResolveProjectDatabaseUrlOptions): string {\r\n if (options?.useSameOriginApi && typeof window !== 'undefined') {\r\n return window.location.origin;\r\n }\r\n\r\n if (serverUrl.startsWith('ws://') || serverUrl.startsWith('wss://')) {\r\n return wsUrlToHttpUrl(serverUrl);\r\n }\r\n\r\n return serverUrl.replace(/\\/$/, '');\r\n}\r\n\r\nexport function resolveDeviceExportDatabaseUrl(\r\n serverUrl: string,\r\n deviceId: string,\r\n options?: ResolveProjectDatabaseUrlOptions,\r\n): string {\r\n const base = resolveApiBase(serverUrl, options);\r\n return `${base}${PROJECT_DEVICE_EXPORTS_API_PATH}/${encodeURIComponent(deviceId)}/database`;\r\n}\r\n\r\nexport function resolveDeviceExportDatabaseMetaUrl(\r\n serverUrl: string,\r\n deviceId: string,\r\n options?: ResolveProjectDatabaseUrlOptions,\r\n): string {\r\n const base = resolveApiBase(serverUrl, options);\r\n return `${base}${PROJECT_DEVICE_EXPORTS_API_PATH}/${encodeURIComponent(deviceId)}/database/meta`;\r\n}\r\n\r\nexport function resolveDeviceExportsUrl(\r\n serverUrl: string,\r\n options?: ResolveProjectDatabaseUrlOptions,\r\n): string {\r\n const base = resolveApiBase(serverUrl, options);\r\n return `${base}${PROJECT_DEVICE_EXPORTS_API_PATH}`;\r\n}\r\n","import { fetchSnapshot } from './fetchSnapshot';\r\nimport type { ListedProjectDatabase, ProjectDatabaseMeta } from './projectDatabase';\r\nimport {\r\n resolveDeviceExportDatabaseMetaUrl,\r\n resolveDeviceExportDatabaseUrl,\r\n resolveDeviceExportsUrl,\r\n} from './resolveDeviceDatabaseUrl';\r\nimport type { ResolveProjectDatabaseUrlOptions } from './resolveProjectDatabaseUrl';\r\n\r\nexport type DeviceExportMeta = ProjectDatabaseMeta;\r\nexport type ListedDeviceExport = ListedProjectDatabase;\r\n\r\nasync function fetchJson<T>(url: string, errorLabel: string): Promise<T> {\r\n let response: Response;\r\n\r\n try {\r\n response = await fetch(url);\r\n } catch (error) {\r\n const networkMessage = error instanceof Error ? error.message : String(error);\r\n throw new Error(`Network error fetching ${errorLabel} from ${url}. ${networkMessage}`);\r\n }\r\n\r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch ${errorLabel} from ${url}: ${response.status} ${response.statusText}`);\r\n }\r\n\r\n return (await response.json()) as T;\r\n}\r\n\r\nexport async function fetchDeviceExportMeta(\r\n serverUrl: string,\r\n deviceId: string,\r\n options?: ResolveProjectDatabaseUrlOptions,\r\n): Promise<DeviceExportMeta> {\r\n const url = resolveDeviceExportDatabaseMetaUrl(serverUrl, deviceId, options);\r\n return fetchJson<DeviceExportMeta>(url, 'device export metadata');\r\n}\r\n\r\nexport async function fetchDeviceExportDatabase(\r\n serverUrl: string,\r\n deviceId: string,\r\n options?: ResolveProjectDatabaseUrlOptions,\r\n): Promise<ArrayBuffer> {\r\n const url = resolveDeviceExportDatabaseUrl(serverUrl, deviceId, options);\r\n return fetchSnapshot(url);\r\n}\r\n\r\nexport async function fetchDeviceExports(\r\n serverUrl: string,\r\n options?: ResolveProjectDatabaseUrlOptions,\r\n): Promise<ListedDeviceExport[]> {\r\n const url = resolveDeviceExportsUrl(serverUrl, options);\r\n const payload = await fetchJson<{ devices?: ListedDeviceExport[] }>(url, 'device exports');\r\n return payload.devices ?? [];\r\n}\r\n","import {\r\n PROJECT_DATABASE_API_PATH,\r\n PROJECT_DATABASE_META_API_PATH,\r\n PROJECT_DATABASES_API_PATH,\r\n wsUrlToHttpUrl,\r\n} from '../types/protocol';\r\n\r\nexport type ResolveProjectDatabaseUrlOptions = {\r\n useSameOriginApi?: boolean;\r\n};\r\n\r\nfunction resolveApiBase(serverUrl: string, options?: ResolveProjectDatabaseUrlOptions): string {\r\n if (options?.useSameOriginApi && typeof window !== 'undefined') {\r\n return window.location.origin;\r\n }\r\n\r\n if (serverUrl.startsWith('ws://') || serverUrl.startsWith('wss://')) {\r\n return wsUrlToHttpUrl(serverUrl);\r\n }\r\n\r\n return serverUrl.replace(/\\/$/, '');\r\n}\r\n\r\nexport function resolveProjectDatabaseUrl(\r\n serverUrl: string,\r\n options?: ResolveProjectDatabaseUrlOptions,\r\n): string {\r\n return `${resolveApiBase(serverUrl, options)}${PROJECT_DATABASE_API_PATH}`;\r\n}\r\n\r\nexport function resolveProjectDatabaseMetaUrl(\r\n serverUrl: string,\r\n options?: ResolveProjectDatabaseUrlOptions,\r\n): string {\r\n return `${resolveApiBase(serverUrl, options)}${PROJECT_DATABASE_META_API_PATH}`;\r\n}\r\n\r\nexport function resolveProjectDatabasesUrl(\r\n serverUrl: string,\r\n options?: ResolveProjectDatabaseUrlOptions,\r\n): string {\r\n return `${resolveApiBase(serverUrl, options)}${PROJECT_DATABASES_API_PATH}`;\r\n}\r\n","import { fetchSnapshot } from './fetchSnapshot';\r\nimport {\r\n resolveProjectDatabaseMetaUrl,\r\n resolveProjectDatabaseUrl,\r\n resolveProjectDatabasesUrl,\r\n type ResolveProjectDatabaseUrlOptions,\r\n} from './resolveProjectDatabaseUrl';\r\n\r\nexport type ProjectDatabaseMeta = {\r\n exists: boolean;\r\n relativePath?: string;\r\n absolutePath?: string;\r\n kind?: string;\r\n mimeType?: string;\r\n databaseName?: string;\r\n size?: number;\r\n updatedAt?: number;\r\n source?: 'active' | 'device';\r\n deviceId?: string;\r\n};\r\n\r\nexport type ListedProjectDatabase = {\r\n id: string;\r\n label: string;\r\n relativePath: string;\r\n source: 'active' | 'device';\r\n deviceId?: string;\r\n bundleId?: string;\r\n storageKey?: string;\r\n databaseName?: string;\r\n size: number;\r\n updatedAt: number;\r\n};\r\n\r\n/** @deprecated Use device-scoped `fetchDeviceExportMeta` instead. Proxies to the newest device export. */\r\nexport async function fetchProjectDatabaseMeta(\r\n serverUrl: string,\r\n options?: ResolveProjectDatabaseUrlOptions,\r\n): Promise<ProjectDatabaseMeta> {\r\n const url = resolveProjectDatabaseMetaUrl(serverUrl, options);\r\n let response: Response;\r\n\r\n try {\r\n response = await fetch(url);\r\n } catch (error) {\r\n const networkMessage = error instanceof Error ? error.message : String(error);\r\n throw new Error(`Network error fetching project database metadata from ${url}. ${networkMessage}`);\r\n }\r\n\r\n if (!response.ok) {\r\n throw new Error(\r\n `Failed to fetch project database metadata from ${url}: ${response.status} ${response.statusText}`,\r\n );\r\n }\r\n\r\n return (await response.json()) as ProjectDatabaseMeta;\r\n}\r\n\r\n/** @deprecated Use device-scoped `fetchDeviceExportDatabase` instead. Proxies to the newest device export. */\r\nexport async function fetchProjectDatabase(\r\n serverUrl: string,\r\n options?: ResolveProjectDatabaseUrlOptions,\r\n): Promise<ArrayBuffer> {\r\n const url = resolveProjectDatabaseUrl(serverUrl, options);\r\n return fetchSnapshot(url);\r\n}\r\n\r\n/** @deprecated Use `fetchDeviceExports` instead. */\r\nexport async function fetchProjectDatabases(\r\n serverUrl: string,\r\n options?: ResolveProjectDatabaseUrlOptions,\r\n): Promise<ListedProjectDatabase[]> {\r\n const url = resolveProjectDatabasesUrl(serverUrl, options);\r\n let response: Response;\r\n\r\n try {\r\n response = await fetch(url);\r\n } catch (error) {\r\n const networkMessage = error instanceof Error ? error.message : String(error);\r\n throw new Error(`Network error fetching project databases from ${url}. ${networkMessage}`);\r\n }\r\n\r\n if (!response.ok) {\r\n throw new Error(\r\n `Failed to fetch project databases from ${url}: ${response.status} ${response.statusText}`,\r\n );\r\n }\r\n\r\n const payload = (await response.json()) as { databases?: ListedProjectDatabase[] };\r\n return payload.databases ?? [];\r\n}\r\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { generateDeviceId, generateTransactionId, generateWriteId } from './chunk-AZECU6D7.js';
|
|
2
|
-
import { DevToolsRole, buildDevToolsWsUrl, DEFAULT_DEVTOOLS_PORT,
|
|
2
|
+
import { DevToolsRole, buildDevToolsWsUrl, DEFAULT_DEVTOOLS_PORT, wsUrlToHttpUrl, buildDeviceSnapshotUrl, MessageType, isPingMessage, isDeviceStatusMessage, isSnapshotUploadRequestedMessage, isExportSnapshotErrorMessage, isRefreshStatusMessage, isSnapshotReadyMessage, isRefreshErrorMessage, isBeginTransactionMessage, isCommitTransactionMessage, isRollbackTransactionMessage, isExecuteWriteMessage, isTransactionStatusMessage, isWriteResultMessage, isWriteErrorMessage } from './chunk-CPVVIH5G.js';
|
|
3
3
|
import { SNAPSHOT_MIME_HEADER, SNAPSHOT_KIND_HEADER, SNAPSHOT_NAME_HEADER } from './chunk-HIDZTOJ3.js';
|
|
4
4
|
|
|
5
5
|
// src/utils/reconnect.ts
|
|
@@ -459,116 +459,6 @@ async function fetchSnapshot(downloadUrl) {
|
|
|
459
459
|
return response.arrayBuffer();
|
|
460
460
|
}
|
|
461
461
|
|
|
462
|
-
// src/client/resolveDeviceDatabaseUrl.ts
|
|
463
|
-
function resolveApiBase(serverUrl, options) {
|
|
464
|
-
if (options?.useSameOriginApi && typeof window !== "undefined") {
|
|
465
|
-
return window.location.origin;
|
|
466
|
-
}
|
|
467
|
-
if (serverUrl.startsWith("ws://") || serverUrl.startsWith("wss://")) {
|
|
468
|
-
return wsUrlToHttpUrl(serverUrl);
|
|
469
|
-
}
|
|
470
|
-
return serverUrl.replace(/\/$/, "");
|
|
471
|
-
}
|
|
472
|
-
function resolveDeviceExportDatabaseUrl(serverUrl, deviceId, options) {
|
|
473
|
-
const base = resolveApiBase(serverUrl, options);
|
|
474
|
-
return `${base}${PROJECT_DEVICE_EXPORTS_API_PATH}/${encodeURIComponent(deviceId)}/database`;
|
|
475
|
-
}
|
|
476
|
-
function resolveDeviceExportDatabaseMetaUrl(serverUrl, deviceId, options) {
|
|
477
|
-
const base = resolveApiBase(serverUrl, options);
|
|
478
|
-
return `${base}${PROJECT_DEVICE_EXPORTS_API_PATH}/${encodeURIComponent(deviceId)}/database/meta`;
|
|
479
|
-
}
|
|
480
|
-
function resolveDeviceExportsUrl(serverUrl, options) {
|
|
481
|
-
const base = resolveApiBase(serverUrl, options);
|
|
482
|
-
return `${base}${PROJECT_DEVICE_EXPORTS_API_PATH}`;
|
|
483
|
-
}
|
|
484
|
-
|
|
485
|
-
// src/client/deviceDatabase.ts
|
|
486
|
-
async function fetchJson(url, errorLabel) {
|
|
487
|
-
let response;
|
|
488
|
-
try {
|
|
489
|
-
response = await fetch(url);
|
|
490
|
-
} catch (error) {
|
|
491
|
-
const networkMessage = error instanceof Error ? error.message : String(error);
|
|
492
|
-
throw new Error(`Network error fetching ${errorLabel} from ${url}. ${networkMessage}`);
|
|
493
|
-
}
|
|
494
|
-
if (!response.ok) {
|
|
495
|
-
throw new Error(`Failed to fetch ${errorLabel} from ${url}: ${response.status} ${response.statusText}`);
|
|
496
|
-
}
|
|
497
|
-
return await response.json();
|
|
498
|
-
}
|
|
499
|
-
async function fetchDeviceExportMeta(serverUrl, deviceId, options) {
|
|
500
|
-
const url = resolveDeviceExportDatabaseMetaUrl(serverUrl, deviceId, options);
|
|
501
|
-
return fetchJson(url, "device export metadata");
|
|
502
|
-
}
|
|
503
|
-
async function fetchDeviceExportDatabase(serverUrl, deviceId, options) {
|
|
504
|
-
const url = resolveDeviceExportDatabaseUrl(serverUrl, deviceId, options);
|
|
505
|
-
return fetchSnapshot(url);
|
|
506
|
-
}
|
|
507
|
-
async function fetchDeviceExports(serverUrl, options) {
|
|
508
|
-
const url = resolveDeviceExportsUrl(serverUrl, options);
|
|
509
|
-
const payload = await fetchJson(url, "device exports");
|
|
510
|
-
return payload.devices ?? [];
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
// src/client/resolveProjectDatabaseUrl.ts
|
|
514
|
-
function resolveApiBase2(serverUrl, options) {
|
|
515
|
-
if (options?.useSameOriginApi && typeof window !== "undefined") {
|
|
516
|
-
return window.location.origin;
|
|
517
|
-
}
|
|
518
|
-
if (serverUrl.startsWith("ws://") || serverUrl.startsWith("wss://")) {
|
|
519
|
-
return wsUrlToHttpUrl(serverUrl);
|
|
520
|
-
}
|
|
521
|
-
return serverUrl.replace(/\/$/, "");
|
|
522
|
-
}
|
|
523
|
-
function resolveProjectDatabaseUrl(serverUrl, options) {
|
|
524
|
-
return `${resolveApiBase2(serverUrl, options)}${PROJECT_DATABASE_API_PATH}`;
|
|
525
|
-
}
|
|
526
|
-
function resolveProjectDatabaseMetaUrl(serverUrl, options) {
|
|
527
|
-
return `${resolveApiBase2(serverUrl, options)}${PROJECT_DATABASE_META_API_PATH}`;
|
|
528
|
-
}
|
|
529
|
-
function resolveProjectDatabasesUrl(serverUrl, options) {
|
|
530
|
-
return `${resolveApiBase2(serverUrl, options)}${PROJECT_DATABASES_API_PATH}`;
|
|
531
|
-
}
|
|
532
|
-
|
|
533
|
-
// src/client/projectDatabase.ts
|
|
534
|
-
async function fetchProjectDatabaseMeta(serverUrl, options) {
|
|
535
|
-
const url = resolveProjectDatabaseMetaUrl(serverUrl, options);
|
|
536
|
-
let response;
|
|
537
|
-
try {
|
|
538
|
-
response = await fetch(url);
|
|
539
|
-
} catch (error) {
|
|
540
|
-
const networkMessage = error instanceof Error ? error.message : String(error);
|
|
541
|
-
throw new Error(`Network error fetching project database metadata from ${url}. ${networkMessage}`);
|
|
542
|
-
}
|
|
543
|
-
if (!response.ok) {
|
|
544
|
-
throw new Error(
|
|
545
|
-
`Failed to fetch project database metadata from ${url}: ${response.status} ${response.statusText}`
|
|
546
|
-
);
|
|
547
|
-
}
|
|
548
|
-
return await response.json();
|
|
549
|
-
}
|
|
550
|
-
async function fetchProjectDatabase(serverUrl, options) {
|
|
551
|
-
const url = resolveProjectDatabaseUrl(serverUrl, options);
|
|
552
|
-
return fetchSnapshot(url);
|
|
553
|
-
}
|
|
554
|
-
async function fetchProjectDatabases(serverUrl, options) {
|
|
555
|
-
const url = resolveProjectDatabasesUrl(serverUrl, options);
|
|
556
|
-
let response;
|
|
557
|
-
try {
|
|
558
|
-
response = await fetch(url);
|
|
559
|
-
} catch (error) {
|
|
560
|
-
const networkMessage = error instanceof Error ? error.message : String(error);
|
|
561
|
-
throw new Error(`Network error fetching project databases from ${url}. ${networkMessage}`);
|
|
562
|
-
}
|
|
563
|
-
if (!response.ok) {
|
|
564
|
-
throw new Error(
|
|
565
|
-
`Failed to fetch project databases from ${url}: ${response.status} ${response.statusText}`
|
|
566
|
-
);
|
|
567
|
-
}
|
|
568
|
-
const payload = await response.json();
|
|
569
|
-
return payload.databases ?? [];
|
|
570
|
-
}
|
|
571
|
-
|
|
572
462
|
// src/client/snapshotUpload.ts
|
|
573
463
|
function createSnapshotUploadBody(bytes) {
|
|
574
464
|
return bytes;
|
|
@@ -650,6 +540,6 @@ function formatRefreshErrorMessage(code, message) {
|
|
|
650
540
|
}
|
|
651
541
|
}
|
|
652
542
|
|
|
653
|
-
export { createDevToolsClient, createSnapshotUploadBody,
|
|
654
|
-
//# sourceMappingURL=chunk-
|
|
655
|
-
//# sourceMappingURL=chunk-
|
|
543
|
+
export { createDevToolsClient, createSnapshotUploadBody, fetchSnapshot, formatRefreshErrorMessage, formatSyncErrorMessage, handleDeviceSnapshotUpload, resolveSnapshotUploadUrl, uploadSnapshot };
|
|
544
|
+
//# sourceMappingURL=chunk-UNVCJMJK.js.map
|
|
545
|
+
//# sourceMappingURL=chunk-UNVCJMJK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/reconnect.ts","../src/client/createDevToolsClient.ts","../src/client/fetchSnapshot.ts","../src/client/snapshotUpload.ts","../src/client/handleDeviceSnapshot.ts","../src/client/formatSyncError.ts"],"names":[],"mappings":"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","file":"chunk-UNVCJMJK.js","sourcesContent":["export type ReconnectOptions = {\n baseMs?: number;\n maxMs?: number;\n jitterMs?: number;\n};\n\nconst DEFAULT_BASE_MS = 1_000;\nconst DEFAULT_MAX_MS = 30_000;\nconst DEFAULT_JITTER_MS = 500;\n\nexport function calculateBackoffDelay(attempt: number, options: ReconnectOptions = {}): number {\n const baseMs = options.baseMs ?? DEFAULT_BASE_MS;\n const maxMs = options.maxMs ?? DEFAULT_MAX_MS;\n const jitterMs = options.jitterMs ?? DEFAULT_JITTER_MS;\n\n const exponential = baseMs * 2 ** attempt;\n const capped = Math.min(exponential, maxMs);\n const jitter = Math.floor(Math.random() * jitterMs);\n\n return capped + jitter;\n}\n\nexport type ReconnectSchedulerOptions = ReconnectOptions & {\n onReconnect: () => void;\n};\n\nexport class ReconnectScheduler {\n private attempt = 0;\n private timer: ReturnType<typeof setTimeout> | null = null;\n private readonly onReconnect: () => void;\n private readonly options: ReconnectOptions;\n\n constructor({ onReconnect, ...options }: ReconnectSchedulerOptions) {\n this.onReconnect = onReconnect;\n this.options = options;\n }\n\n schedule(): void {\n if (this.timer !== null) {\n return;\n }\n\n const delay = calculateBackoffDelay(this.attempt, this.options);\n this.attempt += 1;\n\n this.timer = setTimeout(() => {\n this.timer = null;\n this.onReconnect();\n }, delay);\n }\n\n reset(): void {\n this.attempt = 0;\n this.cancel();\n }\n\n cancel(): void {\n if (this.timer !== null) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n}\n","import {\r\n buildDevToolsWsUrl,\r\n DEFAULT_DEVTOOLS_PORT,\r\n DevToolsRole,\r\n isBeginTransactionMessage,\r\n isCommitTransactionMessage,\r\n isDeviceStatusMessage,\r\n isExecuteWriteMessage,\r\n isExportSnapshotErrorMessage,\r\n isPingMessage,\r\n isRefreshErrorMessage,\r\n isRefreshStatusMessage,\r\n isRollbackTransactionMessage,\r\n isSnapshotReadyMessage,\r\n isSnapshotUploadRequestedMessage,\r\n isTransactionStatusMessage,\r\n isWriteErrorMessage,\r\n isWriteResultMessage,\r\n MessageType,\r\n type ClientMessage,\r\n type DeviceMetadata,\r\n type DeviceStatusPayload,\r\n type ExportSnapshotErrorMessage,\r\n type PongMessage,\r\n type RefreshErrorMessage,\r\n type RefreshRequestMessage,\r\n type RefreshStatusMessage,\r\n type RegisterMessage,\r\n type SnapshotReadyMessage,\r\n type SnapshotUploadRequestedMessage,\r\n type TransactionAckMessage,\r\n type TransactionStatusMessage,\r\n type WriteAckMessage,\r\n type WriteErrorMessage,\r\n type WriteResultMessage,\r\n} from '../types/protocol';\r\nimport type { WriteOperation } from '../types/write';\r\nimport { generateDeviceId, generateTransactionId, generateWriteId } from '../utils/ids';\r\nimport { ReconnectScheduler } from '../utils/reconnect';\r\n\r\nexport type ConnectionState = 'connecting' | 'connected' | 'reconnecting' | 'disconnected';\r\n\r\nexport type TransactionState = 'idle' | 'opening' | 'open' | 'committing' | 'rolling_back';\r\n\r\nexport type DevToolsClientOptions = {\r\n serverUrl?: string;\r\n role?: DevToolsRole;\r\n deviceId?: string;\r\n metadata?: DeviceMetadata;\r\n WebSocketImpl?: typeof WebSocket;\r\n onConnect?: () => void;\r\n onDisconnect?: () => void;\r\n onConnectionStateChange?: (state: ConnectionState) => void;\r\n onDeviceStatus?: (status: DeviceStatusPayload) => void;\r\n onSnapshotUploadRequested?: (message: SnapshotUploadRequestedMessage) => void;\r\n onExportSnapshotError?: (message: ExportSnapshotErrorMessage) => void;\r\n onRefreshStatus?: (message: RefreshStatusMessage) => void;\r\n onSnapshotReady?: (message: SnapshotReadyMessage) => void;\r\n onRefreshError?: (message: RefreshErrorMessage) => void;\r\n onBeginTransaction?: (message: import('../types/protocol').BeginTransactionMessage) => void;\r\n onCommitTransaction?: (message: import('../types/protocol').CommitTransactionMessage) => void;\r\n onRollbackTransaction?: (message: import('../types/protocol').RollbackTransactionMessage) => void;\r\n onExecuteWrite?: (message: import('../types/protocol').ExecuteWriteMessage) => void;\r\n onTransactionStatus?: (message: TransactionStatusMessage) => void;\r\n onWriteResult?: (message: WriteResultMessage) => void;\r\n onWriteError?: (message: WriteErrorMessage) => void;\r\n onTransactionStateChange?: (state: TransactionState) => void;\r\n onError?: (error: Error) => void;\r\n};\r\n\r\nexport type DevToolsClient = {\r\n connect: () => void;\r\n disconnect: () => void;\r\n getConnectionState: () => ConnectionState;\r\n getLastConnectionError: () => string | null;\r\n getDeviceStatus: () => DeviceStatusPayload | null;\r\n getDeviceId: () => string | undefined;\r\n getServerUrl: () => string;\r\n setServerUrl: (url: string) => void;\r\n send: (message: ClientMessageInput) => void;\r\n requestRefresh: (deviceId: string) => void;\r\n requestExportSnapshot: () => void;\r\n sendTransactionAck: (message: Omit<TransactionAckMessage, 'timestamp' | 'type'>) => void;\r\n sendWriteAck: (message: Omit<WriteAckMessage, 'timestamp' | 'type'>) => void;\r\n beginTransaction: (deviceId: string) => Promise<void>;\r\n commitTransaction: () => Promise<void>;\r\n rollbackTransaction: () => Promise<void>;\r\n executeWrite: (operation: WriteOperation) => Promise<{ rowsAffected: number }>;\r\n getTransactionState: () => TransactionState;\r\n getActiveTransactionId: () => string | null;\r\n};\r\n\r\ntype ClientMessageInput =\r\n | Omit<RegisterMessage, 'timestamp'>\r\n | Omit<PongMessage, 'timestamp'>\r\n | Omit<RefreshRequestMessage, 'timestamp'>\r\n | Omit<import('../types/protocol').ExportSnapshotRequestMessage, 'timestamp'>\r\n | Omit<TransactionAckMessage, 'timestamp'>\r\n | Omit<WriteAckMessage, 'timestamp'>\r\n | Omit<import('../types/protocol').BeginTransactionRequestMessage, 'timestamp'>\r\n | Omit<import('../types/protocol').CommitTransactionRequestMessage, 'timestamp'>\r\n | Omit<import('../types/protocol').RollbackTransactionRequestMessage, 'timestamp'>\r\n | Omit<import('../types/protocol').WriteRequestMessage, 'timestamp'>;\r\n\r\nconst WRITE_TIMEOUT_MS = 30_000;\r\n\r\nexport function createDevToolsClient(options: DevToolsClientOptions = {}): DevToolsClient {\r\n const role = options.role ?? DevToolsRole.MOBILE;\r\n const WebSocketImpl = options.WebSocketImpl ?? globalThis.WebSocket;\r\n\r\n if (!WebSocketImpl) {\r\n throw new Error('WebSocket is not available in this environment.');\r\n }\r\n\r\n let socket: InstanceType<typeof WebSocketImpl> | null = null;\r\n let deviceStatus: DeviceStatusPayload | null = null;\r\n let connectionState: ConnectionState = 'disconnected';\r\n let lastConnectionError: string | null = null;\r\n let intentionalDisconnect = false;\r\n let transactionState: TransactionState = 'idle';\r\n let activeTransactionId: string | null = null;\r\n let activeDeviceId: string | null = null;\r\n\r\n const pendingTransaction = new Map<\r\n string,\r\n { resolve: () => void; reject: (error: Error) => void; action: 'begin' | 'commit' | 'rollback' }\r\n >();\r\n const pendingWrites = new Map<\r\n string,\r\n { resolve: (result: { rowsAffected: number }) => void; reject: (error: Error) => void }\r\n >();\r\n\r\n const deviceId =\r\n role === DevToolsRole.MOBILE ? (options.deviceId ?? generateDeviceId()) : undefined;\r\n\r\n let wsUrl =\r\n options.serverUrl ?? buildDevToolsWsUrl('localhost', DEFAULT_DEVTOOLS_PORT);\r\n\r\n const setConnectionState = (state: ConnectionState): void => {\r\n if (connectionState === state) {\r\n return;\r\n }\r\n\r\n connectionState = state;\r\n options.onConnectionStateChange?.(state);\r\n };\r\n\r\n const setTransactionState = (state: TransactionState): void => {\r\n if (transactionState === state) {\r\n return;\r\n }\r\n\r\n transactionState = state;\r\n options.onTransactionStateChange?.(state);\r\n };\r\n\r\n const resetTransaction = (): void => {\r\n setTransactionState('idle');\r\n activeTransactionId = null;\r\n activeDeviceId = null;\r\n };\r\n\r\n const rejectPendingTransaction = (transactionId: string, error: Error): void => {\r\n const pending = pendingTransaction.get(transactionId);\r\n\r\n if (pending) {\r\n pending.reject(error);\r\n pendingTransaction.delete(transactionId);\r\n }\r\n };\r\n\r\n const rejectAllPending = (error: Error): void => {\r\n for (const [id, pending] of pendingTransaction) {\r\n pending.reject(error);\r\n pendingTransaction.delete(id);\r\n }\r\n\r\n for (const [id, pending] of pendingWrites) {\r\n pending.reject(error);\r\n pendingWrites.delete(id);\r\n }\r\n\r\n resetTransaction();\r\n };\r\n\r\n const reconnectScheduler = new ReconnectScheduler({\r\n onReconnect: () => {\r\n openSocket();\r\n },\r\n });\r\n\r\n const send = (message: ClientMessageInput): void => {\r\n if (!socket || socket.readyState !== WebSocketImpl.OPEN) {\r\n return;\r\n }\r\n\r\n socket.send(JSON.stringify({ ...message, timestamp: Date.now() }));\r\n };\r\n\r\n const sendRegister = (): void => {\r\n send({\r\n type: MessageType.REGISTER,\r\n role,\r\n ...(deviceId ? { deviceId } : {}),\r\n ...(options.metadata ? { metadata: options.metadata } : {}),\r\n });\r\n };\r\n\r\n const handleServerMessage = (parsed: unknown): void => {\r\n if (isPingMessage(parsed)) {\r\n send({\r\n type: MessageType.PONG,\r\n pingId: parsed.pingId,\r\n });\r\n return;\r\n }\r\n\r\n if (isDeviceStatusMessage(parsed)) {\r\n deviceStatus = parsed.payload;\r\n options.onDeviceStatus?.(parsed.payload);\r\n return;\r\n }\r\n\r\n if (isSnapshotUploadRequestedMessage(parsed)) {\r\n options.onSnapshotUploadRequested?.(parsed);\r\n return;\r\n }\r\n\r\n if (isExportSnapshotErrorMessage(parsed)) {\r\n options.onExportSnapshotError?.(parsed);\r\n return;\r\n }\r\n\r\n if (isRefreshStatusMessage(parsed)) {\r\n options.onRefreshStatus?.(parsed);\r\n return;\r\n }\r\n\r\n if (isSnapshotReadyMessage(parsed)) {\r\n options.onSnapshotReady?.(parsed);\r\n return;\r\n }\r\n\r\n if (isRefreshErrorMessage(parsed)) {\r\n options.onRefreshError?.(parsed);\r\n return;\r\n }\r\n\r\n if (isBeginTransactionMessage(parsed)) {\r\n options.onBeginTransaction?.(parsed);\r\n return;\r\n }\r\n\r\n if (isCommitTransactionMessage(parsed)) {\r\n options.onCommitTransaction?.(parsed);\r\n return;\r\n }\r\n\r\n if (isRollbackTransactionMessage(parsed)) {\r\n options.onRollbackTransaction?.(parsed);\r\n return;\r\n }\r\n\r\n if (isExecuteWriteMessage(parsed)) {\r\n options.onExecuteWrite?.(parsed);\r\n return;\r\n }\r\n\r\n if (isTransactionStatusMessage(parsed)) {\r\n options.onTransactionStatus?.(parsed);\r\n\r\n if (role !== DevToolsRole.BROWSER) {\r\n return;\r\n }\r\n\r\n const pending = pendingTransaction.get(parsed.transactionId);\r\n\r\n if (parsed.state === 'open' && pending?.action === 'begin') {\r\n setTransactionState('open');\r\n activeTransactionId = parsed.transactionId;\r\n activeDeviceId = parsed.deviceId;\r\n pending.resolve();\r\n pendingTransaction.delete(parsed.transactionId);\r\n return;\r\n }\r\n\r\n if (parsed.state === 'idle' && pending && (pending.action === 'commit' || pending.action === 'rollback')) {\r\n resetTransaction();\r\n pending.resolve();\r\n pendingTransaction.delete(parsed.transactionId);\r\n return;\r\n }\r\n\r\n if (parsed.state === 'failed') {\r\n rejectPendingTransaction(\r\n parsed.transactionId,\r\n new Error(parsed.message ?? 'Transaction failed'),\r\n );\r\n resetTransaction();\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (isWriteResultMessage(parsed)) {\r\n options.onWriteResult?.(parsed);\r\n\r\n const pending = pendingWrites.get(parsed.writeId);\r\n\r\n if (pending) {\r\n pending.resolve({ rowsAffected: parsed.rowsAffected });\r\n pendingWrites.delete(parsed.writeId);\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (isWriteErrorMessage(parsed)) {\r\n options.onWriteError?.(parsed);\r\n\r\n const error = new Error(parsed.message);\r\n\r\n if (parsed.writeId) {\r\n const pendingWrite = pendingWrites.get(parsed.writeId);\r\n\r\n if (pendingWrite) {\r\n pendingWrite.reject(error);\r\n pendingWrites.delete(parsed.writeId);\r\n }\r\n } else {\r\n rejectPendingTransaction(parsed.transactionId, error);\r\n resetTransaction();\r\n }\r\n }\r\n };\r\n\r\n const openSocket = (): void => {\r\n if (\r\n socket &&\r\n (socket.readyState === WebSocketImpl.OPEN || socket.readyState === WebSocketImpl.CONNECTING)\r\n ) {\r\n return;\r\n }\r\n\r\n setConnectionState(intentionalDisconnect ? 'disconnected' : connectionState === 'disconnected' ? 'connecting' : 'reconnecting');\r\n\r\n socket = new WebSocketImpl(wsUrl);\r\n\r\n socket.addEventListener('open', () => {\r\n reconnectScheduler.reset();\r\n lastConnectionError = null;\r\n setConnectionState('connected');\r\n options.onConnect?.();\r\n sendRegister();\r\n });\r\n\r\n socket.addEventListener('message', (event) => {\r\n let parsed: unknown;\r\n\r\n try {\r\n parsed = JSON.parse(String(event.data));\r\n } catch {\r\n return;\r\n }\r\n\r\n handleServerMessage(parsed);\r\n });\r\n\r\n socket.addEventListener('close', () => {\r\n socket = null;\r\n options.onDisconnect?.();\r\n rejectAllPending(new Error('Disconnected from DevTools hub'));\r\n\r\n if (intentionalDisconnect) {\r\n setConnectionState('disconnected');\r\n return;\r\n }\r\n\r\n setConnectionState('reconnecting');\r\n reconnectScheduler.schedule();\r\n });\r\n\r\n socket.addEventListener('error', () => {\r\n const error = new Error(`WebSocket connection failed: ${wsUrl}`);\r\n lastConnectionError = error.message;\r\n options.onError?.(error);\r\n });\r\n };\r\n\r\n const connect = (): void => {\r\n intentionalDisconnect = false;\r\n openSocket();\r\n };\r\n\r\n const disconnect = (): void => {\r\n intentionalDisconnect = true;\r\n reconnectScheduler.cancel();\r\n socket?.close();\r\n socket = null;\r\n rejectAllPending(new Error('Disconnected'));\r\n setConnectionState('disconnected');\r\n };\r\n\r\n const setServerUrl = (url: string): void => {\r\n wsUrl = url;\r\n const wasConnected =\r\n connectionState === 'connected' ||\r\n connectionState === 'connecting' ||\r\n connectionState === 'reconnecting';\r\n\r\n disconnect();\r\n intentionalDisconnect = false;\r\n\r\n if (wasConnected) {\r\n connect();\r\n }\r\n };\r\n\r\n const requestRefresh = (targetDeviceId: string): void => {\r\n send({\r\n type: MessageType.REFRESH_REQUEST,\r\n deviceId: targetDeviceId,\r\n refreshType: 'snapshot',\r\n });\r\n };\r\n\r\n const requestExportSnapshot = (): void => {\r\n send({\r\n type: MessageType.EXPORT_SNAPSHOT_REQUEST,\r\n refreshType: 'snapshot',\r\n });\r\n };\r\n\r\n const sendTransactionAck = (message: Omit<TransactionAckMessage, 'timestamp' | 'type'>): void => {\r\n send({\r\n type: MessageType.TRANSACTION_ACK,\r\n ...message,\r\n });\r\n };\r\n\r\n const sendWriteAck = (message: Omit<WriteAckMessage, 'timestamp' | 'type'>): void => {\r\n send({\r\n type: MessageType.WRITE_ACK,\r\n ...message,\r\n });\r\n };\r\n\r\n const waitForTransaction = (\r\n transactionId: string,\r\n action: 'begin' | 'commit' | 'rollback',\r\n ): Promise<void> => {\r\n return new Promise((resolve, reject) => {\r\n const timer = setTimeout(() => {\r\n pendingTransaction.delete(transactionId);\r\n reject(new Error(`Transaction ${action} timed out`));\r\n }, WRITE_TIMEOUT_MS);\r\n\r\n pendingTransaction.set(transactionId, {\r\n action,\r\n resolve: () => {\r\n clearTimeout(timer);\r\n resolve();\r\n },\r\n reject: (error) => {\r\n clearTimeout(timer);\r\n reject(error);\r\n },\r\n });\r\n });\r\n };\r\n\r\n const beginTransaction = async (targetDeviceId: string): Promise<void> => {\r\n if (role !== DevToolsRole.BROWSER) {\r\n throw new Error('beginTransaction is only available for browser clients');\r\n }\r\n\r\n if (transactionState !== 'idle') {\r\n throw new Error('A transaction is already active');\r\n }\r\n\r\n const transactionId = generateTransactionId();\r\n setTransactionState('opening');\r\n activeTransactionId = transactionId;\r\n activeDeviceId = targetDeviceId;\r\n\r\n const promise = waitForTransaction(transactionId, 'begin');\r\n\r\n send({\r\n type: MessageType.BEGIN_TRANSACTION_REQUEST,\r\n transactionId,\r\n deviceId: targetDeviceId,\r\n });\r\n\r\n await promise;\r\n };\r\n\r\n const commitTransaction = async (): Promise<void> => {\r\n if (role !== DevToolsRole.BROWSER) {\r\n throw new Error('commitTransaction is only available for browser clients');\r\n }\r\n\r\n if (!activeTransactionId || !activeDeviceId || transactionState !== 'open') {\r\n throw new Error('No open transaction');\r\n }\r\n\r\n const transactionId = activeTransactionId;\r\n const deviceIdForCommit = activeDeviceId;\r\n setTransactionState('committing');\r\n\r\n const promise = waitForTransaction(transactionId, 'commit');\r\n\r\n send({\r\n type: MessageType.COMMIT_TRANSACTION_REQUEST,\r\n transactionId,\r\n deviceId: deviceIdForCommit,\r\n });\r\n\r\n await promise;\r\n };\r\n\r\n const rollbackTransaction = async (): Promise<void> => {\r\n if (role !== DevToolsRole.BROWSER) {\r\n throw new Error('rollbackTransaction is only available for browser clients');\r\n }\r\n\r\n if (!activeTransactionId || !activeDeviceId) {\r\n throw new Error('No active transaction');\r\n }\r\n\r\n const transactionId = activeTransactionId;\r\n const deviceIdForRollback = activeDeviceId;\r\n setTransactionState('rolling_back');\r\n\r\n const promise = waitForTransaction(transactionId, 'rollback');\r\n\r\n send({\r\n type: MessageType.ROLLBACK_TRANSACTION_REQUEST,\r\n transactionId,\r\n deviceId: deviceIdForRollback,\r\n });\r\n\r\n await promise;\r\n };\r\n\r\n const executeWrite = async (operation: WriteOperation): Promise<{ rowsAffected: number }> => {\r\n if (role !== DevToolsRole.BROWSER) {\r\n throw new Error('executeWrite is only available for browser clients');\r\n }\r\n\r\n if (!activeTransactionId || !activeDeviceId || transactionState !== 'open') {\r\n throw new Error('No open transaction');\r\n }\r\n\r\n const writeId = generateWriteId();\r\n\r\n const promise = new Promise<{ rowsAffected: number }>((resolve, reject) => {\r\n const timer = setTimeout(() => {\r\n pendingWrites.delete(writeId);\r\n reject(new Error('Write operation timed out'));\r\n }, WRITE_TIMEOUT_MS);\r\n\r\n pendingWrites.set(writeId, {\r\n resolve: (result) => {\r\n clearTimeout(timer);\r\n resolve(result);\r\n },\r\n reject: (error) => {\r\n clearTimeout(timer);\r\n reject(error);\r\n },\r\n });\r\n });\r\n\r\n send({\r\n type: MessageType.WRITE_REQUEST,\r\n writeId,\r\n transactionId: activeTransactionId,\r\n deviceId: activeDeviceId,\r\n operation,\r\n });\r\n\r\n return promise;\r\n };\r\n\r\n return {\r\n connect,\r\n disconnect,\r\n getConnectionState: () => connectionState,\r\n getLastConnectionError: () => lastConnectionError,\r\n getDeviceStatus: () => deviceStatus,\r\n getDeviceId: () => deviceId,\r\n getServerUrl: () => wsUrl,\r\n setServerUrl,\r\n send,\r\n requestRefresh,\r\n requestExportSnapshot,\r\n sendTransactionAck,\r\n sendWriteAck,\r\n beginTransaction,\r\n commitTransaction,\r\n rollbackTransaction,\r\n executeWrite,\r\n getTransactionState: () => transactionState,\r\n getActiveTransactionId: () => activeTransactionId,\r\n };\r\n}\r\n","export async function fetchSnapshot(downloadUrl: string): Promise<ArrayBuffer> {\r\n let response: Response;\r\n\r\n try {\r\n response = await fetch(downloadUrl);\r\n } catch (error) {\r\n const networkMessage = error instanceof Error ? error.message : String(error);\r\n throw new Error(\r\n `Network error fetching snapshot from ${downloadUrl}. ${networkMessage} If the web UI runs on a different port than the hub, ensure CORS is enabled on the hub HTTP API.`,\r\n );\r\n }\r\n\r\n if (!response.ok) {\r\n throw new Error(\r\n `Failed to fetch snapshot from ${downloadUrl}: ${response.status} ${response.statusText}`,\r\n );\r\n }\r\n\r\n return response.arrayBuffer();\r\n}\r\n","import { wsUrlToHttpUrl } from '../types/protocol';\r\n\r\n/**\r\n * React Native fetch does not support `new Blob([ArrayBuffer])`.\r\n * Pass the Uint8Array directly as the request body.\r\n */\r\nexport function createSnapshotUploadBody(bytes: Uint8Array): Uint8Array {\r\n return bytes;\r\n}\r\n\r\n/**\r\n * The hub advertises snapshot URLs using its bind address (often localhost).\r\n * Mobile clients reach the hub via a different host (10.0.2.2, LAN IP, etc.).\r\n * Rewrite the upload URL to match the WebSocket hub URL the device already uses.\r\n */\r\nexport function resolveSnapshotUploadUrl(uploadUrl: string, hubWsUrl: string): string {\r\n const hubHttpBase = wsUrlToHttpUrl(hubWsUrl);\r\n const target = new URL(uploadUrl);\r\n const hub = new URL(hubHttpBase.endsWith('/') ? hubHttpBase : `${hubHttpBase}/`);\r\n\r\n target.protocol = hub.protocol;\r\n target.hostname = hub.hostname;\r\n target.port = hub.port;\r\n\r\n return target.toString();\r\n}\r\n\r\nexport type UploadSnapshotOptions = {\r\n kind: string;\r\n mimeType: string;\r\n kindHeader: string;\r\n mimeHeader: string;\r\n databaseName?: string;\r\n nameHeader?: string;\r\n};\r\n\r\nexport async function uploadSnapshot(\r\n uploadUrl: string,\r\n bytes: Uint8Array,\r\n options: UploadSnapshotOptions,\r\n): Promise<void> {\r\n const headers: Record<string, string> = {\r\n 'Content-Type': 'application/octet-stream',\r\n [options.kindHeader]: options.kind,\r\n [options.mimeHeader]: options.mimeType,\r\n };\r\n\r\n if (options.databaseName && options.nameHeader) {\r\n headers[options.nameHeader] = options.databaseName;\r\n }\r\n\r\n const response = await fetch(uploadUrl, {\r\n method: 'POST',\r\n headers,\r\n body: createSnapshotUploadBody(bytes) as BodyInit,\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`Upload failed with status ${response.status}`);\r\n }\r\n}\r\n","import type { DatabaseAdapter } from '../types/adapter';\r\nimport {\r\n buildDeviceSnapshotUrl,\r\n wsUrlToHttpUrl,\r\n type SnapshotUploadRequestedMessage,\r\n} from '../types/protocol';\r\nimport { SNAPSHOT_KIND_HEADER, SNAPSHOT_MIME_HEADER, SNAPSHOT_NAME_HEADER } from '../types/snapshot';\r\nimport { uploadSnapshot } from './snapshotUpload';\r\n\r\nexport type HandleDeviceSnapshotOptions = {\r\n /** WebSocket URL of the connected hub — used to build the upload URL on mobile. */\r\n hubServerUrl?: string;\r\n /** This mobile client's device ID — upload is ignored when it does not match. */\r\n deviceId?: string;\r\n};\r\n\r\nexport async function handleDeviceSnapshotUpload(\r\n database: DatabaseAdapter | undefined,\r\n message: SnapshotUploadRequestedMessage,\r\n options: HandleDeviceSnapshotOptions = {},\r\n): Promise<void> {\r\n if (options.deviceId && message.deviceId !== options.deviceId) {\r\n return;\r\n }\r\n\r\n if (!database) {\r\n throw new Error('No database adapter configured');\r\n }\r\n\r\n if (!options.hubServerUrl) {\r\n throw new Error('hubServerUrl is required to upload a device snapshot');\r\n }\r\n\r\n const snapshot = await database.exportSnapshot();\r\n const hubHttp = wsUrlToHttpUrl(options.hubServerUrl);\r\n const uploadUrl = buildDeviceSnapshotUrl(hubHttp, message.deviceId);\r\n\r\n await uploadSnapshot(uploadUrl, snapshot.bytes, {\r\n kind: snapshot.kind,\r\n mimeType: snapshot.mimeType,\r\n kindHeader: SNAPSHOT_KIND_HEADER,\r\n mimeHeader: SNAPSHOT_MIME_HEADER,\r\n databaseName: database.name,\r\n nameHeader: SNAPSHOT_NAME_HEADER,\r\n });\r\n}\r\n","import type { RefreshErrorCode } from '../types/protocol';\r\n\r\n/** @deprecated Use formatRefreshErrorMessage */\r\nexport function formatSyncErrorMessage(code: RefreshErrorCode, message: string): string {\r\n return formatRefreshErrorMessage(code, message);\r\n}\r\n\r\nexport function formatRefreshErrorMessage(code: RefreshErrorCode, message: string): string {\r\n switch (code) {\r\n case 'DEVICE_OFFLINE':\r\n return 'Selected device disconnected. Reconnect the mobile app and try again.';\r\n case 'REFRESH_IN_PROGRESS':\r\n return 'A refresh is already in progress for this device.';\r\n case 'EXPORT_FAILED':\r\n return `Device failed to export or upload snapshot: ${message}`;\r\n case 'UPLOAD_FAILED':\r\n return `Snapshot upload failed on the hub: ${message}`;\r\n case 'TIMEOUT':\r\n return 'Timed out waiting for the device to upload a snapshot.';\r\n case 'SNAPSHOT_NOT_FOUND':\r\n return 'Snapshot expired or was not found. Click Refresh again.';\r\n case 'INVALID_REQUEST':\r\n return `Invalid refresh request: ${message}`;\r\n default:\r\n return message;\r\n }\r\n}\r\n"]}
|
package/dist/client/index.d.cts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
export { C as ConnectionState, D as DevToolsClient, a as DevToolsClientOptions,
|
|
1
|
+
export { C as ConnectionState, D as DevToolsClient, a as DevToolsClientOptions, H as HandleDeviceSnapshotOptions, T as TransactionState, c as createDevToolsClient, f as fetchSnapshot, h as handleDeviceSnapshotUpload } from '../handleDeviceSnapshot-CIZ_00fE.cjs';
|
|
2
|
+
export { D as DeviceExportMeta, L as ListedDeviceExport, a as ListedProjectDatabase, P as ProjectDatabaseMeta, R as ResolveProjectDatabaseUrlOptions, f as fetchDeviceExportDatabase, b as fetchDeviceExportMeta, c as fetchDeviceExports, d as fetchProjectDatabase, e as fetchProjectDatabaseMeta, g as fetchProjectDatabases, r as resolveDeviceExportDatabaseMetaUrl, h as resolveDeviceExportDatabaseUrl, i as resolveDeviceExportsUrl, j as resolveProjectDatabaseMetaUrl, k as resolveProjectDatabaseUrl, l as resolveProjectDatabasesUrl } from '../resolveDeviceDatabaseUrl-DhRP-h1Y.cjs';
|
|
2
3
|
import { RefreshErrorCode, DeviceStatusPayload, MobileDeviceInfo } from '../types/protocol.cjs';
|
|
3
4
|
import '../write-C3toEIMs.cjs';
|
|
4
|
-
import '../adapter-
|
|
5
|
-
import '../snapshot-
|
|
5
|
+
import '../adapter-DQyQ5ycj.cjs';
|
|
6
|
+
import '../snapshot-Dknp_qP1.cjs';
|
|
6
7
|
|
|
7
8
|
type ResolveSnapshotDownloadUrlOptions = {
|
|
8
9
|
/**
|
package/dist/client/index.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
export { C as ConnectionState, D as DevToolsClient, a as DevToolsClientOptions,
|
|
1
|
+
export { C as ConnectionState, D as DevToolsClient, a as DevToolsClientOptions, H as HandleDeviceSnapshotOptions, T as TransactionState, c as createDevToolsClient, f as fetchSnapshot, h as handleDeviceSnapshotUpload } from '../handleDeviceSnapshot-DF9sS1Pm.js';
|
|
2
|
+
export { D as DeviceExportMeta, L as ListedDeviceExport, a as ListedProjectDatabase, P as ProjectDatabaseMeta, R as ResolveProjectDatabaseUrlOptions, f as fetchDeviceExportDatabase, b as fetchDeviceExportMeta, c as fetchDeviceExports, d as fetchProjectDatabase, e as fetchProjectDatabaseMeta, g as fetchProjectDatabases, r as resolveDeviceExportDatabaseMetaUrl, h as resolveDeviceExportDatabaseUrl, i as resolveDeviceExportsUrl, j as resolveProjectDatabaseMetaUrl, k as resolveProjectDatabaseUrl, l as resolveProjectDatabasesUrl } from '../resolveDeviceDatabaseUrl-DhRP-h1Y.js';
|
|
2
3
|
import { RefreshErrorCode, DeviceStatusPayload, MobileDeviceInfo } from '../types/protocol.js';
|
|
3
4
|
import '../write-C3toEIMs.js';
|
|
4
|
-
import '../adapter-
|
|
5
|
-
import '../snapshot-
|
|
5
|
+
import '../adapter-cIF5P6qI.js';
|
|
6
|
+
import '../snapshot-Dknp_qP1.js';
|
|
6
7
|
|
|
7
8
|
type ResolveSnapshotDownloadUrlOptions = {
|
|
8
9
|
/**
|
package/dist/client/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { fetchDeviceExportDatabase, fetchDeviceExportMeta, fetchDeviceExports, fetchProjectDatabase, fetchProjectDatabaseMeta, fetchProjectDatabases, resolveDeviceExportDatabaseMetaUrl, resolveDeviceExportDatabaseUrl, resolveDeviceExportsUrl, resolveProjectDatabaseMetaUrl, resolveProjectDatabaseUrl, resolveProjectDatabasesUrl } from '../chunk-S4Z7A4TW.js';
|
|
2
|
+
export { createDevToolsClient, createSnapshotUploadBody, fetchSnapshot, formatRefreshErrorMessage, formatSyncErrorMessage, handleDeviceSnapshotUpload, resolveSnapshotUploadUrl, uploadSnapshot } from '../chunk-UNVCJMJK.js';
|
|
2
3
|
import '../chunk-AZECU6D7.js';
|
|
3
4
|
import { DEVICE_SNAPSHOT_API_PATH, buildDeviceSnapshotUrl, wsUrlToHttpUrl } from '../chunk-CPVVIH5G.js';
|
|
4
5
|
import '../chunk-HIDZTOJ3.js';
|
|
5
|
-
import '../chunk-DGUM43GV.js';
|
|
6
6
|
|
|
7
7
|
// src/client/resolveSnapshotDownloadUrl.ts
|
|
8
8
|
function resolveSnapshotDownloadUrl(hubWsUrl, deviceId, options = {}) {
|
|
@@ -289,4 +289,4 @@ type DevToolsServer = {
|
|
|
289
289
|
};
|
|
290
290
|
declare function createDevToolsServer(options?: DevToolsServerOptions): Promise<DevToolsServer>;
|
|
291
291
|
|
|
292
|
-
export { type ConnectedClient as C, type DevToolsServer as D, Heartbeat as H, MessageRouter as M, type OutboundMessage as O, type PendingRefresh as P, RefreshCoordinator as R, SnapshotStore as S,
|
|
292
|
+
export { type ConnectedClient as C, type DevToolsServer as D, Heartbeat as H, MessageRouter as M, type OutboundMessage as O, type PendingRefresh as P, RefreshCoordinator as R, SnapshotStore as S, type DevToolsServerOptions as a, ConnectionManager as b, createDevToolsServer as c, DeviceRegistry as d, PendingRefreshStore as e, type StoredSnapshot as f };
|
|
@@ -289,4 +289,4 @@ type DevToolsServer = {
|
|
|
289
289
|
};
|
|
290
290
|
declare function createDevToolsServer(options?: DevToolsServerOptions): Promise<DevToolsServer>;
|
|
291
291
|
|
|
292
|
-
export { type ConnectedClient as C, type DevToolsServer as D, Heartbeat as H, MessageRouter as M, type OutboundMessage as O, type PendingRefresh as P, RefreshCoordinator as R, SnapshotStore as S,
|
|
292
|
+
export { type ConnectedClient as C, type DevToolsServer as D, Heartbeat as H, MessageRouter as M, type OutboundMessage as O, type PendingRefresh as P, RefreshCoordinator as R, SnapshotStore as S, type DevToolsServerOptions as a, ConnectionManager as b, createDevToolsServer as c, DeviceRegistry as d, PendingRefreshStore as e, type StoredSnapshot as f };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DeviceStatusPayload, RegisterMessage, PongMessage, RefreshRequestMessage, ExportSnapshotRequestMessage, TransactionAckMessage, WriteAckMessage, BeginTransactionRequestMessage, CommitTransactionRequestMessage, RollbackTransactionRequestMessage, WriteRequestMessage, DevToolsRole, DeviceMetadata, SnapshotUploadRequestedMessage, ExportSnapshotErrorMessage, RefreshStatusMessage, SnapshotReadyMessage, RefreshErrorMessage, BeginTransactionMessage, CommitTransactionMessage, RollbackTransactionMessage, ExecuteWriteMessage, TransactionStatusMessage, WriteResultMessage, WriteErrorMessage } from './types/protocol.cjs';
|
|
2
2
|
import { a as WriteOperation } from './write-C3toEIMs.cjs';
|
|
3
|
-
import { D as DatabaseAdapter } from './adapter-
|
|
3
|
+
import { D as DatabaseAdapter } from './adapter-DQyQ5ycj.cjs';
|
|
4
4
|
|
|
5
5
|
type ConnectionState = 'connecting' | 'connected' | 'reconnecting' | 'disconnected';
|
|
6
6
|
type TransactionState = 'idle' | 'opening' | 'open' | 'committing' | 'rolling_back';
|
|
@@ -55,54 +55,6 @@ type DevToolsClient = {
|
|
|
55
55
|
type ClientMessageInput = Omit<RegisterMessage, 'timestamp'> | Omit<PongMessage, 'timestamp'> | Omit<RefreshRequestMessage, 'timestamp'> | Omit<ExportSnapshotRequestMessage, 'timestamp'> | Omit<TransactionAckMessage, 'timestamp'> | Omit<WriteAckMessage, 'timestamp'> | Omit<BeginTransactionRequestMessage, 'timestamp'> | Omit<CommitTransactionRequestMessage, 'timestamp'> | Omit<RollbackTransactionRequestMessage, 'timestamp'> | Omit<WriteRequestMessage, 'timestamp'>;
|
|
56
56
|
declare function createDevToolsClient(options?: DevToolsClientOptions): DevToolsClient;
|
|
57
57
|
|
|
58
|
-
type ResolveProjectDatabaseUrlOptions = {
|
|
59
|
-
useSameOriginApi?: boolean;
|
|
60
|
-
};
|
|
61
|
-
declare function resolveProjectDatabaseUrl(serverUrl: string, options?: ResolveProjectDatabaseUrlOptions): string;
|
|
62
|
-
declare function resolveProjectDatabaseMetaUrl(serverUrl: string, options?: ResolveProjectDatabaseUrlOptions): string;
|
|
63
|
-
declare function resolveProjectDatabasesUrl(serverUrl: string, options?: ResolveProjectDatabaseUrlOptions): string;
|
|
64
|
-
|
|
65
|
-
type ProjectDatabaseMeta = {
|
|
66
|
-
exists: boolean;
|
|
67
|
-
relativePath?: string;
|
|
68
|
-
absolutePath?: string;
|
|
69
|
-
kind?: string;
|
|
70
|
-
mimeType?: string;
|
|
71
|
-
databaseName?: string;
|
|
72
|
-
size?: number;
|
|
73
|
-
updatedAt?: number;
|
|
74
|
-
source?: 'active' | 'device';
|
|
75
|
-
deviceId?: string;
|
|
76
|
-
};
|
|
77
|
-
type ListedProjectDatabase = {
|
|
78
|
-
id: string;
|
|
79
|
-
label: string;
|
|
80
|
-
relativePath: string;
|
|
81
|
-
source: 'active' | 'device';
|
|
82
|
-
deviceId?: string;
|
|
83
|
-
bundleId?: string;
|
|
84
|
-
storageKey?: string;
|
|
85
|
-
databaseName?: string;
|
|
86
|
-
size: number;
|
|
87
|
-
updatedAt: number;
|
|
88
|
-
};
|
|
89
|
-
/** @deprecated Use device-scoped `fetchDeviceExportMeta` instead. Proxies to the newest device export. */
|
|
90
|
-
declare function fetchProjectDatabaseMeta(serverUrl: string, options?: ResolveProjectDatabaseUrlOptions): Promise<ProjectDatabaseMeta>;
|
|
91
|
-
/** @deprecated Use device-scoped `fetchDeviceExportDatabase` instead. Proxies to the newest device export. */
|
|
92
|
-
declare function fetchProjectDatabase(serverUrl: string, options?: ResolveProjectDatabaseUrlOptions): Promise<ArrayBuffer>;
|
|
93
|
-
/** @deprecated Use `fetchDeviceExports` instead. */
|
|
94
|
-
declare function fetchProjectDatabases(serverUrl: string, options?: ResolveProjectDatabaseUrlOptions): Promise<ListedProjectDatabase[]>;
|
|
95
|
-
|
|
96
|
-
type DeviceExportMeta = ProjectDatabaseMeta;
|
|
97
|
-
type ListedDeviceExport = ListedProjectDatabase;
|
|
98
|
-
declare function fetchDeviceExportMeta(serverUrl: string, deviceId: string, options?: ResolveProjectDatabaseUrlOptions): Promise<DeviceExportMeta>;
|
|
99
|
-
declare function fetchDeviceExportDatabase(serverUrl: string, deviceId: string, options?: ResolveProjectDatabaseUrlOptions): Promise<ArrayBuffer>;
|
|
100
|
-
declare function fetchDeviceExports(serverUrl: string, options?: ResolveProjectDatabaseUrlOptions): Promise<ListedDeviceExport[]>;
|
|
101
|
-
|
|
102
|
-
declare function resolveDeviceExportDatabaseUrl(serverUrl: string, deviceId: string, options?: ResolveProjectDatabaseUrlOptions): string;
|
|
103
|
-
declare function resolveDeviceExportDatabaseMetaUrl(serverUrl: string, deviceId: string, options?: ResolveProjectDatabaseUrlOptions): string;
|
|
104
|
-
declare function resolveDeviceExportsUrl(serverUrl: string, options?: ResolveProjectDatabaseUrlOptions): string;
|
|
105
|
-
|
|
106
58
|
declare function fetchSnapshot(downloadUrl: string): Promise<ArrayBuffer>;
|
|
107
59
|
|
|
108
60
|
type HandleDeviceSnapshotOptions = {
|
|
@@ -113,4 +65,4 @@ type HandleDeviceSnapshotOptions = {
|
|
|
113
65
|
};
|
|
114
66
|
declare function handleDeviceSnapshotUpload(database: DatabaseAdapter | undefined, message: SnapshotUploadRequestedMessage, options?: HandleDeviceSnapshotOptions): Promise<void>;
|
|
115
67
|
|
|
116
|
-
export { type ConnectionState as C, type DevToolsClient as D, type HandleDeviceSnapshotOptions as H, type
|
|
68
|
+
export { type ConnectionState as C, type DevToolsClient as D, type HandleDeviceSnapshotOptions as H, type TransactionState as T, type DevToolsClientOptions as a, createDevToolsClient as c, fetchSnapshot as f, handleDeviceSnapshotUpload as h };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DeviceStatusPayload, RegisterMessage, PongMessage, RefreshRequestMessage, ExportSnapshotRequestMessage, TransactionAckMessage, WriteAckMessage, BeginTransactionRequestMessage, CommitTransactionRequestMessage, RollbackTransactionRequestMessage, WriteRequestMessage, DevToolsRole, DeviceMetadata, SnapshotUploadRequestedMessage, ExportSnapshotErrorMessage, RefreshStatusMessage, SnapshotReadyMessage, RefreshErrorMessage, BeginTransactionMessage, CommitTransactionMessage, RollbackTransactionMessage, ExecuteWriteMessage, TransactionStatusMessage, WriteResultMessage, WriteErrorMessage } from './types/protocol.js';
|
|
2
2
|
import { a as WriteOperation } from './write-C3toEIMs.js';
|
|
3
|
-
import { D as DatabaseAdapter } from './adapter-
|
|
3
|
+
import { D as DatabaseAdapter } from './adapter-cIF5P6qI.js';
|
|
4
4
|
|
|
5
5
|
type ConnectionState = 'connecting' | 'connected' | 'reconnecting' | 'disconnected';
|
|
6
6
|
type TransactionState = 'idle' | 'opening' | 'open' | 'committing' | 'rolling_back';
|
|
@@ -55,54 +55,6 @@ type DevToolsClient = {
|
|
|
55
55
|
type ClientMessageInput = Omit<RegisterMessage, 'timestamp'> | Omit<PongMessage, 'timestamp'> | Omit<RefreshRequestMessage, 'timestamp'> | Omit<ExportSnapshotRequestMessage, 'timestamp'> | Omit<TransactionAckMessage, 'timestamp'> | Omit<WriteAckMessage, 'timestamp'> | Omit<BeginTransactionRequestMessage, 'timestamp'> | Omit<CommitTransactionRequestMessage, 'timestamp'> | Omit<RollbackTransactionRequestMessage, 'timestamp'> | Omit<WriteRequestMessage, 'timestamp'>;
|
|
56
56
|
declare function createDevToolsClient(options?: DevToolsClientOptions): DevToolsClient;
|
|
57
57
|
|
|
58
|
-
type ResolveProjectDatabaseUrlOptions = {
|
|
59
|
-
useSameOriginApi?: boolean;
|
|
60
|
-
};
|
|
61
|
-
declare function resolveProjectDatabaseUrl(serverUrl: string, options?: ResolveProjectDatabaseUrlOptions): string;
|
|
62
|
-
declare function resolveProjectDatabaseMetaUrl(serverUrl: string, options?: ResolveProjectDatabaseUrlOptions): string;
|
|
63
|
-
declare function resolveProjectDatabasesUrl(serverUrl: string, options?: ResolveProjectDatabaseUrlOptions): string;
|
|
64
|
-
|
|
65
|
-
type ProjectDatabaseMeta = {
|
|
66
|
-
exists: boolean;
|
|
67
|
-
relativePath?: string;
|
|
68
|
-
absolutePath?: string;
|
|
69
|
-
kind?: string;
|
|
70
|
-
mimeType?: string;
|
|
71
|
-
databaseName?: string;
|
|
72
|
-
size?: number;
|
|
73
|
-
updatedAt?: number;
|
|
74
|
-
source?: 'active' | 'device';
|
|
75
|
-
deviceId?: string;
|
|
76
|
-
};
|
|
77
|
-
type ListedProjectDatabase = {
|
|
78
|
-
id: string;
|
|
79
|
-
label: string;
|
|
80
|
-
relativePath: string;
|
|
81
|
-
source: 'active' | 'device';
|
|
82
|
-
deviceId?: string;
|
|
83
|
-
bundleId?: string;
|
|
84
|
-
storageKey?: string;
|
|
85
|
-
databaseName?: string;
|
|
86
|
-
size: number;
|
|
87
|
-
updatedAt: number;
|
|
88
|
-
};
|
|
89
|
-
/** @deprecated Use device-scoped `fetchDeviceExportMeta` instead. Proxies to the newest device export. */
|
|
90
|
-
declare function fetchProjectDatabaseMeta(serverUrl: string, options?: ResolveProjectDatabaseUrlOptions): Promise<ProjectDatabaseMeta>;
|
|
91
|
-
/** @deprecated Use device-scoped `fetchDeviceExportDatabase` instead. Proxies to the newest device export. */
|
|
92
|
-
declare function fetchProjectDatabase(serverUrl: string, options?: ResolveProjectDatabaseUrlOptions): Promise<ArrayBuffer>;
|
|
93
|
-
/** @deprecated Use `fetchDeviceExports` instead. */
|
|
94
|
-
declare function fetchProjectDatabases(serverUrl: string, options?: ResolveProjectDatabaseUrlOptions): Promise<ListedProjectDatabase[]>;
|
|
95
|
-
|
|
96
|
-
type DeviceExportMeta = ProjectDatabaseMeta;
|
|
97
|
-
type ListedDeviceExport = ListedProjectDatabase;
|
|
98
|
-
declare function fetchDeviceExportMeta(serverUrl: string, deviceId: string, options?: ResolveProjectDatabaseUrlOptions): Promise<DeviceExportMeta>;
|
|
99
|
-
declare function fetchDeviceExportDatabase(serverUrl: string, deviceId: string, options?: ResolveProjectDatabaseUrlOptions): Promise<ArrayBuffer>;
|
|
100
|
-
declare function fetchDeviceExports(serverUrl: string, options?: ResolveProjectDatabaseUrlOptions): Promise<ListedDeviceExport[]>;
|
|
101
|
-
|
|
102
|
-
declare function resolveDeviceExportDatabaseUrl(serverUrl: string, deviceId: string, options?: ResolveProjectDatabaseUrlOptions): string;
|
|
103
|
-
declare function resolveDeviceExportDatabaseMetaUrl(serverUrl: string, deviceId: string, options?: ResolveProjectDatabaseUrlOptions): string;
|
|
104
|
-
declare function resolveDeviceExportsUrl(serverUrl: string, options?: ResolveProjectDatabaseUrlOptions): string;
|
|
105
|
-
|
|
106
58
|
declare function fetchSnapshot(downloadUrl: string): Promise<ArrayBuffer>;
|
|
107
59
|
|
|
108
60
|
type HandleDeviceSnapshotOptions = {
|
|
@@ -113,4 +65,4 @@ type HandleDeviceSnapshotOptions = {
|
|
|
113
65
|
};
|
|
114
66
|
declare function handleDeviceSnapshotUpload(database: DatabaseAdapter | undefined, message: SnapshotUploadRequestedMessage, options?: HandleDeviceSnapshotOptions): Promise<void>;
|
|
115
67
|
|
|
116
|
-
export { type ConnectionState as C, type DevToolsClient as D, type HandleDeviceSnapshotOptions as H, type
|
|
68
|
+
export { type ConnectionState as C, type DevToolsClient as D, type HandleDeviceSnapshotOptions as H, type TransactionState as T, type DevToolsClientOptions as a, createDevToolsClient as c, fetchSnapshot as f, handleDeviceSnapshotUpload as h };
|
package/dist/index.cjs
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
var reactNative = require('react-native');
|
|
4
4
|
var react = require('react');
|
|
5
|
+
var Constants = require('expo-constants');
|
|
6
|
+
var AsyncStorage = require('@react-native-async-storage/async-storage');
|
|
5
7
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
8
|
var MaterialCommunityIcons = require('@expo/vector-icons/MaterialCommunityIcons');
|
|
7
9
|
var express2 = require('express');
|
|
@@ -13,17 +15,12 @@ var promises = require('fs/promises');
|
|
|
13
15
|
|
|
14
16
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
17
|
|
|
18
|
+
var Constants__default = /*#__PURE__*/_interopDefault(Constants);
|
|
19
|
+
var AsyncStorage__default = /*#__PURE__*/_interopDefault(AsyncStorage);
|
|
16
20
|
var MaterialCommunityIcons__default = /*#__PURE__*/_interopDefault(MaterialCommunityIcons);
|
|
17
21
|
var express2__default = /*#__PURE__*/_interopDefault(express2);
|
|
18
22
|
var path4__default = /*#__PURE__*/_interopDefault(path4);
|
|
19
23
|
|
|
20
|
-
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
21
|
-
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
22
|
-
}) : x)(function(x) {
|
|
23
|
-
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
24
|
-
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
25
|
-
});
|
|
26
|
-
|
|
27
24
|
// src/types/protocol.ts
|
|
28
25
|
var DevToolsRole = {
|
|
29
26
|
MOBILE: "mobile",
|
|
@@ -1433,8 +1430,6 @@ function useDevTools() {
|
|
|
1433
1430
|
}
|
|
1434
1431
|
return context;
|
|
1435
1432
|
}
|
|
1436
|
-
|
|
1437
|
-
// src/utils/resolveDevToolsHost.ts
|
|
1438
1433
|
var ANDROID_LOOPBACK_HOSTS = /* @__PURE__ */ new Set(["localhost", "127.0.0.1", "::1"]);
|
|
1439
1434
|
var ANDROID_EMULATOR_HOST = "10.0.2.2";
|
|
1440
1435
|
function isAndroidLoopbackHost(host) {
|
|
@@ -1475,20 +1470,10 @@ function getConnectionHintForPlatform(platformOs, serverUrl) {
|
|
|
1475
1470
|
return null;
|
|
1476
1471
|
}
|
|
1477
1472
|
function getPlatformOs() {
|
|
1478
|
-
|
|
1479
|
-
const { Platform: Platform2 } = __require("react-native");
|
|
1480
|
-
return Platform2.OS;
|
|
1481
|
-
} catch {
|
|
1482
|
-
return "web";
|
|
1483
|
-
}
|
|
1473
|
+
return reactNative.Platform.OS;
|
|
1484
1474
|
}
|
|
1485
1475
|
function readMetroDevHostRuntime() {
|
|
1486
|
-
|
|
1487
|
-
const mod = __require("expo-constants");
|
|
1488
|
-
return readMetroDevHostFromConstants(mod.default);
|
|
1489
|
-
} catch {
|
|
1490
|
-
return void 0;
|
|
1491
|
-
}
|
|
1476
|
+
return readMetroDevHostFromConstants(Constants__default.default);
|
|
1492
1477
|
}
|
|
1493
1478
|
function resolveDevToolsHost() {
|
|
1494
1479
|
return resolveDevToolsHostFromInputs(getPlatformOs(), readMetroDevHostRuntime());
|
|
@@ -1497,12 +1482,7 @@ function getConnectionHint(serverUrl) {
|
|
|
1497
1482
|
return getConnectionHintForPlatform(getPlatformOs(), serverUrl);
|
|
1498
1483
|
}
|
|
1499
1484
|
function getExpoConstants() {
|
|
1500
|
-
|
|
1501
|
-
const mod = __require("expo-constants");
|
|
1502
|
-
return mod.default;
|
|
1503
|
-
} catch {
|
|
1504
|
-
return void 0;
|
|
1505
|
-
}
|
|
1485
|
+
return Constants__default.default;
|
|
1506
1486
|
}
|
|
1507
1487
|
function resolveDeviceMetadata() {
|
|
1508
1488
|
const constants = getExpoConstants();
|
|
@@ -1539,33 +1519,40 @@ function resolveServerUrl(serverUrl) {
|
|
|
1539
1519
|
}
|
|
1540
1520
|
return buildDevToolsWsUrl(resolveDevToolsHost(), DEFAULT_DEVTOOLS_PORT);
|
|
1541
1521
|
}
|
|
1542
|
-
|
|
1543
|
-
// src/utils/persistDeviceId.ts
|
|
1544
1522
|
var PERSISTED_DEVICE_ID_STORAGE_KEY = "@database-devtools/device-id";
|
|
1545
1523
|
var memoryDeviceId = null;
|
|
1524
|
+
function hasAsyncStorageNativeModule() {
|
|
1525
|
+
return Boolean(
|
|
1526
|
+
reactNative.NativeModules.RNCAsyncStorage ?? reactNative.NativeModules.RNC_AsyncSQLiteDBStoragePassThru ?? reactNative.NativeModules.PlatformLocalStorage
|
|
1527
|
+
);
|
|
1528
|
+
}
|
|
1546
1529
|
function createAsyncStorageDeviceIdStore() {
|
|
1547
|
-
|
|
1548
|
-
const AsyncStorage = __require("@react-native-async-storage/async-storage").default;
|
|
1549
|
-
return AsyncStorage;
|
|
1550
|
-
} catch {
|
|
1530
|
+
if (!hasAsyncStorageNativeModule()) {
|
|
1551
1531
|
return null;
|
|
1552
1532
|
}
|
|
1533
|
+
return AsyncStorage__default.default;
|
|
1553
1534
|
}
|
|
1554
|
-
|
|
1555
|
-
if (storage) {
|
|
1556
|
-
const stored = await storage.getItem(PERSISTED_DEVICE_ID_STORAGE_KEY);
|
|
1557
|
-
if (stored) {
|
|
1558
|
-
return stored;
|
|
1559
|
-
}
|
|
1560
|
-
const created = generateDeviceId();
|
|
1561
|
-
await storage.setItem(PERSISTED_DEVICE_ID_STORAGE_KEY, created);
|
|
1562
|
-
return created;
|
|
1563
|
-
}
|
|
1535
|
+
function loadOrCreateMemoryDeviceId() {
|
|
1564
1536
|
if (!memoryDeviceId) {
|
|
1565
1537
|
memoryDeviceId = generateDeviceId();
|
|
1566
1538
|
}
|
|
1567
1539
|
return memoryDeviceId;
|
|
1568
1540
|
}
|
|
1541
|
+
async function loadOrCreateDeviceId(storage = createAsyncStorageDeviceIdStore()) {
|
|
1542
|
+
if (storage) {
|
|
1543
|
+
try {
|
|
1544
|
+
const stored = await storage.getItem(PERSISTED_DEVICE_ID_STORAGE_KEY);
|
|
1545
|
+
if (stored) {
|
|
1546
|
+
return stored;
|
|
1547
|
+
}
|
|
1548
|
+
const created = generateDeviceId();
|
|
1549
|
+
await storage.setItem(PERSISTED_DEVICE_ID_STORAGE_KEY, created);
|
|
1550
|
+
return created;
|
|
1551
|
+
} catch {
|
|
1552
|
+
}
|
|
1553
|
+
}
|
|
1554
|
+
return loadOrCreateMemoryDeviceId();
|
|
1555
|
+
}
|
|
1569
1556
|
|
|
1570
1557
|
// src/utils/sqlSafety.ts
|
|
1571
1558
|
var BLOCKED_KEYWORDS = /\b(INSERT|UPDATE|DELETE|DROP|ALTER|CREATE|REPLACE|ATTACH|DETACH|REINDEX|VACUUM|TRUNCATE)\b/i;
|