@seedprotocol/sdk 0.7.0 → 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 (148) hide show
  1. package/dist/{BasePathResolver-ndE8XTpw.js → BasePathResolver-DRT09oVv.js} +2 -2
  2. package/dist/{BasePathResolver-ndE8XTpw.js.map → BasePathResolver-DRT09oVv.js.map} +1 -1
  3. package/dist/{ClientManager-DLleL_2e.js → ClientManager-DngaZdw6.js} +20 -20
  4. package/dist/{ClientManager-DLleL_2e.js.map → ClientManager-DngaZdw6.js.map} +1 -1
  5. package/dist/{Item-zBFWQDU9.js → Item-ZUAmf943.js} +118 -72
  6. package/dist/{Item-zBFWQDU9.js.map → Item-ZUAmf943.js.map} +1 -1
  7. package/dist/{ModelProperty-lth9L37R.js → ModelProperty-6llK4MTH.js} +64 -35
  8. package/dist/ModelProperty-6llK4MTH.js.map +1 -0
  9. package/dist/{Schema-DOhlrQ-N.js → Schema-D-Ud-XYw.js} +106 -57
  10. package/dist/Schema-D-Ud-XYw.js.map +1 -0
  11. package/dist/{SchemaValidationService-DDKr5piy.js → SchemaValidationService-IoS7JquP.js} +7 -7
  12. package/dist/{SchemaValidationService-DDKr5piy.js.map → SchemaValidationService-IoS7JquP.js.map} +1 -1
  13. package/dist/{backfillMetadataPropertyIds-fG3ujaSh.js → backfillMetadataPropertyIds-BlVeE7w7.js} +4 -4
  14. package/dist/{backfillMetadataPropertyIds-fG3ujaSh.js.map → backfillMetadataPropertyIds-BlVeE7w7.js.map} +1 -1
  15. package/dist/cjs/{ModelProperty-BEsIHAjk.js → ModelProperty-Dv7AQfmQ.js} +59 -30
  16. package/dist/cjs/ModelProperty-Dv7AQfmQ.js.map +1 -0
  17. package/dist/cjs/{Schema-qEp5mH1N.js → Schema-BHVp1g-M.js} +93 -44
  18. package/dist/cjs/Schema-BHVp1g-M.js.map +1 -0
  19. package/dist/cjs/{SchemaValidationService-CWEnZmOH.js → SchemaValidationService-BSU9knjf.js} +2 -2
  20. package/dist/cjs/{SchemaValidationService-CWEnZmOH.js.map → SchemaValidationService-BSU9knjf.js.map} +1 -1
  21. package/dist/cjs/{backfillMetadataPropertyIds-tw8JGMT0.js → backfillMetadataPropertyIds-WIovQ_d8.js} +3 -3
  22. package/dist/cjs/{backfillMetadataPropertyIds-tw8JGMT0.js.map → backfillMetadataPropertyIds-WIovQ_d8.js.map} +1 -1
  23. package/dist/cjs/{eas-CLiV2Hmn.js → eas-CUYXdr2t.js} +3 -3
  24. package/dist/cjs/{eas-CLiV2Hmn.js.map → eas-CUYXdr2t.js.map} +1 -1
  25. package/dist/cjs/{getItem-DSRtx_68.js → getItem-z1tHu0hu.js} +2 -2
  26. package/dist/cjs/{getItem-DSRtx_68.js.map → getItem-z1tHu0hu.js.map} +1 -1
  27. package/dist/cjs/{getLatestVersionRow-DVizNNoI.js → getLatestVersionRow-CcaabxIW.js} +2 -2
  28. package/dist/cjs/{getLatestVersionRow-DVizNNoI.js.map → getLatestVersionRow-CcaabxIW.js.map} +1 -1
  29. package/dist/cjs/{getPublishPayload-D5-dYtNq.js → getPublishPayload-CEP_e-Kv.js} +160 -204
  30. package/dist/cjs/getPublishPayload-CEP_e-Kv.js.map +1 -0
  31. package/dist/cjs/{getPublishUploads-B5Lq6q-_.js → getPublishUploads-Ctn5k1k6.js} +49 -10
  32. package/dist/cjs/getPublishUploads-Ctn5k1k6.js.map +1 -0
  33. package/dist/cjs/{index-C66AfYDG.js → index-Cvvt0-5B.js} +244 -87
  34. package/dist/cjs/index-Cvvt0-5B.js.map +1 -0
  35. package/dist/cjs/{index-B3UDbm1C.js → index-DfGhF1dc.js} +3 -3
  36. package/dist/cjs/index-DfGhF1dc.js.map +1 -0
  37. package/dist/cjs/{property-BVJIP7SX.js → property-DbEPQ1m9.js} +5 -5
  38. package/dist/cjs/{property-BVJIP7SX.js.map → property-DbEPQ1m9.js.map} +1 -1
  39. package/dist/cjs/publishDraftGraph-C38gf302.js +403 -0
  40. package/dist/cjs/publishDraftGraph-C38gf302.js.map +1 -0
  41. package/dist/cjs/{resetAmbiguousLegacyItemData-BaZqUui9.js → resetAmbiguousLegacyItemData-CfMhRHwK.js} +2 -2
  42. package/dist/cjs/{resetAmbiguousLegacyItemData-BaZqUui9.js.map → resetAmbiguousLegacyItemData-CfMhRHwK.js.map} +1 -1
  43. package/dist/cjs/{resolveModelForSyncedSeed-CC6dQctx.js → resolveModelForSyncedSeed-CNYaLOir.js} +2 -2
  44. package/dist/cjs/{resolveModelForSyncedSeed-CC6dQctx.js.map → resolveModelForSyncedSeed-CNYaLOir.js.map} +1 -1
  45. package/dist/cjs/{syncDbWithEas-Dk96sAG-.js → syncDbWithEas-d1iOdTTI.js} +20 -7
  46. package/dist/cjs/{syncDbWithEas-Dk96sAG-.js.map → syncDbWithEas-d1iOdTTI.js.map} +1 -1
  47. package/dist/{configurePlatform-BMoPG9vY.js → configurePlatform-CZpjyuCo.js} +4 -4
  48. package/dist/{configurePlatform-BMoPG9vY.js.map → configurePlatform-CZpjyuCo.js.map} +1 -1
  49. package/dist/{db-BJZN0a0a.js → db-Lw0KVZmc.js} +11 -11
  50. package/dist/{db-BJZN0a0a.js.map → db-Lw0KVZmc.js.map} +1 -1
  51. package/dist/{eas-B0hsMLqt.js → eas-CQ-Smzk2.js} +6 -6
  52. package/dist/{eas-B0hsMLqt.js.map → eas-CQ-Smzk2.js.map} +1 -1
  53. package/dist/{getItem-DEh4WfHG.js → getItem-CSfSok9f.js} +5 -5
  54. package/dist/{getItem-DEh4WfHG.js.map → getItem-CSfSok9f.js.map} +1 -1
  55. package/dist/{getLatestVersionRow-Brrl1AnW.js → getLatestVersionRow-72Atl9vB.js} +5 -5
  56. package/dist/{getLatestVersionRow-Brrl1AnW.js.map → getLatestVersionRow-72Atl9vB.js.map} +1 -1
  57. package/dist/{getPublishPayload-H032DHC7.js → getPublishPayload-76_KfB5Y.js} +155 -200
  58. package/dist/getPublishPayload-76_KfB5Y.js.map +1 -0
  59. package/dist/{getPublishUploads-CR66RlGJ.js → getPublishUploads-CqgMBD8f.js} +52 -13
  60. package/dist/getPublishUploads-CqgMBD8f.js.map +1 -0
  61. package/dist/{index-B0LgJblD.js → index-5b3JsS55.js} +2 -2
  62. package/dist/index-5b3JsS55.js.map +1 -0
  63. package/dist/{index-6bJuv5Tt.js → index-BpgD305l.js} +9 -9
  64. package/dist/{index-6bJuv5Tt.js.map → index-BpgD305l.js.map} +1 -1
  65. package/dist/{index-DtfjeuxC.js → index-Y-yYyRBf.js} +166 -75
  66. package/dist/index-Y-yYyRBf.js.map +1 -0
  67. package/dist/{index.browser-CNrqhvEA.js → index.browser-DaTzn79x.js} +9 -9
  68. package/dist/{index.browser-CNrqhvEA.js.map → index.browser-DaTzn79x.js.map} +1 -1
  69. package/dist/{index.node-DrHiTuOr.js → index.node-NYKqFOoe.js} +5 -5
  70. package/dist/{index.node-DrHiTuOr.js.map → index.node-NYKqFOoe.js.map} +1 -1
  71. package/dist/main.cjs +1 -1
  72. package/dist/main.js +257 -181
  73. package/dist/main.js.map +1 -1
  74. package/dist/node.js +12 -12
  75. package/dist/platform.browser.js +5 -5
  76. package/dist/platform.node.js +3 -3
  77. package/dist/{property-D2Nnsmm1.js → property-ByaiSyUK.js} +10 -10
  78. package/dist/{property-D2Nnsmm1.js.map → property-ByaiSyUK.js.map} +1 -1
  79. package/dist/publishDraftGraph-BRm6Pq3Q.js +405 -0
  80. package/dist/publishDraftGraph-BRm6Pq3Q.js.map +1 -0
  81. package/dist/{resetAmbiguousLegacyItemData-BqbHNUYk.js → resetAmbiguousLegacyItemData-B4dX6ZA1.js} +2 -2
  82. package/dist/{resetAmbiguousLegacyItemData-BqbHNUYk.js.map → resetAmbiguousLegacyItemData-B4dX6ZA1.js.map} +1 -1
  83. package/dist/{resolveModelForSyncedSeed-DQK6JfXS.js → resolveModelForSyncedSeed-B0tco3zG.js} +2 -2
  84. package/dist/{resolveModelForSyncedSeed-DQK6JfXS.js.map → resolveModelForSyncedSeed-B0tco3zG.js.map} +1 -1
  85. package/dist/src/Item/Item.d.ts +11 -0
  86. package/dist/src/Item/Item.d.ts.map +1 -1
  87. package/dist/src/ItemProperty/ItemProperty.d.ts +10 -0
  88. package/dist/src/ItemProperty/ItemProperty.d.ts.map +1 -1
  89. package/dist/src/Model/Model.d.ts +15 -2
  90. package/dist/src/Model/Model.d.ts.map +1 -1
  91. package/dist/src/Model/service/actors/createModelProperties.d.ts.map +1 -1
  92. package/dist/src/Model/service/actors/loadOrCreateModel.d.ts.map +1 -1
  93. package/dist/src/Model/service/actors/validateModel.d.ts.map +1 -1
  94. package/dist/src/Model/service/modelMachine.d.ts.map +1 -1
  95. package/dist/src/ModelProperty/ModelProperty.d.ts +9 -1
  96. package/dist/src/ModelProperty/ModelProperty.d.ts.map +1 -1
  97. package/dist/src/ModelProperty/service/actors/compareAndMarkDraft.d.ts.map +1 -1
  98. package/dist/src/ModelProperty/service/actors/saveToSchema.d.ts.map +1 -1
  99. package/dist/src/ModelProperty/service/actors/validateProperty.d.ts.map +1 -1
  100. package/dist/src/Schema/Schema.d.ts +7 -0
  101. package/dist/src/Schema/Schema.d.ts.map +1 -1
  102. package/dist/src/Schema/service/actors/checkExistingSchema.d.ts.map +1 -1
  103. package/dist/src/Schema/service/actors/createModelInstances.d.ts.map +1 -1
  104. package/dist/src/Schema/service/actors/loadOrCreateSchema.d.ts.map +1 -1
  105. package/dist/src/db/read/getPublishPayload.d.ts +9 -0
  106. package/dist/src/db/read/getPublishPayload.d.ts.map +1 -1
  107. package/dist/src/db/read/getPublishUploads.d.ts +5 -0
  108. package/dist/src/db/read/getPublishUploads.d.ts.map +1 -1
  109. package/dist/src/db/read/publishDraftGraph.d.ts +57 -0
  110. package/dist/src/db/read/publishDraftGraph.d.ts.map +1 -0
  111. package/dist/src/db/read/summarizePublishWork.d.ts.map +1 -1
  112. package/dist/src/helpers/entity/entityLiveQuery.d.ts.map +1 -1
  113. package/dist/src/helpers/entity/evictionEpoch.d.ts +18 -0
  114. package/dist/src/helpers/entity/evictionEpoch.d.ts.map +1 -0
  115. package/dist/src/helpers/htmlEmbeddedDataUriPublish.d.ts +28 -6
  116. package/dist/src/helpers/htmlEmbeddedDataUriPublish.d.ts.map +1 -1
  117. package/dist/src/index.d.ts +2 -1
  118. package/dist/src/index.d.ts.map +1 -1
  119. package/dist/src/services/write/actors/validateEntity.d.ts.map +1 -1
  120. package/dist/src/types/item.d.ts +7 -8
  121. package/dist/src/types/item.d.ts.map +1 -1
  122. package/dist/{syncDbWithEas-LRKr_NZF.js → syncDbWithEas-BPap9Sru.js} +14 -14
  123. package/dist/{syncDbWithEas-LRKr_NZF.js.map → syncDbWithEas-BPap9Sru.js.map} +1 -1
  124. package/dist/{tabEvents-DYI2GU7i.js → tabEvents-C6NXS6Jl.js} +6 -6
  125. package/dist/{tabEvents-DYI2GU7i.js.map → tabEvents-C6NXS6Jl.js.map} +1 -1
  126. package/dist/{tolerantWebAccess-CzOBz5M6.js → tolerantWebAccess-NBQ1NB4i.js} +6 -6
  127. package/dist/{tolerantWebAccess-CzOBz5M6.js.map → tolerantWebAccess-NBQ1NB4i.js.map} +1 -1
  128. package/dist/{updateSeedRevokedAt-B58ORbY3.js → updateSeedRevokedAt-CYwgVNlM.js} +3 -3
  129. package/dist/{updateSeedRevokedAt-B58ORbY3.js.map → updateSeedRevokedAt-CYwgVNlM.js.map} +1 -1
  130. package/package.json +8 -10
  131. package/dist/ModelProperty-lth9L37R.js.map +0 -1
  132. package/dist/Schema-DOhlrQ-N.js.map +0 -1
  133. package/dist/cjs/ModelProperty-BEsIHAjk.js.map +0 -1
  134. package/dist/cjs/Schema-qEp5mH1N.js.map +0 -1
  135. package/dist/cjs/getPublishPayload-D5-dYtNq.js.map +0 -1
  136. package/dist/cjs/getPublishUploads-B5Lq6q-_.js.map +0 -1
  137. package/dist/cjs/getSegmentedItemProperties-giHO7R3d.js +0 -147
  138. package/dist/cjs/getSegmentedItemProperties-giHO7R3d.js.map +0 -1
  139. package/dist/cjs/index-B3UDbm1C.js.map +0 -1
  140. package/dist/cjs/index-C66AfYDG.js.map +0 -1
  141. package/dist/getPublishPayload-H032DHC7.js.map +0 -1
  142. package/dist/getPublishUploads-CR66RlGJ.js.map +0 -1
  143. package/dist/getSegmentedItemProperties-C2EJ2G0N.js +0 -147
  144. package/dist/getSegmentedItemProperties-C2EJ2G0N.js.map +0 -1
  145. package/dist/index-B0LgJblD.js.map +0 -1
  146. package/dist/index-DtfjeuxC.js.map +0 -1
  147. package/dist/src/browser/helpers/index.d.ts +0 -4
  148. package/dist/src/browser/helpers/index.d.ts.map +0 -1
