@seedprotocol/publish 0.6.7 → 0.6.9

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 (291) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +64 -24
  3. package/dist/chainConfig-3sSqEVQh.js +1433 -0
  4. package/dist/chainConfig-3sSqEVQh.js.map +1 -0
  5. package/dist/chainConfig-3wlYarAG.js +1433 -0
  6. package/dist/chainConfig-3wlYarAG.js.map +1 -0
  7. package/dist/chainConfig-BRcsMopd.js +1442 -0
  8. package/dist/chainConfig-BRcsMopd.js.map +1 -0
  9. package/dist/chainConfig-BYm5OXpk.js +1433 -0
  10. package/dist/chainConfig-BYm5OXpk.js.map +1 -0
  11. package/dist/chainConfig-CA1Hrrjg.js +1387 -0
  12. package/dist/chainConfig-CA1Hrrjg.js.map +1 -0
  13. package/dist/chainConfig-CYy0XJ0M.js +1283 -0
  14. package/dist/chainConfig-CYy0XJ0M.js.map +1 -0
  15. package/dist/chainConfig-CfVGYAsY.js +1311 -0
  16. package/dist/chainConfig-CfVGYAsY.js.map +1 -0
  17. package/dist/chainConfig-DDA4YmAB.js +1424 -0
  18. package/dist/chainConfig-DDA4YmAB.js.map +1 -0
  19. package/dist/config-CPBd5C_b.js +1201 -0
  20. package/dist/config-CPBd5C_b.js.map +1 -0
  21. package/dist/config-DkIapO94.js +955 -0
  22. package/dist/config-DkIapO94.js.map +1 -0
  23. package/dist/config-EQZZNH9H.js +955 -0
  24. package/dist/config-EQZZNH9H.js.map +1 -0
  25. package/dist/config.d.ts +85 -13
  26. package/dist/config.d.ts.map +1 -1
  27. package/dist/ensureAutomationSessionKey-BMHLKfjj.js +85 -0
  28. package/dist/ensureAutomationSessionKey-BMHLKfjj.js.map +1 -0
  29. package/dist/ensureAutomationSessionKey-BZ9_3FMW.js +86 -0
  30. package/dist/ensureAutomationSessionKey-BZ9_3FMW.js.map +1 -0
  31. package/dist/ensureAutomationSessionKey-Bw74ZSGI.js +85 -0
  32. package/dist/ensureAutomationSessionKey-Bw74ZSGI.js.map +1 -0
  33. package/dist/ensureAutomationSessionKey-C8D7BFjU.js +85 -0
  34. package/dist/ensureAutomationSessionKey-C8D7BFjU.js.map +1 -0
  35. package/dist/ensureAutomationSessionKey-CClLVX2w.js +85 -0
  36. package/dist/ensureAutomationSessionKey-CClLVX2w.js.map +1 -0
  37. package/dist/ensureAutomationSessionKey-CNNN1jBQ.js +85 -0
  38. package/dist/ensureAutomationSessionKey-CNNN1jBQ.js.map +1 -0
  39. package/dist/ensureAutomationSessionKey-CeUbjcCl.js +85 -0
  40. package/dist/ensureAutomationSessionKey-CeUbjcCl.js.map +1 -0
  41. package/dist/ensureAutomationSessionKey-D8Gki6U6.js +85 -0
  42. package/dist/ensureAutomationSessionKey-D8Gki6U6.js.map +1 -0
  43. package/dist/ensureAutomationSessionKey-DEH7nwUc.js +86 -0
  44. package/dist/ensureAutomationSessionKey-DEH7nwUc.js.map +1 -0
  45. package/dist/ensureAutomationSessionKey-Dhvbii2M.js +86 -0
  46. package/dist/ensureAutomationSessionKey-Dhvbii2M.js.map +1 -0
  47. package/dist/ensureAutomationSessionKey-Dyfk8qVp.js +85 -0
  48. package/dist/ensureAutomationSessionKey-Dyfk8qVp.js.map +1 -0
  49. package/dist/ensureModularPublishBootstrap-5HJDqJJM.js +24 -0
  50. package/dist/ensureModularPublishBootstrap-5HJDqJJM.js.map +1 -0
  51. package/dist/ensureModularPublishBootstrap-BW8jKN_A.js +24 -0
  52. package/dist/ensureModularPublishBootstrap-BW8jKN_A.js.map +1 -0
  53. package/dist/ensureModularPublishBootstrap-BhYNmLzT.js +24 -0
  54. package/dist/ensureModularPublishBootstrap-BhYNmLzT.js.map +1 -0
  55. package/dist/ensureModularPublishBootstrap-Bsw1xSCt.js +24 -0
  56. package/dist/ensureModularPublishBootstrap-Bsw1xSCt.js.map +1 -0
  57. package/dist/ensureModularPublishBootstrap-Btih5xbB.js +129 -0
  58. package/dist/ensureModularPublishBootstrap-Btih5xbB.js.map +1 -0
  59. package/dist/ensureModularPublishBootstrap-CI4U08Gc.js +129 -0
  60. package/dist/ensureModularPublishBootstrap-CI4U08Gc.js.map +1 -0
  61. package/dist/ensureModularPublishBootstrap-CcU-hXll.js +128 -0
  62. package/dist/ensureModularPublishBootstrap-CcU-hXll.js.map +1 -0
  63. package/dist/ensureModularPublishBootstrap-CdrykHAi.js +24 -0
  64. package/dist/ensureModularPublishBootstrap-CdrykHAi.js.map +1 -0
  65. package/dist/ensureModularPublishBootstrap-DGBKVGg5.js +24 -0
  66. package/dist/ensureModularPublishBootstrap-DGBKVGg5.js.map +1 -0
  67. package/dist/ensureModularPublishBootstrap-DaREOqSc.js +129 -0
  68. package/dist/ensureModularPublishBootstrap-DaREOqSc.js.map +1 -0
  69. package/dist/ensureModularPublishBootstrap-DxIG-LUP.js +24 -0
  70. package/dist/ensureModularPublishBootstrap-DxIG-LUP.js.map +1 -0
  71. package/dist/ensureSmartWalletThenPublish-BSYzckyS.js +49 -0
  72. package/dist/ensureSmartWalletThenPublish-BSYzckyS.js.map +1 -0
  73. package/dist/ensureSmartWalletThenPublish-Bf8FN1un.js +49 -0
  74. package/dist/ensureSmartWalletThenPublish-Bf8FN1un.js.map +1 -0
  75. package/dist/ensureSmartWalletThenPublish-Bl415Ss6.js +48 -0
  76. package/dist/ensureSmartWalletThenPublish-Bl415Ss6.js.map +1 -0
  77. package/dist/ensureSmartWalletThenPublish-Bm58tc-b.js +48 -0
  78. package/dist/ensureSmartWalletThenPublish-Bm58tc-b.js.map +1 -0
  79. package/dist/ensureSmartWalletThenPublish-CE7acryB.js +49 -0
  80. package/dist/ensureSmartWalletThenPublish-CE7acryB.js.map +1 -0
  81. package/dist/ensureSmartWalletThenPublish-D5GSZRyZ.js +48 -0
  82. package/dist/ensureSmartWalletThenPublish-D5GSZRyZ.js.map +1 -0
  83. package/dist/ensureSmartWalletThenPublish-DAomriGc.js +48 -0
  84. package/dist/ensureSmartWalletThenPublish-DAomriGc.js.map +1 -0
  85. package/dist/ensureSmartWalletThenPublish-DaZf3q5S.js +48 -0
  86. package/dist/ensureSmartWalletThenPublish-DaZf3q5S.js.map +1 -0
  87. package/dist/ensureSmartWalletThenPublish-Dta2AOyJ.js +48 -0
  88. package/dist/ensureSmartWalletThenPublish-Dta2AOyJ.js.map +1 -0
  89. package/dist/ensureSmartWalletThenPublish-ekb0xJRn.js +48 -0
  90. package/dist/ensureSmartWalletThenPublish-ekb0xJRn.js.map +1 -0
  91. package/dist/ensureSmartWalletThenPublish-v5fhvKxZ.js +48 -0
  92. package/dist/ensureSmartWalletThenPublish-v5fhvKxZ.js.map +1 -0
  93. package/dist/errors-Du3LNbJN.js.map +1 -1
  94. package/dist/errors.d.ts +2 -2
  95. package/dist/errors.d.ts.map +1 -1
  96. package/dist/helpers/abi/executor.d.ts +125 -0
  97. package/dist/helpers/abi/executor.d.ts.map +1 -1
  98. package/dist/helpers/abi/factory.d.ts +1 -1
  99. package/dist/helpers/abi/factory.d.ts.map +1 -1
  100. package/dist/helpers/abi/publisher.d.ts +18 -74
  101. package/dist/helpers/abi/publisher.d.ts.map +1 -1
  102. package/dist/helpers/abi/seedErrors.d.ts +141 -0
  103. package/dist/helpers/abi/seedErrors.d.ts.map +1 -0
  104. package/dist/helpers/abi/seedExecutorRouter.d.ts +60 -0
  105. package/dist/helpers/abi/seedExecutorRouter.d.ts.map +1 -0
  106. package/dist/helpers/adapters/permissionlessTxSender.d.ts +26 -0
  107. package/dist/helpers/adapters/permissionlessTxSender.d.ts.map +1 -1
  108. package/dist/helpers/adapters/thirdwebAccount.d.ts +10 -2
  109. package/dist/helpers/adapters/thirdwebAccount.d.ts.map +1 -1
  110. package/dist/helpers/approvedTargetsForAutomationPublish.d.ts +1 -1
  111. package/dist/helpers/blockchain.d.ts +4 -0
  112. package/dist/helpers/blockchain.d.ts.map +1 -1
  113. package/dist/helpers/chainClient.d.ts.map +1 -1
  114. package/dist/helpers/chainConfig.d.ts +2 -0
  115. package/dist/helpers/chainConfig.d.ts.map +1 -1
  116. package/dist/helpers/constants.d.ts +14 -3
  117. package/dist/helpers/constants.d.ts.map +1 -1
  118. package/dist/helpers/contracts/index.d.ts +27 -14
  119. package/dist/helpers/contracts/index.d.ts.map +1 -1
  120. package/dist/helpers/defaultApprovedTargetsForModularPublish.d.ts +12 -2
  121. package/dist/helpers/defaultApprovedTargetsForModularPublish.d.ts.map +1 -1
  122. package/dist/helpers/describeRevert.d.ts +33 -0
  123. package/dist/helpers/describeRevert.d.ts.map +1 -0
  124. package/dist/helpers/easDirect.d.ts +3 -8
  125. package/dist/helpers/easDirect.d.ts.map +1 -1
  126. package/dist/helpers/enrollPublishAutomation.d.ts +6 -2
  127. package/dist/helpers/enrollPublishAutomation.d.ts.map +1 -1
  128. package/dist/helpers/ensureAutomationSessionKey.d.ts.map +1 -1
  129. package/dist/helpers/ensureEip7702ModularAccountReady.d.ts +1 -1
  130. package/dist/helpers/ensureEip7702ModularAccountReady.d.ts.map +1 -1
  131. package/dist/helpers/ensureExecutorModule.d.ts +6 -3
  132. package/dist/helpers/ensureExecutorModule.d.ts.map +1 -1
  133. package/dist/helpers/ensureManagedAccountEasConfigured.d.ts +8 -3
  134. package/dist/helpers/ensureManagedAccountEasConfigured.d.ts.map +1 -1
  135. package/dist/helpers/ensureManagedAccountReady.d.ts.map +1 -1
  136. package/dist/helpers/ensureManagedSignerSessionKey.d.ts +5 -0
  137. package/dist/helpers/ensureManagedSignerSessionKey.d.ts.map +1 -1
  138. package/dist/helpers/ensureModularPublishBootstrap.d.ts +6 -2
  139. package/dist/helpers/ensureModularPublishBootstrap.d.ts.map +1 -1
  140. package/dist/helpers/ensureSmartWalletThenPublish.d.ts.map +1 -1
  141. package/dist/helpers/executorModuleReadiness.d.ts +28 -0
  142. package/dist/helpers/executorModuleReadiness.d.ts.map +1 -0
  143. package/dist/helpers/managedAccountAdmin.d.ts +12 -0
  144. package/dist/helpers/managedAccountAdmin.d.ts.map +1 -0
  145. package/dist/helpers/publishThirdwebClient.d.ts +10 -0
  146. package/dist/helpers/publishThirdwebClient.d.ts.map +1 -0
  147. package/dist/helpers/retryNonceTooLow.d.ts +12 -0
  148. package/dist/helpers/retryNonceTooLow.d.ts.map +1 -0
  149. package/dist/helpers/seedSigner.d.ts.map +1 -1
  150. package/dist/helpers/seedTwin.d.ts +47 -0
  151. package/dist/helpers/seedTwin.d.ts.map +1 -0
  152. package/dist/helpers/thirdweb.d.ts +21 -6
  153. package/dist/helpers/thirdweb.d.ts.map +1 -1
  154. package/dist/helpers/thirdwebChain.d.ts +21 -0
  155. package/dist/helpers/thirdwebChain.d.ts.map +1 -0
  156. package/dist/helpers/verifyPublishChain.d.ts +21 -0
  157. package/dist/helpers/verifyPublishChain.d.ts.map +1 -0
  158. package/dist/hooks/useItemPublishStatus.d.ts +2 -0
  159. package/dist/hooks/useItemPublishStatus.d.ts.map +1 -1
  160. package/dist/index.d.ts +10 -4
  161. package/dist/index.d.ts.map +1 -1
  162. package/dist/index.js +463 -408
  163. package/dist/index.js.map +1 -1
  164. package/dist/managedAccountAdmin-B64V1rlU.js +29 -0
  165. package/dist/managedAccountAdmin-B64V1rlU.js.map +1 -0
  166. package/dist/managedAccountAdmin-BVLGWpEb.js +29 -0
  167. package/dist/managedAccountAdmin-BVLGWpEb.js.map +1 -0
  168. package/dist/managedAccountAdmin-Bje6X8Ds.js +29 -0
  169. package/dist/managedAccountAdmin-Bje6X8Ds.js.map +1 -0
  170. package/dist/managedAccountAdmin-C84-IlQ9.js +29 -0
  171. package/dist/managedAccountAdmin-C84-IlQ9.js.map +1 -0
  172. package/dist/managedAccountAdmin-DJMw6UH6.js +29 -0
  173. package/dist/managedAccountAdmin-DJMw6UH6.js.map +1 -0
  174. package/dist/managedAccountAdmin-DhCRBoPX.js +29 -0
  175. package/dist/managedAccountAdmin-DhCRBoPX.js.map +1 -0
  176. package/dist/managedAccountAdmin-NXD66lP5.js +29 -0
  177. package/dist/managedAccountAdmin-NXD66lP5.js.map +1 -0
  178. package/dist/publishAuthorization-B0G1em4a.js +3695 -0
  179. package/dist/publishAuthorization-B0G1em4a.js.map +1 -0
  180. package/dist/publishAuthorization-B1BVVfp0.js +3604 -0
  181. package/dist/publishAuthorization-B1BVVfp0.js.map +1 -0
  182. package/dist/publishAuthorization-BEqRnP2h.js +3925 -0
  183. package/dist/publishAuthorization-BEqRnP2h.js.map +1 -0
  184. package/dist/publishAuthorization-Bltn3y_K.js +3599 -0
  185. package/dist/publishAuthorization-Bltn3y_K.js.map +1 -0
  186. package/dist/publishAuthorization-By2Tt9kW.js +3912 -0
  187. package/dist/publishAuthorization-By2Tt9kW.js.map +1 -0
  188. package/dist/publishAuthorization-CxBkijU6.js +3925 -0
  189. package/dist/publishAuthorization-CxBkijU6.js.map +1 -0
  190. package/dist/publishAuthorization-CxWY7lAQ.js +3706 -0
  191. package/dist/publishAuthorization-CxWY7lAQ.js.map +1 -0
  192. package/dist/publishAuthorization-DEriY_jm.js +3687 -0
  193. package/dist/publishAuthorization-DEriY_jm.js.map +1 -0
  194. package/dist/publishAuthorization-DfAQs1sN.js +3707 -0
  195. package/dist/publishAuthorization-DfAQs1sN.js.map +1 -0
  196. package/dist/publishAuthorization-DjVrnMC0.js +3925 -0
  197. package/dist/publishAuthorization-DjVrnMC0.js.map +1 -0
  198. package/dist/publishAuthorization-DqhhCAhd.js +3652 -0
  199. package/dist/publishAuthorization-DqhhCAhd.js.map +1 -0
  200. package/dist/publishThirdwebClient-BdgkcqM7.js +18 -0
  201. package/dist/publishThirdwebClient-BdgkcqM7.js.map +1 -0
  202. package/dist/publishThirdwebClient-BkmDN480.js +18 -0
  203. package/dist/publishThirdwebClient-BkmDN480.js.map +1 -0
  204. package/dist/publishThirdwebClient-BnDhP3N-.js +18 -0
  205. package/dist/publishThirdwebClient-BnDhP3N-.js.map +1 -0
  206. package/dist/publishThirdwebClient-CBD9sKJR.js +18 -0
  207. package/dist/publishThirdwebClient-CBD9sKJR.js.map +1 -0
  208. package/dist/publishThirdwebClient-CQ29pzG2.js +18 -0
  209. package/dist/publishThirdwebClient-CQ29pzG2.js.map +1 -0
  210. package/dist/publishThirdwebClient-CZIVmr9Z.js +18 -0
  211. package/dist/publishThirdwebClient-CZIVmr9Z.js.map +1 -0
  212. package/dist/publishThirdwebClient-Ce7iBIsj.js +18 -0
  213. package/dist/publishThirdwebClient-Ce7iBIsj.js.map +1 -0
  214. package/dist/publishThirdwebClient-DroRrOFQ.js +18 -0
  215. package/dist/publishThirdwebClient-DroRrOFQ.js.map +1 -0
  216. package/dist/publishThirdwebClient-DzXFjQ7L.js +18 -0
  217. package/dist/publishThirdwebClient-DzXFjQ7L.js.map +1 -0
  218. package/dist/publishThirdwebClient-Dzb2vcEs.js +18 -0
  219. package/dist/publishThirdwebClient-Dzb2vcEs.js.map +1 -0
  220. package/dist/publishThirdwebClient-i8P7fivi.js +18 -0
  221. package/dist/publishThirdwebClient-i8P7fivi.js.map +1 -0
  222. package/dist/react/ConnectButton.d.ts.map +1 -1
  223. package/dist/resolveRevokeAccount-B5iXpuRT.js +38 -0
  224. package/dist/resolveRevokeAccount-B5iXpuRT.js.map +1 -0
  225. package/dist/resolveRevokeAccount-B7ImSb4Y.js +38 -0
  226. package/dist/resolveRevokeAccount-B7ImSb4Y.js.map +1 -0
  227. package/dist/resolveRevokeAccount-BM1j2l5Q.js +38 -0
  228. package/dist/resolveRevokeAccount-BM1j2l5Q.js.map +1 -0
  229. package/dist/resolveRevokeAccount-BtVG0xxc.js +38 -0
  230. package/dist/resolveRevokeAccount-BtVG0xxc.js.map +1 -0
  231. package/dist/resolveRevokeAccount-CJZZdBcQ.js +39 -0
  232. package/dist/resolveRevokeAccount-CJZZdBcQ.js.map +1 -0
  233. package/dist/resolveRevokeAccount-CaIMuCee.js +39 -0
  234. package/dist/resolveRevokeAccount-CaIMuCee.js.map +1 -0
  235. package/dist/resolveRevokeAccount-Cg4TQgnd.js +38 -0
  236. package/dist/resolveRevokeAccount-Cg4TQgnd.js.map +1 -0
  237. package/dist/resolveRevokeAccount-DHnxtEIj.js +39 -0
  238. package/dist/resolveRevokeAccount-DHnxtEIj.js.map +1 -0
  239. package/dist/resolveRevokeAccount-DJKfLlyK.js +38 -0
  240. package/dist/resolveRevokeAccount-DJKfLlyK.js.map +1 -0
  241. package/dist/resolveRevokeAccount-S-2WXkNh.js +38 -0
  242. package/dist/resolveRevokeAccount-S-2WXkNh.js.map +1 -0
  243. package/dist/resolveRevokeAccount-mzR11KJ4.js +38 -0
  244. package/dist/resolveRevokeAccount-mzR11KJ4.js.map +1 -0
  245. package/dist/services/publish/actors/checking.d.ts.map +1 -1
  246. package/dist/services/publish/actors/createAttestations.d.ts.map +1 -1
  247. package/dist/services/publish/helpers/ensureEasSchemas.d.ts +12 -1
  248. package/dist/services/publish/helpers/ensureEasSchemas.d.ts.map +1 -1
  249. package/dist/services/publish/helpers/getPublishUploadData.d.ts.map +1 -1
  250. package/dist/services/publishManager/actions/createPublish.d.ts.map +1 -1
  251. package/dist/services/publishManager/actions/drainPendingCreates.d.ts +3 -0
  252. package/dist/services/publishManager/actions/drainPendingCreates.d.ts.map +1 -0
  253. package/dist/services/publishManager/actions/publishDone.d.ts.map +1 -1
  254. package/dist/services/publishManager/actions/queueCreatePublish.d.ts +2 -0
  255. package/dist/services/publishManager/actions/queueCreatePublish.d.ts.map +1 -0
  256. package/dist/services/publishManager/actors/restoreFromDb.d.ts.map +1 -1
  257. package/dist/services/publishManager/actors/savePublish.d.ts +11 -0
  258. package/dist/services/publishManager/actors/savePublish.d.ts.map +1 -1
  259. package/dist/services/publishManager/createPublishResult.d.ts +6 -0
  260. package/dist/services/publishManager/createPublishResult.d.ts.map +1 -0
  261. package/dist/services/publishManager/index.d.ts +61 -1
  262. package/dist/services/publishManager/index.d.ts.map +1 -1
  263. package/dist/services/revoke/revokeAttestations.d.ts +3 -2
  264. package/dist/services/revoke/revokeAttestations.d.ts.map +1 -1
  265. package/dist/thirdweb.d.ts +1 -0
  266. package/dist/thirdweb.d.ts.map +1 -1
  267. package/dist/thirdweb.js +204 -128
  268. package/dist/thirdweb.js.map +1 -1
  269. package/dist/worker-2dUZSapK.js +69 -0
  270. package/dist/worker-2dUZSapK.js.map +1 -0
  271. package/dist/worker-B8gN5WTx.js +69 -0
  272. package/dist/worker-B8gN5WTx.js.map +1 -0
  273. package/dist/worker-BgErCNTb.js +69 -0
  274. package/dist/worker-BgErCNTb.js.map +1 -0
  275. package/dist/worker-C07rPV2G.js +69 -0
  276. package/dist/worker-C07rPV2G.js.map +1 -0
  277. package/dist/worker-C9Za_dlQ.js +69 -0
  278. package/dist/worker-C9Za_dlQ.js.map +1 -0
  279. package/dist/worker-CEgulQnm.js +69 -0
  280. package/dist/worker-CEgulQnm.js.map +1 -0
  281. package/dist/worker-C_TL94He.js +69 -0
  282. package/dist/worker-C_TL94He.js.map +1 -0
  283. package/dist/worker-CbtzcKG6.js +69 -0
  284. package/dist/worker-CbtzcKG6.js.map +1 -0
  285. package/dist/worker-DHUm-TeQ.js +69 -0
  286. package/dist/worker-DHUm-TeQ.js.map +1 -0
  287. package/dist/worker-DypHzXgH.js +69 -0
  288. package/dist/worker-DypHzXgH.js.map +1 -0
  289. package/dist/worker-ZL4Wg19t.js +69 -0
  290. package/dist/worker-ZL4Wg19t.js.map +1 -0
  291. package/package.json +6 -6
