@seedprotocol/sdk 0.4.20 → 0.4.22

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 (234) hide show
  1. package/dist/{ArweaveClient-C1bakApw.js → ArweaveClient-B-vm2Xae.js} +3 -3
  2. package/dist/{ArweaveClient-C1bakApw.js.map → ArweaveClient-B-vm2Xae.js.map} +1 -1
  3. package/dist/{ArweaveClient-Ck4wflb3.js → ArweaveClient-C-eLH0zU.js} +3 -3
  4. package/dist/{ArweaveClient-Ck4wflb3.js.map → ArweaveClient-C-eLH0zU.js.map} +1 -1
  5. package/dist/{Db-CCMLWMi-.js → Db-B7whB3oJ.js} +144 -6
  6. package/dist/Db-B7whB3oJ.js.map +1 -0
  7. package/dist/{Db-YFg99EDt.js → Db-nir1xVHg.js} +4 -4
  8. package/dist/{Db-YFg99EDt.js.map → Db-nir1xVHg.js.map} +1 -1
  9. package/dist/{EasClient-BmYeAnq7.js → EasClient-BH_feMaX.js} +2 -2
  10. package/dist/{EasClient-BmYeAnq7.js.map → EasClient-BH_feMaX.js.map} +1 -1
  11. package/dist/{EasClient-Bqzb-xF2.js → EasClient-CFguAKBp.js} +2 -2
  12. package/dist/{EasClient-Bqzb-xF2.js.map → EasClient-CFguAKBp.js.map} +1 -1
  13. package/dist/{FileManager-rVAH7uNp.js → FileManager-BR3jtuSl.js} +2 -2
  14. package/dist/{FileManager-rVAH7uNp.js.map → FileManager-BR3jtuSl.js.map} +1 -1
  15. package/dist/{FileManager-Ba1qAT8_.js → FileManager-C2uXql_C.js} +50 -5
  16. package/dist/FileManager-C2uXql_C.js.map +1 -0
  17. package/dist/{ModelProperty-Csj84uQv.js → ModelProperty-CIeLasI4.js} +24 -24
  18. package/dist/{ModelProperty-Csj84uQv.js.map → ModelProperty-CIeLasI4.js.map} +1 -1
  19. package/dist/{PathResolver-CzhXp_OH.js → PathResolver-CZoSnHBU.js} +2 -2
  20. package/dist/{PathResolver-CzhXp_OH.js.map → PathResolver-CZoSnHBU.js.map} +1 -1
  21. package/dist/{PathResolver-B5XBxiLt.js → PathResolver-DnrG1hUX.js} +2 -2
  22. package/dist/{PathResolver-B5XBxiLt.js.map → PathResolver-DnrG1hUX.js.map} +1 -1
  23. package/dist/{QueryClient-5NAcOOvw.js → QueryClient-DJOrJZRR.js} +3 -2
  24. package/dist/QueryClient-DJOrJZRR.js.map +1 -0
  25. package/dist/{QueryClient-BqpbpJEP.js → QueryClient-PqOg8mcw.js} +7 -3
  26. package/dist/QueryClient-PqOg8mcw.js.map +1 -0
  27. package/dist/{Schema-QjwZN91G.js → Schema-B3YQHTtu.js} +38 -38
  28. package/dist/{Schema-QjwZN91G.js.map → Schema-B3YQHTtu.js.map} +1 -1
  29. package/dist/{SchemaValidationService-Cwkeb4fG.js → SchemaValidationService-C4DIwn8Z.js} +2 -2
  30. package/dist/{SchemaValidationService-Cwkeb4fG.js.map → SchemaValidationService-C4DIwn8Z.js.map} +1 -1
  31. package/dist/{backfillMetadataPropertyIds-DCYUHZDQ.js → backfillMetadataPropertyIds-CBlRaU_M.js} +2 -2
  32. package/dist/{backfillMetadataPropertyIds-DCYUHZDQ.js.map → backfillMetadataPropertyIds-CBlRaU_M.js.map} +1 -1
  33. package/dist/cjs/{ModelProperty-m4dACdoX.js → ModelProperty-tfM38NL4.js} +17 -17
  34. package/dist/cjs/{ModelProperty-m4dACdoX.js.map → ModelProperty-tfM38NL4.js.map} +1 -1
  35. package/dist/cjs/{Schema-DlSTkGtE.js → Schema-44NqLqMV.js} +20 -20
  36. package/dist/cjs/{Schema-DlSTkGtE.js.map → Schema-44NqLqMV.js.map} +1 -1
  37. package/dist/cjs/{SchemaValidationService-C06zlv2z.js → SchemaValidationService-Cq_YBzFN.js} +2 -2
  38. package/dist/cjs/{SchemaValidationService-C06zlv2z.js.map → SchemaValidationService-Cq_YBzFN.js.map} +1 -1
  39. package/dist/cjs/{backfillMetadataPropertyIds-gyFrK_ny.js → backfillMetadataPropertyIds-D1nLJAhB.js} +2 -2
  40. package/dist/cjs/{backfillMetadataPropertyIds-gyFrK_ny.js.map → backfillMetadataPropertyIds-D1nLJAhB.js.map} +1 -1
  41. package/dist/cjs/{getItem-gFz18nL2.js → getItem-BRoq91YU.js} +5 -3
  42. package/dist/cjs/getItem-BRoq91YU.js.map +1 -0
  43. package/dist/cjs/{getPublishPayload-DHNfV-GE.js → getPublishPayload-ddl-1x6R.js} +125 -26
  44. package/dist/cjs/getPublishPayload-ddl-1x6R.js.map +1 -0
  45. package/dist/cjs/{getPublishUploads-Dt-3g6eW.js → getPublishUploads-BljRx4o4.js} +88 -14
  46. package/dist/cjs/getPublishUploads-BljRx4o4.js.map +1 -0
  47. package/dist/cjs/{getSegmentedItemProperties-D3XpxCt8.js → getSegmentedItemProperties-iK5kepzl.js} +3 -3
  48. package/dist/cjs/{getSegmentedItemProperties-D3XpxCt8.js.map → getSegmentedItemProperties-iK5kepzl.js.map} +1 -1
  49. package/dist/cjs/{index-CHrEZZ71.js → index-C6rrqy3z.js} +3848 -2314
  50. package/dist/cjs/index-C6rrqy3z.js.map +1 -0
  51. package/dist/cjs/{index-4M2KX6s4.js → index-DqSDhOp3.js} +5 -3
  52. package/dist/cjs/index-DqSDhOp3.js.map +1 -0
  53. package/dist/cjs/{ownership-CC_YF-XC.js → ownership-CXlKAj4o.js} +4 -4
  54. package/dist/cjs/ownership-CXlKAj4o.js.map +1 -0
  55. package/dist/cjs/{property-DtCxuPrc.js → property-2D7P6a2q.js} +6 -4
  56. package/dist/cjs/{property-DtCxuPrc.js.map → property-2D7P6a2q.js.map} +1 -1
  57. package/dist/cjs/syncDbWithEas-DcKL-_Pb.js +610 -0
  58. package/dist/cjs/syncDbWithEas-DcKL-_Pb.js.map +1 -0
  59. package/dist/db/drizzle/drizzle/0011_normalize_placeholder_uids.sql +9 -0
  60. package/dist/db/drizzle/drizzle/0012_html_embedded_image_co_publish.sql +10 -0
  61. package/dist/db/drizzle/drizzle/0013_eas_sync_processes.sql +12 -0
  62. package/dist/db/drizzle/drizzle/meta/0013_snapshot.json +1262 -0
  63. package/dist/db/drizzle/drizzle/meta/_journal.json +21 -0
  64. package/dist/{getItem-CpjN3MFQ.js → getItem-CV3yTCRt.js} +5 -3
  65. package/dist/getItem-CV3yTCRt.js.map +1 -0
  66. package/dist/{getPublishPayload-CMhy9jfz.js → getPublishPayload-Ddc_LGPs.js} +129 -30
  67. package/dist/getPublishPayload-Ddc_LGPs.js.map +1 -0
  68. package/dist/{getPublishUploads-DTE4SEWk.js → getPublishUploads-Cf2J-5FR.js} +88 -14
  69. package/dist/getPublishUploads-Cf2J-5FR.js.map +1 -0
  70. package/dist/{getSegmentedItemProperties-DzPjQtcg.js → getSegmentedItemProperties-B2mzArFD.js} +3 -3
  71. package/dist/{getSegmentedItemProperties-DzPjQtcg.js.map → getSegmentedItemProperties-B2mzArFD.js.map} +1 -1
  72. package/dist/index-3Ekqb4QB.js +19 -0
  73. package/dist/index-3Ekqb4QB.js.map +1 -0
  74. package/dist/{index-dDmXPEJC.js → index-BRo7D3s1.js} +4 -2
  75. package/dist/index-BRo7D3s1.js.map +1 -0
  76. package/dist/{index-C1HlP_fU.js → index-DUMXLKJr.js} +3473 -1946
  77. package/dist/index-DUMXLKJr.js.map +1 -0
  78. package/dist/main.cjs +1 -1
  79. package/dist/main.js +504 -42
  80. package/dist/main.js.map +1 -1
  81. package/dist/node.js +10 -10
  82. package/dist/{ownership-C7GyMbsf.js → ownership-TR-mIjJh.js} +4 -4
  83. package/dist/ownership-TR-mIjJh.js.map +1 -0
  84. package/dist/{property-BNt7Dkmw.js → property-BSNWvgei.js} +6 -6
  85. package/dist/{property-BNt7Dkmw.js.map → property-BSNWvgei.js.map} +1 -1
  86. package/dist/{queries-D09IIJg_.js → queries-0FZBThGQ.js} +2 -2
  87. package/dist/{queries-D09IIJg_.js.map → queries-0FZBThGQ.js.map} +1 -1
  88. package/dist/seedSchema/EasSyncProcessSchema.ts +17 -0
  89. package/dist/seedSchema/HtmlEmbeddedImageCoPublishSchema.ts +25 -0
  90. package/dist/seedSchema/index.ts +2 -0
  91. package/dist/src/Item/Item.d.ts +19 -1
  92. package/dist/src/Item/Item.d.ts.map +1 -1
  93. package/dist/src/Item/service/actors/loadOrCreateItem.d.ts.map +1 -1
  94. package/dist/src/Item/service/itemMachineSingle.d.ts +1 -1
  95. package/dist/src/ItemProperty/ItemProperty.d.ts +2 -2
  96. package/dist/src/ItemProperty/ItemProperty.d.ts.map +1 -1
  97. package/dist/src/ItemProperty/service/actors/hydrateFromDb.d.ts.map +1 -1
  98. package/dist/src/ItemProperty/service/actors/loadOrCreateProperty.d.ts.map +1 -1
  99. package/dist/src/ItemProperty/service/actors/saveValueToDb/saveImage.d.ts.map +1 -1
  100. package/dist/src/ItemProperty/service/propertyMachine.d.ts +4 -1
  101. package/dist/src/ItemProperty/service/propertyMachine.d.ts.map +1 -1
  102. package/dist/src/Model/Model.d.ts +1 -1
  103. package/dist/src/Model/index.d.ts +1 -0
  104. package/dist/src/Model/index.d.ts.map +1 -1
  105. package/dist/src/Model/service/modelMachine.d.ts +21 -21
  106. package/dist/src/ModelProperty/service/modelPropertyMachine.d.ts +2 -2
  107. package/dist/src/Schema/Schema.d.ts +1 -1
  108. package/dist/src/Schema/service/addModelsMachine.d.ts +1 -1
  109. package/dist/src/Schema/service/schemaMachine.d.ts +56 -56
  110. package/dist/src/browser/db/drizzleFiles.d.ts +5 -2
  111. package/dist/src/browser/db/drizzleFiles.d.ts.map +1 -1
  112. package/dist/src/browser/helpers/FileManager.d.ts.map +1 -1
  113. package/dist/src/browser/helpers/QueryClient.d.ts.map +1 -1
  114. package/dist/src/client/ClientManager.d.ts.map +1 -1
  115. package/dist/src/client/actors/addModelsToDb.d.ts.map +1 -1
  116. package/dist/src/client/actors/platformClassesInit.d.ts.map +1 -1
  117. package/dist/src/client/clientManagerMachine.d.ts.map +1 -1
  118. package/dist/src/client/constants.d.ts +1 -0
  119. package/dist/src/client/constants.d.ts.map +1 -1
  120. package/dist/src/client/events.d.ts +8 -0
  121. package/dist/src/client/events.d.ts.map +1 -0
  122. package/dist/src/db/read/batchLatestPublishedVersionBySeedLocalIds.d.ts +10 -0
  123. package/dist/src/db/read/batchLatestPublishedVersionBySeedLocalIds.d.ts.map +1 -0
  124. package/dist/src/db/read/getItem.d.ts.map +1 -1
  125. package/dist/src/db/read/getItemData.d.ts.map +1 -1
  126. package/dist/src/db/read/getItems.d.ts +9 -0
  127. package/dist/src/db/read/getItems.d.ts.map +1 -1
  128. package/dist/src/db/read/getLatestPublishedVersionRow.d.ts +11 -0
  129. package/dist/src/db/read/getLatestPublishedVersionRow.d.ts.map +1 -0
  130. package/dist/src/db/read/getMetadataAttestationUidsForSeedUid.d.ts.map +1 -1
  131. package/dist/src/db/read/getPublishPayload.d.ts.map +1 -1
  132. package/dist/src/db/read/getPublishPendingDiff.d.ts +3 -3
  133. package/dist/src/db/read/getPublishPendingDiff.d.ts.map +1 -1
  134. package/dist/src/db/read/getPublishUploads.d.ts +10 -0
  135. package/dist/src/db/read/getPublishUploads.d.ts.map +1 -1
  136. package/dist/src/db/read/getSeedPublishState.d.ts +21 -0
  137. package/dist/src/db/read/getSeedPublishState.d.ts.map +1 -0
  138. package/dist/src/db/read/subqueries/versionData.d.ts +7 -0
  139. package/dist/src/db/read/subqueries/versionData.d.ts.map +1 -1
  140. package/dist/src/db/write/applyPropertyAttestationUidsFromPublish.d.ts +17 -0
  141. package/dist/src/db/write/applyPropertyAttestationUidsFromPublish.d.ts.map +1 -0
  142. package/dist/src/db/write/easSyncProcess.d.ts +12 -0
  143. package/dist/src/db/write/easSyncProcess.d.ts.map +1 -0
  144. package/dist/src/db/write/updateItemPropertyValue.d.ts.map +1 -1
  145. package/dist/src/db/write/updateSeedUid.d.ts +3 -1
  146. package/dist/src/db/write/updateSeedUid.d.ts.map +1 -1
  147. package/dist/src/db/write/updateVersionUid.d.ts +3 -1
  148. package/dist/src/db/write/updateVersionUid.d.ts.map +1 -1
  149. package/dist/src/events/files/download.d.ts +5 -1
  150. package/dist/src/events/files/download.d.ts.map +1 -1
  151. package/dist/src/events/item/easSyncManager.d.ts +71 -0
  152. package/dist/src/events/item/easSyncManager.d.ts.map +1 -0
  153. package/dist/src/events/item/index.d.ts.map +1 -1
  154. package/dist/src/events/item/mergeEasSyncOptions.d.ts +7 -0
  155. package/dist/src/events/item/mergeEasSyncOptions.d.ts.map +1 -0
  156. package/dist/src/events/item/syncDbWithEas.d.ts +0 -3
  157. package/dist/src/events/item/syncDbWithEas.d.ts.map +1 -1
  158. package/dist/src/helpers/ArweaveClient/BaseArweaveClient.d.ts +17 -0
  159. package/dist/src/helpers/ArweaveClient/BaseArweaveClient.d.ts.map +1 -1
  160. package/dist/src/helpers/ArweaveClient/arweaveL1UploadApi.d.ts +6 -0
  161. package/dist/src/helpers/ArweaveClient/arweaveL1UploadApi.d.ts.map +1 -1
  162. package/dist/src/helpers/ArweaveClient/selectReadGateway.d.ts +16 -0
  163. package/dist/src/helpers/ArweaveClient/selectReadGateway.d.ts.map +1 -0
  164. package/dist/src/helpers/ArweaveClient/uploadApiVerification.d.ts +5 -1
  165. package/dist/src/helpers/ArweaveClient/uploadApiVerification.d.ts.map +1 -1
  166. package/dist/src/helpers/FileManager/BaseFileManager.d.ts +1 -0
  167. package/dist/src/helpers/FileManager/BaseFileManager.d.ts.map +1 -1
  168. package/dist/src/helpers/compareMetadataRowsLatestFirst.d.ts +16 -0
  169. package/dist/src/helpers/compareMetadataRowsLatestFirst.d.ts.map +1 -0
  170. package/dist/src/helpers/constants.d.ts +22 -5
  171. package/dist/src/helpers/constants.d.ts.map +1 -1
  172. package/dist/src/helpers/easUid.d.ts +13 -0
  173. package/dist/src/helpers/easUid.d.ts.map +1 -0
  174. package/dist/src/helpers/environment.d.ts +5 -0
  175. package/dist/src/helpers/environment.d.ts.map +1 -1
  176. package/dist/src/helpers/htmlEmbeddedDataUriPublish.d.ts +55 -0
  177. package/dist/src/helpers/htmlEmbeddedDataUriPublish.d.ts.map +1 -0
  178. package/dist/src/helpers/index.d.ts +3 -0
  179. package/dist/src/helpers/index.d.ts.map +1 -1
  180. package/dist/src/helpers/mediaRef.d.ts +72 -0
  181. package/dist/src/helpers/mediaRef.d.ts.map +1 -0
  182. package/dist/src/helpers/ownership.d.ts +2 -2
  183. package/dist/src/helpers/property/index.d.ts +30 -0
  184. package/dist/src/helpers/property/index.d.ts.map +1 -1
  185. package/dist/src/helpers/publishConfig.d.ts +3 -4
  186. package/dist/src/helpers/publishConfig.d.ts.map +1 -1
  187. package/dist/src/helpers/readHtmlBodyForStorageSeed.d.ts +8 -0
  188. package/dist/src/helpers/readHtmlBodyForStorageSeed.d.ts.map +1 -0
  189. package/dist/src/helpers/waitForEntityIdle.d.ts.map +1 -1
  190. package/dist/src/index.d.ts +19 -3
  191. package/dist/src/index.d.ts.map +1 -1
  192. package/dist/src/interfaces/IItem.d.ts +1 -1
  193. package/dist/src/interfaces/IItem.d.ts.map +1 -1
  194. package/dist/src/interfaces/IQueryClient.d.ts +4 -0
  195. package/dist/src/interfaces/IQueryClient.d.ts.map +1 -1
  196. package/dist/src/node/helpers/QueryClient.d.ts.map +1 -1
  197. package/dist/src/seedSchema/EasSyncProcessSchema.d.ts +190 -0
  198. package/dist/src/seedSchema/EasSyncProcessSchema.d.ts.map +1 -0
  199. package/dist/src/seedSchema/HtmlEmbeddedImageCoPublishSchema.d.ts +122 -0
  200. package/dist/src/seedSchema/HtmlEmbeddedImageCoPublishSchema.d.ts.map +1 -0
  201. package/dist/src/seedSchema/index.d.ts +2 -0
  202. package/dist/src/seedSchema/index.d.ts.map +1 -1
  203. package/dist/src/services/write/writeProcessMachine.d.ts +1 -1
  204. package/dist/src/types/fileManager.d.ts +5 -0
  205. package/dist/src/types/fileManager.d.ts.map +1 -1
  206. package/dist/src/types/index.d.ts +7 -0
  207. package/dist/src/types/index.d.ts.map +1 -1
  208. package/dist/src/types/item.d.ts +3 -0
  209. package/dist/src/types/item.d.ts.map +1 -1
  210. package/dist/src/types/machines.d.ts +2 -0
  211. package/dist/src/types/machines.d.ts.map +1 -1
  212. package/dist/syncDbWithEas-CaytdS8D.js +583 -0
  213. package/dist/syncDbWithEas-CaytdS8D.js.map +1 -0
  214. package/dist/updateSeedRevokedAt-CfUXirik.js +22 -0
  215. package/dist/updateSeedRevokedAt-CfUXirik.js.map +1 -0
  216. package/package.json +2 -1
  217. package/dist/Db-CCMLWMi-.js.map +0 -1
  218. package/dist/FileManager-Ba1qAT8_.js.map +0 -1
  219. package/dist/QueryClient-5NAcOOvw.js.map +0 -1
  220. package/dist/QueryClient-BqpbpJEP.js.map +0 -1
  221. package/dist/cjs/getItem-gFz18nL2.js.map +0 -1
  222. package/dist/cjs/getPublishPayload-DHNfV-GE.js.map +0 -1
  223. package/dist/cjs/getPublishUploads-Dt-3g6eW.js.map +0 -1
  224. package/dist/cjs/index-4M2KX6s4.js.map +0 -1
  225. package/dist/cjs/index-CHrEZZ71.js.map +0 -1
  226. package/dist/cjs/ownership-CC_YF-XC.js.map +0 -1
  227. package/dist/getItem-CpjN3MFQ.js.map +0 -1
  228. package/dist/getPublishPayload-CMhy9jfz.js.map +0 -1
  229. package/dist/getPublishUploads-DTE4SEWk.js.map +0 -1
  230. package/dist/index-C1HlP_fU.js.map +0 -1
  231. package/dist/index-DvUyNZc9.js +0 -19
  232. package/dist/index-DvUyNZc9.js.map +0 -1
  233. package/dist/index-dDmXPEJC.js.map +0 -1
  234. package/dist/ownership-C7GyMbsf.js.map +0 -1
