@seedprotocol/publish 0.7.9-next.1177.ga3e08ed → 0.7.9-next.1306.g4ff6582
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/dist/{chainConfig-D801ynuH.js → chainConfig-CD-RgKkA.js} +1303 -1274
- package/dist/chainConfig-CD-RgKkA.js.map +1 -0
- package/dist/{ensureAutomationSessionKey-DqAS9J9s.js → ensureAutomationSessionKey-CHXAuk8Q.js} +3 -3
- package/dist/{ensureAutomationSessionKey-DqAS9J9s.js.map → ensureAutomationSessionKey-CHXAuk8Q.js.map} +1 -1
- package/dist/{ensureModularPublishBootstrap-DqmBSJ7_.js → ensureModularPublishBootstrap-Cit8PlNN.js} +3 -3
- package/dist/{ensureModularPublishBootstrap-DqmBSJ7_.js.map → ensureModularPublishBootstrap-Cit8PlNN.js.map} +1 -1
- package/dist/{ensureSmartWalletThenPublish-DcuHyKXL.js → ensureSmartWalletThenPublish-C2FS784-.js} +2 -2
- package/dist/{ensureSmartWalletThenPublish-DcuHyKXL.js.map → ensureSmartWalletThenPublish-C2FS784-.js.map} +1 -1
- package/dist/helpers/publishItem.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/{managedAccountAdmin-IdudyXSZ.js → managedAccountAdmin-BmO4USir.js} +2 -2
- package/dist/{managedAccountAdmin-IdudyXSZ.js.map → managedAccountAdmin-BmO4USir.js.map} +1 -1
- package/dist/{publishAuthorization-D1aMORBP.js → publishAuthorization-D1HYOu23.js} +2 -2
- package/dist/{publishAuthorization-D1aMORBP.js.map → publishAuthorization-D1HYOu23.js.map} +1 -1
- package/dist/{resolveRevokeAccount-zYQmsure.js → resolveRevokeAccount-CK8SbaVn.js} +2 -2
- package/dist/{resolveRevokeAccount-zYQmsure.js.map → resolveRevokeAccount-CK8SbaVn.js.map} +1 -1
- package/dist/services/publish/actors/checking.d.ts.map +1 -1
- package/dist/services/publish/actors/createArweaveDataItems.d.ts.map +1 -1
- package/dist/services/publish/actors/createArweaveDataItemsPhase2.d.ts.map +1 -1
- package/dist/services/publish/actors/createAttestationsDirectToEas.d.ts.map +1 -1
- package/dist/services/publish/actors/index.d.ts +1 -0
- package/dist/services/publish/actors/index.d.ts.map +1 -1
- package/dist/services/publish/actors/multiPublishReceipt.d.ts +5 -0
- package/dist/services/publish/actors/multiPublishReceipt.d.ts.map +1 -1
- package/dist/services/publish/actors/publishRequestNormalize.d.ts.map +1 -1
- package/dist/services/publish/actors/recordMultiPublishReceipt.d.ts.map +1 -1
- package/dist/services/publish/actors/revokeRetractedProperties.d.ts +10 -0
- package/dist/services/publish/actors/revokeRetractedProperties.d.ts.map +1 -0
- package/dist/services/publish/helpers/ensureEasSchemas.d.ts +3 -2
- package/dist/services/publish/helpers/ensureEasSchemas.d.ts.map +1 -1
- package/dist/services/publish/helpers/itemNeedsArweave.d.ts +3 -4
- package/dist/services/publish/helpers/itemNeedsArweave.d.ts.map +1 -1
- package/dist/services/publish/index.d.ts +14 -1
- package/dist/services/publish/index.d.ts.map +1 -1
- package/dist/services/revoke/revokeAttestations.d.ts +20 -0
- package/dist/services/revoke/revokeAttestations.d.ts.map +1 -1
- package/dist/thirdweb.js +5 -5
- package/dist/{worker-DaG8XHbB.js → worker-BlNDHv1o.js} +2 -2
- package/dist/{worker-DaG8XHbB.js.map → worker-BlNDHv1o.js.map} +1 -1
- package/package.json +8 -8
- package/dist/chainConfig-D801ynuH.js.map +0 -1
package/dist/{ensureAutomationSessionKey-DqAS9J9s.js → ensureAutomationSessionKey-CHXAuk8Q.js}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as e } from "./rolldown-runtime-Dy4uBu1J.js";
|
|
2
|
-
import { Rt as t, Ut as n, Vt as r, W as i, Wt as a, _t as o, it as s, qt as c, t as l } from "./chainConfig-
|
|
3
|
-
import { d as u, p as d } from "./publishAuthorization-
|
|
2
|
+
import { Rt as t, Ut as n, Vt as r, W as i, Wt as a, _t as o, it as s, qt as c, t as l } from "./chainConfig-CD-RgKkA.js";
|
|
3
|
+
import { d as u, p as d } from "./publishAuthorization-D1HYOu23.js";
|
|
4
4
|
import { getContract as f, sendTransaction as p } from "thirdweb";
|
|
5
5
|
import { addSessionKey as m, removeSessionKey as h, shouldUpdateSessionKey as g } from "thirdweb/extensions/erc4337";
|
|
6
6
|
//#region src/helpers/ensureAutomationSessionKey.ts
|
|
@@ -80,4 +80,4 @@ async function w(e, n) {
|
|
|
80
80
|
//#endregion
|
|
81
81
|
export { C as i, _ as n, w as r, S as t };
|
|
82
82
|
|
|
83
|
-
//# sourceMappingURL=ensureAutomationSessionKey-
|
|
83
|
+
//# sourceMappingURL=ensureAutomationSessionKey-CHXAuk8Q.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensureAutomationSessionKey-
|
|
1
|
+
{"version":3,"file":"ensureAutomationSessionKey-CHXAuk8Q.js","names":["__exportAll","readIsActiveSigner","readUntil","isContractDeployed","getManagedAccountWallet","waitForPublishReceipt","getPublishThirdwebChain","getClient","ManagedAccountPublishError","getPublishChainName","buildAutomationSessionKeyPermissions","toThirdwebSessionKeyPermissions","ensureAutomationSessionKey_exports","ensureAutomationSessionKey","isAutomationSessionActive","removeAutomationSessionKey","MSG_UNAVAILABLE","MSG_ACTIVATION_FAILED","MSG_REMOVAL_FAILED","getManagedAccountForSessionKeyAdmin","managedWallet","managedAccount","managedAddress","params","accountContract","getContract","permissions","shouldUpdate","shouldUpdateSessionKey","cause","tx","addSessionKey","result","sendTransaction","sessionKeyAddress","removeSessionKey"],"sources":["../src/helpers/ensureAutomationSessionKey.ts"],"sourcesContent":["import { getContract, sendTransaction } from 'thirdweb'\nimport {\n addSessionKey,\n removeSessionKey,\n shouldUpdateSessionKey,\n} from 'thirdweb/extensions/erc4337'\nimport type { Address } from 'viem'\nimport { ManagedAccountPublishError } from '../errors'\nimport { isContractDeployed, readUntil, waitForPublishReceipt } from './chainClient'\nimport { readIsActiveSigner } from './contracts'\nimport {\n buildAutomationSessionKeyPermissions,\n toThirdwebSessionKeyPermissions,\n} from './automationSessionKeyPermissions'\nimport { getClient, getManagedAccountWallet } from './thirdweb'\nimport { getPublishThirdwebChain } from './thirdwebChain'\nimport { getPublishChainName } from './chainConfig'\n\nconst MSG_UNAVAILABLE = () =>\n `Could not connect the managed publishing account to authorize an automation session key on ${getPublishChainName()}. Reconnect and try again.`\nconst MSG_ACTIVATION_FAILED = () =>\n `Could not authorize the automation session key on your publishing account on ${getPublishChainName()}.`\nconst MSG_REMOVAL_FAILED = () =>\n `Could not remove the automation session key from your publishing account on ${getPublishChainName()}.`\n\nasync function getManagedAccountForSessionKeyAdmin(managedAddress: string) {\n const managedWallet = getManagedAccountWallet()\n await managedWallet.autoConnect({ client: getClient(), chain: getPublishThirdwebChain() })\n const managedAccount = managedWallet.getAccount()\n if (!managedAccount) {\n throw new ManagedAccountPublishError(\n MSG_UNAVAILABLE(),\n 'MODULAR_SIGNER_ACTIVATION_FAILED',\n managedAddress,\n )\n }\n return managedAccount\n}\n\n/**\n * Ensures `sessionKeyAddress` is an active automation session signer on the ManagedAccount\n * with **executor-module-only** approved targets. Signed by the managed EIP-4337 wallet (user).\n */\nexport async function ensureAutomationSessionKey(params: {\n managedAddress: string\n sessionKeyAddress: string\n /** Unix seconds end time for the session key (optional). */\n expiresAt?: number\n}): Promise<void> {\n const { managedAddress, sessionKeyAddress, expiresAt } = params\n const managedAccount = await getManagedAccountForSessionKeyAdmin(managedAddress)\n\n const accountContract = getContract({\n client: getClient(),\n chain: getPublishThirdwebChain(),\n address: managedAddress,\n })\n const permissions = toThirdwebSessionKeyPermissions(\n buildAutomationSessionKeyPermissions({ expiresAt }),\n )\n\n let shouldUpdate = false\n try {\n shouldUpdate = await shouldUpdateSessionKey({\n accountContract,\n sessionKeyAddress,\n newPermissions: permissions,\n })\n } catch (cause) {\n throw new ManagedAccountPublishError(\n MSG_ACTIVATION_FAILED(),\n 'MODULAR_SIGNER_ACTIVATION_FAILED',\n managedAddress,\n cause,\n )\n }\n\n if (shouldUpdate) {\n try {\n const tx = addSessionKey({\n contract: accountContract,\n account: managedAccount,\n sessionKeyAddress,\n permissions,\n })\n const result = await sendTransaction({ account: managedAccount, transaction: tx })\n await waitForPublishReceipt(result.transactionHash as `0x${string}`)\n } catch (cause) {\n throw new ManagedAccountPublishError(\n MSG_ACTIVATION_FAILED(),\n 'MODULAR_SIGNER_ACTIVATION_FAILED',\n managedAddress,\n cause,\n )\n }\n }\n\n // Right after addSessionKey, a lagging RPC node can still report the key inactive.\n const active = await readUntil(\n () => isAutomationSessionActive(managedAddress, sessionKeyAddress),\n Boolean,\n { attempts: shouldUpdate ? 5 : 1 },\n )\n if (!active) {\n throw new ManagedAccountPublishError(\n MSG_ACTIVATION_FAILED(),\n 'MODULAR_SIGNER_ACTIVATION_FAILED',\n managedAddress,\n )\n }\n}\n\n/**\n * Removes an automation session key from the ManagedAccount (user-signed via managed wallet).\n */\nexport async function removeAutomationSessionKey(params: {\n managedAddress: string\n sessionKeyAddress: string\n}): Promise<void> {\n const { managedAddress, sessionKeyAddress } = params\n const managedAccount = await getManagedAccountForSessionKeyAdmin(managedAddress)\n\n const accountContract = getContract({\n client: getClient(),\n chain: getPublishThirdwebChain(),\n address: managedAddress,\n })\n\n try {\n const tx = removeSessionKey({\n contract: accountContract,\n account: managedAccount,\n sessionKeyAddress,\n })\n const result = await sendTransaction({ account: managedAccount, transaction: tx })\n await waitForPublishReceipt(result.transactionHash as `0x${string}`)\n } catch (cause) {\n throw new ManagedAccountPublishError(\n MSG_REMOVAL_FAILED(),\n 'MODULAR_SIGNER_ACTIVATION_FAILED',\n managedAddress,\n cause,\n )\n }\n}\n\n/**\n * True when `sessionKeyAddress` is an active signer on the ManagedAccount.\n * Returns `false` when the ManagedAccount has no bytecode (undeployed ≠ unauthorized).\n * Throws when bytecode or `isActiveSigner` cannot be read on a live account (RPC / decode),\n * so unattended automation does not silently fall through to in-app bootstrap.\n */\nexport async function isAutomationSessionActive(\n managedAddress: string,\n sessionKeyAddress: string,\n): Promise<boolean> {\n try {\n if (!(await isContractDeployed(managedAddress))) {\n return false\n }\n return await readIsActiveSigner(\n managedAddress as Address,\n sessionKeyAddress as Address,\n )\n } catch (cause) {\n throw new ManagedAccountPublishError(\n MSG_ACTIVATION_FAILED(),\n 'MODULAR_SIGNER_ACTIVATION_FAILED',\n managedAddress,\n cause,\n )\n }\n}\n"],"mappings":";;;;;;;;;;IAkBMgB,UACJ,8FAA8FP,EAAoB,EAAE,6BAChHQ,UACJ,gFAAgFR,EAAoB,EAAE,IAClGS,UACJ,+EAA+ET,EAAoB,EAAE;AAEvG,eAAeU,EAAoC,GAAwB;CACzE,IAAMC,IAAgBhB,EAAwB;CAC9C,MAAMgB,EAAc,YAAY;EAAE,QAAQb,EAAU;EAAG,OAAOD,EAAwB;CAAE,CAAC;CACzF,IAAMe,IAAiBD,EAAc,WAAW;CAChD,IAAI,CAACC,GACH,MAAM,IAAIb,EACRQ,EAAgB,GAChB,oCACAM,CACF;CAEF,OAAOD;AACT;AAMA,eAAsBR,EAA2B,GAK/B;CAChB,IAAM,EAAE,mBAAgB,sBAAmB,iBAAcU,GACnDF,IAAiB,MAAMF,EAAoCG,CAAc,GAEzEE,IAAkBC,EAAY;EAClC,QAAQlB,EAAU;EAClB,OAAOD,EAAwB;EAC/B,SAASgB;CACX,CAAC,GACKI,IAAcf,EAClBD,EAAqC,EAAE,aAAU,CAAC,CACpD,GAEIiB,IAAe;CACnB,IAAI;EACF,IAAe,MAAMC,EAAuB;GAC1C;GACA;GACA,gBAAgBF;EAClB,CAAC;CACH,SAASG,GAAO;EACd,MAAM,IAAIrB,EACRS,EAAsB,GACtB,oCACAK,GACAO,CACF;CACF;CAEA,IAAIF,GACF,IAAI;EACF,IAAMG,IAAKC,EAAc;GACvB,UAAUP;GACV,SAASH;GACT;GACA;EACF,CAAC,GACKW,IAAS,MAAMC,EAAgB;GAAE,SAASZ;GAAgB,aAAaS;EAAG,CAAC;EACjF,MAAMzB,EAAsB2B,EAAO,eAAgC;CACrE,SAASH,GAAO;EACd,MAAM,IAAIrB,EACRS,EAAsB,GACtB,oCACAK,GACAO,CACF;CACF;CASF,IAAI,CAAC,MALgB3B,QACbY,EAA0BQ,GAAgBY,CAAiB,GACjE,SACA,EAAE,UAAUP,IAAe,IAAI,EAAE,CACnC,GAEE,MAAM,IAAInB,EACRS,EAAsB,GACtB,oCACAK,CACF;AAEJ;AAKA,eAAsBP,EAA2B,GAG/B;CAChB,IAAM,EAAE,mBAAgB,yBAAsBQ,GACxCF,IAAiB,MAAMF,EAAoCG,CAAc,GAEzEE,IAAkBC,EAAY;EAClC,QAAQlB,EAAU;EAClB,OAAOD,EAAwB;EAC/B,SAASgB;CACX,CAAC;CAED,IAAI;EACF,IAAMQ,IAAKK,EAAiB;GAC1B,UAAUX;GACV,SAASH;GACT;EACF,CAAC,GACKW,IAAS,MAAMC,EAAgB;GAAE,SAASZ;GAAgB,aAAaS;EAAG,CAAC;EACjF,MAAMzB,EAAsB2B,EAAO,eAAgC;CACrE,SAASH,GAAO;EACd,MAAM,IAAIrB,EACRU,EAAmB,GACnB,oCACAI,GACAO,CACF;CACF;AACF;AAQA,eAAsBf,EACpB,GACA,GACkB;CAClB,IAAI;EAIF,OAHM,MAAMX,EAAmBmB,CAAc,IAGtC,MAAMrB,EACXqB,GACAY,CACF,IALS;CAMX,SAASL,GAAO;EACd,MAAM,IAAIrB,EACRS,EAAsB,GACtB,oCACAK,GACAO,CACF;CACF;AACF"}
|
package/dist/{ensureModularPublishBootstrap-DqmBSJ7_.js → ensureModularPublishBootstrap-Cit8PlNN.js}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as e } from "./rolldown-runtime-Dy4uBu1J.js";
|
|
2
|
-
import { E as t, Q as n, W as r, _t as i, gt as a, it as o, qt as s, t as c } from "./chainConfig-
|
|
3
|
-
import { t as l } from "./managedAccountAdmin-
|
|
2
|
+
import { E as t, Q as n, W as r, _t as i, gt as a, it as o, qt as s, t as c } from "./chainConfig-CD-RgKkA.js";
|
|
3
|
+
import { t as l } from "./managedAccountAdmin-BmO4USir.js";
|
|
4
4
|
//#region src/helpers/ensureModularPublishBootstrap.ts
|
|
5
5
|
var u = /* @__PURE__ */ e({ ensureModularPublishBootstrap: () => d });
|
|
6
6
|
async function d(e) {
|
|
@@ -18,4 +18,4 @@ async function d(e) {
|
|
|
18
18
|
//#endregion
|
|
19
19
|
export { u as n, d as t };
|
|
20
20
|
|
|
21
|
-
//# sourceMappingURL=ensureModularPublishBootstrap-
|
|
21
|
+
//# sourceMappingURL=ensureModularPublishBootstrap-Cit8PlNN.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensureModularPublishBootstrap-
|
|
1
|
+
{"version":3,"file":"ensureModularPublishBootstrap-Cit8PlNN.js","names":["__exportAll","ensureManagedAccountEasConfigured","syncPublishInAppAuthToken","getManagedAccountWallet","getPublishThirdwebChain","fromThirdwebAccount","getClient","ManagedAccountPublishError","getPublishChainName","getManagedAccountAdmin","ensureModularPublishBootstrap_exports","ensureModularPublishBootstrap","managedWallet","managedAccount","managedAddress"],"sources":["../src/helpers/ensureModularPublishBootstrap.ts"],"sourcesContent":["import type { Account } from 'thirdweb/wallets'\nimport { ManagedAccountPublishError } from '../errors'\nimport { fromThirdwebAccount } from './adapters/thirdwebAccount'\nimport { getPublishChainName } from './chainConfig'\nimport { ensureManagedAccountEasConfigured } from './ensureManagedAccountEasConfigured'\nimport { getManagedAccountAdmin } from './managedAccountAdmin'\nimport { getClient, getManagedAccountWallet, syncPublishInAppAuthToken } from './thirdweb'\nimport { getPublishThirdwebChain } from './thirdwebChain'\n\n/**\n * Returns the account that sends interactive `multiPublish`: the user's managed (EIP-4337) smart\n * account. Its UserOps execute `multiPublish` on the account itself, a self-call the Seed\n * extension accepts; session keys and other non-admin callers are rejected with `Unauthorized`.\n *\n * Also checks the account's EAS pointer. Only pre-rollout accounts that report no EAS get\n * `setEas`, sent by the admin EOA.\n */\nexport async function ensureModularPublishBootstrap(managedAddress: string): Promise<Account> {\n syncPublishInAppAuthToken()\n const managedWallet = getManagedAccountWallet()\n await managedWallet.autoConnect({ client: getClient(), chain: getPublishThirdwebChain() })\n const managedAccount = managedWallet.getAccount()\n if (!managedAccount) {\n throw new ManagedAccountPublishError(\n `Could not connect the managed publishing account on ${getPublishChainName()}. Reconnect with the same sign-in method and try again.`,\n 'MANAGED_ACCOUNT_UNAVAILABLE',\n managedAddress,\n )\n }\n if (managedAccount.address.toLowerCase() !== managedAddress.toLowerCase()) {\n throw new ManagedAccountPublishError(\n `The connected managed account (${managedAccount.address}) is not the publishing account ${managedAddress}. Reconnect with the sign-in method that owns it.`,\n 'MANAGED_ACCOUNT_UNAVAILABLE',\n managedAddress,\n )\n }\n\n await ensureManagedAccountEasConfigured(managedAddress, async () =>\n fromThirdwebAccount(await getManagedAccountAdmin(managedAddress)),\n )\n return managedAccount\n}\n"],"mappings":";;;;;AAiBA,eAAsBW,EAA8B,GAA0C;CAC5F,EAA0B;CAC1B,IAAMC,IAAgBT,EAAwB;CAC9C,MAAMS,EAAc,YAAY;EAAE,QAAQN,EAAU;EAAG,OAAOF,EAAwB;CAAE,CAAC;CACzF,IAAMS,IAAiBD,EAAc,WAAW;CAChD,IAAI,CAACC,GACH,MAAM,IAAIN,EACR,uDAAuDC,EAAoB,EAAE,0DAC7E,+BACAM,CACF;CAEF,IAAID,EAAe,QAAQ,YAAY,MAAMC,EAAe,YAAY,GACtE,MAAM,IAAIP,EACR,kCAAkCM,EAAe,QAAQ,kCAAkCC,EAAe,oDAC1G,+BACAA,CACF;CAMF,OAHA,MAAMb,EAAkCa,GAAgB,YACtDT,EAAoB,MAAMI,EAAuBK,CAAc,CAAC,CAClE,GACOD;AACT"}
|
package/dist/{ensureSmartWalletThenPublish-DcuHyKXL.js → ensureSmartWalletThenPublish-C2FS784-.js}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as e } from "./rolldown-runtime-Dy4uBu1J.js";
|
|
2
|
-
import { H as t, Tt as n, U as r, Z as i, _t as a, a as o, f as s, gt as c, qt as l, t as u, wt as d } from "./chainConfig-
|
|
2
|
+
import { H as t, Tt as n, U as r, Z as i, _t as a, a as o, f as s, gt as c, qt as l, t as u, wt as d } from "./chainConfig-CD-RgKkA.js";
|
|
3
3
|
import { r as f } from "./publishWalletRegistry-BaQe9rIR.js";
|
|
4
4
|
import { ethers as p } from "ethers";
|
|
5
5
|
//#region src/helpers/ensureSmartWalletThenPublish.ts
|
|
@@ -44,4 +44,4 @@ async function v(e, n, u, d) {
|
|
|
44
44
|
//#endregion
|
|
45
45
|
export { m as n, v as t };
|
|
46
46
|
|
|
47
|
-
//# sourceMappingURL=ensureSmartWalletThenPublish-
|
|
47
|
+
//# sourceMappingURL=ensureSmartWalletThenPublish-C2FS784-.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensureSmartWalletThenPublish-
|
|
1
|
+
{"version":3,"file":"ensureSmartWalletThenPublish-C2FS784-.js","names":["__exportAll","getConnectedManagedAccountAddress","isSeedSigner","getConnectedModularAccount","resolveSmartWalletForPublish","getPublishThirdwebChain","getPublishConfig","startPublish","fromThirdwebAccount","ManagedAccountPublishError","getPublishChainName","isPublishWallet","getPublishWallet","ensureSmartWalletThenPublish_exports","ensureSmartWalletThenPublish","MSG_NO_ACCOUNT_MODULAR","MSG_MANAGED_UNAVAILABLE","coerceDataItemSigner","signer","ethers","config","address","getAddress","modularAccount","managedAddress","cause","wallet","item","options","resolved","activeAccount"],"sources":["../src/helpers/ensureSmartWalletThenPublish.ts"],"sourcesContent":["import type { Item } from '@seedprotocol/sdk'\nimport type { Account } from 'thirdweb/wallets'\nimport {\n getConnectedManagedAccountAddress,\n getConnectedModularAccount,\n resolveSmartWalletForPublish,\n} from './thirdweb'\nimport { fromThirdwebAccount } from './adapters/thirdwebAccount'\nimport { isPublishWallet, isSeedSigner, type PublishWallet, type SeedSigner } from './seedSigner'\nimport { ethers } from 'ethers'\nimport { startPublish } from './ensureWalletThenPublish'\nimport { getPublishWallet } from './publishWalletRegistry'\nimport type { CreatePublishOptions } from '../config'\nimport { getPublishConfig } from '../config'\nimport { ManagedAccountPublishError } from '../errors'\nimport { getPublishThirdwebChain } from './thirdwebChain'\nimport { getPublishChainName } from './chainConfig'\n\nexport type EnsureSmartWalletResult =\n | Extract<import('./ensureWalletThenPublish').EnsureWalletThenPublishResult, { outcome: 'started' | 'already_publishing' }>\n | { outcome: 'no_address' }\n | { outcome: 'needs_deploy' }\n | { outcome: 'managed_not_ready'; error: ManagedAccountPublishError }\n\nconst MSG_NO_ACCOUNT_MODULAR =\n 'A connected wallet is required for publishing with the modular executor. Connect your wallet and try again.'\n\nconst MSG_MANAGED_UNAVAILABLE = () =>\n `Could not connect the managed publishing account on ${getPublishChainName()}. Reconnect with the same sign-in method and try again.`\n\nfunction coerceDataItemSigner(\n signer: CreatePublishOptions['dataItemSigner'] | Account | SeedSigner | PublishWallet | undefined,\n): CreatePublishOptions['dataItemSigner'] {\n if (!signer) return undefined\n if (signer instanceof ethers.Wallet) return signer\n if (isPublishWallet(signer)) return signer.signer\n if (isSeedSigner(signer)) return signer\n return fromThirdwebAccount(signer as Account).signer\n}\n\n/**\n * Thirdweb path: resolves the smart wallet for the current account; if deployed, starts publish.\n * Prefer {@link ensureWalletThenPublish} for vendor-neutral entry.\n */\nexport async function ensureSmartWalletThenPublish(\n item: Item<any>,\n activeAccount: Account | null | undefined,\n getAddress: () => Promise<string | null>,\n options?: CreatePublishOptions,\n): Promise<EnsureSmartWalletResult> {\n const config = getPublishConfig()\n const address = await getAddress()\n if (!address || !address.trim()) {\n return { outcome: 'no_address' }\n }\n\n if (config.useModularExecutor) {\n const modularAccount = await getConnectedModularAccount()\n if (!modularAccount) {\n return {\n outcome: 'managed_not_ready',\n error: new ManagedAccountPublishError(MSG_NO_ACCOUNT_MODULAR, 'MANAGED_ACCOUNT_UNAVAILABLE'),\n }\n }\n\n let managedAddress: string\n try {\n managedAddress = await getConnectedManagedAccountAddress(getPublishThirdwebChain())\n } catch (cause) {\n return {\n outcome: 'managed_not_ready',\n error: new ManagedAccountPublishError(\n MSG_MANAGED_UNAVAILABLE(),\n 'MANAGED_ACCOUNT_UNAVAILABLE',\n undefined,\n cause,\n ),\n }\n }\n\n const wallet = fromThirdwebAccount(modularAccount, { kind: 'smart' })\n return startPublish(item, managedAddress, wallet, {\n ...options,\n dataItemSigner: coerceDataItemSigner(options?.dataItemSigner) ?? wallet.signer,\n })\n }\n\n const resolved = await resolveSmartWalletForPublish(activeAccount ?? null)\n if ('address' in resolved) {\n const wallet = fromThirdwebAccount(resolved.account, { kind: 'smart' })\n return startPublish(item, resolved.address, wallet, {\n ...options,\n // The smart account can't sign data items; ConnectButton registers its admin EOA for that.\n dataItemSigner:\n coerceDataItemSigner(options?.dataItemSigner) ?? getPublishWallet()?.dataItemSigner,\n })\n }\n return { outcome: 'needs_deploy' }\n}\n"],"mappings":";;;;;sEAwBMe,IACJ,+GAEIC,UACJ,uDAAuDN,EAAoB,EAAE;AAE/E,SAASO,EACP,GACwC;CACxC,IAAKC,GAIL,OAHIA,aAAkBC,EAAO,SAAeD,IACxCP,EAAgBO,CAAM,IAAUA,EAAO,SACvChB,EAAagB,CAAM,IAAUA,IAC1BV,EAAoBU,CAAiB,CAAC,CAAC;AAChD;AAMA,eAAsBJ,EACpB,GACA,GACA,GACA,GACkC;CAClC,IAAMM,IAASd,EAAiB,GAC1Be,IAAU,MAAMC,EAAW;CACjC,IAAI,CAACD,KAAW,CAACA,EAAQ,KAAK,GAC5B,OAAO,EAAE,SAAS,aAAa;CAGjC,IAAID,EAAO,oBAAoB;EAC7B,IAAMG,IAAiB,MAAMpB,EAA2B;EACxD,IAAI,CAACoB,GACH,OAAO;GACL,SAAS;GACT,OAAO,IAAId,EAA2BM,GAAwB,6BAA6B;EAC7F;EAGF,IAAIS;EACJ,IAAI;GACF,IAAiB,MAAMvB,EAAkCI,EAAwB,CAAC;EACpF,SAASoB,GAAO;GACd,OAAO;IACL,SAAS;IACT,OAAO,IAAIhB,EACTO,EAAwB,GACxB,+BACA,KAAA,GACAS,CACF;GACF;EACF;EAEA,IAAMC,IAASlB,EAAoBe,GAAgB,EAAE,MAAM,QAAQ,CAAC;EACpE,OAAOhB,EAAaoB,GAAMH,GAAgBE,GAAQ;GAChD,GAAGE;GACH,gBAAgBX,EAAqBW,GAAS,cAAc,KAAKF,EAAO;EAC1E,CAAC;CACH;CAEA,IAAMG,IAAW,MAAMzB,EAA6B0B,KAAiB,IAAI;CACzE,IAAI,aAAaD,GAAU;EACzB,IAAMH,IAASlB,EAAoBqB,EAAS,SAAS,EAAE,MAAM,QAAQ,CAAC;EACtE,OAAOtB,EAAaoB,GAAME,EAAS,SAASH,GAAQ;GAClD,GAAGE;GAEH,gBACEX,EAAqBW,GAAS,cAAc,KAAKhB,EAAiB,CAAC,EAAE;EACzE,CAAC;CACH;CACA,OAAO,EAAE,SAAS,eAAe;AACnC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publishItem.d.ts","sourceRoot":"","sources":["../../src/helpers/publishItem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"publishItem.d.ts","sourceRoot":"","sources":["../../src/helpers/publishItem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAiCtC;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CjG;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB/F"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { $t as e, A as t, At as n, Bt as r, C as i, Ct as a, D as o, Dt as s, E as c, Et as l, F as u, Ft as d, Gt as f, I as p, It as m, Jt as h, Kt as g, Lt as _, Mt as ee, Nt as v, O as y, Ot as te, Pt as ne, Qt as re, Rt as ie, S as ae, St as oe, T as se, Tt as ce, Vt as le, Wt as b, Xt as ue, Yt as de, Zt as fe, _ as pe, a as x, an as me, at as he, b as ge, bt as _e, c as ve, cn as ye, ct as be, d as xe, dt as Se, en as Ce, ft as we, g as Te, h as Ee, i as De, in as Oe, jt as ke, k as Ae, kt as je, l as Me, lt as Ne, m as Pe, n as Fe, nn as Ie, o as Le, on as Re, ot as ze, p as Be, pt as Ve, qt as He, r as Ue, rn as We, s as Ge, sn as S, st as Ke, t as qe, tn as Je, u as Ye, ut as Xe, v as Ze, vt as Qe, w as $e, wt as C, x as et, xt as tt, y as nt, yt as rt } from "./chainConfig-
|
|
1
|
+
import { $t as e, A as t, At as n, Bt as r, C as i, Ct as a, D as o, Dt as s, E as c, Et as l, F as u, Ft as d, Gt as f, I as p, It as m, Jt as h, Kt as g, Lt as _, Mt as ee, Nt as v, O as y, Ot as te, Pt as ne, Qt as re, Rt as ie, S as ae, St as oe, T as se, Tt as ce, Vt as le, Wt as b, Xt as ue, Yt as de, Zt as fe, _ as pe, a as x, an as me, at as he, b as ge, bt as _e, c as ve, cn as ye, ct as be, d as xe, dt as Se, en as Ce, ft as we, g as Te, h as Ee, i as De, in as Oe, jt as ke, k as Ae, kt as je, l as Me, lt as Ne, m as Pe, n as Fe, nn as Ie, o as Le, on as Re, ot as ze, p as Be, pt as Ve, qt as He, r as Ue, rn as We, s as Ge, sn as S, st as Ke, t as qe, tn as Je, u as Ye, ut as Xe, v as Ze, vt as Qe, w as $e, wt as C, x as et, xt as tt, y as nt, yt as rt } from "./chainConfig-CD-RgKkA.js";
|
|
2
2
|
import { i as it, r as w, t as at } from "./publishWalletRegistry-BaQe9rIR.js";
|
|
3
|
-
import { a as ot, c as st, g as ct, h as lt, i as ut, l as dt, n as ft, o as pt, r as mt, s as ht, t as gt } from "./publishAuthorization-
|
|
3
|
+
import { a as ot, c as st, g as ct, h as lt, i as ut, l as dt, n as ft, o as pt, r as mt, s as ht, t as gt } from "./publishAuthorization-D1HYOu23.js";
|
|
4
4
|
import { n as _t, r as vt } from "./collectBatchUids-CnIe9jUB.js";
|
|
5
5
|
import { BaseDb as T, arweaveL1FinalizeJobs as E, isItemOwned as yt, publishProcesses as D, uploadProcesses as bt } from "@seedprotocol/sdk";
|
|
6
6
|
import { createWalletClient as xt, custom as St, defineChain as Ct } from "viem";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as e } from "./rolldown-runtime-Dy4uBu1J.js";
|
|
2
|
-
import { G as t, Q as n, _t as r, it as i, qt as a, t as o, zt as s } from "./chainConfig-
|
|
2
|
+
import { G as t, Q as n, _t as r, it as i, qt as a, t as o, zt as s } from "./chainConfig-CD-RgKkA.js";
|
|
3
3
|
//#region src/helpers/managedAccountAdmin.ts
|
|
4
4
|
var c = /* @__PURE__ */ e({ getManagedAccountAdmin: () => l });
|
|
5
5
|
async function l(e) {
|
|
@@ -23,4 +23,4 @@ async function l(e) {
|
|
|
23
23
|
//#endregion
|
|
24
24
|
export { c as n, l as t };
|
|
25
25
|
|
|
26
|
-
//# sourceMappingURL=managedAccountAdmin-
|
|
26
|
+
//# sourceMappingURL=managedAccountAdmin-BmO4USir.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"managedAccountAdmin-
|
|
1
|
+
{"version":3,"file":"managedAccountAdmin-BmO4USir.js","names":["__exportAll","getModularAccountWallet","syncPublishInAppAuthToken","getPublishThirdwebChain","getClient","ManagedAccountPublishError","getPublishChainName","readIsAdmin","managedAccountAdmin_exports","getManagedAccountAdmin","wallet","admin","managedAddress","isAdmin","cause"],"sources":["../src/helpers/managedAccountAdmin.ts"],"sourcesContent":["import type { Address } from 'viem'\nimport type { Account } from 'thirdweb/wallets'\nimport { ManagedAccountPublishError } from '../errors'\nimport { getPublishChainName } from './chainConfig'\nimport { readIsAdmin } from './contracts'\nimport { getClient, getModularAccountWallet, syncPublishInAppAuthToken } from './thirdweb'\nimport { getPublishThirdwebChain } from './thirdwebChain'\n\n/**\n * Connects the user's in-app EOA, the ManagedAccount's admin, for admin-only transactions such as\n * `installSeedExecutor`. Those must come from the admin directly: the new contracts reject them as\n * self-calls from the smart account. `PublishConfig.thirdweb.modularWalletMode` decides whether\n * the EOA sends gas-sponsored EIP-7702 transactions (default) or plain funded ones.\n *\n * @throws ManagedAccountPublishError `MANAGED_ACCOUNT_UNAVAILABLE` when the wallet is not\n * connected or is not an admin of `managedAddress`\n */\nexport async function getManagedAccountAdmin(managedAddress: string): Promise<Account> {\n syncPublishInAppAuthToken()\n const wallet = getModularAccountWallet()\n await wallet.autoConnect({ client: getClient(), chain: getPublishThirdwebChain() })\n const admin = wallet.getAccount()\n if (!admin) {\n throw new ManagedAccountPublishError(\n `Could not connect the in-app wallet that administers your publishing account on ${getPublishChainName()}. Reconnect with the same sign-in method and try again.`,\n 'MANAGED_ACCOUNT_UNAVAILABLE',\n managedAddress,\n )\n }\n let isAdmin: boolean\n try {\n isAdmin = await readIsAdmin(managedAddress as Address, admin.address as Address)\n } catch (cause) {\n throw new ManagedAccountPublishError(\n `Could not check the admins of your publishing account on ${getPublishChainName()}.`,\n 'MANAGED_ACCOUNT_UNAVAILABLE',\n managedAddress,\n cause,\n )\n }\n if (!isAdmin) {\n throw new ManagedAccountPublishError(\n `The connected in-app wallet (${admin.address}) is not an admin of publishing account ${managedAddress}.`,\n 'MANAGED_ACCOUNT_UNAVAILABLE',\n managedAddress,\n )\n }\n return admin\n}\n"],"mappings":";;;;AAiBA,eAAsBS,EAAuB,GAA0C;CACrF,EAA0B;CAC1B,IAAMC,IAAST,EAAwB;CACvC,MAAMS,EAAO,YAAY;EAAE,QAAQN,EAAU;EAAG,OAAOD,EAAwB;CAAE,CAAC;CAClF,IAAMQ,IAAQD,EAAO,WAAW;CAChC,IAAI,CAACC,GACH,MAAM,IAAIN,EACR,mFAAmFC,EAAoB,EAAE,0DACzG,+BACAM,CACF;CAEF,IAAIC;CACJ,IAAI;EACF,IAAU,MAAMN,EAAYK,GAA2BD,EAAM,OAAkB;CACjF,SAASG,GAAO;EACd,MAAM,IAAIT,EACR,4DAA4DC,EAAoB,EAAE,IAClF,+BACAM,GACAE,CACF;CACF;CACA,IAAI,CAACD,GACH,MAAM,IAAIR,EACR,gCAAgCM,EAAM,QAAQ,0CAA0CC,EAAe,IACvG,+BACAA,CACF;CAEF,OAAOD;AACT"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as e, At as t, Et as n, O as r, Ot as i, Wt as a, a as o, k as s, kt as c, wt as l } from "./chainConfig-
|
|
1
|
+
import { A as e, At as t, Et as n, O as r, Ot as i, Wt as a, a as o, k as s, kt as c, wt as l } from "./chainConfig-CD-RgKkA.js";
|
|
2
2
|
import { keccak256 as u, toUtf8Bytes as d } from "ethers";
|
|
3
3
|
import { SchemaEncoder as f, SchemaRegistry as p, ZERO_BYTES32 as m } from "@ethereum-attestation-service/eas-sdk";
|
|
4
4
|
import { createContext as h, useContext as g } from "react";
|
|
@@ -173,4 +173,4 @@ async function q(e) {
|
|
|
173
173
|
//#endregion
|
|
174
174
|
export { G as a, H as c, N as d, P as f, A as g, k as h, q as i, K as l, j as m, x as n, W as o, F as p, C as r, U as s, y as t, M as u };
|
|
175
175
|
|
|
176
|
-
//# sourceMappingURL=publishAuthorization-
|
|
176
|
+
//# sourceMappingURL=publishAuthorization-D1HYOu23.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publishAuthorization-D1aMORBP.js","names":["ZERO_ADDRESS","registerSchema","prepareEasMultiRevoke","isSeedTxSender","prepareNameSchemaAttestation","getAttestationUidFromReceipt","waitForPublishReceipt","getPublishConfig","getSchemaRecord","prepareEasAttest","isPublishWallet","PUBLISH_AUTHORIZATION_SCHEMA_DEF$1","PUBLISH_AUTHORIZATION_SCHEMA_NAME$1","PUBLISH_AUTHORIZATION_SCOPES$1","PublishConfigContext","createContext","usePublishConfig","config","useContext","approvedTargetsForAutomationPublish","module","PUBLISH_AUTOMATION_SCOPES","buildAutomationSessionKeyPermissions","out","params","hashAutomationSessionKeyPermissions","material","permissions","a","scopes","keccak256","toUtf8Bytes","toThirdwebSessionKeyPermissions","base","RESOLVER_ADDRESS","REVOCABLE","ZERO_ADDRESS$1","resolveTxSender","account","sendAndWait","result","txSender","tx","assertAddress","t","addr","label","getPublishAuthorizationSchemaUid","SchemaRegistry","PUBLISH_AUTHORIZATION_SCHEMA_DEF","ensurePublishAuthorizationSchema","sender","schemaUid","PUBLISH_AUTHORIZATION_SCHEMA_NAME","encodePublishAuthorizationAttestationData","SchemaEncoder","normalizeBytes32Hex","attestPublishAuthorization","identity","sessionKey","app","grantedAt","expiresAt","PUBLISH_AUTHORIZATION_SCOPES","permissionsHash","ZERO_BYTES32","expirationTime","PUBLISH_AUTHORIZATION_DEFAULT_EXPIRATION_SECS","data","receipt","uid","easContractAddress","isValidEasAttestationUid","revokePublishAuthorization","assessPublishAuthorizationLive","row","getPublishAuthorizationFromEas","r","decoded","decodePublishAuthorizationData","assessPublishAuthorization"],"sources":["../src/react/PublishConfigContext.tsx","../src/helpers/approvedTargetsForAutomationPublish.ts","../src/helpers/automationSessionKeyPermissions.ts","../src/services/publishAuthorization/index.ts"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport type { PublishConfig } from '../config'\n\nexport const PublishConfigContext = createContext<PublishConfig | null>(null)\n\nexport function usePublishConfig(): PublishConfig {\n const config = useContext(PublishConfigContext)\n if (!config) {\n throw new Error(\n 'usePublishConfig: PublishConfig is missing. Pass config to PublishProvider or call initPublish() before render.',\n )\n }\n return config\n}\n","import { getPublishConfig } from '../config'\n\n/**\n * Allowlisted call targets for session keys on a ManagedAccount.\n * Returns only the configured Seed executor module — never the ManagedAccount or raw EAS\n * (those would allow `setEas` / arbitrary attestations).\n *\n * @throws if `modularAccountModuleContract` is unset or invalid\n */\nexport function approvedTargetsForAutomationPublish(): `0x${string}`[] {\n const module = getPublishConfig().modularAccountModuleContract?.trim()\n if (!module || !/^0x[0-9a-fA-F]{40}$/.test(module)) {\n throw new Error(\n '@seedprotocol/publish: session keys require PublishConfig.modularAccountModuleContract ' +\n '(their only approved target is the Seed executor module).',\n )\n }\n return [module.toLowerCase() as `0x${string}`]\n}\n","import { keccak256, toUtf8Bytes } from 'ethers'\nimport { approvedTargetsForAutomationPublish } from './approvedTargetsForAutomationPublish'\n\n/** Fixed v1 scopes for publish automation grants. */\nexport const PUBLISH_AUTOMATION_SCOPES = 'publish,revoke' as const\n\nexport type AutomationSessionKeyPermissions = {\n approvedTargets: `0x${string}`[]\n nativeTokenLimitPerTransaction: number\n /** Unix seconds; omit for Thirdweb default long window. */\n expiresAt?: number\n}\n\n/**\n * Canonical permissions for an automation session key (module-only targets).\n */\nexport function buildAutomationSessionKeyPermissions(params?: {\n expiresAt?: number\n}): AutomationSessionKeyPermissions {\n const approvedTargets = approvedTargetsForAutomationPublish()\n const out: AutomationSessionKeyPermissions = {\n approvedTargets,\n nativeTokenLimitPerTransaction: 0,\n }\n if (typeof params?.expiresAt === 'number' && params.expiresAt > 0) {\n out.expiresAt = Math.trunc(params.expiresAt)\n }\n return out\n}\n\n/**\n * Deterministic permissions hash for the PublishAuthorization sidecar.\n * Material: sorted targets | nativeLimit | expiresAt (0 if unset) | scopes\n */\nexport function hashAutomationSessionKeyPermissions(\n permissions: AutomationSessionKeyPermissions,\n scopes: string = PUBLISH_AUTOMATION_SCOPES,\n): `0x${string}` {\n const targets = [...permissions.approvedTargets].map((a) => a.toLowerCase()).sort().join(',')\n const limit = permissions.nativeTokenLimitPerTransaction\n const expiresAt = permissions.expiresAt ?? 0\n const material = `${targets}|${limit}|${expiresAt}|${scopes.trim()}`\n return keccak256(toUtf8Bytes(material)) as `0x${string}`\n}\n\n/** Shape passed to Thirdweb `addSessionKey` / `shouldUpdateSessionKey`. */\nexport function toThirdwebSessionKeyPermissions(permissions: AutomationSessionKeyPermissions): {\n approvedTargets: `0x${string}`[]\n nativeTokenLimitPerTransaction: number\n permissionEndTimestamp?: Date\n} {\n const base = {\n approvedTargets: permissions.approvedTargets,\n nativeTokenLimitPerTransaction: permissions.nativeTokenLimitPerTransaction,\n }\n if (permissions.expiresAt != null && permissions.expiresAt > 0) {\n return {\n ...base,\n permissionEndTimestamp: new Date(permissions.expiresAt * 1000),\n }\n }\n return base\n}\n","import {\n PUBLISH_AUTHORIZATION_DEFAULT_EXPIRATION_SECS,\n PUBLISH_AUTHORIZATION_SCHEMA_DEF,\n PUBLISH_AUTHORIZATION_SCHEMA_NAME,\n PUBLISH_AUTHORIZATION_SCOPES,\n assessPublishAuthorization,\n decodePublishAuthorizationData,\n getPublishAuthorizationFromEas,\n type PublishAuthorizationAssessResult,\n type PublishAuthorizationDecoded,\n} from '@seedprotocol/eas'\nimport { SchemaEncoder, ZERO_BYTES32 } from '@ethereum-attestation-service/eas-sdk'\nimport { SchemaRegistry } from '@ethereum-attestation-service/eas-sdk'\nimport { prepareEasAttest, prepareEasMultiRevoke } from '~/helpers/easDirect'\nimport { getSchemaRecord, registerSchema } from '~/helpers/schemaRegistry'\nimport { prepareNameSchemaAttestation } from '~/helpers/nameSchemaAttestation'\nimport { waitForPublishReceipt } from '~/helpers/chainClient'\nimport { getPublishConfig } from '~/config'\nimport {\n isPublishWallet,\n isSeedTxSender,\n type PublishWallet,\n type SeedTxSender,\n} from '~/helpers/seedSigner'\nimport { getAttestationUidFromReceipt } from '~/helpers/easDirect'\nimport { normalizeBytes32Hex, isValidEasAttestationUid } from '@seedprotocol/eas'\nimport {\n buildAutomationSessionKeyPermissions,\n hashAutomationSessionKeyPermissions,\n PUBLISH_AUTOMATION_SCOPES,\n} from '~/helpers/automationSessionKeyPermissions'\n\nexport {\n PUBLISH_AUTHORIZATION_SCHEMA_DEF,\n PUBLISH_AUTHORIZATION_SCHEMA_NAME,\n PUBLISH_AUTHORIZATION_SCOPES,\n} from '@seedprotocol/eas'\n\nconst RESOLVER_ADDRESS = '0x0000000000000000000000000000000000000000'\nconst REVOCABLE = true\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'\n\nfunction resolveTxSender(account: PublishWallet | SeedTxSender): SeedTxSender {\n if (isPublishWallet(account)) return account.txSender\n if (isSeedTxSender(account)) return account\n throw new Error(\n '@seedprotocol/publish: publish authorization write APIs require a PublishWallet or SeedTxSender',\n )\n}\n\nasync function sendAndWait(\n txSender: SeedTxSender,\n tx: Parameters<SeedTxSender['sendTransaction']>[0],\n) {\n const result = await txSender.sendTransaction(tx)\n return waitForPublishReceipt(result.transactionHash)\n}\n\nfunction assertAddress(label: string, addr: string): `0x${string}` {\n const t = addr.trim()\n if (!/^0x[0-9a-fA-F]{40}$/.test(t)) {\n throw new Error(`@seedprotocol/publish: ${label} must be a valid address`)\n }\n return t as `0x${string}`\n}\n\n/** Deterministic on-chain schema UID for {@link PUBLISH_AUTHORIZATION_SCHEMA_DEF}. */\nexport function getPublishAuthorizationSchemaUid(): `0x${string}` {\n return SchemaRegistry.getSchemaUID(\n PUBLISH_AUTHORIZATION_SCHEMA_DEF,\n RESOLVER_ADDRESS as `0x${string}`,\n REVOCABLE,\n ) as `0x${string}`\n}\n\n/**\n * Registers the PublishAuthorization EAS schema (if missing) and creates a Schema #1 name attestation.\n */\nexport async function ensurePublishAuthorizationSchema(\n account: PublishWallet | SeedTxSender,\n): Promise<`0x${string}`> {\n const sender = resolveTxSender(account)\n const schemaUid = getPublishAuthorizationSchemaUid()\n const onChain = await getSchemaRecord(schemaUid)\n if (!onChain) {\n await sendAndWait(\n sender,\n registerSchema({\n schema: PUBLISH_AUTHORIZATION_SCHEMA_DEF,\n resolverAddress: RESOLVER_ADDRESS,\n revocable: REVOCABLE,\n }),\n )\n await sendAndWait(\n sender,\n prepareNameSchemaAttestation({\n schemaUid,\n schemaName: PUBLISH_AUTHORIZATION_SCHEMA_NAME,\n }),\n )\n }\n return schemaUid\n}\n\nexport function encodePublishAuthorizationAttestationData(params: {\n identity: string\n sessionKey: string\n app: string\n scopes: string\n grantedAt: number\n expiresAt: number\n permissionsHash: string\n}): `0x${string}` {\n const schemaEncoder = new SchemaEncoder(PUBLISH_AUTHORIZATION_SCHEMA_DEF)\n const encodedData = schemaEncoder.encodeData([\n { name: 'identity', value: params.identity as `0x${string}`, type: 'address' },\n { name: 'sessionKey', value: params.sessionKey as `0x${string}`, type: 'address' },\n { name: 'app', value: params.app as `0x${string}`, type: 'address' },\n { name: 'scopes', value: params.scopes, type: 'string' },\n { name: 'grantedAt', value: params.grantedAt, type: 'uint64' },\n { name: 'expiresAt', value: params.expiresAt, type: 'uint64' },\n {\n name: 'permissionsHash',\n value: normalizeBytes32Hex(params.permissionsHash) as `0x${string}`,\n type: 'bytes32',\n },\n ])\n return encodedData as `0x${string}`\n}\n\nexport type AttestPublishAuthorizationParams = {\n /** Must be the ManagedAccount (identity) wallet — becomes EAS attester. */\n wallet: PublishWallet | SeedTxSender\n identity: string\n sessionKey: string\n /** Optional app label address; defaults to zero address. */\n app?: string\n scopes?: string\n grantedAt?: number\n expiresAt?: number\n permissionsHash?: string\n ensureSchema?: boolean\n /** Override EAS expirationTime (unix seconds). */\n expirationTime?: number\n}\n\nexport type AttestPublishAuthorizationResult = {\n uid: `0x${string}`\n schemaUid: `0x${string}`\n permissionsHash: `0x${string}`\n grantedAt: number\n expiresAt: number\n expirationTime: number\n}\n\n/**\n * ManagedAccount attests a PublishAuthorization grant (recipient = session key).\n */\nexport async function attestPublishAuthorization(\n params: AttestPublishAuthorizationParams,\n): Promise<AttestPublishAuthorizationResult> {\n const sender = resolveTxSender(params.wallet)\n const schemaUid =\n params.ensureSchema === false\n ? getPublishAuthorizationSchemaUid()\n : await ensurePublishAuthorizationSchema(params.wallet)\n\n const identity = assertAddress('identity', params.identity)\n const sessionKey = assertAddress('sessionKey', params.sessionKey)\n const app = params.app?.trim()\n ? assertAddress('app', params.app)\n : (ZERO_ADDRESS as `0x${string}`)\n\n const grantedAt = params.grantedAt ?? Math.floor(Date.now() / 1000)\n const expiresAt =\n typeof params.expiresAt === 'number' && params.expiresAt > 0\n ? Math.trunc(params.expiresAt)\n : 0\n const scopes = params.scopes ?? PUBLISH_AUTHORIZATION_SCOPES\n\n const permissionsHash = normalizeBytes32Hex(\n params.permissionsHash ??\n hashAutomationSessionKeyPermissions(\n buildAutomationSessionKeyPermissions({\n expiresAt: expiresAt > 0 ? expiresAt : undefined,\n }),\n scopes === PUBLISH_AUTHORIZATION_SCOPES ? PUBLISH_AUTOMATION_SCOPES : scopes,\n ),\n ) as `0x${string}`\n\n if (permissionsHash === ZERO_BYTES32) {\n throw new Error(\n '@seedprotocol/publish: attestPublishAuthorization requires a non-zero permissionsHash',\n )\n }\n\n const expirationTime =\n typeof params.expirationTime === 'number' && params.expirationTime > 0\n ? params.expirationTime\n : expiresAt > 0\n ? expiresAt\n : grantedAt + PUBLISH_AUTHORIZATION_DEFAULT_EXPIRATION_SECS\n\n const data = encodePublishAuthorizationAttestationData({\n identity,\n sessionKey,\n app,\n scopes,\n grantedAt,\n expiresAt,\n permissionsHash,\n })\n\n const tx = prepareEasAttest({\n schema: schemaUid,\n data: {\n recipient: sessionKey,\n expirationTime: BigInt(expirationTime),\n revocable: true,\n refUID: ZERO_BYTES32 as `0x${string}`,\n data,\n value: 0n,\n },\n })\n\n const receipt = await sendAndWait(sender, tx)\n if (!receipt) {\n throw new Error('@seedprotocol/publish: attestPublishAuthorization failed — no receipt')\n }\n const { easContractAddress } = getPublishConfig()\n const uid = getAttestationUidFromReceipt(receipt, easContractAddress)\n if (!uid || !isValidEasAttestationUid(uid)) {\n throw new Error(\n '@seedprotocol/publish: attestPublishAuthorization failed — could not parse attestation UID',\n )\n }\n\n return {\n uid: uid as `0x${string}`,\n schemaUid,\n permissionsHash,\n grantedAt,\n expiresAt,\n expirationTime,\n }\n}\n\n/**\n * Revoke a PublishAuthorization sidecar (must be signed by the original ManagedAccount attester).\n */\nexport async function revokePublishAuthorization(params: {\n wallet: PublishWallet | SeedTxSender\n uid: string\n schemaUid?: string\n}): Promise<void> {\n const sender = resolveTxSender(params.wallet)\n const schemaUid = (params.schemaUid ?? getPublishAuthorizationSchemaUid()) as `0x${string}`\n const uid = normalizeBytes32Hex(params.uid) as `0x${string}`\n if (!isValidEasAttestationUid(uid)) {\n throw new Error(\n '@seedprotocol/publish: revokePublishAuthorization requires a valid attestation uid',\n )\n }\n\n const tx = prepareEasMultiRevoke([\n {\n schema: schemaUid,\n data: [{ uid }],\n },\n ])\n const receipt = await sendAndWait(sender, tx)\n if (!receipt) {\n throw new Error('@seedprotocol/publish: revokePublishAuthorization failed — no receipt')\n }\n}\n\nexport type AssessPublishAuthorizationLiveResult = {\n uid: string\n decoded: PublishAuthorizationDecoded\n assess: PublishAuthorizationAssessResult\n expirationTime?: number | null\n}\n\n/**\n * Load a PublishAuthorization attestation by uid (via identity filter + client match) and assess.\n * Prefer filtering with {@link getPublishAuthorizationFromEas} when you know identity/sessionKey.\n */\nexport async function assessPublishAuthorizationLive(params: {\n uid: string\n identities: string[]\n}): Promise<AssessPublishAuthorizationLiveResult | null> {\n const rows = await getPublishAuthorizationFromEas({\n identities: params.identities,\n excludeRevoked: false,\n })\n const row = rows.find((r) => r.id?.toLowerCase() === params.uid.toLowerCase())\n if (!row) return null\n const decoded = decodePublishAuthorizationData(row.decodedDataJson ?? '[]')\n const expirationTime =\n typeof row.expirationTime === 'number'\n ? row.expirationTime\n : typeof row.expirationTime === 'string'\n ? Number(row.expirationTime)\n : null\n return {\n uid: row.id,\n decoded,\n assess: assessPublishAuthorization({ decoded, expirationTime }),\n expirationTime,\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"publishAuthorization-D1HYOu23.js","names":["ZERO_ADDRESS","registerSchema","prepareEasMultiRevoke","isSeedTxSender","prepareNameSchemaAttestation","getAttestationUidFromReceipt","waitForPublishReceipt","getPublishConfig","getSchemaRecord","prepareEasAttest","isPublishWallet","PUBLISH_AUTHORIZATION_SCHEMA_DEF$1","PUBLISH_AUTHORIZATION_SCHEMA_NAME$1","PUBLISH_AUTHORIZATION_SCOPES$1","PublishConfigContext","createContext","usePublishConfig","config","useContext","approvedTargetsForAutomationPublish","module","PUBLISH_AUTOMATION_SCOPES","buildAutomationSessionKeyPermissions","out","params","hashAutomationSessionKeyPermissions","material","permissions","a","scopes","keccak256","toUtf8Bytes","toThirdwebSessionKeyPermissions","base","RESOLVER_ADDRESS","REVOCABLE","ZERO_ADDRESS$1","resolveTxSender","account","sendAndWait","result","txSender","tx","assertAddress","t","addr","label","getPublishAuthorizationSchemaUid","SchemaRegistry","PUBLISH_AUTHORIZATION_SCHEMA_DEF","ensurePublishAuthorizationSchema","sender","schemaUid","PUBLISH_AUTHORIZATION_SCHEMA_NAME","encodePublishAuthorizationAttestationData","SchemaEncoder","normalizeBytes32Hex","attestPublishAuthorization","identity","sessionKey","app","grantedAt","expiresAt","PUBLISH_AUTHORIZATION_SCOPES","permissionsHash","ZERO_BYTES32","expirationTime","PUBLISH_AUTHORIZATION_DEFAULT_EXPIRATION_SECS","data","receipt","uid","easContractAddress","isValidEasAttestationUid","revokePublishAuthorization","assessPublishAuthorizationLive","row","getPublishAuthorizationFromEas","r","decoded","decodePublishAuthorizationData","assessPublishAuthorization"],"sources":["../src/react/PublishConfigContext.tsx","../src/helpers/approvedTargetsForAutomationPublish.ts","../src/helpers/automationSessionKeyPermissions.ts","../src/services/publishAuthorization/index.ts"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport type { PublishConfig } from '../config'\n\nexport const PublishConfigContext = createContext<PublishConfig | null>(null)\n\nexport function usePublishConfig(): PublishConfig {\n const config = useContext(PublishConfigContext)\n if (!config) {\n throw new Error(\n 'usePublishConfig: PublishConfig is missing. Pass config to PublishProvider or call initPublish() before render.',\n )\n }\n return config\n}\n","import { getPublishConfig } from '../config'\n\n/**\n * Allowlisted call targets for session keys on a ManagedAccount.\n * Returns only the configured Seed executor module — never the ManagedAccount or raw EAS\n * (those would allow `setEas` / arbitrary attestations).\n *\n * @throws if `modularAccountModuleContract` is unset or invalid\n */\nexport function approvedTargetsForAutomationPublish(): `0x${string}`[] {\n const module = getPublishConfig().modularAccountModuleContract?.trim()\n if (!module || !/^0x[0-9a-fA-F]{40}$/.test(module)) {\n throw new Error(\n '@seedprotocol/publish: session keys require PublishConfig.modularAccountModuleContract ' +\n '(their only approved target is the Seed executor module).',\n )\n }\n return [module.toLowerCase() as `0x${string}`]\n}\n","import { keccak256, toUtf8Bytes } from 'ethers'\nimport { approvedTargetsForAutomationPublish } from './approvedTargetsForAutomationPublish'\n\n/** Fixed v1 scopes for publish automation grants. */\nexport const PUBLISH_AUTOMATION_SCOPES = 'publish,revoke' as const\n\nexport type AutomationSessionKeyPermissions = {\n approvedTargets: `0x${string}`[]\n nativeTokenLimitPerTransaction: number\n /** Unix seconds; omit for Thirdweb default long window. */\n expiresAt?: number\n}\n\n/**\n * Canonical permissions for an automation session key (module-only targets).\n */\nexport function buildAutomationSessionKeyPermissions(params?: {\n expiresAt?: number\n}): AutomationSessionKeyPermissions {\n const approvedTargets = approvedTargetsForAutomationPublish()\n const out: AutomationSessionKeyPermissions = {\n approvedTargets,\n nativeTokenLimitPerTransaction: 0,\n }\n if (typeof params?.expiresAt === 'number' && params.expiresAt > 0) {\n out.expiresAt = Math.trunc(params.expiresAt)\n }\n return out\n}\n\n/**\n * Deterministic permissions hash for the PublishAuthorization sidecar.\n * Material: sorted targets | nativeLimit | expiresAt (0 if unset) | scopes\n */\nexport function hashAutomationSessionKeyPermissions(\n permissions: AutomationSessionKeyPermissions,\n scopes: string = PUBLISH_AUTOMATION_SCOPES,\n): `0x${string}` {\n const targets = [...permissions.approvedTargets].map((a) => a.toLowerCase()).sort().join(',')\n const limit = permissions.nativeTokenLimitPerTransaction\n const expiresAt = permissions.expiresAt ?? 0\n const material = `${targets}|${limit}|${expiresAt}|${scopes.trim()}`\n return keccak256(toUtf8Bytes(material)) as `0x${string}`\n}\n\n/** Shape passed to Thirdweb `addSessionKey` / `shouldUpdateSessionKey`. */\nexport function toThirdwebSessionKeyPermissions(permissions: AutomationSessionKeyPermissions): {\n approvedTargets: `0x${string}`[]\n nativeTokenLimitPerTransaction: number\n permissionEndTimestamp?: Date\n} {\n const base = {\n approvedTargets: permissions.approvedTargets,\n nativeTokenLimitPerTransaction: permissions.nativeTokenLimitPerTransaction,\n }\n if (permissions.expiresAt != null && permissions.expiresAt > 0) {\n return {\n ...base,\n permissionEndTimestamp: new Date(permissions.expiresAt * 1000),\n }\n }\n return base\n}\n","import {\n PUBLISH_AUTHORIZATION_DEFAULT_EXPIRATION_SECS,\n PUBLISH_AUTHORIZATION_SCHEMA_DEF,\n PUBLISH_AUTHORIZATION_SCHEMA_NAME,\n PUBLISH_AUTHORIZATION_SCOPES,\n assessPublishAuthorization,\n decodePublishAuthorizationData,\n getPublishAuthorizationFromEas,\n type PublishAuthorizationAssessResult,\n type PublishAuthorizationDecoded,\n} from '@seedprotocol/eas'\nimport { SchemaEncoder, ZERO_BYTES32 } from '@ethereum-attestation-service/eas-sdk'\nimport { SchemaRegistry } from '@ethereum-attestation-service/eas-sdk'\nimport { prepareEasAttest, prepareEasMultiRevoke } from '~/helpers/easDirect'\nimport { getSchemaRecord, registerSchema } from '~/helpers/schemaRegistry'\nimport { prepareNameSchemaAttestation } from '~/helpers/nameSchemaAttestation'\nimport { waitForPublishReceipt } from '~/helpers/chainClient'\nimport { getPublishConfig } from '~/config'\nimport {\n isPublishWallet,\n isSeedTxSender,\n type PublishWallet,\n type SeedTxSender,\n} from '~/helpers/seedSigner'\nimport { getAttestationUidFromReceipt } from '~/helpers/easDirect'\nimport { normalizeBytes32Hex, isValidEasAttestationUid } from '@seedprotocol/eas'\nimport {\n buildAutomationSessionKeyPermissions,\n hashAutomationSessionKeyPermissions,\n PUBLISH_AUTOMATION_SCOPES,\n} from '~/helpers/automationSessionKeyPermissions'\n\nexport {\n PUBLISH_AUTHORIZATION_SCHEMA_DEF,\n PUBLISH_AUTHORIZATION_SCHEMA_NAME,\n PUBLISH_AUTHORIZATION_SCOPES,\n} from '@seedprotocol/eas'\n\nconst RESOLVER_ADDRESS = '0x0000000000000000000000000000000000000000'\nconst REVOCABLE = true\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'\n\nfunction resolveTxSender(account: PublishWallet | SeedTxSender): SeedTxSender {\n if (isPublishWallet(account)) return account.txSender\n if (isSeedTxSender(account)) return account\n throw new Error(\n '@seedprotocol/publish: publish authorization write APIs require a PublishWallet or SeedTxSender',\n )\n}\n\nasync function sendAndWait(\n txSender: SeedTxSender,\n tx: Parameters<SeedTxSender['sendTransaction']>[0],\n) {\n const result = await txSender.sendTransaction(tx)\n return waitForPublishReceipt(result.transactionHash)\n}\n\nfunction assertAddress(label: string, addr: string): `0x${string}` {\n const t = addr.trim()\n if (!/^0x[0-9a-fA-F]{40}$/.test(t)) {\n throw new Error(`@seedprotocol/publish: ${label} must be a valid address`)\n }\n return t as `0x${string}`\n}\n\n/** Deterministic on-chain schema UID for {@link PUBLISH_AUTHORIZATION_SCHEMA_DEF}. */\nexport function getPublishAuthorizationSchemaUid(): `0x${string}` {\n return SchemaRegistry.getSchemaUID(\n PUBLISH_AUTHORIZATION_SCHEMA_DEF,\n RESOLVER_ADDRESS as `0x${string}`,\n REVOCABLE,\n ) as `0x${string}`\n}\n\n/**\n * Registers the PublishAuthorization EAS schema (if missing) and creates a Schema #1 name attestation.\n */\nexport async function ensurePublishAuthorizationSchema(\n account: PublishWallet | SeedTxSender,\n): Promise<`0x${string}`> {\n const sender = resolveTxSender(account)\n const schemaUid = getPublishAuthorizationSchemaUid()\n const onChain = await getSchemaRecord(schemaUid)\n if (!onChain) {\n await sendAndWait(\n sender,\n registerSchema({\n schema: PUBLISH_AUTHORIZATION_SCHEMA_DEF,\n resolverAddress: RESOLVER_ADDRESS,\n revocable: REVOCABLE,\n }),\n )\n await sendAndWait(\n sender,\n prepareNameSchemaAttestation({\n schemaUid,\n schemaName: PUBLISH_AUTHORIZATION_SCHEMA_NAME,\n }),\n )\n }\n return schemaUid\n}\n\nexport function encodePublishAuthorizationAttestationData(params: {\n identity: string\n sessionKey: string\n app: string\n scopes: string\n grantedAt: number\n expiresAt: number\n permissionsHash: string\n}): `0x${string}` {\n const schemaEncoder = new SchemaEncoder(PUBLISH_AUTHORIZATION_SCHEMA_DEF)\n const encodedData = schemaEncoder.encodeData([\n { name: 'identity', value: params.identity as `0x${string}`, type: 'address' },\n { name: 'sessionKey', value: params.sessionKey as `0x${string}`, type: 'address' },\n { name: 'app', value: params.app as `0x${string}`, type: 'address' },\n { name: 'scopes', value: params.scopes, type: 'string' },\n { name: 'grantedAt', value: params.grantedAt, type: 'uint64' },\n { name: 'expiresAt', value: params.expiresAt, type: 'uint64' },\n {\n name: 'permissionsHash',\n value: normalizeBytes32Hex(params.permissionsHash) as `0x${string}`,\n type: 'bytes32',\n },\n ])\n return encodedData as `0x${string}`\n}\n\nexport type AttestPublishAuthorizationParams = {\n /** Must be the ManagedAccount (identity) wallet — becomes EAS attester. */\n wallet: PublishWallet | SeedTxSender\n identity: string\n sessionKey: string\n /** Optional app label address; defaults to zero address. */\n app?: string\n scopes?: string\n grantedAt?: number\n expiresAt?: number\n permissionsHash?: string\n ensureSchema?: boolean\n /** Override EAS expirationTime (unix seconds). */\n expirationTime?: number\n}\n\nexport type AttestPublishAuthorizationResult = {\n uid: `0x${string}`\n schemaUid: `0x${string}`\n permissionsHash: `0x${string}`\n grantedAt: number\n expiresAt: number\n expirationTime: number\n}\n\n/**\n * ManagedAccount attests a PublishAuthorization grant (recipient = session key).\n */\nexport async function attestPublishAuthorization(\n params: AttestPublishAuthorizationParams,\n): Promise<AttestPublishAuthorizationResult> {\n const sender = resolveTxSender(params.wallet)\n const schemaUid =\n params.ensureSchema === false\n ? getPublishAuthorizationSchemaUid()\n : await ensurePublishAuthorizationSchema(params.wallet)\n\n const identity = assertAddress('identity', params.identity)\n const sessionKey = assertAddress('sessionKey', params.sessionKey)\n const app = params.app?.trim()\n ? assertAddress('app', params.app)\n : (ZERO_ADDRESS as `0x${string}`)\n\n const grantedAt = params.grantedAt ?? Math.floor(Date.now() / 1000)\n const expiresAt =\n typeof params.expiresAt === 'number' && params.expiresAt > 0\n ? Math.trunc(params.expiresAt)\n : 0\n const scopes = params.scopes ?? PUBLISH_AUTHORIZATION_SCOPES\n\n const permissionsHash = normalizeBytes32Hex(\n params.permissionsHash ??\n hashAutomationSessionKeyPermissions(\n buildAutomationSessionKeyPermissions({\n expiresAt: expiresAt > 0 ? expiresAt : undefined,\n }),\n scopes === PUBLISH_AUTHORIZATION_SCOPES ? PUBLISH_AUTOMATION_SCOPES : scopes,\n ),\n ) as `0x${string}`\n\n if (permissionsHash === ZERO_BYTES32) {\n throw new Error(\n '@seedprotocol/publish: attestPublishAuthorization requires a non-zero permissionsHash',\n )\n }\n\n const expirationTime =\n typeof params.expirationTime === 'number' && params.expirationTime > 0\n ? params.expirationTime\n : expiresAt > 0\n ? expiresAt\n : grantedAt + PUBLISH_AUTHORIZATION_DEFAULT_EXPIRATION_SECS\n\n const data = encodePublishAuthorizationAttestationData({\n identity,\n sessionKey,\n app,\n scopes,\n grantedAt,\n expiresAt,\n permissionsHash,\n })\n\n const tx = prepareEasAttest({\n schema: schemaUid,\n data: {\n recipient: sessionKey,\n expirationTime: BigInt(expirationTime),\n revocable: true,\n refUID: ZERO_BYTES32 as `0x${string}`,\n data,\n value: 0n,\n },\n })\n\n const receipt = await sendAndWait(sender, tx)\n if (!receipt) {\n throw new Error('@seedprotocol/publish: attestPublishAuthorization failed — no receipt')\n }\n const { easContractAddress } = getPublishConfig()\n const uid = getAttestationUidFromReceipt(receipt, easContractAddress)\n if (!uid || !isValidEasAttestationUid(uid)) {\n throw new Error(\n '@seedprotocol/publish: attestPublishAuthorization failed — could not parse attestation UID',\n )\n }\n\n return {\n uid: uid as `0x${string}`,\n schemaUid,\n permissionsHash,\n grantedAt,\n expiresAt,\n expirationTime,\n }\n}\n\n/**\n * Revoke a PublishAuthorization sidecar (must be signed by the original ManagedAccount attester).\n */\nexport async function revokePublishAuthorization(params: {\n wallet: PublishWallet | SeedTxSender\n uid: string\n schemaUid?: string\n}): Promise<void> {\n const sender = resolveTxSender(params.wallet)\n const schemaUid = (params.schemaUid ?? getPublishAuthorizationSchemaUid()) as `0x${string}`\n const uid = normalizeBytes32Hex(params.uid) as `0x${string}`\n if (!isValidEasAttestationUid(uid)) {\n throw new Error(\n '@seedprotocol/publish: revokePublishAuthorization requires a valid attestation uid',\n )\n }\n\n const tx = prepareEasMultiRevoke([\n {\n schema: schemaUid,\n data: [{ uid }],\n },\n ])\n const receipt = await sendAndWait(sender, tx)\n if (!receipt) {\n throw new Error('@seedprotocol/publish: revokePublishAuthorization failed — no receipt')\n }\n}\n\nexport type AssessPublishAuthorizationLiveResult = {\n uid: string\n decoded: PublishAuthorizationDecoded\n assess: PublishAuthorizationAssessResult\n expirationTime?: number | null\n}\n\n/**\n * Load a PublishAuthorization attestation by uid (via identity filter + client match) and assess.\n * Prefer filtering with {@link getPublishAuthorizationFromEas} when you know identity/sessionKey.\n */\nexport async function assessPublishAuthorizationLive(params: {\n uid: string\n identities: string[]\n}): Promise<AssessPublishAuthorizationLiveResult | null> {\n const rows = await getPublishAuthorizationFromEas({\n identities: params.identities,\n excludeRevoked: false,\n })\n const row = rows.find((r) => r.id?.toLowerCase() === params.uid.toLowerCase())\n if (!row) return null\n const decoded = decodePublishAuthorizationData(row.decodedDataJson ?? '[]')\n const expirationTime =\n typeof row.expirationTime === 'number'\n ? row.expirationTime\n : typeof row.expirationTime === 'string'\n ? Number(row.expirationTime)\n : null\n return {\n uid: row.id,\n decoded,\n assess: assessPublishAuthorization({ decoded, expirationTime }),\n expirationTime,\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { H as e, Q as t, W as n, Y as r, _t as i, a, it as o, q as s } from "./chainConfig-
|
|
1
|
+
import { H as e, Q as t, W as n, Y as r, _t as i, a, it as o, q as s } from "./chainConfig-CD-RgKkA.js";
|
|
2
2
|
import { getGetAdditionalSyncAddresses as c } from "@seedprotocol/sdk";
|
|
3
3
|
//#region src/helpers/resolveRevokeAccount.ts
|
|
4
4
|
async function l(l) {
|
|
@@ -34,4 +34,4 @@ async function l(l) {
|
|
|
34
34
|
//#endregion
|
|
35
35
|
export { l as resolveRevokeAccount };
|
|
36
36
|
|
|
37
|
-
//# sourceMappingURL=resolveRevokeAccount-
|
|
37
|
+
//# sourceMappingURL=resolveRevokeAccount-CK8SbaVn.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveRevokeAccount-
|
|
1
|
+
{"version":3,"file":"resolveRevokeAccount-CK8SbaVn.js","names":["getConnectedManagedAccountAddress","syncPublishInAppAuthToken","getManagedAccountWallet","isSmartWalletDeployed","getPublishThirdwebChain","getClient","getSmartWalletAddressForAdmin","resolveRevokeAccount","params","attester","account","additionalGetter","getGetAdditionalSyncAddresses","attesterIsExecutorModule","additional","attesterLower","a","derivedManagedAccount","managedAddress","managedAccountWallet","managedAccount","getPublishConfig","modularAccountModuleContract"],"sources":["../src/helpers/resolveRevokeAccount.ts"],"sourcesContent":["import type { Account } from 'thirdweb/wallets'\nimport { getGetAdditionalSyncAddresses } from '@seedprotocol/sdk'\nimport { getPublishConfig } from '~/config'\nimport {\n getClient,\n getSmartWalletAddressForAdmin,\n isSmartWalletDeployed,\n getManagedAccountWallet,\n getConnectedManagedAccountAddress,\n syncPublishInAppAuthToken,\n} from '~/helpers/thirdweb'\nimport { getPublishThirdwebChain } from './thirdwebChain'\n\n/**\n * Resolves which account to use for revoking attestations.\n * When the attester is the user's ManagedAccount (EIP4337) but they're connected\n * with a different wallet (e.g. EOA or modular account), attempts to use the\n * ManagedAccount wallet for the revoke.\n *\n * When the attester is the legacy executor module address, attempts the ManagedAccount\n * wallet if `modularAccountModuleContract` is configured (executor-routed multiRevoke).\n * Throws only when the module was the attester and no ManagedAccount path is available.\n */\nexport async function resolveRevokeAccount(params: {\n account: Account\n attester: string | null\n}): Promise<Account> {\n const { account, attester } = params\n\n if (!attester || account.address.toLowerCase() === attester.toLowerCase()) {\n return account\n }\n\n const additionalGetter = getGetAdditionalSyncAddresses()\n let attesterIsExecutorModule = false\n if (additionalGetter) {\n const additional = await additionalGetter()\n const attesterLower = attester.toLowerCase()\n attesterIsExecutorModule = !!additional?.some(\n (a: string | undefined) => a?.toLowerCase() === attesterLower,\n )\n }\n\n try {\n const derivedManagedAccount = await getSmartWalletAddressForAdmin(account.address)\n const attesterLower = attester.toLowerCase()\n const derivedLower = derivedManagedAccount.toLowerCase()\n\n if (attesterLower === derivedLower || attesterIsExecutorModule) {\n const managedAddress = attesterIsExecutorModule\n ? await getConnectedManagedAccountAddress(getPublishThirdwebChain()).catch(() => derivedManagedAccount)\n : derivedManagedAccount\n const deployed = await isSmartWalletDeployed(managedAddress)\n if (deployed) {\n // Same as ensureModularPublishBootstrap: the managed wallet reads the in-app session token.\n syncPublishInAppAuthToken()\n const managedAccountWallet = getManagedAccountWallet()\n await managedAccountWallet.autoConnect({\n client: getClient(),\n chain: getPublishThirdwebChain(),\n })\n const managedAccount = managedAccountWallet.getAccount()\n if (managedAccount) {\n return managedAccount\n }\n }\n }\n } catch {\n // Fall through\n }\n\n if (attesterIsExecutorModule) {\n const { modularAccountModuleContract } = getPublishConfig()\n if (!modularAccountModuleContract?.trim()) {\n throw new Error(\n 'Revocation not supported for items published via the modular executor.',\n )\n }\n // Module configured but ManagedAccount wallet unavailable\n throw new Error(\n 'Revocation not supported for items published via the modular executor. Connect the ManagedAccount that controls the executor module.',\n )\n }\n\n return account\n}\n"],"mappings":";;;AAuBA,eAAsBO,EAAqB,GAGtB;CACnB,IAAM,EAAE,YAAS,gBAAaC;CAE9B,IAAI,CAACC,KAAYC,EAAQ,QAAQ,YAAY,MAAMD,EAAS,YAAY,GACtE,OAAOC;CAGT,IAAMC,IAAmBC,EAA8B,GACnDC,IAA2B;CAC/B,IAAIF,GAAkB;EACpB,IAAMG,IAAa,MAAMH,EAAiB,GACpCI,IAAgBN,EAAS,YAAY;EAC3C,IAA2B,CAAC,CAACK,GAAY,MACtC,MAA0BE,GAAG,YAAY,MAAMD,CAClD;CACF;CAEA,IAAI;EACF,IAAME,IAAwB,MAAMX,EAA8BI,EAAQ,OAAO;EAIjF,IAHsBD,EAAS,YAG3B,MAFiBQ,EAAsB,YAErB,KAAgBJ,GAA0B;GAC9D,IAAMK,IAAiBL,IACnB,MAAMb,EAAkCI,EAAwB,CAAC,CAAC,CAAC,YAAYa,CAAqB,IACpGA;GAEJ,IAAI,MADmBd,EAAsBe,CAAc,GAC7C;IAEZ,EAA0B;IAC1B,IAAMC,IAAuBjB,EAAwB;IACrD,MAAMiB,EAAqB,YAAY;KACrC,QAAQd,EAAU;KAClB,OAAOD,EAAwB;IACjC,CAAC;IACD,IAAMgB,IAAiBD,EAAqB,WAAW;IACvD,IAAIC,GACF,OAAOA;GAEX;EACF;CACF,QAAQ,CAER;CAEA,IAAIP,GAA0B;EAC5B,IAAM,EAAE,oCAAiCQ,EAAiB;EAO1D,MANKC,GAA8B,KAAK,IAM9B,MACR,sIACF,IAPY,MACR,wEACF;CAMJ;CAEA,OAAOZ;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checking.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/checking.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAE3D,KAAK,iBAAiB,CAAC,CAAC,IAAI;IAAE,OAAO,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAgB,MAAM,QAAQ,CAAA;AAwElD,eAAO,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"checking.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/checking.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAE3D,KAAK,iBAAiB,CAAC,CAAC,IAAI;IAAE,OAAO,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAgB,MAAM,QAAQ,CAAA;AAwElD,eAAO,MAAM,QAAQ,yGAyJpB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createArweaveDataItems.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/createArweaveDataItems.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA+B,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAGrG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"createArweaveDataItems.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/createArweaveDataItems.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA+B,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAGrG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAgBnD,MAAM,MAAM,4BAA4B,GAAG;IACzC,mBAAmB,EAAE,sBAAsB,EAAE,CAAA;IAC7C,cAAc,EAAE,aAAa,EAAE,CAAA;IAC/B,wEAAwE;IACxE,eAAe,CAAC,EAAE,OAAO,EAAE,CAAA;IAC3B,yGAAyG;IACzG,sBAAsB,EAAE,OAAO,CAAA;CAChC,CAAA;AAID,KAAK,OAAO,GAAG;IACb,aAAa,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAA;IACrD,cAAc,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,CAAA;CACxD,CAAA;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,cAAc,EAAE,iBAAiB,EAAE,EACnC,aAAa,EAAE,OAAO,CAAC,eAAe,CAAC,EACvC,cAAc,EAAE,OAAO,CAAC,gBAAgB,CAAC,GACxC,OAAO,CAAC,4BAA4B,CAAC,CA6EvC;AAED;;;GAGG;AACH,eAAO,MAAM,sBAAsB;aAjGK,qBAAqB;WAAS,OAAO;gCAwH5E,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createArweaveDataItemsPhase2.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/createArweaveDataItemsPhase2.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"createArweaveDataItemsPhase2.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/createArweaveDataItemsPhase2.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAG3D,OAAO,EAA6B,KAAK,4BAA4B,EAAE,MAAM,0BAA0B,CAAA;AAIvG;;;GAGG;AACH,wBAAsB,mCAAmC,CACvD,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,4BAA4B,CAAC,CAgCvC;AAED,eAAO,MAAM,4BAA4B;aA1CD,qBAAqB;WAAS,OAAO;gCA6C5E,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createAttestationsDirectToEas.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/createAttestationsDirectToEas.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"createAttestationsDirectToEas.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/createAttestationsDirectToEas.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAoK3D,KAAK,mCAAmC,GAAG;IACzC,UAAU,EAAE,OAAO,CAAA;IACnB,cAAc,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,CAAA;CACxD,CAAA;AAED,eAAO,MAAM,6BAA6B;aAtCF,qBAAqB;WAAS,OAAO;gCAgD5E,CAAA"}
|
|
@@ -7,4 +7,5 @@ export { createAttestations } from './createAttestations';
|
|
|
7
7
|
export { createAttestationsDirectToEas } from './createAttestationsDirectToEas';
|
|
8
8
|
export { checking } from './checking';
|
|
9
9
|
export { authorizing } from './authorizing';
|
|
10
|
+
export { revokeRetractedProperties } from './revokeRetractedProperties';
|
|
10
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAAE,KAAK,4BAA4B,EAAE,MAAM,0BAA0B,CAAA;AACpG,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAA;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAA;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAAE,KAAK,4BAA4B,EAAE,MAAM,0BAA0B,CAAA;AACpG,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAA;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAA;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA"}
|
|
@@ -8,6 +8,8 @@ type ReceiptLike = {
|
|
|
8
8
|
/** The fields of a normalized multiPublish request this module reads. */
|
|
9
9
|
export type MultiPublishRequestLike = {
|
|
10
10
|
localId?: string;
|
|
11
|
+
/** The version row a Version attestation this request creates is recorded on. */
|
|
12
|
+
versionLocalId?: string;
|
|
11
13
|
seedUid?: string;
|
|
12
14
|
seedSchemaUid?: string;
|
|
13
15
|
versionUid?: string;
|
|
@@ -17,6 +19,7 @@ export type MultiPublishRequestLike = {
|
|
|
17
19
|
data?: unknown[];
|
|
18
20
|
_propertyName?: string;
|
|
19
21
|
_metadataLocalId?: string;
|
|
22
|
+
_attestedValue?: string;
|
|
20
23
|
}>;
|
|
21
24
|
};
|
|
22
25
|
export type AttributedPropertyPair = {
|
|
@@ -25,6 +28,8 @@ export type AttributedPropertyPair = {
|
|
|
25
28
|
propertyName?: string;
|
|
26
29
|
/** The metadata row whose value was attested. */
|
|
27
30
|
metadataLocalId?: string;
|
|
31
|
+
/** A value the attestation carries that the row doesn't hold yet. */
|
|
32
|
+
value?: string;
|
|
28
33
|
};
|
|
29
34
|
/** What one request of a multiPublish transaction created. */
|
|
30
35
|
export type RequestAttestations = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multiPublishReceipt.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/multiPublishReceipt.ts"],"names":[],"mappings":"AAOA,KAAK,WAAW,GAAG;IACjB,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC,CAAA;CACtE,CAAA;AAED,yEAAyE;AACzE,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,kBAAkB,CAAC,EAAE,KAAK,CAAC;QACzB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;QAChB,aAAa,CAAC,EAAE,MAAM,CAAA;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"multiPublishReceipt.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/multiPublishReceipt.ts"],"names":[],"mappings":"AAOA,KAAK,WAAW,GAAG;IACjB,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC,CAAA;CACtE,CAAA;AAED,yEAAyE;AACzE,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iFAAiF;IACjF,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,kBAAkB,CAAC,EAAE,KAAK,CAAC;QACzB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;QAChB,aAAa,CAAC,EAAE,MAAM,CAAA;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,cAAc,CAAC,EAAE,MAAM,CAAA;KACxB,CAAC,CAAA;CACH,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iDAAiD;IACjD,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,8DAA8D;AAC9D,MAAM,MAAM,mBAAmB,GAAG;IAChC,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,qFAAqF;IACrF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,sBAAsB,EAAE,CAAA;CACxC,CAAA;AAwED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE;IACnD,OAAO,EAAE,WAAW,CAAA;IACpB,QAAQ,EAAE,uBAAuB,EAAE,CAAA;IACnC,kBAAkB,EAAE,OAAO,CAAA;IAC3B,kBAAkB,EAAE,MAAM,CAAA;IAC1B,wBAAwB,EAAE,MAAM,CAAA;CACjC,GAAG,mBAAmB,EAAE,CA4FxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publishRequestNormalize.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/publishRequestNormalize.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,OAAO,GAAI,GAAG,OAAO,KAAG,MAapC,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,GAAG,OAAO,KAAG,MAYvC,CAAA;AAED,kIAAkI;AAClI,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAclE;AAED,MAAM,MAAM,gCAAgC,GAAG;IAC7C,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAA;IACpB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,aAAa,EAAE,MAAM,CAAA;IACrB,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAA;CACtC,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,6CAA6C,CAC3D,QAAQ,EAAE,KAAK,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,kBAAkB,CAAC,EAAE,KAAK,CAAC;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACpF,CAAC,GACD,gCAAgC,GAAG,SAAS,CAoB9C;AAED,6FAA6F;AAC7F,wBAAgB,gCAAgC,CAAC,CAAC,SAAS;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,EACpF,kBAAkB,EAAE,CAAC,EAAE,GAAG,SAAS,EACnC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,GACzB,CAAC,EAAE,CAIL;AAWD,sGAAsG;AACtG,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,
|
|
1
|
+
{"version":3,"file":"publishRequestNormalize.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/publishRequestNormalize.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,OAAO,GAAI,GAAG,OAAO,KAAG,MAapC,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,GAAG,OAAO,KAAG,MAYvC,CAAA;AAED,kIAAkI;AAClI,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAclE;AAED,MAAM,MAAM,gCAAgC,GAAG;IAC7C,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAA;IACpB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,aAAa,EAAE,MAAM,CAAA;IACrB,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAA;CACtC,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,6CAA6C,CAC3D,QAAQ,EAAE,KAAK,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,kBAAkB,CAAC,EAAE,KAAK,CAAC;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACpF,CAAC,GACD,gCAAgC,GAAG,SAAS,CAoB9C;AAED,6FAA6F;AAC7F,wBAAgB,gCAAgC,CAAC,CAAC,SAAS;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,EACpF,kBAAkB,EAAE,CAAC,EAAE,GAAG,SAAS,EACnC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,GACzB,CAAC,EAAE,CAIL;AAWD,sGAAsG;AACtG,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAqCrD;AAED,uFAAuF;AACvF,wBAAgB,mCAAmC,CACjD,kBAAkB,EAAE,GAAG,EAAE,EACzB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,IAAI,CAiBN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recordMultiPublishReceipt.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/recordMultiPublishReceipt.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACzB,MAAM,uBAAuB,CAAA;AAO9B,KAAK,WAAW,GAAG;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC,CAAA;CACtE,CAAA;AAKD;;;;;;;;;;;GAWG;AACH,wBAAsB,yBAAyB,CAAC,CAAC,SAAS,uBAAuB,EAAE,MAAM,EAAE;IACzF,OAAO,EAAE,WAAW,CAAA;IACpB,4DAA4D;IAC5D,QAAQ,EAAE,CAAC,EAAE,CAAA;IACb,eAAe,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,kBAAkB,EAAE,OAAO,CAAA;IAC3B,wBAAwB,EAAE,MAAM,CAAA;IAChC,gBAAgB,EAAE,MAAM,CAAA;IACxB,gGAAgG;IAChG,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC1C,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAAC,UAAU,EAAE,mBAAmB,EAAE,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"recordMultiPublishReceipt.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/recordMultiPublishReceipt.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACzB,MAAM,uBAAuB,CAAA;AAO9B,KAAK,WAAW,GAAG;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC,CAAA;CACtE,CAAA;AAKD;;;;;;;;;;;GAWG;AACH,wBAAsB,yBAAyB,CAAC,CAAC,SAAS,uBAAuB,EAAE,MAAM,EAAE;IACzF,OAAO,EAAE,WAAW,CAAA;IACpB,4DAA4D;IAC5D,QAAQ,EAAE,CAAC,EAAE,CAAA;IACb,eAAe,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,kBAAkB,EAAE,OAAO,CAAA;IAC3B,wBAAwB,EAAE,MAAM,CAAA;IAChC,gBAAgB,EAAE,MAAM,CAAA;IACxB,gGAAgG;IAChG,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC1C,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAAC,UAAU,EAAE,mBAAmB,EAAE,CAAA;CAAE,CAAC,CA6EhE;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,gBAAgB,EAAE,MAAM,CAAA;IACxB,sBAAsB,CAAC,EAAE,MAAM,CAAA;CAChC,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { PublishMachineContext } from '../../../types';
|
|
2
|
+
/**
|
|
3
|
+
* After the attestations: revokes the attestations of the item's retracted properties (ADR 0021).
|
|
4
|
+
* A separate transaction from the attester; nothing to do when no property is retracted. Read again
|
|
5
|
+
* on each run, so a retry sends only what is still live.
|
|
6
|
+
*/
|
|
7
|
+
export declare const revokeRetractedProperties: import("xstate").PromiseActorLogic<void, {
|
|
8
|
+
context: PublishMachineContext;
|
|
9
|
+
}, import("xstate").EventObject>;
|
|
10
|
+
//# sourceMappingURL=revokeRetractedProperties.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revokeRetractedProperties.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/revokeRetractedProperties.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAI3D;;;;GAIG;AACH,eAAO,MAAM,yBAAyB;aAPC,qBAAqB;gCAqB1D,CAAA"}
|
|
@@ -11,10 +11,11 @@ export type EnsureEasSchemasOptions = {
|
|
|
11
11
|
managedAddress?: string;
|
|
12
12
|
};
|
|
13
13
|
/**
|
|
14
|
-
* Ensures EAS schemas exist for each
|
|
14
|
+
* Ensures EAS schemas exist for each property and each model of every seed a publish of the item
|
|
15
|
+
* attests (the item and the drafts published with it, see the SDK's getPublishGraph).
|
|
15
16
|
* If a schema is not found on-chain or in the indexer, registers it via SchemaRegistry
|
|
16
17
|
* and creates a name attestation (Schema #1) so EASSCAN displays it.
|
|
17
18
|
* Automation session keys cannot register; a missing schema throws before any UserOp.
|
|
18
19
|
*/
|
|
19
|
-
export declare function ensureEasSchemasForItem(item: IItem<any>, account: PublishWallet | SeedTxSender, options?: EnsureEasSchemasOptions): Promise<void>;
|
|
20
|
+
export declare function ensureEasSchemasForItem(item: Pick<IItem<any>, 'seedLocalId' | 'modelName'>, account: PublishWallet | SeedTxSender, options?: EnsureEasSchemasOptions): Promise<void>;
|
|
20
21
|
//# sourceMappingURL=ensureEasSchemas.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensureEasSchemas.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/helpers/ensureEasSchemas.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ensureEasSchemas.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/helpers/ensureEasSchemas.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,KAAK,EAAoB,MAAM,mBAAmB,CAAA;AAOhE,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAA;AAa7B,4BAA4B;AAC5B,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AA2BD,MAAM,MAAM,uBAAuB,GAAG;IACpC;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AA2DD;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,aAAa,GAAG,WAAW,CAAC,EACnD,OAAO,EAAE,aAAa,GAAG,YAAY,EACrC,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,IAAI,CAAC,CAkBf"}
|
|
@@ -4,9 +4,8 @@ import { type IItem } from '@seedprotocol/sdk';
|
|
|
4
4
|
* before creating attestations. Returns false when the item has no storage or no values
|
|
5
5
|
* to upload, in which case the publish flow can skip straight to EAS.
|
|
6
6
|
*
|
|
7
|
-
* Uses {@link itemHasPublishUploadCandidates}
|
|
8
|
-
*
|
|
9
|
-
* and can throw (e.g. gateway unreachable) even when uploads are required.
|
|
7
|
+
* Uses {@link itemHasPublishUploadCandidates}, which reads rows and file metadata only, so a plain
|
|
8
|
+
* item record (a restored publish) works as well as a loaded Item.
|
|
10
9
|
*/
|
|
11
|
-
export declare function itemNeedsArweaveUpload(item: IItem<any>): Promise<boolean>;
|
|
10
|
+
export declare function itemNeedsArweaveUpload(item: Pick<IItem<any>, 'seedLocalId' | 'modelName'>): Promise<boolean>;
|
|
12
11
|
//# sourceMappingURL=itemNeedsArweave.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"itemNeedsArweave.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/helpers/itemNeedsArweave.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"itemNeedsArweave.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/helpers/itemNeedsArweave.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAE9E;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,aAAa,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAElH"}
|
|
@@ -32,6 +32,8 @@ export declare const publishMachine: import("xstate").StateMachine<Partial<Publi
|
|
|
32
32
|
event?: unknown;
|
|
33
33
|
}, import("xstate").EventObject> | import("xstate").PromiseActorLogic<import("../..").PublishAuthorization, {
|
|
34
34
|
context: PublishMachineContext;
|
|
35
|
+
}, import("xstate").EventObject> | import("xstate").PromiseActorLogic<void, {
|
|
36
|
+
context: PublishMachineContext;
|
|
35
37
|
}, import("xstate").EventObject>> | undefined;
|
|
36
38
|
}, {
|
|
37
39
|
src: "createArweaveDataItems";
|
|
@@ -100,6 +102,12 @@ export declare const publishMachine: import("xstate").StateMachine<Partial<Publi
|
|
|
100
102
|
context: PublishMachineContext;
|
|
101
103
|
}, import("xstate").EventObject>;
|
|
102
104
|
id: string | undefined;
|
|
105
|
+
} | {
|
|
106
|
+
src: "revokeRetractedProperties";
|
|
107
|
+
logic: import("xstate").PromiseActorLogic<void, {
|
|
108
|
+
context: PublishMachineContext;
|
|
109
|
+
}, import("xstate").EventObject>;
|
|
110
|
+
id: string | undefined;
|
|
103
111
|
}, {
|
|
104
112
|
type: "handleError";
|
|
105
113
|
params: unknown;
|
|
@@ -127,6 +135,9 @@ export declare const publishMachine: import("xstate").StateMachine<Partial<Publi
|
|
|
127
135
|
} | {
|
|
128
136
|
type: "assignErrorCreatingAttestationsDirectToEas";
|
|
129
137
|
params: import("xstate").NonReducibleUnknown;
|
|
138
|
+
} | {
|
|
139
|
+
type: "assignErrorRevokingRetractedProperties";
|
|
140
|
+
params: import("xstate").NonReducibleUnknown;
|
|
130
141
|
} | {
|
|
131
142
|
type: "assignAccountFromRetry";
|
|
132
143
|
params: import("xstate").NonReducibleUnknown;
|
|
@@ -142,7 +153,7 @@ export declare const publishMachine: import("xstate").StateMachine<Partial<Publi
|
|
|
142
153
|
} | {
|
|
143
154
|
type: "assignErrorCheckingFailed";
|
|
144
155
|
params: import("xstate").NonReducibleUnknown;
|
|
145
|
-
}, never, never, "success" | "failure" | "uploadingViaBundler" | "uploadingViaBundlerPhase2" | "checking" | "authorizing" | "preparingHtmlEmbedded" | "rewritingHtmlEmbedded" | "creatingArweaveDataItems" | "creatingArweaveDataItemsPhase2" | "creatingAttestations" | "creatingAttestationsDirectToEas" | "stopping" | "attestationFailureRecoverable" | "attestationFailureRecoverableDirectToEas", string, Partial<PublishMachineContext>, import("xstate").NonReducibleUnknown, import("xstate").EventObject, import("xstate").MetaObject, {
|
|
156
|
+
}, never, never, "success" | "failure" | "uploadingViaBundler" | "uploadingViaBundlerPhase2" | "checking" | "authorizing" | "preparingHtmlEmbedded" | "rewritingHtmlEmbedded" | "creatingArweaveDataItems" | "creatingArweaveDataItemsPhase2" | "creatingAttestations" | "creatingAttestationsDirectToEas" | "revokingRetractedProperties" | "stopping" | "attestationFailureRecoverable" | "attestationFailureRecoverableDirectToEas" | "retractionFailureRecoverable", string, Partial<PublishMachineContext>, import("xstate").NonReducibleUnknown, import("xstate").EventObject, import("xstate").MetaObject, {
|
|
146
157
|
id: "publish";
|
|
147
158
|
states: {
|
|
148
159
|
readonly authorizing: {};
|
|
@@ -157,6 +168,8 @@ export declare const publishMachine: import("xstate").StateMachine<Partial<Publi
|
|
|
157
168
|
readonly attestationFailureRecoverable: {};
|
|
158
169
|
readonly creatingAttestationsDirectToEas: {};
|
|
159
170
|
readonly attestationFailureRecoverableDirectToEas: {};
|
|
171
|
+
readonly revokingRetractedProperties: {};
|
|
172
|
+
readonly retractionFailureRecoverable: {};
|
|
160
173
|
readonly stopping: {};
|
|
161
174
|
readonly success: {};
|
|
162
175
|
readonly failure: {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/publish/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAE1C,OAAO,EAEL,qBAAqB,EAEtB,MAAiG,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/publish/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAE1C,OAAO,EAEL,qBAAqB,EAEtB,MAAiG,aAAa,CAAA;AA6C/G,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BA0czB,CAAA;AAEF,MAAM,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,CAAA"}
|
|
@@ -1,3 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Throws unless the connected wallet can revoke the seed's attestations. Publish calls it before
|
|
3
|
+
* attesting anything when the item has a retracted property (ADR 0021).
|
|
4
|
+
*/
|
|
5
|
+
export declare function assertCanRevokeSeedAttestations(params: {
|
|
6
|
+
seedLocalId: string;
|
|
7
|
+
seedUid: string;
|
|
8
|
+
}): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Revokes property attestations for retracted properties (ADR 0021), one `multiRevoke` per
|
|
11
|
+
* schema from the seed's attester, and records them locally as retracted. The seed stays live.
|
|
12
|
+
*/
|
|
13
|
+
export declare function revokePropertyAttestations(params: {
|
|
14
|
+
seedLocalId: string;
|
|
15
|
+
seedUid: string;
|
|
16
|
+
attestations: {
|
|
17
|
+
uid: string;
|
|
18
|
+
schemaUid: string;
|
|
19
|
+
}[];
|
|
20
|
+
}): Promise<void>;
|
|
1
21
|
/**
|
|
2
22
|
* Revokes the Seed attestation and all Version and metadata attestations on EAS.
|
|
3
23
|
* Sends from the attester: the registered publish wallet when it is the attester, else the
|