package/CHANGELOG.md CHANGED
@@ -6,6 +6,14 @@ All notable changes to this project will be documented in this file.
6
6
 
7
7
  ### Fixed
8
8
 
9
+ - **List-of-relation EAS names:** a list relation such as `staff` (List → Identity) was attested as `bytes32[] staff` or `bytes32[] staff_identity_ids` depending on whether the model was loaded before the item. `getPublishPayload` and `ensureEasSchemasForItem` now derive the name from the property definition with `listRelationEasPropertyName` (exported from `@seedprotocol/sdk`) and ignore a cached `schemaUid` for list relations. `ensureEasSchemasForItem` refuses to register a list-relation schema that doesn't end in `_ids`. Locally, `createMetadata` writes list-relation rows under the storage name (`staffIdentityIds`), and an `ItemProperty` that receives its schema after construction moves to the storage name while `propertyName` stays `staff`. Already-published data (`author_identity_ids` and the like) is unchanged.
10
+ - **Missing property schemas fail publish validation:** when a property's EAS schema can't be found, `getPublishPayload` now reports `publish_schema_not_found` instead of attesting the value under the Version schema. Call `ensureEasSchemasForItem` first, as the publish flow already does.
11
+ - **`parseEasRelationPropertyName`** (`@seedprotocol/query`) pluralizes list names with `pluralize`: `staff_identity_ids` → `staff` (was `staffs`). Single relations return the singular (`cover_image_id` → `cover`).
12
+ - **Failed UserOps on the permissionless / EIP-7702 sender:** a UserOp that failed inside a successful bundle transaction was returned as a success, so publish went on with no attestations. It now throws with the decoded revert reason.
13
+ - **Readable publish failures:** every publish route now simulates `multiPublish` from the sending account before sending, and a call that would revert throws `PUBLISH_PREFLIGHT_FAILED` with the decoded Seed, EAS or `Error(string)` reason (automation keeps `AUTOMATION_PREFLIGHT_FAILED`). Outside automation, a simulation that can't run doesn't block the send. thirdweb's bare `UserOp failed at txHash: 0x…` (usually out of gas) and its undecodable custom-error message are rewritten to say what happened, as `ManagedAccountPublishError` with code `USEROP_FAILED_NO_REASON` (no revert reason; usually out of gas) or `USEROP_REVERTED`, keeping the original as `underlyingCause`. Failed UserOps on the permissionless sender use the same codes.
14
+ - **Publish automation on legacy ManagedAccounts:** `enrollPublishAutomation` no longer fails when the account is an ERC-7504 Router (`Router: function does not exist`) instead of ModularCore. Those accounts cannot `installModule`; enroll adds the module-only session key and attests the sidecar. ModularCore accounts still require the executor module to be installed.
15
+ - **EAS schema lookup:** `ensureEasSchemasForItem` normalizes property data types (`html` → `Html`) before choosing the on-chain schema, so an existing `bytes32 html` schema is reused instead of registering `string html`. `normalizeDataType` is exported from `@seedprotocol/sdk`.
16
+ - **Automation schema registration:** session keys no longer send SchemaRegistry or EAS UserOps when a schema is missing. Publish fails first with `schema "…" is not registered; automation keys can't register schemas`. Register once with the owner wallet via `ensureEasSchemasForItem`.
9
17
  - **First-time modular publish:** `isAutomationSessionActive` returns `false` when the ManagedAccount has no bytecode instead of throwing `MODULAR_SIGNER_ACTIVATION_FAILED` on viem `0x` / “not a contract”. Interactive first publish can reach `runModularExecutorPublishPrep` / `autoDeployManagedAccount`. Deployed-account RPC or `isActiveSigner` read failures still throw so unattended automation does not fall through to in-app bootstrap.