package/dist/main.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('immer');
4
4
  require('reflect-metadata');
5
- var main_cjs = require('./cjs/index-CHrEZZ71.js');
5
+ var main_cjs = require('./cjs/index-C6rrqy3z.js');
6
6
  require('pluralize');
7
7
  require('drizzle-orm');
8
8
  require('xstate');
package/dist/main.js CHANGED
@@ -1,14 +1,17 @@
1
1
  import 'reflect-metadata';
2
- import { o as BaseDb, A as versions, a6 as metadata, s as seeds, E as parseListPropertyValueFromStorage, q as normalizeRelationPropertyValue, r as resolveSeedIdsFromRefString } from './index-C1HlP_fU.js';
3
- export { w as BaseArweaveClient, u as BaseFileManager, aH as ClientManagerState, b1 as DEFAULT_ARWEAVE_GATEWAYS, b2 as DEFAULT_ARWEAVE_GRAPHQL_URL, b0 as DEFAULT_ARWEAVE_HOST, a1 as EasClient, u as FileManager, O as INTERNAL_DATA_TYPES, aP as ImageSize, t as Item, am as ItemProperty, aI as MachineIds, M as Model, b as ModelPropertyDataTypes, aO as SEED_PROTOCOL_SCHEMA_NAME, a$ as SeedModels, V as VERSION_SCHEMA_UID_OPTIMISM_SEPOLIA, Y as appState, a4 as arweaveL1FinalizeJobs, ao as client, aJ as createNewItem, bk as createSchema, an as eventEmitter, az as generateId, b4 as getAddressesForItemsFilter, ba as getArweaveUploadStatus, b5 as getArweaveUrlForTransaction, aV as getCanonicalItemPropertiesFromEas, aG as getClient, G as getCorrectId, U as getEasSchemaForItemProperty, aW as getEasSchemaUidBySchemaName, p as getGetAdditionalSyncAddresses, bg as getGetPublisherForNewSeeds, aU as getItemPropertiesFromEas, aT as getItemVersionsFromEas, aL as getMetadataLatest, aS as getModelSchemasFromEas, bi as getRevokeExecutor, bn as getSchemaNameFromId, aY as getSeedsBySchemaName, aX as getSeedsFromSchemaUids, b7 as getUploadApiArweaveDataUrl, b9 as getUploadApiArweaveStatusUrl, be as getUploadExecutor, b8 as getUploadPipelineTransactionStatus, aK as getVersionData, as as importJsonSchema, bb as isArweaveL1AnchoringComplete, bm as listSchemas, aM as loadAllSchemasFromDb, a8 as modelSchemas, a9 as modelUids, y as models, b6 as normalizeUploadApiBaseUrl, a_ as pickLatestPropertyAttestationsByRefAndSchema, z as properties, aN as propertyMachine, ad as propertyUids, ae as publishProcesses, bc as queryArweaveGatewayTransaction, au as readJsonImportFile, bl as readSchema, af as schemas, bj as setAdditionalSyncAddresses, bf as setGetPublisherForNewSeeds, bh as setRevokeExecutor, aR as setSchemaUidForModel, aQ as setSchemaUidForSchemaDefinition, bd as setUploadExecutor, av as syncSchemaFromSource, aw as transformImportToSchemaFile, b3 as updateSeedRevokedAt, ag as uploadProcesses, aA as waitForEntityIdle, aZ as withExcludeRevokedFilter } from './index-C1HlP_fU.js';
4
- export { getPropertySchema } from './property-BNt7Dkmw.js';
2
+ import { p as BaseDb, am as versions, aZ as isPlaceholderUid, ab as metadata, E as isValidEasAttestationUid, a_ as normalizeBytes32Hex, a$ as compareMetadataRowsLatestFirst, G as getLatestPublishedVersionRow, s as seeds, O as parseListPropertyValueFromStorage, t as normalizeRelationPropertyValue, r as resolveSeedIdsFromRefString, b as ModelPropertyDataTypes, v as BaseFileManager, x as htmlEmbeddedImageCoPublish, u as Item, b0 as getArweaveUrlForTransaction, aT as waitForEntityIdle, w as getContentHash } from './index-DUMXLKJr.js';
3
+ export { b1 as ADDRESSES_PERSISTED_EVENT, y as BaseArweaveClient, b4 as ClientManagerState, bo as DEFAULT_ARWEAVE_GATEWAYS, bp as DEFAULT_ARWEAVE_GRAPHQL_URL, bn as DEFAULT_ARWEAVE_HOST, ax as EAS_SEED_DATA_SYNCED_TO_DB_EVENT, a5 as EasClient, W as INTERNAL_DATA_TYPES, bc as ImageSize, aH as ItemProperty, b5 as MachineIds, M as Model, bb as SEED_PROTOCOL_SCHEMA_NAME, bm as SeedModels, V as VERSION_SCHEMA_UID_OPTIMISM_SEPOLIA, a1 as appState, a8 as arweaveL1FinalizeJobs, bi as classifyMediaRef, aI as client, b6 as createNewItem, bM as createSchema, bQ as easSyncActor, aa as easSyncProcesses, bC as ensureReadGatewaySelected, aw as eventEmitter, ay as generateId, bt as getAddressesForItemsFilter, by as getArweaveUploadStatus, be as getCanonicalItemPropertiesFromEas, b3 as getClient, Q as getCorrectId, bq as getDefaultArweaveReadGatewayHostsOrdered, _ as getEasSchemaForItemProperty, bf as getEasSchemaUidBySchemaName, bl as getFeedItemStringField, q as getGetAdditionalSyncAddresses, bI as getGetPublisherForNewSeeds, at as getItemPropertiesFromEas, as as getItemVersionsFromEas, b8 as getMetadataLatest, aq as getModelSchemasFromEas, bK as getRevokeExecutor, bP as getSchemaNameFromId, bg as getSeedsBySchemaName, ar as getSeedsFromSchemaUids, bv as getUploadApiArweaveDataUrl, bx as getUploadApiArweaveStatusUrl, bG as getUploadExecutor, bw as getUploadPipelineTransactionStatus, b7 as getVersionData, aM as importJsonSchema, bD as invalidateReadGatewayCache, bz as isArweaveL1AnchoringComplete, bs as isKnownArweaveGatewayHostname, bO as listSchemas, b9 as loadAllSchemasFromDb, bW as mergeEasSyncRequestIntents, br as mergePrimaryHostWithDefaults, ad as modelSchemas, ae as modelUids, A as models, bk as normalizeFeedItemFields, bu as normalizeUploadApiBaseUrl, b2 as parseAddressesPersistedPayload, au as pickLatestPropertyAttestationsByRefAndSchema, C as properties, ba as propertyMachine, ai as propertyUids, aj as publishProcesses, bA as queryArweaveGatewayTransaction, bB as queryArweaveGatewayTransactionWithFallback, aO as readJsonImportFile, bN as readSchema, bT as requestEasSyncFromAddressChange, bU as requestEasSyncFromEventBus, bV as requestEasSyncFromModelsInit, bE as resetArweaveReadGatewayForTests, bj as resolveMediaRef, ak as schemas, bS as sendEasSyncClientRequest, bL as setAdditionalSyncAddresses, bH as setGetPublisherForNewSeeds, bJ as setRevokeExecutor, bd as setSchemaUidForModel, aD as setSchemaUidForSchemaDefinition, bF as setUploadExecutor, bR as startEasSyncActor, aP as syncSchemaFromSource, aQ as transformImportToSchemaFile, al as uploadProcesses, bh as withExcludeRevokedFilter } from './index-DUMXLKJr.js';
4
+ export { getPropertySchema } from './property-BSNWvgei.js';
5
5
  import { eq, desc, or, and, isNotNull, ne } from 'drizzle-orm';
