@seedprotocol/publish 0.5.2 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +7 -1
  3. package/dist/config-BBL0ILr9.js +945 -0
  4. package/dist/config-BBL0ILr9.js.map +1 -0
  5. package/dist/config-DLoMtwmG.js +945 -0
  6. package/dist/config-DLoMtwmG.js.map +1 -0
  7. package/dist/ensureAutomationSessionKey-BuM0gQfL.js +84 -0
  8. package/dist/ensureAutomationSessionKey-BuM0gQfL.js.map +1 -0
  9. package/dist/ensureAutomationSessionKey-BwIqDrG9.js +84 -0
  10. package/dist/ensureAutomationSessionKey-BwIqDrG9.js.map +1 -0
  11. package/dist/ensureManagedAccountEasConfigured-CLB69z0D.js +1206 -0
  12. package/dist/ensureManagedAccountEasConfigured-CLB69z0D.js.map +1 -0
  13. package/dist/ensureManagedAccountEasConfigured-DkRwHXL2.js +1204 -0
  14. package/dist/ensureManagedAccountEasConfigured-DkRwHXL2.js.map +1 -0
  15. package/dist/ensureModularPublishBootstrap-B_w6G5EL.js +125 -0
  16. package/dist/ensureModularPublishBootstrap-B_w6G5EL.js.map +1 -0
  17. package/dist/ensureModularPublishBootstrap-BafX1eks.js +124 -0
  18. package/dist/ensureModularPublishBootstrap-BafX1eks.js.map +1 -0
  19. package/dist/ensureModularPublishBootstrap-CPEwnTCw.js +127 -0
  20. package/dist/ensureModularPublishBootstrap-CPEwnTCw.js.map +1 -0
  21. package/dist/ensureModularPublishBootstrap-CqKKjChn.js +127 -0
  22. package/dist/ensureModularPublishBootstrap-CqKKjChn.js.map +1 -0
  23. package/dist/ensureSmartWalletThenPublish-BDX7FxdV.js +47 -0
  24. package/dist/ensureSmartWalletThenPublish-BDX7FxdV.js.map +1 -0
  25. package/dist/ensureSmartWalletThenPublish-CgCb9kZy.js +47 -0
  26. package/dist/ensureSmartWalletThenPublish-CgCb9kZy.js.map +1 -0
  27. package/dist/ensureSmartWalletThenPublish-Ch7BST2M.js +48 -0
  28. package/dist/ensureSmartWalletThenPublish-Ch7BST2M.js.map +1 -0
  29. package/dist/ensureSmartWalletThenPublish-s7MBAeky.js +48 -0
  30. package/dist/ensureSmartWalletThenPublish-s7MBAeky.js.map +1 -0
  31. package/dist/errors-Du3LNbJN.js +70 -0
  32. package/dist/errors-Du3LNbJN.js.map +1 -0
  33. package/dist/helpers/approvedTargetsForAutomationPublish.d.ts +9 -0
  34. package/dist/helpers/approvedTargetsForAutomationPublish.d.ts.map +1 -0
  35. package/dist/helpers/assertStorageBoundToIdentity.d.ts +31 -0
  36. package/dist/helpers/assertStorageBoundToIdentity.d.ts.map +1 -0
  37. package/dist/helpers/automationSessionKeyPermissions.d.ts +26 -0
  38. package/dist/helpers/automationSessionKeyPermissions.d.ts.map +1 -0
  39. package/dist/helpers/easDirect.d.ts +7 -0
  40. package/dist/helpers/easDirect.d.ts.map +1 -1
  41. package/dist/helpers/enrollPublishAutomation.d.ts +36 -0
  42. package/dist/helpers/enrollPublishAutomation.d.ts.map +1 -0
  43. package/dist/helpers/ensureAutomationSessionKey.d.ts +20 -0
  44. package/dist/helpers/ensureAutomationSessionKey.d.ts.map +1 -0
  45. package/dist/helpers/ensureManagedAccountEasConfigured.d.ts +5 -0
  46. package/dist/helpers/ensureManagedAccountEasConfigured.d.ts.map +1 -1
  47. package/dist/helpers/resolveRevokeAccount.d.ts +3 -6
  48. package/dist/helpers/resolveRevokeAccount.d.ts.map +1 -1
  49. package/dist/helpers/seedSigner.d.ts +3 -0
  50. package/dist/helpers/seedSigner.d.ts.map +1 -1
  51. package/dist/index.d.ts +3 -1
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +573 -198
  54. package/dist/index.js.map +1 -1
  55. package/dist/publishAuthorization-9WO-Zbcj.js +3426 -0
  56. package/dist/publishAuthorization-9WO-Zbcj.js.map +1 -0
  57. package/dist/publishAuthorization-CSyAV8Hf.js +3403 -0
  58. package/dist/publishAuthorization-CSyAV8Hf.js.map +1 -0
  59. package/dist/publishManager-B7zTF25-.js +3018 -0
  60. package/dist/publishManager-B7zTF25-.js.map +1 -0
  61. package/dist/publishManager-luSstTr_.js +3008 -0
  62. package/dist/publishManager-luSstTr_.js.map +1 -0
  63. package/dist/resolveRevokeAccount-B4J_Jo76.js +38 -0
  64. package/dist/resolveRevokeAccount-B4J_Jo76.js.map +1 -0
  65. package/dist/resolveRevokeAccount-Bo1IMYOj.js +38 -0
  66. package/dist/resolveRevokeAccount-Bo1IMYOj.js.map +1 -0
  67. package/dist/resolveRevokeAccount-FYMP0Qz6.js +30 -0
  68. package/dist/resolveRevokeAccount-FYMP0Qz6.js.map +1 -0
  69. package/dist/resolveRevokeAccount-mMTFtVDR.js +30 -0
  70. package/dist/resolveRevokeAccount-mMTFtVDR.js.map +1 -0
  71. package/dist/services/PublishManager/index.d.ts +2 -2
  72. package/dist/services/PublishManager/index.d.ts.map +1 -1
  73. package/dist/services/domainOwnership/challenge.d.ts +34 -0
  74. package/dist/services/domainOwnership/challenge.d.ts.map +1 -0
  75. package/dist/services/domainOwnership/dnsVerify.d.ts +23 -0
  76. package/dist/services/domainOwnership/dnsVerify.d.ts.map +1 -0
  77. package/dist/services/domainOwnership/index.d.ts +121 -0
  78. package/dist/services/domainOwnership/index.d.ts.map +1 -0
  79. package/dist/services/domainOwnership/public.d.ts +2 -0
  80. package/dist/services/domainOwnership/public.d.ts.map +1 -0
  81. package/dist/services/domainOwnership/registry.d.ts +18 -0
  82. package/dist/services/domainOwnership/registry.d.ts.map +1 -0
  83. package/dist/services/publish/actors/createAttestations.d.ts +6 -0
  84. package/dist/services/publish/actors/createAttestations.d.ts.map +1 -1
  85. package/dist/services/publish/index.d.ts +17 -17
  86. package/dist/services/publish/index.d.ts.map +1 -1
  87. package/dist/services/publishAuthorization/index.d.ts +68 -0
  88. package/dist/services/publishAuthorization/index.d.ts.map +1 -0
  89. package/dist/services/publishAuthorization/public.d.ts +2 -0
  90. package/dist/services/publishAuthorization/public.d.ts.map +1 -0
  91. package/dist/services/revoke/revokeAttestations.d.ts +3 -0
  92. package/dist/services/revoke/revokeAttestations.d.ts.map +1 -1
  93. package/dist/services/upload/uploadMachine.d.ts +2 -2
  94. package/dist/services/upload/uploadMachine.d.ts.map +1 -1
  95. package/dist/thirdweb.d.ts +5 -0
  96. package/dist/thirdweb.d.ts.map +1 -1
  97. package/dist/thirdweb.js +202 -83
  98. package/dist/thirdweb.js.map +1 -1
  99. package/dist/worker-BaZK7VaR.js +69 -0
  100. package/dist/worker-BaZK7VaR.js.map +1 -0
  101. package/dist/worker-ChGaz4Bg.js +69 -0
  102. package/dist/worker-ChGaz4Bg.js.map +1 -0
  103. package/dist/worker-Nx2FsrmM.js +69 -0
  104. package/dist/worker-Nx2FsrmM.js.map +1 -0
  105. package/dist/worker-eQpROLst.js +69 -0
  106. package/dist/worker-eQpROLst.js.map +1 -0
  107. package/package.json +7 -4