10
18
 
11
19
  ### Added
package/README.md CHANGED
@@ -12,6 +12,8 @@ The publish flow (ConnectButton, etc.) runs `ensureEasSchemasForItem` before `ge
12
12
 
13
13
  `uploadApiBaseUrl` is required. Provide either `rpcUrl` or `thirdwebClientId` (RPC falls back to Thirdweb’s edge when only the client id is set).
14
14
 
15
+ From Node, a domain-locked client id returns 401. Set `thirdwebSecretKey` (server only) so Thirdweb RPC and the bundler authenticate, and either pass a public `rpcUrl` or pass `thirdwebClientId` together with that secret (`x-secret-key` is attached to viem reads). A secret key alone does not build the viem RPC URL. Call `await PublishManager.ready()` before `createPublish`; that promise is the spawned actor, not the finished publish. eas-sdk’s ESM build named-imports CommonJS `lodash`. Load it with `node --import @seedprotocol/sdk/node-eas-lodash`, which redirects that import to `lodash-es`.
16
+
15
17
  Thirdweb is an **optional** peer. Core publish uses `SeedSigner` + `SeedTxSender` (`PublishWallet`). Import ConnectButton / in-app wallets from `@seedprotocol/publish/thirdweb`.
16
18
 
17
19
  ### Recipe 1: EIP-1193 + EOA (no Thirdweb)
@@ -103,23 +105,57 @@ function App() {
103
105
 
104
106
  You can optionally pass `queryClient` or `queryClientRef` to customize the Seed QueryClient.
105
107
 
106
- ### useIntegerLocalIds
108
+ ### Choosing a chain
107
109
 
108
- When using the new contract that expects `uint256` localIdIndex/publishLocalIdIndex instead of string localId/publishLocalId (gas-efficient), set `useIntegerLocalIds: true`:
110
+ Publishing works on any EVM chain with [EAS](https://github.com/ethereum-attestation-service/eas-contracts#deployments) deployed. Pass a viem `chain`; it defaults to Optimism Sepolia. The same chain drives viem reads, transaction routing and the Thirdweb wallet / ConnectButton. When `rpcUrl` is set, Thirdweb uses it too, so Seed's checks and Thirdweb's calls always reach the same node.
109
111
 
110
- ```tsx
111
- <PublishProvider
112
- config={{
113
- thirdwebClientId: '...',
114
- uploadApiBaseUrl: '...',
115
- useIntegerLocalIds: true, // Use integer-based payload for new contract
116
- }}
117
- >
118
- <App />
119
- </PublishProvider>
112
+ ```ts
113
+ import { base } from 'viem/chains'
114
+
115
+ initPublish({
116
+ uploadApiBaseUrl: import.meta.env.VITE_UPLOAD_API_BASE_URL,
117
+ rpcUrl: import.meta.env.VITE_RPC_URL,
118
+ chain: base,
119
+ })
120
+ ```
121
+
122
+ - **Known chains** (`EAS_CHAIN_DEPLOYMENTS`: Ethereum, Sepolia, Optimism, Optimism Sepolia, Base, Base Sepolia, Arbitrum One / Sepolia, Polygon, Scroll, Linea) resolve the EAS and SchemaRegistry addresses automatically.
123
+ - **Other chains** need `easContractAddress` and `schemaRegistryAddress`; `initPublish` throws without them. These options also override the built-in addresses on known chains.
124
+ - **Managed / modular account flows** (Thirdweb ManagedAccount, `useModularExecutor`) need a ManagedAccount factory on the chain. One is built in for Optimism Sepolia only (`MANAGED_ACCOUNT_FACTORY_ADDRESSES`); elsewhere pass `managedAccountFactoryAddress` and an executor module you have deployed. The EOA / direct EAS path needs neither.
125
+ - `ensureEasSchemasForItem` registers missing model and property schemas on first publish. The base schemas (Version and EAS's "Name a Schema") are registered by the protocol for each supported chain (seed-protocol `seed:ensure-schemas`); if one is missing, publishing fails before sending anything.
126
+ - SDK reads (EAS sync, schema lookups) follow the publish chain's easscan indexer automatically. For a chain without a known indexer, or a self-hosted one, set `SeedConfig.eas.indexerUrl`. If the SDK sets `eas.chainId`, it must match `chain.id` or init throws. The `EAS_ENDPOINT` / `NEXT_PUBLIC_EAS_ENDPOINT` env vars still override the chain's default indexer, but one set to another chain's known easscan indexer throws (`SeedConfig.eas.indexerUrl` takes precedence over both).
127
+ - The SDK's local database remembers which chain its attestations came from. Pointing an existing database at a different chain fails at init, sync or publish with a chain-mismatch error rather than mixing data from two chains. Use a separate `filesDir` / database per chain. Databases created before this check are treated as Optimism Sepolia.
128
+ - Before the first publish or revoke, `verifyPublishChain()` checks that the RPC reports `chain.id` and that EAS, the SchemaRegistry and any configured factory / executor module have code on the chain. It throws `PublishChainConfigError` listing every problem. Call it at startup to fail earlier.
129
+ - While `@seedprotocol/publish` is loaded but `initPublish` hasn't run, SDK EAS sync waits (up to 30s) for the publish chain instead of syncing the default chain. Set `SeedConfig.eas.chainId` to skip the wait.
130
+
131
+ The resolved values are on `getPublishConfig()` (`chain`, `easContractAddress`, `schemaRegistryAddress`, `thirdwebAccountFactoryAddress`, `easChain`).
132
+
133
+ ### Local OP Sepolia twin
134
+
135
+ The protocol's twin (`seed-protocol`: `bun run twin:up`) is an OP Sepolia fork on chain **31337** with a local bundler (no paymaster) and EAS indexer. Thirdweb's hosted paymaster and EIP-7702 service can't reach it, so the wallets need the `thirdweb` settings below. `seedTwinConfig` reads the endpoints and addresses from `seed-protocol/.twin/twin.json`, which change with each deploy; it ignores the file's test-account keys.
136
+
137
+ ```ts
138
+ import { initPublish, seedTwinConfig } from '@seedprotocol/publish'
139
+ import twinJson from '../seed-protocol/.twin/twin.json'
140
+
141
+ const twin = seedTwinConfig(twinJson)
142
+
143
+ initPublish({
144
+ ...twin.publish, // chain 31337, rpcUrl, addresses, executor, thirdweb: { bundlerUrl, sponsorGas: false, modularWalletMode: 'EOA' }
145
+ uploadApiBaseUrl: 'http://localhost:3000', // your seed-protocol-server
146
+ thirdwebClientId, // login stays hosted; allow the local origin
147
+ useModularExecutor: true,
148
+ })
149
+
150
+ // SDK
151
+ client.init({ config: { ...config, eas: twin.eas, filesDir: `.seed-${twin.chain.id}` } })
120
152
  ```
121
153
 
122
- To revert to the old contract (string-based), set `useIntegerLocalIds: false` or omit the flag. No code changes required beyond config.
154
+ Configuring the twin by hand instead: the twin's bundler goes in `thirdweb.bundlerUrl`, not the top-level `bundlerUrl`. That one feeds the permissionless EIP-7702 sender, needs an EntryPoint v0.8 bundler (the twin's is v0.6) and is rejected when the bundler reports no v0.8 support. On a local chain (31337 / 1337, or a loopback RPC), the Thirdweb wallets throw for `modularWalletMode: 'EIP7702'` and for a missing `thirdweb.bundlerUrl`, since Thirdweb's hosted services can't reach it.
155
+
156
+ Fund both the ManagedAccount and the in-app EOA before publishing: `bun run twin:fund <managedAddress> <eoaAddress>` in `seed-protocol`. Each `twin:up` resets the chain, so clear the local Seed DB (`filesDir`) and browser storage too.
157
+
158
+ Twin quirks the SDK handles: automation pre-flight simulations retry with a balance override when the account can't cover OP's up-front L1 fee, EOA sends retry when the fork's pending-nonce lookup lags a block, and `getArweave()` follows the gateway's protocol and port (e.g. `http://localhost:1984`).
123
159
 
