@seedprotocol/sdk 0.6.4 → 0.6.6

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.
Files changed (101) hide show
  1. package/dist/{BasePathResolver-0IHnXxtL.js → BasePathResolver-BGxb4Qod.js} +27 -4
  2. package/dist/BasePathResolver-BGxb4Qod.js.map +1 -0
  3. package/dist/{ModelProperty-BiDQu5rE.js → ModelProperty-Bvg9cJcd.js} +20 -20
  4. package/dist/{ModelProperty-BiDQu5rE.js.map → ModelProperty-Bvg9cJcd.js.map} +1 -1
  5. package/dist/{Schema-qciDB7Nu.js → Schema-BNJBY80k.js} +25 -25
  6. package/dist/{Schema-qciDB7Nu.js.map → Schema-BNJBY80k.js.map} +1 -1
  7. package/dist/{SchemaValidationService-BaOkRjsU.js → SchemaValidationService-aqXkwXTr.js} +5 -5
  8. package/dist/{SchemaValidationService-BaOkRjsU.js.map → SchemaValidationService-aqXkwXTr.js.map} +1 -1
  9. package/dist/{backfillMetadataPropertyIds-oypxoBXv.js → backfillMetadataPropertyIds-DYkvoOMz.js} +3 -3
  10. package/dist/{backfillMetadataPropertyIds-oypxoBXv.js.map → backfillMetadataPropertyIds-DYkvoOMz.js.map} +1 -1
  11. package/dist/cjs/{ModelProperty-DvIIhBnK.js → ModelProperty-alntkSnH.js} +17 -17
  12. package/dist/cjs/{ModelProperty-DvIIhBnK.js.map → ModelProperty-alntkSnH.js.map} +1 -1
  13. package/dist/cjs/{Schema-FdzNqyGo.js → Schema-ByFv6fcb.js} +20 -20
  14. package/dist/cjs/{Schema-FdzNqyGo.js.map → Schema-ByFv6fcb.js.map} +1 -1
  15. package/dist/cjs/{SchemaValidationService-pxRoOs79.js → SchemaValidationService-D55MWsxv.js} +2 -2
  16. package/dist/cjs/{SchemaValidationService-pxRoOs79.js.map → SchemaValidationService-D55MWsxv.js.map} +1 -1
  17. package/dist/cjs/{backfillMetadataPropertyIds-D0o5VwBh.js → backfillMetadataPropertyIds-DrrL5RqD.js} +2 -2
  18. package/dist/cjs/{backfillMetadataPropertyIds-D0o5VwBh.js.map → backfillMetadataPropertyIds-DrrL5RqD.js.map} +1 -1
  19. package/dist/cjs/{eas-DSZkoDUn.js → eas-D2E3_i_c.js} +3 -3
  20. package/dist/cjs/{eas-DSZkoDUn.js.map → eas-D2E3_i_c.js.map} +1 -1
  21. package/dist/cjs/{getItem-CPcdcFuS.js → getItem-B2zLVB_l.js} +2 -2
  22. package/dist/cjs/{getItem-CPcdcFuS.js.map → getItem-B2zLVB_l.js.map} +1 -1
  23. package/dist/cjs/{getPublishPayload-BvmVTKoc.js → getPublishPayload-Bv94k4ak.js} +11 -11
  24. package/dist/cjs/{getPublishPayload-BvmVTKoc.js.map → getPublishPayload-Bv94k4ak.js.map} +1 -1
  25. package/dist/cjs/{getPublishUploads-D2VZHZnu.js → getPublishUploads-CSbHUxYk.js} +4 -4
  26. package/dist/cjs/{getPublishUploads-D2VZHZnu.js.map → getPublishUploads-CSbHUxYk.js.map} +1 -1
  27. package/dist/cjs/{getSegmentedItemProperties-Bm1TEvBS.js → getSegmentedItemProperties-CMhXKQHz.js} +3 -3
  28. package/dist/cjs/{getSegmentedItemProperties-Bm1TEvBS.js.map → getSegmentedItemProperties-CMhXKQHz.js.map} +1 -1
  29. package/dist/cjs/{index-C-POwaLs.js → index-D-9WglxG.js} +190 -85
  30. package/dist/cjs/index-D-9WglxG.js.map +1 -0
  31. package/dist/cjs/{index-D_ph4zut.js → index-pSLjO-ch.js} +3 -3
  32. package/dist/cjs/index-pSLjO-ch.js.map +1 -0
  33. package/dist/cjs/{property-DkUtJxV2.js → property-gUK2PijH.js} +4 -4
  34. package/dist/cjs/{property-DkUtJxV2.js.map → property-gUK2PijH.js.map} +1 -1
  35. package/dist/cjs/{syncDbWithEas-DRoys7eo.js → syncDbWithEas-CYtl7VTD.js} +6 -6
  36. package/dist/cjs/{syncDbWithEas-DRoys7eo.js.map → syncDbWithEas-CYtl7VTD.js.map} +1 -1
  37. package/dist/{configurePlatform-Df4BlXwQ.js → configurePlatform-bGvKBBQy.js} +3 -3
  38. package/dist/{configurePlatform-Df4BlXwQ.js.map → configurePlatform-bGvKBBQy.js.map} +1 -1
  39. package/dist/{constants-CROrIRd-.js → constants-CTs2RUrM.js} +4 -2
  40. package/dist/{constants-CROrIRd-.js.map → constants-CTs2RUrM.js.map} +1 -1
  41. package/dist/{db-DVsy4QZe.js → db-YiH_kIpE.js} +13 -13
  42. package/dist/{db-DVsy4QZe.js.map → db-YiH_kIpE.js.map} +1 -1
  43. package/dist/{eas-z4W41ith.js → eas-1nUCcmeh.js} +4 -4
  44. package/dist/{eas-z4W41ith.js.map → eas-1nUCcmeh.js.map} +1 -1
  45. package/dist/{getItem-BiE_b7Fu.js → getItem-Bb8bTYzY.js} +5 -5
  46. package/dist/{getItem-BiE_b7Fu.js.map → getItem-Bb8bTYzY.js.map} +1 -1
  47. package/dist/{getPublishPayload-CuRGEZa5.js → getPublishPayload-BHw8mPSb.js} +14 -14
  48. package/dist/{getPublishPayload-CuRGEZa5.js.map → getPublishPayload-BHw8mPSb.js.map} +1 -1
  49. package/dist/{getPublishUploads-CMgzBCzZ.js → getPublishUploads-BYhckxFl.js} +7 -7
  50. package/dist/{getPublishUploads-CMgzBCzZ.js.map → getPublishUploads-BYhckxFl.js.map} +1 -1
  51. package/dist/{getSegmentedItemProperties-BCCSwTxr.js → getSegmentedItemProperties-B73nMPBv.js} +5 -5
  52. package/dist/{getSegmentedItemProperties-BCCSwTxr.js.map → getSegmentedItemProperties-B73nMPBv.js.map} +1 -1
  53. package/dist/{index-DjwIC6U3.js → index-CJNKYI37.js} +186 -106
  54. package/dist/index-CJNKYI37.js.map +1 -0
  55. package/dist/{index-xNWgPtlN.js → index-C_5xwOPQ.js} +2 -2
  56. package/dist/index-C_5xwOPQ.js.map +1 -0
  57. package/dist/{index-C41UZTmQ.js → index-DzgMt8ba.js} +7 -7
  58. package/dist/index-DzgMt8ba.js.map +1 -0
  59. package/dist/{index.node-DQZ3cPe-.js → index.node-ZLiBj9Cu.js} +4 -4
  60. package/dist/{index.node-DQZ3cPe-.js.map → index.node-ZLiBj9Cu.js.map} +1 -1
  61. package/dist/main.cjs +1 -1
  62. package/dist/main.js +21 -21
  63. package/dist/node.js +10 -10
  64. package/dist/platform.browser.js +149 -41
  65. package/dist/platform.browser.js.map +1 -1
  66. package/dist/platform.node.js +3 -3
  67. package/dist/{property-Bs3a4Dna.js → property-Dcb50seV.js} +7 -7
  68. package/dist/{property-Bs3a4Dna.js.map → property-Dcb50seV.js.map} +1 -1
  69. package/dist/src/browser/db/Db.d.ts +1 -1
  70. package/dist/src/browser/db/Db.d.ts.map +1 -1
  71. package/dist/src/browser/db/createSqlocalDrizzle.d.ts +21 -0
  72. package/dist/src/browser/db/createSqlocalDrizzle.d.ts.map +1 -0
  73. package/dist/src/browser/helpers/FileManager.d.ts +1 -1
  74. package/dist/src/browser/helpers/FileManager.d.ts.map +1 -1
  75. package/dist/src/client/ClientManager.d.ts +9 -5
  76. package/dist/src/client/ClientManager.d.ts.map +1 -1
  77. package/dist/src/client/actors/addModelsToDb.d.ts.map +1 -1
  78. package/dist/src/client/actors/addModelsToStore.d.ts.map +1 -1
  79. package/dist/src/client/actors/saveAppState.d.ts.map +1 -1
  80. package/dist/src/client/actors/saveConfig.d.ts.map +1 -1
  81. package/dist/src/client/clientManagerMachine.d.ts +1 -0
  82. package/dist/src/client/clientManagerMachine.d.ts.map +1 -1
  83. package/dist/src/client/coalesceInit.d.ts +7 -0
  84. package/dist/src/client/coalesceInit.d.ts.map +1 -0
  85. package/dist/src/client/constants.d.ts +3 -1
  86. package/dist/src/client/constants.d.ts.map +1 -1
  87. package/dist/src/helpers/FileManager/BaseFileManager.d.ts +7 -0
  88. package/dist/src/helpers/FileManager/BaseFileManager.d.ts.map +1 -1
  89. package/dist/src/types/machines.d.ts +1 -0
  90. package/dist/src/types/machines.d.ts.map +1 -1
  91. package/dist/{syncDbWithEas-DRpLRxwb.js → syncDbWithEas-B0RUeDuj.js} +10 -10
  92. package/dist/{syncDbWithEas-DRpLRxwb.js.map → syncDbWithEas-B0RUeDuj.js.map} +1 -1
  93. package/dist/{updateSeedRevokedAt-F0ZDvwOO.js → updateSeedRevokedAt-D5ZbBehZ.js} +2 -2
  94. package/dist/{updateSeedRevokedAt-F0ZDvwOO.js.map → updateSeedRevokedAt-D5ZbBehZ.js.map} +1 -1
  95. package/package.json +13 -5
  96. package/dist/BasePathResolver-0IHnXxtL.js.map +0 -1
  97. package/dist/cjs/index-C-POwaLs.js.map +0 -1
  98. package/dist/cjs/index-D_ph4zut.js.map +0 -1
  99. package/dist/index-C41UZTmQ.js.map +0 -1
  100. package/dist/index-DjwIC6U3.js.map +0 -1
  101. package/dist/index-xNWgPtlN.js.map +0 -1
