@seedprotocol/sdk 0.6.10 → 0.7.1

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 (399) hide show
  1. package/dist/{BasePathResolver-B6CKqoKw.js → BasePathResolver-DRT09oVv.js} +36 -2
  2. package/dist/BasePathResolver-DRT09oVv.js.map +1 -0
  3. package/dist/ClientManager-DngaZdw6.js +4763 -0
  4. package/dist/ClientManager-DngaZdw6.js.map +1 -0
  5. package/dist/{ClientManager-ChcmUL47.js → Item-ZUAmf943.js} +1175 -5903
  6. package/dist/Item-ZUAmf943.js.map +1 -0
  7. package/dist/{ModelProperty-D79uV42p.js → ModelProperty-6llK4MTH.js} +326 -109
  8. package/dist/ModelProperty-6llK4MTH.js.map +1 -0
  9. package/dist/{Schema-a8uO-hIZ.js → Schema-D-Ud-XYw.js} +164 -885
  10. package/dist/Schema-D-Ud-XYw.js.map +1 -0
  11. package/dist/{SchemaValidationService-Y49vqast.js → SchemaValidationService-IoS7JquP.js} +26 -18
  12. package/dist/SchemaValidationService-IoS7JquP.js.map +1 -0
  13. package/dist/{backfillMetadataPropertyIds-CBsf7LnU.js → backfillMetadataPropertyIds-BlVeE7w7.js} +11 -6
  14. package/dist/backfillMetadataPropertyIds-BlVeE7w7.js.map +1 -0
  15. package/dist/cjs/{ModelProperty-D9FGaGuE.js → ModelProperty-Dv7AQfmQ.js} +297 -89
  16. package/dist/cjs/ModelProperty-Dv7AQfmQ.js.map +1 -0
  17. package/dist/cjs/{Schema-BiJIPLEL.js → Schema-BHVp1g-M.js} +136 -868
  18. package/dist/cjs/Schema-BHVp1g-M.js.map +1 -0
  19. package/dist/cjs/{SchemaValidationService-DtYs_CNY.js → SchemaValidationService-BSU9knjf.js} +18 -11
  20. package/dist/cjs/SchemaValidationService-BSU9knjf.js.map +1 -0
  21. package/dist/cjs/{backfillMetadataPropertyIds-2XaN3b9S.js → backfillMetadataPropertyIds-WIovQ_d8.js} +8 -3
  22. package/dist/cjs/backfillMetadataPropertyIds-WIovQ_d8.js.map +1 -0
  23. package/dist/cjs/{eas-CMNppmGE.js → eas-CUYXdr2t.js} +4 -4
  24. package/dist/cjs/{eas-CMNppmGE.js.map → eas-CUYXdr2t.js.map} +1 -1
  25. package/dist/cjs/{getItem-B6jEINjW.js → getItem-z1tHu0hu.js} +2 -2
  26. package/dist/cjs/{getItem-B6jEINjW.js.map → getItem-z1tHu0hu.js.map} +1 -1
  27. package/dist/cjs/getLatestVersionRow-CcaabxIW.js +59 -0
  28. package/dist/cjs/getLatestVersionRow-CcaabxIW.js.map +1 -0
  29. package/dist/cjs/{getPublishPayload-D5DhLGvN.js → getPublishPayload-CEP_e-Kv.js} +283 -138
  30. package/dist/cjs/getPublishPayload-CEP_e-Kv.js.map +1 -0
  31. package/dist/cjs/{getPublishUploads-DMhCCKYF.js → getPublishUploads-Ctn5k1k6.js} +65 -19
  32. package/dist/cjs/getPublishUploads-Ctn5k1k6.js.map +1 -0
  33. package/dist/cjs/{index-CSNtEnbF.js → index-Cvvt0-5B.js} +2698 -1725
  34. package/dist/cjs/index-Cvvt0-5B.js.map +1 -0
  35. package/dist/cjs/{index-DPp9rdRL.js → index-DfGhF1dc.js} +3 -3
  36. package/dist/cjs/index-DfGhF1dc.js.map +1 -0
  37. package/dist/cjs/{property-DlKiAWt4.js → property-DbEPQ1m9.js} +40 -35
  38. package/dist/cjs/property-DbEPQ1m9.js.map +1 -0
  39. package/dist/cjs/publishDraftGraph-C38gf302.js +403 -0
  40. package/dist/cjs/publishDraftGraph-C38gf302.js.map +1 -0
  41. package/dist/cjs/resetAmbiguousLegacyItemData-CfMhRHwK.js +116 -0
  42. package/dist/cjs/resetAmbiguousLegacyItemData-CfMhRHwK.js.map +1 -0
  43. package/dist/cjs/resolveModelForSyncedSeed-CNYaLOir.js +49 -0
  44. package/dist/cjs/resolveModelForSyncedSeed-CNYaLOir.js.map +1 -0
  45. package/dist/cjs/syncDbWithEas-d1iOdTTI.js +886 -0
  46. package/dist/cjs/syncDbWithEas-d1iOdTTI.js.map +1 -0
  47. package/dist/{configurePlatform-CE0Vew17.js → configurePlatform-CZpjyuCo.js} +4 -4
  48. package/dist/{configurePlatform-CE0Vew17.js.map → configurePlatform-CZpjyuCo.js.map} +1 -1
  49. package/dist/db/drizzle/0015_add_model_file_id_to_seeds.sql +11 -0
  50. package/dist/db/drizzle/0016_add_revoked_at_to_metadata.sql +1 -0
  51. package/dist/db/drizzle/0017_add_revoked_at_to_versions.sql +1 -0
  52. package/dist/db/drizzle/0018_add_storage_settings_to_properties.sql +53 -0
  53. package/dist/db/drizzle/0019_add_derived_from_uid_to_metadata.sql +35 -0
  54. package/dist/db/drizzle/meta/0011_snapshot.json +1182 -0
  55. package/dist/db/drizzle/meta/0012_snapshot.json +1244 -0
  56. package/dist/db/drizzle/meta/0013_snapshot.json +63 -1
  57. package/dist/db/drizzle/meta/0014_snapshot.json +62 -0
  58. package/dist/db/drizzle/meta/0015_snapshot.json +1338 -0
  59. package/dist/db/drizzle/meta/0016_snapshot.json +1345 -0
  60. package/dist/db/drizzle/meta/0017_snapshot.json +1352 -0
  61. package/dist/db/drizzle/meta/0018_snapshot.json +1373 -0
  62. package/dist/db/drizzle/meta/0019_snapshot.json +1380 -0
  63. package/dist/db/drizzle/meta/_journal.json +35 -0
  64. package/dist/{db-WbrzEf7c.js → db-Lw0KVZmc.js} +546 -106
  65. package/dist/db-Lw0KVZmc.js.map +1 -0
  66. package/dist/{eas-CfYCu4IX.js → eas-CQ-Smzk2.js} +7 -7
  67. package/dist/eas-CQ-Smzk2.js.map +1 -0
  68. package/dist/errors-CrBxGWah.js +17 -0
  69. package/dist/errors-CrBxGWah.js.map +1 -0
  70. package/dist/{getItem-Br-bGNFO.js → getItem-CSfSok9f.js} +8 -10
  71. package/dist/{getItem-Br-bGNFO.js.map → getItem-CSfSok9f.js.map} +1 -1
  72. package/dist/getLatestVersionRow-72Atl9vB.js +46 -0
  73. package/dist/getLatestVersionRow-72Atl9vB.js.map +1 -0
  74. package/dist/{getPublishPayload-BIrTVUxb.js → getPublishPayload-76_KfB5Y.js} +297 -154
  75. package/dist/getPublishPayload-76_KfB5Y.js.map +1 -0
  76. package/dist/{getPublishUploads-C6cDeZdz.js → getPublishUploads-CqgMBD8f.js} +68 -21
  77. package/dist/getPublishUploads-CqgMBD8f.js.map +1 -0
  78. package/dist/{index-Djd3667v.js → index-5b3JsS55.js} +2 -2
  79. package/dist/index-5b3JsS55.js.map +1 -0
  80. package/dist/{index-ClSv5pTA.js → index-BpgD305l.js} +12 -11
  81. package/dist/index-BpgD305l.js.map +1 -0
  82. package/dist/{index-HRHkbVQd.js → index-Y-yYyRBf.js} +530 -196
  83. package/dist/index-Y-yYyRBf.js.map +1 -0
  84. package/dist/index.browser-DaTzn79x.js +4139 -0
  85. package/dist/index.browser-DaTzn79x.js.map +1 -0
  86. package/dist/{index.node-DBtQkEfz.js → index.node-NYKqFOoe.js} +9 -4
  87. package/dist/index.node-NYKqFOoe.js.map +1 -0
  88. package/dist/main.cjs +1 -1
  89. package/dist/main.js +886 -560
  90. package/dist/main.js.map +1 -1
  91. package/dist/node.js +19 -15
  92. package/dist/node.js.map +1 -1
  93. package/dist/platform.browser.js +18 -3719
  94. package/dist/platform.browser.js.map +1 -1
  95. package/dist/platform.node.js +3 -3
  96. package/dist/{property-CQjuZ4JW.js → property-ByaiSyUK.js} +53 -48
  97. package/dist/property-ByaiSyUK.js.map +1 -0
  98. package/dist/publishDraftGraph-BRm6Pq3Q.js +405 -0
  99. package/dist/publishDraftGraph-BRm6Pq3Q.js.map +1 -0
  100. package/dist/resetAmbiguousLegacyItemData-B4dX6ZA1.js +88 -0
  101. package/dist/resetAmbiguousLegacyItemData-B4dX6ZA1.js.map +1 -0
  102. package/dist/resolveModelForSyncedSeed-B0tco3zG.js +46 -0
  103. package/dist/resolveModelForSyncedSeed-B0tco3zG.js.map +1 -0
  104. package/dist/seedSchema/MetadataSchema.ts +9 -0
  105. package/dist/seedSchema/ModelSchema.ts +5 -0
  106. package/dist/seedSchema/SeedSchema.ts +3 -0
  107. package/dist/seedSchema/VersionSchema.ts +5 -0
  108. package/dist/src/Item/Item.d.ts +21 -0
  109. package/dist/src/Item/Item.d.ts.map +1 -1
  110. package/dist/src/Item/service/actors/loadOrCreateItem.d.ts.map +1 -1
  111. package/dist/src/Item/service/actors/waitForDb.d.ts.map +1 -1
  112. package/dist/src/Item/service/itemMachineSingle.d.ts +3 -29
  113. package/dist/src/Item/service/itemMachineSingle.d.ts.map +1 -1
  114. package/dist/src/ItemProperty/ItemProperty.d.ts +13 -4
  115. package/dist/src/ItemProperty/ItemProperty.d.ts.map +1 -1
  116. package/dist/src/ItemProperty/service/actors/hydrateFromDb.d.ts.map +1 -1
  117. package/dist/src/ItemProperty/service/actors/loadOrCreateProperty.d.ts.map +1 -1
  118. package/dist/src/ItemProperty/service/actors/saveValueToDb/saveFile.d.ts.map +1 -1
  119. package/dist/src/ItemProperty/service/actors/saveValueToDb/saveHtml.d.ts.map +1 -1
  120. package/dist/src/ItemProperty/service/actors/saveValueToDb/saveImage.d.ts.map +1 -1
  121. package/dist/src/ItemProperty/service/actors/saveValueToDb/saveItemStorage.d.ts.map +1 -1
  122. package/dist/src/ItemProperty/service/propertyMachine.d.ts +4 -9
  123. package/dist/src/ItemProperty/service/propertyMachine.d.ts.map +1 -1
  124. package/dist/src/Model/Model.d.ts +52 -2
  125. package/dist/src/Model/Model.d.ts.map +1 -1
  126. package/dist/src/Model/errors.d.ts +10 -0
  127. package/dist/src/Model/errors.d.ts.map +1 -0
  128. package/dist/src/Model/service/actors/createModelProperties.d.ts.map +1 -1
  129. package/dist/src/Model/service/actors/loadOrCreateModel.d.ts.map +1 -1
  130. package/dist/src/Model/service/actors/validateModel.d.ts.map +1 -1
  131. package/dist/src/Model/service/modelMachine.d.ts +0 -8
  132. package/dist/src/Model/service/modelMachine.d.ts.map +1 -1
  133. package/dist/src/ModelProperty/ModelProperty.d.ts +42 -2
  134. package/dist/src/ModelProperty/ModelProperty.d.ts.map +1 -1
  135. package/dist/src/ModelProperty/service/actors/compareAndMarkDraft.d.ts.map +1 -1
  136. package/dist/src/ModelProperty/service/actors/saveToSchema.d.ts.map +1 -1
  137. package/dist/src/ModelProperty/service/actors/validateProperty.d.ts.map +1 -1
  138. package/dist/src/ModelProperty/service/modelPropertyMachine.d.ts +2 -9
  139. package/dist/src/ModelProperty/service/modelPropertyMachine.d.ts.map +1 -1
  140. package/dist/src/Schema/Schema.d.ts +8 -2
  141. package/dist/src/Schema/Schema.d.ts.map +1 -1
  142. package/dist/src/Schema/service/actors/checkExistingSchema.d.ts.map +1 -1
  143. package/dist/src/Schema/service/actors/createModelInstances.d.ts.map +1 -1
  144. package/dist/src/Schema/service/actors/loadOrCreateSchema.d.ts.map +1 -1
  145. package/dist/src/Schema/service/schemaMachine.d.ts +1 -217
  146. package/dist/src/Schema/service/schemaMachine.d.ts.map +1 -1
  147. package/dist/src/Schema/service/validation/SchemaValidationService.d.ts.map +1 -1
  148. package/dist/src/browser/db/Db.d.ts +3 -0
  149. package/dist/src/browser/db/Db.d.ts.map +1 -1
  150. package/dist/src/browser/db/drizzleFiles.d.ts +7 -2
  151. package/dist/src/browser/db/drizzleFiles.d.ts.map +1 -1
  152. package/dist/src/browser/db/embeddedMigrations.d.ts +11 -2
  153. package/dist/src/browser/db/embeddedMigrations.d.ts.map +1 -1
  154. package/dist/src/browser/db/sqliteBusyRetry.d.ts +14 -0
  155. package/dist/src/browser/db/sqliteBusyRetry.d.ts.map +1 -0
  156. package/dist/src/browser/helpers/FileManager.d.ts +1 -0
  157. package/dist/src/browser/helpers/FileManager.d.ts.map +1 -1
  158. package/dist/src/browser/helpers/QueryClient.d.ts +1 -0
  159. package/dist/src/browser/helpers/QueryClient.d.ts.map +1 -1
  160. package/dist/src/browser/helpers/opfsErrors.d.ts +2 -0
  161. package/dist/src/browser/helpers/opfsErrors.d.ts.map +1 -0
  162. package/dist/src/browser/helpers/tolerantWebAccess.d.ts +47 -0
  163. package/dist/src/browser/helpers/tolerantWebAccess.d.ts.map +1 -0
  164. package/dist/src/browser/workers/FileDownloader.d.ts.map +1 -1
  165. package/dist/src/browser/workers/ImageResizer.d.ts.map +1 -1
  166. package/dist/src/browser/workers/filesDownload.d.ts.map +1 -1
  167. package/dist/src/browser/workers/imageResize.d.ts.map +1 -1
  168. package/dist/src/client/ClientManager.d.ts.map +1 -1
  169. package/dist/src/client/actors/addModelsToDb.d.ts +14 -0
  170. package/dist/src/client/actors/addModelsToDb.d.ts.map +1 -1
  171. package/dist/src/client/actors/platformClassesInit.d.ts.map +1 -1
  172. package/dist/src/client/actors/processSchemaFiles.d.ts.map +1 -1
  173. package/dist/src/client/actors/saveConfig.d.ts +11 -0
  174. package/dist/src/client/actors/saveConfig.d.ts.map +1 -1
  175. package/dist/src/client/constants.d.ts +0 -8
  176. package/dist/src/client/constants.d.ts.map +1 -1
  177. package/dist/src/db/backfillMetadataPropertyIds.d.ts.map +1 -1
  178. package/dist/src/db/configs/{dev.schema.config.d.ts → migrations.config.d.ts} +1 -1
  179. package/dist/src/db/configs/migrations.config.d.ts.map +1 -0
  180. package/dist/src/db/read/batchLatestPublishedVersionBySeedLocalIds.d.ts +1 -1
  181. package/dist/src/db/read/batchLatestPublishedVersionBySeedLocalIds.d.ts.map +1 -1
  182. package/dist/src/db/read/getItemData.d.ts.map +1 -1
  183. package/dist/src/db/read/getItemProperties.d.ts.map +1 -1
  184. package/dist/src/db/read/getItems.d.ts +7 -2
  185. package/dist/src/db/read/getItems.d.ts.map +1 -1
  186. package/dist/src/db/read/getLatestPublishedVersionRow.d.ts +2 -1
  187. package/dist/src/db/read/getLatestPublishedVersionRow.d.ts.map +1 -1
  188. package/dist/src/db/read/getLatestVersionRow.d.ts +13 -0
  189. package/dist/src/db/read/getLatestVersionRow.d.ts.map +1 -0
  190. package/dist/src/db/read/getModelSchemas.d.ts.map +1 -1
  191. package/dist/src/db/read/getPropertyData.d.ts.map +1 -1
  192. package/dist/src/db/read/getPublishPayload.d.ts +18 -11
  193. package/dist/src/db/read/getPublishPayload.d.ts.map +1 -1
  194. package/dist/src/db/read/getPublishPendingDiff.d.ts +2 -1
  195. package/dist/src/db/read/getPublishPendingDiff.d.ts.map +1 -1
  196. package/dist/src/db/read/getPublishUploads.d.ts +5 -0
  197. package/dist/src/db/read/getPublishUploads.d.ts.map +1 -1
  198. package/dist/src/db/read/getSchemaUidForModel.d.ts.map +1 -1
  199. package/dist/src/db/read/getSeedPublishState.d.ts +8 -2
  200. package/dist/src/db/read/getSeedPublishState.d.ts.map +1 -1
  201. package/dist/src/db/read/isSeedRevoked.d.ts +7 -0
  202. package/dist/src/db/read/isSeedRevoked.d.ts.map +1 -0
  203. package/dist/src/db/read/publishDraftGraph.d.ts +57 -0
  204. package/dist/src/db/read/publishDraftGraph.d.ts.map +1 -0
  205. package/dist/src/db/read/publishErrors.d.ts +37 -0
  206. package/dist/src/db/read/publishErrors.d.ts.map +1 -0
  207. package/dist/src/db/read/resolveModelForSyncedSeed.d.ts +39 -0
  208. package/dist/src/db/read/resolveModelForSyncedSeed.d.ts.map +1 -0
  209. package/dist/src/db/read/resolveModelRecord.d.ts +69 -0
  210. package/dist/src/db/read/resolveModelRecord.d.ts.map +1 -0
  211. package/dist/src/db/read/resolveRelatedSeedRef.d.ts +34 -0
  212. package/dist/src/db/read/resolveRelatedSeedRef.d.ts.map +1 -0
  213. package/dist/src/db/read/subqueries/liveVersion.d.ts +12 -0
  214. package/dist/src/db/read/subqueries/liveVersion.d.ts.map +1 -0
  215. package/dist/src/db/read/subqueries/metadataLatest.d.ts +4 -0
  216. package/dist/src/db/read/subqueries/metadataLatest.d.ts.map +1 -1
  217. package/dist/src/db/read/subqueries/versionData.d.ts +7 -2
  218. package/dist/src/db/read/subqueries/versionData.d.ts.map +1 -1
  219. package/dist/src/db/read/summarizePublishWork.d.ts +10 -2
  220. package/dist/src/db/read/summarizePublishWork.d.ts.map +1 -1
  221. package/dist/src/db/resetAmbiguousLegacyItemData.d.ts +17 -0
  222. package/dist/src/db/resetAmbiguousLegacyItemData.d.ts.map +1 -0
  223. package/dist/src/db/sqlParamBatches.d.ts +27 -0
  224. package/dist/src/db/sqlParamBatches.d.ts.map +1 -0
  225. package/dist/src/db/write/addExcludedTransactions.d.ts +7 -0
  226. package/dist/src/db/write/addExcludedTransactions.d.ts.map +1 -0
  227. package/dist/src/db/write/applyPropertyAttestationUidsFromPublish.d.ts +6 -0
  228. package/dist/src/db/write/applyPropertyAttestationUidsFromPublish.d.ts.map +1 -1
  229. package/dist/src/db/write/createMetadata.d.ts +2 -0
  230. package/dist/src/db/write/createMetadata.d.ts.map +1 -1
  231. package/dist/src/db/write/createNewItem.d.ts +3 -1
  232. package/dist/src/db/write/createNewItem.d.ts.map +1 -1
  233. package/dist/src/db/write/createSeed.d.ts +2 -1
  234. package/dist/src/db/write/createSeed.d.ts.map +1 -1
  235. package/dist/src/db/write/createSeeds.d.ts +1 -1
  236. package/dist/src/db/write/createSeeds.d.ts.map +1 -1
  237. package/dist/src/db/write/linkModelToSchema.d.ts +12 -0
  238. package/dist/src/db/write/linkModelToSchema.d.ts.map +1 -0
  239. package/dist/src/db/write/updateItemPropertyValue.d.ts.map +1 -1
  240. package/dist/src/db/write/updateMetadata.d.ts.map +1 -1
  241. package/dist/src/db/write/updateSeedRevokedAt.d.ts +11 -1
  242. package/dist/src/db/write/updateSeedRevokedAt.d.ts.map +1 -1
  243. package/dist/src/db/write/updateSeedUid.d.ts.map +1 -1
  244. package/dist/src/db/write/updateVersionUid.d.ts +2 -1
  245. package/dist/src/db/write/updateVersionUid.d.ts.map +1 -1
  246. package/dist/src/events/files/download.d.ts.map +1 -1
  247. package/dist/src/events/item/easSyncManager.d.ts +2 -0
  248. package/dist/src/events/item/easSyncManager.d.ts.map +1 -1
  249. package/dist/src/events/item/index.d.ts.map +1 -1
  250. package/dist/src/events/item/syncDbWithEas.d.ts +16 -0
  251. package/dist/src/events/item/syncDbWithEas.d.ts.map +1 -1
  252. package/dist/src/helpers/FileManager/BaseFileManager.d.ts +1 -0
  253. package/dist/src/helpers/FileManager/BaseFileManager.d.ts.map +1 -1
  254. package/dist/src/helpers/FileManager/IFileManager.d.ts +5 -0
  255. package/dist/src/helpers/FileManager/IFileManager.d.ts.map +1 -1
  256. package/dist/src/helpers/FileManager/errors.d.ts +10 -0
  257. package/dist/src/helpers/FileManager/errors.d.ts.map +1 -0
  258. package/dist/src/helpers/compareMetadataRowsLatestFirst.d.ts +21 -3
  259. package/dist/src/helpers/compareMetadataRowsLatestFirst.d.ts.map +1 -1
  260. package/dist/src/helpers/constants.d.ts +9 -0
  261. package/dist/src/helpers/constants.d.ts.map +1 -1
  262. package/dist/src/helpers/crypto.d.ts +5 -0
  263. package/dist/src/helpers/crypto.d.ts.map +1 -1
  264. package/dist/src/helpers/db.d.ts +25 -5
  265. package/dist/src/helpers/db.d.ts.map +1 -1
  266. package/dist/src/helpers/easPropertyCanonical.d.ts +1 -1
  267. package/dist/src/helpers/easPropertyCanonical.d.ts.map +1 -1
  268. package/dist/src/helpers/entity/entityCommon.d.ts +10 -0
  269. package/dist/src/helpers/entity/entityCommon.d.ts.map +1 -1
  270. package/dist/src/helpers/entity/entityDestroy.d.ts +1 -1
  271. package/dist/src/helpers/entity/entityDestroy.d.ts.map +1 -1
  272. package/dist/src/helpers/entity/entityLiveQuery.d.ts +5 -0
  273. package/dist/src/helpers/entity/entityLiveQuery.d.ts.map +1 -1
  274. package/dist/src/helpers/entity/evictionEpoch.d.ts +18 -0
  275. package/dist/src/helpers/entity/evictionEpoch.d.ts.map +1 -0
  276. package/dist/src/helpers/file/fetchAll/actors.d.ts.map +1 -1
  277. package/dist/src/helpers/getSegmentedItemProperties.d.ts.map +1 -1
  278. package/dist/src/helpers/htmlEmbeddedDataUriPublish.d.ts +31 -3
  279. package/dist/src/helpers/htmlEmbeddedDataUriPublish.d.ts.map +1 -1
  280. package/dist/src/helpers/isPublishedMetadataRow.d.ts +10 -0
  281. package/dist/src/helpers/isPublishedMetadataRow.d.ts.map +1 -0
  282. package/dist/src/helpers/ownership.d.ts.map +1 -1
  283. package/dist/src/helpers/property.d.ts +6 -1
  284. package/dist/src/helpers/property.d.ts.map +1 -1
  285. package/dist/src/helpers/schema.d.ts +14 -4
  286. package/dist/src/helpers/schema.d.ts.map +1 -1
  287. package/dist/src/helpers/tabCoordinator.d.ts +45 -0
  288. package/dist/src/helpers/tabCoordinator.d.ts.map +1 -0
  289. package/dist/src/helpers/tabEvents.d.ts +27 -0
  290. package/dist/src/helpers/tabEvents.d.ts.map +1 -0
  291. package/dist/src/helpers/tabLocks.d.ts +28 -0
  292. package/dist/src/helpers/tabLocks.d.ts.map +1 -0
  293. package/dist/src/helpers/updateSchema.d.ts.map +1 -1
  294. package/dist/src/imports/json.d.ts.map +1 -1
  295. package/dist/src/imports/markdown.d.ts.map +1 -1
  296. package/dist/src/index.d.ts +13 -3
  297. package/dist/src/index.d.ts.map +1 -1
  298. package/dist/src/node/db/Db.d.ts.map +1 -1
  299. package/dist/src/node/helpers/FileManager.d.ts +2 -0
  300. package/dist/src/node/helpers/FileManager.d.ts.map +1 -1
  301. package/dist/src/query/createLocalQueryDataSource.d.ts +4 -0
  302. package/dist/src/query/createLocalQueryDataSource.d.ts.map +1 -1
  303. package/dist/src/seedSchema/MetadataSchema.d.ts +36 -0
  304. package/dist/src/seedSchema/MetadataSchema.d.ts.map +1 -1
  305. package/dist/src/seedSchema/ModelSchema.d.ts +57 -0
  306. package/dist/src/seedSchema/ModelSchema.d.ts.map +1 -1
  307. package/dist/src/seedSchema/SeedSchema.d.ts +19 -0
  308. package/dist/src/seedSchema/SeedSchema.d.ts.map +1 -1
  309. package/dist/src/seedSchema/VersionSchema.d.ts +17 -0
  310. package/dist/src/seedSchema/VersionSchema.d.ts.map +1 -1
  311. package/dist/src/services/write/actors/validateEntity.d.ts.map +1 -1
  312. package/dist/src/services/write/actors/writeToDatabase.d.ts +5 -0
  313. package/dist/src/services/write/actors/writeToDatabase.d.ts.map +1 -1
  314. package/dist/src/services/write/writeProcessMachine.d.ts.map +1 -1
  315. package/dist/src/stores/eas.d.ts +1 -1
  316. package/dist/src/stores/eas.d.ts.map +1 -1
  317. package/dist/src/types/index.d.ts +7 -0
  318. package/dist/src/types/index.d.ts.map +1 -1
  319. package/dist/src/types/item.d.ts +19 -11
  320. package/dist/src/types/item.d.ts.map +1 -1
  321. package/dist/src/types/property.d.ts +3 -2
  322. package/dist/src/types/property.d.ts.map +1 -1
  323. package/dist/syncDbWithEas-BPap9Sru.js +855 -0
  324. package/dist/syncDbWithEas-BPap9Sru.js.map +1 -0
  325. package/dist/{index-280bL-n4.js → tabEvents-C6NXS6Jl.js} +231 -68
  326. package/dist/tabEvents-C6NXS6Jl.js.map +1 -0
  327. package/dist/tolerantWebAccess-NBQ1NB4i.js +160 -0
  328. package/dist/tolerantWebAccess-NBQ1NB4i.js.map +1 -0
  329. package/dist/updateSeedRevokedAt-CYwgVNlM.js +32 -0
  330. package/dist/updateSeedRevokedAt-CYwgVNlM.js.map +1 -0
  331. package/package.json +8 -10
  332. package/dist/BasePathResolver-B6CKqoKw.js.map +0 -1
  333. package/dist/ClientManager-ChcmUL47.js.map +0 -1
  334. package/dist/ModelProperty-D79uV42p.js.map +0 -1
  335. package/dist/Schema-a8uO-hIZ.js.map +0 -1
  336. package/dist/SchemaValidationService-Y49vqast.js.map +0 -1
  337. package/dist/backfillMetadataPropertyIds-CBsf7LnU.js.map +0 -1
  338. package/dist/cjs/ModelProperty-D9FGaGuE.js.map +0 -1
  339. package/dist/cjs/Schema-BiJIPLEL.js.map +0 -1
  340. package/dist/cjs/SchemaValidationService-DtYs_CNY.js.map +0 -1
  341. package/dist/cjs/backfillMetadataPropertyIds-2XaN3b9S.js.map +0 -1
  342. package/dist/cjs/getPublishPayload-D5DhLGvN.js.map +0 -1
  343. package/dist/cjs/getPublishUploads-DMhCCKYF.js.map +0 -1
  344. package/dist/cjs/getSegmentedItemProperties-CU8rtBAo.js +0 -148
  345. package/dist/cjs/getSegmentedItemProperties-CU8rtBAo.js.map +0 -1
  346. package/dist/cjs/index-CSNtEnbF.js.map +0 -1
  347. package/dist/cjs/index-DPp9rdRL.js.map +0 -1
  348. package/dist/cjs/property-DlKiAWt4.js.map +0 -1
  349. package/dist/cjs/syncDbWithEas-C6n34o_Q.js +0 -606
  350. package/dist/cjs/syncDbWithEas-C6n34o_Q.js.map +0 -1
  351. package/dist/db-WbrzEf7c.js.map +0 -1
  352. package/dist/eas-CfYCu4IX.js.map +0 -1
  353. package/dist/getPublishPayload-BIrTVUxb.js.map +0 -1
  354. package/dist/getPublishUploads-C6cDeZdz.js.map +0 -1
  355. package/dist/getSegmentedItemProperties-BmKE71vU.js +0 -148
  356. package/dist/getSegmentedItemProperties-BmKE71vU.js.map +0 -1
  357. package/dist/index-280bL-n4.js.map +0 -1
  358. package/dist/index-ClSv5pTA.js.map +0 -1
  359. package/dist/index-Djd3667v.js.map +0 -1
  360. package/dist/index-HRHkbVQd.js.map +0 -1
  361. package/dist/index.node-DBtQkEfz.js.map +0 -1
  362. package/dist/property-CQjuZ4JW.js.map +0 -1
  363. package/dist/src/Item/service/actors/fetchDataFromEas.d.ts +0 -4
  364. package/dist/src/Item/service/actors/fetchDataFromEas.d.ts.map +0 -1
  365. package/dist/src/Item/service/actors/hydrateExistingItem.d.ts +0 -4
  366. package/dist/src/Item/service/actors/hydrateExistingItem.d.ts.map +0 -1
  367. package/dist/src/Item/service/actors/hydrateNewItem.d.ts +0 -4
  368. package/dist/src/Item/service/actors/hydrateNewItem.d.ts.map +0 -1
  369. package/dist/src/Item/service/actors/initialize.d.ts +0 -4
  370. package/dist/src/Item/service/actors/initialize.d.ts.map +0 -1
  371. package/dist/src/Item/service/actors/reload.d.ts +0 -5
  372. package/dist/src/Item/service/actors/reload.d.ts.map +0 -1
  373. package/dist/src/Item/service/actors/saveDataToDb.d.ts +0 -4
  374. package/dist/src/Item/service/actors/saveDataToDb.d.ts.map +0 -1
  375. package/dist/src/ItemProperty/service/actors/resolveRemoteStorage.d.ts +0 -5
  376. package/dist/src/ItemProperty/service/actors/resolveRemoteStorage.d.ts.map +0 -1
  377. package/dist/src/Schema/service/addModelsMachine.d.ts +0 -123
  378. package/dist/src/Schema/service/addModelsMachine.d.ts.map +0 -1
  379. package/dist/src/browser/helpers/index.d.ts +0 -4
  380. package/dist/src/browser/helpers/index.d.ts.map +0 -1
  381. package/dist/src/db/configs/dev.schema.config.d.ts.map +0 -1
  382. package/dist/src/helpers/file/download/actors.d.ts +0 -17
  383. package/dist/src/helpers/file/download/actors.d.ts.map +0 -1
  384. package/dist/src/helpers/file/download/index.d.ts +0 -70
  385. package/dist/src/helpers/file/download/index.d.ts.map +0 -1
  386. package/dist/src/services/publish/actors/createPublishAttempt.d.ts +0 -4
  387. package/dist/src/services/publish/actors/createPublishAttempt.d.ts.map +0 -1
  388. package/dist/src/services/publish/actors/preparePublishRequestData.d.ts +0 -4
  389. package/dist/src/services/publish/actors/preparePublishRequestData.d.ts.map +0 -1
  390. package/dist/src/services/publish/actors/upload.d.ts +0 -4
  391. package/dist/src/services/publish/actors/upload.d.ts.map +0 -1
  392. package/dist/src/services/publish/actors/validateItemData.d.ts +0 -4
  393. package/dist/src/services/publish/actors/validateItemData.d.ts.map +0 -1
  394. package/dist/src/services/publish/publishMachine.d.ts +0 -32
  395. package/dist/src/services/publish/publishMachine.d.ts.map +0 -1
  396. package/dist/syncDbWithEas-CuARXfyN.js +0 -598
  397. package/dist/syncDbWithEas-CuARXfyN.js.map +0 -1
  398. package/dist/updateSeedRevokedAt-CBcLfHWs.js +0 -22
  399. package/dist/updateSeedRevokedAt-CBcLfHWs.js.map +0 -1
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var main_cjs = require('./index-CSNtEnbF.js');
3
+ var main_cjs = require('./index-Cvvt0-5B.js');
4
4
  var easSdk = require('@ethereum-attestation-service/eas-sdk');