124
160
  ### Experimental: Arweave bundler (instant uploads)
125
161
 
@@ -202,25 +238,29 @@ Apps can enroll a server-held session key to publish/revoke on a user’s Manage
202
238
 
203
239
  APIs live on `@seedprotocol/publish` (sidecar attest/revoke) and `@seedprotocol/publish/thirdweb` (`enrollPublishAutomation`, `revokePublishAutomation`, session-key helpers, `assertStorageBoundToIdentity`).
204
240
 
205
- ### Modular executor (`useModularExecutor`) and EIP-7702
241
+ ### Modular executor (`useModularExecutor`)
242
+
243
+ With **`useModularExecutor`**, two Thirdweb in-app wallets share one login:
244
+
245
+ - **Managed wallet** (`getManagedAccountWallet`, EIP-4337): the user's **ManagedAccount** smart account, created by the ManagedAccount factory with the user's in-app EOA as admin. It is the attester, and it publishes.
246
+ - **Modular wallet** (`getModularAccountWallet`): that same in-app EOA. It signs DataItems and sends the few **admin-only** transactions, such as `installSeedExecutor`. `thirdweb.modularWalletMode` picks EIP-7702 through Thirdweb (default; gas-sponsored unless `thirdweb.sponsorGas` is `false`) or a plain funded EOA (`'EOA'`); the address is the same either way.
206
247
 
