@seedprotocol/sdk 0.5.1 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/dist/{BasePathResolver-BDgc7c4T.js → BasePathResolver-DWY_hb8w.js} +2 -2
  2. package/dist/{BasePathResolver-BDgc7c4T.js.map → BasePathResolver-DWY_hb8w.js.map} +1 -1
  3. package/dist/{ModelProperty-D-ysg8zA.js → ModelProperty-DGJf78CS.js} +22 -21
  4. package/dist/ModelProperty-DGJf78CS.js.map +1 -0
  5. package/dist/{Schema-CyCftnKI.js → Schema-Drmce3q-.js} +39 -39
  6. package/dist/{Schema-CyCftnKI.js.map → Schema-Drmce3q-.js.map} +1 -1
  7. package/dist/{SchemaValidationService-POM6jHbJ.js → SchemaValidationService-a_sfnpDV.js} +6 -5
  8. package/dist/{SchemaValidationService-POM6jHbJ.js.map → SchemaValidationService-a_sfnpDV.js.map} +1 -1
  9. package/dist/{backfillMetadataPropertyIds-DzZw57iJ.js → backfillMetadataPropertyIds-CZcOi-cK.js} +3 -3
  10. package/dist/{backfillMetadataPropertyIds-DzZw57iJ.js.map → backfillMetadataPropertyIds-CZcOi-cK.js.map} +1 -1
  11. package/dist/cjs/{ModelProperty-CmuGJvyi.js → ModelProperty-BA26rMV8.js} +18 -18
  12. package/dist/cjs/{ModelProperty-CmuGJvyi.js.map → ModelProperty-BA26rMV8.js.map} +1 -1
  13. package/dist/cjs/{Schema-gpFnZMhB.js → Schema-Hgwq3L34.js} +21 -21
  14. package/dist/cjs/{Schema-gpFnZMhB.js.map → Schema-Hgwq3L34.js.map} +1 -1
  15. package/dist/cjs/{SchemaValidationService-E3xTSRai.js → SchemaValidationService-DVmOGZao.js} +3 -3
  16. package/dist/cjs/{SchemaValidationService-E3xTSRai.js.map → SchemaValidationService-DVmOGZao.js.map} +1 -1
  17. package/dist/cjs/{backfillMetadataPropertyIds-_bivrvRs.js → backfillMetadataPropertyIds-BWJI4eCj.js} +3 -3
  18. package/dist/cjs/{backfillMetadataPropertyIds-_bivrvRs.js.map → backfillMetadataPropertyIds-BWJI4eCj.js.map} +1 -1
  19. package/dist/cjs/{eas-BwDKJmlb.js → eas-BJ8FtbU9.js} +4 -4
  20. package/dist/cjs/{eas-BwDKJmlb.js.map → eas-BJ8FtbU9.js.map} +1 -1
  21. package/dist/cjs/{getItem-MShQw3sz.js → getItem-DdBKeEEU.js} +3 -3
  22. package/dist/cjs/{getItem-MShQw3sz.js.map → getItem-DdBKeEEU.js.map} +1 -1
  23. package/dist/cjs/{getPublishPayload-C1nOOXp_.js → getPublishPayload-DSBLjMKl.js} +12 -12
  24. package/dist/cjs/{getPublishPayload-C1nOOXp_.js.map → getPublishPayload-DSBLjMKl.js.map} +1 -1
  25. package/dist/cjs/{getPublishUploads-BjgxgrKD.js → getPublishUploads-DMKnK2_R.js} +5 -5
  26. package/dist/cjs/{getPublishUploads-BjgxgrKD.js.map → getPublishUploads-DMKnK2_R.js.map} +1 -1
  27. package/dist/cjs/{getSegmentedItemProperties-Cuw7wcxb.js → getSegmentedItemProperties-D0ZzTmvi.js} +3 -3
  28. package/dist/cjs/{getSegmentedItemProperties-Cuw7wcxb.js.map → getSegmentedItemProperties-D0ZzTmvi.js.map} +1 -1
  29. package/dist/cjs/{index-vk2DeF2D.js → index-BD1b6zAi.js} +935 -60
  30. package/dist/cjs/index-BD1b6zAi.js.map +1 -0
  31. package/dist/cjs/{index-9Z2FOvLD.js → index-DQggpLqI.js} +4 -4
  32. package/dist/cjs/index-DQggpLqI.js.map +1 -0
  33. package/dist/cjs/index.browser-BSf8HpnU.js.map +1 -1
  34. package/dist/cjs/{property-D3Ww2_Qh.js → property-D4IB0zBz.js} +5 -5
  35. package/dist/cjs/{property-D3Ww2_Qh.js.map → property-D4IB0zBz.js.map} +1 -1
  36. package/dist/cjs/{syncDbWithEas-Dht3_7UD.js → syncDbWithEas-BYvFJc7N.js} +46 -49
  37. package/dist/cjs/syncDbWithEas-BYvFJc7N.js.map +1 -0
  38. package/dist/{configurePlatform-R5neRbQ9.js → configurePlatform-CXQCT7N8.js} +4 -3
  39. package/dist/{configurePlatform-R5neRbQ9.js.map → configurePlatform-CXQCT7N8.js.map} +1 -1
  40. package/dist/{constants-B5S5JPDK.js → constants-B7aNfB_1.js} +14 -19
  41. package/dist/constants-B7aNfB_1.js.map +1 -0
  42. package/dist/constants-DMHTYMgJ.js.map +1 -1
  43. package/dist/{db-Cvh84NY7.js → db-Bad8QKfZ.js} +18 -18
  44. package/dist/{db-Cvh84NY7.js.map → db-Bad8QKfZ.js.map} +1 -1
  45. package/dist/{eas-D9b7z2Wn.js → eas-BB9hVW68.js} +7 -6
  46. package/dist/eas-BB9hVW68.js.map +1 -0
  47. package/dist/{getItem-B81V3m4S.js → getItem-Cina46nb.js} +6 -5
  48. package/dist/{getItem-B81V3m4S.js.map → getItem-Cina46nb.js.map} +1 -1
  49. package/dist/{getPublishPayload-CNYsn8-6.js → getPublishPayload-BEO52UOv.js} +17 -16
  50. package/dist/getPublishPayload-BEO52UOv.js.map +1 -0
  51. package/dist/{getPublishUploads-D9rPHkB7.js → getPublishUploads-CJjfqJi9.js} +8 -7
  52. package/dist/{getPublishUploads-D9rPHkB7.js.map → getPublishUploads-CJjfqJi9.js.map} +1 -1
  53. package/dist/{getSegmentedItemProperties-Bg3_b-b1.js → getSegmentedItemProperties-CbzFDgFr.js} +5 -5
  54. package/dist/{getSegmentedItemProperties-Bg3_b-b1.js.map → getSegmentedItemProperties-CbzFDgFr.js.map} +1 -1
  55. package/dist/{index--F3Wolt5.js → index-B4In0GEO.js} +863 -67
  56. package/dist/index-B4In0GEO.js.map +1 -0
  57. package/dist/index-DNOCl06b.js +28 -0
  58. package/dist/index-DNOCl06b.js.map +1 -0
  59. package/dist/{index-QMrBK-L3.js → index-DrEkRiuK.js} +2 -2
  60. package/dist/index-DrEkRiuK.js.map +1 -0
  61. package/dist/{index.node-Bow8kHew.js → index.node-CnP9s4cV.js} +4 -4
  62. package/dist/{index.node-Bow8kHew.js.map → index.node-CnP9s4cV.js.map} +1 -1
  63. package/dist/main.cjs +3 -6
  64. package/dist/main.cjs.map +1 -1
  65. package/dist/main.js +21 -21
  66. package/dist/node.js +33 -12
  67. package/dist/node.js.map +1 -1
  68. package/dist/platform.browser.js +18 -5
  69. package/dist/platform.browser.js.map +1 -1
  70. package/dist/platform.node.js +3 -3
  71. package/dist/{property-BdyDfcSc.js → property-DIN1zQ_c.js} +9 -8
  72. package/dist/property-DIN1zQ_c.js.map +1 -0
  73. package/dist/src/Item/Item.d.ts +5 -0
  74. package/dist/src/Item/Item.d.ts.map +1 -1
  75. package/dist/src/Item/service/actors/saveDataToDb.d.ts.map +1 -1
  76. package/dist/src/Item/service/itemMachineSingle.d.ts +2 -2
  77. package/dist/src/Item/service/itemMachineSingle.d.ts.map +1 -1
  78. package/dist/src/ItemProperty/ItemProperty.d.ts +1 -1
  79. package/dist/src/ItemProperty/service/propertyMachine.d.ts +2 -2
  80. package/dist/src/ItemProperty/service/propertyMachine.d.ts.map +1 -1
  81. package/dist/src/Model/service/modelMachine.d.ts +10 -18
  82. package/dist/src/Model/service/modelMachine.d.ts.map +1 -1
  83. package/dist/src/ModelProperty/service/modelPropertyMachine.d.ts +5 -13
  84. package/dist/src/ModelProperty/service/modelPropertyMachine.d.ts.map +1 -1
  85. package/dist/src/Schema/service/addModelsMachine.d.ts +8 -8
  86. package/dist/src/Schema/service/addModelsMachine.d.ts.map +1 -1
  87. package/dist/src/Schema/service/schemaMachine.d.ts +22 -30
  88. package/dist/src/Schema/service/schemaMachine.d.ts.map +1 -1
  89. package/dist/src/browser/helpers/ArweaveClient.d.ts.map +1 -1
  90. package/dist/src/client/ClientManager.d.ts +16 -6
  91. package/dist/src/client/ClientManager.d.ts.map +1 -1
  92. package/dist/src/client/actors/platformClassesInit.d.ts.map +1 -1
  93. package/dist/src/client/actors/saveConfig.d.ts.map +1 -1
  94. package/dist/src/client/clientManagerMachine.d.ts +2 -2
  95. package/dist/src/client/clientManagerMachine.d.ts.map +1 -1
  96. package/dist/src/client/events.d.ts +7 -0
  97. package/dist/src/client/events.d.ts.map +1 -1
  98. package/dist/src/db/read/getItemData.d.ts +8 -0
  99. package/dist/src/db/read/getItemData.d.ts.map +1 -1
  100. package/dist/src/db/write/removeLocalCopiesForAddresses.d.ts +20 -0
  101. package/dist/src/db/write/removeLocalCopiesForAddresses.d.ts.map +1 -0
  102. package/dist/src/events/item/easSyncManager.d.ts +2 -2
  103. package/dist/src/events/item/easSyncManager.d.ts.map +1 -1
  104. package/dist/src/events/item/syncDbWithEas.d.ts.map +1 -1
  105. package/dist/src/helpers/file/download/index.d.ts +2 -2
  106. package/dist/src/helpers/file/download/index.d.ts.map +1 -1
  107. package/dist/src/helpers/file/fetchAll/index.d.ts +2 -2
  108. package/dist/src/helpers/file/fetchAll/index.d.ts.map +1 -1
  109. package/dist/src/helpers/gateway/resolveSeedGatewayEndpoints.d.ts +1 -1
  110. package/dist/src/helpers/gateway/resolveSeedGatewayEndpoints.d.ts.map +1 -1
  111. package/dist/src/helpers/index.d.ts +1 -5
  112. package/dist/src/helpers/index.d.ts.map +1 -1
  113. package/dist/src/helpers/mediaRef.d.ts +3 -0
  114. package/dist/src/helpers/mediaRef.d.ts.map +1 -1
  115. package/dist/src/helpers/ownership.d.ts +7 -0
  116. package/dist/src/helpers/ownership.d.ts.map +1 -1
  117. package/dist/src/index.d.ts +6 -2
  118. package/dist/src/index.d.ts.map +1 -1
  119. package/dist/src/node/webpack/index.d.ts +4 -1
  120. package/dist/src/node/webpack/index.d.ts.map +1 -1
  121. package/dist/src/query/createLocalQueryDataSource.d.ts +6 -0
  122. package/dist/src/query/createLocalQueryDataSource.d.ts.map +1 -0
  123. package/dist/src/query/index.d.ts +4 -0
  124. package/dist/src/query/index.d.ts.map +1 -0
  125. package/dist/src/query/registerSeedQueryLocalSource.d.ts +25 -0
  126. package/dist/src/query/registerSeedQueryLocalSource.d.ts.map +1 -0
  127. package/dist/src/services/publish/publishMachine.d.ts +1 -1
  128. package/dist/src/services/publish/publishMachine.d.ts.map +1 -1
  129. package/dist/src/services/write/writeProcessMachine.d.ts +2 -6
  130. package/dist/src/services/write/writeProcessMachine.d.ts.map +1 -1
  131. package/dist/src/types/machines.d.ts +2 -0
  132. package/dist/src/types/machines.d.ts.map +1 -1
  133. package/dist/{syncDbWithEas-DMOJHtkP.js → syncDbWithEas-ceVUuWSZ.js} +52 -54
  134. package/dist/syncDbWithEas-ceVUuWSZ.js.map +1 -0
  135. package/dist/{updateSeedRevokedAt-Ba0OhDQj.js → updateSeedRevokedAt-CtRjZiyh.js} +2 -2
  136. package/dist/{updateSeedRevokedAt-Ba0OhDQj.js.map → updateSeedRevokedAt-CtRjZiyh.js.map} +1 -1
  137. package/package.json +23 -6
  138. package/dist/ModelProperty-D-ysg8zA.js.map +0 -1
  139. package/dist/cjs/index-9Z2FOvLD.js.map +0 -1
  140. package/dist/cjs/index-vk2DeF2D.js.map +0 -1
  141. package/dist/cjs/ownership-DhWda0J9.js +0 -105
  142. package/dist/cjs/ownership-DhWda0J9.js.map +0 -1
  143. package/dist/cjs/syncDbWithEas-Dht3_7UD.js.map +0 -1
  144. package/dist/constants-B5S5JPDK.js.map +0 -1
  145. package/dist/eas-D9b7z2Wn.js.map +0 -1
  146. package/dist/getPublishPayload-CNYsn8-6.js.map +0 -1
  147. package/dist/index--F3Wolt5.js.map +0 -1
  148. package/dist/index-QMrBK-L3.js.map +0 -1
  149. package/dist/index-oi4roUVf.js +0 -22
  150. package/dist/index-oi4roUVf.js.map +0 -1
  151. package/dist/ownership-BF_ZUKIp.js +0 -105
  152. package/dist/ownership-BF_ZUKIp.js.map +0 -1
  153. package/dist/property-BdyDfcSc.js.map +0 -1
  154. package/dist/syncDbWithEas-DMOJHtkP.js.map +0 -1
