database-devtools 0.1.1 → 0.1.2
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-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/chunk-7UY2LDRW.js +2739 -0
- package/dist/chunk-7UY2LDRW.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 -1
- package/dist/client/index.js.map +1 -1
- 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.d.cts +13 -45
- package/dist/index.d.ts +13 -45
- package/dist/index.js +8 -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/inspectors/sqlite/index.d.cts +2 -2
- package/dist/inspectors/sqlite/index.d.ts +2 -2
- package/dist/native.cjs +3946 -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 +13 -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/{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-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 +5 -5
- 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,4 +1,5 @@
|
|
|
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';
|
package/dist/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/client/resolveSnapshotDownloadUrl.ts","../../src/utils/deviceLabel.ts","../../src/utils/resolvePreferredDeviceId.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/client/resolveSnapshotDownloadUrl.ts","../../src/utils/deviceLabel.ts","../../src/utils/resolvePreferredDeviceId.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import {\r\n buildDeviceSnapshotUrl,\r\n DEVICE_SNAPSHOT_API_PATH,\r\n wsUrlToHttpUrl,\r\n} from '../types/protocol';\r\n\r\nexport type ResolveSnapshotDownloadUrlOptions = {\r\n /**\r\n * When true, returns a same-origin relative path (e.g. `/api/devices/:id/snapshot`).\r\n * Use with a dev-server proxy so the browser avoids cross-origin fetches.\r\n */\r\n useSameOriginApi?: boolean;\r\n};\r\n\r\nexport function resolveSnapshotDownloadUrl(\r\n hubWsUrl: string,\r\n deviceId: string,\r\n options: ResolveSnapshotDownloadUrlOptions = {},\r\n): string {\r\n const path = `${DEVICE_SNAPSHOT_API_PATH}/${encodeURIComponent(deviceId)}/snapshot`;\r\n\r\n if (options.useSameOriginApi) {\r\n return path;\r\n }\r\n\r\n return buildDeviceSnapshotUrl(wsUrlToHttpUrl(hubWsUrl), deviceId);\r\n}\r\n","import type { DeviceStatusPayload } from '../types/protocol';\r\n\r\nexport type DeviceLabel = {\r\n deviceId: string;\r\n deviceName: string;\r\n};\r\n\r\nexport type DeviceLabelFallback = {\r\n databaseName?: string | null;\r\n label?: string | null;\r\n};\r\n\r\nexport function shortenDeviceId(deviceId: string, visibleChars = 4): string {\r\n if (deviceId.length <= visibleChars * 2 + 1) {\r\n return deviceId;\r\n }\r\n\r\n return `${deviceId.slice(0, visibleChars)}…${deviceId.slice(-visibleChars)}`;\r\n}\r\n\r\nexport function resolveDeviceDisplayName(\r\n deviceId: string,\r\n deviceStatus: DeviceStatusPayload | null,\r\n fallback?: DeviceLabelFallback | null,\r\n): string {\r\n const mobile = deviceStatus?.mobiles.find((device) => device.deviceId === deviceId);\r\n\r\n if (mobile?.metadata?.appName) {\r\n return mobile.metadata.appName;\r\n }\r\n\r\n if (fallback?.databaseName) {\r\n return fallback.databaseName;\r\n }\r\n\r\n if (fallback?.label) {\r\n return fallback.label;\r\n }\r\n\r\n return 'Device export';\r\n}\r\n\r\nexport function resolveDeviceLabel(\r\n deviceId: string,\r\n deviceStatus: DeviceStatusPayload | null,\r\n fallback?: DeviceLabelFallback | null,\r\n): DeviceLabel {\r\n return {\r\n deviceId,\r\n deviceName: resolveDeviceDisplayName(deviceId, deviceStatus, fallback),\r\n };\r\n}\r\n\r\nexport function formatSnapshotReceivedMessage(\r\n deviceLabel: DeviceLabel,\r\n databaseName: string,\r\n): string {\r\n return `${deviceLabel.deviceName} (${shortenDeviceId(deviceLabel.deviceId)}) · ${databaseName}`;\r\n}\r\n\r\nexport type SnapshotToastInitiator = 'mobile' | 'browser';\r\n\r\nexport function buildSnapshotLoadedToast(\r\n initiator: SnapshotToastInitiator,\r\n deviceId: string,\r\n databaseName: string,\r\n deviceStatus: DeviceStatusPayload | null,\r\n fallback?: DeviceLabelFallback | null,\r\n): { title: string; message: string } {\r\n const deviceLabel = resolveDeviceLabel(deviceId, deviceStatus, fallback);\r\n\r\n return {\r\n title: initiator === 'mobile' ? 'New database received' : 'Database refreshed',\r\n message: formatSnapshotReceivedMessage(deviceLabel, databaseName),\r\n };\r\n}\r\n","import type { MobileDeviceInfo } from '../types/protocol';\r\n\r\nexport type DeviceExportRef = {\r\n deviceId: string;\r\n bundleId?: string;\r\n};\r\n\r\nexport type ResolvePreferredDeviceIdInput = {\r\n selectedDeviceId: string | null;\r\n mobiles: MobileDeviceInfo[];\r\n exports: DeviceExportRef[];\r\n};\r\n\r\nfunction findMobileByBundleId(\r\n mobiles: MobileDeviceInfo[],\r\n bundleId?: string,\r\n): MobileDeviceInfo | undefined {\r\n if (!bundleId) {\r\n return undefined;\r\n }\r\n\r\n return mobiles.find((mobile) => mobile.metadata?.bundleId === bundleId);\r\n}\r\n\r\nexport function resolvePreferredDeviceId(input: ResolvePreferredDeviceIdInput): string | null {\r\n const connectedIds = new Set(input.mobiles.map((device) => device.deviceId));\r\n const exportById = new Map(input.exports.map((entry) => [entry.deviceId, entry]));\r\n\r\n if (input.selectedDeviceId) {\r\n if (connectedIds.has(input.selectedDeviceId)) {\r\n return input.selectedDeviceId;\r\n }\r\n\r\n const selectedExport = exportById.get(input.selectedDeviceId);\r\n\r\n if (selectedExport) {\r\n const bundleMatch = findMobileByBundleId(input.mobiles, selectedExport.bundleId);\r\n\r\n if (bundleMatch) {\r\n return bundleMatch.deviceId;\r\n }\r\n\r\n if (input.mobiles.length === 1) {\r\n return input.mobiles[0]!.deviceId;\r\n }\r\n\r\n return input.selectedDeviceId;\r\n }\r\n }\r\n\r\n return input.mobiles[0]?.deviceId ?? input.exports[0]?.deviceId ?? null;\r\n}\r\n\r\nexport function resolveLiveSwitchTarget(input: {\r\n selectedDeviceId: string | null;\r\n mobiles: MobileDeviceInfo[];\r\n exports: DeviceExportRef[];\r\n}): string | null {\r\n if (!input.selectedDeviceId || input.mobiles.length === 0) {\r\n return null;\r\n }\r\n\r\n if (input.mobiles.some((mobile) => mobile.deviceId === input.selectedDeviceId)) {\r\n return null;\r\n }\r\n\r\n const selectedExport = input.exports.find((entry) => entry.deviceId === input.selectedDeviceId);\r\n const bundleMatch = findMobileByBundleId(input.mobiles, selectedExport?.bundleId);\r\n\r\n if (bundleMatch) {\r\n return bundleMatch.deviceId;\r\n }\r\n\r\n return input.mobiles[0]?.deviceId ?? null;\r\n}\r\n"]}
|
|
@@ -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.d.cts
CHANGED
|
@@ -1,27 +1,24 @@
|
|
|
1
1
|
import { BeginTransactionMessage, TransactionAckMessage, CommitTransactionMessage, ExecuteWriteMessage, WriteAckMessage, RollbackTransactionMessage } from './types/protocol.cjs';
|
|
2
2
|
export { BroadcastMessage, BrowserConnectionInfo, ClientMessage, DEFAULT_DEVTOOLS_HOST, DEFAULT_DEVTOOLS_PORT, DEVICE_SNAPSHOT_API_PATH, DEVTOOLS_WS_PATH, DevToolsMessage, DevToolsMessageBase, DevToolsRole, DeviceMetadata, DeviceStatusMessage, DeviceStatusPayload, ExportSnapshotErrorMessage, ExportSnapshotRequestMessage, HEARTBEAT_INTERVAL_MS, HEARTBEAT_TIMEOUT_MS, MAX_SNAPSHOT_BYTES, MessageType, MessageTypeValue, MobileDeviceInfo, PROJECT_DATABASES_API_PATH, PROJECT_DATABASE_API_PATH, PROJECT_DATABASE_META_API_PATH, PROJECT_DEVICE_EXPORTS_API_PATH, PingMessage, PongMessage, REFRESH_TIMEOUT_MS, RefreshErrorCode, RefreshErrorMessage, RefreshInitiator, RefreshRequestMessage, RefreshState, RefreshStatusMessage, RefreshType, RegisterMessage, SNAPSHOT_API_PATH, SYNC_TIMEOUT_MS, ServerMessage, SnapshotReadyMessage, SnapshotUploadRequestedMessage, SyncErrorCode, SyncState, buildDevToolsHttpUrl, buildDevToolsWsUrl, buildDeviceSnapshotUrl, buildSnapshotUrl, createMessage, isBroadcastMessage, isClientMessage, isDeviceStatusMessage, isExportSnapshotErrorMessage, isExportSnapshotRequestMessage, isPingMessage, isPongMessage, isRefreshErrorMessage, isRefreshRequestMessage, isRefreshStatusMessage, isRegisterMessage, isServerMessage, isSnapshotReadyMessage, isSnapshotUploadRequestedMessage, wsUrlToHttpUrl } from './types/protocol.cjs';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export {
|
|
7
|
-
export { C as ColumnInfo, D as DatabaseInspector, I as InspectorDefinition,
|
|
3
|
+
export { A as AdapterCapabilities, D as DATABASE_DEVTOOLS_KIND, a as DatabaseKind, I as InspectorCapabilities, S as SNAPSHOT_KIND_HEADER, b as SNAPSHOT_MIME_HEADER, c as SNAPSHOT_NAME_HEADER, d as SQLITE_SNAPSHOT_MIME_TYPE, e as SnapshotExport, r as readDatabaseKindMarker } from './snapshot-Dknp_qP1.cjs';
|
|
4
|
+
import { D as DatabaseAdapter } from './adapter-DQyQ5ycj.cjs';
|
|
5
|
+
export { E as EditableDatabaseAdapter, W as WritableDatabaseAdapter, a as WriteResult, i as isEditableDatabaseAdapter, b as isWritableDatabaseAdapter } from './adapter-DQyQ5ycj.cjs';
|
|
6
|
+
export { D as DatabaseDevTools, a as DatabaseDevToolsProps, b as DatabaseDialect, F as FloatingButtonPosition } from './DatabaseDevTools-sw1wX5nW.cjs';
|
|
7
|
+
export { C as ColumnInfo, D as DatabaseInspector, I as InspectorDefinition, Q as QueryError, a as QueryResult, S as SchemaTable, T as TableInfo, b as TablePageRequest, c as TablePageResult } from './types-BQHZtFwx.cjs';
|
|
8
8
|
export { D as DeleteOperation, I as InsertOperation, U as UpdateOperation, W as WriteCellValue, a as WriteOperation } from './write-C3toEIMs.cjs';
|
|
9
|
-
export { A as AdapterDefinition, R as ResolveAdapterOptions } from './types-
|
|
9
|
+
export { A as AdapterDefinition, R as ResolveAdapterOptions } from './types-gT3gDw_T.cjs';
|
|
10
10
|
export { AdapterRegistry, AdapterResolutionError, getAdapterRegistry, registerBuiltInAdapters, resetAdapterRegistry, resolveAdapter } from './adapter/index.cjs';
|
|
11
11
|
export { InspectorRegistry, createInspectorForSnapshot, getInspectorRegistry, resetInspectorRegistry } from './inspector/index.cjs';
|
|
12
|
-
|
|
13
|
-
export { D as
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
export { C as ConnectionState, D as DevToolsClient, a as DevToolsClientOptions, T as TransactionState, c as createDevToolsClient, f as fetchSnapshot, h as handleDeviceSnapshotUpload } from './handleDeviceSnapshot-CIZ_00fE.cjs';
|
|
13
|
+
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';
|
|
14
|
+
export { D as DevToolsServer, a as DevToolsServerOptions, c as createDevToolsServer } from './createDevToolsServer-Cqb7xzIv.cjs';
|
|
15
|
+
export { C as CreateExpoSqliteAdapterOptions, E as ExpoSqliteDatabase, c as createExpoSqliteAdapter, d as detectExpoSqlite, r as registerSqliteAdapter, s as sqliteAdapterDefinition } from './register-DEZ0kK1p.cjs';
|
|
16
|
+
import 'react/jsx-runtime';
|
|
17
|
+
import 'react-native';
|
|
18
18
|
import 'express';
|
|
19
19
|
import 'node:http';
|
|
20
20
|
import 'ws';
|
|
21
21
|
|
|
22
|
-
/** @deprecated Use `DatabaseKind` from `./kind` instead. */
|
|
23
|
-
type DatabaseDialect = DatabaseKind;
|
|
24
|
-
|
|
25
22
|
type TransactionAckReporter = (message: Omit<TransactionAckMessage, 'timestamp' | 'type'>) => void;
|
|
26
23
|
type WriteAckReporter = (message: Omit<WriteAckMessage, 'timestamp' | 'type'>) => void;
|
|
27
24
|
declare function handleBeginTransaction(adapter: DatabaseAdapter | undefined, message: BeginTransactionMessage, report: TransactionAckReporter): Promise<void>;
|
|
@@ -29,33 +26,4 @@ declare function handleCommitTransaction(adapter: DatabaseAdapter | undefined, m
|
|
|
29
26
|
declare function handleRollbackTransaction(adapter: DatabaseAdapter | undefined, message: RollbackTransactionMessage, report: TransactionAckReporter): Promise<void>;
|
|
30
27
|
declare function handleExecuteWrite(adapter: DatabaseAdapter | undefined, message: ExecuteWriteMessage, report: WriteAckReporter): Promise<void>;
|
|
31
28
|
|
|
32
|
-
|
|
33
|
-
x: number;
|
|
34
|
-
y: number;
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
type DatabaseDevToolsProps = {
|
|
38
|
-
/** Raw database instance (auto-detected) or a resolved adapter. */
|
|
39
|
-
database?: unknown;
|
|
40
|
-
/** Explicit database kind override. */
|
|
41
|
-
type?: DatabaseKind;
|
|
42
|
-
/** Custom adapter override (advanced). */
|
|
43
|
-
adapter?: DatabaseAdapter;
|
|
44
|
-
serverUrl?: string;
|
|
45
|
-
enabled?: boolean;
|
|
46
|
-
position?: 'bottom-right' | 'bottom-left';
|
|
47
|
-
/** Allow dragging the floating button around the screen. */
|
|
48
|
-
draggable?: boolean;
|
|
49
|
-
/** Snap the button to screen edges after dragging. */
|
|
50
|
-
snapToEdges?: boolean;
|
|
51
|
-
/** Controlled floating button position. */
|
|
52
|
-
floatingPosition?: FloatingButtonPosition;
|
|
53
|
-
/** Called when the user drags the floating button to a new position. */
|
|
54
|
-
onFloatingPositionChange?: (position: FloatingButtonPosition) => void;
|
|
55
|
-
/** Optional style for the floating button database icon. */
|
|
56
|
-
style?: StyleProp<TextStyle>;
|
|
57
|
-
onConnectionStateChange?: (state: ConnectionState) => void;
|
|
58
|
-
};
|
|
59
|
-
declare function DatabaseDevTools({ database, type, adapter, serverUrl, enabled, position, draggable, snapToEdges, floatingPosition, onFloatingPositionChange, style, onConnectionStateChange, }: DatabaseDevToolsProps): react_jsx_runtime.JSX.Element | null;
|
|
60
|
-
|
|
61
|
-
export { ConnectionState, DatabaseAdapter, DatabaseDevTools, type DatabaseDevToolsProps, type DatabaseDialect, DatabaseKind, type FloatingButtonPosition, handleBeginTransaction, handleCommitTransaction, handleExecuteWrite, handleRollbackTransaction };
|
|
29
|
+
export { DatabaseAdapter, handleBeginTransaction, handleCommitTransaction, handleExecuteWrite, handleRollbackTransaction };
|