@seedprotocol/sdk 0.7.10 → 0.7.11-next.1396.g883ef47

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 (174) hide show
  1. package/README.md +1 -1
  2. package/dist/{BaseFileManager-DLou1TZS.js → BaseFileManager-D-pLXQAp.js} +2 -14
  3. package/dist/BaseFileManager-D-pLXQAp.js.map +1 -0
  4. package/dist/{Item-oPnmIehk.js → Item-BU9wIT7l.js} +2053 -412
  5. package/dist/Item-BU9wIT7l.js.map +1 -0
  6. package/dist/{ModelProperty-D2vJozmW.js → ModelProperty-Bv7KzP97.js} +40 -38
  7. package/dist/ModelProperty-Bv7KzP97.js.map +1 -0
  8. package/dist/{Schema-BMXRF4j9.js → Schema-C_4wv0RP.js} +22 -22
  9. package/dist/{Schema-BMXRF4j9.js.map → Schema-C_4wv0RP.js.map} +1 -1
  10. package/dist/{SchemaValidationService-CieGrj5c.js → SchemaValidationService-Dc-lpFQX.js} +9 -7
  11. package/dist/{SchemaValidationService-CieGrj5c.js.map → SchemaValidationService-Dc-lpFQX.js.map} +1 -1
  12. package/dist/arweaveContentTags-iW_HcWJA.js +1456 -0
  13. package/dist/arweaveContentTags-iW_HcWJA.js.map +1 -0
  14. package/dist/{configurePlatform-WkmvqeTO.js → configurePlatform-BH1YOZpg.js} +2 -2
  15. package/dist/{configurePlatform-WkmvqeTO.js.map → configurePlatform-BH1YOZpg.js.map} +1 -1
  16. package/dist/db/drizzle/0030_drop_property_uids.sql +1 -0
  17. package/dist/db/drizzle/meta/0030_snapshot.json +1638 -0
  18. package/dist/db/drizzle/meta/_journal.json +8 -1
  19. package/dist/{detachRowsBeforeDelete-BZr_0iZU.js → detachRowsBeforeDelete-Cie55SoG.js} +4 -6
  20. package/dist/detachRowsBeforeDelete-Cie55SoG.js.map +1 -0
  21. package/dist/dist/{BaseFileManager-DLou1TZS.d.ts → BaseFileManager-D-pLXQAp.d.ts} +432 -495
  22. package/dist/dist/BaseFileManager-D-pLXQAp.d.ts.map +1 -0
  23. package/dist/dist/{configurePlatform-WkmvqeTO.d.ts → configurePlatform-BH1YOZpg.d.ts} +1 -1
  24. package/dist/dist/configurePlatform-BH1YOZpg.d.ts.map +1 -0
  25. package/dist/dist/{index-BjWk0x4-.d.ts → index-2PaIhvOU.d.ts} +1 -64
  26. package/dist/dist/{index-BjWk0x4-.d.ts.map → index-2PaIhvOU.d.ts.map} +1 -1
  27. package/dist/dist/{index.node-BfiBriEq.d.ts → index.node-C3rI1upv.d.ts} +25 -281
  28. package/dist/dist/{index.node-BfiBriEq.d.ts.map → index.node-C3rI1upv.d.ts.map} +1 -1
  29. package/dist/dist/minimumUpgradeVersion-Dg2MguFf.d.ts +20 -0
  30. package/dist/dist/minimumUpgradeVersion-Dg2MguFf.d.ts.map +1 -0
  31. package/dist/dist/platform.node.d.ts +2 -2
  32. package/dist/download-DHWUPLlK.js +393 -0
  33. package/dist/download-DHWUPLlK.js.map +1 -0
  34. package/dist/{eas-FZPPqxqe.js → eas-MXEdKKVc.js} +12 -10
  35. package/dist/{eas-FZPPqxqe.js.map → eas-MXEdKKVc.js.map} +1 -1
  36. package/dist/ensureImageLocal-B6suz6FC.js +175 -0
  37. package/dist/ensureImageLocal-B6suz6FC.js.map +1 -0
  38. package/dist/{getPublishPayload-DKuEaq96.js → getPublishPayload-Dd3HCYeI.js} +8 -49
  39. package/dist/getPublishPayload-Dd3HCYeI.js.map +1 -0
  40. package/dist/{getPublishPendingDiff-CH5xLMjU.js → getPublishPendingDiff-kcTP52Kj.js} +13 -12
  41. package/dist/{getPublishPendingDiff-CH5xLMjU.js.map → getPublishPendingDiff-kcTP52Kj.js.map} +1 -1
  42. package/dist/{index-BjWk0x4-.js → index-2PaIhvOU.js} +2 -4
  43. package/dist/index-2PaIhvOU.js.map +1 -0
  44. package/dist/index-BXTyvnKb.js +28 -0
  45. package/dist/index-BXTyvnKb.js.map +1 -0
  46. package/dist/{index-DXRhFg1N.js → index-CmNqUKQN.js} +10 -8
  47. package/dist/index-CmNqUKQN.js.map +1 -0
  48. package/dist/{index-Gh42_47r.js → index-Xs_EDi-_.js} +18 -401
  49. package/dist/index-Xs_EDi-_.js.map +1 -0
  50. package/dist/{index.browser-DQstVvRV.js → index.browser-BkcOQGhw.js} +59 -102
  51. package/dist/index.browser-BkcOQGhw.js.map +1 -0
  52. package/dist/{index.node-BfiBriEq.js → index.node-C3rI1upv.js} +14 -36
  53. package/dist/index.node-C3rI1upv.js.map +1 -0
  54. package/dist/main.js +19 -19
  55. package/dist/{minimumUpgradeVersion-BDhHvHtr.js → minimumUpgradeVersion-Dg2MguFf.js} +38 -9
  56. package/dist/minimumUpgradeVersion-Dg2MguFf.js.map +1 -0
  57. package/dist/{modelPropertyRecordSchemas-DEe-lYhn.js → modelPropertyRecordSchemas-CEac3FB8.js} +10 -10
  58. package/dist/{modelPropertyRecordSchemas-DEe-lYhn.js.map → modelPropertyRecordSchemas-CEac3FB8.js.map} +1 -1
  59. package/dist/node.js +14 -12
  60. package/dist/node.js.map +1 -1
  61. package/dist/platform.browser.js +10 -12
  62. package/dist/platform.browser.js.map +1 -1
  63. package/dist/platform.node.js +5 -5
  64. package/dist/{property-iNW1N3vm.js → property-4jSqHieb.js} +9 -9
  65. package/dist/{property-iNW1N3vm.js.map → property-4jSqHieb.js.map} +1 -1
  66. package/dist/{errors-CnT0fSMK.js → publishErrors-DZXDX3B6.js} +1830 -245
  67. package/dist/publishErrors-DZXDX3B6.js.map +1 -0
  68. package/dist/{readHtmlBodyForStorageSeed-B7HgPmq6.js → readHtmlBodyForStorageSeed-Cva1DPzE.js} +10 -12
  69. package/dist/{readHtmlBodyForStorageSeed-B7HgPmq6.js.map → readHtmlBodyForStorageSeed-Cva1DPzE.js.map} +1 -1
  70. package/dist/seedSchema/index.ts +0 -1
  71. package/dist/src/Item/Item.d.ts.map +1 -1
  72. package/dist/src/ItemProperty/ItemProperty.d.ts +1 -0
  73. package/dist/src/ItemProperty/ItemProperty.d.ts.map +1 -1
  74. package/dist/src/ItemProperty/service/actors/initialize.d.ts.map +1 -1
  75. package/dist/src/Model/index.d.ts +0 -2
  76. package/dist/src/Model/index.d.ts.map +1 -1
  77. package/dist/src/browser/db/Db.d.ts.map +1 -1
  78. package/dist/src/browser/db/drizzleFiles.d.ts +3 -2
  79. package/dist/src/browser/db/drizzleFiles.d.ts.map +1 -1
  80. package/dist/src/browser/helpers/FileManager.d.ts +1 -3
  81. package/dist/src/browser/helpers/FileManager.d.ts.map +1 -1
  82. package/dist/src/browser/workers/FileDownloader.d.ts +1 -0
  83. package/dist/src/browser/workers/FileDownloader.d.ts.map +1 -1
  84. package/dist/src/browser/workers/ImageResizer.d.ts +1 -0
  85. package/dist/src/browser/workers/ImageResizer.d.ts.map +1 -1
  86. package/dist/src/client/actors/addModelsToDb.d.ts.map +1 -1
  87. package/dist/src/client/actors/saveAppState.d.ts.map +1 -1
  88. package/dist/src/client/actors/saveConfig.d.ts.map +1 -1
  89. package/dist/src/db/minimumUpgradeVersion.d.ts +20 -5
  90. package/dist/src/db/minimumUpgradeVersion.d.ts.map +1 -1
  91. package/dist/src/db/read/metadataProperty.d.ts +1 -1
  92. package/dist/src/db/read/metadataProperty.d.ts.map +1 -1
  93. package/dist/src/db/read/resolveModelRecord.d.ts +0 -20
  94. package/dist/src/db/read/resolveModelRecord.d.ts.map +1 -1
  95. package/dist/src/db/write/createMetadata.d.ts +1 -8
  96. package/dist/src/db/write/createMetadata.d.ts.map +1 -1
  97. package/dist/src/db/write/removeLocalCopiesForAddresses.d.ts +0 -5
  98. package/dist/src/db/write/removeLocalCopiesForAddresses.d.ts.map +1 -1
  99. package/dist/src/db/write/updateItemPropertyValue.d.ts.map +1 -1
  100. package/dist/src/events/files/download.d.ts.map +1 -1
  101. package/dist/src/events/item/syncDbWithEas.d.ts.map +1 -1
  102. package/dist/src/helpers/easPropertyCanonical.d.ts +1 -1
  103. package/dist/src/helpers/easPropertyCanonical.d.ts.map +1 -1
  104. package/dist/src/helpers/entity/detachRowsBeforeDelete.d.ts +2 -3
  105. package/dist/src/helpers/entity/detachRowsBeforeDelete.d.ts.map +1 -1
  106. package/dist/src/helpers/entity/entityLifecycle.d.ts +0 -2
  107. package/dist/src/helpers/entity/entityLifecycle.d.ts.map +1 -1
  108. package/dist/src/helpers/environment.d.ts +0 -13
  109. package/dist/src/helpers/environment.d.ts.map +1 -1
  110. package/dist/src/helpers/index.d.ts +0 -4
  111. package/dist/src/helpers/index.d.ts.map +1 -1
  112. package/dist/src/helpers/itemStorageFile.d.ts +0 -11
  113. package/dist/src/helpers/itemStorageFile.d.ts.map +1 -1
  114. package/dist/src/helpers/propertySchemaUid.d.ts +7 -5
  115. package/dist/src/helpers/propertySchemaUid.d.ts.map +1 -1
  116. package/dist/src/helpers/storageDir.d.ts +0 -2
  117. package/dist/src/helpers/storageDir.d.ts.map +1 -1
  118. package/dist/src/index.d.ts +4 -1
  119. package/dist/src/index.d.ts.map +1 -1
  120. package/dist/src/node/db/Db.d.ts +0 -2
  121. package/dist/src/node/db/Db.d.ts.map +1 -1
  122. package/dist/src/node/helpers/FileManager.d.ts +0 -2
  123. package/dist/src/node/helpers/FileManager.d.ts.map +1 -1
  124. package/dist/src/node/index.d.ts +11 -3
  125. package/dist/src/node/index.d.ts.map +1 -1
  126. package/dist/src/outbox/index.d.ts +5 -5
  127. package/dist/src/outbox/index.d.ts.map +1 -1
  128. package/dist/src/seedSchema/index.d.ts +0 -1
  129. package/dist/src/seedSchema/index.d.ts.map +1 -1
  130. package/dist/{syncDbWithEas-FuyqoEKk.js → syncDbWithEas-V_9gIyHp.js} +25 -23
  131. package/dist/syncDbWithEas-V_9gIyHp.js.map +1 -0
  132. package/dist/{tolerantWebAccess-zEseJ2zT.js → tolerantWebAccess-D6hFxREe.js} +11 -13
  133. package/dist/{tolerantWebAccess-zEseJ2zT.js.map → tolerantWebAccess-D6hFxREe.js.map} +1 -1
  134. package/dist/{updateSeedRevokedAt-B9JRwr5T.js → updateSeedRevokedAt-CsAoUEEt.js} +4 -3
  135. package/dist/{updateSeedRevokedAt-B9JRwr5T.js.map → updateSeedRevokedAt-CsAoUEEt.js.map} +1 -1
  136. package/package.json +7 -12
  137. package/dist/BaseFileManager-DLou1TZS.js.map +0 -1
  138. package/dist/Item-oPnmIehk.js.map +0 -1
  139. package/dist/ModelProperty-D2vJozmW.js.map +0 -1
  140. package/dist/detachRowsBeforeDelete-BZr_0iZU.js.map +0 -1
  141. package/dist/dist/BaseFileManager-DLou1TZS.d.ts.map +0 -1
  142. package/dist/dist/configurePlatform-WkmvqeTO.d.ts.map +0 -1
  143. package/dist/dist/minimumUpgradeVersion-BDhHvHtr.d.ts +0 -9
  144. package/dist/dist/minimumUpgradeVersion-BDhHvHtr.d.ts.map +0 -1
  145. package/dist/errors-CnT0fSMK.js.map +0 -1
  146. package/dist/getPublishPayload-DKuEaq96.js.map +0 -1
  147. package/dist/getPublishUploads-DivYpgNw.js +0 -783
  148. package/dist/getPublishUploads-DivYpgNw.js.map +0 -1
  149. package/dist/index-BjWk0x4-.js.map +0 -1
  150. package/dist/index-CZMWKXLM.js +0 -27
  151. package/dist/index-CZMWKXLM.js.map +0 -1
  152. package/dist/index-DXRhFg1N.js.map +0 -1
  153. package/dist/index-Gh42_47r.js.map +0 -1
  154. package/dist/index.browser-DQstVvRV.js.map +0 -1
  155. package/dist/index.node-BfiBriEq.js.map +0 -1
  156. package/dist/minimumUpgradeVersion-BDhHvHtr.js.map +0 -1
  157. package/dist/publishGraph-CRn_N3NT.js +0 -311
  158. package/dist/publishGraph-CRn_N3NT.js.map +0 -1
  159. package/dist/seedSchema/PropertyUidSchema.ts +0 -16
  160. package/dist/src/db/read/getItemProperty.d.ts +0 -6
  161. package/dist/src/db/read/getItemProperty.d.ts.map +0 -1
  162. package/dist/src/db/read/isSeedRevoked.d.ts +0 -7
  163. package/dist/src/db/read/isSeedRevoked.d.ts.map +0 -1
  164. package/dist/src/db/write/saveMetadata.d.ts +0 -3
  165. package/dist/src/db/write/saveMetadata.d.ts.map +0 -1
  166. package/dist/src/db/write/updateMetadata.d.ts +0 -13
  167. package/dist/src/db/write/updateMetadata.d.ts.map +0 -1
  168. package/dist/src/seedSchema/PropertyUidSchema.d.ts +0 -64
  169. package/dist/src/seedSchema/PropertyUidSchema.d.ts.map +0 -1
  170. package/dist/src/types/fileManager.d.ts +0 -13
  171. package/dist/src/types/fileManager.d.ts.map +0 -1
  172. package/dist/syncDbWithEas-FuyqoEKk.js.map +0 -1
  173. package/dist/tabEvents-DT5ez6io.js +0 -3830
  174. package/dist/tabEvents-DT5ez6io.js.map +0 -1