6
- export { S as Schema, a as deleteModelFromSchema, d as deletePropertyFromModel, r as renameModelProperty, s as schemaMachine, u as updateModelProperties } from './Schema-QjwZN91G.js';
7
- export { ModelProperty } from './ModelProperty-Csj84uQv.js';
8
- export { isItemOwned } from './ownership-C7GyMbsf.js';
9
- import { g as getSegmentedItemProperties } from './getSegmentedItemProperties-DzPjQtcg.js';
10
- export { PublishValidationFailedError, resolvePublishPayloadValues, validateItemForPublish } from './getPublishPayload-CMhy9jfz.js';
11
- export { itemHasPublishUploadCandidates } from './getPublishUploads-DTE4SEWk.js';
6
+ export { S as Schema, a as deleteModelFromSchema, d as deletePropertyFromModel, r as renameModelProperty, s as schemaMachine, u as updateModelProperties } from './Schema-B3YQHTtu.js';
7
+ export { ModelProperty } from './ModelProperty-CIeLasI4.js';
8
+ export { isItemOwned } from './ownership-TR-mIjJh.js';
9
+ export { u as updateSeedRevokedAt } from './updateSeedRevokedAt-CfUXirik.js';
10
+ import { g as getSegmentedItemProperties } from './getSegmentedItemProperties-B2mzArFD.js';
11
+ export { PublishValidationFailedError, resolvePublishPayloadValues, validateItemForPublish } from './getPublishPayload-Ddc_LGPs.js';
12
+ export { itemHasPublishUploadCandidates } from './getPublishUploads-Cf2J-5FR.js';
13
+ import { parseFragment, serialize } from 'parse5';
14
+ import 'pluralize';
12
15
  import 'js-yaml';