5
5
  var casing = require('drizzle-orm/casing');
6
6
  var eas = require('@seedprotocol/eas');
7
- var getSegmentedItemProperties = require('./getSegmentedItemProperties-CU8rtBAo.js');
8
- var property = require('./property-DlKiAWt4.js');
7
+ var publishDraftGraph = require('./publishDraftGraph-C38gf302.js');
8
+ var property = require('./property-DbEPQ1m9.js');
9
9
  var lodashEs = require('lodash-es');
10
10
  var drizzleOrm = require('drizzle-orm');
11
11
  var debug = require('debug');
@@ -47,11 +47,88 @@ function encodeBytes32String(value) {
47
47
  return `0x${hex.padEnd(64, '0')}`;
48
48
  }
49
49
 
50
- // Dynamic import to break circular dependency with getItem -> BaseItem
51
- // import { getItem } from '@/db/read/getItem'
50
+ /** Error thrown when publish validation fails. Includes all validation errors for user to fix. */
51
+ class PublishValidationFailedError extends Error {
52
+ constructor(message, validationErrors) {
53
+ super(message);
54
+ this.validationErrors = validationErrors;
55
+ this.name = 'PublishValidationFailedError';
56
+ }
57
+ }
58
+ /** Validation error code for a relation, list member or image/file ref to an unpublished seed. */
59
+ const RELATED_ITEM_UNPUBLISHED_CODE = 'related_item_unpublished';
60
+ const describeUnpublishedRelatedItem = (r) => `${r.propertyName} -> ${r.modelName} ${r.seedLocalId} (seed ${r.seedUid})`;
61
+ /**
62
+ * Thrown before anything is uploaded or attested when the item references items whose seed was
63
+ * unpublished: the parent would attest a revoked seed uid. Republish those items (which gives
64
+ * them a new seed uid) or remove the references, then publish again.
65
+ * See docs/ATTESTATION_REVOCATION.md ("Republishing").
66
+ *
67
+ * A PublishValidationFailedError, so validateItemForPublish and the publish package's checking
68
+ * step report it as validation errors (code `related_item_unpublished`, one per reference).
69
+ */
70
+ class RelatedItemUnpublishedError extends PublishValidationFailedError {
71
+ constructor(unpublishedRelatedItems, otherValidationErrors = []) {
72
+ const lines = unpublishedRelatedItems.map(describeUnpublishedRelatedItem);
73
+ const message = `Cannot publish: it references ${lines.length} unpublished item${lines.length === 1 ? '' : 's'} ` +
74
+ `(their seed attestations were revoked). Republish them or remove the references, then publish again:\n` +
75
+ lines.join('\n');
76
+ super(message, [
77
+ ...unpublishedRelatedItems.map((r) => ({
78
+ field: r.propertyName,
79
+ message: `${r.propertyName} references unpublished ${r.modelName} ${r.seedLocalId} (seed ${r.seedUid}). ` +
80
+ `Republish it or remove the reference.`,
81
+ code: RELATED_ITEM_UNPUBLISHED_CODE,
82
+ })),
83
+ ...otherValidationErrors,
84
+ ]);
85
+ this.name = 'RelatedItemUnpublishedError';
86
+ this.unpublishedRelatedItems = unpublishedRelatedItems;
87
+ }
88
+ }
89
+
52
90
  debug('seedSdk:db:getPublishPayload');
