@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.
- package/dist/{BasePathResolver-ndE8XTpw.js → BasePathResolver-DRT09oVv.js} +2 -2
- package/dist/{BasePathResolver-ndE8XTpw.js.map → BasePathResolver-DRT09oVv.js.map} +1 -1
- package/dist/{ClientManager-DLleL_2e.js → ClientManager-DngaZdw6.js} +20 -20
- package/dist/{ClientManager-DLleL_2e.js.map → ClientManager-DngaZdw6.js.map} +1 -1
- package/dist/{Item-zBFWQDU9.js → Item-ZUAmf943.js} +118 -72
- package/dist/{Item-zBFWQDU9.js.map → Item-ZUAmf943.js.map} +1 -1
- package/dist/{ModelProperty-lth9L37R.js → ModelProperty-6llK4MTH.js} +64 -35
- package/dist/ModelProperty-6llK4MTH.js.map +1 -0
- package/dist/{Schema-DOhlrQ-N.js → Schema-D-Ud-XYw.js} +106 -57
- package/dist/Schema-D-Ud-XYw.js.map +1 -0
- package/dist/{SchemaValidationService-DDKr5piy.js → SchemaValidationService-IoS7JquP.js} +7 -7
- package/dist/{SchemaValidationService-DDKr5piy.js.map → SchemaValidationService-IoS7JquP.js.map} +1 -1
- package/dist/{backfillMetadataPropertyIds-fG3ujaSh.js → backfillMetadataPropertyIds-BlVeE7w7.js} +4 -4
- package/dist/{backfillMetadataPropertyIds-fG3ujaSh.js.map → backfillMetadataPropertyIds-BlVeE7w7.js.map} +1 -1
- package/dist/cjs/{ModelProperty-BEsIHAjk.js → ModelProperty-Dv7AQfmQ.js} +59 -30
- package/dist/cjs/ModelProperty-Dv7AQfmQ.js.map +1 -0
- package/dist/cjs/{Schema-qEp5mH1N.js → Schema-BHVp1g-M.js} +93 -44
- package/dist/cjs/Schema-BHVp1g-M.js.map +1 -0
- package/dist/cjs/{SchemaValidationService-CWEnZmOH.js → SchemaValidationService-BSU9knjf.js} +2 -2
- package/dist/cjs/{SchemaValidationService-CWEnZmOH.js.map → SchemaValidationService-BSU9knjf.js.map} +1 -1
- package/dist/cjs/{backfillMetadataPropertyIds-tw8JGMT0.js → backfillMetadataPropertyIds-WIovQ_d8.js} +3 -3
- package/dist/cjs/{backfillMetadataPropertyIds-tw8JGMT0.js.map → backfillMetadataPropertyIds-WIovQ_d8.js.map} +1 -1
- package/dist/cjs/{eas-CLiV2Hmn.js → eas-CUYXdr2t.js} +3 -3
- package/dist/cjs/{eas-CLiV2Hmn.js.map → eas-CUYXdr2t.js.map} +1 -1
- package/dist/cjs/{getItem-DSRtx_68.js → getItem-z1tHu0hu.js} +2 -2
- package/dist/cjs/{getItem-DSRtx_68.js.map → getItem-z1tHu0hu.js.map} +1 -1
- package/dist/cjs/{getLatestVersionRow-DVizNNoI.js → getLatestVersionRow-CcaabxIW.js} +2 -2
- package/dist/cjs/{getLatestVersionRow-DVizNNoI.js.map → getLatestVersionRow-CcaabxIW.js.map} +1 -1
- package/dist/cjs/{getPublishPayload-D5-dYtNq.js → getPublishPayload-CEP_e-Kv.js} +160 -204
- package/dist/cjs/getPublishPayload-CEP_e-Kv.js.map +1 -0
- package/dist/cjs/{getPublishUploads-B5Lq6q-_.js → getPublishUploads-Ctn5k1k6.js} +49 -10
- package/dist/cjs/getPublishUploads-Ctn5k1k6.js.map +1 -0
- package/dist/cjs/{index-C66AfYDG.js → index-Cvvt0-5B.js} +244 -87
- package/dist/cjs/index-Cvvt0-5B.js.map +1 -0
- package/dist/cjs/{index-B3UDbm1C.js → index-DfGhF1dc.js} +3 -3
- package/dist/cjs/index-DfGhF1dc.js.map +1 -0
- package/dist/cjs/{property-BVJIP7SX.js → property-DbEPQ1m9.js} +5 -5
- package/dist/cjs/{property-BVJIP7SX.js.map → property-DbEPQ1m9.js.map} +1 -1
- package/dist/cjs/publishDraftGraph-C38gf302.js +403 -0
- package/dist/cjs/publishDraftGraph-C38gf302.js.map +1 -0
- package/dist/cjs/{resetAmbiguousLegacyItemData-BaZqUui9.js → resetAmbiguousLegacyItemData-CfMhRHwK.js} +2 -2
- package/dist/cjs/{resetAmbiguousLegacyItemData-BaZqUui9.js.map → resetAmbiguousLegacyItemData-CfMhRHwK.js.map} +1 -1
- package/dist/cjs/{resolveModelForSyncedSeed-CC6dQctx.js → resolveModelForSyncedSeed-CNYaLOir.js} +2 -2
- package/dist/cjs/{resolveModelForSyncedSeed-CC6dQctx.js.map → resolveModelForSyncedSeed-CNYaLOir.js.map} +1 -1
- package/dist/cjs/{syncDbWithEas-Dk96sAG-.js → syncDbWithEas-d1iOdTTI.js} +20 -7
- package/dist/cjs/{syncDbWithEas-Dk96sAG-.js.map → syncDbWithEas-d1iOdTTI.js.map} +1 -1
- package/dist/{configurePlatform-BMoPG9vY.js → configurePlatform-CZpjyuCo.js} +4 -4
- package/dist/{configurePlatform-BMoPG9vY.js.map → configurePlatform-CZpjyuCo.js.map} +1 -1
- package/dist/{db-BJZN0a0a.js → db-Lw0KVZmc.js} +11 -11
- package/dist/{db-BJZN0a0a.js.map → db-Lw0KVZmc.js.map} +1 -1
- package/dist/{eas-B0hsMLqt.js → eas-CQ-Smzk2.js} +6 -6
- package/dist/{eas-B0hsMLqt.js.map → eas-CQ-Smzk2.js.map} +1 -1
- package/dist/{getItem-DEh4WfHG.js → getItem-CSfSok9f.js} +5 -5
- package/dist/{getItem-DEh4WfHG.js.map → getItem-CSfSok9f.js.map} +1 -1
- package/dist/{getLatestVersionRow-Brrl1AnW.js → getLatestVersionRow-72Atl9vB.js} +5 -5
- package/dist/{getLatestVersionRow-Brrl1AnW.js.map → getLatestVersionRow-72Atl9vB.js.map} +1 -1
- package/dist/{getPublishPayload-H032DHC7.js → getPublishPayload-76_KfB5Y.js} +155 -200
- package/dist/getPublishPayload-76_KfB5Y.js.map +1 -0
- package/dist/{getPublishUploads-CR66RlGJ.js → getPublishUploads-CqgMBD8f.js} +52 -13
- package/dist/getPublishUploads-CqgMBD8f.js.map +1 -0
- package/dist/{index-B0LgJblD.js → index-5b3JsS55.js} +2 -2
- package/dist/index-5b3JsS55.js.map +1 -0
- package/dist/{index-6bJuv5Tt.js → index-BpgD305l.js} +9 -9
- package/dist/{index-6bJuv5Tt.js.map → index-BpgD305l.js.map} +1 -1
- package/dist/{index-DtfjeuxC.js → index-Y-yYyRBf.js} +166 -75
- package/dist/index-Y-yYyRBf.js.map +1 -0
- package/dist/{index.browser-CNrqhvEA.js → index.browser-DaTzn79x.js} +9 -9
- package/dist/{index.browser-CNrqhvEA.js.map → index.browser-DaTzn79x.js.map} +1 -1
- package/dist/{index.node-DrHiTuOr.js → index.node-NYKqFOoe.js} +5 -5
- package/dist/{index.node-DrHiTuOr.js.map → index.node-NYKqFOoe.js.map} +1 -1
- package/dist/main.cjs +1 -1
- package/dist/main.js +257 -181
- package/dist/main.js.map +1 -1
- package/dist/node.js +12 -12
- package/dist/platform.browser.js +5 -5
- package/dist/platform.node.js +3 -3
- package/dist/{property-D2Nnsmm1.js → property-ByaiSyUK.js} +10 -10
- package/dist/{property-D2Nnsmm1.js.map → property-ByaiSyUK.js.map} +1 -1
- package/dist/publishDraftGraph-BRm6Pq3Q.js +405 -0
- package/dist/publishDraftGraph-BRm6Pq3Q.js.map +1 -0
- package/dist/{resetAmbiguousLegacyItemData-BqbHNUYk.js → resetAmbiguousLegacyItemData-B4dX6ZA1.js} +2 -2
- package/dist/{resetAmbiguousLegacyItemData-BqbHNUYk.js.map → resetAmbiguousLegacyItemData-B4dX6ZA1.js.map} +1 -1
- package/dist/{resolveModelForSyncedSeed-DQK6JfXS.js → resolveModelForSyncedSeed-B0tco3zG.js} +2 -2
- package/dist/{resolveModelForSyncedSeed-DQK6JfXS.js.map → resolveModelForSyncedSeed-B0tco3zG.js.map} +1 -1
- package/dist/src/Item/Item.d.ts +11 -0
- package/dist/src/Item/Item.d.ts.map +1 -1
- package/dist/src/ItemProperty/ItemProperty.d.ts +10 -0
- package/dist/src/ItemProperty/ItemProperty.d.ts.map +1 -1
- package/dist/src/Model/Model.d.ts +15 -2
- package/dist/src/Model/Model.d.ts.map +1 -1
- package/dist/src/Model/service/actors/createModelProperties.d.ts.map +1 -1
- package/dist/src/Model/service/actors/loadOrCreateModel.d.ts.map +1 -1
- package/dist/src/Model/service/actors/validateModel.d.ts.map +1 -1
- package/dist/src/Model/service/modelMachine.d.ts.map +1 -1
- package/dist/src/ModelProperty/ModelProperty.d.ts +9 -1
- package/dist/src/ModelProperty/ModelProperty.d.ts.map +1 -1
- package/dist/src/ModelProperty/service/actors/compareAndMarkDraft.d.ts.map +1 -1
- package/dist/src/ModelProperty/service/actors/saveToSchema.d.ts.map +1 -1
- package/dist/src/ModelProperty/service/actors/validateProperty.d.ts.map +1 -1
- package/dist/src/Schema/Schema.d.ts +7 -0
- package/dist/src/Schema/Schema.d.ts.map +1 -1
- package/dist/src/Schema/service/actors/checkExistingSchema.d.ts.map +1 -1
- package/dist/src/Schema/service/actors/createModelInstances.d.ts.map +1 -1
- package/dist/src/Schema/service/actors/loadOrCreateSchema.d.ts.map +1 -1
- package/dist/src/db/read/getPublishPayload.d.ts +9 -0
- package/dist/src/db/read/getPublishPayload.d.ts.map +1 -1
- package/dist/src/db/read/getPublishUploads.d.ts +5 -0
- package/dist/src/db/read/getPublishUploads.d.ts.map +1 -1
- package/dist/src/db/read/publishDraftGraph.d.ts +57 -0
- package/dist/src/db/read/publishDraftGraph.d.ts.map +1 -0
- package/dist/src/db/read/summarizePublishWork.d.ts.map +1 -1
- package/dist/src/helpers/entity/entityLiveQuery.d.ts.map +1 -1
- package/dist/src/helpers/entity/evictionEpoch.d.ts +18 -0
- package/dist/src/helpers/entity/evictionEpoch.d.ts.map +1 -0
- package/dist/src/helpers/htmlEmbeddedDataUriPublish.d.ts +28 -6
- package/dist/src/helpers/htmlEmbeddedDataUriPublish.d.ts.map +1 -1
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/services/write/actors/validateEntity.d.ts.map +1 -1
- package/dist/src/types/item.d.ts +7 -8
- package/dist/src/types/item.d.ts.map +1 -1
- package/dist/{syncDbWithEas-LRKr_NZF.js → syncDbWithEas-BPap9Sru.js} +14 -14
- package/dist/{syncDbWithEas-LRKr_NZF.js.map → syncDbWithEas-BPap9Sru.js.map} +1 -1
- package/dist/{tabEvents-DYI2GU7i.js → tabEvents-C6NXS6Jl.js} +6 -6
- package/dist/{tabEvents-DYI2GU7i.js.map → tabEvents-C6NXS6Jl.js.map} +1 -1
- package/dist/{tolerantWebAccess-CzOBz5M6.js → tolerantWebAccess-NBQ1NB4i.js} +6 -6
- package/dist/{tolerantWebAccess-CzOBz5M6.js.map → tolerantWebAccess-NBQ1NB4i.js.map} +1 -1
- package/dist/{updateSeedRevokedAt-B58ORbY3.js → updateSeedRevokedAt-CYwgVNlM.js} +3 -3
- package/dist/{updateSeedRevokedAt-B58ORbY3.js.map → updateSeedRevokedAt-CYwgVNlM.js.map} +1 -1
- package/package.json +8 -10
- package/dist/ModelProperty-lth9L37R.js.map +0 -1
- package/dist/Schema-DOhlrQ-N.js.map +0 -1
- package/dist/cjs/ModelProperty-BEsIHAjk.js.map +0 -1
- package/dist/cjs/Schema-qEp5mH1N.js.map +0 -1
- package/dist/cjs/getPublishPayload-D5-dYtNq.js.map +0 -1
- package/dist/cjs/getPublishUploads-B5Lq6q-_.js.map +0 -1
- package/dist/cjs/getSegmentedItemProperties-giHO7R3d.js +0 -147
- package/dist/cjs/getSegmentedItemProperties-giHO7R3d.js.map +0 -1
- package/dist/cjs/index-B3UDbm1C.js.map +0 -1
- package/dist/cjs/index-C66AfYDG.js.map +0 -1
- package/dist/getPublishPayload-H032DHC7.js.map +0 -1
- package/dist/getPublishUploads-CR66RlGJ.js.map +0 -1
- package/dist/getSegmentedItemProperties-C2EJ2G0N.js +0 -147
- package/dist/getSegmentedItemProperties-C2EJ2G0N.js.map +0 -1
- package/dist/index-B0LgJblD.js.map +0 -1
- package/dist/index-DtfjeuxC.js.map +0 -1
- package/dist/src/browser/helpers/index.d.ts +0 -4
- 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-
|
|
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
|
|
8
|
-
var
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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}`,
|
|
741
|
+
addValidationError(ctx, `Schema UID not found for model: ${modelName}`, reportPropertyName);
|
|
800
742
|
return multiPublishPayload;
|
|
801
743
|
}
|
|
802
|
-
if (
|
|
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:
|
|
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
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
const
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
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
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
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,
|
|
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,
|
|
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-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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-
|
|
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
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
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
|
|
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,
|
|
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-
|
|
1597
|
+
//# sourceMappingURL=getPublishPayload-CEP_e-Kv.js.map
|