package/README.md CHANGED
@@ -75,7 +75,7 @@ See the [Getting Started guide](https://github.com/JournoLabs/seed-protocol-sdk/
75
75
  | Import | Use |
76
76
  | --- | --- |
77
77
  | `@seedprotocol/sdk` | Main API: `client`, `Schema`, `Model`, `Item`, `ItemProperty`, query helpers |
78
- | `@seedprotocol/sdk/node` | Node entry: `client`, `Item`, `FileManager`, `Db` |
78
+ | `@seedprotocol/sdk/node` | Node entry: `client`, `Item`, `NodeFileManager`, `NodeDb` |
79
79
  | `@seedprotocol/sdk/platform` | Platform services: `configurePlatform`, `createPlatformServices` |
80
80
  | `@seedprotocol/sdk/vite` | Re-export of `seedVitePlugin` from `@seedprotocol/vite`, which you install yourself (optional peer) |
81
81
 
@@ -286,18 +286,6 @@ const modelRelations = relations(modelUids, ({ one }) => ({
286
286
  model: one(models),
287
287
  }));
288
288
 
289
- const propertyUids = sqliteTable('property_uids', {
290
- id: int('id').primaryKey({ autoIncrement: true }),
291
- uid: text('uid').notNull(),
292
- propertyId: int('property_id')
293
- .notNull()
294
- .unique()
295
- .references(() => properties.id),
296
- });
297
- const propertyUidRelations = relations(propertyUids, ({ one }) => ({
298
- property: one(properties),
299
- }));
300
-
301
289
  const config = sqliteTable('config', {
302
290
  id: integer('id').primaryKey({ autoIncrement: true }),
303
291
  key: text('key').notNull(),
@@ -650,5 +638,5 @@ var BaseFileManager$1 = /*#__PURE__*/Object.freeze({
650
638
  BaseFileManager: BaseFileManager
651
639
  });
652
640
 
653
- export { BaseFileManager$1 as A, BaseDb as B, ModelSchemaSchema as M, SQLITE_BUSY_RETRY_DELAYS_MS as S, appState as a, modelUids as b, config as c, models as d, arweaveL1FinalizeJobs as e, easSyncProcesses as f, entityChanges as g, htmlEmbeddedImageCoPublish as h, modelRelations as i, modelSchemas as j, modelsRelations as k, properties as l, metadata as m, propertiesRelations as n, propertyUidRelations as o, pendingWrites as p, propertyUids as q, publishProcesses as r, seeds as s, schemas as t, uploadProcesses as u, versions as v, BaseFileManager as w, isSqliteBusyError as x, withSqliteBusyRetry as y, SchemaSchema as z };
654
- //# sourceMappingURL=BaseFileManager-DLou1TZS.js.map
641
+ export { BaseDb as B, ModelSchemaSchema as M, SQLITE_BUSY_RETRY_DELAYS_MS as S, appState as a, modelUids as b, config as c, models as d, arweaveL1FinalizeJobs as e, easSyncProcesses as f, entityChanges as g, htmlEmbeddedImageCoPublish as h, modelRelations as i, modelSchemas as j, modelsRelations as k, properties as l, metadata as m, propertiesRelations as n, publishProcesses as o, pendingWrites as p, schemas as q, BaseFileManager as r, seeds as s, isSqliteBusyError as t, uploadProcesses as u, versions as v, withSqliteBusyRetry as w, SchemaSchema as x, BaseFileManager$1 as y };
642
+ //# sourceMappingURL=BaseFileManager-D-pLXQAp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseFileManager-D-pLXQAp.js","sources":["../../src/browser/db/sqliteBusyRetry.ts","../../src/db/Db/BaseDb.ts","../../src/seedSchema/ModelSchema.ts","../../src/seedSchema/attestedUid.ts","../../src/seedSchema/SeedSchema.ts","../../src/seedSchema/VersionSchema.ts","../../src/seedSchema/MetadataSchema.ts","../../src/seedSchema/AppStateSchema.ts","../../src/seedSchema/ModelUidSchema.ts","../../src/seedSchema/ConfigSchema.ts","../../src/seedSchema/SchemaSchema.ts","../../src/seedSchema/ModelSchemaSchema.ts","../../src/seedSchema/PublishProcessSchema.ts","../../src/seedSchema/UploadProcessSchema.ts","../../src/seedSchema/ArweaveL1FinalizeSchema.ts","../../src/seedSchema/EasSyncProcessSchema.ts","../../src/seedSchema/HtmlEmbeddedImageCoPublishSchema.ts","../../src/seedSchema/PendingWriteSchema.ts","../../src/seedSchema/EntityChangeSchema.ts","../../src/helpers/FileManager/BaseFileManager.ts"],"sourcesContent":["import debug from 'debug'\n\nconst logger = debug('seedSdk:browser:db:sqliteBusyRetry')\n\n/** Waits between attempts; about 1 s in total. */\nexport const SQLITE_BUSY_RETRY_DELAYS_MS = [25, 75, 150, 300, 450]\n\n/**\n * Another connection (usually another tab) holds the database lock. SQLite reports this as\n * SQLITE_BUSY (\"database is locked\") or SQLITE_LOCKED (\"database table is locked\").\n */\nexport function isSqliteBusyError(error: unknown): boolean {\n // Drizzle wraps a driver's error (\"Failed query: ...\") and keeps it as `cause`\n for (let current: unknown = error, depth = 0; current != null && depth < 5; depth++) {\n const message = current instanceof Error ? current.message : String(current)\n if (/SQLITE_BUSY|SQLITE_LOCKED|database (table )?is locked/i.test(message)) return true\n current = (current as { cause?: unknown }).cause\n }\n return false\n}\n\n/**\n * Retries a statement another tab's lock rejected. Safe for the SDK's writes because each is a\n * single autocommit statement: one that failed with SQLITE_BUSY didn't apply. Don't use this for\n * statements inside a transaction, where a retry would replay part of it.\n */\nexport function withSqliteBusyRetry<Args extends unknown[], R>(\n driver: (...args: Args) => Promise<R>,\n delaysMs: number[] = SQLITE_BUSY_RETRY_DELAYS_MS,\n): (...args: Args) => Promise<R> {\n return async (...args: Args) => {\n for (let attempt = 0; ; attempt++) {\n try {\n return await driver(...args)\n } catch (error) {\n if (!isSqliteBusyError(error) || attempt >= delaysMs.length) throw error\n logger(`database busy (attempt ${attempt + 1}); retrying`)\n await new Promise((resolve) => setTimeout(resolve, delaysMs[attempt]))\n }\n }\n }\n}\n","import type { IDb } from '@/interfaces/IDb'\nimport { Observable } from 'rxjs'\nimport { isSqliteBusyError, SQLITE_BUSY_RETRY_DELAYS_MS } from '@/browser/db/sqliteBusyRetry'\n\nexport abstract class BaseDb {\n static filesDir: string | undefined\n private static _impl: IDb | null = null\n\n static configure(impl: IDb): void {\n if (!impl) {\n throw new Error(\n 'Cannot configure Db with undefined or null. Ensure the platform-specific Db is properly created.',\n )\n }\n BaseDb._impl = impl\n }\n\n private static requireImpl(): IDb {\n if (!BaseDb._impl) {\n throw new Error(\n 'Db not configured. Call BaseDb.configure() during platform init.',\n )\n }\n return BaseDb._impl\n }\n\n static getAppDb(): any {\n return BaseDb.requireImpl().getAppDb()\n }\n\n static prepareDb(filesDir: string, config?: any): Promise<any> {\n return BaseDb.requireImpl().prepareDb(filesDir, config)\n }\n\n /** Closes the app database; see IDb.close. Does nothing before configure(). */\n static async close(): Promise<void> {\n await BaseDb._impl?.close()\n }\n\n static isAppDbReady(): boolean {\n if (!BaseDb._impl) {\n return false\n }\n return BaseDb._impl.isAppDbReady()\n }\n\n static connectToDb(pathToDir: string): Promise<unknown> {\n return BaseDb.requireImpl().connectToDb(pathToDir)\n }\n\n static async migrate(pathToDbDir: string, dbName: string, dbId: string): Promise<void> {\n return BaseDb.requireImpl().migrate(pathToDbDir, dbName, dbId)\n }\n\n /**\n * Execute a reactive query that emits new results whenever the underlying data changes.\n *\n * Supports two usage patterns:\n * 1. SQL tag function (browser only): liveQuery((sql) => sql`SELECT * FROM models`)\n * 2. Drizzle query builder: liveQuery(db.select().from(models))\n *\n * On Node only the query builder works (a tag function throws), and it is re-run every second;\n * the observable emits when the result changes.\n */\n static liveQuery<T>(query: ((sql: any) => any) | any): Observable<T[]> {\n return BaseDb.requireImpl().liveQuery<T>(query)\n }\n\n /**\n * Runs `fn` in one transaction: every query it runs on `tx` (a Drizzle database, used like\n * `getAppDb()`) commits together, or none does when `fn` throws. Queries on `getAppDb()` inside\n * `fn` are not part of the transaction, and in the browser they wait for it to end, so don't\n * call `getAppDb()` or `BaseDb.transaction` from `fn`.\n *\n * When another connection (another tab) holds the database lock, the whole transaction is\n * retried, so `fn` must have no side effects outside `tx`.\n */\n static async transaction<T>(fn: (tx: any) => Promise<T>): Promise<T> {\n const impl = BaseDb.requireImpl()\n for (let attempt = 0; ; attempt++) {\n try {\n return await impl.transaction(fn)\n } catch (error) {\n if (!isSqliteBusyError(error) || attempt >= SQLITE_BUSY_RETRY_DELAYS_MS.length) throw error\n await new Promise((resolve) => setTimeout(resolve, SQLITE_BUSY_RETRY_DELAYS_MS[attempt]))\n }\n }\n }\n}\n","import { integer, sqliteTable, text, unique } from 'drizzle-orm/sqlite-core'\nimport { relations } from 'drizzle-orm'\nimport { InferInsertModel, InferSelectModel } from 'drizzle-orm'\n\n\nexport const models = sqliteTable(\n 'models',\n {\n id: integer('id').primaryKey({ autoIncrement: true }),\n name: text('name').notNull(),\n schemaFileId: text('schema_file_id'), // ID from JSON file for change tracking - must be unique\n isEdited: integer('is_edited', { mode: 'boolean' }), // true if model has been edited locally, false if matches schema file\n },\n (table) => {\n return {\n uniqueSchemaFileId: unique('unique_schema_file_id').on(table.schemaFileId),\n }\n }\n)\n\nexport const modelsRelations = relations(models, ({ many }) => ({\n properties: many(properties),\n}))\n\nexport type NewModelRecord = typeof models.$inferInsert\nexport type ModelRecordType = typeof models.$inferSelect\n\nexport const properties = sqliteTable(\n 'properties',\n {\n id: integer('id').primaryKey({ autoIncrement: true }),\n name: text('name').notNull(),\n dataType: text('data_type').notNull(),\n modelId: integer('model_id')\n .notNull()\n .references(() => models.id),\n refModelId: integer('ref_model_id').references(() => models.id),\n refValueType: text('ref_value_type'),\n schemaFileId: text('schema_file_id'), // ID from JSON file for change tracking\n isEdited: integer('is_edited', { mode: 'boolean' }), // true if property has been edited locally, false if matches schema file\n required: integer('required', { mode: 'boolean' }), // true if relation/image property is required (publish fails when related item not found)\n // Storage settings from the schema file's `storage: { type, path, extension }`, in the internal\n // shape ModelProperty uses. Null when the property has no storage config.\n storageType: text('storage_type'), // 'ItemStorage' | 'PropertyStorage'\n localStorageDir: text('local_storage_dir'), // storage.path, e.g. '/html'\n filenameSuffix: text('filename_suffix'), // storage.extension, e.g. '.html'\n // The whole definition as JSON: the schema file's property object, or a code-defined one\n // (validation, htmlEmbeddedDataUriPolicy, description and any other field). The columns above\n // win for the fields they hold. Read through helpers/propertyDefinition.\n definition: text('definition'),\n },\n (table) => {\n return {\n uniqueNameModelId: unique('unique_name_model_id').on(\n table.name,\n table.modelId,\n ),\n uniqueSchemaFileId: unique('unique_property_schema_file_id').on(table.schemaFileId),\n }\n },\n)\n\nexport const propertiesRelations = relations(properties, ({ one }) => ({\n model: one(models),\n refModel: one(models),\n}))\n\nexport type NewPropertyRecord = InferInsertModel<typeof properties>\nexport type PropertyType = InferSelectModel<typeof properties>\n","import { sql, type SQL } from 'drizzle-orm'\nimport type { SQLiteColumn } from 'drizzle-orm/sqlite-core'\n\n/**\n * True for a stored attestation uid, false for the placeholders a draft row holds (NULL, '',\n * 'NULL', ZERO_BYTES32; see `isPlaceholderUid` in @seedprotocol/eas). The predicate of the partial\n * unique indexes on `seeds.uid` and `versions.uid`.\n */\nexport const attestedUidSql = (column: SQLiteColumn): SQL =>\n sql`${column} IS NOT NULL AND trim(${column}) NOT IN ('', 'NULL') AND lower(trim(${column})) != '0x0000000000000000000000000000000000000000000000000000000000000000'`\n","import { InferSelectModel } from 'drizzle-orm'\nimport { index, int, sqliteTable, text, uniqueIndex } from 'drizzle-orm/sqlite-core'\nimport { attestedUidSql } from './attestedUid'\n\nexport const seeds = sqliteTable(\n 'seeds',\n {\n localId: text('local_id').unique(),\n uid: text('uid'),\n schemaUid: text('schema_uid'),\n type: text('type'),\n // schemaFileId of the models row this item belongs to (= Model.id). Disambiguates items whose\n // model name exists in more than one schema; null for legacy rows that couldn't be backfilled.\n modelFileId: text('model_file_id'),\n publisher: text('publisher'),\n attestationRaw: text('attestation_raw'),\n attestationCreatedAt: int('attestation_created_at'),\n // Set on insert when the writer leaves it out. No $onUpdate: readers rank rows by\n // COALESCE(attestation_created_at, created_at), and some writers move it on purpose.\n createdAt: int('created_at').$defaultFn(() => Date.now()),\n // Set on every insert and update unless the writer passes a value.\n updatedAt: int('updated_at')\n .$defaultFn(() => Date.now())\n .$onUpdate(() => Date.now()),\n _markedForDeletion: int('_marked_for_deletion'),\n revokedAt: int('revoked_at'),\n },\n (table) => [\n index('seeds_uid_idx').on(table.uid),\n index('seeds_type_idx').on(table.type),\n // One row per attested seed uid (migration 0029). Drafts hold a placeholder uid and are left out.\n uniqueIndex('seeds_attested_uid_unique').on(table.uid).where(attestedUidSql(table.uid)),\n ],\n // {\n // triggers: [\n // sql<string>`CREATE TRIGGER IF NOT EXISTS seeds_created_at_trigger\n // BEFORE INSERT\n // ON seeds\n // FOR EACH ROW\n // BEGIN\n // SELECT strftime('%s', 'now') * 1000 INTO NEW.created_at;\n // END;`,\n // ],\n // },\n)\n\nexport type SeedType = InferSelectModel<typeof seeds>\n","import { index, int, sqliteTable, text, uniqueIndex } from 'drizzle-orm/sqlite-core'\nimport { attestedUidSql } from './attestedUid'\nimport { InferSelectModel } from 'drizzle-orm'\n\nexport const versions = sqliteTable('versions', {\n localId: text('local_id').unique(),\n uid: text('uid'),\n seedLocalId: text('seed_local_id'),\n seedUid: text('seed_uid'),\n seedType: text('seed_type'),\n note: text('note'),\n // Set on insert when the writer leaves it out. No $onUpdate: readers rank rows by\n // COALESCE(attestation_created_at, created_at), and some writers move it on purpose.\n createdAt: int('created_at').$defaultFn(() => Date.now()),\n // Set on every insert and update unless the writer passes a value.\n updatedAt: int('updated_at')\n .$defaultFn(() => Date.now())\n .$onUpdate(() => Date.now()),\n attestationCreatedAt: int('attestation_created_at'),\n attestationRaw: text('attestation_raw'),\n publisher: text('publisher'),\n /**\n * When the version attestation was revoked, in Unix seconds (EAS `revocationTime`, or the local\n * unpublish time until sync confirms it). Null while live or unpublished.\n */\n revokedAt: int('revoked_at'),\n}, (table) => [\n index('versions_seed_local_id_idx').on(table.seedLocalId),\n // One row per attested version uid (migration 0029). Drafts hold a placeholder uid and are left out.\n uniqueIndex('versions_attested_uid_unique').on(table.uid).where(attestedUidSql(table.uid)),\n])\n\nexport type VersionsType = InferSelectModel<typeof versions>\n","import { index, int, integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'\nimport { InferSelectModel } from 'drizzle-orm'\nimport { properties } from './ModelSchema'\n\nexport const metadata = sqliteTable('metadata', {\n localId: text('local_id').unique(),\n uid: text('uid'),\n propertyId: integer('property_id').references(() => properties.id),\n propertyName: text('property_name'),\n propertyValue: text('property_value'),\n schemaUid: text('schema_uid'),\n modelType: text('model_type'),\n seedLocalId: text('seed_local_id'),\n seedUid: text('seed_uid'),\n versionLocalId: text('version_local_id'),\n versionUid: text('version_uid'),\n easDataType: text('eas_data_type'),\n refValueType: text('ref_value_type'),\n refModelUid: text('ref_schema_uid'),\n refSeedType: text('ref_seed_type'),\n refResolvedValue: text('ref_resolved_value'),\n refResolvedDisplayValue: text('ref_resolved_display_value'),\n localStorageDir: text('local_storage_dir'),\n attestationRaw: text('attestation_raw'),\n attestationCreatedAt: int('attestation_created_at'),\n contentHash: text('content_hash'),\n // Set on insert when the writer leaves it out. No $onUpdate: readers rank rows by\n // COALESCE(attestation_created_at, created_at), and some writers move it on purpose.\n createdAt: int('created_at').$defaultFn(() => Date.now()),\n // Set on every insert and update unless the writer passes a value.\n updatedAt: int('updated_at')\n .$defaultFn(() => Date.now())\n .$onUpdate(() => Date.now()),\n publisher: text('publisher'),\n // Unix seconds when this row's attestation was revoked on EAS; null while it's live (or for a\n // local, unpublished row). EAS sync keeps only the canonical attestation per (version, property\n // schema): the newest live one, or the newest revoked one when all are revoked. So a non-null\n // value marks a property kept only for its last value, not one that is present on the version.\n revokedAt: int('revoked_at'),\n // For a row EAS sync derived for an ItemStorage property from a `storage_transaction_id`\n // attestation (uid null, ref_value_type 'file', value = the transaction id): that attestation's\n // uid. Null for every other row. Marks the row as published content, not a local draft.\n derivedFromUid: text('derived_from_uid'),\n // On a cleared local row (null value): publish revokes the property's attestations instead of\n // attesting the empty value (ADR 0021). Null on every other row.\n retract: int('retract', { mode: 'boolean' }),\n}, (table) => [\n index('metadata_seed_local_id_property_name_idx').on(table.seedLocalId, table.propertyName),\n index('metadata_seed_uid_idx').on(table.seedUid),\n])\n\nexport type MetadataType = InferSelectModel<typeof metadata>\n","import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core'\nimport { InferSelectModel } from 'drizzle-orm'\nexport const appState = sqliteTable('appState', {\n key: text('key').unique(),\n value: text('value'),\n createdAt: int('created_at'),\n updatedAt: int('updated_at'),\n})\n\nexport type appStateType = InferSelectModel<typeof appState>\n","import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core'\nimport { relations } from 'drizzle-orm'\nimport { models } from './ModelSchema'\n\nexport const modelUids = sqliteTable('model_uids', {\n id: int('id').primaryKey({ autoIncrement: true }),\n uid: text('uid').notNull(),\n modelId: int('model_id')\n .notNull()\n .unique()\n .references(() => models.id),\n})\n\nexport const modelRelations = relations(modelUids, ({ one }) => ({\n model: one(models),\n}))\n","import { integer, sqliteTable, text, blob, } from 'drizzle-orm/sqlite-core'\nimport { InferSelectModel } from 'drizzle-orm'\n\nexport const config = sqliteTable(\n 'config',\n {\n id: integer('id').primaryKey({ autoIncrement: true }),\n key: text('key').notNull(),\n text: text('text'),\n json: text('json'),\n blob: blob('blob'),\n }\n)\n\nexport type configType = InferSelectModel<typeof config>","import { InferSelectModel, } from 'drizzle-orm'\nimport { int, sqliteTable, text, integer, unique } from 'drizzle-orm/sqlite-core'\n\n\nexport const schemas = sqliteTable(\n 'schemas',\n {\n id: integer('id').primaryKey({ autoIncrement: true }),\n name: text('name').notNull(),\n version: integer('version').notNull(),\n schemaFileId: text('schema_file_id'), // ID from JSON file for change tracking - must be unique\n schemaData: text('schema_data'), // Full JSON schema content (SchemaFileFormat as JSON string)\n isDraft: integer('is_draft', { mode: 'boolean' }), // true if schema is in draft/editing state, false if published to file\n isEdited: integer('is_edited', { mode: 'boolean' }), // true if schema has been edited locally, false if matches schema file\n // Hash of the schema file applySchemaFile last wrote to the rows (with schema_file_id and\n // version): a file with the same three is not applied again.\n contentHash: text('content_hash'),\n createdAt: int('created_at'),\n updatedAt: int('updated_at'),\n },\n (table) => {\n return {\n uniqueSchemaFileId: unique('unique_schema_schema_file_id').on(table.schemaFileId),\n }\n }\n)\n\nexport type SchemaType = InferSelectModel<typeof schemas>","import { integer, sqliteTable, unique } from 'drizzle-orm/sqlite-core';\nimport { InferSelectModel } from 'drizzle-orm';\nimport { schemas } from './SchemaSchema';\nimport { models } from './ModelSchema';\n\nexport const modelSchemas = sqliteTable('model_schemas', {\n id: integer('id').primaryKey({ autoIncrement: true }),\n modelId: integer('model_id').references(() => models.id),\n schemaId: integer('schema_id').references(() => schemas.id),\n}, (table) => [\n // One link per model and schema (migration 0029)\n unique('model_schemas_model_id_schema_id_unique').on(table.modelId, table.schemaId),\n])\n\nexport type ModelSchemaType = InferSelectModel<typeof modelSchemas>","import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core'\nimport { InferSelectModel } from 'drizzle-orm'\n\nexport const publishProcesses = sqliteTable('publish_processes', {\n id: int('id').primaryKey({ autoIncrement: true }),\n seedLocalId: text('seed_local_id').notNull(),\n modelName: text('model_name').notNull(),\n schemaId: text('schema_id'),\n status: text('status').notNull(), // 'in_progress' | 'completed' | 'failed' | 'interrupted'\n startedAt: int('started_at').notNull(),\n completedAt: int('completed_at'),\n errorMessage: text('error_message'),\n errorStep: text('error_step'),\n errorDetails: text('error_details'),\n errorCode: text('error_code'), // e.g. ManagedAccountPublishError.code\n persistedSnapshot: text('persisted_snapshot').notNull(),\n seedId: text('seed_id'),\n existingSeedUid: text('existing_seed_uid'),\n createdAt: int('created_at'),\n updatedAt: int('updated_at'),\n})\n\nexport type PublishProcessType = InferSelectModel<typeof publishProcesses>\n","import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core'\nimport { InferSelectModel } from 'drizzle-orm'\n\nexport const uploadProcesses = sqliteTable('upload_processes', {\n id: int('id').primaryKey({ autoIncrement: true }),\n reimbursementConfirmed: int('reimbursement_confirmed').notNull(), // 0 or 1 for boolean\n reimbursementTransactionId: text('reimbursement_transaction_id'),\n transactionKeys: text('transaction_keys'),\n persistedSnapshot: text('persisted_snapshot').notNull(), // JSON string\n createdAt: int('created_at'),\n updatedAt: int('updated_at'),\n})\n\nexport type UploadProcessType = InferSelectModel<typeof uploadProcesses>\n","import { int, sqliteTable, text, uniqueIndex } from 'drizzle-orm/sqlite-core'\nimport { InferSelectModel } from 'drizzle-orm'\n\n/** Background job: resolve L1 tx id and wait for L1 confirmation after bundler publish. */\nexport const arweaveL1FinalizeJobs = sqliteTable(\n 'arweave_l1_finalize_jobs',\n {\n id: int('id').primaryKey({ autoIncrement: true }),\n seedLocalId: text('seed_local_id').notNull(),\n dataItemId: text('data_item_id').notNull(),\n /** L1 bundle / anchor transaction id from gateway GraphQL `bundledIn.id`. */\n l1TransactionId: text('l1_transaction_id'),\n bundleId: text('bundle_id'),\n versionLocalId: text('version_local_id'),\n itemPropertyName: text('item_property_name'),\n /** `pending_l1` | `confirmed` | `failed` */\n phase: text('phase').notNull(),\n statusJson: text('status_json'),\n errorMessage: text('error_message'),\n createdAt: int('created_at').notNull(),\n updatedAt: int('updated_at').notNull(),\n },\n (table) => ({\n dataItemIdUnique: uniqueIndex('arweave_l1_finalize_jobs_data_item_id_unique').on(table.dataItemId),\n }),\n)\n\nexport type ArweaveL1FinalizeJobType = InferSelectModel<typeof arweaveL1FinalizeJobs>\n","import { InferSelectModel } from 'drizzle-orm'\nimport { int, sqliteTable, text } from 'drizzle-orm/sqlite-core'\n\nexport const easSyncProcesses = sqliteTable('eas_sync_processes', {\n id: int('id').primaryKey({ autoIncrement: true }),\n status: text('status').notNull(), // 'in_progress' | 'completed' | 'failed'\n startedAt: int('started_at').notNull(),\n completedAt: int('completed_at'),\n requestPayload: text('request_payload').notNull(),\n errorMessage: text('error_message'),\n errorDetails: text('error_details'),\n persistedSnapshot: text('persisted_snapshot').notNull(),\n createdAt: int('created_at'),\n updatedAt: int('updated_at'),\n})\n\nexport type EasSyncProcessType = InferSelectModel<typeof easSyncProcesses>\n","import { int, sqliteTable, text, uniqueIndex } from 'drizzle-orm/sqlite-core'\n\n/**\n * Links Image seeds materialized from Html `data:image/*` URIs to the parent Item seed for co-publish.\n * Rows are removed after a successful publish (see clearHtmlEmbeddedImageCoPublishRows).\n */\nexport const htmlEmbeddedImageCoPublish = sqliteTable(\n 'html_embedded_image_co_publish',\n {\n id: int('id').primaryKey({ autoIncrement: true }),\n parentSeedLocalId: text('parent_seed_local_id').notNull(),\n htmlSeedLocalId: text('html_seed_local_id').notNull(),\n imageSeedLocalId: text('image_seed_local_id').notNull(),\n /** Stable dedup key (e.g. sha256 of data URI or normalized URI string). */\n stableKey: text('stable_key').notNull(),\n createdAt: int('created_at').notNull(),\n },\n (t) => [\n uniqueIndex('html_embed_co_pub_parent_html_stable').on(\n t.parentSeedLocalId,\n t.htmlSeedLocalId,\n t.stableKey,\n ),\n ],\n)\n","import { index, int, sqliteTable, text, uniqueIndex } from 'drizzle-orm/sqlite-core'\nimport { InferInsertModel, InferSelectModel } from 'drizzle-orm'\n\n/**\n * The item write outbox (ADR 0019): one row per edit to an item, appended when the value is\n * assigned and applied to `seeds`, `versions` and `metadata` by the leader tab's drainer.\n */\nexport const pendingWrites = sqliteTable(\n 'pending_writes',\n {\n id: int('id').primaryKey({ autoIncrement: true }),\n /** Unique per op; the drainer and `save()` refer to an op by it. */\n opId: text('op_id').notNull(),\n /** Unused: nothing appends grouped ops. Kept until a migration drops it. */\n groupId: text('group_id'),\n seedLocalId: text('seed_local_id').notNull(),\n /** Null for ops on the seed itself (`create`, `delete`). */\n propertyName: text('property_name'),\n /** `create` | `set` | `delete` | `storage` */\n kind: text('kind').notNull(),\n /** JSON-encoded value. */\n value: text('value'),\n /**\n * A storage op's staged file: the assigned bytes, written by the tab that appended the op (an\n * ItemStorage op's staged path is in its JSON value too).\n */\n valueRef: text('value_ref'),\n /** The stored metadata row the edit was made against, to detect a synced row written since. */\n baseRowId: text('base_row_id'),\n /** Unused: the base uid is read through base_row_id. Kept until a migration drops it. */\n baseUid: text('base_uid'),\n createdAt: int('created_at').notNull(),\n /** The tab that appended the op. */\n tabId: text('tab_id'),\n /** `pending` | `applied` | `superseded` | `failed`. An op is claimed and applied in one transaction. */\n status: text('status').notNull(),\n error: text('error'),\n /** The name of the error that failed the op (`OwnershipError`, say), so a waiter can tell why. */\n errorName: text('error_name'),\n attempts: int('attempts').notNull().default(0),\n appliedAt: int('applied_at'),\n /** JSON the applier recorded when the op applied (for a `set`: the metadata row written). */\n result: text('result'),\n /** JSON: the synced value this op was applied over, when there was one (ADR 0019). */\n conflict: text('conflict'),\n conflictResolvedAt: int('conflict_resolved_at'),\n },\n (table) => ({\n opIdUnique: uniqueIndex('pending_writes_op_id_unique').on(table.opId),\n /** The drainer's order: per property, oldest first, among one status. */\n drainOrder: index('pending_writes_drain_order').on(\n table.status,\n table.seedLocalId,\n table.propertyName,\n table.createdAt,\n ),\n }),\n)\n\nexport type PendingWriteType = InferSelectModel<typeof pendingWrites>\nexport type NewPendingWrite = InferInsertModel<typeof pendingWrites>\n","import { index, int, sqliteTable, text } from 'drizzle-orm/sqlite-core'\nimport { InferSelectModel } from 'drizzle-orm'\n\n/**\n * The entity change log (ADR 0020): one row per row written to `seeds`, `versions` or `metadata`,\n * inserted by triggers (migration 0023), so it commits or rolls back with the write. The browser's\n * change feed reads it to tell loaded Items and ItemProperties which seeds changed. Nothing else\n * writes it; the leader tab prunes rows older than 10 minutes.\n */\nexport const entityChanges = sqliteTable(\n 'entity_changes',\n {\n seq: int('seq').primaryKey({ autoIncrement: true }),\n /** `seeds` | `versions` | `metadata` */\n tbl: text('tbl').notNull(),\n seedLocalId: text('seed_local_id'),\n seedUid: text('seed_uid'),\n /** Set for `metadata` rows only. */\n propertyName: text('property_name'),\n /** Unix ms when the trigger ran. */\n at: int('at').notNull(),\n },\n (table) => ({\n at: index('entity_changes_at').on(table.at),\n }),\n)\n\nexport type EntityChangeType = InferSelectModel<typeof entityChanges>\n","import type {\n DownloadAllFilesParams,\n DownloadAllFilesResult,\n DownloadSingleFileParams,\n IFileManager,\n ResizeAllImagesParams,\n ResizeImageParams,\n} from './IFileManager'\n\nexport abstract class BaseFileManager {\n private static fileSystemInitialized = false\n private static initializing = false\n private static workingDir: string | undefined\n private static _impl: IFileManager | null = null\n private static initializePromise: Promise<void> | null = null\n\n static configure(impl: IFileManager): void {\n if (!impl) {\n throw new Error(\n 'Cannot configure FileManager with undefined or null. Ensure the platform-specific FileManager is properly created.',\n )\n }\n BaseFileManager._impl = impl\n }\n\n private static requireImpl(): IFileManager {\n if (!BaseFileManager._impl) {\n throw new Error(\n 'FileManager not configured. Call BaseFileManager.configure() during platform init.',\n )\n }\n return BaseFileManager._impl\n }\n\n /**\n * Clears FS init flags so a later call can retry. Used after a failed init\n * and by tests. Does not unmount or delete any files.\n */\n static resetInitializationState(): void {\n this.fileSystemInitialized = false\n this.initializing = false\n this.initializePromise = null\n this.workingDir = undefined\n }\n\n static initializeFileSystem(workingDir?: string): Promise<void> {\n if (this.fileSystemInitialized) {\n return Promise.resolve()\n }\n if (this.initializePromise) {\n return this.initializePromise\n }\n\n this.initializing = true\n const pending = this.runInitializeFileSystem(workingDir).finally(() => {\n this.initializing = false\n if (this.initializePromise === pending) {\n this.initializePromise = null\n }\n })\n this.initializePromise = pending\n return pending\n }\n\n private static async runInitializeFileSystem(workingDir?: string): Promise<void> {\n await BaseFileManager.requireImpl().initializeFileSystem(workingDir)\n this.fileSystemInitialized = true\n this.workingDir = workingDir\n }\n\n static getWorkingDir(): string {\n if (!this.workingDir) {\n throw new Error('Working directory is not set')\n }\n return this.workingDir\n }\n\n /**\n * Build a path under the configured files root (e.g. /app-files).\n * Use this instead of hardcoding /files/ for images, html, json, etc.\n * @param subpaths - path segments to join (e.g. 'images', fileName)\n * @returns full path like /app-files/images/egg.jpg\n */\n static getFilesPath(...subpaths: string[]): string {\n const root = this.getWorkingDir().replace(/\\/$/, '')\n const parts = [root, ...subpaths].filter(Boolean)\n return parts.join('/').replace(/\\/+/g, '/')\n }\n\n static getContentUrlFromPath(path: string): Promise<string | undefined> {\n return BaseFileManager.requireImpl().getContentUrlFromPath(path)\n }\n\n static downloadAllFiles(params: DownloadAllFilesParams): Promise<DownloadAllFilesResult | void> {\n return BaseFileManager.requireImpl().downloadAllFiles(params)\n }\n\n static downloadFileByTransactionId({\n transactionId,\n arweaveHost,\n arweaveBaseUrls,\n excludedTransactions,\n expectedContentHash,\n compositeChildPaths,\n skipExisting,\n }: DownloadSingleFileParams): Promise<DownloadAllFilesResult | void> {\n return BaseFileManager.requireImpl().downloadAllFiles({\n transactionIds: [transactionId],\n arweaveHost,\n arweaveBaseUrls,\n excludedTransactions,\n expectedContentHashes: expectedContentHash ? { [transactionId]: expectedContentHash } : undefined,\n compositeChildPaths: compositeChildPaths ? { [transactionId]: compositeChildPaths } : undefined,\n skipExisting,\n })\n }\n\n static resizeImage({ filePath, width, height }: ResizeImageParams): Promise<void> {\n return BaseFileManager.requireImpl().resizeImage({ filePath, width, height })\n }\n\n static resizeAllImages({ width, height }: ResizeAllImagesParams): Promise<void> {\n return BaseFileManager.requireImpl().resizeAllImages({ width, height })\n }\n\n static pathExists(filePath: string): Promise<boolean> {\n return BaseFileManager.requireImpl().pathExists(filePath)\n }\n\n static invalidateCachedPaths(filePaths: string[]): Promise<void> {\n return BaseFileManager.requireImpl().invalidateCachedPaths(filePaths)\n }\n\n /** File size in bytes, or null if the path does not exist / cannot be stated. */\n static getFileSize(filePath: string): Promise<number | null> {\n return BaseFileManager.requireImpl().getFileSize(filePath)\n }\n\n /**\n * Returns a list of filenames in the given directory (e.g. 'images', 'files').\n */\n static listFiles(dir: string): Promise<string[]> {\n return BaseFileManager.requireImpl().listFiles(dir)\n }\n\n /**\n * Returns a list of image filenames in the images folder (originals only, excludes size subdirs).\n * Use this to get all stored images without traversing 480/760/1024/1440/1920 subdirectories.\n */\n static listImageFiles(): Promise<string[]> {\n return this.listFiles('images')\n }\n\n static createDirIfNotExists(filePath: string): Promise<void> {\n return BaseFileManager.requireImpl().createDirIfNotExists(filePath)\n }\n\n static async waitForFile(filePath: string): Promise<boolean> {\n return BaseFileManager.requireImpl().waitForFile(filePath)\n }\n\n static async waitForFileWithContent(\n filePath: string,\n interval?: number,\n timeout?: number,\n ): Promise<boolean> {\n return BaseFileManager.requireImpl().waitForFileWithContent(filePath, interval, timeout)\n }\n\n static async saveFile(filePath: string, content: string | Blob | ArrayBuffer): Promise<void> {\n return BaseFileManager.requireImpl().saveFile(filePath, content)\n }\n\n static saveFileSync(filePath: string, content: string | Blob | ArrayBuffer): void {\n return BaseFileManager.requireImpl().saveFileSync(filePath, content)\n }\n\n static async readFile(filePath: string): Promise<File> {\n return BaseFileManager.requireImpl().readFile(filePath)\n }\n\n static readFileSync(filePath: string): File {\n return BaseFileManager.requireImpl().readFileSync(filePath)\n }\n\n static async readFileAsBuffer(filePath: string): Promise<Buffer | Blob> {\n return BaseFileManager.requireImpl().readFileAsBuffer(filePath)\n }\n\n static async readFileAsString(filePath: string): Promise<string> {\n return BaseFileManager.requireImpl().readFileAsString(filePath)\n }\n\n static async getFs(): Promise<any> {\n return BaseFileManager.requireImpl().getFs()\n }\n\n static getFsSync(): any {\n return BaseFileManager.requireImpl().getFsSync()\n }\n\n static getPathModule(): any {\n return BaseFileManager.requireImpl().getPathModule()\n }\n\n static getParentDirPath(filePath: string): string {\n return BaseFileManager.requireImpl().getParentDirPath(filePath)\n }\n\n static getFilenameFromPath(filePath: string): string {\n return BaseFileManager.requireImpl().getFilenameFromPath(filePath)\n }\n}\n"],"names":[],"mappings":"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"}