@@ -1,22 +1,22 @@
1
1
  'use strict';
2
2
 
3
- var main_cjs = require('./index-C66AfYDG.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 drizzleOrm = require('drizzle-orm');
8
- var getSegmentedItemProperties = require('./getSegmentedItemProperties-giHO7R3d.js');
9
- var property = require('./property-BVJIP7SX.js');
7
+ var publishDraftGraph = require('./publishDraftGraph-C38gf302.js');
8
+ var property = require('./property-DbEPQ1m9.js');
10
9
  var lodashEs = require('lodash-es');
10
+ var drizzleOrm = require('drizzle-orm');
11
11
  var debug = require('debug');
12
12
  require('@noble/hashes/sha3');
13
13
  require('@noble/hashes/utils');
14
14
  require('reflect-metadata');
15
- require('pluralize');
16
15
  require('immer');
17
16
  require('xstate');
18
17
  require('drizzle-orm/sqlite-core');
19
18
  require('@seedprotocol/arweave');
19
+ require('pluralize');
20
20
  require('@sinclair/typebox');
21
21
  require('nanoid');
22
22
  require('nanoid-dictionary');
@@ -35,25 +35,6 @@ require('child_process');
35
35
  require('@seedprotocol/arweave/node');
36
36
  require('@seedprotocol/eas/node');
37
37
 
38
- /**
39
- * True when the item's seed attestation was revoked (`seeds.revoked_at` set, by unpublish or EAS
40
- * sync). Such a seed can't take new versions: publishing again creates a new seed attestation
41
- * (see "Republishing" in docs/ATTESTATION_REVOCATION.md).
42
- */
43
- const isSeedRevoked = async (seedLocalId) => {
44
- if (!seedLocalId)
45
- return false;
46
- const appDb = main_cjs.BaseDb.getAppDb();
47
- if (!appDb)
48
- return false;
49
- const [row] = await appDb
50
- .select({ revokedAt: main_cjs.seeds.revokedAt })
51
- .from(main_cjs.seeds)
52
- .where(drizzleOrm.eq(main_cjs.seeds.localId, seedLocalId))
53
- .limit(1);
54
- return main_cjs.isVersionRevoked(row?.revokedAt);
55
- };
56
-
57
38
  /** UTF-8 string to 0x-prefixed bytes32 hex (right-padded with zeros). */
58
39
  function encodeBytes32String(value) {
59
40
  const bytes = new TextEncoder().encode(value);
@@ -106,91 +87,24 @@ class RelatedItemUnpublishedError extends PublishValidationFailedError {
106
87
  }
107
88
  }
108
89
 
109
- const selectSeed = {
110
- seedLocalId: main_cjs.seeds.localId,
111
- seedUid: main_cjs.seeds.uid,
112
- revokedAt: main_cjs.seeds.revokedAt,
113
- type: main_cjs.seeds.type,
114
- };
115
- /**
116
- * The local seed row a relation/list/image ref points at, by local id or uid. A uid that is no
117
- * seed's current uid can be the old uid of a seed that was unpublished and published again (a new
118
- * seed attestation, same local seed): its old version rows still record it, so it resolves to that
119
- * seed. Null when nothing local matches (e.g. a published uid with no local copy).
120
- */
121
- const findRelatedSeedRow = async ({ seedLocalId, seedUid, }) => {
122
- const appDb = main_cjs.BaseDb.getAppDb();
123
- if (!appDb)
124
- return null;
125
- if (seedLocalId) {
126
- const [row] = await appDb.select(selectSeed).from(main_cjs.seeds).where(drizzleOrm.eq(main_cjs.seeds.localId, seedLocalId)).limit(1);
127
- if (row?.seedLocalId)
128
- return row;
129
- }
130
- if (!seedUid || seedUid === main_cjs.ZERO_BYTES32)
131
- return null;
132
- const [byUid] = await appDb.select(selectSeed).from(main_cjs.seeds).where(drizzleOrm.eq(main_cjs.seeds.uid, seedUid)).limit(1);
133
- if (byUid?.seedLocalId)
134
- return byUid;
135
- const [version] = await appDb
136
- .select({ seedLocalId: main_cjs.versions.seedLocalId })
137
- .from(main_cjs.versions)
138
- .where(drizzleOrm.and(drizzleOrm.eq(main_cjs.versions.seedUid, seedUid), drizzleOrm.isNotNull(main_cjs.versions.seedLocalId)))
139
- .limit(1);
140
- if (!version?.seedLocalId)
141
- return null;
142
- const [republished] = await appDb
143
- .select(selectSeed)
144
- .from(main_cjs.seeds)
145
- .where(drizzleOrm.eq(main_cjs.seeds.localId, version.seedLocalId))
146
- .limit(1);
147
- return republished?.seedLocalId ? republished : null;
148
- };
149
- /** The seed is attested and its attestation is live. */
150
- const isLivePublishedSeed = (row) => !!row?.seedUid && row.seedUid !== main_cjs.ZERO_BYTES32 && !main_cjs.isVersionRevoked(row.revokedAt);
151
- /** The seed was attested and that attestation was revoked (unpublished). */
152
- const isUnpublishedSeed = (row) => !!row?.seedUid && row.seedUid !== main_cjs.ZERO_BYTES32 && main_cjs.isVersionRevoked(row.revokedAt);
153
- /** Model a relation/list/image property points at, from its definition. */
154
- function relatedModelNameFromDef(propertyDef) {
155
- const def = propertyDef;
156
- if (!def)
157
- return undefined;
158
- const dataType = main_cjs.normalizeDataType(def.dataType);
159
- if (dataType === main_cjs.ModelPropertyDataTypes.Image)
160
- return 'Image';
161
- if (dataType === main_cjs.ModelPropertyDataTypes.File)
162
- return 'File';
163
- if (dataType === main_cjs.ModelPropertyDataTypes.Html)
164
- return 'Html';
165
- return def.ref ?? def.refModelName;
166
- }
167
- /**
168
- * Name of the item's Html property whose value is the Html seed `htmlSeedLocalId`: the property
169
- * that refers to the images embedded in that Html (htmlEmbeddedImageCoPublish rows).
170
- */
171
- function htmlPropertyNameForHtmlSeed(item, htmlSeedLocalId) {
172
- const want = htmlSeedLocalId.trim();
173
- for (const p of item.properties ?? []) {
174
- if (main_cjs.normalizeDataType(p.propertyDef?.dataType) !== main_cjs.ModelPropertyDataTypes.Html)
175
- continue;
176
- const snap = p.getService().getSnapshot();
177
- const value = 'context' in snap ? snap.context.propertyValue : undefined;
178
- if (typeof value === 'string' && value.trim() === want)
179
- return p.propertyName;
180
- }
181
- return 'html';
182
- }
183
-
184
90
  debug('seedSdk:db:getPublishPayload');
185
91
  /** Case-insensitive dataType match (schema JSON may use "text" vs "Text"). */
186
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
+ }
187
101
  /**
188
102
  * Checks the seed a relation/list/image ref points at. A revoked (unpublished) seed is recorded in
189
103
  * `ctx.unpublishedRelatedItems`; a live published one maps the ref to its current uid. Returns
190
104
  * true when the caller must not walk into the related item (it is published, live or revoked).
191
105
  */