207
- When **`useModularExecutor`** is enabled, `multiPublish` is sent **from** the user’s **Thirdweb in-app modular wallet** (EIP-7702 execution mode) against their **ManagedAccount** contract. Before the first on-chain publish, `createAttestations` runs **`ensureEip7702ModularAccountReady()`**, which checks Optimism Sepolia bytecode at the modular wallet address (EIP-7702 delegation / minimal account). If bytecode is still empty and **`autoDeployEip7702ModularAccount`** is true (the default when `useModularExecutor` is on), it calls Thirdweb’s **`deploySmartAccount`** bootstrap (no-op if already upgraded). Set **`autoDeployEip7702ModularAccount: false`** to surface **`Eip7702ModularAccountPublishError`** instead of auto-deploying.
248
+ **Publishing.** `createAttestations` sends interactive `multiPublish` as a **UserOp from the managed smart account**, calling the account itself (`execute(account, multiPublish)`). The Seed extension accepts that self-call; direct calls from session keys or other non-admins revert with `Unauthorized`. Before the first publish, `ensureModularPublishBootstrap`:
208
249
 
209
- **`ensureSmartWalletThenPublish`:** With **`useModularExecutor`**, the publish machine’s **`account`** and default **`dataItemSigner`** come from **`getConnectedModularAccount()`** (the modular EIP-7702 in-app wallet), not from **`resolveSmartWalletForPublish`** or the **`activeAccount`** argument (that parameter is ignored on this path for API compatibility). **`ensureEip7702ModularAccountReady()`** runs once before **`createPublish`** so EIP-7702 readiness failures surface before the publish actor starts; `createAttestations` still calls it again (no-op when already deployed).
250
+ 1. Connects the managed wallet and checks it is the publishing account.
251
+ 2. Checks the account's `getEas()` against `easContractAddress`. Current Seed extensions fix EAS at deployment, so a mismatch is a config error. Only pre-rollout accounts that report no EAS get `setEas`, sent by the admin EOA.
210
252
 