13
16
  import 'fs';
14
17
  import 'xstate';
@@ -17,7 +20,6 @@ import 'nanoid';
17
20
  import 'nanoid-dictionary';
18
21
  import 'debug';
19
22
  import 'ethers';
20
- import 'pluralize';
21
23
  import '@sinclair/typebox';
22
24
  import 'drizzle-orm/casing';
23
25
  import 'lodash-es';
@@ -25,16 +27,15 @@ import 'rxjs';
25
27
  import 'eventemitter3';
26
28
  import 'arweave';
27
29
  import 'js-sha3';
28
- import './SchemaValidationService-Cwkeb4fG.js';
30
+ import './SchemaValidationService-C4DIwn8Z.js';
29
31
  import '@sinclair/typebox/value';
30
32
 
31
- const isEmptyUid = (uid) => uid == null || uid === '' || uid === 'NULL';
32
33
  /**
33
34
  * Updates the version record with the attestation UID after a Version attestation is created.
34
35
  * Targets the version without a uid yet (the one being published).
35
36
  * Publisher is immutable once set: we never overwrite an existing publisher.
36
37
  */
37
- const updateVersionUid = async ({ seedLocalId, versionUid, publisher, }) => {
38
+ const updateVersionUid = async ({ seedLocalId, versionUid, publisher, attestationCreatedAt, }) => {
38
39
  if (!seedLocalId || !versionUid) {
39
40
  return;
40
41
  }
@@ -46,7 +47,7 @@ const updateVersionUid = async ({ seedLocalId, versionUid, publisher, }) => {
46
47
  .from(versions)
47
48
  .where(eq(versions.seedLocalId, seedLocalId))
48
49
  .orderBy(desc(versions.createdAt));
49
- const toUpdate = rows.find((r) => r.localId && isEmptyUid(r.uid));
50
+ const toUpdate = rows.find((r) => r.localId && isPlaceholderUid(r.uid));
50
51
  if (!toUpdate?.localId)
51
52
  return;
52
53
  let shouldSetPublisher = publisher != null && publisher !== '';
@@ -58,11 +59,72 @@ const updateVersionUid = async ({ seedLocalId, versionUid, publisher, }) => {
58
59
  .set({
59
60
  uid: versionUid,
60
61
  ...(shouldSetPublisher && { publisher }),
62
+ ...(attestationCreatedAt != null && { attestationCreatedAt }),
61
63
  updatedAt: Date.now(),
62
64
  })
63
65
  .where(eq(versions.localId, toUpdate.localId));
64
66
  };
65
67
 
68
+ /**
69
+ * After property attestations succeed, write EAS UIDs onto the latest placeholder metadata row
70
+ * per schema (and optional property name) so getPublishPendingDiff stays aligned with on-chain state.
71
+ */
72
+ async function applyPropertyAttestationUidsFromPublish(params) {
73
+ const { seedLocalId, attestationCreatedAtMs, pairs, versionUid } = params;
74
+ const appDb = BaseDb.getAppDb();
75
+ if (!appDb || !seedLocalId || pairs.length === 0)
76
+ return;
77
+ const rows = await appDb.select().from(metadata).where(eq(metadata.seedLocalId, seedLocalId));
78
+ if (rows.length === 0)
79
+ return;
80
+ const working = rows.map((r) => ({ ...r }));
81
+ const validVersion = versionUid != null && versionUid !== '' && isValidEasAttestationUid(versionUid)
82
+ ? versionUid
83
+ : undefined;
84
+ for (const pair of pairs) {
85
+ const att = pair.attestationUid?.trim();
86
+ if (!isValidEasAttestationUid(att))
87
+ continue;
88
+ const wantSchema = normalizeBytes32Hex(pair.schemaUid);
89
+ if (!wantSchema)
90
+ continue;
91
+ const candidates = working
92
+ .filter((r) => {
93
+ if (!r.schemaUid)
94
+ return false;
95
+ if (normalizeBytes32Hex(r.schemaUid) !== wantSchema)
96
+ return false;
97
+ if (pair.propertyName != null && pair.propertyName !== '') {
98
+ if (r.propertyName !== pair.propertyName)
99
+ return false;
100
+ }
101
+ return true;
102
+ })
103
+ .sort(compareMetadataRowsLatestFirst);
104
+ const target = candidates.find((r) => isPlaceholderUid(r.uid));
105
+ if (!target?.localId)
106
+ continue;
107
+ await appDb
108
+ .update(metadata)
109
+ .set({
110
+ uid: att,
111
+ ...(attestationCreatedAtMs != null && { attestationCreatedAt: attestationCreatedAtMs }),
112
+ ...(validVersion && { versionUid: validVersion }),
113
+ updatedAt: Date.now(),
114
+ })
115
+ .where(eq(metadata.localId, target.localId));
116
+ const i = working.findIndex((r) => r.localId === target.localId);
117
+ if (i >= 0) {
118
+ working[i] = {
119
+ ...working[i],
120
+ uid: att,
121
+ attestationCreatedAt: attestationCreatedAtMs ?? working[i].attestationCreatedAt,
122
+ ...(validVersion && { versionUid: validVersion }),
123
+ };
124
+ }
125
+ }
126
+ }
127
+
66
128
  const getVersionsForSeedUid = async (seedUid) => {
67
129
  if (!seedUid)
68
130
  return [];
@@ -76,7 +138,7 @@ const getVersionsForSeedUid = async (seedUid) => {
76
138
  .map((r) => ({ uid: r.uid }));
77
139
  };
78
140
 
79
- function resolveSeedIds(arg) {
141
+ function resolveSeedIds$1(arg) {
80
142
  if (arg && typeof arg === 'object' && 'seedLocalId' in arg) {
81
143
  const item = arg;
82
144
  return {
@@ -87,12 +149,12 @@ function resolveSeedIds(arg) {
87
149
  return arg;
88
150
  }
89
151
  /**
90
- * Lists properties with unpublished local edits (latest metadata row has no `uid`).
91
- * Compares to the previous row with a `uid` for the same `property_name` when present.
92
- * Use for pre-publish summaries and “what changed” UI.
152
+ * Per property: the **latest** metadata row (by `attestationCreatedAt` / `createdAt`) lacks a valid
153
+ * EAS attestation `uid` local edit or missing post-publish UID backfill. **Not** equivalent to
154
+ * draft vs onchain for the whole seed; use `getSeedPublishState` for that.
93
155
  */
94
156
  async function getPublishPendingDiff(arg) {
95
- const { seedLocalId, seedUid } = resolveSeedIds(arg);
157
+ const { seedLocalId, seedUid } = resolveSeedIds$1(arg);
96
158
  const appDb = BaseDb.getAppDb();
97
159
  const empty = {
98
160
  pendingProperties: [],
@@ -118,16 +180,16 @@ async function getPublishPendingDiff(arg) {
118
180
  byProp.set(name, list);
119
181
  }
120
182
  for (const list of byProp.values()) {
121
- list.sort((a, b) => (b.attestationCreatedAt ?? b.createdAt ?? 0) - (a.attestationCreatedAt ?? a.createdAt ?? 0));
183
+ list.sort(compareMetadataRowsLatestFirst);
122
184
  }
123
185
  const pendingProperties = [];
124
186
  for (const [propertyName, list] of byProp) {
125
187
  const latest = list[0];
126
188
  if (!latest)
127
189
  continue;
128
- const hasUid = !!latest.uid && String(latest.uid).trim() !== '';
190
+ const hasUid = isValidEasAttestationUid(latest.uid);
129
191
  if (!hasUid) {
130
- const prevWithUid = list.find((r) => r.uid && String(r.uid).trim() !== '');
192
+ const prevWithUid = list.find((r) => isValidEasAttestationUid(r.uid));
131
193
  pendingProperties.push({
132
194
  propertyName,
133
195
  currentValue: latest.propertyValue ?? null,
@@ -140,21 +202,12 @@ async function getPublishPendingDiff(arg) {
140
202
  let lastPublishedVersionUid = null;
141
203
  let lastVersionPublishedAt = null;
142
204
  if (seedLocalId) {
143
- const vRows = await appDb
144
- .select({
145
- uid: versions.uid,
146
- attestationCreatedAt: versions.attestationCreatedAt,
147
- })
148
- .from(versions)
149
- .where(eq(versions.seedLocalId, seedLocalId))
150
- .orderBy(desc(versions.createdAt))
151
- .limit(1);
152
- const vr = vRows[0];
153
- if (vr?.uid && String(vr.uid).trim() !== '') {
154
- lastPublishedVersionUid = vr.uid;
155
- }
156
- if (vr?.attestationCreatedAt != null) {
157
- lastVersionPublishedAt = vr.attestationCreatedAt;
205
+ const published = await getLatestPublishedVersionRow(seedLocalId);
206
+ if (published) {
207
+ lastPublishedVersionUid = published.uid;
208
+ if (published.attestationCreatedAt != null) {
209
+ lastVersionPublishedAt = published.attestationCreatedAt;
210
+ }
158
211
  }
159
212
  }
160
213
  return {
@@ -164,6 +217,87 @@ async function getPublishPendingDiff(arg) {
164
217
  };
165
218
  }
166
219
 
220
+ function resolveSeedIds(arg) {
221
+ if (arg && typeof arg === 'object' && 'seedLocalId' in arg) {
222
+ const item = arg;
223
+ return {
224
+ seedLocalId: item.seedLocalId,
225
+ seedUid: item.seedUid,
226
+ };
227
+ }
228
+ return arg;
229
+ }
230
+ function maxMs(a, b) {
231
+ const x = a ?? null;
232
+ const y = b ?? null;
233
+ if (x == null)
234
+ return y;
235
+ if (y == null)
236
+ return x;
237
+ return Math.max(x, y);
238
+ }
239
+ /**
240
+ * Whether the seed has **any** on-chain anchor in local SQLite: valid EAS UID on the seed row,
241
+ * on the newest **published** version row (`getLatestPublishedVersionRow`), or on **any** metadata row.
242
+ * Not the same as “no unpublished edits”; see `getPublishPendingDiff` for per-property head rows.
243
+ */
244
+ async function getSeedPublishState(arg) {
245
+ const { seedLocalId, seedUid } = resolveSeedIds(arg);
246
+ const appDb = BaseDb.getAppDb();
247
+ const empty = {
248
+ status: 'draft',
249
+ seedAttestationUid: null,
250
+ versionAttestationUid: null,
251
+ explorerUid: null,
252
+ lastAttestedAtMs: null,
253
+ };
254
+ if (!appDb || (!seedLocalId && !seedUid)) {
255
+ return empty;
256
+ }
257
+ const seedWhere = seedLocalId && seedUid
258
+ ? or(eq(seeds.localId, seedLocalId), eq(seeds.uid, seedUid))
259
+ : seedLocalId
260
+ ? eq(seeds.localId, seedLocalId)
261
+ : eq(seeds.uid, seedUid);
262
+ const seedRows = await appDb.select().from(seeds).where(seedWhere).limit(1);
263
+ const seedRow = seedRows[0];
264
+ const seedAttestationUid = seedRow?.uid && isValidEasAttestationUid(seedRow.uid) ? seedRow.uid : null;
265
+ let lastAttestedAtMs = seedRow?.attestationCreatedAt ?? null;
266
+ const resolvedSeedLocalId = seedRow?.localId ?? seedLocalId;
267
+ let versionAttestationUid = null;
268
+ if (resolvedSeedLocalId) {
269
+ const v = await getLatestPublishedVersionRow(resolvedSeedLocalId);
270
+ if (v?.uid) {
271
+ versionAttestationUid = v.uid;
272
+ lastAttestedAtMs = maxMs(lastAttestedAtMs, v.attestationCreatedAt ?? undefined);
273
+ }
274
+ }
275
+ const metaWhere = seedLocalId && seedUid
276
+ ? or(eq(metadata.seedLocalId, seedLocalId), eq(metadata.seedUid, seedUid))
277
+ : seedLocalId
278
+ ? eq(metadata.seedLocalId, seedLocalId)
279
+ : eq(metadata.seedUid, seedUid);
280
+ const metaRows = await appDb.select().from(metadata).where(metaWhere);
281
+ let metadataExplorerUid = null;
282
+ for (const row of metaRows) {
283
+ if (!isValidEasAttestationUid(row.uid))
284
+ continue;
285
+ if (!metadataExplorerUid)
286
+ metadataExplorerUid = row.uid;
287
+ const t = row.attestationCreatedAt ?? row.createdAt;
288
+ lastAttestedAtMs = maxMs(lastAttestedAtMs, t ?? undefined);
289
+ }
290
+ const hasOnchain = !!(seedAttestationUid || versionAttestationUid || metadataExplorerUid);
291
+ const explorerUid = seedAttestationUid ?? versionAttestationUid ?? metadataExplorerUid;
292
+ return {
293
+ status: hasOnchain ? 'onchain' : 'draft',
294
+ seedAttestationUid,
295
+ versionAttestationUid,
296
+ explorerUid,
297
+ lastAttestedAtMs,
298
+ };
299
+ }
300
+
167
301
  /**
168
302
  * Returns attestation UIDs (metadata.uid) for all metadata records belonging to a seed.
169
303
  * Used when revoking attestations - metadata attestations must be revoked.
@@ -175,7 +309,7 @@ const getMetadataAttestationUidsForSeedUid = async (seedUid) => {
175
309
  const rows = await appDb
176
310
  .select({ uid: metadata.uid, schemaUid: metadata.schemaUid })
177
311
  .from(metadata)
178
- .where(and(eq(metadata.seedUid, seedUid), isNotNull(metadata.uid), ne(metadata.uid, ''), ne(metadata.uid, '0x' + '0'.repeat(64))));
312
+ .where(and(eq(metadata.seedUid, seedUid), isNotNull(metadata.uid), ne(metadata.uid, ''), ne(metadata.uid, 'NULL'), ne(metadata.uid, '0x' + '0'.repeat(64))));
179
313
  return rows
180
314
  .filter((r) => r.uid != null && r.schemaUid != null)
181
315
  .map((r) => ({ uid: r.uid, schemaUid: r.schemaUid }));
@@ -282,7 +416,7 @@ async function getRelatedItemsForPublish(item, visited = new Set()) {
282
416
  visited.add(seedLocalId);
283
417
  const result = [];
284
418
  const { itemRelationProperties, itemImageProperties, itemListProperties } = await getSegmentedItemProperties(item);
285
- const getItemMod = await import('./getItem-CpjN3MFQ.js');
419
+ const getItemMod = await import('./getItem-CV3yTCRt.js');
286
420
  const { getItem } = getItemMod;
287
421
  const processRelationOrImage = async (prop) => {
288
422
  const snapshot = prop.getService().getSnapshot();
@@ -303,8 +437,8 @@ async function getRelatedItemsForPublish(item, visited = new Set()) {
303
437
  if (!value && prop.propertyName && isStorageSeed) {
304
438
  const ctx = context;
305
439
  if (ctx.seedLocalId || ctx.seedUid) {
306
- const _mod_0 = await import('./index-C1HlP_fU.js');
307
- const _ns_0 = _mod_0.bC;
440
+ const _mod_0 = await import('./index-DUMXLKJr.js');
441
+ const _ns_0 = _mod_0.c9;
308
442
  const { getPropertyData } = _ns_0;
309
443
  const meta = await getPropertyData({
310
444
  propertyName: prop.propertyName,
@@ -362,5 +496,333 @@ async function getRelatedItemsForPublish(item, visited = new Set()) {
362
496
  return result;
363
497
  }
364
498
 
365
- export { BaseDb, applyArweaveL1TransactionIdLocal, getAttesterForSeed, getMetadataAttestationUidsForSeedUid, getPublishPendingDiff, getRelatedItemsForPublish, getSegmentedItemProperties, getVersionsForSeedUid, metadata, seeds, updateVersionUid, versions };
499
+ const HTML_EMBEDDED_MAX_IMAGES_PER_DOC = 50;
500
+ const HTML_EMBEDDED_MAX_IMAGE_BYTES = 5 * 1024 * 1024;
501
+ const HTML_EMBEDDED_MAX_TOTAL_BYTES = 25 * 1024 * 1024;
502
+ const DATA_URI_IMAGE = /^data:(image\/[a-zA-Z0-9.+-]+);base64,([\s\S]*)$/i;
503
+ const MIME_NORMALIZE = {
504
+ 'image/jpg': 'image/jpeg',
505
+ };
506
+ function normalizeMime(m) {
507
+ const lower = m.toLowerCase().trim();
508
+ return MIME_NORMALIZE[lower] ?? lower;
509
+ }
510
+ const ALLOWED_MIMES = new Set([
511
+ 'image/png',
512
+ 'image/jpeg',
513
+ 'image/webp',
514
+ 'image/gif',
515
+ 'image/svg+xml',
516
+ ]);
517
+ class HtmlEmbeddedDataUriLimitError extends Error {
518
+ constructor(message) {
519
+ super(message);
520
+ this.name = 'HtmlEmbeddedDataUriLimitError';
521
+ }
522
+ }
523
+ function resolveEffectiveHtmlEmbeddedDataUriPolicy(propertyDef, publishLevel) {
524
+ const fromProp = propertyDef?.htmlEmbeddedDataUriPolicy;
525
+ if (fromProp === 'materialize' || fromProp === 'preserve')
526
+ return fromProp;
527
+ if (publishLevel === 'materialize' || publishLevel === 'preserve')
528
+ return publishLevel;
529
+ return 'materialize';
530
+ }
531
+ function getAttr(node, name) {
532
+ const a = node.attrs?.find((x) => x.name === name);
533
+ return a?.value;
534
+ }
535
+ function setAttr(node, name, value) {
536
+ if (!node.attrs)
537
+ node.attrs = [];
538
+ const i = node.attrs.findIndex((x) => x.name === name);
539
+ if (i >= 0)
540
+ node.attrs[i].value = value;
541
+ else
542
+ node.attrs.push({ name, value });
543
+ }
544
+ /**
545
+ * Walk fragment tree; collect unique data:image base64 URIs with limits.
546
+ */
547
+ async function extractDataUriImagesFromHtml(html) {
548
+ const fragment = parseFragment(html);
549
+ const found = [];
550
+ const seenUris = new Set();
551
+ let totalBytes = 0;
552
+ const walk = async (node) => {
553
+ if (node.nodeName === '#text' || node.nodeName === '#comment')
554
+ return;
555
+ const el = node;
556
+ if (el.tagName === 'img') {
557
+ const src = getAttr(el, 'src')?.trim();
558
+ if (src && src.startsWith('data:image/')) {
559
+ const m = DATA_URI_IMAGE.exec(src);
560
+ if (m) {
561
+ const mimeRaw = normalizeMime(m[1]);
562
+ if (!ALLOWED_MIMES.has(mimeRaw)) {
563
+ throw new HtmlEmbeddedDataUriLimitError(`Unsupported embedded image type: ${mimeRaw}. Allowed: ${[...ALLOWED_MIMES].join(', ')}`);
564
+ }
565
+ let binary;
566
+ try {
567
+ const b64 = m[2].replace(/\s/g, '');
568
+ binary = Uint8Array.from(atob(b64), (c) => c.charCodeAt(0));
569
+ }
570
+ catch {
571
+ throw new HtmlEmbeddedDataUriLimitError('Invalid base64 in embedded image data URI');
572
+ }
573
+ const byteLength = binary.byteLength;
574
+ if (byteLength > HTML_EMBEDDED_MAX_IMAGE_BYTES) {
575
+ throw new HtmlEmbeddedDataUriLimitError(`Embedded image exceeds max size (${HTML_EMBEDDED_MAX_IMAGE_BYTES} bytes)`);
576
+ }
577
+ totalBytes += byteLength;
578
+ if (totalBytes > HTML_EMBEDDED_MAX_TOTAL_BYTES) {
579
+ throw new HtmlEmbeddedDataUriLimitError(`Total embedded image size exceeds max (${HTML_EMBEDDED_MAX_TOTAL_BYTES} bytes)`);
580
+ }
581
+ if (!seenUris.has(src)) {
582
+ if (seenUris.size >= HTML_EMBEDDED_MAX_IMAGES_PER_DOC) {
583
+ throw new HtmlEmbeddedDataUriLimitError(`Too many distinct embedded images (max ${HTML_EMBEDDED_MAX_IMAGES_PER_DOC})`);
584
+ }
585
+ seenUris.add(src);
586
+ const stableKey = await getContentHash(binary);
587
+ found.push({ dataUri: src, stableKey, byteLength, mimeType: mimeRaw });
588
+ }
589
+ }
590
+ }
591
+ }
592
+ const parent = el;
593
+ if (parent.childNodes) {
594
+ for (const c of parent.childNodes)
595
+ await walk(c);
596
+ }
597
+ };
598
+ for (const c of fragment.childNodes)
599
+ await walk(c);
600
+ return found;
601
+ }
602
+ /**
603
+ * Replace `data:image/...` src values with Arweave URLs using upload results keyed by image seed local id.
604
+ */
605
+ function replaceDataUrisInParsedHtml(html, replacements) {
606
+ if (replacements.size === 0)
607
+ return html;
608
+ const fragment = parseFragment(html);
609
+ const walk = (node) => {
610
+ if (node.nodeName === '#text' || node.nodeName === '#comment')
611
+ return;
612
+ const el = node;
613
+ if (el.tagName === 'img') {
614
+ const src = getAttr(el, 'src')?.trim();
615
+ if (src && replacements.has(src)) {
616
+ setAttr(el, 'src', replacements.get(src));
617
+ }
618
+ }
619
+ const parent = el;
620
+ if (parent.childNodes) {
621
+ for (const c of parent.childNodes)
622
+ walk(c);
623
+ }
624
+ };
625
+ for (const c of fragment.childNodes)
626
+ walk(c);
627
+ return serialize(fragment);
628
+ }
629
+ async function deleteCoPublishRowsForParent(appDb, parentSeedLocalId) {
630
+ if (!appDb)
631
+ return;
632
+ await appDb.delete(htmlEmbeddedImageCoPublish).where(eq(htmlEmbeddedImageCoPublish.parentSeedLocalId, parentSeedLocalId));
633
+ }
634
+ /**
635
+ * Create an Image item and persist a data URI into its storageTransactionId (same path as user paste).
636
+ */
637
+ async function createImageItemFromDataUri(dataUri) {
638
+ const imageItem = await Item.create({
639
+ modelName: 'Image',
640
+ });
641
+ await waitForEntityIdle(imageItem, { timeout: 60000 });
642
+ const st = imageItem.internalProperties['storageTransactionId'] ??
643
+ imageItem.allProperties['storageTransactionId'];
644
+ if (!st) {
645
+ throw new Error('Image item missing storageTransactionId property');
646
+ }
647
+ st.value = dataUri;
648
+ await st.save();
649
+ await waitForEntityIdle(imageItem, { timeout: 60000 });
650
+ return { seedLocalId: imageItem.seedLocalId };
651
+ }
652
+ /**
653
+ * Scan Html storage properties, materialize embedded images as Image items, insert co-publish rows.
654
+ * Call before phase-1 Arweave tx build. Does not rewrite Html files yet.
655
+ */
656
+ async function prepareHtmlEmbeddedImagesForPublish(item, publishPolicy) {
657
+ const appDb = BaseDb.getAppDb();
658
+ if (!appDb) {
659
+ return { deferredHtmlSeedLocalIds: [] };
660
+ }
661
+ await deleteCoPublishRowsForParent(appDb, item.seedLocalId);
662
+ const deferred = new Set();
663
+ for (const p of item.properties) {
664
+ const def = p.propertyDef;
665
+ if (!def || normalizeDataTypeLocal(def.dataType) !== ModelPropertyDataTypes.Html)
666
+ continue;
667
+ const policy = resolveEffectiveHtmlEmbeddedDataUriPolicy(def, publishPolicy);
668
+ if (policy !== 'materialize')
669
+ continue;
670
+ const snap = p.getService().getSnapshot();
671
+ const ctx = 'context' in snap ? snap.context : null;
672
+ const htmlSeedLocalId = typeof ctx?.propertyValue === 'string' ? ctx.propertyValue : '';
673
+ const refResolved = ctx?.refResolvedValue;
674
+ if (!htmlSeedLocalId?.trim() || !refResolved)
675
+ continue;
676
+ const filePath = `${BaseFileManager.getFilesPath('html')}/${refResolved}`;
677
+ const exists = await BaseFileManager.pathExists(filePath);
678
+ if (!exists)
679
+ continue;
680
+ let html;
681
+ try {
682
+ html = await BaseFileManager.readFileAsString(filePath);
683
+ }
684
+ catch {
685
+ const buf = await BaseFileManager.readFileAsBuffer(filePath);
686
+ if (typeof Buffer !== 'undefined' && Buffer.isBuffer(buf)) {
687
+ html = buf.toString('utf-8');
688
+ }
689
+ else if (typeof Blob !== 'undefined' && buf instanceof Blob) {
690
+ html = await buf.text();
691
+ }
692
+ else if (buf instanceof ArrayBuffer) {
693
+ html = new TextDecoder('utf-8', { fatal: false }).decode(buf);
694
+ }
695
+ else {
696
+ const v = buf;
697
+ html = new TextDecoder('utf-8', { fatal: false }).decode(new Uint8Array(v.buffer, v.byteOffset, v.byteLength));
698
+ }
699
+ }
700
+ let extracted;
701
+ try {
702
+ extracted = await extractDataUriImagesFromHtml(html);
703
+ }
704
+ catch (e) {
705
+ if (e instanceof HtmlEmbeddedDataUriLimitError)
706
+ throw e;
707
+ throw e;
708
+ }
709
+ if (extracted.length === 0)
710
+ continue;
711
+ deferred.add(htmlSeedLocalId.trim());
712
+ for (const ent of extracted) {
713
+ const { seedLocalId: imageSeedLocalId } = await createImageItemFromDataUri(ent.dataUri);
714
+ const now = Date.now();
715
+ await appDb.insert(htmlEmbeddedImageCoPublish).values({
716
+ parentSeedLocalId: item.seedLocalId,
717
+ htmlSeedLocalId: htmlSeedLocalId.trim(),
718
+ imageSeedLocalId,
719
+ stableKey: ent.stableKey,
720
+ createdAt: now,
721
+ }).onConflictDoNothing();
722
+ }
723
+ }
724
+ return { deferredHtmlSeedLocalIds: [...deferred] };
725
+ }
726
+ function normalizeDataTypeLocal(dt) {
727
+ if (!dt)
728
+ return '';
729
+ return dt.charAt(0).toUpperCase() + dt.slice(1).toLowerCase();
730
+ }
731
+ /**
732
+ * After phase-1 uploads, rewrite Html files on disk: data URI → Arweave gateway URL.
733
+ */
734
+ async function rewriteHtmlEmbeddedImagesOnDisk(parentSeedLocalId, uploadedTransactions) {
735
+ const appDb = BaseDb.getAppDb();
736
+ if (!appDb)
737
+ return;
738
+ const rows = await appDb
739
+ .select()
740
+ .from(htmlEmbeddedImageCoPublish)
741
+ .where(eq(htmlEmbeddedImageCoPublish.parentSeedLocalId, parentSeedLocalId));
742
+ if (rows.length === 0)
743
+ return;
744
+ const txByImageSeed = new Map();
745
+ for (const u of uploadedTransactions) {
746
+ if (u.seedLocalId && u.txId) {
747
+ txByImageSeed.set(u.seedLocalId.trim(), u.txId.trim());
748
+ }
749
+ }
750
+ const htmlSeedIds = new Set(rows.map((r) => String(r.htmlSeedLocalId).trim()));
751
+ const parentItem = await Item.find({ seedLocalId: parentSeedLocalId });
752
+ const refByHtmlSeed = new Map();
753
+ if (parentItem) {
754
+ for (const p of parentItem.properties) {
755
+ const def = p.propertyDef;
756
+ if (!def || normalizeDataTypeLocal(def.dataType) !== ModelPropertyDataTypes.Html)
757
+ continue;
758
+ const snap = p.getService().getSnapshot();
759
+ const ctx = 'context' in snap ? snap.context : null;
760
+ const pv = typeof ctx?.propertyValue === 'string' ? ctx.propertyValue.trim() : '';
761
+ const refResolved = ctx?.refResolvedValue;
762
+ if (pv && refResolved)
763
+ refByHtmlSeed.set(pv, refResolved);
764
+ }
765
+ }
766
+ for (const htmlSeedLocalId of htmlSeedIds) {
767
+ const refResolved = refByHtmlSeed.get(String(htmlSeedLocalId));
768
+ if (!refResolved)
769
+ continue;
770
+ const filePath = `${BaseFileManager.getFilesPath('html')}/${refResolved}`;
771
+ if (!(await BaseFileManager.pathExists(filePath)))
772
+ continue;
773
+ const html = await BaseFileManager.readFileAsString(filePath);
774
+ const replacements = new Map();
775
+ for (const r of rows) {
776
+ if (String(r.htmlSeedLocalId).trim() !== htmlSeedLocalId)
777
+ continue;
778
+ const txId = txByImageSeed.get(r.imageSeedLocalId.trim());
779
+ if (!txId)
780
+ continue;
781
+ const dataUri = await findDataUriForStableKey(html, r.stableKey);
782
+ if (dataUri)
783
+ replacements.set(dataUri, getArweaveUrlForTransaction(txId));
784
+ }
785
+ if (replacements.size === 0)
786
+ continue;
787
+ const newHtml = replaceDataUrisInParsedHtml(html, replacements);
788
+ try {
789
+ await BaseFileManager.saveFile(filePath, newHtml);
790
+ }
791
+ catch {
792
+ const fs = await BaseFileManager.getFs();
793
+ fs.writeFileSync(filePath, newHtml);
794
+ }
795
+ if (parentItem) {
796
+ for (const p of parentItem.properties) {
797
+ const snap = p.getService().getSnapshot();
798
+ const ctx = 'context' in snap ? snap.context : null;
799
+ const pv = typeof ctx?.propertyValue === 'string' ? ctx.propertyValue.trim() : '';
800
+ if (pv === htmlSeedLocalId) {
801
+ p.getService().send({
802
+ type: 'updateContext',
803
+ renderValue: newHtml,
804
+ });
805
+ }
806
+ }
807
+ }
808
+ }
809
+ }
810
+ async function findDataUriForStableKey(html, stableKey) {
811
+ const entries = await extractDataUriImagesFromHtml(html);
812
+ const hit = entries.find((e) => e.stableKey === stableKey);
813
+ return hit?.dataUri;
814
+ }
815
+ /**
816
+ * Remove co-publish rows after a successful publish for this parent seed.
817
+ */
818
+ async function clearHtmlEmbeddedImageCoPublishRows(parentSeedLocalId) {
819
+ const appDb = BaseDb.getAppDb();
820
+ if (!appDb || !parentSeedLocalId)
821
+ return;
822
+ await appDb
823
+ .delete(htmlEmbeddedImageCoPublish)
824
+ .where(eq(htmlEmbeddedImageCoPublish.parentSeedLocalId, parentSeedLocalId.trim()));
825
+ }
826
+
827
+ export { BaseDb, BaseFileManager, BaseFileManager as FileManager, HTML_EMBEDDED_MAX_IMAGES_PER_DOC, HTML_EMBEDDED_MAX_IMAGE_BYTES, HTML_EMBEDDED_MAX_TOTAL_BYTES, HtmlEmbeddedDataUriLimitError, Item, ModelPropertyDataTypes, applyArweaveL1TransactionIdLocal, applyPropertyAttestationUidsFromPublish, clearHtmlEmbeddedImageCoPublishRows, extractDataUriImagesFromHtml, getArweaveUrlForTransaction, getAttesterForSeed, getMetadataAttestationUidsForSeedUid, getPublishPendingDiff, getRelatedItemsForPublish, getSeedPublishState, getSegmentedItemProperties, getVersionsForSeedUid, htmlEmbeddedImageCoPublish, isPlaceholderUid, isValidEasAttestationUid, metadata, normalizeBytes32Hex, prepareHtmlEmbeddedImagesForPublish, replaceDataUrisInParsedHtml, resolveEffectiveHtmlEmbeddedDataUriPolicy, rewriteHtmlEmbeddedImagesOnDisk, seeds, updateVersionUid, versions, waitForEntityIdle };
366
828
  //# sourceMappingURL=main.js.map