192
106
  function noteRelatedSeed(ctx, ref, row, propertyName, modelName) {
193
- if (isUnpublishedSeed(row)) {
107
+ if (publishDraftGraph.isUnpublishedSeed(row)) {
194
108
  ctx.unpublishedRelatedItems ?? (ctx.unpublishedRelatedItems = []);
195
109
  if (!ctx.unpublishedRelatedItems.some((r) => r.propertyName === propertyName && r.seedLocalId === row.seedLocalId)) {
196
110
  ctx.unpublishedRelatedItems.push({
@@ -202,7 +116,7 @@ function noteRelatedSeed(ctx, ref, row, propertyName, modelName) {
202
116
  }
203
117
  return true;
204
118
  }
205
- if (isLivePublishedSeed(row)) {
119
+ if (publishDraftGraph.isLivePublishedSeed(row)) {
206
120
  if (ref !== row.seedUid) {
207
121
  ctx.relatedRefUids ?? (ctx.relatedRefUids = new Map());
208
122
  ctx.relatedRefUids.set(ref, row.seedUid);
@@ -296,7 +210,7 @@ async function resolveVersionUid(seedLocalId, seedUid) {
296
210
  if (published?.uid)
297
211
  return published.uid;
298
212
  try {
299
- const { getItemVersionsFromEas } = await Promise.resolve().then(function () { return require('./eas-CLiV2Hmn.js'); });
213
+ const { getItemVersionsFromEas } = await Promise.resolve().then(function () { return require('./eas-CUYXdr2t.js'); });
300
214
  const attestations = await getItemVersionsFromEas({ seedUids: [seedUid] });
301
215
  const latest = attestations?.[0];
302
216
  if (latest?.id)
@@ -363,7 +277,7 @@ const ensurePropertyDefs = async (targetItem) => {
363
277
  schema = await property.getPropertySchema(targetItem.modelName, itemProperty.propertyName, targetScope);
364
278
  if (!schema) {
365
279
  try {
366
- const { Model } = await Promise.resolve().then(function () { return require('./index-C66AfYDG.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; });
367
281
  const normalizedModelName = lodashEs.upperFirst(lodashEs.camelCase(targetItem.modelName));
368
282
  let model = Model.resolve(normalizedModelName, targetScope);
369
283
  if (!model?.properties?.length && !targetScope.modelFileId) {
@@ -439,6 +353,9 @@ const processBasicProperties = async (itemBasicProperties, itemPublishData, ctx,
439
353
  if (main_cjs.INTERNAL_PROPERTY_NAMES.includes(basicProperty.propertyName)) {
440
354
  continue;
441
355
  }
356
+ if (ctx.deferredProperties?.has(basicProperty)) {
357
+ continue;
358
+ }
442
359
  const snapshot = basicProperty.getService().getSnapshot();
443
360
  const context = 'context' in snapshot ? snapshot.context : null;
444
361
  const propertyDef = basicProperty.propertyDef ?? (context ? context.propertyRecordSchema : undefined);
@@ -529,7 +446,7 @@ const processBasicProperties = async (itemBasicProperties, itemPublishData, ctx,
529
446
  }
530
447
  // Validate against property validation rules (enum, pattern, minLength, maxLength) before encoding
531
448
  if (propertyDef?.validation) {
532
- const { SchemaValidationService } = await Promise.resolve().then(function () { return require('./SchemaValidationService-CWEnZmOH.js'); });
449
+ const { SchemaValidationService } = await Promise.resolve().then(function () { return require('./SchemaValidationService-BSU9knjf.js'); });
533
450
  const validationService = new SchemaValidationService();
534
451
  const validationResult = validationService.validatePropertyValue(value, main_cjs.normalizeDataType(propertyDef.dataType), propertyDef.validation, propertyDef.refValueType
535
452
  ? main_cjs.normalizeDataType(propertyDef.refValueType)
@@ -669,7 +586,7 @@ const processRelationOrImageProperty = async (relationOrImageProperty, multiPubl
669
586
  matchesDataType(relationOrImageProperty.propertyDef?.refValueType, main_cjs.ModelPropertyDataTypes.Html) ||
670
587
  matchesDataType(relationOrImageProperty.propertyDef?.refValueType, main_cjs.ModelPropertyDataTypes.Json)));
671
588
  if (isStorageSeed && (context.seedLocalId || context.seedUid)) {
672
- const { getPropertyData: getPropertyDataFromDb } = await Promise.resolve().then(function () { return require('./index-C66AfYDG.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; });
673
590
  const metaRow = await getPropertyDataFromDb({
674
591
  propertyName: relationOrImageProperty.propertyName,
675
592
  seedLocalId: context.seedLocalId,
@@ -753,12 +670,15 @@ const processRelationOrImageProperty = async (relationOrImageProperty, multiPubl
753
670
  return multiPublishPayload;
754
671
  }
755
672
  // The local seed, also when the ref is the old uid of a seed published again since.
756
- const relatedSeed = await findRelatedSeedRow({ seedLocalId, seedUid });
673
+ const relatedSeed = await publishDraftGraph.findRelatedSeedRow({ seedLocalId, seedUid });
674
+ if (!isStorageSeed && deferIfBackEdge(ctx, relationOrImageProperty, [relatedSeed?.seedLocalId ?? seedLocalId])) {
675
+ return multiPublishPayload;
676
+ }
757
677
  // Use dynamic import to break circular dependency
758
- const getItemMod = await Promise.resolve().then(function () { return require('./getItem-DSRtx_68.js'); });
678
+ const getItemMod = await Promise.resolve().then(function () { return require('./getItem-z1tHu0hu.js'); });
759
679
  const { getItem } = getItemMod;
760
680
  const relatedItem = await getItem(relatedSeed ? { seedLocalId: relatedSeed.seedLocalId } : { seedLocalId, seedUid });
761
- if (noteRelatedSeed(ctx, normalizedRef, relatedSeed, relationOrImageProperty.propertyName, relatedItem?.modelName ?? relatedModelNameFromDef(relationOrImageProperty.propertyDef))) {
681
+ if (noteRelatedSeed(ctx, normalizedRef, relatedSeed, relationOrImageProperty.propertyName, relatedItem?.modelName ?? publishDraftGraph.relatedModelNameFromDef(relationOrImageProperty.propertyDef))) {
762
682
  return multiPublishPayload;
763
683
  }
764
684
  // When related item not found (e.g. different DB, not yet created)
@@ -775,7 +695,6 @@ const processRelationOrImageProperty = async (relationOrImageProperty, multiPubl
775
695
  if (relatedItem.seedUid && relatedItem.seedUid !== main_cjs.ZERO_BYTES32) {
776
696
  return multiPublishPayload;
777
697
  }
778
- const versionUid = getVersionUid(relatedItem);
779
698
  let modelName;
780
699
  if (matchesDataType(relationOrImageProperty.propertyDef?.dataType, main_cjs.ModelPropertyDataTypes.Image)) {
781
700
  modelName = 'Image';
@@ -794,68 +713,106 @@ const processRelationOrImageProperty = async (relationOrImageProperty, multiPubl
794
713
  addValidationError(ctx, `Model name not found for relation or image property: ${relationOrImageProperty.propertyName}`, relationOrImageProperty.propertyName);
795
714
  return multiPublishPayload;
796
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;
797
739
  const seedSchemaUid = await main_cjs.getEasSchemaUidForModel(modelName);
798
740
  if (!seedSchemaUid) {
799
- addValidationError(ctx, `Schema UID not found for model: ${modelName}`, relationOrImageProperty.propertyName);
741
+ addValidationError(ctx, `Schema UID not found for model: ${modelName}`, reportPropertyName);
800
742
  return multiPublishPayload;
801
743
  }
802
- 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
+ }
803
748
  return multiPublishPayload;
804
749
  }
805
750
  let publishPayload = {
806
751
  localId: relatedItem.seedLocalId,
807
752
  seedIsRevocable: true,
808
753
  versionSchemaUid: main_cjs.VERSION_SCHEMA_UID,
809
- seedUid: seedUid || main_cjs.ZERO_BYTES32,
754
+ seedUid: main_cjs.ZERO_BYTES32,
810
755
  seedSchemaUid,
811
- versionUid,
756
+ versionUid: getVersionUid(relatedItem),
812
757
  listOfAttestations: [],
813
- propertiesToUpdate: [
814
- {
815
- publishLocalId: originalSeedLocalId,
816
- propertySchemaUid: relationOrImageSchemaUid,
817
- },
818
- ],
758
+ propertiesToUpdate: link ? [{ ...link }] : [],
819
759
  };
820
- await ensurePropertyDefs(relatedItem);
821
- const { itemBasicProperties, itemUploadProperties, itemImageProperties: relatedStorageSeedProperties } = await getSegmentedItemProperties.getSegmentedItemProperties(relatedItem);
822
- // A draft item related to the published one is published with it, including its own
823
- // Image/File/Html/Json properties and the images embedded in its Html (as for the item itself).
824
- if (!isStorageSeed) {
825
- multiPublishPayload = await processRelatedDraftStorageSeeds(relatedItem, relatedStorageSeedProperties, itemBasicProperties, multiPublishPayload, uploadedTransactions, ctx, buildOpts);
826
- }
827
- const relatedStorageUpload = resolveStorageTransactionUploadSlot(relatedItem, itemUploadProperties);
828
- if (relatedStorageUpload) {
829
- const transactionData = findUploadedTxForSeedLocalId(uploadedTransactions, relatedItem.seedLocalId);
830
- if (transactionData) {
831
- const itemProperty = relatedStorageUpload.itemProperty;
832
- // Publish encoding reads context.propertyValue; do not await ItemProperty.save() here — it
833
- // uses xstate waitFor(10s) for idle and can time out while the machine is busy or still loading.
834
- itemProperty.getService().send({
835
- type: 'updateContext',
836
- propertyValue: transactionData.txId,
837
- renderValue: transactionData.txId,
838
- });
839
- 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
+ }
840
779
  }
841
- }
842
- for (const p of itemBasicProperties) {
843
- if (isStorageTransactionPropertyName(p.propertyName) &&
844
- !p.propertyDef &&
845
- relatedItem.modelName) {
846
- const schema = await property.getPropertySchema(relatedItem.modelName, 'storageTransactionId', await main_cjs.getItemModelScope(relatedItem));
847
- if (schema) {
848
- 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);
793
+ }
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
+ }
849
803
  }
850
804
  }
805
+ dedupeOneStorageTransactionPropertyInList(itemBasicProperties);
806
+ publishPayload = await processBasicProperties(itemBasicProperties, publishPayload, ctx, {
807
+ forceFullSnapshot,
808
+ });
809
+ }
810
+ finally {
811
+ ctx.newSeedsInProgress.delete(relatedItem.seedLocalId);
851
812
  }
852
- dedupeOneStorageTransactionPropertyInList(itemBasicProperties);
853
- publishPayload = await processBasicProperties(itemBasicProperties, publishPayload, ctx, {
854
- forceFullSnapshot,
855
- });
856
813
  multiPublishPayload.push(publishPayload);
857
814
  return multiPublishPayload;
858
- };
815
+ }
859
816
  /**
860
817
  * Storage-seed properties (Image/File/Html/Json) of a draft item related to the published one, and
861
818
  * the images embedded in its Html (htmlEmbeddedImageCoPublish rows it owns): payloads for their seeds,
@@ -867,7 +824,7 @@ async function processRelatedDraftStorageSeeds(relatedItem, storageSeedPropertie
867
824
  multiPublishPayload = await processRelationOrImageProperty(storageSeedProperty, multiPublishPayload, uploadedTransactions, relatedItem.seedLocalId, ctx, buildOpts);
868
825
  itemBasicProperties.push(storageSeedProperty);
869
826
  }
870
- return processHtmlEmbeddedCoPublishImagePayloads(relatedItem, multiPublishPayload, uploadedTransactions, relatedItem.seedLocalId, ctx, buildOpts);
827
+ return processHtmlEmbeddedCoPublishImagePayloads(relatedItem, multiPublishPayload, uploadedTransactions, ctx, buildOpts);
871
828
  }
872
829
  async function resolveHtmlPropertySchemaUidByHtmlSeed(item, htmlSeedLocalId, ctx) {
873
830
  const want = htmlSeedLocalId.trim();
@@ -889,7 +846,7 @@ async function resolveHtmlPropertySchemaUidByHtmlSeed(item, htmlSeedLocalId, ctx
889
846
  addValidationError(ctx, `Could not find Html property for embedded image rewrite (html seed ${want}).`, 'html', 'html_embed_schema');
890
847
  return undefined;
891
848
  }
892
- async function processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPayload, uploadedTransactions, originalSeedLocalId, ctx, buildOpts) {
849
+ async function processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPayload, uploadedTransactions, ctx, buildOpts) {
893
850
  const appDb = main_cjs.BaseDb.getAppDb();
894
851
  if (!appDb)
895
852
  return multiPublishPayload;
@@ -900,7 +857,7 @@ async function processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPaylo
900
857
  if (rows.length === 0)
901
858
  return multiPublishPayload;
902
859
  const forceFullSnapshot = buildOpts?.forceFullSnapshot === true;
903
- const getItemMod = await Promise.resolve().then(function () { return require('./getItem-DSRtx_68.js'); });
860
+ const getItemMod = await Promise.resolve().then(function () { return require('./getItem-z1tHu0hu.js'); });
904
861
  const { getItem } = getItemMod;
905
862
  const doneImages = new Set();
906
863
  for (const row of rows) {
@@ -909,10 +866,11 @@ async function processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPaylo
909
866
  doneImages.add(row.imageSeedLocalId);
910
867
  // An embedded image that is already published is not co-published; one whose seed was revoked
911
868
  // (unpublished) blocks the publish like an image property pointing at it would.
912
- const imageSeed = await findRelatedSeedRow({ seedLocalId: row.imageSeedLocalId });
913
- if (noteRelatedSeed(ctx, row.imageSeedLocalId, imageSeed, htmlPropertyNameForHtmlSeed(item, row.htmlSeedLocalId), 'Image')) {
869
+ const imageSeed = await publishDraftGraph.findRelatedSeedRow({ seedLocalId: row.imageSeedLocalId });
870
+ if (noteRelatedSeed(ctx, row.imageSeedLocalId, imageSeed, publishDraftGraph.htmlPropertyNameForHtmlSeed(item, row.htmlSeedLocalId), 'Image')) {
914
871
  continue;
915
872
  }
873
+ // The row's Html seed must still be the value of one of the item's Html properties.
916
874
  const htmlSchemaUid = await resolveHtmlPropertySchemaUidByHtmlSeed(item, row.htmlSeedLocalId, ctx);
917
875
  if (!htmlSchemaUid)
918
876
  continue;
@@ -929,10 +887,16 @@ async function processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPaylo
929
887
  addValidationError(ctx, `Schema UID not found for model: Image`, 'html');
930
888
  continue;
931
889
  }
932
- 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)) {
933
892
  continue;
934
893
  }
935
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.
936
900
  let publishPayload = {
937
901
  localId: relatedItem.seedLocalId,
938
902
  seedIsRevocable: true,
@@ -941,15 +905,10 @@ async function processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPaylo
941
905
  seedSchemaUid,
942
906
  versionUid,
943
907
  listOfAttestations: [],
944
- propertiesToUpdate: [
945
- {
946
- publishLocalId: originalSeedLocalId,
947
- propertySchemaUid: htmlSchemaUid,
948
- },
949
- ],
908
+ propertiesToUpdate: [],
950
909
  };
951
910
  await ensurePropertyDefs(relatedItem);
952
- const { itemBasicProperties, itemUploadProperties } = await getSegmentedItemProperties.getSegmentedItemProperties(relatedItem);
911
+ const { itemBasicProperties, itemUploadProperties } = await publishDraftGraph.getSegmentedItemProperties(relatedItem);
953
912
  const relatedStorageUpload = resolveStorageTransactionUploadSlot(relatedItem, itemUploadProperties);
954
913
  if (relatedStorageUpload) {
955
914
  const transactionData = findUploadedTxForSeedLocalId(uploadedTransactions, relatedItem.seedLocalId);
@@ -981,7 +940,7 @@ async function processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPaylo
981
940
  }
982
941
  return multiPublishPayload;
983
942
  }
984
- const processListProperty = async (listProperty, multiPublishPayload, originalSeedLocalId, ctx, buildOpts) => {
943
+ const processListProperty = async (listProperty, multiPublishPayload, uploadedTransactions, originalSeedLocalId, ctx, buildOpts) => {
985
944
  const forceFullSnapshot = buildOpts?.forceFullSnapshot === true;
986
945
  // processListProperty only handles list-of-relations; list-of-primitives go to itemBasicProperties
987
946
  if (!listProperty.propertyDef?.ref) {
@@ -1014,6 +973,7 @@ const processListProperty = async (listProperty, multiPublishPayload, originalSe
1014
973
  : value != null
1015
974
  ? [value]
1016
975
  : [];
976
+ const members = [];
1017
977
  for (const seedId of iterableValue) {
1018
978
  const idStr = typeof seedId === 'string'
1019
979
  ? seedId
@@ -1025,12 +985,23 @@ const processListProperty = async (listProperty, multiPublishPayload, originalSe
1025
985
  const { localId: seedLocalId, uid: seedUid } = main_cjs.getCorrectId(idStr);
1026
986
  if (!seedLocalId && !seedUid)
1027
987
  continue;
1028
- const relatedSeed = await findRelatedSeedRow({ seedLocalId, seedUid });
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;
1029
1000
  // Use dynamic import to break circular dependency
1030
- const getItemMod = await Promise.resolve().then(function () { return require('./getItem-DSRtx_68.js'); });
1001
+ const getItemMod = await Promise.resolve().then(function () { return require('./getItem-z1tHu0hu.js'); });
1031
1002
  const { getItem } = getItemMod;
1032
1003
  const relatedItem = await getItem(relatedSeed ? { seedLocalId: relatedSeed.seedLocalId } : { seedLocalId, seedUid });
1033
- if (noteRelatedSeed(ctx, idStr.trim(), relatedSeed, listProperty.propertyName, relatedItem?.modelName ?? relatedModelNameFromDef(listProperty.propertyDef))) {
1004
+ if (noteRelatedSeed(ctx, idStr.trim(), relatedSeed, listProperty.propertyName, relatedItem?.modelName ?? publishDraftGraph.relatedModelNameFromDef(listProperty.propertyDef))) {
1034
1005
  continue;
1035
1006
  }
1036
1007
  if (!relatedItem) {
@@ -1043,7 +1014,6 @@ const processListProperty = async (listProperty, multiPublishPayload, originalSe
1043
1014
  if (relatedItem.seedUid && relatedItem.seedUid !== main_cjs.ZERO_BYTES32) {
1044
1015
  continue;
1045
1016
  }
1046
- const versionUid = getVersionUid(relatedItem);
1047
1017
  let modelName;
1048
1018
  if (listProperty.propertyDef?.ref || listProperty.propertyDef.refModelName) {
1049
1019
  const def = listProperty.propertyDef;
@@ -1062,36 +1032,17 @@ const processListProperty = async (listProperty, multiPublishPayload, originalSe
1062
1032
  addValidationError(ctx, `Model name not found for list property: ${listProperty.propertyName}`, listProperty.propertyName);
1063
1033
  continue;
1064
1034
  }
1065
- const seedSchemaUid = await main_cjs.getEasSchemaUidForModel(modelName);
1066
- if (!seedSchemaUid) {
1067
- addValidationError(ctx, `Schema UID not found for model: ${modelName}`, listProperty.propertyName);
1068
- continue;
1069
- }
1070
- if (mergeChildPublishPayloadIfDuplicateInBatch(multiPublishPayload, relatedItem.seedLocalId, originalSeedLocalId, listPropertySchemaUid)) {
1071
- continue;
1072
- }
1073
- let publishPayload = {
1074
- localId: relatedItem.seedLocalId,
1075
- seedIsRevocable: true,
1076
- versionSchemaUid: main_cjs.VERSION_SCHEMA_UID,
1077
- seedUid: seedUid || main_cjs.ZERO_BYTES32,
1078
- seedSchemaUid,
1079
- versionUid,
1080
- listOfAttestations: [],
1081
- propertiesToUpdate: [
1082
- {
1083
- publishLocalId: originalSeedLocalId,
1084
- propertySchemaUid: listPropertySchemaUid,
1085
- },
1086
- ],
1087
- };
1088
- await ensurePropertyDefs(relatedItem);
1089
- const { itemBasicProperties } = await getSegmentedItemProperties.getSegmentedItemProperties(relatedItem);
1090
- dedupeOneStorageTransactionPropertyInList(itemBasicProperties);
1091
- publishPayload = await processBasicProperties(itemBasicProperties, publishPayload, ctx, {
1092
- 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,
1093
1045
  });
1094
- multiPublishPayload.push(publishPayload);
1095
1046
  }
1096
1047
  return multiPublishPayload;
1097
1048
  };
@@ -1228,13 +1179,18 @@ const getPublishPayload = async (item, uploadedTransactions, options) => {
1228
1179
  // A revoked seed can't be published under again: republishing creates a new seed attestation
1229
1180
  // (new seedUid) and a new version carrying every property (see docs/ATTESTATION_REVOCATION.md).
1230
1181
  const hasSeedUid = !!item.seedUid && item.seedUid !== main_cjs.ZERO_BYTES32;
1231
- const republishRevokedSeed = hasSeedUid && (await isSeedRevoked(item.seedLocalId));
1182
+ const republishRevokedSeed = hasSeedUid && (await publishDraftGraph.isSeedRevoked(item.seedLocalId));
1232
1183
  const rootSeedUid = republishRevokedSeed ? main_cjs.ZERO_BYTES32 : item.seedUid || main_cjs.ZERO_BYTES32;
1233
1184
  const forceFullSnapshot = publishMode === 'new_version' || republishRevokedSeed;
1234
1185
  if (publishMode === 'new_version' && (!item.seedUid || item.seedUid === main_cjs.ZERO_BYTES32)) {
1235
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');
1236
1187
  }
1237
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
+ }
1238
1194
  // Each PublishPayload is generated from a Seed that needs publishing
1239
1195
  // First we need to determine all Seeds to publish
1240
1196
  // That means the Seed of the Item, plus any Seeds pointed to by Relations
@@ -1268,7 +1224,7 @@ const getPublishPayload = async (item, uploadedTransactions, options) => {
1268
1224
  propertiesToUpdate: [],
1269
1225
  };
1270
1226
  await ensurePropertyDefs(item);
1271
- const { itemBasicProperties, itemListProperties, itemUploadProperties, itemImageProperties, itemRelationProperties, } = await getSegmentedItemProperties.getSegmentedItemProperties(item);
1227
+ const { itemBasicProperties, itemListProperties, itemUploadProperties, itemImageProperties, itemRelationProperties, } = await publishDraftGraph.getSegmentedItemProperties(item);
1272
1228
  const relationAndImageProperties = [...itemRelationProperties, ...itemImageProperties];
1273
1229
  // Validate required relations have values before processing
1274
1230
  for (const relProp of itemRelationProperties) {
@@ -1317,9 +1273,9 @@ const getPublishPayload = async (item, uploadedTransactions, options) => {
1317
1273
  multiPublishPayload = await processRelationOrImageProperty(relationProperty, multiPublishPayload, uploadedTransactions, item.seedLocalId, validationCtx, { forceFullSnapshot });
1318
1274
  itemBasicProperties.push(relationProperty);
1319
1275
  }
1320
- multiPublishPayload = await processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPayload, uploadedTransactions, item.seedLocalId, validationCtx, { forceFullSnapshot });
1276
+ multiPublishPayload = await processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPayload, uploadedTransactions, validationCtx, { forceFullSnapshot });
1321
1277
  for (const listProperty of itemListProperties) {
1322
- multiPublishPayload = await processListProperty(listProperty, multiPublishPayload, item.seedLocalId, validationCtx, { forceFullSnapshot });
1278
+ multiPublishPayload = await processListProperty(listProperty, multiPublishPayload, uploadedTransactions, item.seedLocalId, validationCtx, { forceFullSnapshot });
1323
1279
  itemBasicProperties.push(listProperty);
1324
1280
  }
1325
1281
  for (const p of itemBasicProperties) {
@@ -1638,4 +1594,4 @@ exports.PublishValidationFailedError = PublishValidationFailedError;
1638
1594
  exports.getPublishPayload = getPublishPayload;
1639
1595
  exports.resolvePublishPayloadValues = resolvePublishPayloadValues;
1640
1596
  exports.validateItemForPublish = validateItemForPublish;
1641
- //# sourceMappingURL=getPublishPayload-D5-dYtNq.js.map
1597
+ //# sourceMappingURL=getPublishPayload-CEP_e-Kv.js.map