211
- **Routing (important):** `multiPublish` calldata uses the ABI generated from the reference deployment `MULTI_PUBLISH_ABI_REFERENCE_ADDRESS_OP_SEPOLIA` (`0xcd8c…` — same hex as the deprecated `SEED_PROTOCOL_CONTRACT_ADDRESS_OP_SEPOLIA` alias). The transaction **`to` / `getContract` address** is the user’s on-chain publisher: **managed account** for interactive modular publish (`runModularExecutorPublishPrep().managedAddress`), or the **executor module** when an automation session key is detected (`routeToExecutorModule`). Non-modular publish targets the **deployed publisher contract**. **EOAs** (no contract at `address`) never use `multiPublish`; the publish machine routes them to **direct EAS** (`createAttestationsDirectToEas`). Set **`useDirectEas: true`** to force that path even when the publisher is a deployed contract. Receipt parsing uses `modularAccountModuleContract` when configured, otherwise the managed / publisher address.
253
+ **Executor.** `runModularExecutorPublishPrep()` ensures the ManagedAccount is deployed and, when `modularAccountModuleContract` is set, tries to install the Seed executor: `installSeedExecutor()` from the admin EOA on Router accounts with the `SeedExecutorRouterExtension`, `installModule` on ModularCore accounts. Interactive publishing doesn't use the executor, so a failed install (for example, `modularAccountModuleContract` naming a different executor than the one the account's extension pins) only logs a warning. `enrollPublishAutomation` requires the install and fails with `EXECUTOR_MODULE_NOT_INSTALLED`.
212
254
 