@@ -1,11 +1,11 @@
1
- import { a as BaseDb, c as appState, t as BasePathResolver, B as BaseFileManager } from './BasePathResolver-0IHnXxtL.js';
1
+ import { a as BaseDb, c as appState, t as BasePathResolver, B as BaseFileManager } from './BasePathResolver-BGxb4Qod.js';
2
2
  import debug from 'debug';
3
3
  import { sql } from 'drizzle-orm';
4
4
  import { readMigrationFiles } from 'drizzle-orm/migrator';
5
5
  import { drizzle } from 'drizzle-orm/sqlite-proxy';
6
6
  import { migrate } from 'drizzle-orm/sqlite-proxy/migrator';
7
- import { E as EAS_ENDPOINT } from './constants-CROrIRd-.js';
8
- import { s as schema } from './index-xNWgPtlN.js';
7
+ import { E as EAS_ENDPOINT } from './constants-CTs2RUrM.js';
8
+ import { s as schema } from './index-C_5xwOPQ.js';
9
9
  import { SQLocalDrizzle } from 'sqlocal/drizzle';
10
10
  import { Observable, distinctUntilChanged } from 'rxjs';
11
11
  import { BaseArweaveClient, GET_TRANSACTION_TAGS } from '@seedprotocol/arweave';