@@ -1,105 +0,0 @@
1
- 'use strict';
2
-
3
- var main_cjs = require('./index-vk2DeF2D.js');
4
- var drizzleOrm = require('drizzle-orm');
5
- require('immer');
6
- require('reflect-metadata');
7
- require('xstate');
8
- require('drizzle-orm/sqlite-core');
9
- require('debug');
10
- require('@seedprotocol/arweave');
11
- require('@seedprotocol/eas');
12
- require('pluralize');
13
- require('@sinclair/typebox');
14
- require('nanoid');
15
- require('nanoid-dictionary');
16
- require('drizzle-orm/casing');
17
- require('lodash-es');
18
- require('rxjs');
19
- require('js-sha3');
20
- require('fs/promises');
21
- require('fs');
22
- require('path');
23
- require('node:url');
24
- require('@libsql/client');
25
- require('drizzle-orm/libsql');
26
- require('drizzle-orm/libsql/migrator');
27
- require('js-yaml');
28
- require('@seedprotocol/webpack');
29
- require('child_process');
30
- require('@seedprotocol/arweave/node');
31
- require('@seedprotocol/eas/node');
32
-
33
- const READ_ONLY_ERROR = 'Item is read-only: you do not own this item';
34
- async function getSeedRowForItem(item) {
35
- const appDb = main_cjs.BaseDb.getAppDb();
36
- if (!appDb)
37
- return null;
38
- const conditions = [];
39
- if (item.seedLocalId)
40
- conditions.push(drizzleOrm.eq(main_cjs.seeds.localId, item.seedLocalId));
41
- if (item.seedUid)
42
- conditions.push(drizzleOrm.eq(main_cjs.seeds.uid, item.seedUid));
43
- if (conditions.length === 0)
44
- return null;
45
- const seedRows = await appDb
46
- .select({
47
- publisher: main_cjs.seeds.publisher,
48
- attestationRaw: main_cjs.seeds.attestationRaw,
49
- uid: main_cjs.seeds.uid,
50
- })
51
- .from(main_cjs.seeds)
52
- .where(conditions.length === 1 ? conditions[0] : drizzleOrm.or(...conditions))
53
- .limit(1);
54
- if (!seedRows || seedRows.length === 0)
55
- return null;
56
- return seedRows[0];
57
- }
58
- function getPublisherFromRow(row) {
59
- if (row.publisher)
60
- return row.publisher;
61
- if (row.attestationRaw) {
62
- try {
63
- const parsed = JSON.parse(row.attestationRaw);
64
- return parsed.attester ?? null;
65
- }
66
- catch {
67
- return null;
68
- }
69
- }
70
- return null;
71
- }
72
- /**
73
- * Checks if the current user owns the item (publisher is in owned addresses).
74
- * Locally created items (no publisher, no attestationRaw) are considered owned.
75
- * Includes getAdditionalSyncAddresses (e.g. `modularAccountModuleContract` when configured)
76
- * so ownership aligns with EAS sync when the publisher/attester matches those addresses.
77
- */
78
- async function isItemOwned(item) {
79
- const row = await getSeedRowForItem(item);
80
- if (!row)
81
- return false;
82
- const publisher = getPublisherFromRow(row);
83
- if (!publisher) {
84
- if (!row.uid && !row.attestationRaw) {
85
- return true;
86
- }
87
- return false;
88
- }
89
- let addressesToCheck = await main_cjs.getOwnedAddressesFromDb();
90
- const ownedSet = new Set(addressesToCheck.map((a) => a.toLowerCase()));
91
- return ownedSet.has(publisher.toLowerCase());
92
- }
93
- /**
94
- * Throws if the item is not owned. Use before write operations (publish, save, destroy).
95
- */
96
- async function assertItemOwned(item) {
97
- const owned = await isItemOwned(item);
98
- if (!owned) {
99
- throw new Error(READ_ONLY_ERROR);
100
- }
101
- }
102
-
103
- exports.assertItemOwned = assertItemOwned;
104
- exports.isItemOwned = isItemOwned;
105
- //# sourceMappingURL=ownership-DhWda0J9.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ownership-DhWda0J9.js","sources":["../../../src/helpers/ownership.ts"],"sourcesContent":["import type { IItem } from '@/interfaces/IItem'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { seeds } from '@/seedSchema'\nimport { eq, or } from 'drizzle-orm'\nimport { getOwnedAddressesFromDb } from '@/helpers/db'\nimport { getGetAdditionalSyncAddresses } from '@/helpers/publishConfig'\n\nconst READ_ONLY_ERROR = 'Item is read-only: you do not own this item'\n\ntype ItemLike = { seedLocalId?: string; seedUid?: string }\n\ntype SeedRow = { publisher: string | null; attestationRaw: string | null; uid: string | null }\n\nasync function getSeedRowForItem(item: ItemLike): Promise<SeedRow | null> {\n const appDb = BaseDb.getAppDb()\n if (!appDb) return null\n\n const conditions = []\n if (item.seedLocalId) conditions.push(eq(seeds.localId, item.seedLocalId))\n if (item.seedUid) conditions.push(eq(seeds.uid, item.seedUid))\n if (conditions.length === 0) return null\n\n const seedRows = await appDb\n .select({\n publisher: seeds.publisher,\n attestationRaw: seeds.attestationRaw,\n uid: seeds.uid,\n })\n .from(seeds)\n .where(conditions.length === 1 ? conditions[0] : (or(...conditions) as any))\n .limit(1)\n\n if (!seedRows || seedRows.length === 0) return null\n return seedRows[0]\n}\n\nfunction getPublisherFromRow(row: SeedRow): string | null {\n if (row.publisher) return row.publisher\n if (row.attestationRaw) {\n try {\n const parsed = JSON.parse(row.attestationRaw) as { attester?: string }\n return parsed.attester ?? null\n } catch {\n return null\n }\n }\n return null\n}\n\n/**\n * Checks if the current user owns the item (publisher is in owned addresses).\n * Locally created items (no publisher, no attestationRaw) are considered owned.\n * Includes getAdditionalSyncAddresses (e.g. `modularAccountModuleContract` when configured)\n * so ownership aligns with EAS sync when the publisher/attester matches those addresses.\n */\nexport async function isItemOwned(item: ItemLike | IItem<any>): Promise<boolean> {\n const row = await getSeedRowForItem(item)\n if (!row) return false\n\n const publisher = getPublisherFromRow(row)\n if (!publisher) {\n if (!row.uid && !row.attestationRaw) {\n return true\n }\n return false\n }\n\n let addressesToCheck = await getOwnedAddressesFromDb()\n const additionalGetter = getGetAdditionalSyncAddresses()\n if (additionalGetter) {\n const additional = await additionalGetter()\n if (additional?.length) {\n const seen = new Set(addressesToCheck.map((a) => a.toLowerCase()))\n for (const addr of additional) {\n if (addr && !seen.has(addr.toLowerCase())) {\n seen.add(addr.toLowerCase())\n addressesToCheck = [...addressesToCheck, addr]\n }\n }\n }\n }\n\n const ownedSet = new Set(addressesToCheck.map((a) => a.toLowerCase()))\n return ownedSet.has(publisher.toLowerCase())\n}\n\n/**\n * Throws if the item is not owned. Use before write operations (publish, save, destroy).\n */\nexport async function assertItemOwned(item: ItemLike | IItem<any>): Promise<void> {\n const owned = await isItemOwned(item)\n if (!owned) {\n throw new Error(READ_ONLY_ERROR)\n }\n}\n"],"names":["BaseDb","eq","seeds","or","getOwnedAddressesFromDb"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,MAAM,eAAe,GAAG,6CAA6C;AAMrE,eAAe,iBAAiB,CAAC,IAAc,EAAA;AAC7C,IAAA,MAAM,KAAK,GAAGA,eAAM,CAAC,QAAQ,EAAE;AAC/B,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,IAAI;IAEvB,MAAM,UAAU,GAAG,EAAE;IACrB,IAAI,IAAI,CAAC,WAAW;AAAE,QAAA,UAAU,CAAC,IAAI,CAACC,aAAE,CAACC,cAAK,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1E,IAAI,IAAI,CAAC,OAAO;AAAE,QAAA,UAAU,CAAC,IAAI,CAACD,aAAE,CAACC,cAAK,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9D,IAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,IAAI;IAExC,MAAM,QAAQ,GAAG,MAAM;AACpB,SAAA,MAAM,CAAC;QACN,SAAS,EAAEA,cAAK,CAAC,SAAS;QAC1B,cAAc,EAAEA,cAAK,CAAC,cAAc;QACpC,GAAG,EAAEA,cAAK,CAAC,GAAG;KACf;SACA,IAAI,CAACA,cAAK;SACV,KAAK,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAIC,aAAE,CAAC,GAAG,UAAU,CAAS;SAC1E,KAAK,CAAC,CAAC,CAAC;AAEX,IAAA,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,IAAI;AACnD,IAAA,OAAO,QAAQ,CAAC,CAAC,CAAC;AACpB;AAEA,SAAS,mBAAmB,CAAC,GAAY,EAAA;IACvC,IAAI,GAAG,CAAC,SAAS;QAAE,OAAO,GAAG,CAAC,SAAS;AACvC,IAAA,IAAI,GAAG,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAA0B;AACtE,YAAA,OAAO,MAAM,CAAC,QAAQ,IAAI,IAAI;QAChC;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,IAAI;QACb;IACF;AACA,IAAA,OAAO,IAAI;AACb;AAEA;;;;;AAKG;AACI,eAAe,WAAW,CAAC,IAA2B,EAAA;AAC3D,IAAA,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC;AACzC,IAAA,IAAI,CAAC,GAAG;AAAE,QAAA,OAAO,KAAK;AAEtB,IAAA,MAAM,SAAS,GAAG,mBAAmB,CAAC,GAAG,CAAC;IAC1C,IAAI,CAAC,SAAS,EAAE;QACd,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE;AACnC,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,gBAAgB,GAAG,MAAMC,gCAAuB,EAAE;IAetD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACtE,OAAO,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;AAC9C;AAEA;;AAEG;AACI,eAAe,eAAe,CAAC,IAA2B,EAAA;AAC/D,IAAA,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC;IACrC,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC;IAClC;AACF;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"syncDbWithEas-Dht3_7UD.js","sources":["../../../src/db/read/getModelSchemas.ts","../../../src/db/write/createSeeds.ts","../../../src/db/write/updateSeedRevokedAt.ts","../../../src/events/item/syncDbWithEas.ts"],"sourcesContent":["// Dynamic import to break circular dependency: Model -> BaseItem -> ... -> getModelSchemas -> Model\n// import { Model } from '@/Model/Model'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { models as modelsTable, modelUids } from '@/seedSchema'\nimport { eq } from 'drizzle-orm'\nimport pluralize from 'pluralize'\nimport { toSnakeCase } from '@/helpers'\n\ntype ModelRecord = {\n id: number\n name: string\n uid: string | null\n tableName?: string\n}\n\nconst schemaStringToModelRecord = new Map<string, ModelRecord>()\n\ntype GetModelSchemasReturn = {\n schemaStringToModelRecord: Map<string, ModelRecord>\n modelRecords: ModelRecord[]\n}\n\ntype GetModelSchemas = () => Promise<GetModelSchemasReturn>\n\nexport const getModelSchemas: GetModelSchemas = async () => {\n // Dynamic import to break circular dependency\n const modelMod = await import('../../Model/Model')\n const { Model } = modelMod\n const allModels = await Model.all()\n const modelRecords: ModelRecord[] = []\n\n const appDb = BaseDb.getAppDb()\n\n for (const model of allModels) {\n const modelName = model.modelName\n if (!modelName) continue\n const foundModelQuery = await appDb\n .select({\n id: modelsTable.id,\n name: modelsTable.name,\n uid: modelUids.uid,\n })\n .from(modelsTable)\n .leftJoin(modelUids, eq(modelsTable.id, modelUids.modelId))\n .where(eq(modelsTable.name, modelName))\n .limit(1)\n\n if (!foundModelQuery[0]) {\n console.error(\n `[item/events] [syncDbWithEas] model ${modelName} not found in SDK DB`,\n )\n continue\n }\n\n const foundModel: ModelRecord = {\n id: foundModelQuery[0].id,\n name: foundModelQuery[0].name,\n uid: foundModelQuery[0].uid,\n tableName: pluralize(foundModelQuery[0].name).toLowerCase(),\n }\n\n modelRecords.push(foundModel)\n\n if (modelName === 'Seed') {\n continue\n }\n\n const schemaString = `bytes32 ${toSnakeCase(modelName)}`\n\n schemaStringToModelRecord.set(schemaString, foundModel)\n }\n\n return {\n schemaStringToModelRecord,\n modelRecords,\n }\n}\n","import { seeds, SeedType } from '@/seedSchema'\nimport { BaseDb } from '@/db/Db/BaseDb'\n\ntype CreateSeeds = (newSeeds: Partial<SeedType>[]) => Promise<string[]>\n\nexport const createSeeds: CreateSeeds = async (\n newSeeds: Partial<SeedType>[],\n) => {\n const appDb = BaseDb.getAppDb()\n\n const results = await appDb\n .insert(seeds)\n .values(newSeeds)\n .returning({ uid: seeds.uid })\n\n const newUids = results.reduce((acc: string[], result: { uid: string | null }) => {\n if (result.uid) {\n acc.push(result.uid)\n }\n return acc\n }, [] as string[])\n\n return newUids\n}\n","import { BaseDb } from '@/db/Db/BaseDb'\nimport { seeds } from '@/seedSchema'\nimport { eq } from 'drizzle-orm'\n\ntype UpdateSeedRevokedAtProps = {\n seedLocalId: string\n revokedAt: number\n}\n\n/**\n * Sets revokedAt timestamp on a seed record after attestations have been revoked on EAS.\n */\nexport const updateSeedRevokedAt = async ({\n seedLocalId,\n revokedAt,\n}: UpdateSeedRevokedAtProps): Promise<void> => {\n if (!seedLocalId) {\n return\n }\n\n const appDb = BaseDb.getAppDb()\n\n await appDb\n .update(seeds)\n .set({\n revokedAt,\n updatedAt: Date.now(),\n })\n .where(eq(seeds.localId, seedLocalId))\n}\n","import { camelCase, startCase } from 'lodash-es'\nimport { Attestation, SchemaWhereInput } from '@seedprotocol/eas'\nimport {\n metadata,\n MetadataType,\n modelUids,\n seeds,\n SeedType,\n versions,\n} from '@/seedSchema'\nimport { and, eq, inArray, sql } from 'drizzle-orm'\nimport {\n generateId,\n parseEasRelationPropertyName,\n} from '@/helpers'\nimport { modelPropertiesToObject } from '@/helpers/model'\nimport {\n GET_PROPERTIES,\n GET_SEEDS,\n GET_VERSIONS,\n} from '@seedprotocol/eas'\nimport { escapeSqliteString, getAllAddressesFromDb, getPropertyIdForModelAndName } from '@/helpers/db'\n// Dynamic import to break circular dependency: Model -> BaseItem -> ... -> syncDbWithEas -> Model\n// import { Model } from '@/Model/Model'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { getModelSchemas } from '@/db/read/getModelSchemas'\nimport { ModelSchema, PropertyType } from '@/types'\nimport { createSeeds } from '@/db/write/createSeeds'\nimport { updateSeedRevokedAt } from '@/db/write/updateSeedRevokedAt'\nimport { setSchemaUidForSchemaDefinition } from '@/stores/eas'\nimport { BaseEasClient } from '@/helpers/EasClient/BaseEasClient'\nimport { BaseQueryClient } from '@/helpers/QueryClient/BaseQueryClient'\nimport {\n getItemPropertiesFromEas,\n getItemVersionsFromEas,\n getModelSchemasFromEas,\n getSeedsFromSchemaUids,\n} from '@/eas'\nimport { pickLatestPropertyAttestationsByRefAndSchema } from '@/helpers/easPropertyCanonical'\nimport { getGetAdditionalSyncAddresses } from '@/helpers/publishConfig'\nimport { scheduleBulkFilesDownloadFromEasSync } from '@/events/files/download'\nimport { eventEmitter } from '@/eventBus'\nimport { EAS_SEED_DATA_SYNCED_TO_DB_EVENT } from '@/helpers/constants'\n\nconst relationValuesToExclude = [\n '0x0000000000000000000000000000000000000000000000000000000000000020',\n]\n\n\nconst seedUidToLocalId = new Map<string, string>()\nconst seedUidToModelType = new Map<string, string>()\nconst relatedSeedUids = new Set<string>()\n\nconst versionUidToLocalId = new Map<string, string>()\nconst versionUidToSeedUid = new Map<string, string>()\n\nconst propertyUidToLocalId = new Map<string, string>()\n\ntype SaveEasSeedsToDbProps = {\n itemSeeds: Attestation[]\n}\n\ntype SaveEasSeedsToDbReturn = {\n seedUids: string[]\n}\n\ntype SaveEasSeedsToDb = (\n props: SaveEasSeedsToDbProps,\n) => Promise<SaveEasSeedsToDbReturn>\n\nconst saveEasSeedsToDb: SaveEasSeedsToDb = async ({ itemSeeds }) => {\n const appDb = BaseDb.getAppDb()\n\n const seedUids = itemSeeds.map((seed) => seed.id)\n\n const existingSeedRecordsRows: SeedType[] = await appDb\n .select()\n .from(seeds)\n .where(inArray(seeds.uid, seedUids))\n\n const existingSeedUids = new Set<string>()\n\n if (existingSeedRecordsRows && existingSeedRecordsRows.length > 0) {\n for (const row of existingSeedRecordsRows) {\n if (row.uid) {\n existingSeedUids.add(row.uid)\n if (row.localId) {\n seedUidToLocalId.set(row.uid, row.localId)\n }\n if (row.type) {\n seedUidToModelType.set(row.uid, row.type)\n }\n }\n }\n }\n\n const newSeeds = itemSeeds.filter((seed) => !existingSeedUids.has(seed.id))\n\n // Update existing seeds when attestations are revoked on EAS\n const seedByUid = new Map(itemSeeds.map((s) => [s.id, s]))\n for (const row of existingSeedRecordsRows) {\n if (!row.uid || !row.localId) continue\n const attestation = seedByUid.get(row.uid)\n if (!attestation?.revoked) continue\n if (row.revokedAt != null) continue\n const revokedAt =\n attestation.revocationTime > 0\n ? attestation.revocationTime\n : Math.floor(Date.now() / 1000)\n await updateSeedRevokedAt({ seedLocalId: row.localId, revokedAt })\n }\n\n if (newSeeds.length === 0) {\n return { seedUidToLocalId, seedUids }\n }\n\n const newSeedsData: Partial<SeedType>[] = []\n\n for (let i = 0; i < newSeeds.length; i++) {\n const seed = newSeeds[i]\n seedUidToModelType.set(seed.id, seed.schema.schemaNames[0].name)\n const seedLocalId = generateId()\n seedUidToLocalId.set(seed.id, seedLocalId)\n\n const attestationRaw = escapeSqliteString(JSON.stringify(seed))\n const revokedAt =\n seed.revoked && seed.revocationTime != null && seed.revocationTime > 0\n ? seed.revocationTime\n : seed.revoked\n ? Math.floor(Date.now() / 1000)\n : undefined\n\n newSeedsData.push({\n localId: seedLocalId,\n uid: seed.id,\n schemaUid: seed.schemaId,\n type: seed.schema.schemaNames[0].name,\n publisher: seed.attester,\n createdAt: Date.now(),\n attestationCreatedAt: seed.timeCreated * 1000,\n attestationRaw,\n ...(revokedAt !== undefined && { revokedAt }),\n })\n\n seedUidToLocalId.set(seed.id, seedLocalId)\n }\n\n const newSeedUids = await createSeeds(newSeedsData)\n\n return { seedUids: newSeedUids }\n}\n\ntype SaveEasVersionsToDbParams = {\n itemVersions: Attestation[]\n}\n\ntype SaveEasVersionsToDb = (\n props: SaveEasVersionsToDbParams,\n) => Promise<SaveEasVersionsToDbReturn>\n\ntype SaveEasVersionsToDbReturn = {\n versionUids: string[]\n}\n\nconst saveEasVersionsToDb: SaveEasVersionsToDb = async ({ itemVersions }) => {\n const versionUids = itemVersions.map((version) => version.id)\n\n const appDb = BaseDb.getAppDb()\n\n const existingVersionRecordsRows: MetadataType[] = await appDb\n .select()\n .from(versions)\n .where(inArray(versions.uid, versionUids))\n\n const existingVersionUids = new Set<string>()\n\n if (existingVersionRecordsRows && existingVersionRecordsRows.length > 0) {\n for (const row of existingVersionRecordsRows) {\n if (row.uid) {\n existingVersionUids.add(row.uid)\n if (row.localId) {\n versionUidToLocalId.set(row.uid, row.localId)\n }\n if (row.seedUid) {\n versionUidToSeedUid.set(row.uid, row.seedUid)\n }\n }\n }\n }\n\n const newVersions = itemVersions.filter(\n (version) => !existingVersionUids.has(version.id),\n )\n\n if (newVersions.length === 0) {\n return { versionUidToLocalId, versionUids }\n }\n\n let insertVersionsQuery = `INSERT INTO versions (local_id, uid, seed_uid, seed_local_id, seed_type, created_at,\n attestation_created_at,\n attestation_raw, publisher)\n VALUES `\n\n for (let i = 0; i < newVersions.length; i++) {\n const version = newVersions[i]\n versionUidToSeedUid.set(version.id, version.refUID)\n const versionLocalId = generateId()\n versionUidToLocalId.set(version.id, versionLocalId)\n\n const seedUid = versionUidToSeedUid.get(version.id)\n const seedLocalId = seedUidToLocalId.get(seedUid!)\n const seedType = seedUidToModelType.get(seedUid!)\n const attestationRaw = escapeSqliteString(JSON.stringify(version))\n const publisher = escapeSqliteString(version.attester ?? '')\n\n const valuesString = `('${versionLocalId}', '${version.id}', '${seedUid}', '${seedLocalId}', '${seedType}', ${Date.now()}, ${version.timeCreated * 1000}, '${attestationRaw}', '${publisher}')`\n\n if (i < newVersions.length - 1) {\n insertVersionsQuery += valuesString + ', '\n }\n\n if (i === newVersions.length - 1) {\n insertVersionsQuery += valuesString + ';'\n }\n\n versionUidToLocalId.set(version.id, versionLocalId)\n }\n\n await appDb.run(sql.raw(insertVersionsQuery))\n\n return { versionUids }\n}\n\nconst createMetadataRecordsForStorageTransactionId = async (\n storageTransactionIdProperty: Attestation,\n modelSchema: ModelSchema | undefined,\n) => {\n // Early return if modelSchema is not provided\n if (!modelSchema) {\n console.warn(\n '[item/events] [syncDbWithEas] modelSchema is undefined for storageTransactionIdProperty: ',\n storageTransactionIdProperty.id,\n )\n return\n }\n\n // Validate and parse decodedDataJson\n if (!storageTransactionIdProperty.decodedDataJson || storageTransactionIdProperty.decodedDataJson.trim() === '') {\n console.warn(\n '[item/events] [syncDbWithEas] empty decodedDataJson for storageTransactionIdProperty: ',\n storageTransactionIdProperty.id,\n )\n return\n }\n\n let parsedData\n try {\n parsedData = JSON.parse(storageTransactionIdProperty.decodedDataJson)\n } catch (error) {\n console.warn(\n '[item/events] [syncDbWithEas] failed to parse decodedDataJson for storageTransactionIdProperty: ',\n storageTransactionIdProperty.id,\n error,\n )\n return\n }\n\n if (!Array.isArray(parsedData) || parsedData.length === 0 || !parsedData[0]?.value) {\n console.warn(\n '[item/events] [syncDbWithEas] invalid decodedDataJson structure for storageTransactionIdProperty: ',\n storageTransactionIdProperty.id,\n )\n return\n }\n\n const attestationData = parsedData[0].value\n const propertyName = camelCase(attestationData.name)\n const propertyValue = attestationData.value\n\n const itemStorageProperties = new Map<string, PropertyType>()\n\n for (const [_propertyName, propertyDef] of Object.entries(modelSchema)) {\n if (propertyDef?.storageType && propertyDef.storageType === 'ItemStorage') {\n itemStorageProperties.set(_propertyName, propertyDef)\n }\n }\n\n if (itemStorageProperties.size === 0) {\n return\n }\n\n const appDb = BaseDb.getAppDb()\n\n for (const [_propertyName, propertyDef] of itemStorageProperties.entries()) {\n const existingMetadataRecordRows = await appDb\n .select()\n .from(metadata)\n .where(\n and(\n eq(metadata.propertyName, _propertyName),\n eq(metadata.propertyValue, propertyValue),\n eq(metadata.versionUid, storageTransactionIdProperty.refUID),\n ),\n )\n\n if (existingMetadataRecordRows && existingMetadataRecordRows.length > 0) {\n continue\n }\n\n const seedUid = versionUidToSeedUid.get(\n storageTransactionIdProperty.refUID,\n ) as string\n const seedLocalId = seedUidToLocalId.get(seedUid)\n const versionUid = storageTransactionIdProperty.refUID\n const versionLocalId = versionUidToLocalId.get(versionUid)\n const modelType = seedUidToModelType.get(seedUid)\n const propertyId =\n modelType != null\n ? await getPropertyIdForModelAndName(modelType, _propertyName)\n : null\n\n const propertyLocalId = generateId()\n await appDb.insert(metadata).values({\n localId: propertyLocalId,\n propertyId: propertyId ?? undefined,\n propertyName: _propertyName,\n propertyValue,\n localStorageDir: propertyDef.localStorageDir,\n seedLocalId,\n seedUid,\n versionLocalId,\n versionUid,\n refValueType: 'file',\n refResolvedValue: `${propertyValue}${propertyDef.filenameSuffix}`,\n modelType: seedUidToModelType.get(seedUid),\n createdAt: Date.now(),\n updatedAt: Date.now(),\n })\n }\n}\n\ntype SaveEasPropertiesToDbParams = {\n itemProperties: Attestation[]\n itemSeeds: Attestation[]\n}\n\ntype SaveEasPropertiesToDbReturn = {\n propertyUids: string[]\n propertyUidToLocalId?: Map<string, string>\n}\n\ntype SaveEasPropertiesToDb = (\n props: SaveEasPropertiesToDbParams,\n) => Promise<SaveEasPropertiesToDbReturn>\n\n/** Serialize property saves: concurrent `runSyncFromEas` used to hit `isSavingToDb` and return `{}` with no insert. */\nlet saveEasPropertiesDbChain: Promise<unknown> = Promise.resolve()\n\nconst saveEasPropertiesToDbBody = async ({\n itemProperties,\n itemSeeds,\n}: SaveEasPropertiesToDbParams): Promise<SaveEasPropertiesToDbReturn> => {\n const propertyUids = itemProperties.map((property) => property.id)\n\n // Dynamic import to break circular dependency\n const modelMod = await import('../../Model/Model')\n const { Model } = modelMod\n const allModels = await Model.all()\n const models = Object.fromEntries(allModels.map(m => [m.modelName!, m]))\n\n const appDb = BaseDb.getAppDb()\n\n const existingMetadataRecordsRows: MetadataType[] = await appDb\n .select()\n .from(metadata)\n .where(inArray(metadata.uid, propertyUids))\n\n const existingPropertyRecordsUids = new Set<string>()\n\n if (existingMetadataRecordsRows && existingMetadataRecordsRows.length > 0) {\n for (const row of existingMetadataRecordsRows) {\n if (row.uid) {\n existingPropertyRecordsUids.add(row.uid)\n if (row.localId) {\n propertyUidToLocalId.set(row.uid, row.localId)\n }\n }\n }\n }\n\n const newProperties = itemProperties.filter(\n (property) => !existingPropertyRecordsUids.has(property.id),\n )\n\n if (newProperties.length === 0) {\n return { propertyUidToLocalId, propertyUids }\n }\n\n let insertPropertiesQuery = `INSERT INTO metadata (local_id, uid, schema_uid, property_id, property_name, property_value,\n eas_data_type, version_uid, version_local_id, seed_uid,\n seed_local_id, model_type, ref_value_type, ref_seed_type,\n ref_schema_uid,\n created_at, attestation_created_at, attestation_raw,\n local_storage_dir, ref_resolved_value, publisher)\n VALUES `\n\n for (let i = 0; i < newProperties.length; i++) {\n const property = newProperties[i]\n const propertyLocalId = generateId()\n \n // Validate and parse decodedDataJson\n if (!property.decodedDataJson || property.decodedDataJson.trim() === '') {\n console.warn(\n '[item/events] [syncDbWithEas] empty decodedDataJson for property: ',\n property.id,\n )\n continue\n }\n\n let parsedData\n try {\n parsedData = JSON.parse(property.decodedDataJson)\n } catch (error) {\n console.warn(\n '[item/events] [syncDbWithEas] failed to parse decodedDataJson for property: ',\n property.id,\n error,\n )\n continue\n }\n\n if (!Array.isArray(parsedData) || parsedData.length === 0 || !parsedData[0]?.value) {\n console.warn(\n '[item/events] [syncDbWithEas] invalid decodedDataJson structure for property: ',\n property.id,\n )\n continue\n }\n\n const metadata = parsedData[0].value\n\n let propertyNameSnake = metadata.name\n\n if (!propertyNameSnake) {\n console.warn(\n '[item/events] [syncDbWithEas] no propertyName found for property: ',\n property,\n )\n continue\n }\n\n let isRelation = false\n let refValueType\n let refSeedType\n let refSchemaUid\n let refResolvedValue\n let isList = false\n const schemaUid = property.schemaId\n\n setSchemaUidForSchemaDefinition({\n text: propertyNameSnake,\n schemaUid,\n })\n\n if (\n (propertyNameSnake.endsWith('_id') ||\n propertyNameSnake.endsWith('_ids')) &&\n propertyNameSnake !== 'storage_transaction_id' &&\n propertyNameSnake !== 'storage_provider_transaction_id'\n ) {\n isRelation = true\n\n if (Array.isArray(metadata.value)) {\n isList = true\n refValueType = 'list'\n\n const result = parseEasRelationPropertyName(propertyNameSnake)\n\n if (result) {\n propertyNameSnake = result.propertyName\n refSeedType = result.modelName\n }\n\n metadata.value.forEach((value: string) => {\n relatedSeedUids.add(value)\n })\n }\n\n if (!isList) {\n if (relationValuesToExclude.includes(metadata.value)) {\n continue\n }\n relatedSeedUids.add(metadata.value)\n }\n }\n\n let propertyValue = metadata.value\n\n if (typeof propertyValue !== 'string') {\n propertyValue = JSON.stringify(propertyValue)\n }\n\n if (isRelation && !isList) {\n const relatedSeed = itemSeeds.find(\n (seed: Attestation) => seed.id === metadata.value,\n )\n if (relatedSeed && relatedSeed.schema && relatedSeed.schema.schemaNames) {\n refSeedType = relatedSeed.schema.schemaNames[0].name\n refSchemaUid = relatedSeed.schemaId\n }\n }\n\n if (isRelation && isList) {\n const relatedSeeds = itemSeeds.filter((seed: Attestation) =>\n metadata.value.includes(seed.id),\n )\n if (relatedSeeds && relatedSeeds.length > 0) {\n refSeedType = relatedSeeds[0].schema.schemaNames[0].name\n refSchemaUid = relatedSeeds[0].schemaId\n }\n }\n\n const propertyName = camelCase(propertyNameSnake)\n propertyValue = escapeSqliteString(propertyValue)\n const easDataType = metadata.type\n const versionUid = property.refUID\n const versionLocalId = versionUidToLocalId.get(versionUid)\n const attestationCreatedAt = property.timeCreated * 1000\n const attestationRaw = escapeSqliteString(JSON.stringify(property))\n const seedUid = versionUidToSeedUid.get(versionUid)\n const seedLocalId = seedUidToLocalId.get(seedUid!)\n const modelType = seedUidToModelType.get(seedUid!)\n\n let localStorageDir\n const modelName = startCase(modelType)\n const model = models[modelName]\n const modelSchema = model?.properties ? modelPropertiesToObject(model.properties) : undefined\n\n if (propertyNameSnake === 'storage_transaction_id') {\n await createMetadataRecordsForStorageTransactionId(property, modelSchema)\n }\n\n const propertyId =\n modelType != null\n ? await getPropertyIdForModelAndName(modelType, propertyName)\n : null\n const propertyIdSql = propertyId != null ? String(propertyId) : 'NULL'\n\n const publisher = escapeSqliteString(property.attester ?? '')\n const valuesString = `('${propertyLocalId}', '${property.id}', \n '${property.schemaId}', ${propertyIdSql}, '${propertyName}', \n '${propertyValue}', '${easDataType}', '${versionUid}', \n '${versionLocalId}', '${seedUid}', '${seedLocalId}', \n '${modelType}', ${refValueType ? `'${refValueType}'` : 'NULL'}, \n ${refSeedType ? `'${refSeedType}'` : 'NULL'},\n ${refSchemaUid ? `'${refSchemaUid}'` : 'NULL'},\n ${Date.now()}, ${attestationCreatedAt}, '${attestationRaw}',\n ${localStorageDir ? `'${localStorageDir}'` : 'NULL'},\n ${refResolvedValue ? `'${refResolvedValue}'` : 'NULL'},\n '${publisher}')`\n\n if (i < newProperties.length - 1) {\n insertPropertiesQuery += valuesString + ', '\n }\n\n if (i === newProperties.length - 1) {\n insertPropertiesQuery += valuesString + ';'\n }\n\n propertyUidToLocalId.set(property.id, propertyLocalId)\n }\n\n if (insertPropertiesQuery.endsWith('VALUES ')) {\n return { propertyUids }\n }\n\n if (insertPropertiesQuery.endsWith(', ')) {\n insertPropertiesQuery = insertPropertiesQuery.slice(0, -2) + ';'\n }\n\n await appDb.run(sql.raw(insertPropertiesQuery))\n\n return { propertyUids }\n}\n\nconst saveEasPropertiesToDb: SaveEasPropertiesToDb = (params) => {\n const next = saveEasPropertiesDbChain.then(() => saveEasPropertiesToDbBody(params))\n saveEasPropertiesDbChain = next.then(\n () => undefined,\n () => undefined,\n )\n return next\n}\n\nconst getRelatedSeedsAndVersions = async () => {\n const queryClient = BaseQueryClient.getQueryClient()\n const easClient = BaseEasClient.getEasClient()\n\n const { itemSeeds } = await easClient.request(GET_SEEDS, {\n where: {\n id: {\n in: Array.from(relatedSeedUids),\n },\n },\n })\n\n await saveEasSeedsToDb({ itemSeeds })\n\n const { itemVersions } = await easClient.request(GET_VERSIONS, {\n where: {\n refUID: {\n in: Array.from(relatedSeedUids),\n },\n },\n })\n\n await saveEasVersionsToDb({ itemVersions })\n\n const relatedVersionUids = itemVersions.map((v) => v.id)\n\n const { itemProperties } = await easClient.request(GET_PROPERTIES, {\n where: {\n refUID: {\n in: relatedVersionUids,\n },\n },\n })\n\n await saveEasPropertiesToDb({\n itemProperties,\n itemSeeds,\n })\n}\n\nexport type SyncFromEasOptions = {\n /** Override addresses to sync. Default: owned + watched from DB. */\n addresses?: string[]\n}\n\n/**\n * Core sync logic: fetches item attestations from EAS for configured models and given addresses,\n * then saves seeds, versions, and properties to the local DB.\n * Uses owned + watched addresses from DB when addresses are not provided.\n */\nexport const runSyncFromEas = async (options?: SyncFromEasOptions): Promise<void> => {\n let addresses = options?.addresses ?? (await getAllAddressesFromDb())\n const additionalGetter = getGetAdditionalSyncAddresses()\n if (additionalGetter) {\n const additional = await additionalGetter()\n if (additional?.length) {\n const seen = new Set(addresses.map((a) => a.toLowerCase()))\n for (const addr of additional) {\n if (addr && !seen.has(addr.toLowerCase())) {\n seen.add(addr.toLowerCase())\n addresses = [...addresses, addr]\n }\n }\n }\n }\n if (!addresses || addresses.length === 0) {\n return\n }\n\n const appDb = BaseDb.getAppDb()\n\n const { schemaStringToModelRecord } = await getModelSchemas()\n\n const modelSchemas = await getModelSchemasFromEas()\n\n const schemaUids: string[] = []\n\n for (const modelSchema of modelSchemas) {\n const foundModel = schemaStringToModelRecord.get(modelSchema.schema)\n\n if (!foundModel) {\n // Skip schemas that don't have a corresponding model in the user's config\n // This can happen with \"bytes32 image\" if there's no Image model defined\n console.warn(\n `[item/events] [syncDbWithEas] Model not found for schema ${modelSchema.schema}, skipping`\n )\n continue\n }\n\n try {\n await appDb\n .insert(modelUids)\n .values({\n modelId: foundModel.id,\n uid: modelSchema.id,\n })\n .onConflictDoNothing()\n } catch (err: unknown) {\n // Model may have been deleted by test teardown or another process; skip to avoid unhandled rejection\n const e = err as { code?: string; rawCode?: number; cause?: { code?: string; rawCode?: number } }\n const code = e?.code ?? e?.rawCode ?? e?.cause?.code ?? e?.cause?.rawCode\n if (code === 'SQLITE_CONSTRAINT_FOREIGNKEY' || code === 787) {\n continue\n }\n throw err\n }\n\n schemaUids.push(modelSchema.id)\n }\n\n // If no schemas were found, skip the rest of the sync process\n // This can happen when models exist but don't have schemas registered in EAS yet\n if (schemaUids.length === 0) {\n return\n }\n\n const itemSeeds = await getSeedsFromSchemaUids({\n schemaUids,\n addresses,\n excludeRevoked: false,\n })\n\n const { seedUids } = await saveEasSeedsToDb({\n itemSeeds,\n })\n\n const itemVersions = await getItemVersionsFromEas({\n seedUids,\n excludeRevoked: false,\n })\n\n const { versionUids } = await saveEasVersionsToDb({\n itemVersions,\n })\n\n const rawProperties = await getItemPropertiesFromEas({\n versionUids,\n excludeRevoked: false,\n })\n const itemProperties = pickLatestPropertyAttestationsByRefAndSchema(rawProperties)\n\n await saveEasPropertiesToDb({\n itemProperties,\n itemSeeds,\n })\n\n await getRelatedSeedsAndVersions()\n scheduleBulkFilesDownloadFromEasSync(addresses)\n\n try {\n const itemMod = await import('../../Item/Item')\n await itemMod.Item.rehydrateCachedItemsFromDbAfterEasSync()\n } catch (err) {\n console.warn('[item/events] [syncDbWithEas] rehydrateCachedItemsFromDbAfterEasSync:', err)\n }\n eventEmitter.emit(EAS_SEED_DATA_SYNCED_TO_DB_EVENT)\n}\n\n"],"names":["BaseDb","modelsTable","modelUids","eq","toSnakeCase","seeds","inArray","generateId","escapeSqliteString","versions","sql","camelCase","metadata","and","getPropertyIdForModelAndName","setSchemaUidForSchemaDefinition","parseEasRelationPropertyName","startCase","modelPropertiesToObject","BaseQueryClient","BaseEasClient","GET_SEEDS","GET_VERSIONS","GET_PROPERTIES","getAllAddressesFromDb","getModelSchemasFromEas","getSeedsFromSchemaUids","getItemVersionsFromEas","getItemPropertiesFromEas","pickLatestPropertyAttestationsByRefAndSchema","scheduleBulkFilesDownloadFromEasSync","eventEmitter","EAS_SEED_DATA_SYNCED_TO_DB_EVENT"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants-B5S5JPDK.js","sources":["../../src/Schema/validation.ts","../../src/helpers/property/index.ts","../../src/helpers/relationSeedRef.ts","../../src/db/read/getStorageTransactionIdForSeedUid.ts","../../src/helpers/mediaRef.ts","../../src/helpers/index.ts","../../src/client/constants.ts"],"sourcesContent":["import { Type, TSchema } from '@sinclair/typebox'\nimport { ModelPropertyDataTypes } from '@/helpers/property'\n\n/** Default maximum length for Text properties when not explicitly set. Html holds arbitrary-length content and does not use this limit. */\nexport const DEFAULT_TEXT_MAX_LENGTH = 255\n\n/**\n * Validation rules that can be applied to properties\n * Matches the ValidationRules definition in protocol/schema.json\n */\nexport type ValidationRules = {\n pattern?: string\n minLength?: number\n maxLength?: number\n enum?: any[]\n custom?: string\n [key: string]: any\n}\n\n/**\n * TypeBox schema for ValidationRules\n */\nexport const TValidationRules = Type.Object({\n pattern: Type.Optional(Type.String()),\n minLength: Type.Optional(Type.Integer({ minimum: 0 })),\n maxLength: Type.Optional(Type.Integer({ minimum: 1 })),\n enum: Type.Optional(Type.Array(Type.Any())),\n custom: Type.Optional(Type.String()),\n}, { additionalProperties: true })\n\n/**\n * Validation error structure\n */\nexport type ValidationError = {\n field: string\n message: string\n code: string\n severity: 'error' | 'warning'\n}\n\n/**\n * Validation result\n */\nexport type ValidationResult = {\n isValid: boolean\n errors: ValidationError[]\n warnings?: ValidationError[]\n}\n\n","import { Static, Type } from '@sinclair/typebox'\nimport { PropertyDataType, PropertyDefs, StorageType } from '@/types'\nimport { TValidationRules } from '@/Schema/validation'\n\n/**\n * Enum for all property data types\n */\nexport enum ModelPropertyDataTypes {\n Text = 'Text',\n Number = 'Number',\n List = 'List',\n Relation = 'Relation',\n Image = 'Image',\n Json = 'Json',\n File = 'File',\n Boolean = 'Boolean',\n Date = 'Date',\n Html = 'Html',\n}\n\n/** Known data types in lowercase for normalization */\nconst DATA_TYPE_LOWER_MAP: Record<string, string> = {\n text: 'Text',\n string: 'Text', // JSON Schema convention\n number: 'Number',\n list: 'List',\n relation: 'Relation',\n image: 'Image',\n json: 'Json',\n file: 'File',\n boolean: 'Boolean',\n date: 'Date',\n html: 'Html',\n blob: 'Blob',\n}\n\n/**\n * Normalize dataType to canonical PascalCase form.\n * Accepts lowercase (e.g. 'text') or mixed case and returns 'Text'.\n * Use when ingesting dataType from JSON schema files.\n */\nexport function normalizeDataType(value: string | undefined): string {\n if (!value || typeof value !== 'string') return value ?? ''\n const lower = value.toLowerCase().trim()\n return DATA_TYPE_LOWER_MAP[lower] ?? value.charAt(0).toUpperCase() + value.slice(1).toLowerCase()\n}\n\nexport const TPropertyDataType = Type.Union([\n Type.Literal(ModelPropertyDataTypes.Text),\n Type.Literal(ModelPropertyDataTypes.Number),\n Type.Literal(ModelPropertyDataTypes.List),\n Type.Literal(ModelPropertyDataTypes.Relation),\n Type.Literal(ModelPropertyDataTypes.Image),\n Type.Literal(ModelPropertyDataTypes.Json),\n Type.Literal(ModelPropertyDataTypes.File),\n Type.Literal(ModelPropertyDataTypes.Boolean),\n Type.Literal(ModelPropertyDataTypes.Date),\n Type.Literal(ModelPropertyDataTypes.Html),\n])\n\nexport const TStorageType = Type.Union([\n Type.Literal('ItemStorage'), // Looks for a storageTransactionId property on the item\n Type.Literal('PropertyStorage'), // Looks for a storageTransactionId value on the property\n])\n\n/** How publish handles `data:image/*` URIs inside Html storage. Only applies when `dataType === 'Html'`. */\nexport const THtmlEmbeddedDataUriPolicy = Type.Union([\n Type.Literal('materialize'),\n Type.Literal('preserve'),\n])\nexport type HtmlEmbeddedDataUriPolicy = Static<typeof THtmlEmbeddedDataUriPolicy>\n\nexport const TProperty = Type.Object({\n id: Type.Optional(Type.String()), // schemaFileId (string) - public ID\n _dbId: Type.Optional(Type.Number()), // Database integer ID - internal only\n name: Type.Optional(Type.String()),\n dataType: TPropertyDataType,\n ref: Type.Optional(Type.String()),\n // modelId: string (modelFileId) in code; number only for DB foreign keys when resolved\n modelId: Type.Optional(Type.Union([Type.Number(), Type.String()])),\n modelName: Type.Optional(Type.String()),\n refModelId: Type.Optional(Type.Number()),\n refModelName: Type.Optional(Type.String()),\n refValueType: Type.Optional(TPropertyDataType),\n storageType: Type.Optional(TStorageType),\n localStorageDir: Type.Optional(Type.String()),\n filenameSuffix: Type.Optional(Type.String()),\n validation: Type.Optional(TValidationRules),\n required: Type.Optional(Type.Boolean()),\n /** When set on an Html property: `materialize` uploads embedded images as Image seeds and rewrites src; `preserve` leaves data URIs. */\n htmlEmbeddedDataUriPolicy: Type.Optional(THtmlEmbeddedDataUriPolicy),\n})\n\nexport const TPropertyConstructor = Type.Function(\n [\n Type.Optional(Type.Union([Type.String(), TStorageType, Type.Undefined()])),\n Type.Optional(Type.Union([Type.String(), TPropertyDataType])),\n Type.Optional(Type.Union([Type.String(), Type.Boolean()])),\n ],\n TProperty,\n)\n\nexport const TPropertyDefs = Type.Record(\n TPropertyDataType,\n TPropertyConstructor,\n)\n\nfunction htmlPropertyFactory(opts?: { htmlEmbeddedDataUriPolicy?: HtmlEmbeddedDataUriPolicy }) {\n return {\n dataType: ModelPropertyDataTypes.Html,\n ...(opts?.htmlEmbeddedDataUriPolicy\n ? { htmlEmbeddedDataUriPolicy: opts.htmlEmbeddedDataUriPolicy }\n : {}),\n } satisfies Static<typeof TProperty>\n}\n\nexport const Property = {\n Text: (\n storageType?: StorageType,\n localStorageDir?: string,\n filenameSuffix?: string,\n ) => ({\n dataType: ModelPropertyDataTypes.Text,\n storageType,\n localStorageDir,\n filenameSuffix,\n TObject: Type.String(),\n }),\n Json: () => ({ dataType: ModelPropertyDataTypes.Json }),\n File: () => ({ dataType: ModelPropertyDataTypes.File }),\n Number: () => ({ dataType: ModelPropertyDataTypes.Number }),\n /**\n * Create a List property. refValueType is required; ref is required only for list of relations.\n * @param refValueType - Element type: 'Text', 'Number', 'Relation', etc.\n * @param ref - Model name when refValueType is 'Relation' (optional for primitives)\n * @example List('Text') - list of strings\n * @example List('Relation', 'Tag') - list of relations to Tag model\n */\n List: (refValueType: PropertyDataType, ref?: string) => ({\n dataType: ModelPropertyDataTypes.List,\n ref,\n refValueType,\n }),\n Relation: (ref?: string, refValueType?: PropertyDataType, required?: boolean) => ({\n dataType: ModelPropertyDataTypes.Relation,\n ref,\n refValueType,\n required,\n }),\n Image: () => ({ dataType: ModelPropertyDataTypes.Image }),\n Boolean: () => ({ dataType: ModelPropertyDataTypes.Boolean }),\n Date: () => ({ dataType: ModelPropertyDataTypes.Date }),\n Html: htmlPropertyFactory,\n /** `Html` opts are not representable in `TPropertyConstructor`; keep runtime shape via double assert. */\n} as unknown as PropertyDefs\n\nexport const PropertyMetadataKey = Symbol('property')\n\nexport const PropertyConstructor = (propertyType: Static<typeof TProperty>) => {\n return function (parentClassPrototype: any, propertyKey: string) {\n const existingProperties =\n Reflect.getMetadata(PropertyMetadataKey, parentClassPrototype) || []\n\n existingProperties.push({ propertyKey, propertyType })\n Reflect.defineMetadata(\n PropertyMetadataKey,\n existingProperties,\n parentClassPrototype,\n )\n }\n}\n\nexport const Text = (\n storageType?: StorageType,\n srcDir?: string,\n filenameSuffix?: string,\n) => PropertyConstructor(Property.Text(storageType, srcDir, filenameSuffix))\nexport const Number = () => PropertyConstructor(Property.Number())\nexport const Json = () => PropertyConstructor(Property.Json())\nexport const File = () => PropertyConstructor(Property.File())\nexport const Image = () => PropertyConstructor(Property.Image())\nexport const Relation = (ref: string, refValueType?: PropertyDataType, required?: boolean) =>\n PropertyConstructor(Property.Relation(ref, refValueType, required)) // Adjust for actual relation type\nexport const List = (refValueType: PropertyDataType, ref?: string) =>\n PropertyConstructor(Property.List(refValueType, ref))\nexport const Boolean = () => PropertyConstructor(Property.Boolean())\nexport const Date = () => PropertyConstructor(Property.Date())\nexport const Html = (opts?: { htmlEmbeddedDataUriPolicy?: HtmlEmbeddedDataUriPolicy }) =>\n PropertyConstructor(htmlPropertyFactory(opts))\n","/** Same rules as getCorrectId in helpers/index (avoid barrel circular import). */\nfunction parseLocalIdOrUid(localIdOrUid: string): { localId?: string; uid?: string } {\n const id = { localId: undefined as string | undefined, uid: undefined as string | undefined }\n if (!localIdOrUid) return id\n if (localIdOrUid.length === 10) {\n id.localId = localIdOrUid\n }\n if (localIdOrUid.startsWith('0x') && localIdOrUid.length === 66) {\n id.uid = localIdOrUid\n }\n return id\n}\n\n/** Relation/image refs may be string ids or `{ seedLocalId?, seedUid? }`. */\nexport function normalizeRelationPropertyValue(value: unknown): string | undefined {\n if (value == null) return undefined\n if (typeof value === 'string') {\n const t = value.trim()\n return t !== '' ? t : undefined\n }\n if (typeof value === 'object' && value !== null) {\n const o = value as { seedLocalId?: string; seedUid?: string }\n if (typeof o.seedLocalId === 'string' && o.seedLocalId.trim() !== '') {\n return o.seedLocalId.trim()\n }\n if (typeof o.seedUid === 'string' && o.seedUid.trim() !== '') {\n return o.seedUid.trim()\n }\n }\n return undefined\n}\n\n/** getCorrectId only accepts 10-char local ids and 0x66 uids; local seed refs can be up to 21 chars. */\nconst LOCAL_SEED_REF = /^[a-zA-Z0-9_-]{10,21}$/\n\n/** Resolve seed ids from a single string (context propertyValue or DB row). */\nexport function resolveSeedIdsFromRefString(s: string): { seedLocalId?: string; seedUid?: string } {\n const fromCorrect = parseLocalIdOrUid(s)\n if (fromCorrect.localId || fromCorrect.uid) {\n return { seedLocalId: fromCorrect.localId, seedUid: fromCorrect.uid }\n }\n if (LOCAL_SEED_REF.test(s) && !s.startsWith('0x')) {\n return { seedLocalId: s }\n }\n return {}\n}\n","import { metadata } from '@/seedSchema'\nimport { and, eq } from 'drizzle-orm'\nimport { BaseDb } from '@/db/Db/BaseDb'\n\nconst seedUidToStorageTransactionId = new Map<string, string>()\n\ntype GetStorageTransactionIdResults = {\n storageTransactionId: string\n}[]\n\nexport const getStorageTransactionIdForSeedUid = async (\n seedUid: string,\n): Promise<string | undefined> => {\n if (seedUidToStorageTransactionId.has(seedUid)) {\n return seedUidToStorageTransactionId.get(seedUid)\n }\n\n const appDb = BaseDb.getAppDb()\n\n const results = (await appDb\n .select({\n storageTransactionId: metadata.propertyValue,\n })\n .from(metadata)\n .where(\n and(\n eq(metadata.seedUid, seedUid),\n eq(metadata.propertyName, 'storageTransactionId'),\n ),\n )) as GetStorageTransactionIdResults\n\n if (!results || results.length === 0) {\n return\n }\n\n seedUidToStorageTransactionId.set(seedUid, results[0].storageTransactionId)\n return results[0].storageTransactionId\n} ","import debug from 'debug'\n\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { getStorageTransactionIdForSeedUid } from '@/db/read/getStorageTransactionIdForSeedUid'\nimport { BaseArweaveClient } from './ArweaveClient/BaseArweaveClient'\nimport { BaseFileManager } from './FileManager/BaseFileManager'\nimport {\n normalizeRelationPropertyValue,\n resolveSeedIdsFromRefString,\n} from './relationSeedRef'\n\nconst logger = debug('seedSdk:helpers:mediaRef')\n\n/** Roles for feed/XML field manifests (shared with @seedprotocol/feed and @seedprotocol/react). */\nexport type FeedFieldRole = 'image' | 'file' | 'html' | 'text'\n\nexport type FeedFieldDescriptor = {\n role: FeedFieldRole\n /** When heuristics are wrong, force how `classifyMediaRef` interprets the raw string. */\n treatAs?: 'arweaveTx' | 'seedUid' | 'url'\n}\n\nexport type FeedFieldManifest = Record<string, FeedFieldDescriptor>\n\nexport type ClassifyMediaRefOptions = {\n treatAs?: FeedFieldDescriptor['treatAs']\n}\n\nexport type MediaRefClassification =\n | { kind: 'empty' }\n | { kind: 'url'; href: string }\n | { kind: 'seedUid'; uid: string }\n | { kind: 'seedLocalId'; localId: string }\n | { kind: 'arweaveTxId'; txId: string }\n | { kind: 'unknown'; raw: string }\n\nexport type ResolveMediaRefResult =\n | { status: 'ready'; href: string; source: 'direct' | 'gateway' | 'localBlob' }\n | { status: 'empty' }\n | {\n status: 'unresolved'\n reason: string\n classification: MediaRefClassification\n }\n\nexport type ResolveMediaRefOptions = ClassifyMediaRefOptions\n\n/** Typical Arweave transaction id: 43 URL-safe base64 characters. */\nconst ARWEAVE_TX_ID = /^[a-zA-Z0-9_-]{43}$/\n\nfunction trimOrEmpty(raw: string | undefined | null): string {\n if (raw == null) return ''\n return typeof raw === 'string' ? raw.trim() : String(raw).trim()\n}\n\nfunction coalesceStringField(item: Record<string, unknown>, key: string): string {\n const v = item[key]\n if (v == null) return ''\n if (typeof v === 'string') return v.trim()\n if (typeof v === 'number' || typeof v === 'boolean') return String(v)\n return ''\n}\n\n/**\n * Try JSON relation payloads and plain relation id strings.\n */\nfunction unwrapRelationString(raw: string): string {\n const t = raw.trim()\n if (!t) return t\n try {\n const parsed = JSON.parse(t) as unknown\n const fromObj = normalizeRelationPropertyValue(parsed)\n if (fromObj) return fromObj\n } catch {\n // not JSON\n }\n return t\n}\n\n/**\n * Pure, sync classification of a media-related string from feeds or XML.\n */\nexport function classifyMediaRef(\n raw: string,\n options?: ClassifyMediaRefOptions,\n): MediaRefClassification {\n const s = trimOrEmpty(raw)\n if (!s) {\n return { kind: 'empty' }\n }\n\n const treatAs = options?.treatAs\n if (treatAs === 'url') {\n return { kind: 'url', href: s }\n }\n if (treatAs === 'arweaveTx') {\n return { kind: 'arweaveTxId', txId: s }\n }\n if (treatAs === 'seedUid') {\n if (s.startsWith('0x') && s.length === 66) {\n return { kind: 'seedUid', uid: s }\n }\n return { kind: 'unknown', raw: s }\n }\n\n if (s.startsWith('http://') || s.startsWith('https://') || s.startsWith('blob:') || s.startsWith('data:')) {\n return { kind: 'url', href: s }\n }\n\n const unwrapped = unwrapRelationString(s)\n const ids = resolveSeedIdsFromRefString(unwrapped)\n if (ids.seedUid) {\n return { kind: 'seedUid', uid: ids.seedUid }\n }\n if (ids.seedLocalId) {\n return { kind: 'seedLocalId', localId: ids.seedLocalId }\n }\n\n if (unwrapped.startsWith('0x') && unwrapped.length === 66) {\n return { kind: 'seedUid', uid: unwrapped }\n }\n\n if (ARWEAVE_TX_ID.test(unwrapped) && !unwrapped.startsWith('0x')) {\n return { kind: 'arweaveTxId', txId: unwrapped }\n }\n\n return { kind: 'unknown', raw: s }\n}\n\n/**\n * Same as convertTxIdToImage but local to this module to avoid circular imports with helpers/index.\n */\nasync function tryLocalBlobUrlFromTxId(txId: string): Promise<string | undefined> {\n const imageFilePath = BaseFileManager.getFilesPath('images', txId)\n const fileExists = await BaseFileManager.pathExists(imageFilePath)\n if (!fileExists) {\n logger(`[tryLocalBlobUrlFromTxId] ${imageFilePath} does not exist`)\n return undefined\n }\n const buffer = await BaseFileManager.readFileAsBuffer(imageFilePath)\n\n let arrayBuffer: ArrayBuffer\n if (buffer instanceof Blob) {\n arrayBuffer = await buffer.arrayBuffer()\n } else if (buffer instanceof ArrayBuffer) {\n arrayBuffer = buffer\n } else {\n const sliced = buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength)\n if (sliced instanceof SharedArrayBuffer) {\n const uint8Array = new Uint8Array(sliced)\n arrayBuffer = uint8Array.buffer.slice(0) as unknown as ArrayBuffer\n } else {\n arrayBuffer = sliced as ArrayBuffer\n }\n }\n\n const uint = new Uint8Array(arrayBuffer)\n const imageBlob = new Blob([uint])\n return URL.createObjectURL(imageBlob)\n}\n\nasync function resolveTxId(txId: string): Promise<ResolveMediaRefResult> {\n const local = await tryLocalBlobUrlFromTxId(txId)\n if (local) {\n return { status: 'ready', href: local, source: 'localBlob' }\n }\n return {\n status: 'ready',\n href: BaseArweaveClient.getRawUrl(txId),\n source: 'gateway',\n }\n}\n\n/**\n * Resolve a classified media reference to a display URL (https/blob/data), using local files when present.\n */\nexport async function resolveMediaRef(\n raw: string,\n options?: ResolveMediaRefOptions,\n): Promise<ResolveMediaRefResult> {\n const classification = classifyMediaRef(raw, options)\n\n switch (classification.kind) {\n case 'empty':\n return { status: 'empty' }\n case 'url':\n return {\n status: 'ready',\n href: classification.href,\n source: 'direct',\n }\n case 'seedLocalId':\n return {\n status: 'unresolved',\n reason: 'seed_local_id_not_portable',\n classification,\n }\n case 'unknown':\n return {\n status: 'unresolved',\n reason: 'unknown_ref',\n classification,\n }\n case 'arweaveTxId':\n return resolveTxId(classification.txId)\n case 'seedUid': {\n const appDb = BaseDb.getAppDb()\n if (!appDb) {\n return {\n status: 'unresolved',\n reason: 'seed_uid_requires_app_db',\n classification,\n }\n }\n const storageTransactionId = await getStorageTransactionIdForSeedUid(classification.uid)\n if (!storageTransactionId) {\n return {\n status: 'unresolved',\n reason: 'seed_uid_no_storage_transaction',\n classification,\n }\n }\n return resolveTxId(storageTransactionId)\n }\n default:\n return {\n status: 'unresolved',\n reason: 'unknown_ref',\n classification,\n }\n }\n}\n\nexport type NormalizedMediaField = {\n role: 'image' | 'file'\n raw: string\n classification: MediaRefClassification\n}\n\nexport type NormalizedHtmlField = {\n role: 'html'\n raw: string\n}\n\nexport type NormalizedTextField = {\n role: 'text'\n raw: string\n}\n\nexport type NormalizedFeedFieldValue =\n | NormalizedMediaField\n | NormalizedHtmlField\n | NormalizedTextField\n\n/**\n * Read a string field from a parsed item, trying camelCase and snake_case keys.\n */\nexport function getFeedItemStringField(item: Record<string, unknown>, key: string): string {\n const direct = coalesceStringField(item, key)\n if (direct) return direct\n const snake = key.replace(/[A-Z]/g, (l) => `_${l.toLowerCase()}`)\n if (snake !== key) {\n const alt = coalesceStringField(item, snake)\n if (alt) return alt\n }\n const parts = key.split('_')\n if (parts.length > 1) {\n const camel = parts[0] + parts.slice(1).map((p) => p.charAt(0).toUpperCase() + p.slice(1)).join('')\n const alt2 = coalesceStringField(item, camel)\n if (alt2) return alt2\n }\n return ''\n}\n\n/**\n * Apply a field manifest to a plain feed item: classify media/file fields; pass through html/text.\n */\nexport function normalizeFeedItemFields(\n item: Record<string, unknown>,\n manifest: FeedFieldManifest,\n): Record<string, NormalizedFeedFieldValue | undefined> {\n const out: Record<string, NormalizedFeedFieldValue | undefined> = {}\n for (const [fieldKey, descriptor] of Object.entries(manifest)) {\n const raw = getFeedItemStringField(item, fieldKey)\n if (!raw) {\n out[fieldKey] = undefined\n continue\n }\n if (descriptor.role === 'html') {\n out[fieldKey] = { role: 'html', raw }\n continue\n }\n if (descriptor.role === 'text') {\n out[fieldKey] = { role: 'text', raw }\n continue\n }\n const classification = classifyMediaRef(raw, { treatAs: descriptor.treatAs })\n out[fieldKey] = {\n role: descriptor.role,\n raw,\n classification,\n }\n }\n return out\n}\n","import debug from 'debug'\nimport { GetCorrectId } from '@/types/helpers'\nimport { GetCorrectIdReturn } from '@/types/helpers'\nimport { BaseFileManager } from './FileManager/BaseFileManager'\nimport {\n BaseArweaveClient,\n ensureReadGatewaySelected,\n resolveSeedGatewayEndpoints,\n getReadGatewayHostsForConfig,\n seedGatewayConfigFromSeedConfig,\n getResolvedSeedGatewayEndpoints,\n setResolvedSeedGatewayEndpoints,\n} from '@seedprotocol/arweave'\nimport { BaseEasClient, BaseQueryClient } from '@seedprotocol/eas'\n\nexport {\n BaseArweaveClient,\n ensureReadGatewaySelected,\n resolveSeedGatewayEndpoints,\n getReadGatewayHostsForConfig,\n seedGatewayConfigFromSeedConfig,\n getResolvedSeedGatewayEndpoints,\n setResolvedSeedGatewayEndpoints,\n BaseEasClient,\n BaseQueryClient,\n}\n\n// Exported object keeps external facade bindings live for Rollup. Dynamic\n// `await import('@/helpers')` otherwise emits a frozen module-namespace that\n// can reference tree-shaken imports → ReferenceError in the browser.\nexport const __rollupExternalFacadeInterop = {\n BaseArweaveClient,\n BaseEasClient,\n BaseQueryClient,\n ensureReadGatewaySelected,\n resolveSeedGatewayEndpoints,\n getReadGatewayHostsForConfig,\n seedGatewayConfigFromSeedConfig,\n getResolvedSeedGatewayEndpoints,\n setResolvedSeedGatewayEndpoints,\n} as const\n\nexport * from './FileManager/BaseFileManager'\nexport { waitForEntityIdle } from './waitForEntityIdle'\nexport * from './publishConfig'\nexport * from './metadataPropertyNames'\nexport * from './relationSeedRef'\nexport * from './mediaRef'\nexport { generateId } from './generateId'\nconst logger = debug('seedSdk:shared:helpers')\n\nexport const toSnakeCase = (str: string) => {\n return str.replace(/([a-z])([A-Z])/g, '$1_$2').toLowerCase()\n}\n\nexport const identifyString = (str: string) => {\n try {\n JSON.parse(str)\n return 'json'\n } catch (e) {\n // Not JSON\n }\n\n if (!str) {\n return\n }\n\n if (str.trim().startsWith('<') && str.trim().endsWith('>')) {\n return 'html'\n }\n\n // Simple markdown checks (very naive)\n if (/^#{1,6}\\s|^-{3,}|\\*{3,}|^-{1,2}\\s|\\*\\s/.test(str)) {\n return 'markdown'\n }\n\n if (/^data:image\\/[a-zA-Z]+;base64,[A-Za-z0-9+/]+={0,2}$/.test(str)) {\n return 'base64'\n }\n\n // Default to plain text if unsure\n return 'text'\n}\n\nexport const getMimeType = (base64: string) => {\n if (!base64) {\n return null\n }\n const result = base64.match(/^data:([a-zA-Z0-9]+\\/[a-zA-Z0-9-.+]+).*,/)\n\n if (result && result.length > 1) {\n return result[1]\n } else {\n return null // MIME type could not be determined\n }\n}\n\nexport const getCorrectId: GetCorrectId = (localIdOrUid: string) => {\n const id: GetCorrectIdReturn = {\n localId: undefined,\n uid: undefined,\n }\n if (!localIdOrUid) {\n return id\n }\n if (localIdOrUid.length === 10) {\n id.localId = localIdOrUid\n }\n if (localIdOrUid.startsWith('0x') && localIdOrUid.length === 66) {\n id.uid = localIdOrUid\n }\n return id\n}\n\nexport const getDataTypeFromString = (\n data: string,\n): 'imageBase64' | 'base64' | 'url' | null => {\n const nonImageBase64Regex =\n /^(?!data:image\\/(?:jpeg|png|gif|bmp|webp);base64,)[A-Za-z0-9+/=]+$/\n\n if (nonImageBase64Regex.test(data)) {\n return 'base64'\n }\n\n // Regular expression for base64 (simple version, checking for base64 format)\n const imageBase64Regex = /^data:image\\/[a-zA-Z]+;base64,[A-Za-z0-9+/]+={0,2}$/\n\n if (imageBase64Regex.test(data)) {\n return 'imageBase64'\n }\n\n // Blob URLs are fetchable but session-scoped; recognize them as url type\n if (data.startsWith('blob:')) {\n return 'url'\n }\n\n // Regular expression for URL (simple version, checking for common URL format)\n const urlRegex =\n /^(http:\\/\\/www\\.|https:\\/\\/www\\.|http:\\/\\/|https:\\/\\/)?[a-z0-9]+([\\-\\.]{1}[a-z0-9]+)*\\.[a-z]{2,5}(:[0-9]{1,5})?(\\/.*)?$/\n\n if (urlRegex.test(data)) {\n return 'url'\n }\n\n return null\n}\n\nexport const convertTxIdToImage = async (\n txId: string,\n): Promise<string | undefined> => {\n const imageFilePath = BaseFileManager.getFilesPath('images', txId)\n const fileExists = await BaseFileManager.pathExists(imageFilePath)\n if (!fileExists) {\n logger(`[ItemView] [updateImage] ${imageFilePath} does not exist`)\n return\n }\n const buffer = await BaseFileManager.readFileAsBuffer(imageFilePath)\n\n // Convert Blob to ArrayBuffer if needed, or use Buffer directly\n let arrayBuffer: ArrayBuffer\n if (buffer instanceof Blob) {\n arrayBuffer = await buffer.arrayBuffer()\n } else if (buffer instanceof ArrayBuffer) {\n arrayBuffer = buffer\n } else {\n // Node.js Buffer\n const sliced = buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength)\n // Handle SharedArrayBuffer case by creating a new ArrayBuffer\n if (sliced instanceof SharedArrayBuffer) {\n const uint8Array = new Uint8Array(sliced)\n arrayBuffer = uint8Array.buffer.slice(0) as unknown as ArrayBuffer\n } else {\n arrayBuffer = sliced as ArrayBuffer\n }\n }\n\n const uint = new Uint8Array(arrayBuffer)\n\n const imageBlob = new Blob([uint])\n\n return URL.createObjectURL(imageBlob)\n}\n\n/**\n * Constructs an Arweave URL for a storage transaction ID\n * @param storageTransactionId - The Arweave transaction ID\n * @returns The full URL to access the transaction data on Arweave (e.g., https://arweave.net/raw/{transactionId})\n * @deprecated Use BaseArweaveClient.getRawUrl() instead for better consistency and testability\n */\nexport const getArweaveUrlForTransaction = (storageTransactionId: string): string => {\n return BaseArweaveClient.getRawUrl(storageTransactionId)\n}\n\nexport const getExecutionTime = async (task: (...args: any[]) => Promise<any>, args: any[]) => {\n const start = Date.now()\n await task(...args)\n return Date.now() - start\n}\n\nexport const capitalizeFirstLetter = (string: string) =>\n string.charAt(0).toUpperCase() + string.slice(1)\n\nexport const parseEasRelationPropertyName = (easPropertyName: string) => {\n // Split the input string on the first underscore\n const [singularProperty, modelName, idSegment] = easPropertyName.split('_')\n\n // If there are any other parts, assume it is a list (e.g., has 'ids' or other suffix)\n const isList = idSegment === 'ids'\n\n // Create the final property name by pluralizing the singular part\n const propertyName = singularProperty.endsWith('s')\n ? singularProperty\n : singularProperty + 's'\n\n return {\n propertyName, // Plural form of the property name\n modelName, // Model name extracted from the second part\n isList, // True if the property is a list (e.g., 'ids' is present)\n }\n}\n\n\nexport const isBinary = (arrayBuffer: ArrayBuffer): boolean => {\n const view = new Uint8Array(arrayBuffer);\n\n let nonTextCount = 0;\n const threshold = 0.2; // Adjust as needed (e.g., 20% non-text implies binary)\n\n for (let i = 0; i < view.length; i++) {\n const byte = view[i];\n\n // ASCII printable characters (32-126) and common whitespace (9, 10, 13)\n if (\n (byte >= 32 && byte <= 126) || // Printable ASCII\n byte === 9 || byte === 10 || byte === 13 // Tab, LF, CR\n ) {\n continue;\n }\n\n nonTextCount++;\n if (nonTextCount / view.length > threshold) {\n return true; // More than threshold are non-text bytes\n }\n }\n\n return false; // Fewer than threshold are non-text bytes\n}\n","const ENV = (typeof process !== 'undefined' && process.env) \n ? process.env \n : (typeof window !== 'undefined' && (window as any).env) \n ? (window as any).env \n : {};\n\nconst MACHINE_ID_SCOPE = '@seedSdk'\n\nexport enum MachineIds {\n CLIENT_MANAGER = `${MACHINE_ID_SCOPE}/clientManager`,\n EAS_SYNC_MANAGER = `${MACHINE_ID_SCOPE}/easSyncManager`,\n GLOBAL = `${MACHINE_ID_SCOPE}/global`,\n INTERNAL = `${MACHINE_ID_SCOPE}/internal`,\n EAS = `${MACHINE_ID_SCOPE}/eas`,\n ITEM = `${MACHINE_ID_SCOPE}/item`,\n ALL_ITEMS = `${MACHINE_ID_SCOPE}/allItems`,\n MODEL = `${MACHINE_ID_SCOPE}/model`,\n FILE_SYSTEM = `${MACHINE_ID_SCOPE}/fileSystem`,\n}\n\nconst { INTERNAL, GLOBAL, EAS, MODEL } = MachineIds\n\nexport enum ClientManagerState {\n UNINITIALIZED = 'uninitialized',\n PLATFORM_CLASSES_INIT = 'platformClassesInit',\n FILE_SYSTEM_INIT = 'fileSystemInit',\n DB_INIT = 'dbInit',\n SAVE_CONFIG = 'saveConfig',\n ADD_MODELS_TO_STORE = 'addModelsToStore',\n ADD_MODELS_TO_DB = 'addModelsToDb',\n PROCESS_SCHEMA_FILES = 'processSchemaFiles',\n IDLE = 'idle',\n}\n\nexport enum ClientManagerEvents {\n UPDATE_CONTEXT = 'updateContext',\n PLATFORM_CLASSES_READY = 'platformClassesReady',\n FILE_SYSTEM_READY = 'fileSystemReady',\n DB_READY = 'dbReady',\n SAVE_CONFIG_SUCCESS = 'saveConfigSuccess',\n SAVE_APP_STATE_SUCCESS = 'saveAppStateSuccess',\n SET_ADDRESSES = 'setAddresses',\n ADD_MODELS_TO_STORE_SUCCESS = 'addModelsToStoreSuccess',\n ADD_MODELS_TO_DB_SUCCESS = 'addModelsToDbSuccess',\n PROCESS_SCHEMA_FILES_SUCCESS = 'processSchemaFilesSuccess',\n}\n\nexport enum GlobalState {\n UNINITIALIZED = 'uninitialized',\n INITIALIZING = 'initializing',\n INITIALIZED = 'initialized',\n PUBLISHING_ITEM = 'publishingItem',\n ADDING_MODELS_TO_DB = 'addingModelsToDb',\n}\n\nconst {\n UNINITIALIZED: GLOBAL_UNINITIALIZED,\n INITIALIZING,\n INITIALIZED,\n PUBLISHING_ITEM,\n ADDING_MODELS_TO_DB,\n } = GlobalState\n\nexport enum InternalState {\n IDLE = 'idle',\n INITIALIZING = 'initializing',\n VALIDATING_INPUT = 'validatingInput',\n CONFIGURING_FS = 'configuringFs',\n LOADING_SEED_DB = 'loadingSeedDb',\n SAVING_CONFIG = 'savingConfig',\n LOADING_APP_DB = 'loadingAppDb',\n LOADING_SDK_DB = 'loadingSdkDb',\n}\n\nconst { VALIDATING_INPUT, CONFIGURING_FS, LOADING_SEED_DB, LOADING_APP_DB } =\n InternalState\n\nexport enum PublishMachineStates {\n VALIDATING_ITEM_DATA = 'validatingItemData',\n CREATING_PUBLISH_ATTEMPT = 'creatingPublishAttempt',\n UPLOADING = 'uploading',\n PREPARING_PUBLISH_REQUEST_DATA = 'preparingPublishRequestData',\n PUBLISHING = 'publishing',\n IDLE = 'idle',\n}\n\nexport const INTERNAL_VALIDATING_INPUT_SUCCESS = `${INTERNAL}.${VALIDATING_INPUT}.success`\n\nexport const INTERNAL_CONFIGURING_FS_SUCCESS = `${INTERNAL}.${CONFIGURING_FS}.success`\nexport const INTERNAL_CONFIGURING_FS_FAILURE = `${INTERNAL}.${CONFIGURING_FS}.failure`\n\nexport const INTERNAL_LOADING_SEED_DB_SUCCESS = `${INTERNAL}.${LOADING_SEED_DB}.success`\nexport const INTERNAL_LOADING_SEED_DB_FAILURE = `${INTERNAL}.${LOADING_SEED_DB}.failure`\n\nexport const INTERNAL_LOADING_APP_DB_SUCCESS = `${INTERNAL}.${LOADING_APP_DB}.success`\nexport const INTERNAL_LOADING_APP_DB_FAILURE = `${INTERNAL}.${LOADING_APP_DB}.failure`\n\nexport const INTERNAL_SAVING_CONFIG_SUCCESS = `${INTERNAL}.savingConfig.success`\nexport const INTERNAL_SAVING_CONFIG_FAILURE = `${INTERNAL}.savingConfig.failure`\n\nexport const GLOBAL_GETTING_SEED_CLASS_SUCCESS = `${GLOBAL}.${PUBLISHING_ITEM}.success`\nexport const GLOBAL_INITIALIZING_SEND_CONFIG = `${GLOBAL}.${INITIALIZING}.sendConfig`\nexport const GLOBAL_INITIALIZING_INTERNAL_SERVICE_READY = `${GLOBAL}.${INITIALIZING}.internalServiceReady`\nexport const GLOBAL_INITIALIZING_CREATE_ALL_ITEMS_SERVICES = `${GLOBAL}.${INITIALIZING}.createAllItemsServices`\nexport const GLOBAL_ADDING_MODELS_TO_DB_SUCCESS = `${GLOBAL}.${ADDING_MODELS_TO_DB}.success`\n\nexport const CHILD_SNAPSHOT = 'childSnapshot'\n\nexport const INTERNAL_SERVICE_SNAPSHOT = 'internalServiceSnapshot'\n\nexport const BROWSER_FS_TOP_DIR = 'app-files'\n\nexport const EAS_ENDPOINT =\n ENV.NEXT_PUBLIC_EAS_ENDPOINT ||\n ENV.EAS_ENDPOINT ||\n 'https://optimism-sepolia.easscan.org/graphql'\n\n/**\n * @deprecated Use BaseArweaveClient.getHost() instead.\n * This constant is kept for backward compatibility but will be removed in a future version.\n * Migration: import { BaseArweaveClient } from '@/helpers' and use BaseArweaveClient.getHost()\n */\nexport const ARWEAVE_HOST =\n ENV.NEXT_PUBLIC_ARWEAVE_HOST || 'ar.seedprotocol.io'\n\n/**\n * @deprecated Use BaseArweaveClient.getEndpoint() instead.\n * This constant is kept for backward compatibility but will be removed in a future version.\n * Migration: import { BaseArweaveClient } from '@/helpers' and use BaseArweaveClient.getEndpoint()\n */\nexport const ARWEAVE_ENDPOINT = `https://${ARWEAVE_HOST}/graphql`\n\n"],"names":["Date","logger"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"eas-D9b7z2Wn.js","sources":["../../src/eas.ts"],"sourcesContent":["export {\n getItemVersionsFromEas,\n getItemPropertiesFromEas,\n getCanonicalItemPropertiesFromEas,\n getEasSchemaUidBySchemaName,\n getSeedsFromSchemaUids,\n getSeedsBySchemaName,\n getSeedUidsBySchemaName,\n} from '@seedprotocol/eas'\nexport type { Attestation, EASSchema } from '@seedprotocol/eas'\n\nimport { toSnakeCase } from '@/helpers'\nimport { withExcludeRevokedFilter } from '@seedprotocol/eas'\nimport { BaseEasClient } from '@seedprotocol/eas'\nimport { BaseQueryClient } from '@seedprotocol/eas'\nimport { GET_SCHEMAS } from '@seedprotocol/eas'\nimport type { EASSchema } from '@seedprotocol/eas'\n\ntype GetModelSchemasFromEas = () => Promise<EASSchema[]>\n\n/** Stays in SDK: depends on local Model registry. */\nexport const getModelSchemasFromEas: GetModelSchemasFromEas = async () => {\n const queryClient = BaseQueryClient.getQueryClient()\n const easClient = BaseEasClient.getEasClient()\n\n const modelMod = await import('./Model/Model')\n const { Model } = modelMod\n const allModels = await Model.all()\n const modelNames = allModels.map((m) => m.modelName).filter((name): name is string => !!name)\n\n if (modelNames.length === 0) {\n return []\n }\n\n const OR: Record<string, unknown>[] = []\n const hasImageModel = modelNames.includes('Image')\n\n for (const modelName of modelNames) {\n const snake = toSnakeCase(modelName)\n OR.push({\n schema: {\n equals: `bytes32 ${snake}`,\n },\n })\n const altSchema = `bytes32 ${modelName}`\n if (altSchema !== `bytes32 ${snake}`) {\n OR.push({\n schema: {\n equals: altSchema,\n },\n })\n }\n }\n\n if (hasImageModel) {\n OR.push({\n schema: {\n equals: `bytes32 image`,\n },\n })\n }\n\n const modelSchemas = await queryClient.fetchQuery({\n queryKey: [`getSchemasAllModels`],\n queryFn: async () =>\n easClient.request(GET_SCHEMAS, {\n where: {\n OR,\n },\n }),\n })\n\n if (!modelSchemas?.schemas?.length) {\n return []\n }\n\n return modelSchemas.schemas as EASSchema[]\n}\n"],"names":[],"mappings":"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"}