213
- **Managed account:** `runModularExecutorPublishPrep()` still ensures the **EIP-4337 managed** publishing contract exists on Optimism Sepolia (and optionally installs the executor module). That is separate from the modular wallet’s EIP-7702 upgrade.
255
+ **Session keys** may only target the executor (`approvedTargetsForAutomationPublish`). `ensureManagedSignerSessionKey` and `defaultApprovedTargetsForModularPublish` are deprecated: interactive publishing needs no session key, and both now grant the executor only, never the account (which would allow any self-call) or EAS.
214
256
 
215
- Before the first `multiPublish` on that path, `createAttestations` runs **`ensureModularPublishBootstrap`**, which:
257
+ **Automation** session keys publish through the executor only (see [PUBLISH_AUTOMATION.md](../../docs/PUBLISH_AUTOMATION.md)) and cannot revoke. **Revocation** is owner-only: `revokeAttestations` sends `multiRevoke` to EAS from the publishing account.
216
258
 
217
- 1. Provisions the modular wallet as a **session signer** on the ManagedAccount (`ensureManagedSignerSessionKey` — `addSessionKey` signed by the managed EIP-4337 wallet when needed).
218
- 2. Ensures the ManagedAccount EAS pointer matches config (`ensureManagedAccountEasConfigured`).
219
- 3. Falls back to **`ensureEip7702ModularAccountReady`** only when session-key setup fails and `autoDeployEip7702ModularAccount` is enabled.
259
+ **Routing:** `multiPublish` calldata uses the ABI generated from the reference deployment `MULTI_PUBLISH_ABI_REFERENCE_ADDRESS_OP_SEPOLIA` (`0xcd8c…`). The transaction `to` is the managed account for interactive publish, or the executor module for automation keys. Non-modular publish targets the deployed publisher contract. **EOAs** (no contract at `address`) never use `multiPublish`; they attest on EAS directly (`createAttestationsDirectToEas`). Set **`useDirectEas: true`** to force that path.
220
260
 
221
- **Diagnostic helper:** **`defaultApprovedTargetsForModularPublish(managedAddress)`** remains exported for apps that build custom permission flows.
261
+ **`ensureSmartWalletThenPublish`:** with `useModularExecutor`, the default `dataItemSigner` comes from `getConnectedModularAccount()`; the `activeAccount` argument is ignored on this path.
222
262
 
223
- **Resolved config:** Use **`getPublishConfig()`** after `initPublish` / `PublishProvider` for **`autoDeployEip7702ModularAccount`** and other resolved defaults—not only `usePublishConfig()`, which returns the raw `PublishConfig` object.
263
+ **Resolved config:** use **`getPublishConfig()`** after `initPublish` / `PublishProvider` for resolved defaults, not only `usePublishConfig()`, which returns the raw `PublishConfig`.
224
264
 
225
265
  ## Development
226
266