@@ -347,7 +347,7 @@ var filesDownload = `(
347
347
  }.toString()}
348
348
  )()`;
349
349
 
350
- const logger$4 = debug('seedSdk:browser:workers:FileDownloader');
350
+ const logger$5 = debug('seedSdk:browser:workers:FileDownloader');
351
351
  class FileDownloader {
352
352
  constructor() {
353
353
  this.workersArchive = [];
@@ -364,7 +364,7 @@ class FileDownloader {
364
364
  const localExcludedTransactions = new Set(excludedTransactions);
365
365
  return new Promise((resolve, reject) => {
366
366
  worker.onmessage = (e) => {
367
- logger$4('filesDownload main thread onmessage', e.data);
367
+ logger$5('filesDownload main thread onmessage', e.data);
368
368
  if (e.data.message === 'excludeTransaction') {
369
369
  localExcludedTransactions.add(e.data.transactionId);
370
370
  }
@@ -384,7 +384,7 @@ class FileDownloader {
384
384
  worker.postMessage({
385
385
  transactionIds,
386
386
  arweaveHost,
387
- debug: logger$4.enabled,
387
+ debug: logger$5.enabled,
388
388
  filesRoot: BaseFileManager.getWorkingDir(),
389
389
  });
390
390
  });
@@ -788,7 +788,7 @@ var imageResize = `(
788
788
  }.toString()}
789
789
  )()`;
790
790
 
791
- const logger$3 = debug('seedSdk:browser:workers:ImageResizer');
791
+ const logger$4 = debug('seedSdk:browser:workers:ImageResizer');
792
792
  class ImageResizer {
793
793
  constructor() {
794
794
  this.workersArchive = new Map();
@@ -799,18 +799,18 @@ class ImageResizer {
799
799
  if (this.workersArchive.has(filePath)) {
800
800
  const savedWorker = this.workersArchive.get(filePath);
801
801
  savedWorker?.terminate();
802
- logger$3('[ImageResizer.resize] Terminated worker for filePath due to incoming request', filePath);
802
+ logger$4('[ImageResizer.resize] Terminated worker for filePath due to incoming request', filePath);
803
803
  this.workersArchive.delete(filePath);
804
804
  }
805
805
  const worker = new Worker(this.workerBlobUrl);
806
806
  this.workersArchive.set(filePath, worker);
807
807
  return new Promise((resolve, reject) => {
808
808
  worker.onmessage = (e) => {
809
- logger$3('[ImageResizer.resize] main thread onmessage', e.data);
809
+ logger$4('[ImageResizer.resize] main thread onmessage', e.data);
810
810
  if (e.data.done) {
811
811
  const savedWorker = this.workersArchive.get(filePath);
812
812
  savedWorker?.terminate();
813
- logger$3('[ImageResizer.resize] Terminated worker for filePath due to done', filePath);
813
+ logger$4('[ImageResizer.resize] Terminated worker for filePath due to done', filePath);
814
814
  this.workersArchive.delete(filePath);
815
815
  resolve(e.data);
816
816
  }
@@ -825,7 +825,7 @@ class ImageResizer {
825
825
  filePath,
826
826
  width,
827
827
  height,
828
- debug: logger$3.enabled,
828
+ debug: logger$4.enabled,
829
829
  });
830
830
  });
831
831
  }
@@ -848,7 +848,7 @@ class ImageResizer {
848
848
  }
849
849
  }
850
850
 
851
- const logger$2 = debug('seedSdk:browser:helpers:FileManager');
851
+ const logger$3 = debug('seedSdk:browser:helpers:FileManager');
852
852
  /**
853
853
  * Browser-safe path helpers for SDK virtual file paths.
854
854
  * We intentionally avoid Node/CJS path polyfills here to keep browser bundles ESM-safe.
@@ -943,6 +943,14 @@ const pathCompat = {
943
943
  return result || '.';
944
944
  },
945
945
  };
946
+ /** Chromium OPFS: a directory/file handle is stale (reload, other tab, leftover sync access handle). */
947
+ function isStaleOpfsHandleError(error) {
948
+ if (error instanceof DOMException && error.name === 'InvalidStateError') {
949
+ return true;
950
+ }
951
+ const message = error instanceof Error ? error.message : String(error);
952
+ return message.includes('state cached in an interface object');
953
+ }
946
954
  /** OPFS / ZenFS can throw NotReadableError while a file is still settling after write. */
947
955
  function isTransientOpfsReadError(error) {
948
956
  if (error instanceof DOMException && error.name === 'NotReadableError') {
@@ -981,27 +989,30 @@ class BrowserFileManager {
981
989
  return URL.createObjectURL(file);
982
990
  }
983
991
  }
984
- async initializeFileSystem(workingDir) {
992
+ async initializeFileSystem(_workingDir) {
985
993
  const zenfs = await this.getFs();
986
994
  const zenfsDomMod = await import('@zenfs/dom');
987
995
  const { WebAccess } = zenfsDomMod;
988
996
  const { configureSingle } = zenfs;
989
- const handle = await navigator.storage.getDirectory();
990
- // await configure({
991
- // mounts: {
992
- // '/': {
993
- // backend: WebAccess,
994
- // handle,
995
- // },
996
- // },
997
- // disableUpdateOnRead: true,
998
- // onlySyncOnClose: true,
999
- // })
1000
- await configureSingle({
1001
- backend: WebAccess,
1002
- handle,
1003
- });
1004
- // Cache is already set in getFs(), so no need to set it again
997
+ const configureRoot = async () => {
998
+ const handle = await navigator.storage.getDirectory();
999
+ await configureSingle({
1000
+ backend: WebAccess,
1001
+ handle,
1002
+ });
1003
+ };
1004
+ try {
1005
+ await configureRoot();
1006
+ }
1007
+ catch (error) {
1008
+ if (!isStaleOpfsHandleError(error)) {
1009
+ throw error;
1010
+ }
1011
+ // Leftover sync-access handles can make the first walk throw. Retry once
1012
+ // without deleting OPFS data; BaseFileManager resets flags if this still fails.
1013
+ await sleep(50);
1014
+ await configureRoot();
1015
+ }
1005
1016
  }
1006
1017
  async downloadAllFiles({ transactionIds, arweaveHost, excludedTransactions, }) {
1007
1018
  const fileDownloader = new FileDownloader();
@@ -1061,7 +1072,7 @@ class BrowserFileManager {
1061
1072
  }
1062
1073
  catch (error) {
1063
1074
  // This is a no-op. We tried to create a directory that already exists.
1064
- logger$2('Attempted to create a directory that already exists');
1075
+ logger$3('Attempted to create a directory that already exists');
1065
1076
  }
1066
1077
  }
1067
1078
  }
@@ -1083,7 +1094,7 @@ class BrowserFileManager {
1083
1094
  const startTime = Date.now();
1084
1095
  let isBusy = false;
1085
1096
  const cancelableInterval = new CancelableInterval(async (stop) => {
1086
- logger$2('waitForFile', filePath);
1097
+ logger$3('waitForFile', filePath);
1087
1098
  if (isBusy) {
1088
1099
  return;
1089
1100
  }
@@ -1167,7 +1178,7 @@ class BrowserFileManager {
1167
1178
  const startTime = Date.now();
1168
1179
  let isBusy = false;
1169
1180
  const cancelableInterval = new CancelableInterval(async (stop) => {
1170
- logger$2('waitForFileWithContent', filePath);
1181
+ logger$3('waitForFileWithContent', filePath);
1171
1182
  if (isBusy) {
1172
1183
  return;
1173
1184
  }
@@ -1378,7 +1389,7 @@ class CancelableInterval {
1378
1389
  }
1379
1390
  catch (error) {
1380
1391
  if (error instanceof DOMException && error.name === 'AbortError') {
1381
- logger$2('Previous task was canceled.');
1392
+ logger$3('Previous task was canceled.');
1382
1393
  }
1383
1394
  else {
1384
1395
  console.error('Task error:', error);
@@ -3029,6 +3040,98 @@ var drizzleFiles = /*#__PURE__*/Object.freeze({
3029
3040
  snapshotJson: snapshotJson
3030
3041
  });
3031
3042
 
3043
+ const logger$2 = debug('seedSdk:browser:db:createSqlocalDrizzle');
3044
+ /** First sqlocal work can include sqlite-wasm fetch; keep this long to avoid false positives. */
3045
+ const SQLOCAL_FIRST_QUERY_TIMEOUT_MS = 90000;
3046
+ const HTTP_MODULE_WORKER_URL = /^https?:/i;
3047
+ function shouldBlobWrapModuleWorker(scriptURL, options) {
3048
+ const type = options?.type ?? 'classic';
3049
+ if (type !== 'module')
3050
+ return false;
3051
+ return HTTP_MODULE_WORKER_URL.test(String(scriptURL));
3052
+ }
3053
+ function createBlobModuleWorkerSource(scriptURL) {
3054
+ return `import ${JSON.stringify(String(scriptURL))};`;
3055
+ }
3056
+ /**
3057
+ * Construct SQLocal while starting its HTTPS module worker from a blob that
3058
+ * only imports the bundled worker URL. Some Chrome profiles kill
3059
+ * `new Worker(https://…/worker-HASH.js, { type: 'module' })` as an entry
3060
+ * script; importing the same URL from a blob worker reaches connect.
3061
+ *
3062
+ * The `Worker` patch is scoped to `factory()` so Vite still sees sqlocal's
3063
+ * own `new Worker(new URL('./worker', import.meta.url))` and emits a real
3064
+ * worker chunk.
3065
+ */
3066
+ function createSqlocalDrizzle(factory) {
3067
+ let rejectFailed;
3068
+ const workerFailed = new Promise((_, reject) => {
3069
+ rejectFailed = reject;
3070
+ });
3071
+ // Avoid an unhandled rejection if the caller throws before racing this promise.
3072
+ workerFailed.catch(() => { });
3073
+ const restore = installModuleWorkerBlobWrap((error) => {
3074
+ rejectFailed?.(error);
3075
+ });
3076
+ try {
3077
+ return { instance: factory(), workerFailed };
3078
+ }
3079
+ finally {
3080
+ restore();
3081
+ }
3082
+ }
3083
+ async function raceSqlocalStartup(work, workerFailed, timeoutMs = SQLOCAL_FIRST_QUERY_TIMEOUT_MS) {
3084
+ let timeoutId;
3085
+ const timedOut = new Promise((_, reject) => {
3086
+ timeoutId = setTimeout(() => {
3087
+ reject(new Error(`sqlocal database failed to become ready within ${timeoutMs}ms`));
3088
+ }, timeoutMs);
3089
+ });
3090
+ try {
3091
+ return await Promise.race([work, workerFailed, timedOut]);
3092
+ }
3093
+ finally {
3094
+ if (timeoutId !== undefined) {
3095
+ clearTimeout(timeoutId);
3096
+ }
3097
+ }
3098
+ }
3099
+ function installModuleWorkerBlobWrap(onWorkerFailed) {
3100
+ const OriginalWorker = globalThis.Worker;
3101
+ if (typeof OriginalWorker === 'undefined') {
3102
+ return () => { };
3103
+ }
3104
+ function WrappedWorker(scriptURL, options) {
3105
+ const worker = shouldBlobWrapModuleWorker(scriptURL, options)
3106
+ ? new OriginalWorker(URL.createObjectURL(new Blob([createBlobModuleWorkerSource(scriptURL)], {
3107
+ type: 'text/javascript',
3108
+ })), { ...options, type: 'module' })
3109
+ : new OriginalWorker(scriptURL, options);
3110
+ const fail = (event) => {
3111
+ const filename = 'filename' in event && typeof event.filename === 'string'
3112
+ ? event.filename
3113
+ : '';
3114
+ const message = 'message' in event && typeof event.message === 'string'
3115
+ ? event.message
3116
+ : event.type;
3117
+ const error = new Error(filename
3118
+ ? `sqlocal worker failed to start (${event.type}): ${message} [${filename}]`
3119
+ : `sqlocal worker failed to start (${event.type}): ${message}`);
3120
+ logger$2('[createSqlocalDrizzle] worker failed', error.message);
3121
+ onWorkerFailed(error);
3122
+ };
3123
+ worker.addEventListener('error', fail);
3124
+ worker.addEventListener('messageerror', fail);
3125
+ return worker;
3126
+ }
3127
+ WrappedWorker.prototype = OriginalWorker.prototype;
3128
+ Object.setPrototypeOf(WrappedWorker, OriginalWorker);
3129
+ globalThis.Worker = WrappedWorker;
3130
+ return () => {
3131
+ globalThis.Worker = OriginalWorker;
3132
+ };
3133
+ }
3134
+
3032
3135
  const logger$1 = debug('seedSdk:browser:db:Db');
3033
3136
  class BrowserDb {
3034
3137
  getAppDb() {
@@ -3061,11 +3164,14 @@ class BrowserDb {
3061
3164
  logger$1('[Db.prepareDb] waiting for journal file to be fully written...');
3062
3165
  await BaseFileManager.waitForFileWithContent(journalFilePath, 100, 5000);
3063
3166
  logger$1('[Db.prepareDb] journal file is ready');
3064
- // Initialize SQLocalDrizzle with reactive: true to enable reactive queries
3065
- const sqlocalDrizzle = new SQLocalDrizzle({
3167
+ // Initialize SQLocalDrizzle with reactive: true to enable reactive queries.
3168
+ // Blob-wrap sqlocal's HTTPS module worker so Chrome profiles that kill
3169
+ // `new Worker(https://…/worker-HASH.js, { type: 'module' })` as an entry
3170
+ // still reach connect via `import` of the same URL.
3171
+ const { instance: sqlocalDrizzle, workerFailed } = createSqlocalDrizzle(() => new SQLocalDrizzle({
3066
3172
  databasePath: `${this.filesDir}/db/seed.db`,
3067
- reactive: true // Enable reactive queries
3068
- });
3173
+ reactive: true,
3174
+ }));
3069
3175
  const { driver, batchDriver } = sqlocalDrizzle;
3070
3176
  // Store SQLocalDrizzle instance for reactive queries
3071
3177
  this.sqlocalInstance = sqlocalDrizzle;
@@ -3076,10 +3182,12 @@ class BrowserDb {
3076
3182
  schema,
3077
3183
  });
3078
3184
  logger$1('[Db.prepareDb] database prepared');
3079
- await this.runMigrations(db);
3080
- this.appDb = db;
3081
- const { backfillMetadataPropertyIds } = await import('./backfillMetadataPropertyIds-oypxoBXv.js');
3082
- await backfillMetadataPropertyIds();
3185
+ await raceSqlocalStartup((async () => {
3186
+ await this.runMigrations(db);
3187
+ this.appDb = db;
3188
+ const { backfillMetadataPropertyIds } = await import('./backfillMetadataPropertyIds-DYkvoOMz.js');
3189
+ await backfillMetadataPropertyIds();
3190
+ })(), workerFailed);
3083
3191
  return this.appDb;
3084
3192
  }
3085
3193
  catch (error) {