@@ -0,0 +1,3403 @@
1
+ import { $ as e, B as t, C as n, D as r, E as i, F as a, H as o, I as s, J as c, L as l, M as u, O as d, P as f, Q as p, S as m, T as h, U as g, W as _, X as v, Y as y, _ as b, g as x, h as S, k as ee, nt as te, q as ne, r as C, tt as re, w as ie, x as w, y as ae, z as oe } from "./config-DLoMtwmG.js";
2
+ import { a as se, o as ce, r as T, s as le, t as ue } from "./errors-Du3LNbJN.js";
3
+ import { BaseArweaveClient as de, BaseDb as E, BaseFileManager as D, INTERNAL_DATA_TYPES as fe, Item as O, ModelPropertyDataTypes as pe, applyPropertyAttestationUidsFromPublish as me, arweaveL1FinalizeJobs as he, getCorrectId as ge, getEasSchemaForItemProperty as _e, getItemPropertiesFromEas as ve, getRelatedItemsForPublish as ye, getSegmentedItemProperties as be, getUploadPipelineTransactionStatus as xe, htmlEmbeddedImageCoPublish as Se, isItemOwned as Ce, itemHasPublishUploadCandidates as we, prepareHtmlEmbeddedImagesForPublish as Te, publishProcesses as k, resolvePublishPayloadValues as Ee, rewriteHtmlEmbeddedImagesOnDisk as De, setSchemaUidForModel as Oe, setSchemaUidForSchemaDefinition as A, updateVersionUid as ke, validateItemForPublish as Ae } from "@seedprotocol/sdk";
4
+ import { decodeAbiParameters as je, encodeAbiParameters as Me, parseEventLogs as Ne, zeroAddress as Pe } from "viem";
5
+ import { createThirdwebClient as Fe, deploySmartAccount as Ie, getContract as Le, sendTransaction as Re } from "thirdweb";
6
+ import { optimismSepolia as j } from "thirdweb/chains";
7
+ import { ethers as M, keccak256 as ze, toUtf8Bytes as Be } from "ethers";
8
+ import { createContext as Ve, useContext as He, useEffect as Ue, useRef as We, useState as Ge } from "react";
9
+ import { NO_EXPIRATION as Ke, SchemaEncoder as qe, SchemaRegistry as Je, ZERO_ADDRESS as Ye, ZERO_BYTES32 as Xe } from "@ethereum-attestation-service/eas-sdk";
10
+ import { assign as N, createActor as Ze, enqueueActions as Qe, fromCallback as P, fromPromise as F, setup as $e } from "xstate";
11
+ import et from "arweave";
12
+ import I from "debug";
13
+ import { and as tt, desc as nt, eq as L } from "drizzle-orm";
14
+ import { createWallet as rt, inAppWallet as it } from "thirdweb/wallets";
15
+ import { useActiveAccount as at } from "thirdweb/react";
16
+ import { getInstalledModules as ot, installModule as st } from "thirdweb/modules";
17
+ import { PUBLISH_AUTHORIZATION_DEFAULT_EXPIRATION_SECS as ct, PUBLISH_AUTHORIZATION_SCHEMA_DEF as lt, PUBLISH_AUTHORIZATION_SCHEMA_DEF as ut, PUBLISH_AUTHORIZATION_SCHEMA_NAME as dt, PUBLISH_AUTHORIZATION_SCHEMA_NAME as ft, PUBLISH_AUTHORIZATION_SCOPES as pt, PUBLISH_AUTHORIZATION_SCOPES as mt, assessPublishAuthorization as ht, decodePublishAuthorizationData as gt, getPublishAuthorizationFromEas as _t, isValidEasAttestationUid as vt, normalizeBytes32Hex as yt } from "@seedprotocol/eas";
18
+ //#region src/react/PublishConfigContext.tsx
19
+ var bt = Ve(null);
20
+ function xt() {
21
+ let e = He(bt);
22
+ if (!e) throw Error("usePublishConfig: PublishConfig is missing. Pass config to PublishProvider or call initPublish() before render.");
23
+ return e;
24
+ }
25
+ //#endregion
26
+ //#region src/helpers/schemaRegistry.ts
27
+ async function R(e) {
28
+ return oe(e);
29
+ }
30
+ function St(e) {
31
+ return f(e);
32
+ }
33
+ //#endregion
34
+ //#region src/helpers/nameSchemaAttestation.ts
35
+ var Ct = "0x0000000000000000000000000000000000000000";
36
+ function wt(e) {
37
+ let t = new qe("bytes32 schemaId,string name").encodeData([{
38
+ name: "schemaId",
39
+ value: e.schemaUid,
40
+ type: "bytes32"
41
+ }, {
42
+ name: "name",
43
+ value: e.schemaName,
44
+ type: "string"
45
+ }]);
46
+ return ee({
47
+ schema: y,
48
+ data: {
49
+ recipient: Ct,
50
+ expirationTime: BigInt(Ke),
51
+ revocable: !0,
52
+ refUID: Xe,
53
+ data: t,
54
+ value: 0n
55
+ }
56
+ });
57
+ }
58
+ //#endregion
59
+ //#region src/services/publish/helpers/ensureEasSchemas.ts
60
+ var z = "0x0000000000000000000000000000000000000000", B = !0;
61
+ function Tt(e) {
62
+ return e.replace(/([a-z])([A-Z])/g, "$1_$2").toLowerCase();
63
+ }
64
+ async function Et(e) {
65
+ let { itemRelationProperties: t, itemImageProperties: n, itemListProperties: r } = await be(e), i = /* @__PURE__ */ new Set();
66
+ e.modelName && i.add(e.modelName);
67
+ for (let e of t) {
68
+ let t = e.propertyDef?.ref;
69
+ t && i.add(t);
70
+ }
71
+ for (let e of n) {
72
+ let t = e.propertyDef?.dataType;
73
+ t === "File" ? i.add("File") : t === "Html" ? i.add("Html") : i.add("Image");
74
+ }
75
+ for (let e of r) {
76
+ let t = e.propertyDef?.ref;
77
+ t && i.add(t);
78
+ }
79
+ return i;
80
+ }
81
+ async function V(e, t) {
82
+ let n = await e.sendTransaction(t);
83
+ await _(n.transactionHash);
84
+ }
85
+ async function Dt(e, t) {
86
+ let n = S(t) ? t.txSender : b(t) ? t : (() => {
87
+ throw Error("@seedprotocol/publish: ensureEasSchemasForItem requires a PublishWallet or SeedTxSender");
88
+ })(), { itemBasicProperties: r, itemRelationProperties: i, itemImageProperties: a, itemListProperties: o } = await be(e), s = [
89
+ ...r,
90
+ ...i,
91
+ ...a,
92
+ ...o
93
+ ], c = /* @__PURE__ */ new Set(), l = await Et(e), u = /* @__PURE__ */ new Set();
94
+ for (let e of l) {
95
+ let t = `bytes32 ${Tt(e)}`, r = Je.getSchemaUID(t, z, B);
96
+ if (await R(r)) {
97
+ Oe({
98
+ modelName: e,
99
+ schemaUid: r
100
+ });
101
+ continue;
102
+ }
103
+ if (u.has(r)) {
104
+ Oe({
105
+ modelName: e,
106
+ schemaUid: r
107
+ });
108
+ continue;
109
+ }
110
+ try {
111
+ await V(n, St({
112
+ schema: t,
113
+ resolverAddress: z,
114
+ revocable: B
115
+ }));
116
+ } catch (t) {
117
+ throw Error(`Failed to register EAS schema for model ${e}: ${t instanceof Error ? t.message : String(t)}`);
118
+ }
119
+ try {
120
+ await V(n, wt({
121
+ schemaUid: r,
122
+ schemaName: Tt(e)
123
+ }));
124
+ } catch (t) {
125
+ throw Error(`Failed to name EAS schema for model ${e}: ${t instanceof Error ? t.message : String(t)}`);
126
+ }
127
+ u.add(r), Oe({
128
+ modelName: e,
129
+ schemaUid: r
130
+ });
131
+ }
132
+ let d = "string storage_transaction_id", f = Je.getSchemaUID(d, z, B);
133
+ if (await R(f)) A({
134
+ text: d,
135
+ schemaUid: f
136
+ });
137
+ else if (!c.has(f) && (l.has("Image") || l.has("File") || l.has("Html"))) {
138
+ try {
139
+ await V(n, St({
140
+ schema: d,
141
+ resolverAddress: z,
142
+ revocable: B
143
+ })), await V(n, wt({
144
+ schemaUid: f,
145
+ schemaName: "storage_transaction_id"
146
+ }));
147
+ } catch (e) {
148
+ throw Error(`Failed to register EAS schema for storageTransactionId: ${e instanceof Error ? e.message : String(e)}`);
149
+ }
150
+ c.add(f), A({
151
+ text: d,
152
+ schemaUid: f
153
+ });
154
+ }
155
+ for (let e of s) {
156
+ if (!e.propertyDef) continue;
157
+ let t = fe[e.propertyDef.dataType]?.eas ?? "string", r = e, i = r.storagePropertyName && r.storagePropertyName.length > 0 ? r.storagePropertyName : e.propertyName, a = Tt(i), o = `${t} ${a}`, s = [
158
+ "string",
159
+ "address",
160
+ "bool",
161
+ "bytes",
162
+ "bytes32",
163
+ "uint8",
164
+ "uint16",
165
+ "uint32",
166
+ "uint64",
167
+ "uint128",
168
+ "uint256"
169
+ ].includes(t) ? t : void 0, l = await _e({
170
+ schemaUid: e.schemaUid,
171
+ propertyName: i,
172
+ easDataType: s
173
+ });
174
+ if (l) {
175
+ let e = await R(l.id);
176
+ if (e && e.schema === o) {
177
+ A({
178
+ text: o,
179
+ schemaUid: l.id
180
+ });
181
+ continue;
182
+ }
183
+ }
184
+ let u = Je.getSchemaUID(o, z, B);
185
+ if (await R(u)) {
186
+ A({
187
+ text: o,
188
+ schemaUid: u
189
+ });
190
+ continue;
191
+ }
192
+ if (c.has(u)) {
193
+ A({
194
+ text: o,
195
+ schemaUid: u
196
+ });
197
+ continue;
198
+ }
199
+ try {
200
+ await V(n, St({
201
+ schema: o,
202
+ resolverAddress: z,
203
+ revocable: B
204
+ }));
205
+ } catch (t) {
206
+ throw Error(`Failed to register EAS schema for property ${e.propertyName}: ${t instanceof Error ? t.message : String(t)}`);
207
+ }
208
+ try {
209
+ await V(n, wt({
210
+ schemaUid: u,
211
+ schemaName: a
212
+ }));
213
+ } catch (t) {
214
+ throw Error(`Failed to name EAS schema for property ${e.propertyName}: ${t instanceof Error ? t.message : String(t)}`);
215
+ }
216
+ c.add(u), A({
217
+ text: o,
218
+ schemaUid: u
219
+ });
220
+ }
221
+ let p = await ye(e);
222
+ for (let e of p) await Dt(e, n);
223
+ }
224
+ //#endregion
225
+ //#region src/helpers/blockchain.ts
226
+ var H = () => {
227
+ let e = de.getHost(), t = et;
228
+ return Object.keys(t).includes("default") && t.default ? t.default.init({
229
+ host: e,
230
+ protocol: "https"
231
+ }) : t.init({
232
+ host: e,
233
+ protocol: "https"
234
+ });
235
+ }, U = "0x" + "0".repeat(64), Ot = async (e) => {
236
+ let t;
237
+ try {
238
+ t = await O.find({ seedLocalId: e });
239
+ } catch {}
240
+ return t || new Promise((t) => {
241
+ let n = setInterval(() => {
242
+ try {
243
+ O.find({ seedLocalId: e }).then((e) => {
244
+ e && (clearInterval(n), t(e));
245
+ });
246
+ } catch {}
247
+ }, 200);
248
+ });
249
+ };
250
+ function kt(e) {
251
+ if (!e || typeof e != "object") return;
252
+ let t = e;
253
+ if (Array.isArray(t.data_root)) return {
254
+ data_root: new Uint8Array(t.data_root),
255
+ chunks: (t.chunks ?? []).map((e) => ({
256
+ ...e,
257
+ dataHash: new Uint8Array(e.dataHash ?? [])
258
+ })),
259
+ proofs: (t.proofs ?? []).map((e) => ({
260
+ ...e,
261
+ proof: new Uint8Array(e.proof ?? [])
262
+ }))
263
+ };
264
+ }
265
+ function At(e) {
266
+ return {
267
+ data_root: Array.from(e.data_root),
268
+ chunks: e.chunks.map((e) => ({
269
+ ...e,
270
+ dataHash: Array.from(e.dataHash)
271
+ })),
272
+ proofs: e.proofs.map((e) => ({
273
+ ...e,
274
+ proof: Array.from(e.proof)
275
+ }))
276
+ };
277
+ }
278
+ //#endregion
279
+ //#region src/services/publish/actors/createArweaveTransactions.ts
280
+ var jt = F(async ({ input: { context: e } }) => {
281
+ let { item: t } = e;
282
+ t.getPublishUploads || (t = await Ot(t.seedLocalId));
283
+ let n = {};
284
+ e.arweaveUploadTags?.length && (n.arweaveUploadTags = e.arweaveUploadTags);
285
+ let r = e.htmlEmbeddedDeferredHtmlSeedLocalIds;
286
+ r?.length && (n.deferHtmlStorageSeedLocalIds = r);
287
+ let i = await t.getPublishUploads(Object.keys(n).length ? n : void 0), a = C(), o = e.signArweaveTransactions ?? a.signArweaveTransactions, s = e.arweaveJwk ?? a.arweaveJwk, c = i.map((e) => ({
288
+ versionLocalId: e.versionLocalId,
289
+ itemPropertyName: e.itemPropertyName,
290
+ transactionJson: e.transactionToSign.toJSON()
291
+ })), l;
292
+ if (o) l = await o(c);
293
+ else if (s) {
294
+ let e = H(), t = s;
295
+ l = [];
296
+ for (let n of c) {
297
+ let r = e.transactions.fromRaw(n.transactionJson);
298
+ r.data && r.data.byteLength > 0 && !r.chunks && await r.prepareChunks(r.data), await e.transactions.sign(r, t);
299
+ let i = r.toJSON();
300
+ l.push({
301
+ transaction: {
302
+ ...i,
303
+ chunks: r.chunks ? At(r.chunks) : void 0
304
+ },
305
+ versionId: n.versionLocalId,
306
+ modelName: n.itemPropertyName
307
+ });
308
+ }
309
+ } else throw Error("Arweave signing not configured. Provide signArweaveTransactions or arweaveJwk at createPublish or in PublishProvider config.");
310
+ let u = H();
311
+ return {
312
+ arweaveTransactions: l.map((e) => {
313
+ let { chunks: t, ...n } = e.transaction, r = { ...n }, i = kt(t);
314
+ return i && (r.chunks = i), {
315
+ transaction: u.transactions.fromRaw(r),
316
+ versionId: e.versionId,
317
+ modelName: e.modelName
318
+ };
319
+ }),
320
+ publishUploads: i
321
+ };
322
+ }), Mt = F(async ({ input: { context: e } }) => {
323
+ let { item: t } = e;
324
+ t.getPublishUploads || (t = await Ot(t.seedLocalId));
325
+ let n = {};
326
+ e.arweaveUploadTags?.length && (n.arweaveUploadTags = e.arweaveUploadTags);
327
+ let r = e.htmlEmbeddedDeferredHtmlSeedLocalIds;
328
+ r?.length && (n.onlyHtmlStorageSeedLocalIds = r, n.skipRelationRecursion = !0);
329
+ let i = await t.getPublishUploads(Object.keys(n).length ? n : void 0), a = C(), o = e.signArweaveTransactions ?? a.signArweaveTransactions, s = e.arweaveJwk ?? a.arweaveJwk, c = i.map((e) => ({
330
+ versionLocalId: e.versionLocalId,
331
+ itemPropertyName: e.itemPropertyName,
332
+ transactionJson: e.transactionToSign.toJSON()
333
+ })), l;
334
+ if (o) l = await o(c);
335
+ else if (s) {
336
+ let e = H(), t = s;
337
+ l = [];
338
+ for (let n of c) {
339
+ let r = e.transactions.fromRaw(n.transactionJson);
340
+ r.data && r.data.byteLength > 0 && !r.chunks && await r.prepareChunks(r.data), await e.transactions.sign(r, t);
341
+ let i = r.toJSON();
342
+ l.push({
343
+ transaction: {
344
+ ...i,
345
+ chunks: r.chunks ? At(r.chunks) : void 0
346
+ },
347
+ versionId: n.versionLocalId,
348
+ modelName: n.itemPropertyName
349
+ });
350
+ }
351
+ } else throw Error("Arweave signing not configured. Provide signArweaveTransactions or arweaveJwk at createPublish or in PublishProvider config.");
352
+ let u = H();
353
+ return {
354
+ arweaveTransactions: l.map((e) => {
355
+ let { chunks: t, ...n } = e.transaction, r = { ...n }, i = kt(t);
356
+ return i && (r.chunks = i), {
357
+ transaction: u.transactions.fromRaw(r),
358
+ versionId: e.versionId,
359
+ modelName: e.modelName
360
+ };
361
+ }),
362
+ publishUploads: i
363
+ };
364
+ }), Nt = F(async ({ input: { context: e } }) => {
365
+ let t = e.htmlEmbeddedDataUriPolicy ?? "materialize";
366
+ return { deferredHtmlSeedLocalIds: (await Te(e.item, t)).deferredHtmlSeedLocalIds };
367
+ });
368
+ //#endregion
369
+ //#region src/services/publish/actors/rewritingHtmlEmbedded.ts
370
+ function Pt(e, t) {
371
+ let n = [], r = Math.min(e?.length ?? 0, t?.length ?? 0);
372
+ for (let i = 0; i < r; i++) {
373
+ let r = e[i], a = t[i], o = r.transaction?.id;
374
+ typeof o == "string" && o.length > 0 && n.push({
375
+ txId: o,
376
+ seedLocalId: a.seedLocalId,
377
+ versionLocalId: a.versionLocalId
378
+ });
379
+ }
380
+ return n;
381
+ }
382
+ var Ft = F(async ({ input: { context: e } }) => {
383
+ let t = Pt(e.htmlEmbeddedPhase1ArweaveTransactions, e.htmlEmbeddedPhase1PublishUploads);
384
+ await De(e.item.seedLocalId, t);
385
+ }), It = (e, t, n) => {
386
+ let r = [];
387
+ return e && r.push({
388
+ name: "Content-SHA-256",
389
+ value: e
390
+ }), t && r.push({
391
+ name: "Content-Type",
392
+ value: t
393
+ }), n?.length && r.push(...n), r;
394
+ }, Lt = async (e) => {
395
+ let t = (e instanceof Uint8Array, new Uint8Array(e)), n = await crypto.subtle.digest("SHA-256", t);
396
+ return Array.from(new Uint8Array(n)).map((e) => e.toString(16).padStart(2, "0")).join("");
397
+ }, Rt = {
398
+ png: "image/png",
399
+ jpg: "image/jpeg",
400
+ jpeg: "image/jpeg",
401
+ gif: "image/gif",
402
+ webp: "image/webp",
403
+ svg: "image/svg+xml",
404
+ html: "text/html",
405
+ htm: "text/html",
406
+ json: "application/json",
407
+ txt: "text/plain"
408
+ }, zt = (e) => {
409
+ let t = e.split(".").pop()?.toLowerCase();
410
+ return t ? Rt[t] : void 0;
411
+ }, Bt = async (e) => typeof Blob < "u" && e instanceof Blob ? new Uint8Array(await e.arrayBuffer()) : new Uint8Array(e), Vt = (e) => {
412
+ switch (e) {
413
+ case "Image": return D.getFilesPath("images");
414
+ case "File": return D.getFilesPath("files");
415
+ case "Html": return D.getFilesPath("html");
416
+ case "Json": return D.getFilesPath("json");
417
+ default: return D.getFilesPath("images");
418
+ }
419
+ }, Ht = /^data:(image\/[a-zA-Z0-9.+-]+);base64,([\s\S]*)$/i;
420
+ function Ut(e) {
421
+ let t = Ht.exec((e ?? "").trim());
422
+ if (!t) return null;
423
+ try {
424
+ let e = t[1].toLowerCase().trim(), n = t[2].replace(/\s/g, "");
425
+ return {
426
+ mimeType: e,
427
+ bytes: Uint8Array.from(atob(n), (e) => e.charCodeAt(0))
428
+ };
429
+ } catch {
430
+ return null;
431
+ }
432
+ }
433
+ var Wt = async (e, t, n, r) => {
434
+ let i = r?.arweaveUploadTags, a = e.itemProperty, o = [];
435
+ for (let t of e.childProperties) {
436
+ let e = t.localStoragePath;
437
+ e && !e.endsWith("undefined") && await D.pathExists(e) && o.push({
438
+ propertyName: t.propertyName,
439
+ localStoragePath: e
440
+ });
441
+ }
442
+ let s;
443
+ if ((!o || o.length === 0) && n?.localStoragePath) {
444
+ let e = n.localStoragePath;
445
+ if (e && !e.endsWith("undefined") && await D.pathExists(e)) try {
446
+ s = await Bt(await D.readFileAsBuffer(e));
447
+ } catch {
448
+ s = await Bt((await D.getFs()).readFileSync(e));
449
+ }
450
+ }
451
+ if (o.length > 0) {
452
+ let e = "===FILE_SEPARATOR===", t = "", n = await D.getFs();
453
+ for (let r of o) {
454
+ let i;
455
+ try {
456
+ i = await n.promises.readFile(r.localStoragePath);
457
+ } catch {
458
+ i = n.readFileSync(r.localStoragePath);
459
+ }
460
+ t += `${e}${r.propertyName}${e}${i}`;
461
+ }
462
+ s = typeof document < "u" ? new TextEncoder().encode(t) : new Uint8Array(Buffer.from(t));
463
+ }
464
+ if (!s) return t;
465
+ let c = new Uint8Array(s), l = await Lt(c), u;
466
+ o.length === 0 && n?.localStoragePath ? u = zt(n.localStoragePath) : o.length > 0 && (u = "application/octet-stream");
467
+ let d = n ? n.localId : a.localId, f = n ? n.propertyName : a.propertyName;
468
+ return t.push({
469
+ data: c,
470
+ contentHash: l,
471
+ contentType: u,
472
+ tags: It(l, u, i),
473
+ itemPropertyName: f,
474
+ itemPropertyLocalId: d,
475
+ seedLocalId: a.seedLocalId,
476
+ versionLocalId: a.versionLocalId
477
+ }), t;
478
+ }, Gt = async (e, t) => {
479
+ let n = [], r = t?.arweaveUploadTags;
480
+ for (let i of e) {
481
+ let e = i.getService().getSnapshot(), a = "context" in e ? e.context : null;
482
+ if (!a) continue;
483
+ let o = a.propertyValue, s = a.refResolvedValue;
484
+ if (!s) continue;
485
+ let { localId: c } = ge(o ?? "");
486
+ if (!c) continue;
487
+ let l = i.propertyDef?.refValueType ?? i.propertyDef?.dataType ?? "Image";
488
+ if (l === pe.Html) {
489
+ if (t?.deferHtmlStorageSeedLocalIds?.includes(c) || t?.onlyHtmlStorageSeedLocalIds?.length && !t.onlyHtmlStorageSeedLocalIds.includes(c)) continue;
490
+ } else if (t?.onlyHtmlStorageSeedLocalIds?.length) continue;
491
+ let u = `${Vt(l)}/${s}`;
492
+ if (!await D.pathExists(u)) continue;
493
+ let d = await Bt(await D.readFileAsBuffer(u)), f = await Lt(d), p = zt(s);
494
+ n.push({
495
+ data: d,
496
+ contentHash: f,
497
+ contentType: p,
498
+ tags: It(f, p, r),
499
+ itemPropertyName: i.propertyName,
500
+ itemPropertyLocalId: i.localId,
501
+ seedLocalId: c,
502
+ versionLocalId: i.versionLocalId
503
+ });
504
+ }
505
+ return n;
506
+ };
507
+ async function Kt(e, t, n) {
508
+ let r = E.getAppDb();
509
+ if (!r || n?.onlyHtmlStorageSeedLocalIds?.length) return t;
510
+ let i = await r.select().from(Se).where(L(Se.parentSeedLocalId, e.seedLocalId)), a = new Set(t.map((e) => e.seedLocalId));
511
+ for (let e of i) {
512
+ if (a.has(e.imageSeedLocalId)) continue;
513
+ let r = await O.find({
514
+ seedLocalId: e.imageSeedLocalId,
515
+ modelName: "Image"
516
+ });
517
+ if (!r) continue;
518
+ let i = r.internalProperties.storageTransactionId ?? r.allProperties.storageTransactionId, o = i?.getService().getSnapshot(), s = o && "context" in o ? o.context : void 0, c = Ut(typeof s?.propertyValue == "string" ? s.propertyValue ?? "" : ""), l = [];
519
+ if (c && i && i.localId && i.versionLocalId) {
520
+ let e = await Lt(c.bytes);
521
+ l = [{
522
+ data: c.bytes,
523
+ contentHash: e,
524
+ contentType: c.mimeType,
525
+ tags: It(e, c.mimeType, n?.arweaveUploadTags),
526
+ itemPropertyName: i.propertyName,
527
+ itemPropertyLocalId: i.localId,
528
+ seedLocalId: r.seedLocalId,
529
+ versionLocalId: i.versionLocalId
530
+ }];
531
+ }
532
+ for (let e of l) a.has(e.seedLocalId) || (t.push(e), a.add(e.seedLocalId));
533
+ }
534
+ return t;
535
+ }
536
+ var qt = async (e, t = [], n, r) => {
537
+ let { itemUploadProperties: i, itemRelationProperties: a, itemImageProperties: o } = await be(e);
538
+ if (!n && r?.onlyHtmlStorageSeedLocalIds?.length) {
539
+ let e = await Gt(o, r);
540
+ return t.push(...e), t;
541
+ }
542
+ for (let e of i) t = await Wt(e, t, n, r);
543
+ let s = await Gt(o, r);
544
+ if (t.push(...s), !n && !r?.onlyHtmlStorageSeedLocalIds?.length && (t = await Kt(e, t, r)), r?.skipRelationRecursion) return t;
545
+ for (let e of a) {
546
+ let n = e.getService().getSnapshot(), i = "context" in n ? n.context : null;
547
+ if (!i) continue;
548
+ let a = i.propertyValue;
549
+ if (!a || e.uid) continue;
550
+ let { localId: o, uid: s } = ge(a), c = await O.find({
551
+ seedLocalId: o,
552
+ seedUid: s
553
+ });
554
+ if (!c) throw Error(`No relatedItem found for ${e.propertyName}`);
555
+ t = await qt(c, t, e, r);
556
+ }
557
+ return t;
558
+ }, Jt = 3, Yt = new TextEncoder().encode("seed-recovery"), Xt = 32, Zt = 18446744073709551615n;
559
+ function Qt(e, t, n) {
560
+ let r = M.solidityPackedKeccak256([
561
+ "uint256",
562
+ "address",
563
+ "uint64"
564
+ ], [
565
+ BigInt(t),
566
+ e,
567
+ n & Zt
568
+ ]);
569
+ return M.getBytes(r);
570
+ }
571
+ function $t(e) {
572
+ if (e.length === 0) return new Uint8Array([0]);
573
+ if (e.length !== Xt) throw Error(`ANS-104 target/anchor must be empty or ${Xt} bytes, got ${e.length}`);
574
+ let t = /* @__PURE__ */ new Uint8Array(33);
575
+ return t[0] = 1, t.set(e, 1), t;
576
+ }
577
+ function en(e) {
578
+ return typeof e == "object" && !!e && "privateKey" in e && typeof e.privateKey == "string";
579
+ }
580
+ function tn(e, t, n) {
581
+ let r = e >= 0 ? e << 1 : ~e << 1 | 1, i = n;
582
+ do {
583
+ let e = r & 127;
584
+ r >>>= 7, t[i++] = r ? e | 128 : e;
585
+ } while (r);
586
+ return i - n;
587
+ }
588
+ var nn = (e) => {
589
+ if (!e?.length) return /* @__PURE__ */ new Uint8Array();
590
+ let t = new TextEncoder(), n = /* @__PURE__ */ new Uint8Array(16), r = [], i = (e) => {
591
+ let t = tn(e, n, 0);
592
+ r.push(n.slice(0, t));
593
+ };
594
+ i(e.length);
595
+ for (let n of e) {
596
+ let e = t.encode(n.name), a = t.encode(n.value);
597
+ i(e.length), r.push(e), i(a.length), r.push(a);
598
+ }
599
+ i(0);
600
+ let a = r.reduce((e, t) => e + t.length, 0), o = new Uint8Array(a), s = 0;
601
+ for (let e of r) o.set(e, s), s += e.length;
602
+ return o;
603
+ }, rn = (e) => {
604
+ let t = /* @__PURE__ */ new Uint8Array(8), n = new DataView(t.buffer);
605
+ return n.setUint32(0, e & 4294967295, !0), n.setUint32(4, Math.floor(e / 4294967296), !0), t;
606
+ };
607
+ async function an(e) {
608
+ return new Uint8Array(await crypto.subtle.digest("SHA-384", e));
609
+ }
610
+ function on(e, t) {
611
+ let n = new Uint8Array(e.length + t.length);
612
+ return n.set(e, 0), n.set(t, e.length), n;
613
+ }
614
+ async function sn(e) {
615
+ let t = new TextEncoder();
616
+ if (Array.isArray(e)) {
617
+ let n = await an(on(t.encode("list"), t.encode(e.length.toString())));
618
+ for (let t of e) {
619
+ let e = await sn(t);
620
+ n = await an(on(n, e));
621
+ }
622
+ return n;
623
+ }
624
+ return an(on(await an(on(t.encode("blob"), t.encode(e.byteLength.toString()))), await an(e)));
625
+ }
626
+ async function cn(e, t, n, r, i) {
627
+ let a = new TextEncoder();
628
+ return sn([
629
+ a.encode("dataitem"),
630
+ a.encode("1"),
631
+ a.encode(Jt.toString()),
632
+ e,
633
+ t,
634
+ n,
635
+ r,
636
+ i
637
+ ]);
638
+ }
639
+ function ln(e, t, n, r, i) {
640
+ let a = nn(t), o = rn(t.length), s = rn(a.length), c = [
641
+ e,
642
+ $t(r),
643
+ $t(i),
644
+ o,
645
+ s,
646
+ a,
647
+ n
648
+ ], l = c.reduce((e, t) => e + t.length, 0), u = new Uint8Array(l), d = 0;
649
+ for (let e of c) u.set(e, d), d += e.length;
650
+ return u;
651
+ }
652
+ async function un(e, t) {
653
+ let n = /* @__PURE__ */ new Uint8Array(2);
654
+ new DataView(n.buffer).setUint16(0, Jt, !0);
655
+ let r = 67 + t.length, i = new Uint8Array(r);
656
+ i.set(n, 0), i.set(e, 2), i.set(t, 67);
657
+ let a = await crypto.subtle.digest("SHA-256", new Uint8Array(e));
658
+ return {
659
+ id: gn(new Uint8Array(a)),
660
+ raw: i
661
+ };
662
+ }
663
+ var dn = async (e, t, n, r = /* @__PURE__ */ new Uint8Array()) => {
664
+ let i = M.SigningKey.computePublicKey(t.privateKey, !1), a = M.getBytes(i), o = nn(n), s = /* @__PURE__ */ new Uint8Array(), c = await cn(a, s, r, o, e);
665
+ return un(M.getBytes(await t.signMessage(c)), ln(a, n, e, s, r));
666
+ }, fn = async (e, t, n, r = /* @__PURE__ */ new Uint8Array()) => {
667
+ let i = M.hexlify(Yt), a = await t.signMessage({ message: { raw: i } }), o = M.hashMessage(Yt), s = M.SigningKey.recoverPublicKey(o, a), c = M.getBytes(s), l = nn(n), u = /* @__PURE__ */ new Uint8Array(), d = await cn(c, u, r, l, e), f = M.hexlify(d), p = await t.signMessage({ message: { raw: f } });
668
+ return un(M.getBytes(p), ln(c, n, e, u, r));
669
+ };
670
+ function pn(e) {
671
+ if (e.length < 133) return null;
672
+ let t = e[132];
673
+ if (t !== 0 && t !== 1) return null;
674
+ let n = t === 1;
675
+ if (n && e.length < 165) return null;
676
+ let r = 132 + (n ? 33 : 1);
677
+ if (e.length < r + 1) return null;
678
+ let i = e[r];
679
+ if (i !== 0 && i !== 1) return null;
680
+ let a = i === 1;
681
+ return a && e.length < r + 33 ? null : r + (a ? 33 : 1);
682
+ }
683
+ function mn(e) {
684
+ let t = pn(e);
685
+ if (t == null) return null;
686
+ let n = e[132] === 1, r = n ? e.slice(133, 165) : /* @__PURE__ */ new Uint8Array(), i = 132 + (n ? 33 : 1);
687
+ return {
688
+ rawTarget: r,
689
+ rawAnchor: e[i] === 1 ? e.slice(i + 1, i + 33) : /* @__PURE__ */ new Uint8Array(),
690
+ tagsStart: t
691
+ };
692
+ }
693
+ async function hn(e) {
694
+ let t = mn(e);
695
+ if (t == null) return !1;
696
+ let { rawTarget: n, rawAnchor: r, tagsStart: i } = t, a = i + 16;
697
+ if (e.length < a) return !1;
698
+ let o = new DataView(e.buffer, e.byteOffset, e.byteLength);
699
+ if (o.getUint16(0, !0) !== Jt) return !1;
700
+ let s = e.slice(2, 67), c = e.slice(67, 132), l = Number(o.getUint32(i + 8, !0) + o.getUint32(i + 12, !0) * 4294967296), u = i + 16 + l;
701
+ if (e.length < u) return !1;
702
+ let d = e.slice(i + 16, u), f = e.slice(u);
703
+ try {
704
+ let e = await cn(c, n, r, d, f), t = M.hashMessage(e), i = M.hexlify(s), a = M.SigningKey.recoverPublicKey(t, i), o = M.getBytes(a);
705
+ return o.length === c.length && o.every((e, t) => e === c[t]);
706
+ } catch {
707
+ return !1;
708
+ }
709
+ }
710
+ var gn = (e) => {
711
+ let t = "";
712
+ for (let n of e) t += String.fromCharCode(n);
713
+ return btoa(t).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
714
+ }, _n = I("seedProtocol:createArweaveDataItems");
715
+ async function vn(e, t, n) {
716
+ let r, i;
717
+ if (t) r = (await t(e)).map((e) => ({
718
+ transaction: { id: e.transaction.id },
719
+ versionId: e.versionId,
720
+ modelName: e.modelName
721
+ }));
722
+ else if (n) {
723
+ let t = [], a = Date.now();
724
+ for (let r = 0; r < e.length; r++) {
725
+ let i = e[r], o = i.tags, s = /* @__PURE__ */ new Uint8Array(8);
726
+ crypto.getRandomValues(s);
727
+ let c = (new DataView(s.buffer).getBigUint64(0, !1) ^ BigInt(r)) & 18446744073709551615n, l;
728
+ if (en(n)) {
729
+ let e = Qt(n.address, a, c);
730
+ l = await dn(i.data, n, o, e);
731
+ } else {
732
+ let e = S(n) ? n.signer : n, t = Qt(e.address, a, c);
733
+ l = await fn(i.data, e, o, t);
734
+ }
735
+ if (!await hn(l.raw)) throw _n("DataItem verification failed: id=%s modelName=%s", l.id, i.itemPropertyName), Error(`DataItem signature verification failed for ${i.itemPropertyName}. The signing key may not match the owner, or the payload may have been modified.`);
736
+ t.push(l);
737
+ }
738
+ i = t, r = t.map((t, n) => ({
739
+ transaction: { id: t.id },
740
+ versionId: e[n]?.versionLocalId,
741
+ modelName: e[n]?.itemPropertyName
742
+ }));
743
+ } else throw Error("@seedprotocol/publish: useArweaveBundler requires signDataItems or dataItemSigner (pass at createPublish or in PublishProvider config)");
744
+ let a = e.map((e) => ({
745
+ itemPropertyName: e.itemPropertyName,
746
+ itemPropertyLocalId: e.itemPropertyLocalId,
747
+ seedLocalId: e.seedLocalId,
748
+ versionLocalId: e.versionLocalId,
749
+ transactionToSign: null
750
+ }));
751
+ return {
752
+ arweaveTransactions: r,
753
+ publishUploads: a,
754
+ signedDataItems: i
755
+ };
756
+ }
757
+ var yn = F(async ({ input: { context: e } }) => {
758
+ let { item: t } = e;
759
+ t.getPublishUploads || (t = await Ot(t.seedLocalId));
760
+ let n = {};
761
+ e.arweaveUploadTags?.length && (n.arweaveUploadTags = e.arweaveUploadTags);
762
+ let r = e.htmlEmbeddedDeferredHtmlSeedLocalIds;
763
+ r?.length && (n.deferHtmlStorageSeedLocalIds = r);
764
+ let i = await qt(t, [], void 0, Object.keys(n).length ? n : void 0), a = C();
765
+ return vn(i, e.signDataItems ?? a.signDataItems, e.dataItemSigner ?? a.dataItemSigner);
766
+ });
767
+ //#endregion
768
+ //#region src/services/publish/actors/createArweaveDataItemsPhase2.ts
769
+ async function bn(e) {
770
+ let { item: t } = e;
771
+ t.getPublishUploads || (t = await Ot(t.seedLocalId));
772
+ let n = {};
773
+ e.arweaveUploadTags?.length && (n.arweaveUploadTags = e.arweaveUploadTags);
774
+ let r = e.htmlEmbeddedDeferredHtmlSeedLocalIds;
775
+ r?.length && (n.onlyHtmlStorageSeedLocalIds = r, n.skipRelationRecursion = !0);
776
+ let i = await qt(t, [], void 0, Object.keys(n).length ? n : void 0), a = C(), o = e.signDataItems ?? a.signDataItems, s = e.dataItemSigner ?? a.dataItemSigner;
777
+ return i.length === 0 ? {
778
+ arweaveTransactions: [],
779
+ publishUploads: [],
780
+ signedDataItems: void 0
781
+ } : vn(i, o, s);
782
+ }
783
+ var xn = F(async ({ input: { context: e } }) => bn(e)), Sn = 8192;
784
+ function Cn(e) {
785
+ let t = new Uint8Array(e), n = "";
786
+ for (let e = 0; e < t.length; e += Sn) {
787
+ let r = t.subarray(e, Math.min(e + Sn, t.length));
788
+ n += String.fromCharCode.apply(null, r);
789
+ }
790
+ return btoa(n);
791
+ }
792
+ async function wn(e) {
793
+ let t = [];
794
+ for (let [n, r] of e.entries()) {
795
+ let e = r;
796
+ if (typeof e == "object" && e && "arrayBuffer" in e) {
797
+ let r = Cn(await e.arrayBuffer()), i = e;
798
+ t.push({
799
+ name: n,
800
+ value: r,
801
+ encoding: "base64",
802
+ filename: i.name || void 0
803
+ });
804
+ } else t.push({
805
+ name: n,
806
+ value: String(r)
807
+ });
808
+ }
809
+ return t;
810
+ }
811
+ function Tn(e, t, n) {
812
+ let r = ["Upload server returned ", String(e)], i = t && typeof t == "object" && "message" in t ? String(t.message) : t && typeof t == "object" && "error" in t ? String(t.error) : null;
813
+ return i ? r.push(`: ${i}`) : n && r.push(` (${n})`), r.join("");
814
+ }
815
+ function En(e) {
816
+ if (!e) return "Upload server unavailable. Please try again or check your connection.";
817
+ let t = e.toLowerCase();
818
+ return /other side closed|econnreset|socket hang up|connection closed/i.test(t) ? "Upload server closed the connection. It may be busy or the request may be too large—try again." : /etimedout|timeout/i.test(t) ? "Upload request timed out. Please try again." : /enotfound|getaddrinfo|dns/i.test(t) ? "Upload server could not be reached. Check the upload URL and your network." : "Upload failed. Please try again or check the upload server.";
819
+ }
820
+ async function Dn(e, t, n) {
821
+ let r = typeof window < "u" ? window.Main : void 0;
822
+ if (r?.uploadArweaveStart) {
823
+ let n = await wn(t);
824
+ return r.uploadArweaveStart(e, n);
825
+ }
826
+ let i = await fetch(e, {
827
+ method: "POST",
828
+ body: t
829
+ }), a = await i.json().catch(() => ({}));
830
+ return {
831
+ status: i.status,
832
+ body: a
833
+ };
834
+ }
835
+ //#endregion
836
+ //#region src/services/publish/actors/sendReimbursementRequest.ts
837
+ var On = F(async ({ input: { context: e, event: t } }) => {
838
+ let { arweaveTransactions: n = [], transactionKeys: r, reimbursementTransactionId: i } = e;
839
+ if (i) return { transactionId: i };
840
+ let a = n.map(({ transaction: e }) => e), o = new FormData();
841
+ for (let e of a) {
842
+ let { data: t, chunks: n, ...r } = e, i = t instanceof Blob ? t : new Blob([t]);
843
+ o.append(`${e.id}-data`, i, `${e.id}-data`);
844
+ let a = new Blob([JSON.stringify(n)], { type: "application/json" });
845
+ o.append(`${e.id}-chunks`, a, `${e.id}-chunks`);
846
+ let s = new Blob([JSON.stringify(r)], { type: "application/json" });
847
+ o.append(`${e.id}-json`, s, `${e.id}-json`);
848
+ }
849
+ let { uploadApiBaseUrl: s } = C(), { status: c, body: l, message: u } = await Dn(`${s}/api/upload/arweave/start`, o, s);
850
+ if (c >= 300 || c < 200) {
851
+ let e = c === 0 ? u : null;
852
+ e && console.error("[upload]", e);
853
+ let t = c === 0 ? En(e) : Tn(c, l, r);
854
+ throw Error(t);
855
+ }
856
+ return l;
857
+ }), kn = F(async ({ input: { context: e, event: t } }) => {
858
+ let { requestResponse: n, reimbursementTransactionId: r } = e;
859
+ if (!n) throw Error("No request response");
860
+ if (!r) throw Error("No reimbursement transaction id");
861
+ let i = H();
862
+ await new Promise((e, t) => {
863
+ let n = setInterval(async () => {
864
+ let t;
865
+ try {
866
+ t = await i.transactions.getStatus(r);
867
+ } catch {
868
+ return;
869
+ }
870
+ t && t.confirmed && (clearInterval(n), e());
871
+ }, 5e3);
872
+ });
873
+ }), W = I("seedProtocol:services:publish:actors");
874
+ function An(e) {
875
+ if (e instanceof Uint8Array) return e;
876
+ if (e instanceof ArrayBuffer) return new Uint8Array(e);
877
+ throw Error("Transaction data must be Uint8Array or ArrayBuffer for upload resume");
878
+ }
879
+ var jn = P(({ sendBack: e, input: t }) => {
880
+ let n = t.context, r = (n.arweaveTransactions ?? []).map(({ transaction: e }) => e), i = H(), a = n.uploaderState && typeof n.currentTransactionIndex == "number", o = a ? n.currentTransactionIndex : 0;
881
+ (async () => {
882
+ let t = r.length;
883
+ for (let s = o; s < t; s++) {
884
+ let c = r[s];
885
+ if (!c) continue;
886
+ let l = i.transactions.fromRaw(c);
887
+ if (!await i.transactions.verify(l)) throw Error("Transaction verification failed");
888
+ let u, d = n.uploaderState;
889
+ if (a && s === o && d) {
890
+ let e = l.data, t = e instanceof Uint8Array ? e : An(e);
891
+ u = await i.transactions.getUploader(d, t);
892
+ } else u = await i.transactions.getUploader(l, l.data);
893
+ for (; !u.isComplete;) {
894
+ W("uploading chunk"), W(`uploader.pctComplete: ${u.pctComplete}`), W(`uploader.uploadedChunks: ${u.uploadedChunks}`), W(`uploader.totalChunks: ${u.totalChunks}`), W(u.lastResponseError), W(u.lastResponseStatus);
895
+ try {
896
+ await u.uploadChunk(), e({
897
+ type: "updatePercentage",
898
+ completionPercentage: Math.trunc((s + u.pctComplete / 100) / t * 100),
899
+ uploaderState: u.toJSON(),
900
+ currentTransactionIndex: s
901
+ }), W(`${u.pctComplete}% complete, ${u.uploadedChunks}/${u.totalChunks}`);
902
+ } catch (e) {
903
+ W(e);
904
+ }
905
+ }
906
+ }
907
+ return "done";
908
+ })().then((t) => {
909
+ e({
910
+ type: "uploadComplete",
911
+ result: t
912
+ });
913
+ }).catch((t) => {
914
+ e({
915
+ type: "uploadError",
916
+ error: t
917
+ });
918
+ });
919
+ }), Mn = 12e4, Nn = Function("s", "return import(s)"), Pn = null, Fn = async () => {
920
+ if (Pn) return Pn;
921
+ if (typeof window < "u") return null;
922
+ try {
923
+ let e = await Nn(`node:${["fs", "promises"].join("/")}`);
924
+ return Pn = {
925
+ readFile: e.readFile,
926
+ stat: e.stat
927
+ }, Pn;
928
+ } catch {
929
+ return null;
930
+ }
931
+ }, In = P(({ sendBack: e, input: { context: t } }) => {
932
+ let { signedDataItems: n } = t, { uploadApiBaseUrl: r, useArweaveBundler: i } = C();
933
+ if (!i || !r) {
934
+ e({
935
+ type: "uploadError",
936
+ error: /* @__PURE__ */ Error("Arweave bundler not configured. Set useArweaveBundler and uploadApiBaseUrl.")
937
+ });
938
+ return;
939
+ }
940
+ let a = `${r.replace(/\/$/, "")}/api/upload/arweave/batch`;
941
+ if (!n || n.length === 0) {
942
+ e({
943
+ type: "uploadComplete",
944
+ result: "done"
945
+ });
946
+ return;
947
+ }
948
+ (async () => {
949
+ let e = n, t = e.length, r = Array(t).fill(null), i = async (e, t) => {
950
+ let n = e;
951
+ if (n.raw != null && (n.raw instanceof Uint8Array || Buffer.isBuffer(n.raw))) return n.raw.byteLength;
952
+ if (typeof n.getRaw == "function") {
953
+ let e = n.getRaw(), i = e instanceof Promise ? await e : e, a = Buffer.isBuffer(i) ? i : Buffer.from(i);
954
+ return r[t] = a, a.length;
955
+ }
956
+ if (n.filename != null) {
957
+ let e = await Fn();
958
+ if (!e) throw Error("DataItem.filename requires Node.js fs access. In browser runtime, provide DataItem.raw or DataItem.getRaw().");
959
+ return (await e.stat(n.filename)).size;
960
+ }
961
+ throw Error("Cannot get raw bytes from DataItem");
962
+ }, o = 4, s = [];
963
+ for (let n = 0; n < t; n++) {
964
+ let t = await i(e[n], n);
965
+ s.push(t), o += 4 + t;
966
+ }
967
+ let c = Buffer.alloc(o), l = 0;
968
+ c.writeUInt32BE(t, l), l += 4;
969
+ for (let n = 0; n < t; n++) {
970
+ let t = s[n], i = r[n];
971
+ if (i) {
972
+ c.writeUInt32BE(t, l), l += 4, i.copy(c, l), l += t;
973
+ continue;
974
+ }
975
+ let a = e[n];
976
+ if (a.raw != null && (a.raw instanceof Uint8Array || Buffer.isBuffer(a.raw))) {
977
+ c.writeUInt32BE(t, l), l += 4, c.set(a.raw, l), l += t;
978
+ continue;
979
+ }
980
+ if (a.filename != null) {
981
+ let e = await Fn();
982
+ if (!e) throw Error("DataItem.filename requires Node.js fs access. In browser runtime, provide DataItem.raw or DataItem.getRaw().");
983
+ let t = await e.readFile(a.filename);
984
+ c.writeUInt32BE(t.length, l), l += 4, t.copy(c, l), l += t.length;
985
+ continue;
986
+ }
987
+ throw Error("Cannot get raw bytes from DataItem");
988
+ }
989
+ let u = new AbortController(), d = setTimeout(() => u.abort(), Mn), f;
990
+ try {
991
+ f = await fetch(a, {
992
+ method: "POST",
993
+ headers: { "Content-Type": "application/octet-stream" },
994
+ body: c,
995
+ signal: u.signal
996
+ });
997
+ } catch (e) {
998
+ throw clearTimeout(d), e instanceof Error && e.name === "AbortError" ? Error(`Arweave batch upload timed out after ${Mn / 1e3}s (upload API did not respond). Check uploadApiBaseUrl and network.`) : e;
999
+ }
1000
+ if (clearTimeout(d), !f.ok) throw Error(`Batch upload failed: ${f.status}`);
1001
+ let p = await f.json().catch(() => ({})), m = typeof p.failed == "number" ? p.failed : 0;
1002
+ if (m > 0) {
1003
+ let e = p.total ?? "?", t = p.succeeded ?? 0;
1004
+ throw Error(`Arweave batch upload failed: ${m} of ${e} item(s) failed (${t} succeeded)`);
1005
+ }
1006
+ })().then(() => e({
1007
+ type: "uploadComplete",
1008
+ result: "done"
1009
+ })).catch((t) => e({
1010
+ type: "uploadError",
1011
+ error: t
1012
+ }));
1013
+ }), Ln = /* @__PURE__ */ te({
1014
+ ExternalWalletsForDeploy: () => Qn,
1015
+ appMetadata: () => tr,
1016
+ deployManagedAccountViaFactory: () => er,
1017
+ deploySmartWalletContract: () => $n,
1018
+ getClient: () => G,
1019
+ getConnectedAccount: () => rr,
1020
+ getConnectedManagedAccountAddress: () => nr,
1021
+ getConnectedModularAccount: () => ir,
1022
+ getManagedAccountWallet: () => or,
1023
+ getModularAccountWallet: () => cr,
1024
+ getSharedPublishInAppWalletStorage: () => Vn,
1025
+ getSmartWalletAddressForAdmin: () => Jn,
1026
+ getWalletsForConnectButton: () => ur,
1027
+ isSmartWalletDeployed: () => Yn,
1028
+ pollSmartWalletDeployed: () => Xn,
1029
+ resolveSmartWalletForPublish: () => Zn,
1030
+ syncPublishInAppAuthToken: () => Hn,
1031
+ useActiveSmartWalletContract: () => qn,
1032
+ useLocalWalletAccount: () => Kn,
1033
+ wallets: () => Gn
1034
+ }), Rn = I("permaPress:helpers:thirdweb"), zn = "seedProtocol:inAppPublish:", Bn = null;
1035
+ function Vn() {
1036
+ return Bn ||= {
1037
+ getItem: async (e) => typeof window > "u" ? null : localStorage.getItem(zn + e),
1038
+ setItem: async (e, t) => {
1039
+ typeof window > "u" || localStorage.setItem(zn + e, t);
1040
+ },
1041
+ removeItem: async (e) => {
1042
+ typeof window > "u" || localStorage.removeItem(zn + e);
1043
+ }
1044
+ }, Bn;
1045
+ }
1046
+ function Hn() {
1047
+ if (typeof window > "u") return {
1048
+ syncedBareToPrefixed: !1,
1049
+ syncedPrefixedToBare: !1
1050
+ };
1051
+ let { thirdwebClientId: e } = C();
1052
+ if (!e) return {
1053
+ syncedBareToPrefixed: !1,
1054
+ syncedPrefixedToBare: !1
1055
+ };
1056
+ try {
1057
+ let t = `walletToken-${e}`, n = `${zn}${t}`, r = localStorage.getItem(t), i = localStorage.getItem(n), a = !1, o = !1;
1058
+ return r && !i && (localStorage.setItem(n, r), a = !0), i && !r && (localStorage.setItem(t, i), o = !0), i && r && r !== i && (localStorage.setItem(t, i), o = !0), {
1059
+ syncedBareToPrefixed: a,
1060
+ syncedPrefixedToBare: o
1061
+ };
1062
+ } catch {
1063
+ return {
1064
+ syncedBareToPrefixed: !1,
1065
+ syncedPrefixedToBare: !1
1066
+ };
1067
+ }
1068
+ }
1069
+ async function Un(e = j) {
1070
+ Hn();
1071
+ let t = or();
1072
+ return await t.autoConnect({
1073
+ client: G(),
1074
+ chain: e
1075
+ }), t;
1076
+ }
1077
+ var Wn = null;
1078
+ function G() {
1079
+ if (!Wn) {
1080
+ let { thirdwebClientId: e } = C();
1081
+ if (!e) throw Error("@seedprotocol/publish/thirdweb: thirdwebClientId is required. Pass it in initPublish / PublishProvider config.");
1082
+ Wn = Fe({ clientId: e });
1083
+ }
1084
+ return Wn;
1085
+ }
1086
+ var Gn = [rt("io.metamask")], Kn = () => {
1087
+ let [e, t] = Ge(null);
1088
+ return rt("io.metamask"), We(!1), Ue(() => {}, []), e;
1089
+ }, qn = () => {
1090
+ let e = at(), [t, n] = Ge(null);
1091
+ return Ue(() => {
1092
+ e && e.address && n(Le({
1093
+ client: G(),
1094
+ chain: j,
1095
+ address: e.address
1096
+ }));
1097
+ }, [e]), t;
1098
+ };
1099
+ async function Jn(e, t = "0x") {
1100
+ return s(e, t);
1101
+ }
1102
+ async function Yn(e) {
1103
+ return o(e);
1104
+ }
1105
+ async function Xn(e, t, n) {
1106
+ return g(e, t, n);
1107
+ }
1108
+ async function Zn(e) {
1109
+ if (!e) return { needsDeploy: !0 };
1110
+ if (await Yn(e.address)) return {
1111
+ address: e.address,
1112
+ account: e
1113
+ };
1114
+ let t = await Jn(e.address);
1115
+ return await Yn(t) ? {
1116
+ address: t,
1117
+ account: e
1118
+ } : { needsDeploy: !0 };
1119
+ }
1120
+ var Qn = [rt("io.metamask"), rt("me.rainbow")], $n = async (e) => {
1121
+ let t = Le({
1122
+ client: G(),
1123
+ chain: j,
1124
+ address: e.address
1125
+ }), n = await Ie({
1126
+ smartAccount: e,
1127
+ chain: j,
1128
+ client: G(),
1129
+ accountContract: t
1130
+ });
1131
+ return Rn("deploySmartAccount result:", n), n;
1132
+ };
1133
+ async function er(e) {
1134
+ let { asThirdwebPublishWallet: t } = await import("./config-DLoMtwmG.js").then((e) => e.c), n = t(e.signingAccount), r = d(e.adminAddress, e.data ?? "0x");
1135
+ await n.txSender.sendTransaction(r);
1136
+ }
1137
+ var tr = {
1138
+ name: "Seed Protocol",
1139
+ description: "Seed Protocol",
1140
+ url: "https://seedprotocol.io"
1141
+ };
1142
+ async function nr(e = j) {
1143
+ let t = (await Un(e)).getAccount();
1144
+ if (!t) throw Error("Failed to get managed account");
1145
+ return t.address;
1146
+ }
1147
+ async function rr() {
1148
+ try {
1149
+ let e = cr();
1150
+ return await e.autoConnect({
1151
+ client: G(),
1152
+ chain: j
1153
+ }), e.getAccount() ?? null;
1154
+ } catch {
1155
+ return null;
1156
+ }
1157
+ }
1158
+ async function ir() {
1159
+ return rr();
1160
+ }
1161
+ var ar = null, or = () => (ar ||= it({
1162
+ storage: Vn(),
1163
+ auth: { options: [
1164
+ "farcaster",
1165
+ "email",
1166
+ "passkey",
1167
+ "phone"
1168
+ ] },
1169
+ executionMode: {
1170
+ mode: "EIP4337",
1171
+ smartAccount: {
1172
+ chain: j,
1173
+ factoryAddress: re,
1174
+ gasless: !0
1175
+ }
1176
+ }
1177
+ }), ar), sr = null, cr = () => (sr ||= it({
1178
+ storage: Vn(),
1179
+ auth: { options: [
1180
+ "farcaster",
1181
+ "email",
1182
+ "passkey",
1183
+ "phone"
1184
+ ] },
1185
+ executionMode: {
1186
+ mode: "EIP7702",
1187
+ sponsorGas: !0
1188
+ }
1189
+ }), sr), lr = null, ur = () => (lr ||= C().useModularExecutor ? [cr()] : [or()], lr), dr = "The executor module could not be installed on your publishing account on Optimism Sepolia. Reconnect and try again, or contact support if this persists.";
1190
+ async function fr(e, t, n) {
1191
+ let { modularAccountModuleContract: r } = n;
1192
+ if (!r) return;
1193
+ let i = Le({
1194
+ client: G(),
1195
+ chain: j,
1196
+ address: e
1197
+ });
1198
+ if (await o(e)) try {
1199
+ let e = await ot({ contract: i }), n = r.toLowerCase();
1200
+ if (e.some((e) => e.implementation?.toLowerCase() === n)) return;
1201
+ let a = st({
1202
+ contract: i,
1203
+ moduleContract: r,
1204
+ data: Me([{ type: "address" }], [c])
1205
+ }), o = await Re({
1206
+ transaction: a,
1207
+ account: t
1208
+ });
1209
+ await _(o.transactionHash);
1210
+ } catch (t) {
1211
+ if (ce(t)) return;
1212
+ throw new T(dr, "EXECUTOR_MODULE_NOT_INSTALLED", e, t);
1213
+ }
1214
+ }
1215
+ //#endregion
1216
+ //#region src/helpers/ensureManagedAccountReady.ts
1217
+ var pr = "Could not connect the managed publishing account on Optimism Sepolia. Reconnect with the same sign-in method and try again.", mr = "Your publishing smart account is not deployed on Optimism Sepolia yet. Complete wallet setup, enable autoDeployManagedAccount in config if appropriate, then try again.", hr = "The managed account could not be confirmed on Optimism Sepolia after deployment. Wait a moment and retry, or check your network connection.", gr = "Automatic deployment of the managed publishing account failed on Optimism Sepolia. Retry or deploy the account through your wallet provider.";
1218
+ async function _r() {
1219
+ let { useModularExecutor: e } = C();
1220
+ if (!e) return { kind: "skip" };
1221
+ let t;
1222
+ try {
1223
+ t = await nr(j);
1224
+ } catch (e) {
1225
+ return {
1226
+ kind: "unavailable",
1227
+ cause: e
1228
+ };
1229
+ }
1230
+ return await Yn(t) ? {
1231
+ kind: "ready",
1232
+ managedAddress: t
1233
+ } : {
1234
+ kind: "not_deployed",
1235
+ managedAddress: t
1236
+ };
1237
+ }
1238
+ async function vr() {
1239
+ Hn();
1240
+ let e = or();
1241
+ await e.autoConnect({
1242
+ client: G(),
1243
+ chain: j
1244
+ });
1245
+ let t = e.getAccount();
1246
+ if (!t) throw new T(pr, "MANAGED_ACCOUNT_UNAVAILABLE");
1247
+ return t;
1248
+ }
1249
+ var yr = 9e4;
1250
+ async function br(e) {
1251
+ let t;
1252
+ try {
1253
+ await Promise.race([$n(e), new Promise((e, n) => {
1254
+ t = setTimeout(() => n(/* @__PURE__ */ Error(`Managed account deploy timed out after ${yr / 1e3}s`)), yr);
1255
+ })]);
1256
+ } finally {
1257
+ t != null && clearTimeout(t);
1258
+ }
1259
+ }
1260
+ async function xr(e) {
1261
+ let t = C(), n = await vr(), { fromThirdwebAccount: r } = await import("./config-DLoMtwmG.js").then((e) => e.c), i = {
1262
+ managedAddress: e,
1263
+ managedSigningAccount: r(n)
1264
+ };
1265
+ try {
1266
+ if (t.deployManagedAccount) await t.deployManagedAccount(i);
1267
+ else {
1268
+ let e = await ir();
1269
+ if (e) {
1270
+ let t = cr();
1271
+ await t.autoConnect({
1272
+ client: G(),
1273
+ chain: j
1274
+ }), await er({
1275
+ adminAddress: t.getAdminAccount?.()?.address ?? e.address,
1276
+ signingAccount: e
1277
+ });
1278
+ } else await br(n);
1279
+ }
1280
+ } catch (t) {
1281
+ if (await Xn(e, /UserOp|user operation/i.test(le(t)) ? 15 : 5)) return;
1282
+ throw new T(gr, "MANAGED_ACCOUNT_NOT_DEPLOYED", e, t);
1283
+ }
1284
+ if (!await Xn(e)) throw new T(hr, "MANAGED_ACCOUNT_NOT_DEPLOYED", e);
1285
+ }
1286
+ async function Sr() {
1287
+ let e = C();
1288
+ if (!e.useModularExecutor) throw Error("runModularExecutorPublishPrep: useModularExecutor is false");
1289
+ let t = await _r();
1290
+ if (t.kind === "unavailable") return {
1291
+ ok: !1,
1292
+ error: new T(pr, "MANAGED_ACCOUNT_UNAVAILABLE", void 0, t.cause)
1293
+ };
1294
+ if (t.kind === "not_deployed") {
1295
+ if (e.autoDeployManagedAccount) {
1296
+ try {
1297
+ await xr(t.managedAddress);
1298
+ } catch (e) {
1299
+ return {
1300
+ ok: !1,
1301
+ error: se(e) ? e : new T(gr, "MANAGED_ACCOUNT_NOT_DEPLOYED", t.managedAddress, e)
1302
+ };
1303
+ }
1304
+ if (t = await _r(), t.kind !== "ready") return {
1305
+ ok: !1,
1306
+ error: new T(hr, "MANAGED_ACCOUNT_NOT_DEPLOYED", t.kind === "not_deployed" ? t.managedAddress : void 0)
1307
+ };
1308
+ } else return {
1309
+ ok: !1,
1310
+ error: new T(mr, "MANAGED_ACCOUNT_NOT_DEPLOYED", t.managedAddress)
1311
+ };
1312
+ }
1313
+ if (t.kind === "ready") {
1314
+ if (e.modularAccountModuleContract) try {
1315
+ let n = await vr();
1316
+ await fr(t.managedAddress, n, e);
1317
+ } catch (e) {
1318
+ return se(e) ? {
1319
+ ok: !1,
1320
+ error: e
1321
+ } : {
1322
+ ok: !1,
1323
+ error: new T("Executor module setup failed on Optimism Sepolia.", "EXECUTOR_MODULE_NOT_INSTALLED", t.managedAddress, e)
1324
+ };
1325
+ }
1326
+ return {
1327
+ ok: !0,
1328
+ managedAddress: t.managedAddress
1329
+ };
1330
+ }
1331
+ throw Error("runModularExecutorPublishPrep: unexpected readiness state");
1332
+ }
1333
+ //#endregion
1334
+ //#region src/helpers/resolvePublishWallet.ts
1335
+ function Cr(e) {
1336
+ if (S(e.wallet)) return e.wallet;
1337
+ if (S(e.account)) return e.account;
1338
+ let t = ae();
1339
+ if (t) return t;
1340
+ throw Error("@seedprotocol/publish: no PublishWallet available. Pass fromEthersWallet / fromEip1193Provider / fromThirdwebAccount, or call setPublishWallet / useSeedWallet.");
1341
+ }
1342
+ //#endregion
1343
+ //#region src/services/publish/actors/persistSeedUid.ts
1344
+ var wr = I("seedProtocol:services:publish:actors:persistSeedUid"), Tr = "0x" + "0".repeat(64), Er = 15e3;
1345
+ function Dr(e, t) {
1346
+ let n = e.seedLocalId, r = n ? t.find((e) => e?.localId === n) : void 0, i = r?.seedUid && r.seedUid !== Tr ? r.seedUid : t[0]?.seedUid;
1347
+ i && i !== Tr && (e.seedUid = i);
1348
+ }
1349
+ async function Or(e, t, n) {
1350
+ let r = e.persistSeedUid;
1351
+ if (typeof r != "function") return;
1352
+ let i = new Promise((e, t) => setTimeout(() => t(/* @__PURE__ */ Error("persistSeedUid timed out")), Er));
1353
+ try {
1354
+ await Promise.race([r.call(e, t, n), i]);
1355
+ } catch (e) {
1356
+ wr("persistSeedUid failed (attestations already on-chain):", e);
1357
+ }
1358
+ }
1359
+ //#endregion
1360
+ //#region src/services/publish/helpers/verifyArweaveTransactionsExist.ts
1361
+ async function kr(e) {
1362
+ if (e.length === 0) return;
1363
+ let { arweaveUploadVerificationBaseUrl: t } = C(), n = await Promise.all(e.map((e) => xe(t, e)));
1364
+ for (let t = 0; t < e.length; t++) {
1365
+ let r = e[t], i = n[t];
1366
+ if (i) {
1367
+ if (i.status === 404) throw Error(`Arweave transaction ${r} not found. Upload may have failed. Delete this publish record and try again.`);
1368
+ if (i.status !== 200) {
1369
+ let e = i.status === 504 ? "request timed out (upload service did not respond in time)" : `status: ${i.status}`;
1370
+ throw Error(`Arweave transaction ${r} is not yet available from the upload service (${e}). Wait and retry.`);
1371
+ }
1372
+ }
1373
+ }
1374
+ }
1375
+ //#endregion
1376
+ //#region src/helpers/abi/executor.ts
1377
+ var Ar = [{
1378
+ type: "event",
1379
+ name: "CreatedAttestation",
1380
+ inputs: [{
1381
+ name: "result",
1382
+ type: "tuple",
1383
+ indexed: !1,
1384
+ components: [{
1385
+ name: "schemaUid",
1386
+ type: "bytes32"
1387
+ }, {
1388
+ name: "attestationUid",
1389
+ type: "bytes32"
1390
+ }]
1391
+ }]
1392
+ }, {
1393
+ type: "event",
1394
+ name: "SeedPublished",
1395
+ inputs: [{
1396
+ name: "seedUid",
1397
+ type: "bytes32",
1398
+ indexed: !1
1399
+ }, {
1400
+ name: "versionUid",
1401
+ type: "bytes32",
1402
+ indexed: !1
1403
+ }]
1404
+ }];
1405
+ //#endregion
1406
+ //#region src/services/publish/actors/seedUidHelpers.ts
1407
+ function K(e) {
1408
+ return e == null || e === "" ? U : ("0x" + (e.startsWith("0x") ? e.slice(2) : e).replace(/[^0-9a-fA-F]/g, "0").padStart(64, "0").slice(-64)).toLowerCase();
1409
+ }
1410
+ function jr(e, t, n) {
1411
+ if (!t || !e.logs?.length) return;
1412
+ let r = K(t);
1413
+ if (r === U) return;
1414
+ let i = n ? Ar : ne;
1415
+ try {
1416
+ let t = Ne({
1417
+ abi: i,
1418
+ eventName: "CreatedAttestation",
1419
+ logs: e.logs,
1420
+ strict: !1
1421
+ });
1422
+ for (let e of t) {
1423
+ let t = e.args?.result;
1424
+ if (t?.attestationUid && K(t.schemaUid) === r) {
1425
+ let e = t.attestationUid;
1426
+ return e && K(e) !== U ? e : void 0;
1427
+ }
1428
+ }
1429
+ } catch {}
1430
+ }
1431
+ function Mr(e, t, n, r) {
1432
+ let i = t.toLowerCase(), a = e.logs?.filter((e) => e.address && e.address.toLowerCase() === i);
1433
+ if (!a?.length) return {};
1434
+ try {
1435
+ if (r) {
1436
+ let e = Ne({
1437
+ abi: Ar,
1438
+ eventName: "SeedPublished",
1439
+ logs: a,
1440
+ strict: !1
1441
+ })[0];
1442
+ if (!e) return {};
1443
+ let t = e.args;
1444
+ return {
1445
+ seedUid: t?.seedUid && K(t.seedUid) !== U ? t.seedUid : void 0,
1446
+ versionUid: t?.versionUid && K(t.versionUid) !== U ? t.versionUid : void 0
1447
+ };
1448
+ }
1449
+ let e = Ne({
1450
+ abi: ne,
1451
+ eventName: "SeedPublished",
1452
+ logs: a,
1453
+ strict: !1
1454
+ })[0];
1455
+ if (!e) return {};
1456
+ let t = e.args?.returnedDataFromEAS;
1457
+ if (!t || t === "0x") return {};
1458
+ let i = je([{ type: "bytes32[]" }], t)[0];
1459
+ if (!i?.length) return {};
1460
+ let o = n, s = i[o], c = i[o + 1];
1461
+ return {
1462
+ seedUid: s && s !== U ? s : i.length === 1 && i[0] && i[0] !== U ? i[0] : void 0,
1463
+ versionUid: c && c !== U ? c : void 0
1464
+ };
1465
+ } catch {
1466
+ return {};
1467
+ }
1468
+ }
1469
+ function Nr(e, t, n, r) {
1470
+ return Mr(e, t, n, r).seedUid;
1471
+ }
1472
+ function Pr(e, t, n) {
1473
+ if (!t || !e.logs?.length) return;
1474
+ let r = K(t);
1475
+ if (r === U) return;
1476
+ let i = n ? Ar : ne;
1477
+ try {
1478
+ let t = Ne({
1479
+ abi: i,
1480
+ eventName: "CreatedAttestation",
1481
+ logs: e.logs,
1482
+ strict: !1
1483
+ });
1484
+ for (let e of t) {
1485
+ let t = e.args?.result;
1486
+ if (t?.attestationUid && K(t.schemaUid) === r) {
1487
+ let e = t.attestationUid;
1488
+ return e && K(e) !== U ? e : void 0;
1489
+ }
1490
+ }
1491
+ } catch {}
1492
+ }
1493
+ function Fr(e, t) {
1494
+ if (!e.logs?.length) return [];
1495
+ let n = t ? Ar : ne;
1496
+ try {
1497
+ let t = Ne({
1498
+ abi: n,
1499
+ eventName: "CreatedAttestation",
1500
+ logs: e.logs,
1501
+ strict: !1
1502
+ }), r = [];
1503
+ for (let e of t) {
1504
+ let t = e.args?.result;
1505
+ if (!t?.attestationUid) continue;
1506
+ let n = t.attestationUid;
1507
+ if (!n || K(n) === U) continue;
1508
+ let i = t.schemaUid;
1509
+ i && r.push({
1510
+ schemaUid: i,
1511
+ attestationUid: n
1512
+ });
1513
+ }
1514
+ return r;
1515
+ } catch {
1516
+ return [];
1517
+ }
1518
+ }
1519
+ //#endregion
1520
+ //#region src/services/publish/helpers/receiptAttestationMs.ts
1521
+ async function q(e) {
1522
+ let n = e?.blockNumber;
1523
+ return n == null ? Date.now() : await t(n) ?? Date.now();
1524
+ }
1525
+ //#endregion
1526
+ //#region src/services/publish/actors/publishRequestNormalize.ts
1527
+ var Ir = 64, J = (e) => {
1528
+ if (e == null) return "0x" + "0".repeat(Ir);
1529
+ if (typeof e == "string") return "0x" + (e.startsWith("0x") ? e.slice(2) : e).replace(/[^0-9a-fA-F]/g, "0").padStart(Ir, "0").slice(-64);
1530
+ if (e instanceof Uint8Array || typeof ArrayBuffer < "u" && e instanceof ArrayBuffer) {
1531
+ let t = e instanceof Uint8Array ? e : new Uint8Array(e);
1532
+ return "0x" + Array.from(t).map((e) => e.toString(16).padStart(2, "0")).join("").padStart(Ir, "0").slice(-64);
1533
+ }
1534
+ return "0x" + "0".repeat(Ir);
1535
+ }, Lr = (e) => {
1536
+ if (e == null || typeof e == "string" && (e === "" || e === "0x")) return "0x";
1537
+ if (typeof e == "string") {
1538
+ let t = (e.startsWith("0x") ? e.slice(2) : e).replace(/[^0-9a-fA-F]/g, "0");
1539
+ return "0x" + (t.length % 2 == 1 ? "0" + t : t);
1540
+ }
1541
+ if (e instanceof Uint8Array || typeof ArrayBuffer < "u" && e instanceof ArrayBuffer) {
1542
+ let t = e instanceof Uint8Array ? e : new Uint8Array(e);
1543
+ return "0x" + Array.from(t).map((e) => e.toString(16).padStart(2, "0")).join("");
1544
+ }
1545
+ return "0x";
1546
+ };
1547
+ function Rr(e) {
1548
+ let t = new Set(e.map((e) => e?.localId).filter((e) => !!e));
1549
+ return e.some((e) => (e?.listOfAttestations ?? []).some((e) => {
1550
+ let n = e;
1551
+ return n._unresolvedValue && t.has(n._unresolvedValue) ? !0 : Array.isArray(n._rawListIdsForResolve) ? n._rawListIdsForResolve.some((e) => e && t.has(String(e).trim())) : !1;
1552
+ }));
1553
+ }
1554
+ function zr(e, t) {
1555
+ return (e ?? []).filter((e) => e.publishLocalId && t.has(e.publishLocalId));
1556
+ }
1557
+ var Br = {
1558
+ recipient: Ye,
1559
+ expirationTime: BigInt(0),
1560
+ revocable: !0,
1561
+ refUID: U,
1562
+ data: U,
1563
+ value: BigInt(0)
1564
+ };
1565
+ function Vr(e) {
1566
+ let t = (e?.listOfAttestations ?? []).map((e) => {
1567
+ let t = Array.isArray(e?.data) ? e.data : [];
1568
+ return {
1569
+ schema: J(e?.schema),
1570
+ data: t.map((e) => ({
1571
+ ...e,
1572
+ refUID: J(e?.refUID),
1573
+ data: Lr(e?.data),
1574
+ expirationTime: e?.expirationTime == null ? BigInt(0) : BigInt(e.expirationTime),
1575
+ value: e?.value == null ? BigInt(0) : BigInt(e.value)
1576
+ })),
1577
+ ...typeof e?._propertyName == "string" && e._propertyName !== "" ? { _propertyName: e._propertyName } : {},
1578
+ ...typeof e?._propertyNameForSchema == "string" && e._propertyNameForSchema !== "" ? { _propertyNameForSchema: e._propertyNameForSchema } : {}
1579
+ };
1580
+ }), n = (e?.propertiesToUpdate ?? []).map((e) => ({
1581
+ ...e,
1582
+ propertySchemaUid: J(e?.propertySchemaUid)
1583
+ }));
1584
+ return {
1585
+ ...e,
1586
+ seedUid: J(e?.seedUid),
1587
+ seedSchemaUid: J(e?.seedSchemaUid),
1588
+ versionUid: J(e?.versionUid),
1589
+ versionSchemaUid: J(e?.versionSchemaUid),
1590
+ listOfAttestations: t,
1591
+ propertiesToUpdate: n
1592
+ };
1593
+ }
1594
+ function Hr(e, t) {
1595
+ for (let n of e) for (let e of n?.propertiesToUpdate ?? []) {
1596
+ let n = e?.publishLocalId, r = J(e?.propertySchemaUid);
1597
+ if (!n || !r) continue;
1598
+ let i = t.get(n);
1599
+ if (!i?.listOfAttestations) continue;
1600
+ let a = i.listOfAttestations.find((e) => J(e?.schema)?.toLowerCase() === r?.toLowerCase());
1601
+ a && (!Array.isArray(a.data) || a.data.length === 0) && (a.data = [{
1602
+ ...Br,
1603
+ refUID: U
1604
+ }]);
1605
+ }
1606
+ }
1607
+ //#endregion
1608
+ //#region src/services/arweaveL1Finalize/enqueue.ts
1609
+ var Ur = "pending_l1";
1610
+ async function Wr(e) {
1611
+ let { useArweaveBundler: t } = C();
1612
+ if (!t) return;
1613
+ let n = e.arweaveTransactions ?? [], r = e.publishUploads ?? [];
1614
+ if (n.length === 0 || n.length !== r.length) return;
1615
+ let i = E.getAppDb();
1616
+ if (!i) return;
1617
+ let a = Date.now();
1618
+ for (let e = 0; e < n.length; e++) {
1619
+ let t = n[e], o = r[e];
1620
+ if (!o) continue;
1621
+ let s = t.transaction?.id;
1622
+ if (s && typeof s == "string") try {
1623
+ await i.insert(he).values({
1624
+ seedLocalId: o.seedLocalId,
1625
+ dataItemId: s,
1626
+ versionLocalId: o.versionLocalId ?? null,
1627
+ itemPropertyName: o.itemPropertyName ?? null,
1628
+ phase: Ur,
1629
+ createdAt: a,
1630
+ updatedAt: a
1631
+ }).onConflictDoNothing();
1632
+ } catch {}
1633
+ }
1634
+ }
1635
+ //#endregion
1636
+ //#region src/helpers/ensureManagedAccountEasConfigured.ts
1637
+ var Gr = "Could not verify or set the EAS contract address on your publishing account on Optimism Sepolia.";
1638
+ function Kr(e) {
1639
+ return e.toLowerCase();
1640
+ }
1641
+ async function qr(e, t) {
1642
+ let n = S(t) ? t.txSender : b(t) ? t : (() => {
1643
+ throw Error("@seedprotocol/publish: ensureManagedAccountEasConfigured requires PublishWallet or SeedTxSender");
1644
+ })(), { easContractAddress: r } = C(), i = Kr(r);
1645
+ if (!i || i === Kr(Pe)) throw new T("Publish config is missing a valid easContractAddress.", "MANAGED_ACCOUNT_SET_EAS_FAILED", e);
1646
+ let o;
1647
+ try {
1648
+ let t = await l(e);
1649
+ o = Kr(typeof t == "string" ? t : String(t));
1650
+ } catch (t) {
1651
+ throw new T(Gr, "MANAGED_ACCOUNT_SET_EAS_FAILED", e, t);
1652
+ }
1653
+ if (o !== i) try {
1654
+ let t = a(e, r), i = await n.sendTransaction(t);
1655
+ await _(i.transactionHash);
1656
+ } catch (t) {
1657
+ throw new T(Gr, "MANAGED_ACCOUNT_SET_EAS_FAILED", e, t);
1658
+ }
1659
+ }
1660
+ //#endregion
1661
+ //#region src/services/publish/actors/createAttestations.ts
1662
+ var Jr = I("seedProtocol:services:publish:actors");
1663
+ function Yr(e) {
1664
+ let { useModularExecutor: t, publisherAddress: n, modularAccountModuleContract: r, managedAddress: i } = e;
1665
+ if (t) {
1666
+ if (!i) throw Error("resolvePublishRouting: managedAddress is required when useModularExecutor is true");
1667
+ return {
1668
+ txTargetAddress: i,
1669
+ contractAddressForEvents: r || i
1670
+ };
1671
+ }
1672
+ return {
1673
+ txTargetAddress: n,
1674
+ contractAddressForEvents: n
1675
+ };
1676
+ }
1677
+ async function Xr(e) {
1678
+ let { receipt: t, seedLocalId: n, versionSchemaUid: r, contractAddressForEvents: i, listOfAttestationsCount: a, useModularExecutor: o, publisherAddress: s } = e;
1679
+ if (!n) return;
1680
+ let c = Pr(t, r, o) ?? Mr(t, i, a, o).versionUid, l = c ? J(c) : void 0;
1681
+ if (!l || l === U) return;
1682
+ let u = await q(t);
1683
+ await ke({
1684
+ seedLocalId: n,
1685
+ versionUid: l,
1686
+ publisher: s,
1687
+ attestationCreatedAt: u
1688
+ });
1689
+ }
1690
+ function Zr(e, t) {
1691
+ return !e || !t ? !1 : J(e).toLowerCase() === J(t).toLowerCase();
1692
+ }
1693
+ function Qr(e, t, n) {
1694
+ return !n || t >= e.length ? t : Zr(e[t]?.schemaUid, n) ? t + 1 : t;
1695
+ }
1696
+ async function $r(e) {
1697
+ let { receipt: t, normalizedRequests: n, useModularExecutor: r } = e, i = Fr(t, r);
1698
+ if (!i.length) return;
1699
+ let a = await q(t), o = 0;
1700
+ for (let e of n) {
1701
+ let n = e.listOfAttestations ?? [];
1702
+ if (!n.length) continue;
1703
+ (!e.seedUid || J(e.seedUid) === U) && (o = Qr(i, o, e.seedSchemaUid)), o = Qr(i, o, e.versionSchemaUid);
1704
+ let s = n.length, c = i.slice(o, o + s);
1705
+ if (o += s, !c.length) continue;
1706
+ let l = Math.min(c.length, s), u = e.versionUid && J(e.versionUid) !== U ? J(e.versionUid) : void 0;
1707
+ u ||= Pr(t, e.versionSchemaUid, r), await me({
1708
+ seedLocalId: e.localId,
1709
+ attestationCreatedAtMs: a ?? null,
1710
+ versionUid: u && J(u) !== U ? J(u) : null,
1711
+ pairs: c.slice(0, l).map((e, t) => ({
1712
+ schemaUid: e.schemaUid,
1713
+ attestationUid: e.attestationUid,
1714
+ propertyName: typeof n[t]?._propertyName == "string" && n[t]._propertyName !== "" ? n[t]._propertyName : void 0
1715
+ }))
1716
+ });
1717
+ }
1718
+ }
1719
+ var ei = F(async ({ input: { context: e } }) => {
1720
+ let { address: t, account: n, wallet: r } = e, i = e.arweaveTransactions ?? [], a = e.publishUploads ?? [], { item: s } = e, { modularAccountModuleContract: c, useModularExecutor: l } = C();
1721
+ if (!t || typeof t != "string" || !t.trim()) throw Error("No wallet address for publish. Connect a wallet and try again.");
1722
+ if (!r && !n) throw Error("Wallet session is missing. Reconnect your wallet and retry the publish.");
1723
+ if (!l && !await o(t)) throw Error("EOA publishing must use the direct EAS path (multiPublish requires a deployed publisher contract). If you see this, attestation routing is misconfigured.");
1724
+ if (!s?.seedLocalId) throw Error("Attestation recovery failed: Item data is missing. Delete this publish record and try a full publish from the beginning.");
1725
+ if (typeof s.getPublishUploads != "function" && (s = await Ot(s.seedLocalId)), i.length !== a.length) throw Error("Attestation recovery failed: Arweave transaction data is missing or incomplete. Delete this publish record and try a full publish from the beginning.");
1726
+ let d = Yr({
1727
+ useModularExecutor: !1,
1728
+ publisherAddress: t
1729
+ }), f = Cr(e);
1730
+ await Dt(s, f);
1731
+ let p = i.map((e, t) => {
1732
+ let n = e.transaction?.id;
1733
+ if (!n || typeof n != "string") throw Error("Attestation recovery failed: Arweave transaction data did not survive restore. Delete this publish record and try a full publish from the beginning.");
1734
+ let r = a[t];
1735
+ if (!r) throw Error("Publish upload index mismatch");
1736
+ return {
1737
+ ...r,
1738
+ txId: n
1739
+ };
1740
+ });
1741
+ await kr(p.map((e) => e.txId));
1742
+ let m = await s.getPublishPayload(p, { publishMode: e.publishMode ?? "patch" }), h = Array.isArray(m) ? m : [m];
1743
+ if (l) {
1744
+ let e = !1;
1745
+ try {
1746
+ let { isAutomationSessionActive: n } = await import("./ensureAutomationSessionKey-BwIqDrG9.js").then((e) => e.n);
1747
+ t && f?.signer?.address && await n(t, f.signer.address) && (d = Yr({
1748
+ useModularExecutor: l,
1749
+ publisherAddress: f.signer.address,
1750
+ modularAccountModuleContract: c,
1751
+ managedAddress: t
1752
+ }), await qr(t, f), e = !0);
1753
+ } catch {
1754
+ e = !1;
1755
+ }
1756
+ if (!e) {
1757
+ let e = await Sr();
1758
+ if (!e.ok) throw e.error;
1759
+ d = Yr({
1760
+ useModularExecutor: l,
1761
+ publisherAddress: t,
1762
+ modularAccountModuleContract: c,
1763
+ managedAddress: e.managedAddress
1764
+ });
1765
+ let { ensureModularPublishBootstrap: n } = await import("./ensureModularPublishBootstrap-CPEwnTCw.js").then((e) => e.n), { fromThirdwebAccount: r } = await import("./config-DLoMtwmG.js").then((e) => e.c);
1766
+ f = r(await n(e.managedAddress));
1767
+ }
1768
+ } else await qr(t, f);
1769
+ let g = h.length > 1 && Rr(h), v, y = null;
1770
+ if (g) {
1771
+ let e = structuredClone(h), n = {};
1772
+ for (let r = 0; r < e.length; r++) {
1773
+ e = await Ee(e, n);
1774
+ let i = e[r], a = /* @__PURE__ */ new Set([i.localId]), o = Vr({
1775
+ ...i,
1776
+ propertiesToUpdate: zr(i.propertiesToUpdate, a)
1777
+ }), s = /* @__PURE__ */ new Map([[o.localId, o]]);
1778
+ Hr([o], s);
1779
+ let c = u(d.txTargetAddress, [o], 5000000n), p = await f.txSender.sendTransaction(c), m = await _(p.transactionHash);
1780
+ if (!m) throw Error("Failed to send transaction");
1781
+ y = m;
1782
+ let h = o?.listOfAttestations?.length ?? 0;
1783
+ await Xr({
1784
+ receipt: m,
1785
+ seedLocalId: i.localId,
1786
+ versionSchemaUid: o.versionSchemaUid,
1787
+ contractAddressForEvents: d.contractAddressForEvents,
1788
+ listOfAttestationsCount: h,
1789
+ useModularExecutor: l,
1790
+ publisherAddress: t
1791
+ });
1792
+ let g = !o.seedUid || J(o.seedUid) === U, v = o?.seedSchemaUid;
1793
+ if (g) {
1794
+ let t = jr(m, v, l) ?? Nr(m, d.contractAddressForEvents, h, l);
1795
+ t && (n[i.localId] = t, e[r] = {
1796
+ ...e[r],
1797
+ seedUid: t
1798
+ });
1799
+ }
1800
+ await $r({
1801
+ receipt: m,
1802
+ normalizedRequests: [o],
1803
+ useModularExecutor: l
1804
+ });
1805
+ }
1806
+ for (let t of e) {
1807
+ let e = t?.localId, r = t?.seedUid;
1808
+ e && r && J(r) !== U && (n[e] = J(r));
1809
+ }
1810
+ v = (await Ee(structuredClone(h), n)).map((e) => Vr({
1811
+ ...e,
1812
+ seedUid: n[e.localId] ?? e.seedUid
1813
+ }));
1814
+ } else {
1815
+ let e = h.map((e) => Vr(e));
1816
+ Hr(e, new Map(e.map((e) => [e?.localId, e])));
1817
+ let n = Array.isArray(m) ? e : [e[0]], r = u(d.txTargetAddress, n, 5000000n), i = await f.txSender.sendTransaction(r), a = await _(i.transactionHash);
1818
+ if (!a) throw Error("Failed to send transaction");
1819
+ y = a;
1820
+ let o = e.find((e) => e?.localId === s.seedLocalId) ?? e[0];
1821
+ await Xr({
1822
+ receipt: a,
1823
+ seedLocalId: o?.localId,
1824
+ versionSchemaUid: o?.versionSchemaUid,
1825
+ contractAddressForEvents: d.contractAddressForEvents,
1826
+ listOfAttestationsCount: o?.listOfAttestations?.length ?? 0,
1827
+ useModularExecutor: l,
1828
+ publisherAddress: t
1829
+ }), await $r({
1830
+ receipt: a,
1831
+ normalizedRequests: n,
1832
+ useModularExecutor: l
1833
+ });
1834
+ let c = e[0], p = c?.seedUid, g = p === U || !p, b = c?.listOfAttestations?.length ?? 0, x = c?.seedSchemaUid, S = g ? jr(a, x, l) ?? Nr(a, d.contractAddressForEvents, b, l) : void 0;
1835
+ v = S && e.length > 0 ? [{
1836
+ ...e[0],
1837
+ seedUid: S
1838
+ }, ...e.slice(1)] : e;
1839
+ }
1840
+ Dr(s, v);
1841
+ let b = s, x = v.find((e) => e?.localId === s.seedLocalId)?.seedUid;
1842
+ x && x !== U && await Or(b, t, y ? await q(y) : void 0), Jr("requestData", m), Wr(e);
1843
+ try {
1844
+ let { clearHtmlEmbeddedImageCoPublishRows: e } = await import("@seedprotocol/sdk");
1845
+ await e(s.seedLocalId);
1846
+ } catch {}
1847
+ return { easPayload: m };
1848
+ }), ti = I("seedProtocol:services:publish:verifyAttestations"), ni = "0x" + "0".repeat(64), ri = 64, ii = (e) => e == null ? "0x" + "0".repeat(ri) : typeof e == "string" ? "0x" + (e.startsWith("0x") ? e.slice(2) : e).replace(/[^0-9a-fA-F]/g, "0").padStart(ri, "0").slice(-64) : "0x" + "0".repeat(ri), ai = 5e3, oi = 6;
1849
+ async function si({ normalizedRequests: e, item: t }) {
1850
+ let n = t.seedLocalId;
1851
+ for (let t of e) {
1852
+ if (t.listOfAttestations.length === 0 || t.versionUid === ni) continue;
1853
+ let e = t.listOfAttestations.map((e) => ii(e.schema).toLowerCase()), r = [], i;
1854
+ for (let e = 1; e <= oi; e++) try {
1855
+ e > 1 && await new Promise((e) => setTimeout(e, ai)), r = await ve({ versionUids: [t.versionUid] });
1856
+ break;
1857
+ } catch (t) {
1858
+ if (i = t, ti("verifyAttestations attempt %d failed:", e, t), e === oi) throw ti("verifyAttestations: giving up after %d attempts", oi), i;
1859
+ }
1860
+ let a = r.map((e) => e.schemaId ? ii(e.schemaId).toLowerCase() : "").filter(Boolean), o = new Set(a);
1861
+ if (e.filter((e) => !o.has(e)).length > 0) throw new ue(`Publish verification failed: Seed and Version attestations were created, but property/metadata attestations are missing or incomplete. Expected ${e.length} property attestations for schema(s) ${e.join(", ")}; found ${a.length}. Use PublishManager.retryAttestations('${n}') to retry.`, n, e, a, "METADATA_PROPERTIES_MISSING");
1862
+ }
1863
+ }
1864
+ //#endregion
1865
+ //#region src/services/publish/actors/createAttestationsDirectToEas.ts
1866
+ var ci = I("seedProtocol:services:publish:createAttestationsDirectToEas"), li = 64, Y = (e) => {
1867
+ if (e == null) return "0x" + "0".repeat(li);
1868
+ if (typeof e == "string") return "0x" + (e.startsWith("0x") ? e.slice(2) : e).replace(/[^0-9a-fA-F]/g, "0").padStart(li, "0").slice(-64);
1869
+ if (e instanceof Uint8Array || typeof ArrayBuffer < "u" && e instanceof ArrayBuffer) {
1870
+ let t = e instanceof Uint8Array ? e : new Uint8Array(e);
1871
+ return "0x" + Array.from(t).map((e) => e.toString(16).padStart(2, "0")).join("").padStart(li, "0").slice(-64);
1872
+ }
1873
+ return "0x" + "0".repeat(li);
1874
+ }, ui = (e) => {
1875
+ if (e == null || typeof e == "string" && (e === "" || e === "0x")) return "0x";
1876
+ if (typeof e == "string") {
1877
+ let t = (e.startsWith("0x") ? e.slice(2) : e).replace(/[^0-9a-fA-F]/g, "0");
1878
+ return "0x" + (t.length % 2 == 1 ? "0" + t : t);
1879
+ }
1880
+ if (e instanceof Uint8Array || typeof ArrayBuffer < "u" && e instanceof ArrayBuffer) {
1881
+ let t = e instanceof Uint8Array ? e : new Uint8Array(e);
1882
+ return "0x" + Array.from(t).map((e) => e.toString(16).padStart(2, "0")).join("");
1883
+ }
1884
+ return "0x";
1885
+ }, di = async (e) => {
1886
+ let t;
1887
+ try {
1888
+ t = await O.find({ seedLocalId: e });
1889
+ } catch {}
1890
+ return t || new Promise((t) => {
1891
+ let n = setInterval(() => {
1892
+ try {
1893
+ O.find({ seedLocalId: e }).then((e) => {
1894
+ e && (clearInterval(n), t(e));
1895
+ });
1896
+ } catch {}
1897
+ }, 200);
1898
+ });
1899
+ }, fi = F(async ({ input: { context: e, event: t } }) => {
1900
+ let { address: r, account: a, wallet: o } = e, s = e.arweaveTransactions ?? [], c = e.publishUploads ?? [], { item: l } = e;
1901
+ if (!r || typeof r != "string" || !r.trim()) throw Error("No wallet address for publish. Connect a wallet and try again.");
1902
+ if (!o && !a) throw Error("Wallet session is missing. Reconnect your wallet and retry the publish.");
1903
+ if (!l?.seedLocalId) throw Error("Attestation recovery failed: Item data is missing. Delete this publish record and try a full publish from the beginning.");
1904
+ if (typeof l.getPublishUploads != "function" && (l = await di(l.seedLocalId)), s.length !== c.length) throw Error("Attestation recovery failed: Arweave transaction data is missing or incomplete. Delete this publish record and try a full publish from the beginning.");
1905
+ let u = Cr(e), d = u.txSender;
1906
+ await Dt(l, u);
1907
+ let f = s.map((e, t) => {
1908
+ let n = e.transaction?.id;
1909
+ if (!n || typeof n != "string") throw Error("Attestation recovery failed: Arweave transaction data did not survive restore. Delete this publish record and try a full publish from the beginning.");
1910
+ let r = c[t];
1911
+ if (!r) throw Error("Publish upload index mismatch");
1912
+ return {
1913
+ ...r,
1914
+ txId: n
1915
+ };
1916
+ });
1917
+ await kr(f.map((e) => e.txId));
1918
+ let p = await l.getPublishPayload(f, { publishMode: e.publishMode ?? "patch" }), g = (Array.isArray(p) ? p : [p]).map((e) => {
1919
+ let t = (e?.listOfAttestations ?? []).map((e) => {
1920
+ let t = Array.isArray(e?.data) ? e.data : [];
1921
+ return {
1922
+ schema: Y(e?.schema),
1923
+ data: t.map((e) => ({
1924
+ ...e,
1925
+ refUID: Y(e?.refUID),
1926
+ data: ui(e?.data)
1927
+ })),
1928
+ ...typeof e?._propertyName == "string" && e._propertyName !== "" ? { _propertyName: e._propertyName } : {},
1929
+ ...typeof e?._propertyNameForSchema == "string" && e._propertyNameForSchema !== "" ? { _propertyNameForSchema: e._propertyNameForSchema } : {}
1930
+ };
1931
+ }), n = (e?.propertiesToUpdate ?? []).map((e) => ({
1932
+ ...e,
1933
+ propertySchemaUid: Y(e?.propertySchemaUid)
1934
+ }));
1935
+ return {
1936
+ ...e,
1937
+ seedUid: Y(e?.seedUid),
1938
+ seedSchemaUid: Y(e?.seedSchemaUid),
1939
+ versionUid: Y(e?.versionUid),
1940
+ versionSchemaUid: Y(e?.versionSchemaUid),
1941
+ listOfAttestations: t,
1942
+ propertiesToUpdate: n
1943
+ };
1944
+ }), v = new Map(g.map((e) => [e.localId, e])), y = {
1945
+ recipient: Ye,
1946
+ expirationTime: BigInt(0),
1947
+ revocable: !0,
1948
+ refUID: w,
1949
+ data: w,
1950
+ value: BigInt(0)
1951
+ };
1952
+ for (let e of g) for (let t of e.propertiesToUpdate ?? []) {
1953
+ let e = t.publishLocalId, n = Y(t.propertySchemaUid);
1954
+ if (!e || !n) continue;
1955
+ let r = v.get(e);
1956
+ if (!r?.listOfAttestations) continue;
1957
+ let i = r.listOfAttestations.find((e) => Y(e?.schema)?.toLowerCase() === n?.toLowerCase());
1958
+ i && (!Array.isArray(i.data) || i.data.length === 0) && (i.data = [{
1959
+ ...y,
1960
+ refUID: w
1961
+ }]);
1962
+ }
1963
+ let b = Date.now();
1964
+ for (let e = 0; e < g.length; e++) {
1965
+ let t = g[e], a = t.seedUid, o = t.versionUid;
1966
+ if (a === w) {
1967
+ let e = h({
1968
+ schema: t.seedSchemaUid,
1969
+ data: {
1970
+ refUID: w,
1971
+ data: m(t.seedSchemaUid),
1972
+ revocable: t.seedIsRevocable
1973
+ }
1974
+ }), r = await d.sendTransaction(e), i = await _(r.transactionHash);
1975
+ if (!i) throw Error("Failed to create Seed attestation");
1976
+ b = await q(i);
1977
+ let { easContractAddress: o } = C(), s = n(i, o);
1978
+ if (!s || s === w) throw Error("Failed to get Seed UID from attestation receipt");
1979
+ a = s, t.seedUid = s, ci("created Seed attestation", a);
1980
+ }
1981
+ if (a !== w && o === w) {
1982
+ let e = h({
1983
+ schema: t.versionSchemaUid,
1984
+ data: {
1985
+ refUID: a,
1986
+ data: m(t.versionSchemaUid),
1987
+ revocable: !0
1988
+ }
1989
+ }), i = await d.sendTransaction(e), s = await _(i.transactionHash);
1990
+ if (!s) throw Error("Failed to create Version attestation");
1991
+ b = await q(s);
1992
+ let { easContractAddress: c } = C(), l = n(s, c);
1993
+ if (!l || l === w) throw Error("Failed to get Version UID from attestation receipt");
1994
+ o = l, t.versionUid = l, await ke({
1995
+ seedLocalId: t.localId,
1996
+ versionUid: l,
1997
+ publisher: r,
1998
+ attestationCreatedAt: b
1999
+ }), ci("created Version attestation", o);
2000
+ }
2001
+ for (let e of t.listOfAttestations) for (let t of e.data) t.refUID = o;
2002
+ for (let e of t.propertiesToUpdate ?? []) {
2003
+ let t = v.get(e.publishLocalId);
2004
+ if (!t?.listOfAttestations) continue;
2005
+ let n = Y(e.propertySchemaUid), r = t.listOfAttestations.find((e) => Y(e?.schema)?.toLowerCase() === n?.toLowerCase());
2006
+ r?.data?.[0] && (r.data[0].data = m(a));
2007
+ }
2008
+ let s = t.listOfAttestations.map((e) => ({
2009
+ schema: e.schema,
2010
+ data: e.data.map((e) => ({
2011
+ recipient: e.recipient ?? Ye,
2012
+ expirationTime: e.expirationTime ?? 0n,
2013
+ revocable: e.revocable ?? !0,
2014
+ refUID: e.refUID ?? w,
2015
+ data: e.data ?? "0x",
2016
+ value: e.value ?? 0n
2017
+ }))
2018
+ }));
2019
+ if (s.length > 0) {
2020
+ let n = i(s), r = await d.sendTransaction(n), a = await _(r.transactionHash);
2021
+ if (!a) throw Error("Failed to create property attestations");
2022
+ b = await q(a), ci("created property attestations for request", e);
2023
+ let { easContractAddress: c } = C(), l = ie(a, c), u = t.listOfAttestations, f = l.length === u.length;
2024
+ await me({
2025
+ seedLocalId: t.localId,
2026
+ attestationCreatedAtMs: b ?? null,
2027
+ versionUid: o === w ? null : o,
2028
+ pairs: l.map((e, t) => ({
2029
+ schemaUid: e.schemaUid,
2030
+ attestationUid: e.uid,
2031
+ propertyName: f && typeof u[t]?._propertyName == "string" && u[t]._propertyName !== "" ? u[t]._propertyName : void 0
2032
+ }))
2033
+ });
2034
+ }
2035
+ }
2036
+ Dr(l, g);
2037
+ let x = l;
2038
+ g[0]?.seedUid && g[0].seedUid !== w && await Or(x, r, b);
2039
+ try {
2040
+ await si({
2041
+ normalizedRequests: g,
2042
+ item: l
2043
+ });
2044
+ } catch (e) {
2045
+ throw e instanceof ue || ci("verifyAttestations failed (non-verification error):", e), e;
2046
+ }
2047
+ ci("direct EAS publish complete"), Wr(e);
2048
+ try {
2049
+ let { clearHtmlEmbeddedImageCoPublishRows: e } = await import("@seedprotocol/sdk");
2050
+ await e(l.seedLocalId);
2051
+ } catch {}
2052
+ return { easPayload: p };
2053
+ }), pi = async (e) => {
2054
+ let t;
2055
+ try {
2056
+ t = await O.find({ seedLocalId: e });
2057
+ } catch {}
2058
+ return t || new Promise((t) => {
2059
+ let n = setInterval(() => {
2060
+ O.find({ seedLocalId: e }).then((e) => {
2061
+ e && (clearInterval(n), t(e));
2062
+ }).catch(() => {});
2063
+ }, 200);
2064
+ });
2065
+ };
2066
+ async function mi(e) {
2067
+ let t = typeof e.getPublishUploads == "function" ? e : await pi(e.seedLocalId);
2068
+ return await we(t);
2069
+ }
2070
+ //#endregion
2071
+ //#region src/services/publish/actors/checking.ts
2072
+ var X = /* @__PURE__ */ new Set();
2073
+ async function hi(e) {
2074
+ let t = C();
2075
+ return t.useDirectEas ? "directEas" : t.useModularExecutor || await o(e) ? "multiPublish" : "directEas";
2076
+ }
2077
+ var gi = P(({ sendBack: e, input: { context: t } }) => {
2078
+ let { item: n, account: r, wallet: i, publishMode: a, address: o } = t;
2079
+ return (async () => {
2080
+ if (!await Ce(n)) {
2081
+ e({ type: "notOwner" });
2082
+ return;
2083
+ }
2084
+ if (X.has(n.seedLocalId)) {
2085
+ e({ type: "redundantPublishProcess" });
2086
+ return;
2087
+ }
2088
+ X.add(n.seedLocalId);
2089
+ try {
2090
+ let t = i ?? r;
2091
+ t && await Dt(n, t);
2092
+ let s = await Ae(n, [], { publishMode: a ?? "patch" });
2093
+ if (!s.isValid) {
2094
+ X.delete(n.seedLocalId), e({
2095
+ type: "validationFailed",
2096
+ errors: s.errors
2097
+ });
2098
+ return;
2099
+ }
2100
+ if (!o || typeof o != "string" || !o.trim()) {
2101
+ X.delete(n.seedLocalId), e({
2102
+ type: "validationFailed",
2103
+ errors: [{ message: "No publisher address for publish. Connect a wallet and try again." }]
2104
+ });
2105
+ return;
2106
+ }
2107
+ let c;
2108
+ try {
2109
+ c = await hi(o.trim());
2110
+ } catch (t) {
2111
+ X.delete(n.seedLocalId), e({
2112
+ type: "checkingFailed",
2113
+ error: Error("Could not verify whether the publisher is a deployed contract on Optimism Sepolia. Check your RPC connection and retry.", { cause: t })
2114
+ });
2115
+ return;
2116
+ }
2117
+ let l = await mi(n), u = C().useArweaveBundler, d = { attestationStrategy: c };
2118
+ e(l ? u ? {
2119
+ type: "validPublishProcessBundler",
2120
+ ...d
2121
+ } : {
2122
+ type: "validPublishProcess",
2123
+ ...d
2124
+ } : {
2125
+ type: "skipArweave",
2126
+ ...d
2127
+ });
2128
+ } catch (t) {
2129
+ X.delete(n.seedLocalId), console.error("[checking] failed", t), e({
2130
+ type: "checkingFailed",
2131
+ error: t instanceof Error ? t : Error(String(t))
2132
+ });
2133
+ }
2134
+ })().catch((t) => {
2135
+ X.delete(n.seedLocalId), console.error("[checking] unhandled rejection", t), e({
2136
+ type: "checkingFailed",
2137
+ error: t instanceof Error ? t : Error(String(t))
2138
+ });
2139
+ }), () => {
2140
+ X.delete(n.seedLocalId);
2141
+ };
2142
+ }), { SUCCESS: _i, FAILURE: Z } = e;
2143
+ function vi(e) {
2144
+ let t = e.attestationStrategy;
2145
+ return t === "directEas" || t !== "multiPublish" && C().useDirectEas;
2146
+ }
2147
+ function yi(e) {
2148
+ let t = e.attestationStrategy;
2149
+ return t === "multiPublish" || t !== "directEas" && !C().useDirectEas;
2150
+ }
2151
+ function Q(e) {
2152
+ let t = e;
2153
+ return t.error ?? t.data;
2154
+ }
2155
+ var bi = $e({
2156
+ types: {
2157
+ context: {},
2158
+ input: {}
2159
+ },
2160
+ actors: {
2161
+ createArweaveTransactions: jt,
2162
+ createArweaveTransactionsPhase2: Mt,
2163
+ createArweaveDataItems: yn,
2164
+ createArweaveDataItemsPhase2: xn,
2165
+ sendReimbursementRequest: On,
2166
+ pollForConfirmation: kn,
2167
+ uploadData: jn,
2168
+ uploadViaBundler: In,
2169
+ createAttestations: ei,
2170
+ createAttestationsDirectToEas: fi,
2171
+ checking: gi,
2172
+ preparingHtmlEmbedded: Nt,
2173
+ rewritingHtmlEmbedded: Ft
2174
+ },
2175
+ actions: {
2176
+ handleError: ({ event: e }) => {
2177
+ let t = Q(e);
2178
+ t == null ? console.error("Unknown error (full event):", e) : console.error(t);
2179
+ },
2180
+ assignErrorCreatingArweaveTransactions: N({
2181
+ error: ({ event: e }) => Q(e),
2182
+ errorStep: () => "creatingArweaveTransactions"
2183
+ }),
2184
+ assignErrorCreatingArweaveDataItems: N({
2185
+ error: ({ event: e }) => Q(e),
2186
+ errorStep: () => "creatingArweaveDataItems"
2187
+ }),
2188
+ assignErrorSendingReimbursementRequest: N({
2189
+ error: ({ event: e }) => Q(e),
2190
+ errorStep: () => "sendingReimbursementRequest"
2191
+ }),
2192
+ assignErrorPollingForConfirmation: N({
2193
+ error: ({ event: e }) => Q(e),
2194
+ errorStep: () => "pollingForConfirmation"
2195
+ }),
2196
+ assignErrorUploadingData: N({
2197
+ error: ({ event: e }) => Q(e),
2198
+ errorStep: () => "uploadingData"
2199
+ }),
2200
+ assignErrorPreparingHtmlEmbedded: N({
2201
+ error: ({ event: e }) => Q(e),
2202
+ errorStep: () => "preparingHtmlEmbedded"
2203
+ }),
2204
+ assignErrorRewritingHtmlEmbedded: N({
2205
+ error: ({ event: e }) => Q(e),
2206
+ errorStep: () => "rewritingHtmlEmbedded"
2207
+ }),
2208
+ assignErrorCreatingArweaveTransactionsPhase2: N({
2209
+ error: ({ event: e }) => Q(e),
2210
+ errorStep: () => "creatingArweaveTransactionsPhase2"
2211
+ }),
2212
+ assignErrorUploadingDataPhase2: N({
2213
+ error: ({ event: e }) => Q(e),
2214
+ errorStep: () => "uploadingDataPhase2"
2215
+ }),
2216
+ assignErrorUploadingViaBundler: N({
2217
+ error: ({ event: e }) => Q(e),
2218
+ errorStep: () => "uploadingViaBundler"
2219
+ }),
2220
+ assignErrorCreatingArweaveDataItemsPhase2: N({
2221
+ error: ({ event: e }) => Q(e),
2222
+ errorStep: () => "creatingArweaveDataItemsPhase2"
2223
+ }),
2224
+ assignErrorUploadingViaBundlerPhase2: N({
2225
+ error: ({ event: e }) => Q(e),
2226
+ errorStep: () => "uploadingViaBundlerPhase2"
2227
+ }),
2228
+ assignErrorCreatingAttestations: N({
2229
+ error: ({ event: e }) => Q(e),
2230
+ errorStep: () => "creatingAttestations"
2231
+ }),
2232
+ assignErrorCreatingAttestationsDirectToEas: N({
2233
+ error: ({ event: e }) => Q(e),
2234
+ errorStep: () => "creatingAttestationsDirectToEas"
2235
+ }),
2236
+ assignAccountFromRetry: N({
2237
+ wallet: ({ event: e }) => {
2238
+ let t = e;
2239
+ return t.wallet ?? t.account;
2240
+ },
2241
+ account: ({ event: e }) => {
2242
+ let t = e;
2243
+ return t.wallet ?? t.account;
2244
+ }
2245
+ }),
2246
+ assignErrorNotOwner: N({
2247
+ error: () => /* @__PURE__ */ Error("Item is read-only: you do not own this item. Only the publisher can publish."),
2248
+ errorStep: () => "checking"
2249
+ }),
2250
+ assignErrorValidationFailed: N({
2251
+ error: ({ event: e }) => {
2252
+ let t = e.errors ?? [], n = t.length > 0 ? `Validation failed (${t.length} error${t.length === 1 ? "" : "s"}):\n${t.map((e) => e.message).join("\n")}` : "Validation failed", r = Error(n);
2253
+ return r.validationErrors = t, r;
2254
+ },
2255
+ errorStep: () => "checking"
2256
+ }),
2257
+ assignErrorCheckingFailed: N({
2258
+ error: ({ event: e }) => {
2259
+ let t = e.error;
2260
+ return t instanceof Error ? t : Error(String(t ?? "Publish check failed"));
2261
+ },
2262
+ errorStep: () => "checking"
2263
+ })
2264
+ }
2265
+ }).createMachine({
2266
+ id: "publish",
2267
+ initial: "checking",
2268
+ context: ({ input: e }) => e,
2269
+ states: {
2270
+ checking: {
2271
+ on: {
2272
+ notOwner: {
2273
+ target: Z,
2274
+ actions: ["assignErrorNotOwner", "handleError"]
2275
+ },
2276
+ validationFailed: {
2277
+ target: Z,
2278
+ actions: ["assignErrorValidationFailed", "handleError"]
2279
+ },
2280
+ redundantPublishProcess: { target: "stopping" },
2281
+ checkingFailed: {
2282
+ target: Z,
2283
+ actions: ["assignErrorCheckingFailed", "handleError"]
2284
+ },
2285
+ validPublishProcess: {
2286
+ target: "preparingHtmlEmbedded",
2287
+ actions: N({ attestationStrategy: ({ event: e }) => e.attestationStrategy })
2288
+ },
2289
+ validPublishProcessBundler: {
2290
+ target: "preparingHtmlEmbedded",
2291
+ actions: N({ attestationStrategy: ({ event: e }) => e.attestationStrategy })
2292
+ },
2293
+ skipArweave: [{
2294
+ guard: ({ context: e }) => vi(e),
2295
+ target: "creatingAttestationsDirectToEas",
2296
+ actions: N({
2297
+ arweaveTransactions: () => [],
2298
+ publishUploads: () => [],
2299
+ attestationStrategy: ({ event: e }) => e.attestationStrategy
2300
+ })
2301
+ }, {
2302
+ guard: ({ context: e }) => yi(e),
2303
+ target: "creatingAttestations",
2304
+ actions: N({
2305
+ arweaveTransactions: () => [],
2306
+ publishUploads: () => [],
2307
+ attestationStrategy: ({ event: e }) => e.attestationStrategy
2308
+ })
2309
+ }]
2310
+ },
2311
+ invoke: {
2312
+ src: "checking",
2313
+ input: ({ context: e }) => ({ context: e })
2314
+ }
2315
+ },
2316
+ preparingHtmlEmbedded: { invoke: {
2317
+ src: "preparingHtmlEmbedded",
2318
+ input: ({ context: e }) => ({ context: e }),
2319
+ onDone: [{
2320
+ guard: () => C().useArweaveBundler,
2321
+ target: "creatingArweaveDataItems",
2322
+ actions: N({ htmlEmbeddedDeferredHtmlSeedLocalIds: ({ event: e }) => e.output.deferredHtmlSeedLocalIds })
2323
+ }, {
2324
+ target: "creatingArweaveTransactions",
2325
+ actions: N({ htmlEmbeddedDeferredHtmlSeedLocalIds: ({ event: e }) => e.output.deferredHtmlSeedLocalIds })
2326
+ }],
2327
+ onError: {
2328
+ target: Z,
2329
+ actions: ["assignErrorPreparingHtmlEmbedded", "handleError"]
2330
+ }
2331
+ } },
2332
+ creatingArweaveTransactions: { invoke: {
2333
+ src: "createArweaveTransactions",
2334
+ input: ({ context: e, event: t }) => ({
2335
+ context: e,
2336
+ event: t
2337
+ }),
2338
+ onDone: {
2339
+ target: "sendingReimbursementRequest",
2340
+ actions: N({
2341
+ arweaveTransactions: ({ event: e }) => e.output.arweaveTransactions,
2342
+ publishUploads: ({ event: e }) => e.output.publishUploads
2343
+ })
2344
+ },
2345
+ onError: {
2346
+ target: "failure",
2347
+ actions: ["assignErrorCreatingArweaveTransactions", "handleError"]
2348
+ }
2349
+ } },
2350
+ creatingArweaveDataItems: { invoke: {
2351
+ src: "createArweaveDataItems",
2352
+ input: ({ context: e, event: t }) => ({
2353
+ context: e,
2354
+ event: t
2355
+ }),
2356
+ onDone: {
2357
+ target: "uploadingViaBundler",
2358
+ actions: N({
2359
+ arweaveTransactions: ({ event: e }) => e.output.arweaveTransactions,
2360
+ publishUploads: ({ event: e }) => e.output.publishUploads,
2361
+ signedDataItems: ({ event: e }) => e.output.signedDataItems
2362
+ })
2363
+ },
2364
+ onError: {
2365
+ target: "failure",
2366
+ actions: ["assignErrorCreatingArweaveDataItems", "handleError"]
2367
+ }
2368
+ } },
2369
+ sendingReimbursementRequest: { invoke: {
2370
+ src: "sendReimbursementRequest",
2371
+ input: ({ context: e, event: t }) => ({
2372
+ context: e,
2373
+ event: t
2374
+ }),
2375
+ onDone: {
2376
+ target: "pollingForConfirmation",
2377
+ actions: N({
2378
+ requestResponse: ({ event: e }) => e.output,
2379
+ reimbursementTransactionId: ({ event: e }) => e.output.transactionId
2380
+ })
2381
+ },
2382
+ onError: {
2383
+ target: "failure",
2384
+ actions: ["assignErrorSendingReimbursementRequest", "handleError"]
2385
+ }
2386
+ } },
2387
+ pollingForConfirmation: { invoke: {
2388
+ src: "pollForConfirmation",
2389
+ input: ({ context: e, event: t }) => ({
2390
+ context: e,
2391
+ event: t
2392
+ }),
2393
+ onDone: {
2394
+ target: "uploadingData",
2395
+ actions: N({ reimbursementConfirmed: !0 })
2396
+ },
2397
+ onError: {
2398
+ target: "failure",
2399
+ actions: ["assignErrorPollingForConfirmation", "handleError"]
2400
+ }
2401
+ } },
2402
+ uploadingViaBundler: {
2403
+ on: {
2404
+ uploadComplete: [
2405
+ {
2406
+ guard: ({ context: e }) => vi(e),
2407
+ target: "creatingAttestationsDirectToEas",
2408
+ actions: N({
2409
+ completionPercentage: 100,
2410
+ signedDataItems: () => void 0,
2411
+ arweaveUploadData: () => void 0
2412
+ })
2413
+ },
2414
+ {
2415
+ guard: (e) => (e.context?.htmlEmbeddedDeferredHtmlSeedLocalIds?.length ?? 0) > 0,
2416
+ target: "rewritingHtmlEmbedded",
2417
+ actions: N({
2418
+ htmlEmbeddedPhase1PublishUploads: ({ context: e }) => e.publishUploads ?? [],
2419
+ htmlEmbeddedPhase1ArweaveTransactions: ({ context: e }) => e.arweaveTransactions ?? [],
2420
+ signedDataItems: () => void 0,
2421
+ arweaveUploadData: () => void 0
2422
+ })
2423
+ },
2424
+ {
2425
+ guard: ({ context: e }) => yi(e),
2426
+ target: "creatingAttestations",
2427
+ actions: N({
2428
+ completionPercentage: 100,
2429
+ signedDataItems: () => void 0,
2430
+ arweaveUploadData: () => void 0
2431
+ })
2432
+ }
2433
+ ],
2434
+ uploadError: {
2435
+ target: "failure",
2436
+ actions: ["assignErrorUploadingViaBundler", "handleError"]
2437
+ }
2438
+ },
2439
+ invoke: {
2440
+ src: "uploadViaBundler",
2441
+ input: ({ context: e }) => ({ context: e })
2442
+ }
2443
+ },
2444
+ creatingArweaveDataItemsPhase2: { invoke: {
2445
+ src: "createArweaveDataItemsPhase2",
2446
+ input: ({ context: e, event: t }) => ({
2447
+ context: e,
2448
+ event: t
2449
+ }),
2450
+ onDone: {
2451
+ target: "uploadingViaBundlerPhase2",
2452
+ actions: N({
2453
+ arweaveTransactions: ({ event: e }) => e.output.arweaveTransactions,
2454
+ publishUploads: ({ event: e }) => e.output.publishUploads,
2455
+ signedDataItems: ({ event: e }) => e.output.signedDataItems,
2456
+ uploaderState: () => void 0,
2457
+ currentTransactionIndex: () => void 0
2458
+ })
2459
+ },
2460
+ onError: {
2461
+ target: Z,
2462
+ actions: ["assignErrorCreatingArweaveDataItemsPhase2", "handleError"]
2463
+ }
2464
+ } },
2465
+ uploadingViaBundlerPhase2: {
2466
+ on: {
2467
+ uploadComplete: [{
2468
+ guard: ({ context: e }) => vi(e),
2469
+ target: "creatingAttestationsDirectToEas",
2470
+ actions: N({
2471
+ completionPercentage: 100,
2472
+ signedDataItems: () => void 0,
2473
+ arweaveUploadData: () => void 0
2474
+ })
2475
+ }, {
2476
+ guard: ({ context: e }) => yi(e),
2477
+ target: "creatingAttestations",
2478
+ actions: N({
2479
+ completionPercentage: 100,
2480
+ signedDataItems: () => void 0,
2481
+ arweaveUploadData: () => void 0,
2482
+ publishUploads: ({ context: e }) => [...e.htmlEmbeddedPhase1PublishUploads ?? [], ...e.publishUploads ?? []],
2483
+ arweaveTransactions: ({ context: e }) => [...e.htmlEmbeddedPhase1ArweaveTransactions ?? [], ...e.arweaveTransactions ?? []]
2484
+ })
2485
+ }],
2486
+ uploadError: {
2487
+ target: Z,
2488
+ actions: ["assignErrorUploadingViaBundlerPhase2", "handleError"]
2489
+ }
2490
+ },
2491
+ invoke: {
2492
+ src: "uploadViaBundler",
2493
+ input: ({ context: e }) => ({ context: e })
2494
+ }
2495
+ },
2496
+ uploadingData: {
2497
+ on: {
2498
+ updatePercentage: { actions: N({
2499
+ completionPercentage: ({ event: e }) => e.completionPercentage,
2500
+ uploaderState: ({ event: e }) => e.uploaderState,
2501
+ currentTransactionIndex: ({ event: e }) => e.currentTransactionIndex
2502
+ }) },
2503
+ uploadComplete: [
2504
+ {
2505
+ guard: ({ context: e }) => vi(e),
2506
+ target: "creatingAttestationsDirectToEas",
2507
+ actions: N({ completionPercentage: 100 })
2508
+ },
2509
+ {
2510
+ guard: (e) => (e.context?.htmlEmbeddedDeferredHtmlSeedLocalIds?.length ?? 0) > 0,
2511
+ target: "rewritingHtmlEmbedded",
2512
+ actions: N({
2513
+ htmlEmbeddedPhase1PublishUploads: ({ context: e }) => e.publishUploads ?? [],
2514
+ htmlEmbeddedPhase1ArweaveTransactions: ({ context: e }) => e.arweaveTransactions ?? []
2515
+ })
2516
+ },
2517
+ {
2518
+ guard: ({ context: e }) => yi(e),
2519
+ target: "creatingAttestations",
2520
+ actions: N({ completionPercentage: 100 })
2521
+ }
2522
+ ],
2523
+ uploadError: {
2524
+ target: "failure",
2525
+ actions: ["assignErrorUploadingData", "handleError"]
2526
+ }
2527
+ },
2528
+ invoke: {
2529
+ src: "uploadData",
2530
+ input: ({ context: e }) => ({ context: e })
2531
+ }
2532
+ },
2533
+ rewritingHtmlEmbedded: { invoke: {
2534
+ src: "rewritingHtmlEmbedded",
2535
+ input: ({ context: e }) => ({ context: e }),
2536
+ onDone: [{
2537
+ guard: () => !C().useArweaveBundler,
2538
+ target: "creatingArweaveTransactionsPhase2"
2539
+ }, {
2540
+ guard: () => C().useArweaveBundler,
2541
+ target: "creatingArweaveDataItemsPhase2"
2542
+ }],
2543
+ onError: {
2544
+ target: Z,
2545
+ actions: ["assignErrorRewritingHtmlEmbedded", "handleError"]
2546
+ }
2547
+ } },
2548
+ creatingArweaveTransactionsPhase2: { invoke: {
2549
+ src: "createArweaveTransactionsPhase2",
2550
+ input: ({ context: e, event: t }) => ({
2551
+ context: e,
2552
+ event: t
2553
+ }),
2554
+ onDone: {
2555
+ target: "uploadingDataPhase2",
2556
+ actions: N({
2557
+ arweaveTransactions: ({ event: e }) => e.output.arweaveTransactions,
2558
+ publishUploads: ({ event: e }) => e.output.publishUploads,
2559
+ uploaderState: () => void 0,
2560
+ currentTransactionIndex: () => void 0
2561
+ })
2562
+ },
2563
+ onError: {
2564
+ target: Z,
2565
+ actions: ["assignErrorCreatingArweaveTransactionsPhase2", "handleError"]
2566
+ }
2567
+ } },
2568
+ uploadingDataPhase2: {
2569
+ on: {
2570
+ updatePercentage: { actions: N({
2571
+ completionPercentage: ({ event: e }) => e.completionPercentage,
2572
+ uploaderState: ({ event: e }) => e.uploaderState,
2573
+ currentTransactionIndex: ({ event: e }) => e.currentTransactionIndex
2574
+ }) },
2575
+ uploadComplete: [{
2576
+ guard: ({ context: e }) => vi(e),
2577
+ target: "creatingAttestationsDirectToEas",
2578
+ actions: N({ completionPercentage: 100 })
2579
+ }, {
2580
+ guard: ({ context: e }) => yi(e),
2581
+ target: "creatingAttestations",
2582
+ actions: N({
2583
+ completionPercentage: 100,
2584
+ publishUploads: ({ context: e }) => [...e.htmlEmbeddedPhase1PublishUploads ?? [], ...e.publishUploads ?? []],
2585
+ arweaveTransactions: ({ context: e }) => [...e.htmlEmbeddedPhase1ArweaveTransactions ?? [], ...e.arweaveTransactions ?? []]
2586
+ })
2587
+ }],
2588
+ uploadError: {
2589
+ target: Z,
2590
+ actions: ["assignErrorUploadingDataPhase2", "handleError"]
2591
+ }
2592
+ },
2593
+ invoke: {
2594
+ src: "uploadData",
2595
+ input: ({ context: e }) => ({ context: e })
2596
+ }
2597
+ },
2598
+ creatingAttestations: { invoke: {
2599
+ src: "createAttestations",
2600
+ input: ({ context: e, event: t }) => ({
2601
+ context: e,
2602
+ event: t
2603
+ }),
2604
+ onDone: {
2605
+ target: _i,
2606
+ actions: N({ easPayload: ({ event: e }) => e.output?.easPayload })
2607
+ },
2608
+ onError: {
2609
+ target: "attestationFailureRecoverable",
2610
+ actions: ["assignErrorCreatingAttestations", "handleError"]
2611
+ }
2612
+ } },
2613
+ attestationFailureRecoverable: { on: { retry: {
2614
+ target: "creatingAttestations",
2615
+ actions: ["assignAccountFromRetry"]
2616
+ } } },
2617
+ creatingAttestationsDirectToEas: { invoke: {
2618
+ src: "createAttestationsDirectToEas",
2619
+ input: ({ context: e, event: t }) => ({
2620
+ context: e,
2621
+ event: t
2622
+ }),
2623
+ onDone: {
2624
+ target: _i,
2625
+ actions: N({ easPayload: ({ event: e }) => e.output?.easPayload })
2626
+ },
2627
+ onError: {
2628
+ target: "attestationFailureRecoverableDirectToEas",
2629
+ actions: ["assignErrorCreatingAttestationsDirectToEas", "handleError"]
2630
+ }
2631
+ } },
2632
+ attestationFailureRecoverableDirectToEas: { on: { retry: {
2633
+ target: "creatingAttestationsDirectToEas",
2634
+ actions: ["assignAccountFromRetry"]
2635
+ } } },
2636
+ stopping: {
2637
+ entry: ({ context: e }) => {
2638
+ console.log(`Actor for ${e.item?.seedLocalId} stopped`);
2639
+ },
2640
+ type: "final"
2641
+ },
2642
+ [_i]: {
2643
+ entry: ({ context: e }) => {},
2644
+ type: "final"
2645
+ },
2646
+ [Z]: {
2647
+ entry: ({ context: e }) => {},
2648
+ type: "final"
2649
+ }
2650
+ }
2651
+ }), xi = N(({ context: e, event: t }) => {
2652
+ let n = t, r = n.publishProcesses ?? /* @__PURE__ */ new Map(), i = n.subscriptions ?? /* @__PURE__ */ new Map();
2653
+ return {
2654
+ publishProcesses: new Map(r),
2655
+ subscriptions: new Map(i)
2656
+ };
2657
+ }), Si = null;
2658
+ function Ci(e) {
2659
+ Si = e;
2660
+ }
2661
+ function wi() {
2662
+ return Si;
2663
+ }
2664
+ //#endregion
2665
+ //#region src/services/publishManager/actors/subscribe.ts
2666
+ var Ti = I("seedProtocol:services:PublishManager:actors:subscribe");
2667
+ function Ei(e) {
2668
+ let t = e.value;
2669
+ return typeof t == "string" ? t : t && typeof t == "object" ? Object.keys(t)[0] ?? "" : "";
2670
+ }
2671
+ function Di(e) {
2672
+ return v.includes(e);
2673
+ }
2674
+ var Oi = P(({ receive: e, input: { publishProcess: t, seedLocalId: n } }) => {
2675
+ let r = wi(), i = null, a = () => {
2676
+ i != null && (clearInterval(i), i = null);
2677
+ }, o = (e) => {
2678
+ let o = Ei(e);
2679
+ Di(o) && i == null && r ? i = setInterval(() => {
2680
+ try {
2681
+ let e = t.getSnapshot();
2682
+ if (e.status === "done") {
2683
+ a();
2684
+ return;
2685
+ }
2686
+ if (!Di(Ei(e))) {
2687
+ a();
2688
+ return;
2689
+ }
2690
+ } catch {
2691
+ return;
2692
+ }
2693
+ r?.savePublish(n, t);
2694
+ }, p) : Di(o) || a();
2695
+ }, s = t.subscribe(async (e) => {
2696
+ Ti("Publish state:", e.value), r && (e.status === "done" ? (a(), r.savePublish(n, t, { triggerPublishDone: !0 })) : (r.savePublish(n, t), o(e)));
2697
+ });
2698
+ e(({ type: e }) => {
2699
+ e === "UNSUBSCRIBE" && (Ti("Received UNSUBSCRIBE event"), a(), s.unsubscribe(), r?.removeSubscription(n));
2700
+ });
2701
+ });
2702
+ //#endregion
2703
+ //#region src/services/publishManager/actions/createPublish.ts
2704
+ function ki(e) {
2705
+ if (e) {
2706
+ if (S(e)) return e;
2707
+ if (x(e)) {
2708
+ let t = ae();
2709
+ if (t && t.signer.address.toLowerCase() === e.address.toLowerCase()) return t;
2710
+ throw Error("@seedprotocol/publish: createPublish requires a PublishWallet (signer + txSender). Use fromEthersWallet, fromEip1193Provider, or fromThirdwebAccount.");
2711
+ }
2712
+ throw Error("@seedprotocol/publish: createPublish account must be a PublishWallet. Thirdweb Account must be wrapped with fromThirdwebAccount from @seedprotocol/publish/thirdweb.");
2713
+ }
2714
+ }
2715
+ function Ai(e) {
2716
+ if (e) {
2717
+ if (e instanceof M.Wallet) return e;
2718
+ if (S(e)) return e.signer;
2719
+ if (x(e)) return e;
2720
+ }
2721
+ }
2722
+ var ji = Qe(({ event: e, enqueue: t }) => {
2723
+ let { item: n, address: r, account: i, options: a } = e;
2724
+ if (!(r != null && typeof r == "string" && r.trim().length > 0)) {
2725
+ console.warn("[createPublish] No valid wallet address; skipping spawn.");
2726
+ return;
2727
+ }
2728
+ t.assign(({ context: e, spawn: t }) => {
2729
+ let { publishProcesses: o } = e;
2730
+ if (o && o.has(n.seedLocalId)) return console.warn(`Publish process with seedLocalId "${n.seedLocalId}" already exists.`), e;
2731
+ let s = typeof crypto < "u" && typeof crypto.randomUUID == "function" ? crypto.randomUUID() : `run_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`, c = C(), l = [...c.arweaveUploadTags ?? [], ...a?.arweaveUploadTags ?? []], u = ki(i) ?? ae() ?? void 0, d = t(bi, { input: {
2732
+ item: n,
2733
+ address: r,
2734
+ wallet: u,
2735
+ account: u,
2736
+ modelName: n.modelName,
2737
+ schemaId: n.schemaUid,
2738
+ signDataItems: a?.signDataItems,
2739
+ dataItemSigner: Ai(a?.dataItemSigner),
2740
+ signArweaveTransactions: a?.signArweaveTransactions,
2741
+ arweaveJwk: a?.arweaveJwk,
2742
+ publishMode: a?.publishMode ?? "patch",
2743
+ publishRunId: s,
2744
+ arweaveUploadTags: l.length ? l : void 0,
2745
+ htmlEmbeddedDataUriPolicy: a?.htmlEmbeddedDataUriPolicy ?? c.htmlEmbeddedDataUriPolicy ?? "materialize"
2746
+ } });
2747
+ return o.set(n.seedLocalId, d), {
2748
+ ...e,
2749
+ publishProcesses: o
2750
+ };
2751
+ }), t.assign(({ context: e, spawn: t }) => {
2752
+ let { subscriptions: r, publishProcesses: i } = e, a = i.get(n.seedLocalId);
2753
+ if (!a) return console.warn(`Publish process with seedLocalId "${n.seedLocalId}" does not exist.`), e;
2754
+ if (r.has(n.seedLocalId)) return console.warn(`Subscription with seedLocalId "${n.seedLocalId}" already exists.`), e;
2755
+ let o = t(Oi, { input: {
2756
+ publishProcess: a,
2757
+ seedLocalId: n.seedLocalId
2758
+ } });
2759
+ return r.set(n.seedLocalId, o), {
2760
+ ...e,
2761
+ subscriptions: new Map(r)
2762
+ };
2763
+ });
2764
+ }), Mi = ({ context: e, event: t }) => {
2765
+ let { seedLocalId: n, account: r } = t, i = e.publishProcesses.get(n);
2766
+ if (!i) {
2767
+ console.warn(`Publish process with seedLocalId "${n}" does not exist.`);
2768
+ return;
2769
+ }
2770
+ let a = r == null ? ae() ?? void 0 : S(r) ? r : void 0;
2771
+ r != null && !a && console.warn("[retryAttestations] account must be a PublishWallet. Use fromThirdwebAccount / fromEip1193Provider / fromEthersWallet."), i.send({
2772
+ type: "retry",
2773
+ account: a,
2774
+ wallet: a
2775
+ });
2776
+ };
2777
+ //#endregion
2778
+ //#region src/services/publishManager/actions/stopScopedOrStandaloneChild.ts
2779
+ function Ni(e, t, n) {
2780
+ t._parent === e ? n.stopChild(t) : t.stop();
2781
+ }
2782
+ //#endregion
2783
+ //#region src/services/publishManager/actors/savePublish.ts
2784
+ var Pi = I("seedProtocol:services:PublishManager:actors:savePublish"), Fi = /* @__PURE__ */ new Map();
2785
+ function Ii(e, t) {
2786
+ let n = (Fi.get(e) ?? Promise.resolve()).then(t);
2787
+ return Fi.set(e, n.catch(() => {})), n;
2788
+ }
2789
+ function Li(e) {
2790
+ return e === "completed" || e === "failed" || e === "interrupted";
2791
+ }
2792
+ function Ri(e) {
2793
+ return e.status === "done" ? e.value === "success" ? "completed" : e.value === "failure" ? "failed" : "completed" : "in_progress";
2794
+ }
2795
+ var zi = 500, Bi = 2e3;
2796
+ function Vi(e) {
2797
+ return JSON.stringify(e, (e, t) => typeof t == "bigint" ? t.toString() : t);
2798
+ }
2799
+ function Hi(e) {
2800
+ if (typeof e != "object" || !e) return;
2801
+ let t = e, n = t.snapshot, r = (t.context ?? n?.context)?.publishRunId;
2802
+ return typeof r == "string" && r.length > 0 ? r : void 0;
2803
+ }
2804
+ function Ui(e, t) {
2805
+ if (!e?.error || t !== "failed" && t !== "in_progress") return {};
2806
+ let n = e.error, r = n == null ? void 0 : (n instanceof Error ? n.message : String(n)).slice(0, zi), i = e.errorStep, a;
2807
+ if (n instanceof Error && n.stack) a = n.stack.slice(0, Bi);
2808
+ else if (typeof n == "object" && n) try {
2809
+ a = JSON.stringify(n).slice(0, Bi);
2810
+ } catch {
2811
+ a = String(n).slice(0, Bi);
2812
+ }
2813
+ else n != null && (a = String(n).slice(0, Bi));
2814
+ return {
2815
+ errorMessage: r ?? void 0,
2816
+ errorStep: i,
2817
+ errorDetails: a
2818
+ };
2819
+ }
2820
+ function Wi(e) {
2821
+ return Ii(e, async () => {
2822
+ let t = E.getAppDb();
2823
+ if (!t) {
2824
+ Pi("markInProgressPublishInterrupted: DB not ready, skipping");
2825
+ return;
2826
+ }
2827
+ let n = await t.select().from(k).where(tt(L(k.seedLocalId, e), L(k.status, "in_progress"))).orderBy(nt(k.updatedAt)).limit(1);
2828
+ if (n.length === 0) return;
2829
+ let r = Date.now();
2830
+ await t.update(k).set({
2831
+ status: "interrupted",
2832
+ completedAt: r,
2833
+ updatedAt: r,
2834
+ errorMessage: null,
2835
+ errorStep: null,
2836
+ errorDetails: null
2837
+ }).where(L(k.id, n[0].id));
2838
+ });
2839
+ }
2840
+ var Gi = P(({ sendBack: e, input: { persistedSnapshot: t, seedLocalId: n, triggerPublishDone: r } }) => {
2841
+ Pi("savePublish seedLocalId", n);
2842
+ let i = t;
2843
+ Ii(n, async () => {
2844
+ let a = E.getAppDb();
2845
+ if (!a) {
2846
+ Pi("savePublish: DB not ready, skipping"), e({
2847
+ type: "SAVE_PUBLISH_DONE",
2848
+ seedLocalId: n,
2849
+ triggerPublishDone: r
2850
+ });
2851
+ return;
2852
+ }
2853
+ let o = await a.select().from(k).where(tt(L(k.seedLocalId, n), L(k.status, "in_progress"))).orderBy(nt(k.updatedAt)).limit(1), s = typeof t == "string" ? t : Vi(t), c = Ri(i), l = Date.now(), u = Ui(i.context, c);
2854
+ if (o.length > 0) {
2855
+ let e = o[0];
2856
+ await a.update(k).set({
2857
+ persistedSnapshot: s,
2858
+ status: c,
2859
+ updatedAt: l,
2860
+ ...i.status === "done" && c !== "in_progress" ? { completedAt: l } : {},
2861
+ ...u
2862
+ }).where(L(k.id, e.id));
2863
+ } else {
2864
+ let e = Hi(i);
2865
+ if (e != null && c === "in_progress" && i.status !== "done") {
2866
+ let t = (await a.select().from(k).where(L(k.seedLocalId, n)).orderBy(nt(k.startedAt)).limit(1))[0];
2867
+ if (t && Li(t.status)) try {
2868
+ if (Hi(JSON.parse(t.persistedSnapshot)) === e) {
2869
+ Pi("savePublish: skip stale insert — same publishRunId as latest terminal row", n, e);
2870
+ return;
2871
+ }
2872
+ } catch {}
2873
+ }
2874
+ let t = i.context?.item, r = i.context?.modelName ?? t?.modelName ?? "", o = i.context?.schemaId ?? t?.schemaId;
2875
+ await a.insert(k).values({
2876
+ seedLocalId: n,
2877
+ modelName: r,
2878
+ schemaId: o ?? null,
2879
+ status: c,
2880
+ startedAt: l,
2881
+ persistedSnapshot: s,
2882
+ createdAt: l,
2883
+ updatedAt: l,
2884
+ ...u
2885
+ });
2886
+ }
2887
+ }).then(() => {
2888
+ e({
2889
+ type: "SAVE_PUBLISH_DONE",
2890
+ seedLocalId: n,
2891
+ triggerPublishDone: r
2892
+ });
2893
+ }).catch((t) => {
2894
+ Pi("savePublish error", t), e({
2895
+ type: "SAVE_PUBLISH_DONE",
2896
+ seedLocalId: n,
2897
+ triggerPublishDone: r
2898
+ });
2899
+ });
2900
+ }), Ki = Qe(({ context: e, event: t, enqueue: n, self: r }) => {
2901
+ let { publishProcesses: i, subscriptions: a } = e, { seedLocalId: o } = t;
2902
+ Wi(o).catch((e) => {
2903
+ console.warn(`[stopPublish] Failed to mark publish_processes row interrupted for "${o}":`, e);
2904
+ });
2905
+ let s = i.get(o);
2906
+ if (!s) {
2907
+ console.warn(`Publish process with seedLocalId "${o}" does not exist.`);
2908
+ return;
2909
+ }
2910
+ Ni(r, s, n);
2911
+ let c = a.get(o);
2912
+ c && Ni(r, c, n);
2913
+ let l = new Map(i);
2914
+ l.delete(o);
2915
+ let u = new Map(a);
2916
+ u.delete(o), n.assign({
2917
+ publishProcesses: l,
2918
+ subscriptions: u
2919
+ });
2920
+ }), qi = I("seedProtocol:PublishManager:index"), Ji = Qe(({ context: e, enqueue: t, self: n }) => {
2921
+ qi("Stopping all actors..."), e.publishProcesses.forEach((e) => {
2922
+ Ni(n, e, t);
2923
+ }), e.subscriptions.forEach((e) => {
2924
+ Ni(n, e, t);
2925
+ }), t.assign({
2926
+ publishProcesses: /* @__PURE__ */ new Map(),
2927
+ subscriptions: /* @__PURE__ */ new Map()
2928
+ });
2929
+ }), Yi = Qe(({ context: e, event: t, enqueue: n }) => {
2930
+ let { seedLocalId: r } = t, i = e.publishProcesses.get(r);
2931
+ if (!i) {
2932
+ console.warn(`Publish process with seedLocalId "${r}" does not exist.`);
2933
+ return;
2934
+ }
2935
+ n.stopChild(i);
2936
+ let a = e.subscriptions.get(r);
2937
+ a && n.stopChild(a);
2938
+ let o = new Map(e.publishProcesses);
2939
+ o.delete(r);
2940
+ let s = new Map(e.subscriptions);
2941
+ s.delete(r), n.assign({
2942
+ publishProcesses: o,
2943
+ subscriptions: s
2944
+ });
2945
+ }), Xi = N(({ context: e, event: t }) => {
2946
+ let { subscriptions: n } = e, { seedLocalId: r, newSubscription: i } = t;
2947
+ return i && n.set(r, i), { subscriptions: new Map(n) };
2948
+ }), Zi = ["signedDataItems", "arweaveUploadData"];
2949
+ function Qi(e) {
2950
+ if (typeof e != "object" || !e) return e;
2951
+ let t = { ...e };
2952
+ for (let e of Zi) delete t[e];
2953
+ return t;
2954
+ }
2955
+ function $i(e) {
2956
+ if (typeof e != "object" || !e) return e;
2957
+ let t = e, n = { ...t };
2958
+ t.context != null && typeof t.context == "object" && (n.context = Qi(t.context));
2959
+ let r = t.snapshot;
2960
+ if (typeof r == "object" && r) {
2961
+ let e = r, t = { ...e };
2962
+ e.context != null && typeof e.context == "object" && (t.context = Qi(e.context)), n.snapshot = t;
2963
+ }
2964
+ return n;
2965
+ }
2966
+ function ea(e) {
2967
+ try {
2968
+ return $i(e.getPersistedSnapshot?.() ?? e.getSnapshot());
2969
+ } catch {
2970
+ let t = e.getSnapshot(), n = t.context;
2971
+ if (!n?.item) return $i(t);
2972
+ let r = n.item;
2973
+ return $i({
2974
+ ...t,
2975
+ context: {
2976
+ ...n,
2977
+ item: {
2978
+ seedLocalId: r.seedLocalId,
2979
+ modelName: r.modelName,
2980
+ schemaId: r.schemaId
2981
+ }
2982
+ }
2983
+ });
2984
+ }
2985
+ }
2986
+ var ta = N(({ context: e, event: t, spawn: n }) => {
2987
+ let { publishProcesses: r } = e, { seedLocalId: i, publishProcess: a, triggerPublishDone: o } = t;
2988
+ if (!a) return e;
2989
+ let s = new Map(r);
2990
+ s.set(i, a);
2991
+ let c = ea(a);
2992
+ return n(Gi, {
2993
+ id: `savePublish_${i}_${Date.now()}`,
2994
+ input: {
2995
+ persistedSnapshot: c,
2996
+ seedLocalId: i,
2997
+ triggerPublishDone: o
2998
+ }
2999
+ }), { publishProcesses: s };
3000
+ }), na = N(({ context: e, event: t }) => {
3001
+ let { publishProcesses: n, subscriptions: r } = e, i = t.seedLocalId, a = r.get(i);
3002
+ a && a.send({ type: "UNSUBSCRIBE" });
3003
+ let o = new Map(n);
3004
+ o.delete(i);
3005
+ let s = new Map(r);
3006
+ return s.delete(i), {
3007
+ publishProcesses: o,
3008
+ subscriptions: s
3009
+ };
3010
+ }), ra = N(({ context: e, event: t }) => {
3011
+ let { subscriptions: n } = e, r = t.seedLocalId, i = new Map(n);
3012
+ return i.delete(r), { subscriptions: i };
3013
+ }), ia = 6e4, aa = 2e3;
3014
+ async function oa(e) {
3015
+ let t = Date.now() + e;
3016
+ for (; Date.now() < t;) {
3017
+ try {
3018
+ if (E.isAppDbReady() && E.getAppDb()) return !0;
3019
+ } catch {}
3020
+ await new Promise((e) => setTimeout(e, aa));
3021
+ }
3022
+ return !1;
3023
+ }
3024
+ function sa(e) {
3025
+ let t = e.value;
3026
+ return typeof t == "string" ? t : t && typeof t == "object" ? Object.keys(t)[0] ?? "" : "";
3027
+ }
3028
+ function ca(e) {
3029
+ let t = sa(e);
3030
+ if (t === "pollingForConfirmation" && (!e.context?.reimbursementTransactionId || !e.context?.requestResponse)) return !1;
3031
+ if (t === "uploadingData") {
3032
+ let t = e.context?.arweaveTransactions, n = e.context?.publishUploads;
3033
+ if (!Array.isArray(t) || t.length === 0 || !Array.isArray(n)) return !1;
3034
+ }
3035
+ return !0;
3036
+ }
3037
+ function la(e) {
3038
+ return typeof e == "object" && !!e && "xstate$$type" in e && e.xstate$$type === 1 && typeof e.id == "string";
3039
+ }
3040
+ function ua(e, t, n) {
3041
+ e.context = e.context ?? {};
3042
+ let r = e.context.item;
3043
+ if (la(r)) {
3044
+ e.context.item = {
3045
+ seedLocalId: t,
3046
+ modelName: e.context.modelName ?? n.modelName ?? "",
3047
+ schemaId: e.context.schemaId ?? n.schemaId ?? void 0
3048
+ };
3049
+ return;
3050
+ }
3051
+ e.context.item = {
3052
+ ...typeof r == "object" && r && !Array.isArray(r) ? r : {},
3053
+ seedLocalId: t,
3054
+ modelName: r?.modelName ?? e.context.modelName ?? n.modelName ?? "",
3055
+ schemaId: r?.schemaId ?? e.context.schemaId ?? n.schemaId ?? void 0
3056
+ };
3057
+ }
3058
+ var da = P(({ sendBack: e, input: { context: t } }) => {
3059
+ (async () => {
3060
+ let t = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Map();
3061
+ if (!await oa(ia)) return e({
3062
+ type: "RESTORE_FROM_DB_DONE",
3063
+ publishProcesses: t,
3064
+ subscriptions: n
3065
+ }), {
3066
+ newPublishProcesses: t,
3067
+ newSubscriptions: n
3068
+ };
3069
+ let r = E.getAppDb();
3070
+ if (!r) return e({
3071
+ type: "RESTORE_FROM_DB_DONE",
3072
+ publishProcesses: t,
3073
+ subscriptions: n
3074
+ }), {
3075
+ newPublishProcesses: t,
3076
+ newSubscriptions: n
3077
+ };
3078
+ let i = await r.select().from(k).where(L(k.status, "in_progress")), a = /* @__PURE__ */ new Map(), o = [...i].sort((e, t) => (t.updatedAt ?? t.createdAt ?? 0) - (e.updatedAt ?? e.createdAt ?? 0));
3079
+ for (let e of o) a.has(e.seedLocalId) || a.set(e.seedLocalId, e);
3080
+ let s = Array.from(a.values());
3081
+ for (let e of s) {
3082
+ let r;
3083
+ try {
3084
+ r = JSON.parse(e.persistedSnapshot);
3085
+ } catch {
3086
+ continue;
3087
+ }
3088
+ if (r.status === "done") continue;
3089
+ let i = r.context?.item?.seedLocalId ?? e.seedLocalId;
3090
+ if (!i || !ca(r)) continue;
3091
+ ua(r, i, e);
3092
+ let a = Ze(bi, {
3093
+ snapshot: r,
3094
+ input: void 0
3095
+ }), o = Ze(Oi, { input: {
3096
+ publishProcess: a,
3097
+ seedLocalId: i
3098
+ } });
3099
+ t.set(i, a), n.set(i, o), a.start(), o.start();
3100
+ }
3101
+ return {
3102
+ newPublishProcesses: t,
3103
+ newSubscriptions: n
3104
+ };
3105
+ })().then((t) => {
3106
+ if (!t) return;
3107
+ let { newPublishProcesses: n, newSubscriptions: r } = t;
3108
+ e({
3109
+ type: "RESTORE_FROM_DB_DONE",
3110
+ publishProcesses: n,
3111
+ subscriptions: r
3112
+ });
3113
+ });
3114
+ }), fa = I("seedProtocol:PublishManager:index"), pa = $e({
3115
+ types: {
3116
+ context: {},
3117
+ input: {},
3118
+ events: {}
3119
+ },
3120
+ actors: { restoreFromDb: da },
3121
+ actions: {
3122
+ assignRestoreFromDb: xi,
3123
+ createPublish: ji,
3124
+ addSubscription: Xi,
3125
+ requestSavePublish: ta,
3126
+ publishDone: na,
3127
+ removeSubscription: ra,
3128
+ retryAttestations: Mi,
3129
+ stopPublish: Ki,
3130
+ stopAll: Ji,
3131
+ query: Yi
3132
+ }
3133
+ }).createMachine({
3134
+ id: "publishManager",
3135
+ initial: "restoreFromDb",
3136
+ context: {
3137
+ publishProcesses: /* @__PURE__ */ new Map(),
3138
+ subscriptions: /* @__PURE__ */ new Map()
3139
+ },
3140
+ states: {
3141
+ restoreFromDb: {
3142
+ on: { RESTORE_FROM_DB_DONE: {
3143
+ target: "active",
3144
+ actions: ["assignRestoreFromDb"]
3145
+ } },
3146
+ invoke: {
3147
+ src: "restoreFromDb",
3148
+ input: ({ context: e }) => ({ context: e })
3149
+ }
3150
+ },
3151
+ active: { on: {
3152
+ CREATE_PUBLISH: { actions: ["createPublish"] },
3153
+ ADD_SUBSCRIPTION: { actions: ["addSubscription"] },
3154
+ REQUEST_SAVE_PUBLISH: { actions: ["requestSavePublish"] },
3155
+ SAVE_PUBLISH_DONE: [{
3156
+ guard: ({ event: e }) => e.triggerPublishDone === !0,
3157
+ actions: ["publishDone"]
3158
+ }],
3159
+ PUBLISH_DONE: { actions: ["publishDone"] },
3160
+ REMOVE_SUBSCRIPTION: { actions: ["removeSubscription"] },
3161
+ RETRY_ATTESTATIONS: { actions: ["retryAttestations"] },
3162
+ STOP_PUBLISH: { actions: ["stopPublish"] },
3163
+ QUERY: { actions: ["query"] },
3164
+ STOP_ALL: { actions: ["stopAll"] }
3165
+ } }
3166
+ }
3167
+ }), $ = Ze(pa, { input: {
3168
+ publishProcesses: /* @__PURE__ */ new Map(),
3169
+ subscriptions: /* @__PURE__ */ new Map()
3170
+ } });
3171
+ Ci({
3172
+ savePublish: (e, t, n) => {
3173
+ $.send({
3174
+ type: "REQUEST_SAVE_PUBLISH",
3175
+ seedLocalId: e,
3176
+ publishProcess: t,
3177
+ triggerPublishDone: n?.triggerPublishDone
3178
+ });
3179
+ },
3180
+ onPublishDone: (e) => {
3181
+ $.send({
3182
+ type: "PUBLISH_DONE",
3183
+ seedLocalId: e
3184
+ });
3185
+ },
3186
+ removeSubscription: (e) => {
3187
+ $.send({
3188
+ type: "REMOVE_SUBSCRIPTION",
3189
+ seedLocalId: e
3190
+ });
3191
+ }
3192
+ });
3193
+ var ma = $.subscribe((e) => {
3194
+ fa("PublishManager snapshot:", e);
3195
+ });
3196
+ typeof document < "u" && ($.start(), window.addEventListener("load", () => {
3197
+ fa("PublishManager started");
3198
+ }), window.addEventListener("beforeunload", () => {
3199
+ ma.unsubscribe(), $.stop();
3200
+ }));
3201
+ var ha = {
3202
+ getService: () => $,
3203
+ createPublish: (e, t, n, r) => $.send({
3204
+ type: "CREATE_PUBLISH",
3205
+ item: e,
3206
+ address: t,
3207
+ account: n,
3208
+ options: r
3209
+ }),
3210
+ retryAttestations: (e, t) => $.send({
3211
+ type: "RETRY_ATTESTATIONS",
3212
+ seedLocalId: e,
3213
+ account: t
3214
+ }),
3215
+ stopPublish: (e) => $.send({
3216
+ type: "STOP_PUBLISH",
3217
+ seedLocalId: e
3218
+ }),
3219
+ query: (e) => $.send({
3220
+ type: "QUERY",
3221
+ seedLocalId: e
3222
+ }),
3223
+ stopAll: () => $.send({ type: "STOP_ALL" }),
3224
+ getPublish: (e) => $.getSnapshot().context.publishProcesses.get(e),
3225
+ savePublish: (e, t) => $.send({
3226
+ type: "REQUEST_SAVE_PUBLISH",
3227
+ seedLocalId: e,
3228
+ publishProcess: t
3229
+ }),
3230
+ addSubscription: (e, t) => $.send({
3231
+ type: "ADD_SUBSCRIPTION",
3232
+ seedLocalId: e,
3233
+ newSubscription: t
3234
+ }),
3235
+ removeSubscription: (e) => $.send({
3236
+ type: "REMOVE_SUBSCRIPTION",
3237
+ seedLocalId: e
3238
+ })
3239
+ };
3240
+ //#endregion
3241
+ //#region src/helpers/approvedTargetsForAutomationPublish.ts
3242
+ function ga() {
3243
+ let e = C().modularAccountModuleContract?.trim();
3244
+ if (!e || !/^0x[0-9a-fA-F]{40}$/.test(e)) throw Error("@seedprotocol/publish: automation session keys require PublishConfig.modularAccountModuleContract (executor module only). Do not use defaultApprovedTargetsForModularPublish for server-held keys.");
3245
+ return [e.toLowerCase()];
3246
+ }
3247
+ //#endregion
3248
+ //#region src/helpers/automationSessionKeyPermissions.ts
3249
+ var _a = "publish,revoke";
3250
+ function va(e) {
3251
+ let t = {
3252
+ approvedTargets: ga(),
3253
+ nativeTokenLimitPerTransaction: 0
3254
+ };
3255
+ return typeof e?.expiresAt == "number" && e.expiresAt > 0 && (t.expiresAt = Math.trunc(e.expiresAt)), t;
3256
+ }
3257
+ function ya(e, t = _a) {
3258
+ let n = `${[...e.approvedTargets].map((e) => e.toLowerCase()).sort().join(",")}|${e.nativeTokenLimitPerTransaction}|${e.expiresAt ?? 0}|${t.trim()}`;
3259
+ return ze(Be(n));
3260
+ }
3261
+ function ba(e) {
3262
+ let t = {
3263
+ approvedTargets: e.approvedTargets,
3264
+ nativeTokenLimitPerTransaction: e.nativeTokenLimitPerTransaction
3265
+ };
3266
+ return e.expiresAt != null && e.expiresAt > 0 ? {
3267
+ ...t,
3268
+ permissionEndTimestamp: /* @__PURE__ */ new Date(e.expiresAt * 1e3)
3269
+ } : t;
3270
+ }
3271
+ //#endregion
3272
+ //#region src/services/publishAuthorization/index.ts
3273
+ var xa = "0x0000000000000000000000000000000000000000", Sa = !0, Ca = "0x0000000000000000000000000000000000000000";
3274
+ function wa(e) {
3275
+ if (S(e)) return e.txSender;
3276
+ if (b(e)) return e;
3277
+ throw Error("@seedprotocol/publish: publish authorization write APIs require a PublishWallet or SeedTxSender");
3278
+ }
3279
+ async function Ta(e, t) {
3280
+ let n = await e.sendTransaction(t);
3281
+ return _(n.transactionHash);
3282
+ }
3283
+ function Ea(e, t) {
3284
+ let n = t.trim();
3285
+ if (!/^0x[0-9a-fA-F]{40}$/.test(n)) throw Error(`@seedprotocol/publish: ${e} must be a valid address`);
3286
+ return n;
3287
+ }
3288
+ function Da() {
3289
+ return Je.getSchemaUID(lt, xa, Sa);
3290
+ }
3291
+ async function Oa(e) {
3292
+ let t = wa(e), n = Da();
3293
+ return await R(n) || (await Ta(t, St({
3294
+ schema: lt,
3295
+ resolverAddress: xa,
3296
+ revocable: Sa
3297
+ })), await Ta(t, wt({
3298
+ schemaUid: n,
3299
+ schemaName: dt
3300
+ }))), n;
3301
+ }
3302
+ function ka(e) {
3303
+ return new qe(lt).encodeData([
3304
+ {
3305
+ name: "identity",
3306
+ value: e.identity,
3307
+ type: "address"
3308
+ },
3309
+ {
3310
+ name: "sessionKey",
3311
+ value: e.sessionKey,
3312
+ type: "address"
3313
+ },
3314
+ {
3315
+ name: "app",
3316
+ value: e.app,
3317
+ type: "address"
3318
+ },
3319
+ {
3320
+ name: "scopes",
3321
+ value: e.scopes,
3322
+ type: "string"
3323
+ },
3324
+ {
3325
+ name: "grantedAt",
3326
+ value: e.grantedAt,
3327
+ type: "uint64"
3328
+ },
3329
+ {
3330
+ name: "expiresAt",
3331
+ value: e.expiresAt,
3332
+ type: "uint64"
3333
+ },
3334
+ {
3335
+ name: "permissionsHash",
3336
+ value: yt(e.permissionsHash),
3337
+ type: "bytes32"
3338
+ }
3339
+ ]);
3340
+ }
3341
+ async function Aa(e) {
3342
+ let t = wa(e.wallet), r = e.ensureSchema === !1 ? Da() : await Oa(e.wallet), i = Ea("identity", e.identity), a = Ea("sessionKey", e.sessionKey), o = e.app?.trim() ? Ea("app", e.app) : Ca, s = e.grantedAt ?? Math.floor(Date.now() / 1e3), c = typeof e.expiresAt == "number" && e.expiresAt > 0 ? Math.trunc(e.expiresAt) : 0, l = e.scopes ?? pt, u = yt(e.permissionsHash ?? ya(va({ expiresAt: c > 0 ? c : void 0 }), l === pt ? "publish,revoke" : l));
3343
+ if (u === Xe) throw Error("@seedprotocol/publish: attestPublishAuthorization requires a non-zero permissionsHash");
3344
+ let d = typeof e.expirationTime == "number" && e.expirationTime > 0 ? e.expirationTime : c > 0 ? c : s + ct, f = ka({
3345
+ identity: i,
3346
+ sessionKey: a,
3347
+ app: o,
3348
+ scopes: l,
3349
+ grantedAt: s,
3350
+ expiresAt: c,
3351
+ permissionsHash: u
3352
+ }), p = await Ta(t, h({
3353
+ schema: r,
3354
+ data: {
3355
+ recipient: a,
3356
+ expirationTime: BigInt(d),
3357
+ revocable: !0,
3358
+ refUID: Xe,
3359
+ data: f,
3360
+ value: 0n
3361
+ }
3362
+ }));
3363
+ if (!p) throw Error("@seedprotocol/publish: attestPublishAuthorization failed — no receipt");
3364
+ let { easContractAddress: m } = C(), g = n(p, m);
3365
+ if (!g || !vt(g)) throw Error("@seedprotocol/publish: attestPublishAuthorization failed — could not parse attestation UID");
3366
+ return {
3367
+ uid: g,
3368
+ schemaUid: r,
3369
+ permissionsHash: u,
3370
+ grantedAt: s,
3371
+ expiresAt: c,
3372
+ expirationTime: d
3373
+ };
3374
+ }
3375
+ async function ja(e) {
3376
+ let t = wa(e.wallet), n = e.schemaUid ?? Da(), i = yt(e.uid);
3377
+ if (!vt(i)) throw Error("@seedprotocol/publish: revokePublishAuthorization requires a valid attestation uid");
3378
+ if (!await Ta(t, r([{
3379
+ schema: n,
3380
+ data: [{ uid: i }]
3381
+ }]))) throw Error("@seedprotocol/publish: revokePublishAuthorization failed — no receipt");
3382
+ }
3383
+ async function Ma(e) {
3384
+ let t = (await _t({
3385
+ identities: e.identities,
3386
+ excludeRevoked: !1
3387
+ })).find((t) => t.id?.toLowerCase() === e.uid.toLowerCase());
3388
+ if (!t) return null;
3389
+ let n = gt(t.decodedDataJson ?? "[]"), r = typeof t.expirationTime == "number" ? t.expirationTime : typeof t.expirationTime == "string" ? Number(t.expirationTime) : null;
3390
+ return {
3391
+ uid: t.id,
3392
+ decoded: n,
3393
+ assess: ht({
3394
+ decoded: n,
3395
+ expirationTime: r
3396
+ }),
3397
+ expirationTime: r
3398
+ };
3399
+ }
3400
+ //#endregion
3401
+ export { or as A, qn as B, tr as C, rr as D, G as E, Yn as F, H as G, Gn as H, Xn as I, R as J, Dt as K, Zn as L, Vn as M, Jn as N, nr as O, ur as P, Hn as R, Qn as S, $n as T, Qt as U, Kn as V, hn as W, bt as X, St as Y, xt as Z, qr as _, Aa as a, xr as b, Da as c, va as d, ya as f, bi as g, ha as h, Ma as i, cr as j, ir as k, ja as l, ga as m, ft as n, ka as o, ba as p, wt as q, mt as r, Oa as s, ut as t, _a as u, _r as v, er as w, fr as x, Sr as y, Ln as z };
3402
+
3403
+ //# sourceMappingURL=publishAuthorization-CSyAV8Hf.js.map