@seedprotocol/sdk 0.7.0 → 0.7.2-next.593.gd5bd4ea
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-BdxCSIzn.js} +2 -2
- package/dist/{BasePathResolver-ndE8XTpw.js.map → BasePathResolver-BdxCSIzn.js.map} +1 -1
- package/dist/{ClientManager-DLleL_2e.js → ClientManager-ClCwwhwo.js} +28 -23
- package/dist/ClientManager-ClCwwhwo.js.map +1 -0
- package/dist/{Item-zBFWQDU9.js → Item-B9Y4VuK1.js} +140 -74
- package/dist/Item-B9Y4VuK1.js.map +1 -0
- package/dist/{ModelProperty-lth9L37R.js → ModelProperty-BMePcicQ.js} +64 -36
- package/dist/ModelProperty-BMePcicQ.js.map +1 -0
- package/dist/{Schema-DOhlrQ-N.js → Schema-COsEXXaR.js} +106 -58
- package/dist/Schema-COsEXXaR.js.map +1 -0
- package/dist/{SchemaValidationService-DDKr5piy.js → SchemaValidationService-DabGMzSE.js} +7 -8
- package/dist/{SchemaValidationService-DDKr5piy.js.map → SchemaValidationService-DabGMzSE.js.map} +1 -1
- package/dist/{backfillMetadataPropertyIds-fG3ujaSh.js → backfillMetadataPropertyIds-Ck6fumnm.js} +4 -4
- package/dist/{backfillMetadataPropertyIds-fG3ujaSh.js.map → backfillMetadataPropertyIds-Ck6fumnm.js.map} +1 -1
- package/dist/cjs/{ModelProperty-BEsIHAjk.js → ModelProperty-BT6Un_MB.js} +59 -30
- package/dist/cjs/ModelProperty-BT6Un_MB.js.map +1 -0
- package/dist/cjs/{Schema-qEp5mH1N.js → Schema-BXhXdUsA.js} +93 -44
- package/dist/cjs/Schema-BXhXdUsA.js.map +1 -0
- package/dist/cjs/{SchemaValidationService-CWEnZmOH.js → SchemaValidationService-CC18QDfc.js} +2 -2
- package/dist/cjs/{SchemaValidationService-CWEnZmOH.js.map → SchemaValidationService-CC18QDfc.js.map} +1 -1
- package/dist/cjs/{backfillMetadataPropertyIds-tw8JGMT0.js → backfillMetadataPropertyIds-DEHC9ejq.js} +3 -3
- package/dist/cjs/{backfillMetadataPropertyIds-tw8JGMT0.js.map → backfillMetadataPropertyIds-DEHC9ejq.js.map} +1 -1
- package/dist/cjs/{eas-CLiV2Hmn.js → eas-C3CL0l7l.js} +3 -3
- package/dist/cjs/{eas-CLiV2Hmn.js.map → eas-C3CL0l7l.js.map} +1 -1
- package/dist/cjs/{getItem-DSRtx_68.js → getItem-CrwWYCkj.js} +2 -2
- package/dist/cjs/{getItem-DSRtx_68.js.map → getItem-CrwWYCkj.js.map} +1 -1
- package/dist/cjs/{getPublishPayload-D5-dYtNq.js → getPublishPayload-DRJh7WR0.js} +171 -209
- package/dist/cjs/getPublishPayload-DRJh7WR0.js.map +1 -0
- package/dist/cjs/{getPublishUploads-B5Lq6q-_.js → getPublishUploads-Bh22D3zJ.js} +49 -10
- package/dist/cjs/getPublishUploads-Bh22D3zJ.js.map +1 -0
- package/dist/cjs/{index-B3UDbm1C.js → index-BA1RIYFG.js} +3 -3
- package/dist/cjs/index-BA1RIYFG.js.map +1 -0
- package/dist/cjs/{index-C66AfYDG.js → index-Dls7aMjr.js} +281 -90
- package/dist/cjs/index-Dls7aMjr.js.map +1 -0
- package/dist/cjs/{property-BVJIP7SX.js → property-ZerTWizX.js} +5 -5
- package/dist/cjs/{property-BVJIP7SX.js.map → property-ZerTWizX.js.map} +1 -1
- package/dist/cjs/publishDraftGraph-CPOAcQFf.js +403 -0
- package/dist/cjs/publishDraftGraph-CPOAcQFf.js.map +1 -0
- package/dist/cjs/{resetAmbiguousLegacyItemData-BaZqUui9.js → resetAmbiguousLegacyItemData-adDl4LcT.js} +2 -2
- package/dist/cjs/{resetAmbiguousLegacyItemData-BaZqUui9.js.map → resetAmbiguousLegacyItemData-adDl4LcT.js.map} +1 -1
- package/dist/cjs/{resolveModelForSyncedSeed-CC6dQctx.js → resolveModelForSyncedSeed-DoNThPdL.js} +2 -2
- package/dist/cjs/{resolveModelForSyncedSeed-CC6dQctx.js.map → resolveModelForSyncedSeed-DoNThPdL.js.map} +1 -1
- package/dist/cjs/{syncDbWithEas-Dk96sAG-.js → syncDbWithEas-CYfPkus9.js} +20 -7
- package/dist/cjs/{syncDbWithEas-Dk96sAG-.js.map → syncDbWithEas-CYfPkus9.js.map} +1 -1
- package/dist/{configurePlatform-BMoPG9vY.js → configurePlatform-xU3Hsno3.js} +4 -4
- package/dist/{configurePlatform-BMoPG9vY.js.map → configurePlatform-xU3Hsno3.js.map} +1 -1
- package/dist/{db-BJZN0a0a.js → db-W1g29qsM.js} +31 -27
- package/dist/{db-BJZN0a0a.js.map → db-W1g29qsM.js.map} +1 -1
- package/dist/{eas-B0hsMLqt.js → eas-CSwV6MvB.js} +6 -6
- package/dist/{eas-B0hsMLqt.js.map → eas-CSwV6MvB.js.map} +1 -1
- package/dist/{getItem-DEh4WfHG.js → getItem-BYQeM3DY.js} +5 -6
- package/dist/{getItem-DEh4WfHG.js.map → getItem-BYQeM3DY.js.map} +1 -1
- package/dist/{getPublishPayload-H032DHC7.js → getPublishPayload-D5CQZd-y.js} +167 -206
- package/dist/getPublishPayload-D5CQZd-y.js.map +1 -0
- package/dist/{getPublishUploads-CR66RlGJ.js → getPublishUploads-BGpDsrBp.js} +52 -14
- package/dist/getPublishUploads-BGpDsrBp.js.map +1 -0
- package/dist/{index-6bJuv5Tt.js → index-Bev-hZF-.js} +9 -10
- package/dist/index-Bev-hZF-.js.map +1 -0
- package/dist/{index-B0LgJblD.js → index-CSOQFAOn.js} +2 -2
- package/dist/index-CSOQFAOn.js.map +1 -0
- package/dist/{index-DtfjeuxC.js → index-DRXC5Mra.js} +167 -75
- package/dist/index-DRXC5Mra.js.map +1 -0
- package/dist/{index.browser-CNrqhvEA.js → index.browser-DO20vYuP.js} +9 -9
- package/dist/{index.browser-CNrqhvEA.js.map → index.browser-DO20vYuP.js.map} +1 -1
- package/dist/{index.node-DrHiTuOr.js → index.node-C4iyOhdo.js} +5 -5
- package/dist/{index.node-DrHiTuOr.js.map → index.node-C4iyOhdo.js.map} +1 -1
- package/dist/main.cjs +1 -1
- package/dist/main.js +258 -183
- package/dist/main.js.map +1 -1
- package/dist/node.js +14 -15
- package/dist/node.js.map +1 -1
- package/dist/platform.browser.js +5 -5
- package/dist/platform.node.js +3 -3
- package/dist/{property-D2Nnsmm1.js → property-BT1zDSkd.js} +10 -11
- package/dist/property-BT1zDSkd.js.map +1 -0
- package/dist/publishDraftGraph-Bcfrdj7-.js +405 -0
- package/dist/publishDraftGraph-Bcfrdj7-.js.map +1 -0
- package/dist/{resetAmbiguousLegacyItemData-BqbHNUYk.js → resetAmbiguousLegacyItemData-Ci6PM_vC.js} +2 -2
- package/dist/{resetAmbiguousLegacyItemData-BqbHNUYk.js.map → resetAmbiguousLegacyItemData-Ci6PM_vC.js.map} +1 -1
- package/dist/{resolveModelForSyncedSeed-DQK6JfXS.js → resolveModelForSyncedSeed-CLlumTBq.js} +2 -2
- package/dist/{resolveModelForSyncedSeed-DQK6JfXS.js.map → resolveModelForSyncedSeed-CLlumTBq.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/generateId.d.ts +4 -0
- package/dist/src/helpers/generateId.d.ts.map +1 -1
- 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/query/createLocalQueryDataSource.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-BQsXjGhe.js} +15 -16
- package/dist/syncDbWithEas-BQsXjGhe.js.map +1 -0
- package/dist/{tabEvents-DYI2GU7i.js → tabEvents-C9qUKx_z.js} +28 -11
- package/dist/tabEvents-C9qUKx_z.js.map +1 -0
- package/dist/{tolerantWebAccess-CzOBz5M6.js → tolerantWebAccess-B-9bwxbw.js} +6 -6
- package/dist/{tolerantWebAccess-CzOBz5M6.js.map → tolerantWebAccess-B-9bwxbw.js.map} +1 -1
- package/dist/{updateSeedRevokedAt-B58ORbY3.js → updateSeedRevokedAt-D6q0h7pj.js} +3 -3
- package/dist/{updateSeedRevokedAt-B58ORbY3.js.map → updateSeedRevokedAt-D6q0h7pj.js.map} +1 -1
- package/package.json +13 -10
- package/dist/ClientManager-DLleL_2e.js.map +0 -1
- package/dist/Item-zBFWQDU9.js.map +0 -1
- 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/getLatestVersionRow-DVizNNoI.js +0 -59
- package/dist/cjs/getLatestVersionRow-DVizNNoI.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/generateId-BopUwD8F.js +0 -9
- package/dist/generateId-BopUwD8F.js.map +0 -1
- package/dist/getLatestVersionRow-Brrl1AnW.js +0 -46
- package/dist/getLatestVersionRow-Brrl1AnW.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-6bJuv5Tt.js.map +0 -1
- package/dist/index-B0LgJblD.js.map +0 -1
- package/dist/index-DtfjeuxC.js.map +0 -1
- package/dist/property-D2Nnsmm1.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
- package/dist/syncDbWithEas-LRKr_NZF.js.map +0 -1
- package/dist/tabEvents-DYI2GU7i.js.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-Dls7aMjr.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-CPOAcQFf.js');
|
|
8
|
+
var property = require('./property-ZerTWizX.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);
|
|
@@ -215,6 +129,13 @@ function noteRelatedSeed(ctx, ref, row, propertyName, modelName) {
|
|
|
215
129
|
function currentRelatedRef(ctx, ref) {
|
|
216
130
|
return ctx.relatedRefUids?.get(ref.trim()) ?? ref;
|
|
217
131
|
}
|
|
132
|
+
/**
|
|
133
|
+
* An EAS uid (0x + 64 hex), as opposed to a local id. A "0x" prefix alone doesn't tell them apart:
|
|
134
|
+
* local ids are random alphanumerics, and about 1 in 3,844 starts with "0x".
|
|
135
|
+
*/
|
|
136
|
+
function isUidRef(ref) {
|
|
137
|
+
return ref.length === 66 && ref.startsWith('0x');
|
|
138
|
+
}
|
|
218
139
|
function addValidationError(ctx, message, field, code = 'publish_validation') {
|
|
219
140
|
// A property can be validated on more than one path (List of Relation: list + basic); report once.
|
|
220
141
|
if (ctx.errors.some((e) => e.message === message && e.field === (field ?? '')))
|
|
@@ -296,7 +217,7 @@ async function resolveVersionUid(seedLocalId, seedUid) {
|
|
|
296
217
|
if (published?.uid)
|
|
297
218
|
return published.uid;
|
|
298
219
|
try {
|
|
299
|
-
const { getItemVersionsFromEas } = await Promise.resolve().then(function () { return require('./eas-
|
|
220
|
+
const { getItemVersionsFromEas } = await Promise.resolve().then(function () { return require('./eas-C3CL0l7l.js'); });
|
|
300
221
|
const attestations = await getItemVersionsFromEas({ seedUids: [seedUid] });
|
|
301
222
|
const latest = attestations?.[0];
|
|
302
223
|
if (latest?.id)
|
|
@@ -363,7 +284,7 @@ const ensurePropertyDefs = async (targetItem) => {
|
|
|
363
284
|
schema = await property.getPropertySchema(targetItem.modelName, itemProperty.propertyName, targetScope);
|
|
364
285
|
if (!schema) {
|
|
365
286
|
try {
|
|
366
|
-
const { Model } = await Promise.resolve().then(function () { return require('./index-
|
|
287
|
+
const { Model } = await Promise.resolve().then(function () { return require('./index-Dls7aMjr.js'); }).then(function (n) { return n.Model$1; });
|
|
367
288
|
const normalizedModelName = lodashEs.upperFirst(lodashEs.camelCase(targetItem.modelName));
|
|
368
289
|
let model = Model.resolve(normalizedModelName, targetScope);
|
|
369
290
|
if (!model?.properties?.length && !targetScope.modelFileId) {
|
|
@@ -439,6 +360,9 @@ const processBasicProperties = async (itemBasicProperties, itemPublishData, ctx,
|
|
|
439
360
|
if (main_cjs.INTERNAL_PROPERTY_NAMES.includes(basicProperty.propertyName)) {
|
|
440
361
|
continue;
|
|
441
362
|
}
|
|
363
|
+
if (ctx.deferredProperties?.has(basicProperty)) {
|
|
364
|
+
continue;
|
|
365
|
+
}
|
|
442
366
|
const snapshot = basicProperty.getService().getSnapshot();
|
|
443
367
|
const context = 'context' in snapshot ? snapshot.context : null;
|
|
444
368
|
const propertyDef = basicProperty.propertyDef ?? (context ? context.propertyRecordSchema : undefined);
|
|
@@ -529,7 +453,7 @@ const processBasicProperties = async (itemBasicProperties, itemPublishData, ctx,
|
|
|
529
453
|
}
|
|
530
454
|
// Validate against property validation rules (enum, pattern, minLength, maxLength) before encoding
|
|
531
455
|
if (propertyDef?.validation) {
|
|
532
|
-
const { SchemaValidationService } = await Promise.resolve().then(function () { return require('./SchemaValidationService-
|
|
456
|
+
const { SchemaValidationService } = await Promise.resolve().then(function () { return require('./SchemaValidationService-CC18QDfc.js'); });
|
|
533
457
|
const validationService = new SchemaValidationService();
|
|
534
458
|
const validationResult = validationService.validatePropertyValue(value, main_cjs.normalizeDataType(propertyDef.dataType), propertyDef.validation, propertyDef.refValueType
|
|
535
459
|
? main_cjs.normalizeDataType(propertyDef.refValueType)
|
|
@@ -564,7 +488,7 @@ const processBasicProperties = async (itemBasicProperties, itemPublishData, ctx,
|
|
|
564
488
|
if (!trimmed)
|
|
565
489
|
continue;
|
|
566
490
|
rawIds.push(trimmed);
|
|
567
|
-
if (
|
|
491
|
+
if (!isUidRef(trimmed)) {
|
|
568
492
|
newValues.push(encodeBytes32String(trimmed));
|
|
569
493
|
}
|
|
570
494
|
else {
|
|
@@ -572,7 +496,7 @@ const processBasicProperties = async (itemBasicProperties, itemPublishData, ctx,
|
|
|
572
496
|
}
|
|
573
497
|
}
|
|
574
498
|
value = newValues;
|
|
575
|
-
const needsUidResolve = rawIds.some((id) =>
|
|
499
|
+
const needsUidResolve = rawIds.some((id) => !isUidRef(id));
|
|
576
500
|
if (needsUidResolve && rawIds.length > 0) {
|
|
577
501
|
rawListIdsForResolve = rawIds;
|
|
578
502
|
}
|
|
@@ -616,8 +540,7 @@ const processBasicProperties = async (itemBasicProperties, itemPublishData, ctx,
|
|
|
616
540
|
};
|
|
617
541
|
// For relation/image properties with seedLocalId, store resolution hints for resolvePublishPayloadValues
|
|
618
542
|
const looksLikeLocalSeedRef = typeof value === 'string' &&
|
|
619
|
-
!value
|
|
620
|
-
value.length !== 66 &&
|
|
543
|
+
!isUidRef(value) &&
|
|
621
544
|
/^[a-zA-Z0-9_-]{10,21}$/.test(value.trim());
|
|
622
545
|
if (looksLikeLocalSeedRef &&
|
|
623
546
|
(easDataType === 'bytes32' || easDataType === 'string')) {
|
|
@@ -669,7 +592,7 @@ const processRelationOrImageProperty = async (relationOrImageProperty, multiPubl
|
|
|
669
592
|
matchesDataType(relationOrImageProperty.propertyDef?.refValueType, main_cjs.ModelPropertyDataTypes.Html) ||
|
|
670
593
|
matchesDataType(relationOrImageProperty.propertyDef?.refValueType, main_cjs.ModelPropertyDataTypes.Json)));
|
|
671
594
|
if (isStorageSeed && (context.seedLocalId || context.seedUid)) {
|
|
672
|
-
const { getPropertyData: getPropertyDataFromDb } = await Promise.resolve().then(function () { return require('./index-
|
|
595
|
+
const { getPropertyData: getPropertyDataFromDb } = await Promise.resolve().then(function () { return require('./index-Dls7aMjr.js'); }).then(function (n) { return n.getPropertyData; });
|
|
673
596
|
const metaRow = await getPropertyDataFromDb({
|
|
674
597
|
propertyName: relationOrImageProperty.propertyName,
|
|
675
598
|
seedLocalId: context.seedLocalId,
|
|
@@ -753,12 +676,15 @@ const processRelationOrImageProperty = async (relationOrImageProperty, multiPubl
|
|
|
753
676
|
return multiPublishPayload;
|
|
754
677
|
}
|
|
755
678
|
// The local seed, also when the ref is the old uid of a seed published again since.
|
|
756
|
-
const relatedSeed = await findRelatedSeedRow({ seedLocalId, seedUid });
|
|
679
|
+
const relatedSeed = await publishDraftGraph.findRelatedSeedRow({ seedLocalId, seedUid });
|
|
680
|
+
if (!isStorageSeed && deferIfBackEdge(ctx, relationOrImageProperty, [relatedSeed?.seedLocalId ?? seedLocalId])) {
|
|
681
|
+
return multiPublishPayload;
|
|
682
|
+
}
|
|
757
683
|
// Use dynamic import to break circular dependency
|
|
758
|
-
const getItemMod = await Promise.resolve().then(function () { return require('./getItem-
|
|
684
|
+
const getItemMod = await Promise.resolve().then(function () { return require('./getItem-CrwWYCkj.js'); });
|
|
759
685
|
const { getItem } = getItemMod;
|
|
760
686
|
const relatedItem = await getItem(relatedSeed ? { seedLocalId: relatedSeed.seedLocalId } : { seedLocalId, seedUid });
|
|
761
|
-
if (noteRelatedSeed(ctx, normalizedRef, relatedSeed, relationOrImageProperty.propertyName, relatedItem?.modelName ?? relatedModelNameFromDef(relationOrImageProperty.propertyDef))) {
|
|
687
|
+
if (noteRelatedSeed(ctx, normalizedRef, relatedSeed, relationOrImageProperty.propertyName, relatedItem?.modelName ?? publishDraftGraph.relatedModelNameFromDef(relationOrImageProperty.propertyDef))) {
|
|
762
688
|
return multiPublishPayload;
|
|
763
689
|
}
|
|
764
690
|
// When related item not found (e.g. different DB, not yet created)
|
|
@@ -775,7 +701,6 @@ const processRelationOrImageProperty = async (relationOrImageProperty, multiPubl
|
|
|
775
701
|
if (relatedItem.seedUid && relatedItem.seedUid !== main_cjs.ZERO_BYTES32) {
|
|
776
702
|
return multiPublishPayload;
|
|
777
703
|
}
|
|
778
|
-
const versionUid = getVersionUid(relatedItem);
|
|
779
704
|
let modelName;
|
|
780
705
|
if (matchesDataType(relationOrImageProperty.propertyDef?.dataType, main_cjs.ModelPropertyDataTypes.Image)) {
|
|
781
706
|
modelName = 'Image';
|
|
@@ -794,68 +719,106 @@ const processRelationOrImageProperty = async (relationOrImageProperty, multiPubl
|
|
|
794
719
|
addValidationError(ctx, `Model name not found for relation or image property: ${relationOrImageProperty.propertyName}`, relationOrImageProperty.propertyName);
|
|
795
720
|
return multiPublishPayload;
|
|
796
721
|
}
|
|
722
|
+
return processRelatedDraftItem({
|
|
723
|
+
relatedItem,
|
|
724
|
+
modelName,
|
|
725
|
+
// A storage seed (Image/File/Html/Json item) attests its own basic properties; a related model
|
|
726
|
+
// item is published with its full property set and the draft items it reaches in turn.
|
|
727
|
+
fullDraft: !isStorageSeed,
|
|
728
|
+
link: { publishLocalId: originalSeedLocalId, propertySchemaUid: relationOrImageSchemaUid },
|
|
729
|
+
reportPropertyName: relationOrImageProperty.propertyName,
|
|
730
|
+
multiPublishPayload,
|
|
731
|
+
uploadedTransactions,
|
|
732
|
+
ctx,
|
|
733
|
+
buildOpts,
|
|
734
|
+
});
|
|
735
|
+
};
|
|
736
|
+
/**
|
|
737
|
+
* The payload of a draft item (no seed uid) a published item refers to, published with it. Its
|
|
738
|
+
* request fills the referring property (`link`) through propertiesToUpdate. With `fullDraft`, the
|
|
739
|
+
* item's whole property set is attested: its storage seeds and Html-embedded images, and its own
|
|
740
|
+
* relation and list properties, whose draft targets are published with it in turn (depth first,
|
|
741
|
+
* see publishDraftGraph.ts). A draft already in the batch only gains the link.
|
|
742
|
+
*/
|
|
743
|
+
async function processRelatedDraftItem({ relatedItem, modelName, fullDraft, link, reportPropertyName, multiPublishPayload, uploadedTransactions, ctx, buildOpts, }) {
|
|
744
|
+
const forceFullSnapshot = buildOpts?.forceFullSnapshot === true;
|
|
797
745
|
const seedSchemaUid = await main_cjs.getEasSchemaUidForModel(modelName);
|
|
798
746
|
if (!seedSchemaUid) {
|
|
799
|
-
addValidationError(ctx, `Schema UID not found for model: ${modelName}`,
|
|
747
|
+
addValidationError(ctx, `Schema UID not found for model: ${modelName}`, reportPropertyName);
|
|
800
748
|
return multiPublishPayload;
|
|
801
749
|
}
|
|
802
|
-
if (
|
|
750
|
+
if (multiPublishPayload.some((p) => p.localId === relatedItem.seedLocalId)) {
|
|
751
|
+
if (link) {
|
|
752
|
+
mergeChildPublishPayloadIfDuplicateInBatch(multiPublishPayload, relatedItem.seedLocalId, link.publishLocalId, link.propertySchemaUid);
|
|
753
|
+
}
|
|
803
754
|
return multiPublishPayload;
|
|
804
755
|
}
|
|
805
756
|
let publishPayload = {
|
|
806
757
|
localId: relatedItem.seedLocalId,
|
|
807
758
|
seedIsRevocable: true,
|
|
808
759
|
versionSchemaUid: main_cjs.VERSION_SCHEMA_UID,
|
|
809
|
-
seedUid:
|
|
760
|
+
seedUid: main_cjs.ZERO_BYTES32,
|
|
810
761
|
seedSchemaUid,
|
|
811
|
-
versionUid,
|
|
762
|
+
versionUid: getVersionUid(relatedItem),
|
|
812
763
|
listOfAttestations: [],
|
|
813
|
-
propertiesToUpdate: [
|
|
814
|
-
{
|
|
815
|
-
publishLocalId: originalSeedLocalId,
|
|
816
|
-
propertySchemaUid: relationOrImageSchemaUid,
|
|
817
|
-
},
|
|
818
|
-
],
|
|
764
|
+
propertiesToUpdate: link ? [{ ...link }] : [],
|
|
819
765
|
};
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
const
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
}
|
|
839
|
-
replaceStorageTransactionInBasicProperties(itemBasicProperties, itemProperty);
|
|
766
|
+
ctx.newSeedsInProgress ?? (ctx.newSeedsInProgress = new Set());
|
|
767
|
+
ctx.newSeedsInProgress.add(relatedItem.seedLocalId);
|
|
768
|
+
try {
|
|
769
|
+
await ensurePropertyDefs(relatedItem);
|
|
770
|
+
const segmented = await publishDraftGraph.getSegmentedItemProperties(relatedItem);
|
|
771
|
+
const { itemBasicProperties, itemUploadProperties, itemImageProperties: relatedStorageSeedProperties } = segmented;
|
|
772
|
+
if (fullDraft) {
|
|
773
|
+
// Its own Image/File/Html/Json properties and the images embedded in its Html (as for the item itself).
|
|
774
|
+
multiPublishPayload = await processRelatedDraftStorageSeeds(relatedItem, relatedStorageSeedProperties, itemBasicProperties, multiPublishPayload, uploadedTransactions, ctx, buildOpts);
|
|
775
|
+
// Its relations and lists: their draft targets are published too (same walk as publishDraftGraph).
|
|
776
|
+
const { relationProperties, listProperties } = publishDraftGraph.draftWalkProperties(segmented);
|
|
777
|
+
for (const relationProperty of relationProperties) {
|
|
778
|
+
multiPublishPayload = await processRelationOrImageProperty(relationProperty, multiPublishPayload, uploadedTransactions, relatedItem.seedLocalId, ctx, buildOpts);
|
|
779
|
+
itemBasicProperties.push(relationProperty);
|
|
780
|
+
}
|
|
781
|
+
for (const listProperty of listProperties) {
|
|
782
|
+
multiPublishPayload = await processListProperty(listProperty, multiPublishPayload, uploadedTransactions, relatedItem.seedLocalId, ctx, buildOpts);
|
|
783
|
+
itemBasicProperties.push(listProperty);
|
|
784
|
+
}
|
|
840
785
|
}
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
786
|
+
const relatedStorageUpload = resolveStorageTransactionUploadSlot(relatedItem, itemUploadProperties);
|
|
787
|
+
if (relatedStorageUpload) {
|
|
788
|
+
const transactionData = findUploadedTxForSeedLocalId(uploadedTransactions, relatedItem.seedLocalId);
|
|
789
|
+
if (transactionData) {
|
|
790
|
+
const itemProperty = relatedStorageUpload.itemProperty;
|
|
791
|
+
// Publish encoding reads context.propertyValue; do not await ItemProperty.save() here — it
|
|
792
|
+
// uses xstate waitFor(10s) for idle and can time out while the machine is busy or still loading.
|
|
793
|
+
itemProperty.getService().send({
|
|
794
|
+
type: 'updateContext',
|
|
795
|
+
propertyValue: transactionData.txId,
|
|
796
|
+
renderValue: transactionData.txId,
|
|
797
|
+
});
|
|
798
|
+
replaceStorageTransactionInBasicProperties(itemBasicProperties, itemProperty);
|
|
849
799
|
}
|
|
850
800
|
}
|
|
801
|
+
for (const p of itemBasicProperties) {
|
|
802
|
+
if (isStorageTransactionPropertyName(p.propertyName) &&
|
|
803
|
+
!p.propertyDef &&
|
|
804
|
+
relatedItem.modelName) {
|
|
805
|
+
const schema = await property.getPropertySchema(relatedItem.modelName, 'storageTransactionId', await main_cjs.getItemModelScope(relatedItem));
|
|
806
|
+
if (schema) {
|
|
807
|
+
p.getService().send({ type: 'updateContext', propertyRecordSchema: schema });
|
|
808
|
+
}
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
dedupeOneStorageTransactionPropertyInList(itemBasicProperties);
|
|
812
|
+
publishPayload = await processBasicProperties(itemBasicProperties, publishPayload, ctx, {
|
|
813
|
+
forceFullSnapshot,
|
|
814
|
+
});
|
|
815
|
+
}
|
|
816
|
+
finally {
|
|
817
|
+
ctx.newSeedsInProgress.delete(relatedItem.seedLocalId);
|
|
851
818
|
}
|
|
852
|
-
dedupeOneStorageTransactionPropertyInList(itemBasicProperties);
|
|
853
|
-
publishPayload = await processBasicProperties(itemBasicProperties, publishPayload, ctx, {
|
|
854
|
-
forceFullSnapshot,
|
|
855
|
-
});
|
|
856
819
|
multiPublishPayload.push(publishPayload);
|
|
857
820
|
return multiPublishPayload;
|
|
858
|
-
}
|
|
821
|
+
}
|
|
859
822
|
/**
|
|
860
823
|
* Storage-seed properties (Image/File/Html/Json) of a draft item related to the published one, and
|
|
861
824
|
* the images embedded in its Html (htmlEmbeddedImageCoPublish rows it owns): payloads for their seeds,
|
|
@@ -867,7 +830,7 @@ async function processRelatedDraftStorageSeeds(relatedItem, storageSeedPropertie
|
|
|
867
830
|
multiPublishPayload = await processRelationOrImageProperty(storageSeedProperty, multiPublishPayload, uploadedTransactions, relatedItem.seedLocalId, ctx, buildOpts);
|
|
868
831
|
itemBasicProperties.push(storageSeedProperty);
|
|
869
832
|
}
|
|
870
|
-
return processHtmlEmbeddedCoPublishImagePayloads(relatedItem, multiPublishPayload, uploadedTransactions,
|
|
833
|
+
return processHtmlEmbeddedCoPublishImagePayloads(relatedItem, multiPublishPayload, uploadedTransactions, ctx, buildOpts);
|
|
871
834
|
}
|
|
872
835
|
async function resolveHtmlPropertySchemaUidByHtmlSeed(item, htmlSeedLocalId, ctx) {
|
|
873
836
|
const want = htmlSeedLocalId.trim();
|
|
@@ -889,7 +852,7 @@ async function resolveHtmlPropertySchemaUidByHtmlSeed(item, htmlSeedLocalId, ctx
|
|
|
889
852
|
addValidationError(ctx, `Could not find Html property for embedded image rewrite (html seed ${want}).`, 'html', 'html_embed_schema');
|
|
890
853
|
return undefined;
|
|
891
854
|
}
|
|
892
|
-
async function processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPayload, uploadedTransactions,
|
|
855
|
+
async function processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPayload, uploadedTransactions, ctx, buildOpts) {
|
|
893
856
|
const appDb = main_cjs.BaseDb.getAppDb();
|
|
894
857
|
if (!appDb)
|
|
895
858
|
return multiPublishPayload;
|
|
@@ -900,7 +863,7 @@ async function processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPaylo
|
|
|
900
863
|
if (rows.length === 0)
|
|
901
864
|
return multiPublishPayload;
|
|
902
865
|
const forceFullSnapshot = buildOpts?.forceFullSnapshot === true;
|
|
903
|
-
const getItemMod = await Promise.resolve().then(function () { return require('./getItem-
|
|
866
|
+
const getItemMod = await Promise.resolve().then(function () { return require('./getItem-CrwWYCkj.js'); });
|
|
904
867
|
const { getItem } = getItemMod;
|
|
905
868
|
const doneImages = new Set();
|
|
906
869
|
for (const row of rows) {
|
|
@@ -909,10 +872,11 @@ async function processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPaylo
|
|
|
909
872
|
doneImages.add(row.imageSeedLocalId);
|
|
910
873
|
// An embedded image that is already published is not co-published; one whose seed was revoked
|
|
911
874
|
// (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')) {
|
|
875
|
+
const imageSeed = await publishDraftGraph.findRelatedSeedRow({ seedLocalId: row.imageSeedLocalId });
|
|
876
|
+
if (noteRelatedSeed(ctx, row.imageSeedLocalId, imageSeed, publishDraftGraph.htmlPropertyNameForHtmlSeed(item, row.htmlSeedLocalId), 'Image')) {
|
|
914
877
|
continue;
|
|
915
878
|
}
|
|
879
|
+
// The row's Html seed must still be the value of one of the item's Html properties.
|
|
916
880
|
const htmlSchemaUid = await resolveHtmlPropertySchemaUidByHtmlSeed(item, row.htmlSeedLocalId, ctx);
|
|
917
881
|
if (!htmlSchemaUid)
|
|
918
882
|
continue;
|
|
@@ -929,10 +893,16 @@ async function processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPaylo
|
|
|
929
893
|
addValidationError(ctx, `Schema UID not found for model: Image`, 'html');
|
|
930
894
|
continue;
|
|
931
895
|
}
|
|
932
|
-
|
|
896
|
+
// Already in the batch (e.g. also the value of an Image property): its payload is there.
|
|
897
|
+
if (multiPublishPayload.some((p) => p.localId === relatedItem.seedLocalId)) {
|
|
933
898
|
continue;
|
|
934
899
|
}
|
|
935
900
|
const versionUid = getVersionUid(relatedItem);
|
|
901
|
+
// No propertiesToUpdate: the Html refers to the image by its Arweave URL (the data URI is
|
|
902
|
+
// rewritten to it before the Html is uploaded), not by seed uid. The Html property holds the Html
|
|
903
|
+
// storage seed's uid, which the Html seed's own request writes into it; the contract writes each
|
|
904
|
+
// updater's seed uid into the same data[0] (SeedPublishLib.setSeedReference), so an image
|
|
905
|
+
// targeting the Html property too would overwrite that reference with the image's seed uid.
|
|
936
906
|
let publishPayload = {
|
|
937
907
|
localId: relatedItem.seedLocalId,
|
|
938
908
|
seedIsRevocable: true,
|
|
@@ -941,15 +911,10 @@ async function processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPaylo
|
|
|
941
911
|
seedSchemaUid,
|
|
942
912
|
versionUid,
|
|
943
913
|
listOfAttestations: [],
|
|
944
|
-
propertiesToUpdate: [
|
|
945
|
-
{
|
|
946
|
-
publishLocalId: originalSeedLocalId,
|
|
947
|
-
propertySchemaUid: htmlSchemaUid,
|
|
948
|
-
},
|
|
949
|
-
],
|
|
914
|
+
propertiesToUpdate: [],
|
|
950
915
|
};
|
|
951
916
|
await ensurePropertyDefs(relatedItem);
|
|
952
|
-
const { itemBasicProperties, itemUploadProperties } = await
|
|
917
|
+
const { itemBasicProperties, itemUploadProperties } = await publishDraftGraph.getSegmentedItemProperties(relatedItem);
|
|
953
918
|
const relatedStorageUpload = resolveStorageTransactionUploadSlot(relatedItem, itemUploadProperties);
|
|
954
919
|
if (relatedStorageUpload) {
|
|
955
920
|
const transactionData = findUploadedTxForSeedLocalId(uploadedTransactions, relatedItem.seedLocalId);
|
|
@@ -981,7 +946,7 @@ async function processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPaylo
|
|
|
981
946
|
}
|
|
982
947
|
return multiPublishPayload;
|
|
983
948
|
}
|
|
984
|
-
const processListProperty = async (listProperty, multiPublishPayload, originalSeedLocalId, ctx, buildOpts) => {
|
|
949
|
+
const processListProperty = async (listProperty, multiPublishPayload, uploadedTransactions, originalSeedLocalId, ctx, buildOpts) => {
|
|
985
950
|
const forceFullSnapshot = buildOpts?.forceFullSnapshot === true;
|
|
986
951
|
// processListProperty only handles list-of-relations; list-of-primitives go to itemBasicProperties
|
|
987
952
|
if (!listProperty.propertyDef?.ref) {
|
|
@@ -1014,6 +979,7 @@ const processListProperty = async (listProperty, multiPublishPayload, originalSe
|
|
|
1014
979
|
: value != null
|
|
1015
980
|
? [value]
|
|
1016
981
|
: [];
|
|
982
|
+
const members = [];
|
|
1017
983
|
for (const seedId of iterableValue) {
|
|
1018
984
|
const idStr = typeof seedId === 'string'
|
|
1019
985
|
? seedId
|
|
@@ -1025,12 +991,23 @@ const processListProperty = async (listProperty, multiPublishPayload, originalSe
|
|
|
1025
991
|
const { localId: seedLocalId, uid: seedUid } = main_cjs.getCorrectId(idStr);
|
|
1026
992
|
if (!seedLocalId && !seedUid)
|
|
1027
993
|
continue;
|
|
1028
|
-
|
|
994
|
+
members.push({ idStr, seedLocalId, seedUid });
|
|
995
|
+
}
|
|
996
|
+
// A member that is an item still in progress (a cycle back to it) can't be attested in this
|
|
997
|
+
// publish, so the list is deferred; its other draft members are still published, unlinked.
|
|
998
|
+
const memberSeeds = await Promise.all(members.map((m) => publishDraftGraph.findRelatedSeedRow({ seedLocalId: m.seedLocalId, seedUid: m.seedUid })));
|
|
999
|
+
const deferred = deferIfBackEdge(ctx, listProperty, members.map((m, i) => memberSeeds[i]?.seedLocalId ?? m.seedLocalId));
|
|
1000
|
+
for (let i = 0; i < members.length; i++) {
|
|
1001
|
+
const { idStr, seedLocalId, seedUid } = members[i];
|
|
1002
|
+
const relatedSeed = memberSeeds[i] ?? null;
|
|
1003
|
+
const memberLocalId = relatedSeed?.seedLocalId ?? seedLocalId;
|
|
1004
|
+
if (memberLocalId && ctx.newSeedsInProgress?.has(memberLocalId))
|
|
1005
|
+
continue;
|
|
1029
1006
|
// Use dynamic import to break circular dependency
|
|
1030
|
-
const getItemMod = await Promise.resolve().then(function () { return require('./getItem-
|
|
1007
|
+
const getItemMod = await Promise.resolve().then(function () { return require('./getItem-CrwWYCkj.js'); });
|
|
1031
1008
|
const { getItem } = getItemMod;
|
|
1032
1009
|
const relatedItem = await getItem(relatedSeed ? { seedLocalId: relatedSeed.seedLocalId } : { seedLocalId, seedUid });
|
|
1033
|
-
if (noteRelatedSeed(ctx, idStr.trim(), relatedSeed, listProperty.propertyName, relatedItem?.modelName ?? relatedModelNameFromDef(listProperty.propertyDef))) {
|
|
1010
|
+
if (noteRelatedSeed(ctx, idStr.trim(), relatedSeed, listProperty.propertyName, relatedItem?.modelName ?? publishDraftGraph.relatedModelNameFromDef(listProperty.propertyDef))) {
|
|
1034
1011
|
continue;
|
|
1035
1012
|
}
|
|
1036
1013
|
if (!relatedItem) {
|
|
@@ -1043,7 +1020,6 @@ const processListProperty = async (listProperty, multiPublishPayload, originalSe
|
|
|
1043
1020
|
if (relatedItem.seedUid && relatedItem.seedUid !== main_cjs.ZERO_BYTES32) {
|
|
1044
1021
|
continue;
|
|
1045
1022
|
}
|
|
1046
|
-
const versionUid = getVersionUid(relatedItem);
|
|
1047
1023
|
let modelName;
|
|
1048
1024
|
if (listProperty.propertyDef?.ref || listProperty.propertyDef.refModelName) {
|
|
1049
1025
|
const def = listProperty.propertyDef;
|
|
@@ -1062,36 +1038,17 @@ const processListProperty = async (listProperty, multiPublishPayload, originalSe
|
|
|
1062
1038
|
addValidationError(ctx, `Model name not found for list property: ${listProperty.propertyName}`, listProperty.propertyName);
|
|
1063
1039
|
continue;
|
|
1064
1040
|
}
|
|
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,
|
|
1041
|
+
multiPublishPayload = await processRelatedDraftItem({
|
|
1042
|
+
relatedItem,
|
|
1043
|
+
modelName,
|
|
1044
|
+
fullDraft: true,
|
|
1045
|
+
link: deferred ? null : { publishLocalId: originalSeedLocalId, propertySchemaUid: listPropertySchemaUid },
|
|
1046
|
+
reportPropertyName: listProperty.propertyName,
|
|
1047
|
+
multiPublishPayload,
|
|
1048
|
+
uploadedTransactions,
|
|
1049
|
+
ctx,
|
|
1050
|
+
buildOpts,
|
|
1093
1051
|
});
|
|
1094
|
-
multiPublishPayload.push(publishPayload);
|
|
1095
1052
|
}
|
|
1096
1053
|
return multiPublishPayload;
|
|
1097
1054
|
};
|
|
@@ -1228,13 +1185,18 @@ const getPublishPayload = async (item, uploadedTransactions, options) => {
|
|
|
1228
1185
|
// A revoked seed can't be published under again: republishing creates a new seed attestation
|
|
1229
1186
|
// (new seedUid) and a new version carrying every property (see docs/ATTESTATION_REVOCATION.md).
|
|
1230
1187
|
const hasSeedUid = !!item.seedUid && item.seedUid !== main_cjs.ZERO_BYTES32;
|
|
1231
|
-
const republishRevokedSeed = hasSeedUid && (await isSeedRevoked(item.seedLocalId));
|
|
1188
|
+
const republishRevokedSeed = hasSeedUid && (await publishDraftGraph.isSeedRevoked(item.seedLocalId));
|
|
1232
1189
|
const rootSeedUid = republishRevokedSeed ? main_cjs.ZERO_BYTES32 : item.seedUid || main_cjs.ZERO_BYTES32;
|
|
1233
1190
|
const forceFullSnapshot = publishMode === 'new_version' || republishRevokedSeed;
|
|
1234
1191
|
if (publishMode === 'new_version' && (!item.seedUid || item.seedUid === main_cjs.ZERO_BYTES32)) {
|
|
1235
1192
|
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
1193
|
}
|
|
1237
1194
|
let multiPublishPayload = [];
|
|
1195
|
+
// The root gets a new seed (draft, or revoked seed published again): related drafts referring
|
|
1196
|
+
// back to it can't attest its uid in this publish (see publishDraftGraph.ts).
|
|
1197
|
+
if (rootSeedUid === main_cjs.ZERO_BYTES32) {
|
|
1198
|
+
validationCtx.newSeedsInProgress = new Set([item.seedLocalId]);
|
|
1199
|
+
}
|
|
1238
1200
|
// Each PublishPayload is generated from a Seed that needs publishing
|
|
1239
1201
|
// First we need to determine all Seeds to publish
|
|
1240
1202
|
// That means the Seed of the Item, plus any Seeds pointed to by Relations
|
|
@@ -1268,7 +1230,7 @@ const getPublishPayload = async (item, uploadedTransactions, options) => {
|
|
|
1268
1230
|
propertiesToUpdate: [],
|
|
1269
1231
|
};
|
|
1270
1232
|
await ensurePropertyDefs(item);
|
|
1271
|
-
const { itemBasicProperties, itemListProperties, itemUploadProperties, itemImageProperties, itemRelationProperties, } = await
|
|
1233
|
+
const { itemBasicProperties, itemListProperties, itemUploadProperties, itemImageProperties, itemRelationProperties, } = await publishDraftGraph.getSegmentedItemProperties(item);
|
|
1272
1234
|
const relationAndImageProperties = [...itemRelationProperties, ...itemImageProperties];
|
|
1273
1235
|
// Validate required relations have values before processing
|
|
1274
1236
|
for (const relProp of itemRelationProperties) {
|
|
@@ -1317,9 +1279,9 @@ const getPublishPayload = async (item, uploadedTransactions, options) => {
|
|
|
1317
1279
|
multiPublishPayload = await processRelationOrImageProperty(relationProperty, multiPublishPayload, uploadedTransactions, item.seedLocalId, validationCtx, { forceFullSnapshot });
|
|
1318
1280
|
itemBasicProperties.push(relationProperty);
|
|
1319
1281
|
}
|
|
1320
|
-
multiPublishPayload = await processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPayload, uploadedTransactions,
|
|
1282
|
+
multiPublishPayload = await processHtmlEmbeddedCoPublishImagePayloads(item, multiPublishPayload, uploadedTransactions, validationCtx, { forceFullSnapshot });
|
|
1321
1283
|
for (const listProperty of itemListProperties) {
|
|
1322
|
-
multiPublishPayload = await processListProperty(listProperty, multiPublishPayload, item.seedLocalId, validationCtx, { forceFullSnapshot });
|
|
1284
|
+
multiPublishPayload = await processListProperty(listProperty, multiPublishPayload, uploadedTransactions, item.seedLocalId, validationCtx, { forceFullSnapshot });
|
|
1323
1285
|
itemBasicProperties.push(listProperty);
|
|
1324
1286
|
}
|
|
1325
1287
|
for (const p of itemBasicProperties) {
|
|
@@ -1550,7 +1512,7 @@ const resolvePublishPayloadValues = async (multiPayload, resolvedUids) => {
|
|
|
1550
1512
|
let allSlotsResolved = true;
|
|
1551
1513
|
for (const id of rawList) {
|
|
1552
1514
|
const trimmed = id.trim();
|
|
1553
|
-
if (trimmed
|
|
1515
|
+
if (isUidRef(trimmed)) {
|
|
1554
1516
|
resolvedValues.push(padUidForBytes32Schema(trimmed));
|
|
1555
1517
|
continue;
|
|
1556
1518
|
}
|
|
@@ -1638,4 +1600,4 @@ exports.PublishValidationFailedError = PublishValidationFailedError;
|
|
|
1638
1600
|
exports.getPublishPayload = getPublishPayload;
|
|
1639
1601
|
exports.resolvePublishPayloadValues = resolvePublishPayloadValues;
|
|
1640
1602
|
exports.validateItemForPublish = validateItemForPublish;
|
|
1641
|
-
//# sourceMappingURL=getPublishPayload-
|
|
1603
|
+
//# sourceMappingURL=getPublishPayload-DRJh7WR0.js.map
|