53
91
  /** Case-insensitive dataType match (schema JSON may use "text" vs "Text"). */
54
92
  const matchesDataType = (actual, expected) => main_cjs.normalizeDataType(actual) === expected;
93
+ /** True (and the property is deferred) when `targetSeedLocalId` is an item still in progress. */
94
+ function deferIfBackEdge(ctx, property, targetSeedLocalIds) {
95
+ if (!targetSeedLocalIds.some((id) => !!id && ctx.newSeedsInProgress?.has(id)))
96
+ return false;
97
+ ctx.deferredProperties ?? (ctx.deferredProperties = new Set());
98
+ ctx.deferredProperties.add(property);
99
+ return true;
100
+ }
101
+ /**
102
+ * Checks the seed a relation/list/image ref points at. A revoked (unpublished) seed is recorded in
103
+ * `ctx.unpublishedRelatedItems`; a live published one maps the ref to its current uid. Returns
104
+ * true when the caller must not walk into the related item (it is published, live or revoked).
105
+ */
106
+ function noteRelatedSeed(ctx, ref, row, propertyName, modelName) {
107
+ if (publishDraftGraph.isUnpublishedSeed(row)) {
108
+ ctx.unpublishedRelatedItems ?? (ctx.unpublishedRelatedItems = []);
109
+ if (!ctx.unpublishedRelatedItems.some((r) => r.propertyName === propertyName && r.seedLocalId === row.seedLocalId)) {
110
+ ctx.unpublishedRelatedItems.push({
111
+ propertyName,
112
+ modelName: modelName ?? row.type ?? 'unknown',
113
+ seedLocalId: row.seedLocalId,
114
+ seedUid: row.seedUid,
115
+ });
116
+ }
117
+ return true;
118
+ }
119
+ if (publishDraftGraph.isLivePublishedSeed(row)) {
120
+ if (ref !== row.seedUid) {
121
+ ctx.relatedRefUids ?? (ctx.relatedRefUids = new Map());
122
+ ctx.relatedRefUids.set(ref, row.seedUid);
123
+ }
124
+ return true;
125
+ }
126
+ return false;
127
+ }
128
+ /** Current uid for a ref noted by noteRelatedSeed, else the ref itself. */
129
+ function currentRelatedRef(ctx, ref) {
130
+ return ctx.relatedRefUids?.get(ref.trim()) ?? ref;
131
+ }
55
132
  function addValidationError(ctx, message, field, code = 'publish_validation') {
56
133
  // A property can be validated on more than one path (List of Relation: list + basic); report once.
57
134
  if (ctx.errors.some((e) => e.message === message && e.field === (field ?? '')))
@@ -133,7 +210,7 @@ async function resolveVersionUid(seedLocalId, seedUid) {
133
210
  if (published?.uid)
134
211
  return published.uid;
135
212
  try {
136
- const { getItemVersionsFromEas } = await Promise.resolve().then(function () { return require('./eas-CMNppmGE.js'); });
213
+ const { getItemVersionsFromEas } = await Promise.resolve().then(function () { return require('./eas-CUYXdr2t.js'); });
137
214
  const attestations = await getItemVersionsFromEas({ seedUids: [seedUid] });
138
215
  const latest = attestations?.[0];
139
216
  if (latest?.id)
@@ -193,15 +270,17 @@ const ensurePropertyDefs = async (targetItem) => {
193
270
  (matchesDataType(p.propertyDef?.dataType, main_cjs.ModelPropertyDataTypes.Relation) &&
194
271
  p.propertyDef?.required === undefined)));
195
272
  let schema;
273
+ // Model names are only unique per schema: resolve definitions from this item's own model.
274
+ const targetScope = await main_cjs.getItemModelScope(targetItem);
196
275
  for (const itemProperty of targetItem.properties) {
197
276
  if (!itemProperty.propertyDef && targetItem.modelName) {
198
- schema = await property.getPropertySchema(targetItem.modelName, itemProperty.propertyName);
277
+ schema = await property.getPropertySchema(targetItem.modelName, itemProperty.propertyName, targetScope);
199
278
  if (!schema) {
200
279
  try {
201
- const { Model } = await Promise.resolve().then(function () { return require('./index-CSNtEnbF.js'); }).then(function (n) { return n.Model$1; });
280
+ const { Model } = await Promise.resolve().then(function () { return require('./index-Cvvt0-5B.js'); }).then(function (n) { return n.Model$1; });
202
281
  const normalizedModelName = lodashEs.upperFirst(lodashEs.camelCase(targetItem.modelName));
203
- let model = Model.getByName(normalizedModelName);
204
- if (!model?.properties?.length) {
282
+ let model = Model.resolve(normalizedModelName, targetScope);
283
+ if (!model?.properties?.length && !targetScope.modelFileId) {
205
284
  model = Model.findByModelType(casing.toSnakeCase(targetItem.modelName));
206
285
  }
207
286
  const modelFound = !!model;
@@ -222,11 +301,8 @@ const ensurePropertyDefs = async (targetItem) => {
222
301
  if (db) {
223
302
  try {
224
303
  const normalizedModelName = lodashEs.upperFirst(lodashEs.camelCase(targetItem.modelName));
225
- const modelRecords = await db
226
- .select({ id: main_cjs.models.id })
227
- .from(main_cjs.models)
228
- .where(drizzleOrm.eq(main_cjs.models.name, normalizedModelName))
229
- .limit(1);
304
+ const modelRecord = await main_cjs.resolveModelRecord(normalizedModelName, targetScope, db);
305
+ const modelRecords = modelRecord ? [modelRecord] : [];
230
306
  if (modelRecords.length > 0 && modelRecords[0].id) {
231
307
  const propertyRecords = await db
232
308
  .select()
@@ -277,6 +353,9 @@ const processBasicProperties = async (itemBasicProperties, itemPublishData, ctx,
277
353
  if (main_cjs.INTERNAL_PROPERTY_NAMES.includes(basicProperty.propertyName)) {
278
354
  continue;
279
355
  }
356
+ if (ctx.deferredProperties?.has(basicProperty)) {
357
+ continue;
358
+ }
280
359
  const snapshot = basicProperty.getService().getSnapshot();
281
360
  const context = 'context' in snapshot ? snapshot.context : null;
282
361
  const propertyDef = basicProperty.propertyDef ?? (context ? context.propertyRecordSchema : undefined);
@@ -357,13 +436,17 @@ const processBasicProperties = async (itemBasicProperties, itemPublishData, ctx,
357
436
  .map((s) => s.trim())
358
437
  .filter(Boolean);
359
438
  }
439
+ // A ref to a published related item attests that item's current uid.
440
+ if (typeof value === 'string' && (isRelation || isFileImageHtml || isJsonStorage)) {
441
+ value = currentRelatedRef(ctx, value);
442
+ }
360
443
  if (schemaDef.startsWith('bytes32[]') && !Array.isArray(value)) {
361
444
  addValidationError(ctx, `Invalid value for property: ${basicProperty.propertyName}. Expected an array of bytes32, got ${value}.`, basicProperty.propertyName);
362
445
  continue;
363
446
  }
364
447
  // Validate against property validation rules (enum, pattern, minLength, maxLength) before encoding
365
448
  if (propertyDef?.validation) {
366
- const { SchemaValidationService } = await Promise.resolve().then(function () { return require('./SchemaValidationService-DtYs_CNY.js'); });
449
+ const { SchemaValidationService } = await Promise.resolve().then(function () { return require('./SchemaValidationService-BSU9knjf.js'); });
367
450
  const validationService = new SchemaValidationService();
368
451
  const validationResult = validationService.validatePropertyValue(value, main_cjs.normalizeDataType(propertyDef.dataType), propertyDef.validation, propertyDef.refValueType
369
452
  ? main_cjs.normalizeDataType(propertyDef.refValueType)
@@ -394,7 +477,7 @@ const processBasicProperties = async (itemBasicProperties, itemPublishData, ctx,
394
477
  : '';
395
478
  if (!idStr)
396
479
  continue;
397
- const trimmed = idStr.trim();
480
+ const trimmed = currentRelatedRef(ctx, idStr.trim());
398
481
  if (!trimmed)
399
482
  continue;
400
483
  rawIds.push(trimmed);
@@ -503,7 +586,7 @@ const processRelationOrImageProperty = async (relationOrImageProperty, multiPubl
503
586
  matchesDataType(relationOrImageProperty.propertyDef?.refValueType, main_cjs.ModelPropertyDataTypes.Html) ||
504
587
  matchesDataType(relationOrImageProperty.propertyDef?.refValueType, main_cjs.ModelPropertyDataTypes.Json)));
505
588
  if (isStorageSeed && (context.seedLocalId || context.seedUid)) {
506
- const { getPropertyData: getPropertyDataFromDb } = await Promise.resolve().then(function () { return require('./index-CSNtEnbF.js'); }).then(function (n) { return n.getPropertyData; });
589
+ const { getPropertyData: getPropertyDataFromDb } = await Promise.resolve().then(function () { return require('./index-Cvvt0-5B.js'); }).then(function (n) { return n.getPropertyData; });
507
590
  const metaRow = await getPropertyDataFromDb({
508
591
  propertyName: relationOrImageProperty.propertyName,
509
592
  seedLocalId: context.seedLocalId,
@@ -525,14 +608,12 @@ const processRelationOrImageProperty = async (relationOrImageProperty, multiPubl
525
608
  let isRequired = propertyDef?.required === true;
526
609
  // Resolve required from schema/DB when propertyDef lacks it
527
610
  if (!isRequired && relationOrImageProperty.modelName) {
528
- let schema = await property.getPropertySchema(relationOrImageProperty.modelName, relationOrImageProperty.propertyName);
611
+ const propertyScope = await main_cjs.getItemModelScope(relationOrImageProperty);
612
+ let schema = await property.getPropertySchema(relationOrImageProperty.modelName, relationOrImageProperty.propertyName, propertyScope);
529
613
  if (!schema && main_cjs.BaseDb.getAppDb()) {
530
614
  const normalizedModelName = lodashEs.upperFirst(lodashEs.camelCase(relationOrImageProperty.modelName));
531
- const modelRecords = await main_cjs.BaseDb.getAppDb()
532
- .select({ id: main_cjs.models.id })
533
- .from(main_cjs.models)
534
- .where(drizzleOrm.eq(main_cjs.models.name, normalizedModelName))
535
- .limit(1);
615
+ const modelRecord = await main_cjs.resolveModelRecord(normalizedModelName, propertyScope);
616
+ const modelRecords = modelRecord ? [modelRecord] : [];
536
617
  if (modelRecords.length > 0 && modelRecords[0].id) {
537
618
  const propertyRecords = await main_cjs.BaseDb.getAppDb()
538
619
  .select()
@@ -588,13 +669,18 @@ const processRelationOrImageProperty = async (relationOrImageProperty, multiPubl
588
669
  }
589
670
  return multiPublishPayload;
590
671
  }
672
+ // The local seed, also when the ref is the old uid of a seed published again since.
673
+ const relatedSeed = await publishDraftGraph.findRelatedSeedRow({ seedLocalId, seedUid });
674
+ if (!isStorageSeed && deferIfBackEdge(ctx, relationOrImageProperty, [relatedSeed?.seedLocalId ?? seedLocalId])) {
675
+ return multiPublishPayload;
676
+ }
591
677
  // Use dynamic import to break circular dependency
592
- const getItemMod = await Promise.resolve().then(function () { return require('./getItem-B6jEINjW.js'); });
678
+ const getItemMod = await Promise.resolve().then(function () { return require('./getItem-z1tHu0hu.js'); });
593
679
  const { getItem } = getItemMod;
594
- const relatedItem = await getItem({
595
- seedLocalId,
596
- seedUid,
597
- });
680
+ const relatedItem = await getItem(relatedSeed ? { seedLocalId: relatedSeed.seedLocalId } : { seedLocalId, seedUid });
681
+ if (noteRelatedSeed(ctx, normalizedRef, relatedSeed, relationOrImageProperty.propertyName, relatedItem?.modelName ?? publishDraftGraph.relatedModelNameFromDef(relationOrImageProperty.propertyDef))) {
682
+ return multiPublishPayload;
683
+ }
598
684
  // When related item not found (e.g. different DB, not yet created)
599
685
  if (!relatedItem) {
600
686
  // An attested uid with no local copy is already published; the parent attests the uid as-is.
@@ -609,7 +695,6 @@ const processRelationOrImageProperty = async (relationOrImageProperty, multiPubl
609
695
  if (relatedItem.seedUid && relatedItem.seedUid !== main_cjs.ZERO_BYTES32) {
610
696
  return multiPublishPayload;
611
697
  }
612
- const versionUid = getVersionUid(relatedItem);
613
698
  let modelName;
614
699
  if (matchesDataType(relationOrImageProperty.propertyDef?.dataType, main_cjs.ModelPropertyDataTypes.Image)) {
615
700
  modelName = 'Image';
@@ -628,63 +713,119 @@ const processRelationOrImageProperty = async (relationOrImageProperty, multiPubl
628
713
  addValidationError(ctx, `Model name not found for relation or image property: ${relationOrImageProperty.propertyName}`, relationOrImageProperty.propertyName);
629
714
  return multiPublishPayload;
630
715
  }
716
+ return processRelatedDraftItem({
717
+ relatedItem,
718
+ modelName,
719
+ // A storage seed (Image/File/Html/Json item) attests its own basic properties; a related model
720
+ // item is published with its full property set and the draft items it reaches in turn.
721
+ fullDraft: !isStorageSeed,
722
+ link: { publishLocalId: originalSeedLocalId, propertySchemaUid: relationOrImageSchemaUid },
723
+ reportPropertyName: relationOrImageProperty.propertyName,
724
+ multiPublishPayload,
725
+ uploadedTransactions,
726
+ ctx,
727
+ buildOpts,
728
+ });
729
+ };
730
+ /**
731
+ * The payload of a draft item (no seed uid) a published item refers to, published with it. Its
732
+ * request fills the referring property (`link`) through propertiesToUpdate. With `fullDraft`, the
733
+ * item's whole property set is attested: its storage seeds and Html-embedded images, and its own
734
+ * relation and list properties, whose draft targets are published with it in turn (depth first,
735
+ * see publishDraftGraph.ts). A draft already in the batch only gains the link.
736
+ */
737
+ async function processRelatedDraftItem({ relatedItem, modelName, fullDraft, link, reportPropertyName, multiPublishPayload, uploadedTransactions, ctx, buildOpts, }) {
738
+ const forceFullSnapshot = buildOpts?.forceFullSnapshot === true;
631
739
  const seedSchemaUid = await main_cjs.getEasSchemaUidForModel(modelName);
632
740
  if (!seedSchemaUid) {
633
- addValidationError(ctx, `Schema UID not found for model: ${modelName}`, relationOrImageProperty.propertyName);
741
+ addValidationError(ctx, `Schema UID not found for model: ${modelName}`, reportPropertyName);
634
742
  return multiPublishPayload;
635
743
  }
636
- if (mergeChildPublishPayloadIfDuplicateInBatch(multiPublishPayload, relatedItem.seedLocalId, originalSeedLocalId, relationOrImageSchemaUid)) {
744
+ if (multiPublishPayload.some((p) => p.localId === relatedItem.seedLocalId)) {
745
+ if (link) {
746
+ mergeChildPublishPayloadIfDuplicateInBatch(multiPublishPayload, relatedItem.seedLocalId, link.publishLocalId, link.propertySchemaUid);
747
+ }
637
748
  return multiPublishPayload;
638
749
  }
639
750
  let publishPayload = {
640
751
  localId: relatedItem.seedLocalId,
641
752
  seedIsRevocable: true,
642
753
  versionSchemaUid: main_cjs.VERSION_SCHEMA_UID,
643
- seedUid: seedUid || main_cjs.ZERO_BYTES32,
754
+ seedUid: main_cjs.ZERO_BYTES32,
644
755
  seedSchemaUid,
645
- versionUid,
756
+ versionUid: getVersionUid(relatedItem),
646
757
  listOfAttestations: [],
647
- propertiesToUpdate: [
648
- {
649
- publishLocalId: originalSeedLocalId,
650
- propertySchemaUid: relationOrImageSchemaUid,
651
- },
652
- ],
758
+ propertiesToUpdate: link ? [{ ...link }] : [],
653
759
  };
654
- await ensurePropertyDefs(relatedItem);
655
- const { itemBasicProperties, itemUploadProperties } = await getSegmentedItemProperties.getSegmentedItemProperties(relatedItem);
656
- const relatedStorageUpload = resolveStorageTransactionUploadSlot(relatedItem, itemUploadProperties);
657
- if (relatedStorageUpload) {
658
- const transactionData = findUploadedTxForSeedLocalId(uploadedTransactions, relatedItem.seedLocalId);
659
- if (transactionData) {
660
- const itemProperty = relatedStorageUpload.itemProperty;
661
- // Publish encoding reads context.propertyValue; do not await ItemProperty.save() here — it
662
- // uses xstate waitFor(10s) for idle and can time out while the machine is busy or still loading.
663
- itemProperty.getService().send({
664
- type: 'updateContext',
665
- propertyValue: transactionData.txId,
666
- renderValue: transactionData.txId,
667
- });
668
- replaceStorageTransactionInBasicProperties(itemBasicProperties, itemProperty);
760
+ ctx.newSeedsInProgress ?? (ctx.newSeedsInProgress = new Set());
761
+ ctx.newSeedsInProgress.add(relatedItem.seedLocalId);
762
+ try {
763
+ await ensurePropertyDefs(relatedItem);
764
+ const segmented = await publishDraftGraph.getSegmentedItemProperties(relatedItem);
765
+ const { itemBasicProperties, itemUploadProperties, itemImageProperties: relatedStorageSeedProperties } = segmented;
766
+ if (fullDraft) {
767
+ // Its own Image/File/Html/Json properties and the images embedded in its Html (as for the item itself).
768
+ multiPublishPayload = await processRelatedDraftStorageSeeds(relatedItem, relatedStorageSeedProperties, itemBasicProperties, multiPublishPayload, uploadedTransactions, ctx, buildOpts);
769
+ // Its relations and lists: their draft targets are published too (same walk as publishDraftGraph).
770
+ const { relationProperties, listProperties } = publishDraftGraph.draftWalkProperties(segmented);
771
+ for (const relationProperty of relationProperties) {
772
+ multiPublishPayload = await processRelationOrImageProperty(relationProperty, multiPublishPayload, uploadedTransactions, relatedItem.seedLocalId, ctx, buildOpts);
773
+ itemBasicProperties.push(relationProperty);
774
+ }
775
+ for (const listProperty of listProperties) {
776
+ multiPublishPayload = await processListProperty(listProperty, multiPublishPayload, uploadedTransactions, relatedItem.seedLocalId, ctx, buildOpts);
777
+ itemBasicProperties.push(listProperty);
778
+ }
669
779
  }
670
- }
671
- for (const p of itemBasicProperties) {
672
- if (isStorageTransactionPropertyName(p.propertyName) &&
673
- !p.propertyDef &&
674
- relatedItem.modelName) {
675
- const schema = await property.getPropertySchema(relatedItem.modelName, 'storageTransactionId');
676
- if (schema) {
677
- p.getService().send({ type: 'updateContext', propertyRecordSchema: schema });
780
+ const relatedStorageUpload = resolveStorageTransactionUploadSlot(relatedItem, itemUploadProperties);
781
+ if (relatedStorageUpload) {
782
+ const transactionData = findUploadedTxForSeedLocalId(uploadedTransactions, relatedItem.seedLocalId);
783
+ if (transactionData) {
784
+ const itemProperty = relatedStorageUpload.itemProperty;
785
+ // Publish encoding reads context.propertyValue; do not await ItemProperty.save() here — it
786
+ // uses xstate waitFor(10s) for idle and can time out while the machine is busy or still loading.
787
+ itemProperty.getService().send({
788
+ type: 'updateContext',
789
+ propertyValue: transactionData.txId,
790
+ renderValue: transactionData.txId,
791
+ });
792
+ replaceStorageTransactionInBasicProperties(itemBasicProperties, itemProperty);
678
793
  }
679
794
  }
795
+ for (const p of itemBasicProperties) {
796
+ if (isStorageTransactionPropertyName(p.propertyName) &&
797
+ !p.propertyDef &&
798
+ relatedItem.modelName) {
799
+ const schema = await property.getPropertySchema(relatedItem.modelName, 'storageTransactionId', await main_cjs.getItemModelScope(relatedItem));
800
+ if (schema) {
801
+ p.getService().send({ type: 'updateContext', propertyRecordSchema: schema });
802
+ }
803
+ }
804
+ }
805
+ dedupeOneStorageTransactionPropertyInList(itemBasicProperties);
806
+ publishPayload = await processBasicProperties(itemBasicProperties, publishPayload, ctx, {
807
+ forceFullSnapshot,
808
+ });
809
+ }
810
+ finally {
811
+ ctx.newSeedsInProgress.delete(relatedItem.seedLocalId);
680
812
  }
681
- dedupeOneStorageTransactionPropertyInList(itemBasicProperties);
682
- publishPayload = await processBasicProperties(itemBasicProperties, publishPayload, ctx, {
683
- forceFullSnapshot,
684
- });
685
813
  multiPublishPayload.push(publishPayload);
686
814
  return multiPublishPayload;
687
- };
815
+ }
816
+ /**
817
+ * Storage-seed properties (Image/File/Html/Json) of a draft item related to the published one, and
818
+ * the images embedded in its Html (htmlEmbeddedImageCoPublish rows it owns): payloads for their seeds,
819
+ * and the properties added to `itemBasicProperties` so the related item attests them. Same handling
820
+ * as the published item's own (see getPublishPayload).
821
+ */
822
+ async function processRelatedDraftStorageSeeds(relatedItem, storageSeedProperties, itemBasicProperties, multiPublishPayload, uploadedTransactions, ctx, buildOpts) {
823
+ for (const storageSeedProperty of storageSeedProperties) {
824
+ multiPublishPayload = await processRelationOrImageProperty(storageSeedProperty, multiPublishPayload, uploadedTransactions, relatedItem.seedLocalId, ctx, buildOpts);
825
+ itemBasicProperties.push(storageSeedProperty);
826
+ }
827
+ return processHtmlEmbeddedCoPublishImagePayloads(relatedItem, multiPublishPayload, uploadedTransactions, ctx, buildOpts);
828
+ }
688
829
  async function resolveHtmlPropertySchemaUidByHtmlSeed(item, htmlSeedLocalId, ctx) {
689
830
  const want = htmlSeedLocalId.trim();
690
831
  for (const p of item.properties) {
@@ -705,7 +846,7 @@ async function resolveHtmlPropertySchemaUidByHtmlSeed(item, htmlSeedLocalId, ctx
705
846
  addValidationError(ctx, `Could not find Html property for embedded image rewrite (html seed ${want}).`, 'html', 'html_embed_schema');
706
847
  return undefined;
707
848
  }
708
- async function processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPayload, uploadedTransactions, originalSeedLocalId, ctx, buildOpts) {
849
+ async function processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPayload, uploadedTransactions, ctx, buildOpts) {
709
850
  const appDb = main_cjs.BaseDb.getAppDb();
710
851
  if (!appDb)
711
852
  return multiPublishPayload;
@@ -716,13 +857,20 @@ async function processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPaylo
716
857
  if (rows.length === 0)
717
858
  return multiPublishPayload;
718
859
  const forceFullSnapshot = buildOpts?.forceFullSnapshot === true;
719
- const getItemMod = await Promise.resolve().then(function () { return require('./getItem-B6jEINjW.js'); });
860
+ const getItemMod = await Promise.resolve().then(function () { return require('./getItem-z1tHu0hu.js'); });
720
861
  const { getItem } = getItemMod;
721
862
  const doneImages = new Set();
722
863
  for (const row of rows) {
723
864
  if (doneImages.has(row.imageSeedLocalId))
724
865
  continue;
725
866
  doneImages.add(row.imageSeedLocalId);
867
+ // An embedded image that is already published is not co-published; one whose seed was revoked
868
+ // (unpublished) blocks the publish like an image property pointing at it would.
869
+ const imageSeed = await publishDraftGraph.findRelatedSeedRow({ seedLocalId: row.imageSeedLocalId });
870
+ if (noteRelatedSeed(ctx, row.imageSeedLocalId, imageSeed, publishDraftGraph.htmlPropertyNameForHtmlSeed(item, row.htmlSeedLocalId), 'Image')) {
871
+ continue;
872
+ }
873
+ // The row's Html seed must still be the value of one of the item's Html properties.
726
874
  const htmlSchemaUid = await resolveHtmlPropertySchemaUidByHtmlSeed(item, row.htmlSeedLocalId, ctx);
727
875
  if (!htmlSchemaUid)
728
876
  continue;
@@ -739,10 +887,16 @@ async function processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPaylo
739
887
  addValidationError(ctx, `Schema UID not found for model: Image`, 'html');
740
888
  continue;
741
889
  }
742
- if (mergeChildPublishPayloadIfDuplicateInBatch(multiPublishPayload, relatedItem.seedLocalId, originalSeedLocalId, htmlSchemaUid)) {
890
+ // Already in the batch (e.g. also the value of an Image property): its payload is there.
891
+ if (multiPublishPayload.some((p) => p.localId === relatedItem.seedLocalId)) {
743
892
  continue;
744
893
  }
745
894
  const versionUid = getVersionUid(relatedItem);
895
+ // No propertiesToUpdate: the Html refers to the image by its Arweave URL (the data URI is
896
+ // rewritten to it before the Html is uploaded), not by seed uid. The Html property holds the Html
897
+ // storage seed's uid, which the Html seed's own request writes into it; the contract writes each
898
+ // updater's seed uid into the same data[0] (SeedPublishLib.setSeedReference), so an image
899
+ // targeting the Html property too would overwrite that reference with the image's seed uid.
746
900
  let publishPayload = {
747
901
  localId: relatedItem.seedLocalId,
748
902
  seedIsRevocable: true,
@@ -751,15 +905,10 @@ async function processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPaylo
751
905
  seedSchemaUid,
752
906
  versionUid,
753
907
  listOfAttestations: [],
754
- propertiesToUpdate: [
755
- {
756
- publishLocalId: originalSeedLocalId,
757
- propertySchemaUid: htmlSchemaUid,
758
- },
759
- ],
908
+ propertiesToUpdate: [],
760
909
  };
761
910
  await ensurePropertyDefs(relatedItem);
762
- const { itemBasicProperties, itemUploadProperties } = await getSegmentedItemProperties.getSegmentedItemProperties(relatedItem);
911
+ const { itemBasicProperties, itemUploadProperties } = await publishDraftGraph.getSegmentedItemProperties(relatedItem);
763
912
  const relatedStorageUpload = resolveStorageTransactionUploadSlot(relatedItem, itemUploadProperties);
764
913
  if (relatedStorageUpload) {
765
914
  const transactionData = findUploadedTxForSeedLocalId(uploadedTransactions, relatedItem.seedLocalId);
@@ -777,7 +926,7 @@ async function processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPaylo
777
926
  if (isStorageTransactionPropertyName(p.propertyName) &&
778
927
  !p.propertyDef &&
779
928
  relatedItem.modelName) {
780
- const schema = await property.getPropertySchema(relatedItem.modelName, 'storageTransactionId');
929
+ const schema = await property.getPropertySchema(relatedItem.modelName, 'storageTransactionId', await main_cjs.getItemModelScope(relatedItem));
781
930
  if (schema) {
782
931
  p.getService().send({ type: 'updateContext', propertyRecordSchema: schema });
783
932
  }
@@ -791,7 +940,7 @@ async function processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPaylo
791
940
  }
792
941
  return multiPublishPayload;
793
942
  }
794
- const processListProperty = async (listProperty, multiPublishPayload, originalSeedLocalId, ctx, buildOpts) => {
943
+ const processListProperty = async (listProperty, multiPublishPayload, uploadedTransactions, originalSeedLocalId, ctx, buildOpts) => {
795
944
  const forceFullSnapshot = buildOpts?.forceFullSnapshot === true;
796
945
  // processListProperty only handles list-of-relations; list-of-primitives go to itemBasicProperties
797
946
  if (!listProperty.propertyDef?.ref) {
@@ -824,6 +973,7 @@ const processListProperty = async (listProperty, multiPublishPayload, originalSe
824
973
  : value != null
825
974
  ? [value]
826
975
  : [];
976
+ const members = [];
827
977
  for (const seedId of iterableValue) {
828
978
  const idStr = typeof seedId === 'string'
829
979
  ? seedId
@@ -835,13 +985,25 @@ const processListProperty = async (listProperty, multiPublishPayload, originalSe
835
985
  const { localId: seedLocalId, uid: seedUid } = main_cjs.getCorrectId(idStr);
836
986
  if (!seedLocalId && !seedUid)
837
987
  continue;
988
+ members.push({ idStr, seedLocalId, seedUid });
989
+ }
990
+ // A member that is an item still in progress (a cycle back to it) can't be attested in this
991
+ // publish, so the list is deferred; its other draft members are still published, unlinked.
992
+ const memberSeeds = await Promise.all(members.map((m) => publishDraftGraph.findRelatedSeedRow({ seedLocalId: m.seedLocalId, seedUid: m.seedUid })));
993
+ const deferred = deferIfBackEdge(ctx, listProperty, members.map((m, i) => memberSeeds[i]?.seedLocalId ?? m.seedLocalId));
994
+ for (let i = 0; i < members.length; i++) {
995
+ const { idStr, seedLocalId, seedUid } = members[i];
996
+ const relatedSeed = memberSeeds[i] ?? null;
997
+ const memberLocalId = relatedSeed?.seedLocalId ?? seedLocalId;
998
+ if (memberLocalId && ctx.newSeedsInProgress?.has(memberLocalId))
999
+ continue;
838
1000
  // Use dynamic import to break circular dependency
839
- const getItemMod = await Promise.resolve().then(function () { return require('./getItem-B6jEINjW.js'); });
1001
+ const getItemMod = await Promise.resolve().then(function () { return require('./getItem-z1tHu0hu.js'); });
840
1002
  const { getItem } = getItemMod;
841
- const relatedItem = await getItem({
842
- seedLocalId,
843
- seedUid,
844
- });
1003
+ const relatedItem = await getItem(relatedSeed ? { seedLocalId: relatedSeed.seedLocalId } : { seedLocalId, seedUid });
1004
+ if (noteRelatedSeed(ctx, idStr.trim(), relatedSeed, listProperty.propertyName, relatedItem?.modelName ?? publishDraftGraph.relatedModelNameFromDef(listProperty.propertyDef))) {
1005
+ continue;
1006
+ }
845
1007
  if (!relatedItem) {
846
1008
  // An attested uid with no local copy is already published; the list attests the uid as-is.
847
1009
  if (!main_cjs.isPublishedSeedRef(idStr)) {
@@ -852,7 +1014,6 @@ const processListProperty = async (listProperty, multiPublishPayload, originalSe
852
1014
  if (relatedItem.seedUid && relatedItem.seedUid !== main_cjs.ZERO_BYTES32) {
853
1015
  continue;
854
1016
  }
855
- const versionUid = getVersionUid(relatedItem);
856
1017
  let modelName;
857
1018
  if (listProperty.propertyDef?.ref || listProperty.propertyDef.refModelName) {
858
1019
  const def = listProperty.propertyDef;
@@ -871,36 +1032,17 @@ const processListProperty = async (listProperty, multiPublishPayload, originalSe
871
1032
  addValidationError(ctx, `Model name not found for list property: ${listProperty.propertyName}`, listProperty.propertyName);
872
1033
  continue;
873
1034
  }
874
- const seedSchemaUid = await main_cjs.getEasSchemaUidForModel(modelName);
875
- if (!seedSchemaUid) {
876
- addValidationError(ctx, `Schema UID not found for model: ${modelName}`, listProperty.propertyName);
877
- continue;
878
- }
879
- if (mergeChildPublishPayloadIfDuplicateInBatch(multiPublishPayload, relatedItem.seedLocalId, originalSeedLocalId, listPropertySchemaUid)) {
880
- continue;
881
- }
882
- let publishPayload = {
883
- localId: relatedItem.seedLocalId,
884
- seedIsRevocable: true,
885
- versionSchemaUid: main_cjs.VERSION_SCHEMA_UID,
886
- seedUid: seedUid || main_cjs.ZERO_BYTES32,
887
- seedSchemaUid,
888
- versionUid,
889
- listOfAttestations: [],
890
- propertiesToUpdate: [
891
- {
892
- publishLocalId: originalSeedLocalId,
893
- propertySchemaUid: listPropertySchemaUid,
894
- },
895
- ],
896
- };
897
- await ensurePropertyDefs(relatedItem);
898
- const { itemBasicProperties } = await getSegmentedItemProperties.getSegmentedItemProperties(relatedItem);
899
- dedupeOneStorageTransactionPropertyInList(itemBasicProperties);
900
- publishPayload = await processBasicProperties(itemBasicProperties, publishPayload, ctx, {
901
- forceFullSnapshot,
1035
+ multiPublishPayload = await processRelatedDraftItem({
1036
+ relatedItem,
1037
+ modelName,
1038
+ fullDraft: true,
1039
+ link: deferred ? null : { publishLocalId: originalSeedLocalId, propertySchemaUid: listPropertySchemaUid },
1040
+ reportPropertyName: listProperty.propertyName,
1041
+ multiPublishPayload,
1042
+ uploadedTransactions,
1043
+ ctx,
1044
+ buildOpts,
902
1045
  });
903
- multiPublishPayload.push(publishPayload);
904
1046
  }
905
1047
  return multiPublishPayload;
906
1048
  };
@@ -1031,22 +1173,24 @@ function findUploadedTxForSeedLocalId(uploadedTransactions, seedLocalId) {
1031
1173
  return (uploadedTransactions.find((u) => u.seedLocalId === t) ??
1032
1174
  uploadedTransactions.find((u) => u.seedLocalId != null && u.seedLocalId.trim() === t));
1033
1175
  }
1034
- /** Error thrown when publish validation fails. Includes all validation errors for user to fix. */
1035
- class PublishValidationFailedError extends Error {
1036
- constructor(message, validationErrors) {
1037
- super(message);
1038
- this.validationErrors = validationErrors;
1039
- this.name = 'PublishValidationFailedError';
1040
- }
1041
- }
1042
1176
  const getPublishPayload = async (item, uploadedTransactions, options) => {
1043
1177
  const validationCtx = { errors: [] };
1044
1178
  const publishMode = options?.publishMode ?? 'patch';
1045
- const forceFullSnapshot = publishMode === 'new_version';
1179
+ // A revoked seed can't be published under again: republishing creates a new seed attestation
1180
+ // (new seedUid) and a new version carrying every property (see docs/ATTESTATION_REVOCATION.md).
1181
+ const hasSeedUid = !!item.seedUid && item.seedUid !== main_cjs.ZERO_BYTES32;
1182
+ const republishRevokedSeed = hasSeedUid && (await publishDraftGraph.isSeedRevoked(item.seedLocalId));
1183
+ const rootSeedUid = republishRevokedSeed ? main_cjs.ZERO_BYTES32 : item.seedUid || main_cjs.ZERO_BYTES32;
1184
+ const forceFullSnapshot = publishMode === 'new_version' || republishRevokedSeed;
1046
1185
  if (publishMode === 'new_version' && (!item.seedUid || item.seedUid === main_cjs.ZERO_BYTES32)) {
1047
1186
  addValidationError(validationCtx, 'Publishing as a new version requires the item to already have a published Seed attestation (seed UID).', 'seedUid', 'publish_new_version_requires_seed');
1048
1187
  }
1049
1188
  let multiPublishPayload = [];
1189
+ // The root gets a new seed (draft, or revoked seed published again): related drafts referring
1190
+ // back to it can't attest its uid in this publish (see publishDraftGraph.ts).
1191
+ if (rootSeedUid === main_cjs.ZERO_BYTES32) {
1192
+ validationCtx.newSeedsInProgress = new Set([item.seedLocalId]);
1193
+ }
1050
1194
  // Each PublishPayload is generated from a Seed that needs publishing
1051
1195
  // First we need to determine all Seeds to publish
1052
1196
  // That means the Seed of the Item, plus any Seeds pointed to by Relations
@@ -1063,15 +1207,15 @@ const getPublishPayload = async (item, uploadedTransactions, options) => {
1063
1207
  }
1064
1208
  }
1065
1209
  let versionUid = getVersionUid(item);
1066
- if (versionUid === main_cjs.ZERO_BYTES32 && item.seedUid && item.seedUid !== main_cjs.ZERO_BYTES32) {
1067
- versionUid = await resolveVersionUid(item.seedLocalId, item.seedUid);
1210
+ if (versionUid === main_cjs.ZERO_BYTES32 && rootSeedUid !== main_cjs.ZERO_BYTES32) {
1211
+ versionUid = await resolveVersionUid(item.seedLocalId, rootSeedUid);
1068
1212
  }
1069
- if (forceFullSnapshot && item.seedUid && item.seedUid !== main_cjs.ZERO_BYTES32) {
1213
+ if (forceFullSnapshot && hasSeedUid) {
1070
1214
  versionUid = main_cjs.ZERO_BYTES32;
1071
1215
  }
1072
1216
  let itemPublishData = {
1073
1217
  localId: item.seedLocalId,
1074
- seedUid: item.seedUid || main_cjs.ZERO_BYTES32,
1218
+ seedUid: rootSeedUid,
1075
1219
  seedIsRevocable: true,
1076
1220
  seedSchemaUid: itemSchemaUid,
1077
1221
  versionSchemaUid: main_cjs.VERSION_SCHEMA_UID,
@@ -1080,7 +1224,7 @@ const getPublishPayload = async (item, uploadedTransactions, options) => {
1080
1224
  propertiesToUpdate: [],
1081
1225
  };
1082
1226
  await ensurePropertyDefs(item);
1083
- const { itemBasicProperties, itemListProperties, itemUploadProperties, itemImageProperties, itemRelationProperties, } = await getSegmentedItemProperties.getSegmentedItemProperties(item);
1227
+ const { itemBasicProperties, itemListProperties, itemUploadProperties, itemImageProperties, itemRelationProperties, } = await publishDraftGraph.getSegmentedItemProperties(item);
1084
1228
  const relationAndImageProperties = [...itemRelationProperties, ...itemImageProperties];
1085
1229
  // Validate required relations have values before processing
1086
1230
  for (const relProp of itemRelationProperties) {
@@ -1093,11 +1237,8 @@ const getPublishPayload = async (item, uploadedTransactions, options) => {
1093
1237
  let isRequired = relProp.propertyDef?.required === true;
1094
1238
  if (!isRequired && main_cjs.BaseDb.getAppDb() && item.modelName) {
1095
1239
  const normalizedModelName = lodashEs.upperFirst(lodashEs.camelCase(item.modelName));
1096
- const modelRows = await main_cjs.BaseDb.getAppDb()
1097
- .select({ id: main_cjs.models.id })
1098
- .from(main_cjs.models)
1099
- .where(drizzleOrm.eq(main_cjs.models.name, normalizedModelName))
1100
- .limit(1);
1240
+ const modelRecord = await main_cjs.resolveModelRecord(normalizedModelName, await main_cjs.getItemModelScope(item));
1241
+ const modelRows = modelRecord ? [modelRecord] : [];
1101
1242
  if (modelRows.length > 0) {
1102
1243
  const propRows = await main_cjs.BaseDb.getAppDb()
1103
1244
  .select({ required: main_cjs.properties.required, refModelId: main_cjs.properties.refModelId })
@@ -1132,14 +1273,14 @@ const getPublishPayload = async (item, uploadedTransactions, options) => {
1132
1273
  multiPublishPayload = await processRelationOrImageProperty(relationProperty, multiPublishPayload, uploadedTransactions, item.seedLocalId, validationCtx, { forceFullSnapshot });
1133
1274
  itemBasicProperties.push(relationProperty);
1134
1275
  }
1135
- multiPublishPayload = await processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPayload, uploadedTransactions, item.seedLocalId, validationCtx, { forceFullSnapshot });
1276
+ multiPublishPayload = await processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPayload, uploadedTransactions, validationCtx, { forceFullSnapshot });
1136
1277
  for (const listProperty of itemListProperties) {
1137
- multiPublishPayload = await processListProperty(listProperty, multiPublishPayload, item.seedLocalId, validationCtx, { forceFullSnapshot });
1278
+ multiPublishPayload = await processListProperty(listProperty, multiPublishPayload, uploadedTransactions, item.seedLocalId, validationCtx, { forceFullSnapshot });
1138
1279
  itemBasicProperties.push(listProperty);
1139
1280
  }
1140
1281
  for (const p of itemBasicProperties) {
1141
1282
  if (isStorageTransactionPropertyName(p.propertyName) && !p.propertyDef && item.modelName) {
1142
- const schema = await property.getPropertySchema(item.modelName, 'storageTransactionId');
1283
+ const schema = await property.getPropertySchema(item.modelName, 'storageTransactionId', await main_cjs.getItemModelScope(item));
1143
1284
  if (schema) {
1144
1285
  p.getService().send({ type: 'updateContext', propertyRecordSchema: schema });
1145
1286
  }
@@ -1165,6 +1306,10 @@ const getPublishPayload = async (item, uploadedTransactions, options) => {
1165
1306
  'Ensure required fields have values and that publishable properties are present.', 'listOfAttestations', 'publish_new_version_empty_snapshot');
1166
1307
  }
1167
1308
  }
1309
+ // Stop before anything is uploaded or attested: the payload would attest revoked seed uids.
1310
+ if (validationCtx.unpublishedRelatedItems?.length) {
1311
+ throw new RelatedItemUnpublishedError(validationCtx.unpublishedRelatedItems, validationCtx.errors);
1312
+ }
1168
1313
  if (validationCtx.errors.length > 0) {
1169
1314
  const combinedMessage = validationCtx.errors.map((e) => e.message).join('\n');
1170
1315
  throw new PublishValidationFailedError(`Validation failed (${validationCtx.errors.length} error${validationCtx.errors.length === 1 ? '' : 's'}):\n${combinedMessage}`, validationCtx.errors);
@@ -1449,4 +1594,4 @@ exports.PublishValidationFailedError = PublishValidationFailedError;
1449
1594
  exports.getPublishPayload = getPublishPayload;
1450
1595
  exports.resolvePublishPayloadValues = resolvePublishPayloadValues;
1451
1596
  exports.validateItemForPublish = validateItemForPublish;
1452
- //# sourceMappingURL=getPublishPayload-D5DhLGvN.js.map
1597
+ //# sourceMappingURL=getPublishPayload-CEP_e-Kv.js.map