@seedprotocol/sdk 0.7.11-next.1384.g8b47246 → 0.7.11

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 (122) hide show
  1. package/dist/{BaseFileManager-DLou1TZS.js → BaseFileManager-D-pLXQAp.js} +2 -14
  2. package/dist/BaseFileManager-D-pLXQAp.js.map +1 -0
  3. package/dist/{Item-Ld1iPicQ.js → Item-BU9wIT7l.js} +61 -59
  4. package/dist/Item-BU9wIT7l.js.map +1 -0
  5. package/dist/{ModelProperty-C8gTx4pO.js → ModelProperty-Bv7KzP97.js} +40 -37
  6. package/dist/ModelProperty-Bv7KzP97.js.map +1 -0
  7. package/dist/{Schema-BzeBUZxi.js → Schema-C_4wv0RP.js} +22 -22
  8. package/dist/{Schema-BzeBUZxi.js.map → Schema-C_4wv0RP.js.map} +1 -1
  9. package/dist/{SchemaValidationService-CW0s7V7R.js → SchemaValidationService-Dc-lpFQX.js} +9 -6
  10. package/dist/{SchemaValidationService-CW0s7V7R.js.map → SchemaValidationService-Dc-lpFQX.js.map} +1 -1
  11. package/dist/{tabEvents-BnBzIdEi.js → arweaveContentTags-iW_HcWJA.js} +53 -5
  12. package/dist/arweaveContentTags-iW_HcWJA.js.map +1 -0
  13. package/dist/{configurePlatform-WkmvqeTO.js → configurePlatform-BH1YOZpg.js} +2 -2
  14. package/dist/{configurePlatform-WkmvqeTO.js.map → configurePlatform-BH1YOZpg.js.map} +1 -1
  15. package/dist/db/drizzle/0030_drop_property_uids.sql +1 -0
  16. package/dist/db/drizzle/meta/0030_snapshot.json +1638 -0
  17. package/dist/db/drizzle/meta/_journal.json +8 -1
  18. package/dist/{detachRowsBeforeDelete-BZr_0iZU.js → detachRowsBeforeDelete-Cie55SoG.js} +4 -6
  19. package/dist/detachRowsBeforeDelete-Cie55SoG.js.map +1 -0
  20. package/dist/dist/{BaseFileManager-DLou1TZS.d.ts → BaseFileManager-D-pLXQAp.d.ts} +432 -495
  21. package/dist/dist/BaseFileManager-D-pLXQAp.d.ts.map +1 -0
  22. package/dist/dist/{configurePlatform-WkmvqeTO.d.ts → configurePlatform-BH1YOZpg.d.ts} +1 -1
  23. package/dist/dist/configurePlatform-BH1YOZpg.d.ts.map +1 -0
  24. package/dist/dist/{index-BjWk0x4-.d.ts → index-2PaIhvOU.d.ts} +1 -64
  25. package/dist/dist/{index-BjWk0x4-.d.ts.map → index-2PaIhvOU.d.ts.map} +1 -1
  26. package/dist/dist/{index.node-DV1OXCp0.d.ts → index.node-C3rI1upv.d.ts} +1 -253
  27. package/dist/dist/{index.node-DV1OXCp0.d.ts.map → index.node-C3rI1upv.d.ts.map} +1 -1
  28. package/dist/dist/minimumUpgradeVersion-Dg2MguFf.d.ts +20 -0
  29. package/dist/dist/minimumUpgradeVersion-Dg2MguFf.d.ts.map +1 -0
  30. package/dist/dist/platform.node.d.ts +2 -2
  31. package/dist/{download-Cvac_VGu.js → download-DHWUPLlK.js} +4 -5
  32. package/dist/{download-Cvac_VGu.js.map → download-DHWUPLlK.js.map} +1 -1
  33. package/dist/{eas-CdhfODXL.js → eas-MXEdKKVc.js} +10 -7
  34. package/dist/{eas-CdhfODXL.js.map → eas-MXEdKKVc.js.map} +1 -1
  35. package/dist/{ensureImageLocal-DNM6c2yD.js → ensureImageLocal-B6suz6FC.js} +8 -9
  36. package/dist/{ensureImageLocal-DNM6c2yD.js.map → ensureImageLocal-B6suz6FC.js.map} +1 -1
  37. package/dist/{getPublishPayload-CLrAcZwr.js → getPublishPayload-Dd3HCYeI.js} +8 -49
  38. package/dist/getPublishPayload-Dd3HCYeI.js.map +1 -0
  39. package/dist/{getPublishPendingDiff-DiPff8pS.js → getPublishPendingDiff-kcTP52Kj.js} +11 -9
  40. package/dist/{getPublishPendingDiff-DiPff8pS.js.map → getPublishPendingDiff-kcTP52Kj.js.map} +1 -1
  41. package/dist/{index-BjWk0x4-.js → index-2PaIhvOU.js} +2 -4
  42. package/dist/index-2PaIhvOU.js.map +1 -0
  43. package/dist/{index-9udoYObJ.js → index-BXTyvnKb.js} +11 -8
  44. package/dist/index-BXTyvnKb.js.map +1 -0
  45. package/dist/{index-CghAYA-z.js → index-CmNqUKQN.js} +11 -8
  46. package/dist/index-CmNqUKQN.js.map +1 -0
  47. package/dist/{index-Cdm7Q7el.js → index-Xs_EDi-_.js} +18 -403
  48. package/dist/index-Xs_EDi-_.js.map +1 -0
  49. package/dist/{index.browser-D9oC-KKx.js → index.browser-BkcOQGhw.js} +25 -69
  50. package/dist/index.browser-BkcOQGhw.js.map +1 -0
  51. package/dist/{index.node-DV1OXCp0.js → index.node-C3rI1upv.js} +8 -6
  52. package/dist/index.node-C3rI1upv.js.map +1 -0
  53. package/dist/main.js +19 -22
  54. package/dist/main.js.map +1 -1
  55. package/dist/{minimumUpgradeVersion-BDhHvHtr.js → minimumUpgradeVersion-Dg2MguFf.js} +38 -9
  56. package/dist/minimumUpgradeVersion-Dg2MguFf.js.map +1 -0
  57. package/dist/{modelPropertyRecordSchemas-se4QMXSi.js → modelPropertyRecordSchemas-CEac3FB8.js} +8 -5
  58. package/dist/{modelPropertyRecordSchemas-se4QMXSi.js.map → modelPropertyRecordSchemas-CEac3FB8.js.map} +1 -1
  59. package/dist/node.js +14 -11
  60. package/dist/node.js.map +1 -1
  61. package/dist/platform.browser.js +6 -7
  62. package/dist/platform.browser.js.map +1 -1
  63. package/dist/platform.node.js +5 -5
  64. package/dist/{property-Broz_CWj.js → property-4jSqHieb.js} +11 -8
  65. package/dist/property-4jSqHieb.js.map +1 -0
  66. package/dist/{errors-DKxFSvb3.js → publishErrors-DZXDX3B6.js} +1688 -195
  67. package/dist/publishErrors-DZXDX3B6.js.map +1 -0
  68. package/dist/{readHtmlBodyForStorageSeed-FvwYPn4m.js → readHtmlBodyForStorageSeed-Cva1DPzE.js} +9 -9
  69. package/dist/{readHtmlBodyForStorageSeed-FvwYPn4m.js.map → readHtmlBodyForStorageSeed-Cva1DPzE.js.map} +1 -1
  70. package/dist/seedSchema/index.ts +0 -1
  71. package/dist/src/ItemProperty/ItemProperty.d.ts +1 -0
  72. package/dist/src/ItemProperty/ItemProperty.d.ts.map +1 -1
  73. package/dist/src/browser/db/Db.d.ts.map +1 -1
  74. package/dist/src/browser/db/drizzleFiles.d.ts +3 -2
  75. package/dist/src/browser/db/drizzleFiles.d.ts.map +1 -1
  76. package/dist/src/db/minimumUpgradeVersion.d.ts +20 -5
  77. package/dist/src/db/minimumUpgradeVersion.d.ts.map +1 -1
  78. package/dist/src/helpers/entity/detachRowsBeforeDelete.d.ts +2 -3
  79. package/dist/src/helpers/entity/detachRowsBeforeDelete.d.ts.map +1 -1
  80. package/dist/src/index.d.ts +4 -1
  81. package/dist/src/index.d.ts.map +1 -1
  82. package/dist/src/node/db/Db.d.ts.map +1 -1
  83. package/dist/src/node/index.d.ts +9 -1
  84. package/dist/src/node/index.d.ts.map +1 -1
  85. package/dist/src/seedSchema/index.d.ts +0 -1
  86. package/dist/src/seedSchema/index.d.ts.map +1 -1
  87. package/dist/{syncDbWithEas-Dj_8VqM7.js → syncDbWithEas-V_9gIyHp.js} +21 -20
  88. package/dist/syncDbWithEas-V_9gIyHp.js.map +1 -0
  89. package/dist/{tolerantWebAccess-CNfvmR3m.js → tolerantWebAccess-D6hFxREe.js} +7 -8
  90. package/dist/{tolerantWebAccess-CNfvmR3m.js.map → tolerantWebAccess-D6hFxREe.js.map} +1 -1
  91. package/dist/{updateSeedRevokedAt-D-3SLW-D.js → updateSeedRevokedAt-CsAoUEEt.js} +4 -4
  92. package/dist/{updateSeedRevokedAt-D-3SLW-D.js.map → updateSeedRevokedAt-CsAoUEEt.js.map} +1 -1
  93. package/package.json +7 -7
  94. package/dist/BaseFileManager-DLou1TZS.js.map +0 -1
  95. package/dist/Item-Ld1iPicQ.js.map +0 -1
  96. package/dist/ModelProperty-C8gTx4pO.js.map +0 -1
  97. package/dist/arweaveContentTags-Bh4wCTal.js +0 -51
  98. package/dist/arweaveContentTags-Bh4wCTal.js.map +0 -1
  99. package/dist/detachRowsBeforeDelete-BZr_0iZU.js.map +0 -1
  100. package/dist/dist/BaseFileManager-DLou1TZS.d.ts.map +0 -1
  101. package/dist/dist/configurePlatform-WkmvqeTO.d.ts.map +0 -1
  102. package/dist/dist/minimumUpgradeVersion-BDhHvHtr.d.ts +0 -9
  103. package/dist/dist/minimumUpgradeVersion-BDhHvHtr.d.ts.map +0 -1
  104. package/dist/errors-DKxFSvb3.js.map +0 -1
  105. package/dist/getPublishPayload-CLrAcZwr.js.map +0 -1
  106. package/dist/getPublishUploads-DFcgc27c.js +0 -784
  107. package/dist/getPublishUploads-DFcgc27c.js.map +0 -1
  108. package/dist/index-9udoYObJ.js.map +0 -1
  109. package/dist/index-BjWk0x4-.js.map +0 -1
  110. package/dist/index-Cdm7Q7el.js.map +0 -1
  111. package/dist/index-CghAYA-z.js.map +0 -1
  112. package/dist/index.browser-D9oC-KKx.js.map +0 -1
  113. package/dist/index.node-DV1OXCp0.js.map +0 -1
  114. package/dist/minimumUpgradeVersion-BDhHvHtr.js.map +0 -1
  115. package/dist/property-Broz_CWj.js.map +0 -1
  116. package/dist/publishGraph-DnWoWZRP.js +0 -311
  117. package/dist/publishGraph-DnWoWZRP.js.map +0 -1
  118. package/dist/seedSchema/PropertyUidSchema.ts +0 -16
  119. package/dist/src/seedSchema/PropertyUidSchema.d.ts +0 -64
  120. package/dist/src/seedSchema/PropertyUidSchema.d.ts.map +0 -1
  121. package/dist/syncDbWithEas-Dj_8VqM7.js.map +0 -1
  122. package/dist/tabEvents-BnBzIdEi.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"download-Cvac_VGu.js","sources":["../../src/db/read/getCompositeChildPaths.ts","../../src/events/files/download.ts"],"sourcesContent":["import { and, inArray, isNotNull } from 'drizzle-orm'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { metadata } from '@/seedSchema'\nimport { getItemStorageSubdir } from '@/helpers/storageDir'\n\n/** Rows per query: well under SQLite's bound-parameter limit. */\nconst CHUNK_SIZE = 400\n\n/**\n * Where the download worker saves each child of a composite upload, by transaction id then child\n * (property) name: a path relative to the files root.\n *\n * The paths come from the ItemStorage rows sync derives from a `storage_transaction_id`\n * attestation (see `createMetadataRecordsForStorageTransactionId`): property value = the\n * transaction id, `refResolvedValue` = `<txId><extension>`, `localStorageDir` = the model's storage\n * directory. Those rows are what hydration reads, so a child saved here is found as that property's\n * file. Transactions with no such rows are left out; the worker then falls back to the legacy\n * html / json layout.\n */\nexport const getCompositeChildPaths = async (\n transactionIds: string[],\n): Promise<Record<string, Record<string, string>>> => {\n const out: Record<string, Record<string, string>> = {}\n const appDb = BaseDb.getAppDb()\n if (!appDb || transactionIds.length === 0) return out\n\n for (let i = 0; i < transactionIds.length; i += CHUNK_SIZE) {\n const chunk = transactionIds.slice(i, i + CHUNK_SIZE)\n const rows = await appDb\n .select({\n transactionId: metadata.propertyValue,\n propertyName: metadata.propertyName,\n refResolvedValue: metadata.refResolvedValue,\n localStorageDir: metadata.localStorageDir,\n })\n .from(metadata)\n .where(\n and(\n isNotNull(metadata.derivedFromUid),\n isNotNull(metadata.refResolvedValue),\n inArray(metadata.propertyValue, chunk),\n ),\n )\n\n for (const row of rows) {\n const { transactionId, propertyName, refResolvedValue } = row\n if (!transactionId || !propertyName || !refResolvedValue) continue\n // A file name, never a path: anything else is not where the SDK would look.\n if (refResolvedValue.includes('/') || refResolvedValue.includes('\\\\')) continue\n const byName = (out[transactionId] ??= {})\n byName[propertyName] ??= `${getItemStorageSubdir(row.localStorageDir)}/${refResolvedValue}`\n }\n }\n\n return out\n}\n","import { appState } from '@/seedSchema'\nimport { and, eq, isNotNull, or } from 'drizzle-orm'\nimport { getAllAddressesFromDb } from '@/helpers/db'\nimport {\n BaseFileManager,\n} from '@/helpers'\nimport { GET_FILES_METADATA } from '@seedprotocol/eas'\nimport debug from 'debug'\n// Dynamic import to break circular dependency with globalMachine\n// import { getGlobalService } from '@/services/global/globalMachine'\nimport { whenDbReady } from '@/client/readiness'\nimport { metadata } from '@/seedSchema'\nimport { BaseEasClient, BaseQueryClient } from '@seedprotocol/eas'\nimport {\n BaseArweaveClient,\n ensureReadGatewaySelected,\n getArweaveReadBaseUrls,\n getTransactionTagsByIds,\n type TransactionTag,\n} from '@seedprotocol/arweave'\nimport { supportsOpfsFileDownloads } from '@/helpers/environment'\nimport { CONTENT_SHA256_TAG } from '@/helpers/arweaveContentTags'\nimport { getCompositeChildPaths } from '@/db/read/getCompositeChildPaths'\nimport { throttle } from 'lodash-es'\nimport type { DownloadAllFilesResult } from '@/helpers/FileManager/IFileManager'\n\n\nconst logger = debug('seedSdk:files:download')\nconst AUTO_BULK_DOWNLOAD_THROTTLE_MS = 10000\n/** Avoid refetch-on-every-call: transient empty indexer responses were overwriting good cache (see trailing throttle ~10s after success). */\nconst GET_FILES_METADATA_STALE_MS = 120_000\nlet bulkDownloadInFlight: Promise<void> | null = null\nconst lazyDownloadInFlightByTransactionId = new Map<string, Promise<boolean>>()\n\n\nconst getExcludedTransactions = async (): Promise<Set<string>> => {\n const appDb = await whenDbReady()\n if (!appDb) {\n return new Set<string>()\n }\n\n const excludedTransactionsQuery = await appDb\n .select()\n .from(appState)\n .where(eq(appState.key, 'excludedTransactions'))\n\n const excludedTransactions = new Set<string>()\n if (excludedTransactionsQuery && excludedTransactionsQuery.length === 1) {\n const valueString = excludedTransactionsQuery[0].value\n if (valueString) {\n const excludedTransactionsArray = JSON.parse(valueString)\n for (const txId of excludedTransactionsArray) {\n excludedTransactions.add(txId)\n }\n }\n }\n return excludedTransactions\n}\n\n/** Arweave transaction ids are 43 chars in the URL-safe base64 alphabet. */\nconst ARWEAVE_TX_ID_RE = /^[a-z0-9_-]{43}$/i\n\nconst normalizeArweaveTxId = (raw: string | null | undefined): string | undefined => {\n if (raw == null || raw === '') return undefined\n const t = String(raw).trim()\n if (ARWEAVE_TX_ID_RE.test(t)) return t\n const m = t.match(/^([a-z0-9_-]{43})(?:\\.[^/]+)?$/i)\n if (m) return m[1]\n // Values may be full gateway URLs or paths; scan for an embedded tx id. It must be 43 characters\n // on its own, not the start of a longer run: the first 43 of a bytes32 value (`0x0000…0020`,\n // an EAS UID) are in the alphabet too.\n const embedded = t.match(/(?<![a-z0-9_-])[a-z0-9_-]{43}(?![a-z0-9_-])/gi)\n return embedded?.[0]\n}\n\nconst mergeAddressLists = (a: string[] | undefined, b: string[] | undefined): string[] => {\n const seen = new Set<string>()\n const out: string[] = []\n for (const addr of [...(a ?? []), ...(b ?? [])]) {\n if (!addr || !addr.trim()) continue\n const k = addr.toLowerCase()\n if (seen.has(k)) continue\n seen.add(k)\n out.push(addr)\n }\n return out\n}\n\nconst collectTransactionIdsFromLocalMetadata = async (): Promise<string[]> => {\n const appDb = await whenDbReady()\n if (!appDb) {\n return []\n }\n\n const nameOr = or(\n eq(metadata.propertyName, 'storageTransactionId'),\n eq(metadata.propertyName, 'storage_transaction_id'),\n eq(metadata.propertyName, 'transactionId'),\n )\n\n const propRows = await appDb\n .select({ propertyValue: metadata.propertyValue })\n .from(metadata)\n .where(and(nameOr, isNotNull(metadata.propertyValue)))\n\n const refRows = await appDb\n .select({ refResolvedValue: metadata.refResolvedValue })\n .from(metadata)\n .where(isNotNull(metadata.refResolvedValue))\n\n const ids = new Set<string>()\n for (const row of propRows) {\n const id = normalizeArweaveTxId(row.propertyValue ?? undefined)\n if (id) ids.add(id)\n }\n for (const row of refRows) {\n const id = normalizeArweaveTxId(row.refResolvedValue ?? undefined)\n if (id) ids.add(id)\n }\n return Array.from(ids)\n}\n\nconst parseTransactionIdsFromMetadata = (filesMetadata: any[], excludedTransactions: Set<string>): string[] => {\n const transactionIds: string[] = []\n\n for (const fileMetadata of filesMetadata) {\n // Validate and parse decodedDataJson\n if (!fileMetadata.decodedDataJson || fileMetadata.decodedDataJson.trim() === '') {\n console.warn(\n '[events/files] [download] empty decodedDataJson for fileMetadata: ',\n fileMetadata.id,\n )\n continue\n }\n\n let json\n try {\n json = JSON.parse(fileMetadata.decodedDataJson)\n } catch (error) {\n console.warn(\n '[events/files] [download] failed to parse decodedDataJson for fileMetadata: ',\n fileMetadata.id,\n error,\n )\n continue\n }\n\n if (!Array.isArray(json) || json.length === 0 || !json[0]?.value?.value) {\n console.warn(\n '[events/files] [download] invalid decodedDataJson structure for fileMetadata: ',\n fileMetadata.id,\n )\n continue\n }\n\n const rawTx = json[0].value.value\n if (typeof rawTx !== 'string' || rawTx.trim().length === 0) {\n continue\n }\n const transactionId = normalizeArweaveTxId(rawTx.trim())\n if (!transactionId) {\n continue\n }\n if (excludedTransactions.has(transactionId) || excludedTransactions.has(rawTx.trim())) {\n continue\n }\n transactionIds.push(transactionId)\n }\n\n return transactionIds\n}\n\n/** How long looked-up transaction tags stay cached. */\nconst TRANSACTION_TAGS_CACHE_MS = 5 * 60 * 1000\n\n/** Content-SHA-256 tag values for the transactions that have one, from one batched tag lookup (cached). */\nconst getExpectedContentHashes = async (transactionIds: string[]): Promise<Record<string, string>> => {\n const queryClient = BaseQueryClient.getQueryClient()\n const tagsById = new Map<string, TransactionTag[]>()\n const toFetch: string[] = []\n for (const transactionId of transactionIds) {\n // Tags never change once a transaction is indexed, so a cached lookup stays good.\n const cached = queryClient.getQueryData?.(['getTransactionTags', transactionId]) as TransactionTag[] | undefined\n if (cached) tagsById.set(transactionId, cached)\n else toFetch.push(transactionId)\n }\n\n if (toFetch.length > 0) {\n try {\n const fetched = await getTransactionTagsByIds(toFetch, {\n client: BaseArweaveClient.getArweaveClient(),\n onError: (error: unknown) => logger('[download] transaction tags lookup failed', error),\n })\n for (const [transactionId, tags] of fetched) {\n tagsById.set(transactionId, tags)\n // Seed the per-transaction cache entry (the client interface has no setQueryData).\n void queryClient\n .fetchQuery({\n queryKey: ['getTransactionTags', transactionId],\n queryFn: async () => tags,\n // The query client keeps a result only as long as the caller's staleTime.\n staleTime: TRANSACTION_TAGS_CACHE_MS,\n })\n .catch(() => {})\n }\n } catch (error) {\n logger('[download] transaction tags lookup failed', error)\n }\n }\n\n const out: Record<string, string> = {}\n for (const [transactionId, tags] of tagsById) {\n const value = tags.find((tag) => tag.name === CONTENT_SHA256_TAG)?.value?.trim()\n if (value) out[transactionId] = value\n }\n return out\n}\n\nconst downloadTransactionIds = async (\n rawTransactionIds: string[],\n options?: { skipExisting?: boolean },\n): Promise<boolean> => {\n if (!supportsOpfsFileDownloads()) {\n return false\n }\n\n const transactionIds = Array.from(new Set(rawTransactionIds.filter((tx) => !!tx && tx.trim().length > 0)))\n if (transactionIds.length === 0) {\n return false\n }\n\n const excludedTransactions = await getExcludedTransactions()\n\n await ensureReadGatewaySelected()\n\n // Browser: do not call getTransactionStatus() — many gateways (e.g. g8way.io) redirect or omit\n // CORS headers, so fetch() fails and we would wrongly exclude txs. The OPFS worker fetch decides success.\n const transactionIdsToDownload = transactionIds.filter((id) => !excludedTransactions.has(id))\n if (transactionIdsToDownload.length === 0) {\n return false\n }\n\n // One batched lookup for every upload's Content-SHA-256 tag; downloads are verified against it.\n // Missing tags (old uploads, or a just-published one not indexed yet) just mean no verification.\n const expectedContentHashes = await getExpectedContentHashes(transactionIdsToDownload)\n\n // Preferred gateways first: a just-published item is only on the gateway it was uploaded through.\n const arweaveBaseUrls = getArweaveReadBaseUrls()\n\n // Where each ItemStorage child of a composite goes (the worker cannot read the DB or the schema).\n const compositeChildPaths = await getCompositeChildPaths(transactionIdsToDownload).catch((error) => {\n logger('[download] composite child paths lookup failed', error)\n return {} as Record<string, Record<string, string>>\n })\n\n let result: DownloadAllFilesResult | void\n if (transactionIdsToDownload.length === 1) {\n const transactionId = transactionIdsToDownload[0]\n result = await BaseFileManager.downloadFileByTransactionId({\n transactionId,\n arweaveHost: BaseArweaveClient.getBaseUrl(),\n arweaveBaseUrls,\n excludedTransactions,\n expectedContentHash: expectedContentHashes[transactionId],\n compositeChildPaths: compositeChildPaths[transactionId],\n skipExisting: options?.skipExisting,\n })\n } else {\n result = await BaseFileManager.downloadAllFiles({\n transactionIds: transactionIdsToDownload,\n arweaveHost: BaseArweaveClient.getBaseUrl(),\n arweaveBaseUrls,\n excludedTransactions,\n expectedContentHashes,\n compositeChildPaths,\n skipExisting: options?.skipExisting,\n })\n }\n\n if (result) {\n for (const transactionId of result.hashMismatchTransactionIds) {\n // Not saved by the worker; left for a later run (a gateway may serve the right bytes then).\n logger(`[download] ${transactionId}: downloaded bytes do not match Content-SHA-256; skipped`)\n }\n }\n\n return true\n}\n\nconst runBulkDownloadWithDedupe = async (transactionIds: string[]): Promise<void> => {\n if (bulkDownloadInFlight) {\n return bulkDownloadInFlight\n }\n\n bulkDownloadInFlight = (async () => {\n try {\n await downloadTransactionIds(transactionIds, { skipExisting: true })\n } finally {\n bulkDownloadInFlight = null\n }\n })()\n\n return bulkDownloadInFlight\n}\n\n\nexport const downloadAllFilesBinaryRequestHandler = async (addressesHint?: string[]) => {\n if (!supportsOpfsFileDownloads()) {\n return\n }\n\n // Waits for init to open the database, if it hasn't yet\n const fromDb = await getAllAddressesFromDb()\n\n const addresses = mergeAddressLists(addressesHint, fromDb)\n\n if (!addresses || addresses.length === 0) {\n return\n }\n\n const queryClient = BaseQueryClient.getQueryClient()\n const easClient = BaseEasClient.getEasClient()\n\n const filesMetadataQueryKey = ['getFilesMetadata', ...addresses] as const\n const fetchFilesMetadata = () =>\n easClient.request(GET_FILES_METADATA, {\n where: {\n attester: {\n in: addresses,\n },\n schema: {\n is: {\n id: {\n equals:\n '0x55fdefb36fcbbaebeb7d6b41dc3a1a9666e4e42154267c889de064faa7ede517',\n },\n },\n },\n },\n })\n\n let { filesMetadata } = await queryClient.fetchQuery({\n queryKey: filesMetadataQueryKey,\n queryFn: fetchFilesMetadata,\n staleTime: GET_FILES_METADATA_STALE_MS,\n })\n\n if ((!Array.isArray(filesMetadata) || filesMetadata.length === 0) && addresses.length > 0) {\n await queryClient.removeQueries({ queryKey: filesMetadataQueryKey })\n ;({ filesMetadata } = await queryClient.fetchQuery({\n queryKey: filesMetadataQueryKey,\n queryFn: fetchFilesMetadata,\n staleTime: GET_FILES_METADATA_STALE_MS,\n }))\n }\n\n const filesRoot = BaseFileManager.getWorkingDir()\n await BaseFileManager.createDirIfNotExists(filesRoot)\n await BaseFileManager.createDirIfNotExists(BaseFileManager.getFilesPath('html'))\n await BaseFileManager.createDirIfNotExists(BaseFileManager.getFilesPath('json'))\n await BaseFileManager.createDirIfNotExists(BaseFileManager.getFilesPath('images'))\n await BaseFileManager.createDirIfNotExists(BaseFileManager.getFilesPath('files'))\n\n const excludedTransactions = await getExcludedTransactions()\n const fromEas = parseTransactionIdsFromMetadata(filesMetadata ?? [], excludedTransactions)\n const fromLocal = await collectTransactionIdsFromLocalMetadata()\n const transactionIds = Array.from(new Set([...fromEas, ...fromLocal]))\n await runBulkDownloadWithDedupe(transactionIds)\n}\n\nexport const downloadTransactionIdWithDedupe = async (transactionId: string): Promise<boolean> => {\n if (!supportsOpfsFileDownloads() || !transactionId || transactionId.trim().length === 0) {\n return false\n }\n\n const normalizedTxId = normalizeArweaveTxId(transactionId)\n if (!normalizedTxId) {\n logger(`[download] not an Arweave transaction id: ${transactionId}`)\n return false\n }\n\n const existing = lazyDownloadInFlightByTransactionId.get(normalizedTxId)\n if (existing) {\n return existing\n }\n\n const inFlight = (async () => {\n try {\n // No skipExisting: the caller found no local file, so a file on disk it could not see is\n // written again and announced.\n const ok = await downloadTransactionIds([normalizedTxId])\n return ok\n } finally {\n lazyDownloadInFlightByTransactionId.delete(normalizedTxId)\n }\n })()\n\n lazyDownloadInFlightByTransactionId.set(normalizedTxId, inFlight)\n return inFlight\n}\n\nconst scheduleBulkFilesDownloadFromEasSyncThrottled = throttle((addressesHint?: string[]) => {\n void downloadAllFilesBinaryRequestHandler(addressesHint).catch((error) => {\n logger('[scheduleBulkFilesDownloadFromEasSync] failed', error)\n })\n}, AUTO_BULK_DOWNLOAD_THROTTLE_MS, { leading: true, trailing: false })\n\nexport const scheduleBulkFilesDownloadFromEasSync = (addressesHint?: string[]): void => {\n if (!supportsOpfsFileDownloads()) {\n return\n }\n scheduleBulkFilesDownloadFromEasSyncThrottled(addressesHint)\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"download-DHWUPLlK.js","sources":["../../src/db/read/getCompositeChildPaths.ts","../../src/events/files/download.ts"],"sourcesContent":["import { and, inArray, isNotNull } from 'drizzle-orm'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { metadata } from '@/seedSchema'\nimport { getItemStorageSubdir } from '@/helpers/storageDir'\n\n/** Rows per query: well under SQLite's bound-parameter limit. */\nconst CHUNK_SIZE = 400\n\n/**\n * Where the download worker saves each child of a composite upload, by transaction id then child\n * (property) name: a path relative to the files root.\n *\n * The paths come from the ItemStorage rows sync derives from a `storage_transaction_id`\n * attestation (see `createMetadataRecordsForStorageTransactionId`): property value = the\n * transaction id, `refResolvedValue` = `<txId><extension>`, `localStorageDir` = the model's storage\n * directory. Those rows are what hydration reads, so a child saved here is found as that property's\n * file. Transactions with no such rows are left out; the worker then falls back to the legacy\n * html / json layout.\n */\nexport const getCompositeChildPaths = async (\n transactionIds: string[],\n): Promise<Record<string, Record<string, string>>> => {\n const out: Record<string, Record<string, string>> = {}\n const appDb = BaseDb.getAppDb()\n if (!appDb || transactionIds.length === 0) return out\n\n for (let i = 0; i < transactionIds.length; i += CHUNK_SIZE) {\n const chunk = transactionIds.slice(i, i + CHUNK_SIZE)\n const rows = await appDb\n .select({\n transactionId: metadata.propertyValue,\n propertyName: metadata.propertyName,\n refResolvedValue: metadata.refResolvedValue,\n localStorageDir: metadata.localStorageDir,\n })\n .from(metadata)\n .where(\n and(\n isNotNull(metadata.derivedFromUid),\n isNotNull(metadata.refResolvedValue),\n inArray(metadata.propertyValue, chunk),\n ),\n )\n\n for (const row of rows) {\n const { transactionId, propertyName, refResolvedValue } = row\n if (!transactionId || !propertyName || !refResolvedValue) continue\n // A file name, never a path: anything else is not where the SDK would look.\n if (refResolvedValue.includes('/') || refResolvedValue.includes('\\\\')) continue\n const byName = (out[transactionId] ??= {})\n byName[propertyName] ??= `${getItemStorageSubdir(row.localStorageDir)}/${refResolvedValue}`\n }\n }\n\n return out\n}\n","import { appState } from '@/seedSchema'\nimport { and, eq, isNotNull, or } from 'drizzle-orm'\nimport { getAllAddressesFromDb } from '@/helpers/db'\nimport {\n BaseFileManager,\n} from '@/helpers'\nimport { GET_FILES_METADATA } from '@seedprotocol/eas'\nimport debug from 'debug'\n// Dynamic import to break circular dependency with globalMachine\n// import { getGlobalService } from '@/services/global/globalMachine'\nimport { whenDbReady } from '@/client/readiness'\nimport { metadata } from '@/seedSchema'\nimport { BaseEasClient, BaseQueryClient } from '@seedprotocol/eas'\nimport {\n BaseArweaveClient,\n ensureReadGatewaySelected,\n getArweaveReadBaseUrls,\n getTransactionTagsByIds,\n type TransactionTag,\n} from '@seedprotocol/arweave'\nimport { supportsOpfsFileDownloads } from '@/helpers/environment'\nimport { CONTENT_SHA256_TAG } from '@/helpers/arweaveContentTags'\nimport { getCompositeChildPaths } from '@/db/read/getCompositeChildPaths'\nimport { throttle } from 'lodash-es'\nimport type { DownloadAllFilesResult } from '@/helpers/FileManager/IFileManager'\n\n\nconst logger = debug('seedSdk:files:download')\nconst AUTO_BULK_DOWNLOAD_THROTTLE_MS = 10000\n/** Avoid refetch-on-every-call: transient empty indexer responses were overwriting good cache (see trailing throttle ~10s after success). */\nconst GET_FILES_METADATA_STALE_MS = 120_000\nlet bulkDownloadInFlight: Promise<void> | null = null\nconst lazyDownloadInFlightByTransactionId = new Map<string, Promise<boolean>>()\n\n\nconst getExcludedTransactions = async (): Promise<Set<string>> => {\n const appDb = await whenDbReady()\n if (!appDb) {\n return new Set<string>()\n }\n\n const excludedTransactionsQuery = await appDb\n .select()\n .from(appState)\n .where(eq(appState.key, 'excludedTransactions'))\n\n const excludedTransactions = new Set<string>()\n if (excludedTransactionsQuery && excludedTransactionsQuery.length === 1) {\n const valueString = excludedTransactionsQuery[0].value\n if (valueString) {\n const excludedTransactionsArray = JSON.parse(valueString)\n for (const txId of excludedTransactionsArray) {\n excludedTransactions.add(txId)\n }\n }\n }\n return excludedTransactions\n}\n\n/** Arweave transaction ids are 43 chars in the URL-safe base64 alphabet. */\nconst ARWEAVE_TX_ID_RE = /^[a-z0-9_-]{43}$/i\n\nconst normalizeArweaveTxId = (raw: string | null | undefined): string | undefined => {\n if (raw == null || raw === '') return undefined\n const t = String(raw).trim()\n if (ARWEAVE_TX_ID_RE.test(t)) return t\n const m = t.match(/^([a-z0-9_-]{43})(?:\\.[^/]+)?$/i)\n if (m) return m[1]\n // Values may be full gateway URLs or paths; scan for an embedded tx id. It must be 43 characters\n // on its own, not the start of a longer run: the first 43 of a bytes32 value (`0x0000…0020`,\n // an EAS UID) are in the alphabet too.\n const embedded = t.match(/(?<![a-z0-9_-])[a-z0-9_-]{43}(?![a-z0-9_-])/gi)\n return embedded?.[0]\n}\n\nconst mergeAddressLists = (a: string[] | undefined, b: string[] | undefined): string[] => {\n const seen = new Set<string>()\n const out: string[] = []\n for (const addr of [...(a ?? []), ...(b ?? [])]) {\n if (!addr || !addr.trim()) continue\n const k = addr.toLowerCase()\n if (seen.has(k)) continue\n seen.add(k)\n out.push(addr)\n }\n return out\n}\n\nconst collectTransactionIdsFromLocalMetadata = async (): Promise<string[]> => {\n const appDb = await whenDbReady()\n if (!appDb) {\n return []\n }\n\n const nameOr = or(\n eq(metadata.propertyName, 'storageTransactionId'),\n eq(metadata.propertyName, 'storage_transaction_id'),\n eq(metadata.propertyName, 'transactionId'),\n )\n\n const propRows = await appDb\n .select({ propertyValue: metadata.propertyValue })\n .from(metadata)\n .where(and(nameOr, isNotNull(metadata.propertyValue)))\n\n const refRows = await appDb\n .select({ refResolvedValue: metadata.refResolvedValue })\n .from(metadata)\n .where(isNotNull(metadata.refResolvedValue))\n\n const ids = new Set<string>()\n for (const row of propRows) {\n const id = normalizeArweaveTxId(row.propertyValue ?? undefined)\n if (id) ids.add(id)\n }\n for (const row of refRows) {\n const id = normalizeArweaveTxId(row.refResolvedValue ?? undefined)\n if (id) ids.add(id)\n }\n return Array.from(ids)\n}\n\nconst parseTransactionIdsFromMetadata = (filesMetadata: any[], excludedTransactions: Set<string>): string[] => {\n const transactionIds: string[] = []\n\n for (const fileMetadata of filesMetadata) {\n // Validate and parse decodedDataJson\n if (!fileMetadata.decodedDataJson || fileMetadata.decodedDataJson.trim() === '') {\n console.warn(\n '[events/files] [download] empty decodedDataJson for fileMetadata: ',\n fileMetadata.id,\n )\n continue\n }\n\n let json\n try {\n json = JSON.parse(fileMetadata.decodedDataJson)\n } catch (error) {\n console.warn(\n '[events/files] [download] failed to parse decodedDataJson for fileMetadata: ',\n fileMetadata.id,\n error,\n )\n continue\n }\n\n if (!Array.isArray(json) || json.length === 0 || !json[0]?.value?.value) {\n console.warn(\n '[events/files] [download] invalid decodedDataJson structure for fileMetadata: ',\n fileMetadata.id,\n )\n continue\n }\n\n const rawTx = json[0].value.value\n if (typeof rawTx !== 'string' || rawTx.trim().length === 0) {\n continue\n }\n const transactionId = normalizeArweaveTxId(rawTx.trim())\n if (!transactionId) {\n continue\n }\n if (excludedTransactions.has(transactionId) || excludedTransactions.has(rawTx.trim())) {\n continue\n }\n transactionIds.push(transactionId)\n }\n\n return transactionIds\n}\n\n/** How long looked-up transaction tags stay cached. */\nconst TRANSACTION_TAGS_CACHE_MS = 5 * 60 * 1000\n\n/** Content-SHA-256 tag values for the transactions that have one, from one batched tag lookup (cached). */\nconst getExpectedContentHashes = async (transactionIds: string[]): Promise<Record<string, string>> => {\n const queryClient = BaseQueryClient.getQueryClient()\n const tagsById = new Map<string, TransactionTag[]>()\n const toFetch: string[] = []\n for (const transactionId of transactionIds) {\n // Tags never change once a transaction is indexed, so a cached lookup stays good.\n const cached = queryClient.getQueryData?.(['getTransactionTags', transactionId]) as TransactionTag[] | undefined\n if (cached) tagsById.set(transactionId, cached)\n else toFetch.push(transactionId)\n }\n\n if (toFetch.length > 0) {\n try {\n const fetched = await getTransactionTagsByIds(toFetch, {\n client: BaseArweaveClient.getArweaveClient(),\n onError: (error: unknown) => logger('[download] transaction tags lookup failed', error),\n })\n for (const [transactionId, tags] of fetched) {\n tagsById.set(transactionId, tags)\n // Seed the per-transaction cache entry (the client interface has no setQueryData).\n void queryClient\n .fetchQuery({\n queryKey: ['getTransactionTags', transactionId],\n queryFn: async () => tags,\n // The query client keeps a result only as long as the caller's staleTime.\n staleTime: TRANSACTION_TAGS_CACHE_MS,\n })\n .catch(() => {})\n }\n } catch (error) {\n logger('[download] transaction tags lookup failed', error)\n }\n }\n\n const out: Record<string, string> = {}\n for (const [transactionId, tags] of tagsById) {\n const value = tags.find((tag) => tag.name === CONTENT_SHA256_TAG)?.value?.trim()\n if (value) out[transactionId] = value\n }\n return out\n}\n\nconst downloadTransactionIds = async (\n rawTransactionIds: string[],\n options?: { skipExisting?: boolean },\n): Promise<boolean> => {\n if (!supportsOpfsFileDownloads()) {\n return false\n }\n\n const transactionIds = Array.from(new Set(rawTransactionIds.filter((tx) => !!tx && tx.trim().length > 0)))\n if (transactionIds.length === 0) {\n return false\n }\n\n const excludedTransactions = await getExcludedTransactions()\n\n await ensureReadGatewaySelected()\n\n // Browser: do not call getTransactionStatus() — many gateways (e.g. g8way.io) redirect or omit\n // CORS headers, so fetch() fails and we would wrongly exclude txs. The OPFS worker fetch decides success.\n const transactionIdsToDownload = transactionIds.filter((id) => !excludedTransactions.has(id))\n if (transactionIdsToDownload.length === 0) {\n return false\n }\n\n // One batched lookup for every upload's Content-SHA-256 tag; downloads are verified against it.\n // Missing tags (old uploads, or a just-published one not indexed yet) just mean no verification.\n const expectedContentHashes = await getExpectedContentHashes(transactionIdsToDownload)\n\n // Preferred gateways first: a just-published item is only on the gateway it was uploaded through.\n const arweaveBaseUrls = getArweaveReadBaseUrls()\n\n // Where each ItemStorage child of a composite goes (the worker cannot read the DB or the schema).\n const compositeChildPaths = await getCompositeChildPaths(transactionIdsToDownload).catch((error) => {\n logger('[download] composite child paths lookup failed', error)\n return {} as Record<string, Record<string, string>>\n })\n\n let result: DownloadAllFilesResult | void\n if (transactionIdsToDownload.length === 1) {\n const transactionId = transactionIdsToDownload[0]\n result = await BaseFileManager.downloadFileByTransactionId({\n transactionId,\n arweaveHost: BaseArweaveClient.getBaseUrl(),\n arweaveBaseUrls,\n excludedTransactions,\n expectedContentHash: expectedContentHashes[transactionId],\n compositeChildPaths: compositeChildPaths[transactionId],\n skipExisting: options?.skipExisting,\n })\n } else {\n result = await BaseFileManager.downloadAllFiles({\n transactionIds: transactionIdsToDownload,\n arweaveHost: BaseArweaveClient.getBaseUrl(),\n arweaveBaseUrls,\n excludedTransactions,\n expectedContentHashes,\n compositeChildPaths,\n skipExisting: options?.skipExisting,\n })\n }\n\n if (result) {\n for (const transactionId of result.hashMismatchTransactionIds) {\n // Not saved by the worker; left for a later run (a gateway may serve the right bytes then).\n logger(`[download] ${transactionId}: downloaded bytes do not match Content-SHA-256; skipped`)\n }\n }\n\n return true\n}\n\nconst runBulkDownloadWithDedupe = async (transactionIds: string[]): Promise<void> => {\n if (bulkDownloadInFlight) {\n return bulkDownloadInFlight\n }\n\n bulkDownloadInFlight = (async () => {\n try {\n await downloadTransactionIds(transactionIds, { skipExisting: true })\n } finally {\n bulkDownloadInFlight = null\n }\n })()\n\n return bulkDownloadInFlight\n}\n\n\nexport const downloadAllFilesBinaryRequestHandler = async (addressesHint?: string[]) => {\n if (!supportsOpfsFileDownloads()) {\n return\n }\n\n // Waits for init to open the database, if it hasn't yet\n const fromDb = await getAllAddressesFromDb()\n\n const addresses = mergeAddressLists(addressesHint, fromDb)\n\n if (!addresses || addresses.length === 0) {\n return\n }\n\n const queryClient = BaseQueryClient.getQueryClient()\n const easClient = BaseEasClient.getEasClient()\n\n const filesMetadataQueryKey = ['getFilesMetadata', ...addresses] as const\n const fetchFilesMetadata = () =>\n easClient.request(GET_FILES_METADATA, {\n where: {\n attester: {\n in: addresses,\n },\n schema: {\n is: {\n id: {\n equals:\n '0x55fdefb36fcbbaebeb7d6b41dc3a1a9666e4e42154267c889de064faa7ede517',\n },\n },\n },\n },\n })\n\n let { filesMetadata } = await queryClient.fetchQuery({\n queryKey: filesMetadataQueryKey,\n queryFn: fetchFilesMetadata,\n staleTime: GET_FILES_METADATA_STALE_MS,\n })\n\n if ((!Array.isArray(filesMetadata) || filesMetadata.length === 0) && addresses.length > 0) {\n await queryClient.removeQueries({ queryKey: filesMetadataQueryKey })\n ;({ filesMetadata } = await queryClient.fetchQuery({\n queryKey: filesMetadataQueryKey,\n queryFn: fetchFilesMetadata,\n staleTime: GET_FILES_METADATA_STALE_MS,\n }))\n }\n\n const filesRoot = BaseFileManager.getWorkingDir()\n await BaseFileManager.createDirIfNotExists(filesRoot)\n await BaseFileManager.createDirIfNotExists(BaseFileManager.getFilesPath('html'))\n await BaseFileManager.createDirIfNotExists(BaseFileManager.getFilesPath('json'))\n await BaseFileManager.createDirIfNotExists(BaseFileManager.getFilesPath('images'))\n await BaseFileManager.createDirIfNotExists(BaseFileManager.getFilesPath('files'))\n\n const excludedTransactions = await getExcludedTransactions()\n const fromEas = parseTransactionIdsFromMetadata(filesMetadata ?? [], excludedTransactions)\n const fromLocal = await collectTransactionIdsFromLocalMetadata()\n const transactionIds = Array.from(new Set([...fromEas, ...fromLocal]))\n await runBulkDownloadWithDedupe(transactionIds)\n}\n\nexport const downloadTransactionIdWithDedupe = async (transactionId: string): Promise<boolean> => {\n if (!supportsOpfsFileDownloads() || !transactionId || transactionId.trim().length === 0) {\n return false\n }\n\n const normalizedTxId = normalizeArweaveTxId(transactionId)\n if (!normalizedTxId) {\n logger(`[download] not an Arweave transaction id: ${transactionId}`)\n return false\n }\n\n const existing = lazyDownloadInFlightByTransactionId.get(normalizedTxId)\n if (existing) {\n return existing\n }\n\n const inFlight = (async () => {\n try {\n // No skipExisting: the caller found no local file, so a file on disk it could not see is\n // written again and announced.\n const ok = await downloadTransactionIds([normalizedTxId])\n return ok\n } finally {\n lazyDownloadInFlightByTransactionId.delete(normalizedTxId)\n }\n })()\n\n lazyDownloadInFlightByTransactionId.set(normalizedTxId, inFlight)\n return inFlight\n}\n\nconst scheduleBulkFilesDownloadFromEasSyncThrottled = throttle((addressesHint?: string[]) => {\n void downloadAllFilesBinaryRequestHandler(addressesHint).catch((error) => {\n logger('[scheduleBulkFilesDownloadFromEasSync] failed', error)\n })\n}, AUTO_BULK_DOWNLOAD_THROTTLE_MS, { leading: true, trailing: false })\n\nexport const scheduleBulkFilesDownloadFromEasSync = (addressesHint?: string[]): void => {\n if (!supportsOpfsFileDownloads()) {\n return\n }\n scheduleBulkFilesDownloadFromEasSyncThrottled(addressesHint)\n}\n"],"names":[],"mappings":"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"}
@@ -1,23 +1,26 @@
1
1
  import { fetchEasModelSchemas } from '@seedprotocol/eas';
2
2
  export { getItemPropertiesFromEas, getItemVersionsFromEas, getSeedsFromSchemaUids } from '@seedprotocol/eas';
3
- import { e as localModelSchemaLookups } from './errors-DKxFSvb3.js';
3
+ import { k as localModelSchemaLookups } from './publishErrors-DZXDX3B6.js';
4
4
  import 'xstate';
5
- import './Item-Ld1iPicQ.js';
6
- import './tabEvents-BnBzIdEi.js';
5
+ import './Item-BU9wIT7l.js';
6
+ import './arweaveContentTags-iW_HcWJA.js';
7
7
  import '@sinclair/typebox';
8
8
  import 'debug';
9
9
  import 'nanoid';
10
10
  import 'nanoid-dictionary';
11
- import './BaseFileManager-DLou1TZS.js';
11
+ import './BaseFileManager-D-pLXQAp.js';
12
12
  import 'drizzle-orm/sqlite-core';
13
13
  import 'drizzle-orm';
14
14
  import '@seedprotocol/arweave';
15
+ import '@noble/hashes/sha256';
16
+ import '@noble/hashes/sha3';
17
+ import '@noble/hashes/utils';
15
18
  import 'pluralize';
16
19
  import 'rxjs';
17
20
  import 'lodash-es';
18
- import '@noble/hashes/sha3';
19
- import '@noble/hashes/utils';
20
21
  import '@seedprotocol/query';
22
+ import '@seedprotocol/archive';
23
+ import 'parse5';
21
24
 
22
25
  // Sync reads EAS through this module so tests can replace these with one `vi.mock('@/eas')`.
23
26
  /**
@@ -28,4 +31,4 @@ import '@seedprotocol/query';
28
31
  const getModelSchemasFromEas = async (lookups) => fetchEasModelSchemas(lookups ?? (await localModelSchemaLookups()));
29
32
 
30
33
  export { getModelSchemasFromEas };
31
- //# sourceMappingURL=eas-CdhfODXL.js.map
34
+ //# sourceMappingURL=eas-MXEdKKVc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"eas-CdhfODXL.js","sources":["../../src/eas.ts"],"sourcesContent":["// Sync reads EAS through this module so tests can replace these with one `vi.mock('@/eas')`.\nexport {\n getItemVersionsFromEas,\n getItemPropertiesFromEas,\n getSeedsFromSchemaUids,\n} from '@seedprotocol/eas'\n\nimport { fetchEasModelSchemas } from '@seedprotocol/eas'\nimport type { EASSchema, ModelSchemaLookup } from '@seedprotocol/eas'\nimport { localModelSchemaLookups } from '@/db/read/localModelSchemaLookups'\n\n/**\n * The EAS model schemas the local models (or `lookups`) can match; see fetchEasModelSchemas.\n * Init and sync match the result with matchEasModelSchemas and record `model_uids` from it with\n * writeModelUids. Throws when the request fails.\n */\nexport const getModelSchemasFromEas = async (lookups?: readonly ModelSchemaLookup[]): Promise<EASSchema[]> =>\n fetchEasModelSchemas(lookups ?? (await localModelSchemaLookups())) as Promise<EASSchema[]>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAWA;;;;AAIG;MACU,sBAAsB,GAAG,OAAO,OAAsC,KACjF,oBAAoB,CAAC,OAAO,KAAK,MAAM,uBAAuB,EAAE,CAAC;;"}
1
+ {"version":3,"file":"eas-MXEdKKVc.js","sources":["../../src/eas.ts"],"sourcesContent":["// Sync reads EAS through this module so tests can replace these with one `vi.mock('@/eas')`.\nexport {\n getItemVersionsFromEas,\n getItemPropertiesFromEas,\n getSeedsFromSchemaUids,\n} from '@seedprotocol/eas'\n\nimport { fetchEasModelSchemas } from '@seedprotocol/eas'\nimport type { EASSchema, ModelSchemaLookup } from '@seedprotocol/eas'\nimport { localModelSchemaLookups } from '@/db/read/localModelSchemaLookups'\n\n/**\n * The EAS model schemas the local models (or `lookups`) can match; see fetchEasModelSchemas.\n * Init and sync match the result with matchEasModelSchemas and record `model_uids` from it with\n * writeModelUids. Throws when the request fails.\n */\nexport const getModelSchemasFromEas = async (lookups?: readonly ModelSchemaLookup[]): Promise<EASSchema[]> =>\n fetchEasModelSchemas(lookups ?? (await localModelSchemaLookups())) as Promise<EASSchema[]>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAWA;;;;AAIG;MACU,sBAAsB,GAAG,OAAO,OAAsC,KACjF,oBAAoB,CAAC,OAAO,KAAK,MAAM,uBAAuB,EAAE,CAAC;;"}
@@ -1,20 +1,19 @@
1
1
  import debug from 'debug';
2
- import { downloadTransactionIdWithDedupe } from './download-Cvac_VGu.js';
3
- import { s as supportsOpfsFileDownloads, I as ImageSize } from './tabEvents-BnBzIdEi.js';
4
- import { w as BaseFileManager } from './BaseFileManager-DLou1TZS.js';
5
- import { y as findFileInDir } from './Item-Ld1iPicQ.js';
2
+ import { downloadTransactionIdWithDedupe } from './download-DHWUPLlK.js';
3
+ import { s as supportsOpfsFileDownloads, I as ImageSize } from './arweaveContentTags-iW_HcWJA.js';
4
+ import { r as BaseFileManager } from './BaseFileManager-D-pLXQAp.js';
5
+ import { y as findFileInDir } from './Item-BU9wIT7l.js';
6
6
  import 'drizzle-orm';
7
7
  import '@seedprotocol/arweave';
8
8
  import 'pluralize';
9
9
  import '@seedprotocol/eas';
10
- import './arweaveContentTags-Bh4wCTal.js';
11
- import '@noble/hashes/sha256';
12
- import '@noble/hashes/sha3';
13
- import '@noble/hashes/utils';
14
10
  import 'lodash-es';
15
11
  import '@sinclair/typebox';
16
12
  import 'nanoid';
17
13
  import 'nanoid-dictionary';
14
+ import '@noble/hashes/sha256';
15
+ import '@noble/hashes/sha3';
16
+ import '@noble/hashes/utils';
18
17
  import 'drizzle-orm/sqlite-core';
19
18
  import 'xstate';
20
19
  import 'rxjs';
@@ -173,4 +172,4 @@ const ensureImageLocal = async (params) => {
173
172
  };
174
173
 
175
174
  export { closestImageSize, ensureImageLocal, normalizeArweaveTxIdForEnsure };
176
- //# sourceMappingURL=ensureImageLocal-DNM6c2yD.js.map
175
+ //# sourceMappingURL=ensureImageLocal-B6suz6FC.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ensureImageLocal-DNM6c2yD.js","sources":["../../src/helpers/ensureImageLocal.ts"],"sourcesContent":["import debug from 'debug'\nimport { downloadTransactionIdWithDedupe } from '@/events/files/download'\nimport { ImageSize } from '@/helpers/constants'\nimport { supportsOpfsFileDownloads } from '@/helpers/environment'\nimport { BaseFileManager } from '@/helpers/FileManager/BaseFileManager'\nimport { findFileInDir } from '@/storageValue/findFile'\n\nconst logger = debug('seedSdk:helpers:ensureImageLocal')\n\n/** Arweave transaction ids are 43 chars in the URL-safe base64 alphabet. */\nconst ARWEAVE_TX_ID_RE = /^[a-z0-9_-]{43}$/i\n\nconst IMAGE_SIZES = [\n ImageSize.EXTRA_SMALL,\n ImageSize.SMALL,\n ImageSize.MEDIUM,\n ImageSize.LARGE,\n ImageSize.EXTRA_LARGE,\n] as const\n\nexport type EnsureImageLocalParams = {\n /** 43-char tx id, or a URL/path containing one */\n transactionId?: string\n /** Local basename / refResolvedValue under images/ */\n fileName?: string\n /** Display widths; each mapped to closest ImageSize. Default: [EXTRA_SMALL] */\n widths?: number[]\n}\n\nexport type EnsureImageLocalResult = {\n status: 'ready' | 'unsupported' | 'failed' | 'missing-id'\n filePath?: string\n createdWidths?: number[]\n}\n\nconst inFlightByKey = new Map<string, Promise<EnsureImageLocalResult>>()\n\nexport const normalizeArweaveTxIdForEnsure = (\n raw: string | null | undefined,\n): string | undefined => {\n if (raw == null || raw === '') return undefined\n const t = String(raw).trim()\n if (ARWEAVE_TX_ID_RE.test(t)) return t\n const m = t.match(/^([a-z0-9_-]{43})(?:\\.[^/]+)?$/i)\n if (m) return m[1]\n const embedded = t.match(/[a-z0-9_-]{43}/gi)\n if (embedded) {\n for (const candidate of embedded) {\n if (ARWEAVE_TX_ID_RE.test(candidate)) return candidate\n }\n }\n return undefined\n}\n\nexport const closestImageSize = (width: number): ImageSize => {\n let best: ImageSize = ImageSize.EXTRA_SMALL\n let bestDist = Math.abs(best - width)\n for (const size of IMAGE_SIZES) {\n const dist = Math.abs(size - width)\n if (dist < bestDist) {\n best = size\n bestDist = dist\n }\n }\n return best\n}\n\nconst mapRequestedWidthsToImageSizes = (widths?: number[]): ImageSize[] => {\n const requested =\n widths && widths.length > 0 ? widths : [ImageSize.EXTRA_SMALL]\n const unique = new Set<ImageSize>()\n for (const w of requested) {\n if (typeof w !== 'number' || !Number.isFinite(w) || w <= 0) continue\n unique.add(closestImageSize(w))\n }\n if (unique.size === 0) {\n unique.add(ImageSize.EXTRA_SMALL)\n }\n return Array.from(unique).sort((a, b) => a - b)\n}\n\nconst getBasename = (filePath: string): string => {\n const path = BaseFileManager.getPathModule()\n return path.basename(filePath)\n}\n\nconst getBasenameWithoutExtension = (fileName: string): string => {\n const match = fileName.match(/^(.*[\\/\\\\])?([^\\/\\\\]+?)(\\.[^.\\/\\\\]*)?$/)\n return match?.[2] ?? fileName\n}\n\nconst sizedVariantPath = (originalFilePath: string, size: ImageSize): string => {\n const path = BaseFileManager.getPathModule()\n const dir = path.dirname(originalFilePath)\n const base = getBasenameWithoutExtension(getBasename(originalFilePath))\n return path.join(dir, String(size), `${base}.webp`)\n}\n\nconst ensureKey = (\n txId: string | undefined,\n fileName: string | undefined,\n sizes: ImageSize[],\n): string => {\n const idPart = txId ?? fileName ?? ''\n return `${idPart}|${sizes.join(',')}`\n}\n\nconst runEnsureImageLocal = async (\n params: EnsureImageLocalParams,\n): Promise<EnsureImageLocalResult> => {\n if (!supportsOpfsFileDownloads()) {\n return { status: 'unsupported' }\n }\n\n const fileName = params.fileName?.trim() || undefined\n const txId =\n normalizeArweaveTxIdForEnsure(params.transactionId) ??\n normalizeArweaveTxIdForEnsure(fileName)\n\n if (!txId && !fileName) {\n return { status: 'missing-id' }\n }\n\n const targetSizes = mapRequestedWidthsToImageSizes(params.widths)\n const needles = [fileName, txId].filter(\n (n): n is string => typeof n === 'string' && n.length > 0,\n )\n\n try {\n let filePath = await findFileInDir('images', needles)\n if (!filePath && txId) {\n await downloadTransactionIdWithDedupe(txId)\n filePath = await findFileInDir('images', needles)\n }\n\n if (!filePath) {\n return { status: 'failed' }\n }\n\n const createdWidths: number[] = []\n for (const size of targetSizes) {\n const variantPath = sizedVariantPath(filePath, size)\n const exists = await BaseFileManager.pathExists(variantPath)\n if (exists) continue\n await BaseFileManager.resizeImage({\n filePath,\n width: size,\n height: size,\n })\n createdWidths.push(size)\n }\n\n return {\n status: 'ready',\n filePath,\n createdWidths,\n }\n } catch (error) {\n logger('ensureImageLocal failed', error)\n return { status: 'failed' }\n }\n}\n\n/**\n * Ensure an image original exists in OPFS (downloading from Arweave if needed)\n * and create only the requested ImageSize variant(s) for that one file.\n */\nexport const ensureImageLocal = async (\n params: EnsureImageLocalParams,\n): Promise<EnsureImageLocalResult> => {\n if (!supportsOpfsFileDownloads()) {\n return { status: 'unsupported' }\n }\n\n const fileName = params.fileName?.trim() || undefined\n const txId =\n normalizeArweaveTxIdForEnsure(params.transactionId) ??\n normalizeArweaveTxIdForEnsure(fileName)\n\n if (!txId && !fileName) {\n return { status: 'missing-id' }\n }\n\n const targetSizes = mapRequestedWidthsToImageSizes(params.widths)\n const key = ensureKey(txId, fileName, targetSizes)\n\n const existing = inFlightByKey.get(key)\n if (existing) {\n return existing\n }\n\n const inFlight = (async () => {\n try {\n return await runEnsureImageLocal({\n transactionId: txId,\n fileName,\n widths: targetSizes,\n })\n } finally {\n inFlightByKey.delete(key)\n }\n })()\n\n inFlightByKey.set(key, inFlight)\n return inFlight\n}\n\n/** Test-only: clear in-flight dedupe map. */\nexport const resetEnsureImageLocalInFlightForTests = (): void => {\n inFlightByKey.clear()\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ensureImageLocal-B6suz6FC.js","sources":["../../src/helpers/ensureImageLocal.ts"],"sourcesContent":["import debug from 'debug'\nimport { downloadTransactionIdWithDedupe } from '@/events/files/download'\nimport { ImageSize } from '@/helpers/constants'\nimport { supportsOpfsFileDownloads } from '@/helpers/environment'\nimport { BaseFileManager } from '@/helpers/FileManager/BaseFileManager'\nimport { findFileInDir } from '@/storageValue/findFile'\n\nconst logger = debug('seedSdk:helpers:ensureImageLocal')\n\n/** Arweave transaction ids are 43 chars in the URL-safe base64 alphabet. */\nconst ARWEAVE_TX_ID_RE = /^[a-z0-9_-]{43}$/i\n\nconst IMAGE_SIZES = [\n ImageSize.EXTRA_SMALL,\n ImageSize.SMALL,\n ImageSize.MEDIUM,\n ImageSize.LARGE,\n ImageSize.EXTRA_LARGE,\n] as const\n\nexport type EnsureImageLocalParams = {\n /** 43-char tx id, or a URL/path containing one */\n transactionId?: string\n /** Local basename / refResolvedValue under images/ */\n fileName?: string\n /** Display widths; each mapped to closest ImageSize. Default: [EXTRA_SMALL] */\n widths?: number[]\n}\n\nexport type EnsureImageLocalResult = {\n status: 'ready' | 'unsupported' | 'failed' | 'missing-id'\n filePath?: string\n createdWidths?: number[]\n}\n\nconst inFlightByKey = new Map<string, Promise<EnsureImageLocalResult>>()\n\nexport const normalizeArweaveTxIdForEnsure = (\n raw: string | null | undefined,\n): string | undefined => {\n if (raw == null || raw === '') return undefined\n const t = String(raw).trim()\n if (ARWEAVE_TX_ID_RE.test(t)) return t\n const m = t.match(/^([a-z0-9_-]{43})(?:\\.[^/]+)?$/i)\n if (m) return m[1]\n const embedded = t.match(/[a-z0-9_-]{43}/gi)\n if (embedded) {\n for (const candidate of embedded) {\n if (ARWEAVE_TX_ID_RE.test(candidate)) return candidate\n }\n }\n return undefined\n}\n\nexport const closestImageSize = (width: number): ImageSize => {\n let best: ImageSize = ImageSize.EXTRA_SMALL\n let bestDist = Math.abs(best - width)\n for (const size of IMAGE_SIZES) {\n const dist = Math.abs(size - width)\n if (dist < bestDist) {\n best = size\n bestDist = dist\n }\n }\n return best\n}\n\nconst mapRequestedWidthsToImageSizes = (widths?: number[]): ImageSize[] => {\n const requested =\n widths && widths.length > 0 ? widths : [ImageSize.EXTRA_SMALL]\n const unique = new Set<ImageSize>()\n for (const w of requested) {\n if (typeof w !== 'number' || !Number.isFinite(w) || w <= 0) continue\n unique.add(closestImageSize(w))\n }\n if (unique.size === 0) {\n unique.add(ImageSize.EXTRA_SMALL)\n }\n return Array.from(unique).sort((a, b) => a - b)\n}\n\nconst getBasename = (filePath: string): string => {\n const path = BaseFileManager.getPathModule()\n return path.basename(filePath)\n}\n\nconst getBasenameWithoutExtension = (fileName: string): string => {\n const match = fileName.match(/^(.*[\\/\\\\])?([^\\/\\\\]+?)(\\.[^.\\/\\\\]*)?$/)\n return match?.[2] ?? fileName\n}\n\nconst sizedVariantPath = (originalFilePath: string, size: ImageSize): string => {\n const path = BaseFileManager.getPathModule()\n const dir = path.dirname(originalFilePath)\n const base = getBasenameWithoutExtension(getBasename(originalFilePath))\n return path.join(dir, String(size), `${base}.webp`)\n}\n\nconst ensureKey = (\n txId: string | undefined,\n fileName: string | undefined,\n sizes: ImageSize[],\n): string => {\n const idPart = txId ?? fileName ?? ''\n return `${idPart}|${sizes.join(',')}`\n}\n\nconst runEnsureImageLocal = async (\n params: EnsureImageLocalParams,\n): Promise<EnsureImageLocalResult> => {\n if (!supportsOpfsFileDownloads()) {\n return { status: 'unsupported' }\n }\n\n const fileName = params.fileName?.trim() || undefined\n const txId =\n normalizeArweaveTxIdForEnsure(params.transactionId) ??\n normalizeArweaveTxIdForEnsure(fileName)\n\n if (!txId && !fileName) {\n return { status: 'missing-id' }\n }\n\n const targetSizes = mapRequestedWidthsToImageSizes(params.widths)\n const needles = [fileName, txId].filter(\n (n): n is string => typeof n === 'string' && n.length > 0,\n )\n\n try {\n let filePath = await findFileInDir('images', needles)\n if (!filePath && txId) {\n await downloadTransactionIdWithDedupe(txId)\n filePath = await findFileInDir('images', needles)\n }\n\n if (!filePath) {\n return { status: 'failed' }\n }\n\n const createdWidths: number[] = []\n for (const size of targetSizes) {\n const variantPath = sizedVariantPath(filePath, size)\n const exists = await BaseFileManager.pathExists(variantPath)\n if (exists) continue\n await BaseFileManager.resizeImage({\n filePath,\n width: size,\n height: size,\n })\n createdWidths.push(size)\n }\n\n return {\n status: 'ready',\n filePath,\n createdWidths,\n }\n } catch (error) {\n logger('ensureImageLocal failed', error)\n return { status: 'failed' }\n }\n}\n\n/**\n * Ensure an image original exists in OPFS (downloading from Arweave if needed)\n * and create only the requested ImageSize variant(s) for that one file.\n */\nexport const ensureImageLocal = async (\n params: EnsureImageLocalParams,\n): Promise<EnsureImageLocalResult> => {\n if (!supportsOpfsFileDownloads()) {\n return { status: 'unsupported' }\n }\n\n const fileName = params.fileName?.trim() || undefined\n const txId =\n normalizeArweaveTxIdForEnsure(params.transactionId) ??\n normalizeArweaveTxIdForEnsure(fileName)\n\n if (!txId && !fileName) {\n return { status: 'missing-id' }\n }\n\n const targetSizes = mapRequestedWidthsToImageSizes(params.widths)\n const key = ensureKey(txId, fileName, targetSizes)\n\n const existing = inFlightByKey.get(key)\n if (existing) {\n return existing\n }\n\n const inFlight = (async () => {\n try {\n return await runEnsureImageLocal({\n transactionId: txId,\n fileName,\n widths: targetSizes,\n })\n } finally {\n inFlightByKey.delete(key)\n }\n })()\n\n inFlightByKey.set(key, inFlight)\n return inFlight\n}\n\n/** Test-only: clear in-flight dedupe map. */\nexport const resetEnsureImageLocalInFlightForTests = (): void => {\n inFlightByKey.clear()\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAOA,MAAM,MAAM,GAAG,KAAK,CAAC,kCAAkC,CAAC;AAExD;AACA,MAAM,gBAAgB,GAAG,mBAAmB;AAE5C,MAAM,WAAW,GAAG;AAClB,IAAA,SAAS,CAAC,WAAW;AACrB,IAAA,SAAS,CAAC,KAAK;AACf,IAAA,SAAS,CAAC,MAAM;AAChB,IAAA,SAAS,CAAC,KAAK;AACf,IAAA,SAAS,CAAC,WAAW;CACb;AAiBV,MAAM,aAAa,GAAG,IAAI,GAAG,EAA2C;AAEjE,MAAM,6BAA6B,GAAG,CAC3C,GAA8B,KACR;AACtB,IAAA,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE;AAAE,QAAA,OAAO,SAAS;IAC/C,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;AAC5B,IAAA,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,CAAC;IACtC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,iCAAiC,CAAC;AACpD,IAAA,IAAI,CAAC;AAAE,QAAA,OAAO,CAAC,CAAC,CAAC,CAAC;IAClB,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;IAC5C,IAAI,QAAQ,EAAE;AACZ,QAAA,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE;AAChC,YAAA,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;AAAE,gBAAA,OAAO,SAAS;QACxD;IACF;AACA,IAAA,OAAO,SAAS;AAClB;AAEO,MAAM,gBAAgB,GAAG,CAAC,KAAa,KAAe;AAC3D,IAAA,IAAI,IAAI,GAAc,SAAS,CAAC,WAAW;IAC3C,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC;AACrC,IAAA,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC;AACnC,QAAA,IAAI,IAAI,GAAG,QAAQ,EAAE;YACnB,IAAI,GAAG,IAAI;YACX,QAAQ,GAAG,IAAI;QACjB;IACF;AACA,IAAA,OAAO,IAAI;AACb;AAEA,MAAM,8BAA8B,GAAG,CAAC,MAAiB,KAAiB;IACxE,MAAM,SAAS,GACb,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC;AAChE,IAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAa;AACnC,IAAA,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE;AACzB,QAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE;QAC5D,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACjC;AACA,IAAA,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE;AACrB,QAAA,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC;IACnC;IACA,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,QAAgB,KAAY;AAC/C,IAAA,MAAM,IAAI,GAAG,eAAe,CAAC,aAAa,EAAE;AAC5C,IAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAChC,CAAC;AAED,MAAM,2BAA2B,GAAG,CAAC,QAAgB,KAAY;IAC/D,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,wCAAwC,CAAC;AACtE,IAAA,OAAO,KAAK,GAAG,CAAC,CAAC,IAAI,QAAQ;AAC/B,CAAC;AAED,MAAM,gBAAgB,GAAG,CAAC,gBAAwB,EAAE,IAAe,KAAY;AAC7E,IAAA,MAAM,IAAI,GAAG,eAAe,CAAC,aAAa,EAAE;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;IAC1C,MAAM,IAAI,GAAG,2BAA2B,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;AACvE,IAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAA,EAAG,IAAI,CAAA,KAAA,CAAO,CAAC;AACrD,CAAC;AAED,MAAM,SAAS,GAAG,CAChB,IAAwB,EACxB,QAA4B,EAC5B,KAAkB,KACR;AACV,IAAA,MAAM,MAAM,GAAG,IAAI,IAAI,QAAQ,IAAI,EAAE;IACrC,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE;AACvC,CAAC;AAED,MAAM,mBAAmB,GAAG,OAC1B,MAA8B,KACK;AACnC,IAAA,IAAI,CAAC,yBAAyB,EAAE,EAAE;AAChC,QAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE;IAClC;IAEA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,SAAS;AACrD,IAAA,MAAM,IAAI,GACR,6BAA6B,CAAC,MAAM,CAAC,aAAa,CAAC;QACnD,6BAA6B,CAAC,QAAQ,CAAC;AAEzC,IAAA,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;AACtB,QAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE;IACjC;IAEA,MAAM,WAAW,GAAG,8BAA8B,CAAC,MAAM,CAAC,MAAM,CAAC;IACjE,MAAM,OAAO,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,MAAM,CACrC,CAAC,CAAC,KAAkB,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAC1D;AAED,IAAA,IAAI;QACF,IAAI,QAAQ,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC;AACrD,QAAA,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE;AACrB,YAAA,MAAM,+BAA+B,CAAC,IAAI,CAAC;YAC3C,QAAQ,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC;QACnD;QAEA,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;QAC7B;QAEA,MAAM,aAAa,GAAa,EAAE;AAClC,QAAA,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;YAC9B,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC;YACpD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,WAAW,CAAC;AAC5D,YAAA,IAAI,MAAM;gBAAE;YACZ,MAAM,eAAe,CAAC,WAAW,CAAC;gBAChC,QAAQ;AACR,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,MAAM,EAAE,IAAI;AACb,aAAA,CAAC;AACF,YAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B;QAEA,OAAO;AACL,YAAA,MAAM,EAAE,OAAO;YACf,QAAQ;YACR,aAAa;SACd;IACH;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,MAAM,CAAC,yBAAyB,EAAE,KAAK,CAAC;AACxC,QAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC7B;AACF,CAAC;AAED;;;AAGG;MACU,gBAAgB,GAAG,OAC9B,MAA8B,KACK;AACnC,IAAA,IAAI,CAAC,yBAAyB,EAAE,EAAE;AAChC,QAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE;IAClC;IAEA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,SAAS;AACrD,IAAA,MAAM,IAAI,GACR,6BAA6B,CAAC,MAAM,CAAC,aAAa,CAAC;QACnD,6BAA6B,CAAC,QAAQ,CAAC;AAEzC,IAAA,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;AACtB,QAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE;IACjC;IAEA,MAAM,WAAW,GAAG,8BAA8B,CAAC,MAAM,CAAC,MAAM,CAAC;IACjE,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC;IAElD,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;IACvC,IAAI,QAAQ,EAAE;AACZ,QAAA,OAAO,QAAQ;IACjB;AAEA,IAAA,MAAM,QAAQ,GAAG,CAAC,YAAW;AAC3B,QAAA,IAAI;YACF,OAAO,MAAM,mBAAmB,CAAC;AAC/B,gBAAA,aAAa,EAAE,IAAI;gBACnB,QAAQ;AACR,gBAAA,MAAM,EAAE,WAAW;AACpB,aAAA,CAAC;QACJ;gBAAU;AACR,YAAA,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC;QAC3B;IACF,CAAC,GAAG;AAEJ,IAAA,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;AAChC,IAAA,OAAO,QAAQ;AACjB;;"}
@@ -1,11 +1,10 @@
1
1
  import { isValidEasAttestationUid, VERSION_SCHEMA_UID, decodeEasNumber, getSchemaUidForSchemaDefinitionFromCache, easName, getEasSchemaUidForSchemaDefinition } from '@seedprotocol/eas';
2
- import { u as isNode, Z as ZERO_BYTES32, v as INTERNAL_PROPERTY_NAMES, M as ModelPropertyDataTypes, n as normalizeDataType, w as defaultAttestationData, m as INTERNAL_DATA_TYPES } from './tabEvents-BnBzIdEi.js';
3
- import { az as matchMetadataProperty, aA as metadataRowsOfProperty, aB as METADATA_LATEST_FIRST_ORDER_SQL, F as isPublishedMetadataRow, aC as getEasSchemaUidForModel, aD as isStorageSeedRef, aq as listRelationEasPropertyName, ar as easPropertyNameForPublish, as as metadataStorageName } from './Item-Ld1iPicQ.js';
2
+ import { q as isNode, Z as ZERO_BYTES32, r as INTERNAL_PROPERTY_NAMES, M as ModelPropertyDataTypes, n as normalizeDataType, t as defaultAttestationData, m as INTERNAL_DATA_TYPES } from './arweaveContentTags-iW_HcWJA.js';
3
+ import { an as matchMetadataProperty, ao as metadataRowsOfProperty, ap as METADATA_LATEST_FIRST_ORDER_SQL, G as isPublishedMetadataRow, aq as getEasSchemaUidForModel, ar as isStorageSeedRef, ah as listRelationEasPropertyName, ai as easPropertyNameForPublish, aj as metadataStorageName } from './Item-BU9wIT7l.js';
4
4
  import { or, eq, and, sql } from 'drizzle-orm';
5
- import { B as BaseDb, m as metadata } from './BaseFileManager-DLou1TZS.js';
6
- import './errors-DKxFSvb3.js';
5
+ import { B as BaseDb, m as metadata } from './BaseFileManager-D-pLXQAp.js';
6
+ import { F as getPublishGraph, c as RelatedItemUnpublishedError, P as PublishValidationFailedError, G as htmlPropertyForHtmlSeed } from './publishErrors-DZXDX3B6.js';
7
7
  import 'pluralize';
8
- import { g as getPublishGraph, h as htmlPropertyForHtmlSeed } from './publishGraph-DnWoWZRP.js';
9
8
 
10
9
  const isEmptyValue = (value) => value == null || value === '';
11
10
  /**
@@ -63,7 +62,7 @@ async function getPendingRetractions(params) {
63
62
  const { seedLocalId, seedUid } = params;
64
63
  if (!seedLocalId && !seedUid)
65
64
  return [];
66
- const { getPublishPendingDiff } = await import('./getPublishPendingDiff-DiPff8pS.js');
65
+ const { getPublishPendingDiff } = await import('./getPublishPendingDiff-kcTP52Kj.js');
67
66
  const { pendingProperties } = await getPublishPendingDiff({
68
67
  seedLocalId: seedLocalId ?? undefined,
69
68
  seedUid: seedUid ?? undefined,
@@ -130,46 +129,6 @@ function encodeBytes32String(value) {
130
129
  return `0x${hex.padEnd(64, '0')}`;
131
130
  }
132
131
 
133
- /** Error thrown when publish validation fails. Includes all validation errors for user to fix. */
134
- class PublishValidationFailedError extends Error {
135
- constructor(message, validationErrors) {
136
- super(message);
137
- this.validationErrors = validationErrors;
138
- this.name = 'PublishValidationFailedError';
139
- }
140
- }
141
- /** Validation error code for a relation, list member or image/file ref to an unpublished seed. */
142
- const RELATED_ITEM_UNPUBLISHED_CODE = 'related_item_unpublished';
143
- const describeUnpublishedRelatedItem = (r) => `${r.propertyName} -> ${r.modelName} ${r.seedLocalId} (seed ${r.seedUid})`;
144
- /**
145
- * Thrown before anything is uploaded or attested when the item references items whose seed was
146
- * unpublished: the parent would attest a revoked seed uid. Republish those items (which gives
147
- * them a new seed uid) or remove the references, then publish again.
148
- * See docs/ATTESTATION_REVOCATION.md ("Republishing").
149
- *
150
- * A PublishValidationFailedError, so validateItemForPublish and the publish package's checking
151
- * step report it as validation errors (code `related_item_unpublished`, one per reference).
152
- */
153
- class RelatedItemUnpublishedError extends PublishValidationFailedError {
154
- constructor(unpublishedRelatedItems, otherValidationErrors = []) {
155
- const lines = unpublishedRelatedItems.map(describeUnpublishedRelatedItem);
156
- const message = `Cannot publish: it references ${lines.length} unpublished item${lines.length === 1 ? '' : 's'} ` +
157
- `(their seed attestations were revoked). Republish them or remove the references, then publish again:\n` +
158
- lines.join('\n');
159
- super(message, [
160
- ...unpublishedRelatedItems.map((r) => ({
161
- field: r.propertyName,
162
- message: `${r.propertyName} references unpublished ${r.modelName} ${r.seedLocalId} (seed ${r.seedUid}). ` +
163
- `Republish it or remove the reference.`,
164
- code: RELATED_ITEM_UNPUBLISHED_CODE,
165
- })),
166
- ...otherValidationErrors,
167
- ]);
168
- this.name = 'RelatedItemUnpublishedError';
169
- this.unpublishedRelatedItems = unpublishedRelatedItems;
170
- }
171
- }
172
-
173
132
  const matchesDataType = (actual, expected) => normalizeDataType(actual) === expected;
174
133
  /**
175
134
  * An EAS uid (0x + 64 hex), as opposed to a local id. A "0x" prefix alone doesn't tell them apart:
@@ -344,7 +303,7 @@ async function attestProperty(node, property, versionUid, ctx) {
344
303
  value = booleanFromRow(value.trim());
345
304
  // Validate against property validation rules (enum, pattern, minLength, maxLength) before encoding
346
305
  if (definition.validation) {
347
- const { SchemaValidationService } = await import('./SchemaValidationService-CW0s7V7R.js');
306
+ const { SchemaValidationService } = await import('./SchemaValidationService-Dc-lpFQX.js');
348
307
  const result = new SchemaValidationService().validatePropertyValue(value, normalizeDataType(definition.dataType), definition.validation, definition.refValueType ? normalizeDataType(definition.refValueType) : undefined);
349
308
  if (!result.isValid && result.errors.length > 0) {
350
309
  const firstError = result.errors[0];
@@ -756,5 +715,5 @@ var getPublishPayload$1 = /*#__PURE__*/Object.freeze({
756
715
  validateItemForPublish: validateItemForPublish
757
716
  });
758
717
 
759
- export { PublishValidationFailedError as P, RELATED_ITEM_UNPUBLISHED_CODE as R, RelatedItemUnpublishedError as a, getPendingRetractions as b, getPublishPayload$1 as c, getPropertyClear as g, resolvePublishPayloadValues as r, validateItemForPublish as v };
760
- //# sourceMappingURL=getPublishPayload-CLrAcZwr.js.map
718
+ export { getPendingRetractions as a, getPublishPayload$1 as b, getPropertyClear as g, resolvePublishPayloadValues as r, validateItemForPublish as v };
719
+ //# sourceMappingURL=getPublishPayload-Dd3HCYeI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPublishPayload-Dd3HCYeI.js","sources":["../../src/db/read/getPropertyClear.ts","../../src/helpers/easSdk.ts","../../src/helpers/ethereumUtils.ts","../../src/db/read/getPublishPayload.ts"],"sourcesContent":["import { and, eq, or, sql } from 'drizzle-orm'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { metadata, type MetadataType } from '@/seedSchema'\nimport { matchMetadataProperty, metadataRowsOfProperty } from '@/db/read/metadataProperty'\nimport { METADATA_LATEST_FIRST_ORDER_SQL } from '@/helpers/compareMetadataRowsLatestFirst'\nimport { isPublishedMetadataRow } from '@/helpers/isPublishedMetadataRow'\nimport { isValidEasAttestationUid } from '@seedprotocol/eas'\n\n/** An empty current value that publishing changes: it has live attestations to remove or retract. */\nexport type PropertyClear = {\n /** The newest row is an unpublished retraction: publish revokes `retractScope` instead of attesting. */\n retract: boolean\n /** The property's attestations on the seed that are still live, newest first. */\n live: MetadataType[]\n /**\n * What a retraction revokes: the live attestations on the Version of the newest one, and those on\n * other Versions whose value is one of theirs. That Version is the seed's current one unless the\n * property was attested only before it, or a `new_version` publish has just made a newer one.\n */\n retractScope: MetadataType[]\n}\n\nconst isEmptyValue = (value: string | null | undefined): boolean => value == null || value === ''\n\n/**\n * What publishing a property with an empty value does (ADR 0021). Undefined when there is nothing\n * to publish: the newest row holds a value, or the property has no live attestation (never\n * published, or already retracted). The property's rows are those linked by property_id, and rows\n * with none stored under one of its names.\n */\nexport async function getPropertyClear(params: {\n seedLocalId?: string | null\n seedUid?: string | null\n propertyName: string\n /** metadata.property_id when the caller has it; otherwise resolved from the name. */\n propertyId?: number | null\n modelName?: string | null\n dataType?: string\n refValueType?: string\n}): Promise<PropertyClear | undefined> {\n const { seedLocalId, seedUid, propertyName, propertyId, modelName, dataType, refValueType } = params\n if (!seedLocalId && !seedUid) return undefined\n const appDb = BaseDb.getAppDb()\n if (!appDb) return undefined\n\n // The property's rows by property_id (decision D4), rows with none by name\n const property = await matchMetadataProperty(\n { propertyId, propertyName, modelName, seedLocalId, seedUid, dataType, refValueType },\n appDb,\n )\n const seedWhere =\n seedLocalId && seedUid\n ? or(eq(metadata.seedLocalId, seedLocalId), eq(metadata.seedUid, seedUid))\n : seedLocalId\n ? eq(metadata.seedLocalId, seedLocalId)\n : eq(metadata.seedUid, seedUid!)\n const rows = (await appDb\n .select()\n .from(metadata)\n .where(and(metadataRowsOfProperty(property), seedWhere))\n .orderBy(sql.raw(METADATA_LATEST_FIRST_ORDER_SQL))) as MetadataType[]\n\n const newest = rows[0]\n if (!newest || !isEmptyValue(newest.propertyValue)) return undefined\n const live = rows.filter((row) => isValidEasAttestationUid(row.uid) && row.revokedAt == null)\n if (live.length === 0) return undefined\n\n // `live` is newest first\n const onVersion = live.filter((row) => row.versionUid === live[0]!.versionUid)\n const values = new Set(onVersion.map((row) => row.propertyValue))\n const retractScope = live.filter((row) => onVersion.includes(row) || values.has(row.propertyValue))\n\n return { retract: !!newest.retract && !isPublishedMetadataRow(newest), live, retractScope }\n}\n\n/** The empty value of an EAS type, or undefined for `bool` and `uint256`, which have none (ADR 0021). */\nexport function emptyEasValue(easDataType: string | undefined): string | string[] | undefined {\n if (easDataType === 'string') return ''\n if (easDataType === 'bytes32') return `0x${'0'.repeat(64)}`\n if (easDataType === 'bytes32[]') return []\n return undefined\n}\n\n/** A retracted property and the attestations publish revokes for it. */\nexport type PendingRetraction = {\n propertyName: string\n attestations: { uid: string; schemaUid: string }[]\n}\n\n/**\n * The seed's retracted properties that still have attestations to revoke (ADR 0021), with the\n * attestations publish revokes for each.\n */\nexport async function getPendingRetractions(params: {\n seedLocalId?: string | null\n seedUid?: string | null\n}): Promise<PendingRetraction[]> {\n const { seedLocalId, seedUid } = params\n if (!seedLocalId && !seedUid) return []\n const { getPublishPendingDiff } = await import('@/db/read/getPublishPendingDiff')\n const { pendingProperties } = await getPublishPendingDiff({\n seedLocalId: seedLocalId ?? undefined,\n seedUid: seedUid ?? undefined,\n })\n const retractions: PendingRetraction[] = []\n for (const { propertyName, change } of pendingProperties) {\n if (change !== 'retracted') continue\n const clear = await getPropertyClear({ seedLocalId, seedUid, propertyName })\n if (!clear?.retract) continue\n const attestations = clear.retractScope\n .filter((row) => row.uid && row.schemaUid)\n .map((row) => ({ uid: row.uid!, schemaUid: row.schemaUid! }))\n if (attestations.length > 0) retractions.push({ propertyName, attestations })\n }\n return retractions\n}\n","import { isNode } from '@/helpers/environment'\n\ntype EasSdk = typeof import('@ethereum-attestation-service/eas-sdk')\n\nlet easSdkPromise: Promise<EasSdk> | undefined\n\n/**\n * Load eas-sdk on first use instead of at SDK import time.\n *\n * On Node this loads eas-sdk's CommonJS build. Its ESM build (2.9.1+) does\n * `import { isEqual } from 'lodash'`, which Node rejects because lodash is\n * CommonJS, so a static import made `import '@seedprotocol/sdk'` fail unless the\n * app ran with `--import @seedprotocol/sdk/node-eas-lodash`.\n *\n * `process.getBuiltinModule` (Node 20.16+, 22.3+) keeps `node:module` out of the\n * import graph, so browser bundlers never see it. Bundlers resolve the\n * `import()` branch, and handle lodash there themselves.\n */\nexport function loadEasSdk(): Promise<EasSdk> {\n if (!easSdkPromise) {\n easSdkPromise = (async () => {\n if (isNode() && typeof document === 'undefined' && typeof process.getBuiltinModule === 'function') {\n try {\n const { createRequire } = process.getBuiltinModule('node:module')\n return createRequire(import.meta.url)('@ethereum-attestation-service/eas-sdk') as EasSdk\n } catch {\n // e.g. import.meta.url is not a file: URL (bundled renderer). Fall through.\n }\n }\n return import('@ethereum-attestation-service/eas-sdk')\n })()\n easSdkPromise.catch(() => {\n easSdkPromise = undefined\n })\n }\n return easSdkPromise\n}\n","/** UTF-8 string to 0x-prefixed bytes32 hex (right-padded with zeros). */\nexport function encodeBytes32String(value: string): string {\n const bytes = new TextEncoder().encode(value)\n if (bytes.length > 32) {\n throw new Error(`encodeBytes32String: value exceeds 32 bytes (${bytes.length})`)\n }\n const hex = Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n return `0x${hex.padEnd(64, '0')}`\n}\n","import {\n decodeEasNumber,\n easName,\n getEasSchemaUidForSchemaDefinition,\n getSchemaUidForSchemaDefinitionFromCache,\n} from '@seedprotocol/eas'\nimport {\n defaultAttestationData,\n INTERNAL_DATA_TYPES,\n INTERNAL_PROPERTY_NAMES,\n VERSION_SCHEMA_UID,\n ZERO_BYTES32,\n} from '@/helpers/constants'\nimport type {\n AttestationRequest,\n AttestationRequestData,\n} from '@ethereum-attestation-service/eas-sdk'\nimport { loadEasSdk } from '@/helpers/easSdk'\nimport { getEasSchemaUidForModel } from './getSchemaUidForModel'\nimport { emptyEasValue, getPropertyClear } from '@/db/read/getPropertyClear'\nimport { isStorageSeedRef } from '@/helpers/relationSeedRef'\nimport {\n easPropertyNameForPublish,\n listRelationEasPropertyName,\n metadataStorageName,\n} from '@/helpers/metadataPropertyNames'\nimport { encodeBytes32String } from '@/helpers/ethereumUtils'\nimport { ModelPropertyDataTypes, normalizeDataType } from '@/Schema'\nimport {\n PublishValidationFailedError,\n RelatedItemUnpublishedError,\n type PublishValidationError,\n} from '@/db/read/publishErrors'\nimport {\n getPublishGraph,\n htmlPropertyForHtmlSeed,\n type PublishGraph,\n type PublishGraphNode,\n type PublishGraphProperty,\n type PublishMode,\n} from '@/db/read/publishGraph'\n\nexport { PublishValidationFailedError, type PublishValidationError }\nexport type { PublishMode }\n\nexport type GetPublishPayloadOptions = {\n /** `patch` (default): new property attestations on the current Version. `new_version`: new Version attestation + attest all properties. */\n publishMode?: PublishMode\n}\n\ntype Attestation = Omit<AttestationRequest, 'data'> & {\n data: AttestationRequestData[]\n /** The property's schema key. */\n _propertyName?: string\n /** Metadata row the attested value was read from: recording gives the uid to exactly that row. */\n _metadataLocalId?: string\n /** A value that is not in that row yet (the storage transaction id of this publish's upload), for recording to store. */\n _attestedValue?: string\n /** Same as encode step (getPropertyData); resolvePublishPayloadValues must use this, not easName(propertyName). */\n _propertyNameForSchema?: string\n _schemaDef?: string\n _unresolvedValue?: string\n _easDataType?: string\n /** Per-slot raw ids (local or 0x) before encodeBytes32String; re-encoded after sequential publish. */\n _rawListIdsForResolve?: string[]\n}\n\ntype PublishPayload = {\n localId: string\n /** The version row this request's Version attestation is recorded on (none when it attests under an existing version). */\n versionLocalId?: string\n seedIsRevocable: boolean\n seedSchemaUid: string\n seedUid: string\n versionSchemaUid: string\n versionUid: string\n listOfAttestations: Attestation[]\n propertiesToUpdate: { publishLocalId: string; propertySchemaUid: string }[]\n}\n\ntype MultiPublishPayload = PublishPayload[]\n\n/** Map of seed localId -> attestation uid for resolving relation/image property values after dependent seeds are published */\nexport type ResolvedSeedUids = Record<string, string>\n\ntype UploadedTransaction = {\n txId: string\n itemPropertyLocalId?: string\n seedLocalId?: string\n versionLocalId?: string\n itemPropertyName?: string\n}\n\ntype BuildContext = {\n graph: PublishGraph\n errors: PublishValidationError[]\n uploadedTransactions: UploadedTransaction[]\n}\n\nconst matchesDataType = (\n actual: string | undefined,\n expected: ModelPropertyDataTypes | string,\n): boolean => normalizeDataType(actual) === expected\n\n/**\n * An EAS uid (0x + 64 hex), as opposed to a local id. A \"0x\" prefix alone doesn't tell them apart:\n * local ids are random alphanumerics, and about 1 in 3,844 starts with \"0x\".\n */\nfunction isUidRef(ref: string): boolean {\n return ref.length === 66 && ref.startsWith('0x')\n}\n\nfunction addValidationError(ctx: BuildContext, message: string, field?: string, code = 'publish_validation'): void {\n if (ctx.errors.some((e) => e.message === message && e.field === (field ?? ''))) return\n ctx.errors.push({ field: field ?? '', message, code })\n}\n\n/** Current uid for a ref to a live published seed, else the ref itself. */\nconst currentRelatedRef = (ctx: BuildContext, ref: string): string => ctx.graph.relatedRefUids.get(ref.trim()) ?? ref\n\nconst uploadedTxFor = (ctx: BuildContext, seedLocalId: string): UploadedTransaction | undefined =>\n ctx.uploadedTransactions.find((u) => u.seedLocalId?.trim() === seedLocalId)\n\ntype PropertyDataResult = {\n schemaUid: string\n easDataType: string\n schemaDef: string\n propertyNameForSchema: string\n}\n\n/** The EAS schema a property attests under. Reports an error and returns null when there is none. */\nconst getPropertyData = async (\n property: PublishGraphProperty,\n ctx: BuildContext,\n): Promise<PropertyDataResult | null> => {\n const { key, definition } = property\n const rawDataType = definition.dataType\n const dataType = rawDataType ? normalizeDataType(String(rawDataType)) : undefined\n const easDataType = dataType ? INTERNAL_DATA_TYPES[dataType as keyof typeof INTERNAL_DATA_TYPES]?.eas : undefined\n if (!easDataType) {\n addValidationError(\n ctx,\n `Unknown or unsupported property data type \"${rawDataType ?? 'undefined'}\" for property: ${key}. Supported types: ${Object.keys(INTERNAL_DATA_TYPES).join(', ')}.`,\n key,\n )\n return null\n }\n\n // ADR 0008: list relations publish under their storage name (authors → author_identity_ids),\n // single relations under their schema key (author), never the local authorId.\n const listRelationName = listRelationEasPropertyName(key, definition)\n const propertyNameForSchema = easPropertyNameForPublish(key, definition)\n const schemaDef = `${easDataType} ${propertyNameForSchema}`\n\n // The UID ensureEasSchemasForItem resolved for this exact definition comes first. A row's\n // schemaUid was looked up under the property's own name, which matches any type: Optimism\n // Sepolia has `bytes32 storage_transaction_id` beside `string storage_transaction_id`, and\n // attesting a string under the bytes32 one reads back as 0x…20. Trust the row's only when\n // that name is the one published (not for a list relation, or a single relation stored as authorId).\n const storageName = metadataStorageName(key, definition)\n let schemaUid: string | undefined =\n getSchemaUidForSchemaDefinitionFromCache(schemaDef) ??\n (!listRelationName && easName(storageName) === propertyNameForSchema ? property.row?.schemaUid ?? undefined : undefined)\n if (!schemaUid) {\n schemaUid = await getEasSchemaUidForSchemaDefinition({ schemaText: schemaDef })\n }\n if (!schemaUid) {\n addValidationError(\n ctx,\n `EAS schema not found for \"${schemaDef}\" (property: ${key}). Register it before publishing (ensureEasSchemasForItem).`,\n key,\n 'publish_schema_not_found',\n )\n return null\n }\n return { schemaUid, easDataType, schemaDef, propertyNameForSchema }\n}\n\n/** The label a required-value error uses for a relation or storage-seed property. */\nfunction refTypeLabel(definition: PublishGraphProperty['definition']): string {\n for (const [type, label] of [\n [ModelPropertyDataTypes.File, 'file'],\n [ModelPropertyDataTypes.Image, 'image'],\n [ModelPropertyDataTypes.Html, 'html'],\n [ModelPropertyDataTypes.Json, 'json'],\n ] as const) {\n if (matchesDataType(definition.dataType, type) || matchesDataType(definition.refValueType, type)) return label\n }\n return 'relation'\n}\n\n/** Required relation and storage-seed properties need a value pointing at an item. */\nfunction checkRequiredRef(node: PublishGraphNode, property: PublishGraphProperty, ctx: BuildContext): void {\n const { key, definition } = property\n if (definition.required !== true) return\n const value = property.row?.propertyValue\n const refLabel = definition.ref ?? definition.refModelName ?? 'related'\n if (value == null || value.trim() === '') {\n addValidationError(\n ctx,\n `Required ${refTypeLabel(definition)} ${key} has no value. A value pointing to a valid ${refLabel} item is required to publish.`,\n key,\n )\n return\n }\n for (const broken of ctx.graph.brokenRefs) {\n if (broken.seedLocalId !== node.seedLocalId || broken.propertyKey !== key || broken.list) continue\n addValidationError(\n ctx,\n broken.reason === 'invalid'\n ? `Required relation ${key} has invalid value: ${JSON.stringify(value)}. ` +\n `Value must be a valid seed reference (localId or uid) pointing to a ${refLabel} item.`\n : `No related item found for required relation: ${key}. Value: ${JSON.stringify(value)} (seedLocalId/seedUid). ` +\n `The related item may be missing, in a different database, or the reference may be broken.`,\n key,\n )\n }\n}\n\n/** A Boolean row value as stored (\"true\"/\"false\", \"1\"/\"0\"). */\nconst booleanFromRow = (value: string): boolean | string =>\n value === 'true' || value === '1' ? true : value === 'false' || value === '0' ? false : value\n\n/**\n * The attestation of one property of `node`, or undefined when the publish leaves it out (no\n * value, already attested in patch mode, deferred, invalid: the last reports an error).\n */\nasync function attestProperty(\n node: PublishGraphNode,\n property: PublishGraphProperty,\n versionUid: string,\n ctx: BuildContext,\n): Promise<Attestation | undefined> {\n const { key, definition, row } = property\n const forceFullSnapshot = ctx.graph.forceFullSnapshot\n if (INTERNAL_PROPERTY_NAMES.includes(key) || property.deferred) return undefined\n\n const isFileImageHtml =\n matchesDataType(definition.dataType, ModelPropertyDataTypes.File) ||\n matchesDataType(definition.dataType, ModelPropertyDataTypes.Image) ||\n matchesDataType(definition.dataType, ModelPropertyDataTypes.Html)\n const isRef = property.kind === 'relation' || property.kind === 'storageSeed'\n const isStorageTransaction = property.kind === 'storageTransaction'\n\n // The storage transaction slot attests this publish's upload of the node's file(s).\n const uploaded = isStorageTransaction ? uploadedTxFor(ctx, node.seedLocalId) : undefined\n if (isStorageTransaction && !uploaded) return undefined\n let value: unknown = uploaded ? uploaded.txId : row?.propertyValue\n\n // 0 and false are values (ADR 0010). An empty value publishes only as a removal of a value\n // attested before (ADR 0021); a retraction attests nothing (publish revokes instead).\n let isRemoval = false\n if (value == null || value === '') {\n if (property.uid && !forceFullSnapshot) return undefined\n const clear = await getPropertyClear({\n seedLocalId: node.seedLocalId,\n seedUid: node.seedUid,\n propertyId: definition._dbId,\n modelName: node.modelName,\n propertyName: key,\n dataType: definition.dataType,\n refValueType: definition.refValueType,\n })\n if (!clear || clear.retract) return undefined\n isRemoval = true\n }\n // Patch mode skips properties that already have an EAS uid, except a storage transaction this\n // publish uploaded.\n if (!isRemoval && property.uid && !forceFullSnapshot && !uploaded) return undefined\n\n // File/Image/Html values must be a storage seed id by now. Raw content means the property's\n // save pipeline never ran or failed (e.g. createNewItem with raw html), so it was never uploaded.\n if (!isRemoval && isFileImageHtml && typeof value === 'string' && !isStorageSeedRef(value.trim())) {\n addValidationError(\n ctx,\n `Invalid value for property: ${key}. Expected a storage seed id ` +\n `(${normalizeDataType(definition.dataType)} content must be saved through the property before publishing), ` +\n `got ${value.length > 40 ? `${value.slice(0, 40)}…` : value}.`,\n key,\n 'publish_storage_value_not_saved',\n )\n return undefined\n }\n\n const propertyData = await getPropertyData(property, ctx)\n if (!propertyData) return undefined\n const { schemaUid, easDataType, schemaDef, propertyNameForSchema } = propertyData\n const isList = schemaDef.startsWith('bytes32[]')\n\n let rawListIdsForResolve: string[] | undefined\n if (isRemoval) {\n const empty = emptyEasValue(easDataType)\n if (empty === undefined) {\n addValidationError(\n ctx,\n `${key} can't be published empty: ${definition.dataType ?? easDataType} properties have no empty value. Clear it with clear({ retract: true }).`,\n key,\n 'publish_clear_unsupported',\n )\n return undefined\n }\n value = empty\n } else {\n if (typeof value === 'string' && isRef) value = currentRelatedRef(ctx, value.trim())\n if (isList && typeof value === 'string') {\n const text = value.trim()\n if (text.startsWith('[')) {\n try {\n value = JSON.parse(text)\n } catch {\n // reported below\n }\n } else if (text.includes(',')) {\n // Legacy comma-separated ids (pre-JSON List storage)\n value = text.split(',').map((s) => s.trim()).filter(Boolean)\n }\n }\n if (isList && !Array.isArray(value)) {\n addValidationError(ctx, `Invalid value for property: ${key}. Expected an array of bytes32, got ${value}.`, key)\n return undefined\n }\n if (easDataType === 'bool' && typeof value === 'string') value = booleanFromRow(value.trim())\n\n // Validate against property validation rules (enum, pattern, minLength, maxLength) before encoding\n if (definition.validation) {\n const { SchemaValidationService } = await import('@/Schema/service/validation/SchemaValidationService')\n const result = new SchemaValidationService().validatePropertyValue(\n value,\n normalizeDataType(definition.dataType) as ModelPropertyDataTypes,\n definition.validation,\n definition.refValueType ? (normalizeDataType(definition.refValueType) as string) : undefined,\n )\n if (!result.isValid && result.errors.length > 0) {\n const firstError = result.errors[0]!\n addValidationError(ctx, firstError.message, key, firstError.code ?? 'publish_validation')\n return undefined\n }\n }\n\n if (isList) {\n const encoded: string[] = []\n const rawIds: string[] = []\n for (const member of value as unknown[]) {\n const id = typeof member === 'string' ? member.trim() : ''\n if (!id) continue\n const ref = currentRelatedRef(ctx, id)\n rawIds.push(ref)\n encoded.push(isUidRef(ref) ? ref : encodeBytes32String(ref))\n }\n value = encoded\n if (rawIds.some((id) => !isUidRef(id))) rawListIdsForResolve = rawIds\n }\n\n // uint256 (Date) must be numeric/BigInt; normalize ISO strings to Unix seconds\n if (easDataType === 'uint256' && (typeof value === 'string' || value instanceof Date)) {\n const ms = value instanceof Date ? value.getTime() : /^\\d+$/.test(value) ? Number(value) : new Date(value).getTime()\n value = BigInt(Math.floor(ms / 1000))\n }\n\n // ADR 0010: Number attests as its decimal string, in the form readers decode it to.\n if (matchesDataType(definition.dataType, ModelPropertyDataTypes.Number)) {\n const decimal = decodeEasNumber(value)\n if (decimal === undefined) {\n addValidationError(\n ctx,\n `Invalid value for property: ${key}. Expected a finite number, got ${JSON.stringify(value)}.`,\n key,\n 'publish_invalid_number',\n )\n return undefined\n }\n value = decimal\n }\n }\n\n let encodedData: string\n try {\n const { SchemaEncoder } = await loadEasSdk()\n encodedData = new SchemaEncoder(schemaDef).encodeData([\n { name: propertyNameForSchema, type: easDataType, value: value as any },\n ]) as string\n } catch (encodeErr) {\n addValidationError(\n ctx,\n `Failed to encode property ${key}: ${encodeErr instanceof Error ? encodeErr.message : String(encodeErr)}`,\n key,\n )\n return undefined\n }\n\n const attestation: Attestation = {\n schema: schemaUid,\n data: [\n {\n ...defaultAttestationData,\n // The storage transaction references the Version attestation (contract may use when supported)\n refUID: isStorageTransaction ? versionUid : defaultAttestationData.refUID,\n data: encodedData,\n } as AttestationRequestData,\n ],\n _propertyName: key,\n ...(row?.localId ? { _metadataLocalId: row.localId } : {}),\n ...(uploaded && uploaded.txId !== row?.propertyValue ? { _attestedValue: uploaded.txId } : {}),\n }\n\n // Refs to seeds of this publish by local id: resolution hints for resolvePublishPayloadValues\n if (\n typeof value === 'string' &&\n !isUidRef(value) &&\n /^[a-zA-Z0-9_-]{10,21}$/.test(value.trim()) &&\n (easDataType === 'bytes32' || easDataType === 'string')\n ) {\n attestation._propertyNameForSchema = propertyNameForSchema\n attestation._schemaDef = schemaDef\n attestation._unresolvedValue = value.trim()\n attestation._easDataType = easDataType\n }\n if (rawListIdsForResolve?.length) {\n attestation._propertyNameForSchema = propertyNameForSchema\n attestation._schemaDef = schemaDef\n attestation._easDataType = 'bytes32[]'\n attestation._rawListIdsForResolve = rawListIdsForResolve\n }\n return attestation\n}\n\n/** The order a node's properties attest in: basic values, its upload, refs, lists. */\nconst ATTEST_ORDER: PublishGraphProperty['kind'][] = ['basic', 'storageTransaction', 'relation', 'storageSeed', 'list']\n\n/** One node's request: its seed, version and property attestations, and the parent properties its seed uid fills. */\nasync function buildRequest(node: PublishGraphNode, ctx: BuildContext): Promise<PublishPayload> {\n const { graph } = ctx\n const isRoot = node.kind === 'root'\n // A storage seed or an embedded image attests its own basic properties only.\n const full = isRoot || node.kind === 'draft'\n const reportField = node.links[0]?.propertyKey\n\n let seedSchemaUid = isRoot ? node.seedSchemaUid : undefined\n seedSchemaUid ??= (await getEasSchemaUidForModel(node.modelName)) ?? undefined\n if (!seedSchemaUid) addValidationError(ctx, `Schema UID not found for model: ${node.modelName}`, isRoot ? undefined : reportField)\n\n let versionUid = node.version.uid ?? (node.newSeed ? undefined : node.version.publishedUid) ?? ZERO_BYTES32\n if (isRoot && graph.forceFullSnapshot && node.seedUid) versionUid = ZERO_BYTES32\n const versionLocalId = versionUid === ZERO_BYTES32 && !node.version.uid ? node.version.localId : undefined\n\n const request: PublishPayload = {\n localId: node.seedLocalId,\n ...(versionLocalId ? { versionLocalId } : {}),\n seedIsRevocable: true,\n seedSchemaUid: seedSchemaUid ?? ZERO_BYTES32,\n seedUid: node.newSeed || !node.seedUid ? ZERO_BYTES32 : node.seedUid,\n versionSchemaUid: VERSION_SCHEMA_UID,\n versionUid,\n listOfAttestations: [],\n propertiesToUpdate: [],\n }\n\n for (const kind of ATTEST_ORDER) {\n for (const property of node.properties) {\n if (property.kind !== kind) continue\n if (!full && kind !== 'basic' && kind !== 'storageTransaction') continue\n if (full && (kind === 'relation' || kind === 'storageSeed')) checkRequiredRef(node, property, ctx)\n const attestation = await attestProperty(node, property, versionUid, ctx)\n if (attestation) request.listOfAttestations.push(attestation)\n }\n }\n\n // Each property this seed's uid fills: the contract writes the uid into that attestation.\n for (const { seedLocalId, propertyKey } of node.links) {\n const owner = graph.nodes.find((n) => n.seedLocalId === seedLocalId)\n const property = owner?.properties.find((p) => p.key === propertyKey)\n if (!property) continue\n const propertySchemaUid = (await getPropertyData(property, ctx))?.schemaUid\n if (!propertySchemaUid) continue\n if (!request.propertiesToUpdate.some((u) => u.publishLocalId === seedLocalId && u.propertySchemaUid.toLowerCase() === propertySchemaUid.toLowerCase())) {\n request.propertiesToUpdate.push({ publishLocalId: seedLocalId, propertySchemaUid })\n }\n }\n return request\n}\n\n/**\n * Embedded image rows must still name an Html value of their owner, with a schema to attest under.\n * No propertiesToUpdate: the Html refers to the image by its Arweave URL (the data URI is\n * rewritten to it before the Html is uploaded), not by seed uid.\n */\nasync function checkEmbeddedImages(ctx: BuildContext): Promise<void> {\n const { graph } = ctx\n for (const owner of graph.nodes) {\n for (const row of owner.embeddedImages) {\n const imageNode = graph.nodes.find((n) => n.seedLocalId === row.imageSeedLocalId && n.kind === 'embeddedImage')\n const missing = graph.missingEmbeddedImages.some((m) => m.imageSeedLocalId === row.imageSeedLocalId)\n if (!imageNode && !missing) continue\n const html = htmlPropertyForHtmlSeed(owner, row.htmlSeedLocalId)\n if (!html) {\n addValidationError(ctx, `Could not find Html property for embedded image rewrite (html seed ${row.htmlSeedLocalId.trim()}).`, 'html', 'html_embed_schema')\n continue\n }\n if (!(await getPropertyData(html, ctx))) continue\n if (missing) {\n addValidationError(ctx, `Embedded Image item not found for seed ${row.imageSeedLocalId}.`, 'html', 'html_embed_image_missing')\n }\n }\n }\n}\n\nexport const getPublishPayload = async (\n item: { seedLocalId: string; modelName?: string },\n uploadedTransactions: UploadedTransaction[],\n options?: GetPublishPayloadOptions,\n): Promise<MultiPublishPayload> => {\n const publishMode: PublishMode = options?.publishMode ?? 'patch'\n const graph = await getPublishGraph(item, { publishMode })\n const ctx: BuildContext = { graph, errors: [], uploadedTransactions }\n\n if (publishMode === 'new_version' && !graph.root.seedUid) {\n addValidationError(\n ctx,\n 'Publishing as a new version requires the item to already have a published Seed attestation (seed UID).',\n 'seedUid',\n 'publish_new_version_requires_seed',\n )\n }\n\n let multiPublishPayload: MultiPublishPayload = []\n for (const node of graph.nodes) multiPublishPayload.push(await buildRequest(node, ctx))\n await checkEmbeddedImages(ctx)\n\n // A request whose seed fills another request's property (propertiesToUpdate) publishes first, and a\n // request encoding another's local id publishes after it.\n multiPublishPayload = orderPayloadByDependencies(multiPublishPayload)\n\n if (publishMode === 'new_version') {\n const rootPayload = multiPublishPayload.find((p) => p.localId === graph.root.seedLocalId)\n if (!rootPayload?.listOfAttestations.length) {\n addValidationError(\n ctx,\n 'Publishing as a new version requires at least one property attestation for the item. ' +\n 'Ensure required fields have values and that publishable properties are present.',\n 'listOfAttestations',\n 'publish_new_version_empty_snapshot',\n )\n }\n }\n\n // Stop before anything is uploaded or attested: the payload would attest revoked seed uids.\n if (graph.unpublishedRelatedItems.length) {\n throw new RelatedItemUnpublishedError(graph.unpublishedRelatedItems, ctx.errors)\n }\n\n if (ctx.errors.length > 0) {\n const combinedMessage = ctx.errors.map((e) => e.message).join('\\n')\n throw new PublishValidationFailedError(\n `Validation failed (${ctx.errors.length} error${ctx.errors.length === 1 ? '' : 's'}):\\n${combinedMessage}`,\n ctx.errors,\n )\n }\n\n return multiPublishPayload\n}\n\nexport type ValidateItemForPublishResult = {\n isValid: boolean\n errors: PublishValidationError[]\n}\n\n/**\n * Validates an item for publishing without performing Arweave or EAS work.\n * Use in the checking step to fail fast before creating transactions.\n * Pass empty array for uploadedTransactions when validating before Arweave upload.\n */\nexport const validateItemForPublish = async (\n item: { seedLocalId: string; modelName?: string },\n uploadedTransactions: UploadedTransaction[] = [],\n options?: GetPublishPayloadOptions,\n): Promise<ValidateItemForPublishResult> => {\n try {\n await getPublishPayload(item, uploadedTransactions, options)\n return { isValid: true, errors: [] }\n } catch (err) {\n if (err instanceof PublishValidationFailedError) {\n return { isValid: false, errors: err.validationErrors }\n }\n throw err\n }\n}\n\n/**\n * LocalIds in this batch referenced by attestations (bytes32 / bytes32[]) that must publish before this request.\n */\nfunction collectAttestationLocalRefIds(req: PublishPayload, allLocalIds: Set<string>): string[] {\n const refs: string[] = []\n for (const att of req.listOfAttestations) {\n if (att._unresolvedValue && allLocalIds.has(att._unresolvedValue)) refs.push(att._unresolvedValue)\n for (const id of att._rawListIdsForResolve ?? []) {\n const t = id != null ? String(id).trim() : ''\n if (t && allLocalIds.has(t)) refs.push(t)\n }\n }\n return refs\n}\n\n/**\n * Topological sort (Kahn): edge `from → to` means `from` must publish before `to`.\n * - propertiesToUpdate: updater before updatee (contract injection).\n * - _unresolvedValue / _rawListIdsForResolve: referenced seed before request that encodes the ref.\n * Ties keep the input order (the graph's finish order).\n */\nfunction orderPayloadByDependencies(payload: MultiPublishPayload): MultiPublishPayload {\n if (payload.length <= 1) return payload\n\n const byLocalId = new Map<string, PublishPayload>()\n const indexOrder = new Map<string, number>()\n payload.forEach((p, i) => {\n byLocalId.set(p.localId, p)\n indexOrder.set(p.localId, i)\n })\n const allIds = new Set(byLocalId.keys())\n const indegree = new Map<string, number>([...allIds].map((id) => [id, 0]))\n const adj = new Map<string, Set<string>>()\n\n const addEdge = (from: string, to: string) => {\n if (from === to || !allIds.has(from) || !allIds.has(to)) return\n if (!adj.has(from)) adj.set(from, new Set())\n const set = adj.get(from)!\n if (set.has(to)) return\n set.add(to)\n indegree.set(to, (indegree.get(to) ?? 0) + 1)\n }\n\n for (const p of payload) {\n for (const u of p.propertiesToUpdate) addEdge(p.localId, u.publishLocalId)\n for (const refId of collectAttestationLocalRefIds(p, allIds)) addEdge(refId, p.localId)\n }\n\n const byInputOrder = (a: string, b: string) => (indexOrder.get(a) ?? 0) - (indexOrder.get(b) ?? 0)\n const queue = [...allIds].filter((id) => (indegree.get(id) ?? 0) === 0).sort(byInputOrder)\n const result: PublishPayload[] = []\n while (queue.length > 0) {\n const id = queue.shift()!\n result.push(byLocalId.get(id)!)\n for (const to of adj.get(id) ?? []) {\n const next = (indegree.get(to) ?? 0) - 1\n indegree.set(to, next)\n if (next === 0) {\n queue.push(to)\n queue.sort(byInputOrder)\n }\n }\n }\n\n if (result.length !== payload.length) {\n const seen = new Set(result.map((r) => r.localId))\n for (const p of payload) if (!seen.has(p.localId)) result.push(p)\n }\n return result\n}\n\n/** Normalize attestation UID to 32-byte hex for SchemaEncoder bytes32 fields. */\nfunction padUidForBytes32Schema(uid: string): string {\n const t = uid.trim()\n if (!t.startsWith('0x')) return uid\n const hex = t.slice(2).replace(/[^0-9a-fA-F]/g, '')\n if (hex.length === 0) return uid\n return ('0x' + hex.padStart(64, '0').slice(-64)).toLowerCase()\n}\n\n/**\n * Resolves relation/image property values (seedLocalId) to attestation uids after dependent seeds are published.\n * Call after each payload is published, passing the returned attestation uid for that seed's localId.\n * Returns an updated multiPayload with re-encoded attestations where resolution was applied.\n */\nexport const resolvePublishPayloadValues = async (\n multiPayload: MultiPublishPayload,\n resolvedUids: ResolvedSeedUids,\n): Promise<MultiPublishPayload> => {\n if (Object.keys(resolvedUids).length === 0) {\n return multiPayload\n }\n\n const { SchemaEncoder } = await loadEasSdk()\n const result: MultiPublishPayload = []\n\n for (const payload of multiPayload) {\n const updatedAttestations: PublishPayload['listOfAttestations'] = []\n\n for (const attestation of payload.listOfAttestations) {\n const entry = attestation as Attestation & { data?: AttestationRequestData[] | AttestationRequestData }\n\n const rawList = entry._rawListIdsForResolve\n if (\n rawList &&\n rawList.length > 0 &&\n entry._schemaDef &&\n (entry._propertyNameForSchema || entry._propertyName)\n ) {\n const fieldName =\n entry._propertyNameForSchema ?? easName(entry._propertyName as string)\n const resolvedValues: string[] = []\n let allSlotsResolved = true\n for (const id of rawList) {\n const trimmed = id.trim()\n if (isUidRef(trimmed)) {\n resolvedValues.push(padUidForBytes32Schema(trimmed))\n continue\n }\n const r = resolvedUids[trimmed]\n if (r) {\n resolvedValues.push(padUidForBytes32Schema(r))\n continue\n }\n allSlotsResolved = false\n break\n }\n // Do not encode or clear hints until every slot has a real uid — otherwise sequential\n // publish burns encodeBytes32String(localId) into data and drops _rawListIdsForResolve.\n if (!allSlotsResolved) {\n updatedAttestations.push({\n ...entry,\n data: Array.isArray(entry.data) ? entry.data : [entry.data as AttestationRequestData],\n })\n continue\n }\n const dataEncoder = new SchemaEncoder(entry._schemaDef)\n const encodedData = dataEncoder.encodeData([\n {\n name: fieldName,\n type: 'bytes32[]',\n value: resolvedValues,\n },\n ])\n const baseData = Array.isArray(entry.data) ? entry.data[0] : (entry.data as AttestationRequestData)\n updatedAttestations.push({\n ...entry,\n data: [\n {\n ...baseData,\n data: encodedData,\n } as AttestationRequestData,\n ],\n _rawListIdsForResolve: undefined,\n _easDataType: undefined,\n })\n continue\n }\n\n const resolvedUid = entry._unresolvedValue && resolvedUids[entry._unresolvedValue]\n const easType = (entry._easDataType as 'bytes32' | 'string') || 'bytes32'\n if (resolvedUid && entry._schemaDef && (entry._propertyNameForSchema || entry._propertyName)) {\n const fieldName =\n entry._propertyNameForSchema ?? easName(entry._propertyName as string)\n const valueForEncode =\n easType === 'bytes32' ? padUidForBytes32Schema(resolvedUid) : resolvedUid\n const dataEncoder = new SchemaEncoder(entry._schemaDef)\n const encodedData = dataEncoder.encodeData([\n {\n name: fieldName,\n type: easType,\n value: valueForEncode,\n },\n ])\n const baseData = Array.isArray(entry.data) ? entry.data[0] : (entry.data as AttestationRequestData)\n updatedAttestations.push({\n ...entry,\n data: [\n {\n ...baseData,\n data: encodedData,\n } as AttestationRequestData,\n ],\n _unresolvedValue: undefined,\n })\n } else {\n const normalizedEntry: PublishPayload['listOfAttestations'][0] = {\n ...entry,\n data: Array.isArray(entry.data) ? entry.data : [entry.data as AttestationRequestData],\n }\n updatedAttestations.push(normalizedEntry)\n }\n }\n\n result.push({\n ...payload,\n listOfAttestations: updatedAttestations,\n })\n }\n\n return result\n}\n"],"names":[],"mappings":"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"}
@@ -1,24 +1,26 @@
1
- import { B as BaseDb, m as metadata } from './BaseFileManager-DLou1TZS.js';
1
+ import { B as BaseDb, m as metadata } from './BaseFileManager-D-pLXQAp.js';
2
2
  import { or, eq } from 'drizzle-orm';
3
- import { z as currentPropertyRows, B as metadataPropertyGroupKeys, D as compareMetadataRowsLatestFirst, E as readMetadataPropertiesById, F as isPublishedMetadataRow, G as getLatestPublishedVersionRow } from './Item-Ld1iPicQ.js';
4
- import { g as getPropertyClear } from './getPublishPayload-CLrAcZwr.js';
3
+ import { z as currentPropertyRows, B as metadataPropertyGroupKeys, D as compareMetadataRowsLatestFirst, F as readMetadataPropertiesById, G as isPublishedMetadataRow, H as getLatestPublishedVersionRow } from './Item-BU9wIT7l.js';
4
+ import { g as getPropertyClear } from './getPublishPayload-Dd3HCYeI.js';
5
5
  import 'debug';
6
6
  import 'drizzle-orm/sqlite-core';
7
- import './tabEvents-BnBzIdEi.js';
7
+ import './arweaveContentTags-iW_HcWJA.js';
8
8
  import '@sinclair/typebox';
9
9
  import 'nanoid';
10
10
  import 'nanoid-dictionary';
11
11
  import '@seedprotocol/eas';
12
12
  import '@seedprotocol/arweave';
13
+ import '@noble/hashes/sha256';
14
+ import '@noble/hashes/sha3';
15
+ import '@noble/hashes/utils';
13
16
  import 'xstate';
14
17
  import 'pluralize';
15
18
  import 'rxjs';
16
19
  import 'lodash-es';
17
- import './errors-DKxFSvb3.js';
18
- import '@noble/hashes/sha3';
19
- import '@noble/hashes/utils';
20
+ import './publishErrors-DZXDX3B6.js';
20
21
  import '@seedprotocol/query';
21
- import './publishGraph-DnWoWZRP.js';
22
+ import '@seedprotocol/archive';
23
+ import 'parse5';
22
24
 
23
25
  function resolveSeedIds(arg) {
24
26
  if (arg && typeof arg === 'object' && 'seedLocalId' in arg) {
@@ -121,4 +123,4 @@ async function getPublishPendingDiff(arg) {
121
123
  }
122
124
 
123
125
  export { getPublishPendingDiff };
124
- //# sourceMappingURL=getPublishPendingDiff-DiPff8pS.js.map
126
+ //# sourceMappingURL=getPublishPendingDiff-kcTP52Kj.js.map