@seedprotocol/publish 0.6.1 → 0.6.2

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 (41) hide show
  1. package/dist/config-BCCU2gwH.js +947 -0
  2. package/dist/config-BCCU2gwH.js.map +1 -0
  3. package/dist/config.d.ts +8 -0
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/ensureAutomationSessionKey-DITBy2BP.js +84 -0
  6. package/dist/ensureAutomationSessionKey-DITBy2BP.js.map +1 -0
  7. package/dist/ensureModularPublishBootstrap-Cybk4i1Y.js +127 -0
  8. package/dist/ensureModularPublishBootstrap-Cybk4i1Y.js.map +1 -0
  9. package/dist/ensureSmartWalletThenPublish-BY9SiutA.js +48 -0
  10. package/dist/ensureSmartWalletThenPublish-BY9SiutA.js.map +1 -0
  11. package/dist/helpers/publishWalletRegistry.d.ts.map +1 -1
  12. package/dist/hooks/index.d.ts +2 -0
  13. package/dist/hooks/index.d.ts.map +1 -1
  14. package/dist/hooks/usePublishCostEstimate.d.ts +12 -0
  15. package/dist/hooks/usePublishCostEstimate.d.ts.map +1 -0
  16. package/dist/index.d.ts +4 -1
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +469 -210
  19. package/dist/index.js.map +1 -1
  20. package/dist/publishAuthorization-ctIWvkYC.js +3479 -0
  21. package/dist/publishAuthorization-ctIWvkYC.js.map +1 -0
  22. package/dist/resolveRevokeAccount-CUr0F1ua.js +38 -0
  23. package/dist/resolveRevokeAccount-CUr0F1ua.js.map +1 -0
  24. package/dist/services/publishCost/estimatePublishCost.d.ts +9 -0
  25. package/dist/services/publishCost/estimatePublishCost.d.ts.map +1 -0
  26. package/dist/services/publishCost/gasHeuristics.d.ts +16 -0
  27. package/dist/services/publishCost/gasHeuristics.d.ts.map +1 -0
  28. package/dist/services/publishCost/index.d.ts +7 -0
  29. package/dist/services/publishCost/index.d.ts.map +1 -0
  30. package/dist/services/publishCost/marketRates.d.ts +13 -0
  31. package/dist/services/publishCost/marketRates.d.ts.map +1 -0
  32. package/dist/services/publishCost/tokenPrices.d.ts +12 -0
  33. package/dist/services/publishCost/tokenPrices.d.ts.map +1 -0
  34. package/dist/services/publishCost/types.d.ts +48 -0
  35. package/dist/services/publishCost/types.d.ts.map +1 -0
  36. package/dist/services/publishCost/watchPublishCost.d.ts +29 -0
  37. package/dist/services/publishCost/watchPublishCost.d.ts.map +1 -0
  38. package/dist/thirdweb.js +5 -5
  39. package/dist/worker-BI_q7Nkk.js +69 -0
  40. package/dist/worker-BI_q7Nkk.js.map +1 -0
  41. package/package.json +6 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-BCCU2gwH.js","names":[],"sources":["../src/helpers/constants.ts","../src/helpers/abi/eas.ts","../src/helpers/abi/publisher.ts","../src/helpers/abi/factory.ts","../src/helpers/abi/schemaRegistry.ts","../src/helpers/defaultChain.ts","../src/helpers/chainConfig.ts","../src/helpers/chainClient.ts","../src/helpers/contracts/index.ts","../src/helpers/easDirect.ts","../src/helpers/publishWalletRegistry.ts","../src/helpers/seedSigner.ts","../src/helpers/adapters/thirdwebAccount.ts","../src/services/revoke/revokeAttestations.ts","../src/config.ts"],"sourcesContent":["/**\n * Constants for the publish package.\n */\n/** EAS Schema Registry on Optimism Sepolia (chain 11155420) */\nexport const SCHEMA_REGISTRY_ADDRESS =\n '0x4200000000000000000000000000000000000020' as const\n\n/** Schema #1 (Name a Schema) - universal UID for naming attestations */\nexport const EAS_SCHEMA_NAME_ATTESTATION_UID =\n '0x44d562ac1d7cd77e232978687fea027ace48f719cf1d58c7888e509663bb87fc' as const\n\n/** Thirdweb ManagedAccount factory on Optimism Sepolia (chain 11155420) */\nexport const THIRDWEB_ACCOUNT_FACTORY_ADDRESS =\n '0x76f47d88bfaf670f5208911181fcdc0e160cb16d' as const\n\n/** EAS contract address on Optimism Sepolia (chain 11155420) */\nexport const EAS_CONTRACT_ADDRESS =\n '0x4200000000000000000000000000000000000021' as const\n\n/**\n * Optimism Sepolia address of the deployment the **`multiPublish` ABI** was generated from.\n *\n * **Do not use as the transaction `to` for user publishes.** Runtime `multiPublish` targets the\n * publisher’s deployed ManagedAccount (non-modular), `managedAddress` (modular), or is not used\n * when attesting via direct EAS (EOA path).\n */\nexport const MULTI_PUBLISH_ABI_REFERENCE_ADDRESS_OP_SEPOLIA =\n '0xcd8c945872df8e664e55cf8885c85ea3ea8f2148' as const\n\n/**\n * @deprecated Misleading name: this is the ABI reference deployment, not a shared on-chain router.\n * Use {@link MULTI_PUBLISH_ABI_REFERENCE_ADDRESS_OP_SEPOLIA}.\n */\nexport const SEED_PROTOCOL_CONTRACT_ADDRESS_OP_SEPOLIA =\n MULTI_PUBLISH_ABI_REFERENCE_ADDRESS_OP_SEPOLIA\n\nexport const PublishMachineStates = {\n SUCCESS: 'success',\n FAILURE: 'failure',\n} as const\n\n/** States that run for a long time without snapshot changes; need periodic saves. */\nexport const LONG_RUNNING_PUBLISH_STATES = [\n 'pollingForConfirmation',\n 'uploadingData',\n 'uploadingViaBundler',\n 'uploadingViaBundlerPhase2',\n] as const\n\nexport const PERIODIC_SAVE_INTERVAL_MS = 30_000\n","/**\n * EAS contract ABI fragments + custom errors for revert decoding.\n */\n\nexport const EAS_ERRORS_ABI = [\n { type: 'error' as const, name: 'AccessDenied', inputs: [] },\n { type: 'error' as const, name: 'AlreadyRevoked', inputs: [] },\n { type: 'error' as const, name: 'InvalidRevocation', inputs: [] },\n { type: 'error' as const, name: 'InvalidRevocations', inputs: [] },\n { type: 'error' as const, name: 'InvalidSchema', inputs: [] },\n { type: 'error' as const, name: 'Irrevocable', inputs: [] },\n { type: 'error' as const, name: 'NotFound', inputs: [] },\n { type: 'error' as const, name: 'NotPayable', inputs: [] },\n { type: 'error' as const, name: 'InsufficientValue', inputs: [] },\n { type: 'error' as const, name: 'InvalidLength', inputs: [] },\n] as const\n\nconst attestationRequestData = [\n { name: 'recipient', type: 'address' },\n { name: 'expirationTime', type: 'uint64' },\n { name: 'revocable', type: 'bool' },\n { name: 'refUID', type: 'bytes32' },\n { name: 'data', type: 'bytes' },\n { name: 'value', type: 'uint256' },\n] as const\n\nexport const easAbi = [\n {\n type: 'function',\n name: 'attest',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'request',\n type: 'tuple',\n components: [\n { name: 'schema', type: 'bytes32' },\n {\n name: 'data',\n type: 'tuple',\n components: attestationRequestData,\n },\n ],\n },\n ],\n outputs: [{ type: 'bytes32' }],\n },\n {\n type: 'function',\n name: 'multiAttest',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'requests',\n type: 'tuple[]',\n components: [\n { name: 'schema', type: 'bytes32' },\n {\n name: 'data',\n type: 'tuple[]',\n components: attestationRequestData,\n },\n ],\n },\n ],\n outputs: [{ type: 'bytes32[]' }],\n },\n {\n type: 'function',\n name: 'multiRevoke',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'multiRequests',\n type: 'tuple[]',\n components: [\n { name: 'schema', type: 'bytes32' },\n {\n name: 'data',\n type: 'tuple[]',\n components: [\n { name: 'uid', type: 'bytes32' },\n { name: 'value', type: 'uint256' },\n ],\n },\n ],\n },\n ],\n outputs: [],\n },\n {\n type: 'event',\n name: 'Attested',\n inputs: [\n { name: 'recipient', type: 'address', indexed: true },\n { name: 'attester', type: 'address', indexed: true },\n { name: 'uid', type: 'bytes32', indexed: false },\n { name: 'schemaUID', type: 'bytes32', indexed: true },\n ],\n },\n ...EAS_ERRORS_ABI,\n] as const\n","/** Attestation request tuple shared by multiPublish variants. */\nconst attestationDataComponents = [\n { name: 'recipient', type: 'address' },\n { name: 'expirationTime', type: 'uint64' },\n { name: 'revocable', type: 'bool' },\n { name: 'refUID', type: 'bytes32' },\n { name: 'data', type: 'bytes' },\n { name: 'value', type: 'uint256' },\n] as const\n\nconst listOfAttestationsComponents = [\n { name: 'schema', type: 'bytes32' },\n {\n name: 'data',\n type: 'tuple[]',\n components: attestationDataComponents,\n },\n] as const\n\n/** multiPublish with string localIds (selector 0x31e19cb8). */\nexport const multiPublishAbi = [\n {\n type: 'function',\n name: 'multiPublish',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'requests',\n type: 'tuple[]',\n components: [\n { name: 'localId', type: 'string' },\n { name: 'seedUid', type: 'bytes32' },\n { name: 'seedSchemaUid', type: 'bytes32' },\n { name: 'versionUid', type: 'bytes32' },\n { name: 'versionSchemaUid', type: 'bytes32' },\n { name: 'seedIsRevocable', type: 'bool' },\n {\n name: 'listOfAttestations',\n type: 'tuple[]',\n components: listOfAttestationsComponents,\n },\n {\n name: 'propertiesToUpdate',\n type: 'tuple[]',\n components: [\n { name: 'publishLocalId', type: 'string' },\n { name: 'propertySchemaUid', type: 'bytes32' },\n ],\n },\n ],\n },\n ],\n outputs: [{ type: 'bytes32[]' }],\n },\n] as const\n\n/** multiPublish with uint256 localId indices (selector 0xd688e801). */\nexport const multiPublishIntegerAbi = [\n {\n type: 'function',\n name: 'multiPublish',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'requests',\n type: 'tuple[]',\n components: [\n { name: 'localIdIndex', type: 'uint256' },\n { name: 'seedUid', type: 'bytes32' },\n { name: 'seedSchemaUid', type: 'bytes32' },\n { name: 'versionUid', type: 'bytes32' },\n { name: 'versionSchemaUid', type: 'bytes32' },\n { name: 'seedIsRevocable', type: 'bool' },\n {\n name: 'listOfAttestations',\n type: 'tuple[]',\n components: listOfAttestationsComponents,\n },\n {\n name: 'propertiesToUpdate',\n type: 'tuple[]',\n components: [\n { name: 'publishLocalIdIndex', type: 'uint256' },\n { name: 'propertySchemaUid', type: 'bytes32' },\n ],\n },\n ],\n },\n ],\n outputs: [{ type: 'bytes32[]' }],\n },\n] as const\n\nexport const publisherReadWriteAbi = [\n {\n type: 'function',\n name: 'getEas',\n stateMutability: 'view',\n inputs: [],\n outputs: [{ type: 'address' }],\n },\n {\n type: 'function',\n name: 'setEas',\n stateMutability: 'nonpayable',\n inputs: [{ name: '_eas', type: 'address' }],\n outputs: [{ type: 'string' }],\n },\n {\n type: 'function',\n name: 'isActiveSigner',\n stateMutability: 'view',\n inputs: [{ name: 'signer', type: 'address' }],\n outputs: [{ type: 'bool' }],\n },\n] as const\n\n/** Extension / ManagedAccount publisher events. */\nexport const publisherEventsAbi = [\n {\n type: 'event',\n name: 'CreatedAttestation',\n inputs: [\n {\n name: 'result',\n type: 'tuple',\n indexed: false,\n components: [\n { name: 'schemaUid', type: 'bytes32' },\n { name: 'attestationUid', type: 'bytes32' },\n ],\n },\n ],\n },\n {\n type: 'event',\n name: 'SeedPublished',\n inputs: [{ name: 'returnedDataFromEAS', type: 'bytes', indexed: false }],\n },\n] as const\n","/** Thirdweb ManagedAccount factory (0x76f47…) on Optimism Sepolia. */\nexport const managedAccountFactoryAbi = [\n {\n type: 'function',\n name: 'getAddress',\n stateMutability: 'view',\n inputs: [\n { name: '_adminSigner', type: 'address' },\n { name: '_data', type: 'bytes' },\n ],\n outputs: [{ type: 'address' }],\n },\n {\n type: 'function',\n name: 'createAccount',\n stateMutability: 'nonpayable',\n inputs: [\n { name: '_admin', type: 'address' },\n { name: '_data', type: 'bytes' },\n ],\n outputs: [{ type: 'address' }],\n },\n] as const\n","/** EAS Schema Registry on OP Stack predeploy. */\nexport const schemaRegistryAbi = [\n {\n type: 'function',\n name: 'getSchema',\n stateMutability: 'view',\n inputs: [{ name: 'uid', type: 'bytes32' }],\n outputs: [\n {\n name: '',\n type: 'tuple',\n components: [\n { name: 'uid', type: 'bytes32' },\n { name: 'resolver', type: 'address' },\n { name: 'revocable', type: 'bool' },\n { name: 'schema', type: 'string' },\n ],\n },\n ],\n },\n {\n type: 'function',\n name: 'register',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'schema', type: 'string' },\n { name: 'resolver', type: 'address' },\n { name: 'revocable', type: 'bool' },\n ],\n outputs: [{ type: 'bytes32' }],\n },\n] as const\n","import type { Chain } from 'viem'\nimport { optimismSepolia } from 'viem/chains'\n\n/** Default chain when apps omit `PublishConfig.chain`. */\nexport const DEFAULT_PUBLISH_CHAIN: Chain = optimismSepolia\n","import type { Chain } from 'viem'\nimport { getPublishConfig } from '../config'\nimport { DEFAULT_PUBLISH_CHAIN } from './defaultChain'\n\nexport { DEFAULT_PUBLISH_CHAIN }\n\n/**\n * Resolved viem chain for public client + adapters.\n */\nexport function getPublishViemChain(): Chain {\n try {\n return getPublishConfig().chain ?? DEFAULT_PUBLISH_CHAIN\n } catch {\n return DEFAULT_PUBLISH_CHAIN\n }\n}\n\n/**\n * Resolved RPC URL. Prefer explicit `rpcUrl`; fall back to Thirdweb edge URL when client id is set.\n */\nexport function getPublishRpcUrl(): string {\n const config = getPublishConfig()\n if (config.rpcUrl) return config.rpcUrl\n if (config.thirdwebClientId) {\n const chainId = (config.chain ?? DEFAULT_PUBLISH_CHAIN).id\n return `https://${chainId}.rpc.thirdweb.com/${config.thirdwebClientId}`\n }\n throw new Error(\n '@seedprotocol/publish: rpcUrl is required when thirdwebClientId is not set. Pass rpcUrl in initPublish / PublishProvider config.',\n )\n}\n","import { createPublicClient, http, type Address, type Hex, type PublicClient } from 'viem'\nimport { getPublishRpcUrl, getPublishViemChain } from './chainConfig'\n\ntype PublishPublicClient = PublicClient\n\nlet _client: PublishPublicClient | null = null\nlet _clientKey: string | null = null\n\nfunction createPublishPublicClient(): PublishPublicClient {\n const chain = getPublishViemChain()\n const rpcUrl = getPublishRpcUrl()\n return createPublicClient({\n chain,\n transport: http(rpcUrl),\n })\n}\n\n/**\n * Viem public client for reads / receipts on the configured publish chain.\n */\nexport function getPublishPublicClient(): PublishPublicClient {\n const chain = getPublishViemChain()\n const rpcUrl = getPublishRpcUrl()\n const key = `${chain.id}:${rpcUrl}`\n if (!_client || _clientKey !== key) {\n _clientKey = key\n _client = createPublishPublicClient()\n }\n return _client\n}\n\n/** Reset cached client (tests). */\nexport function resetPublishPublicClient(): void {\n _client = null\n _clientKey = null\n}\n\nexport async function waitForPublishReceipt(transactionHash: Hex) {\n return getPublishPublicClient().waitForTransactionReceipt({ hash: transactionHash })\n}\n\nexport async function isContractDeployed(address: string): Promise<boolean> {\n const code = await getPublishPublicClient().getBytecode({\n address: address as Address,\n })\n return !!code && code !== '0x'\n}\n\nexport async function getBlockTimestampMs(blockNumber: bigint): Promise<number | null> {\n try {\n const block = await getPublishPublicClient().getBlock({ blockNumber })\n if (block?.timestamp != null) return Number(block.timestamp) * 1000\n } catch {\n // ignore\n }\n return null\n}\n\nconst DEFAULT_DEPLOY_POLL_ATTEMPTS = 5\nconst DEFAULT_DEPLOY_POLL_INTERVAL_MS = 6_000\n\n/** Polls chain bytecode until the smart account is deployed or attempts are exhausted. */\nexport async function pollSmartWalletDeployed(\n smartWalletAddress: string,\n attempts: number = DEFAULT_DEPLOY_POLL_ATTEMPTS,\n intervalMs: number = DEFAULT_DEPLOY_POLL_INTERVAL_MS,\n): Promise<boolean> {\n for (let i = 0; i < attempts; i++) {\n if (await isContractDeployed(smartWalletAddress)) {\n return true\n }\n if (i < attempts - 1) {\n await new Promise<void>((resolve) => {\n setTimeout(resolve, intervalMs)\n })\n }\n }\n return false\n}\n","import {\n encodeFunctionData,\n type Address,\n type Hex,\n} from 'viem'\nimport {\n multiPublishAbi,\n multiPublishIntegerAbi,\n publisherReadWriteAbi,\n} from '../abi/publisher'\nimport { managedAccountFactoryAbi } from '../abi/factory'\nimport { easAbi } from '../abi/eas'\nimport { schemaRegistryAbi } from '../abi/schemaRegistry'\nimport type { SeedTxRequest } from '../seedSigner'\nimport { getPublishPublicClient } from '../chainClient'\nimport {\n SCHEMA_REGISTRY_ADDRESS,\n THIRDWEB_ACCOUNT_FACTORY_ADDRESS,\n} from '../constants'\nimport { getPublishConfig } from '../../config'\n\nexport type MultiPublishRequest = {\n localId: string\n seedUid: `0x${string}`\n seedSchemaUid: `0x${string}`\n versionUid: `0x${string}`\n versionSchemaUid: `0x${string}`\n seedIsRevocable: boolean\n listOfAttestations: Array<{\n schema: `0x${string}`\n data: Array<{\n recipient: `0x${string}`\n expirationTime: bigint\n revocable: boolean\n refUID: `0x${string}`\n data: `0x${string}`\n value: bigint\n }>\n }>\n propertiesToUpdate: Array<{\n publishLocalId: string\n propertySchemaUid: `0x${string}`\n }>\n}\n\nexport type MultiPublishIntegerRequest = {\n localIdIndex: bigint\n seedUid: `0x${string}`\n seedSchemaUid: `0x${string}`\n versionUid: `0x${string}`\n versionSchemaUid: `0x${string}`\n seedIsRevocable: boolean\n listOfAttestations: MultiPublishRequest['listOfAttestations']\n propertiesToUpdate: Array<{\n publishLocalIdIndex: bigint\n propertySchemaUid: `0x${string}`\n }>\n}\n\nexport function encodeMultiPublish(\n to: Address,\n requests: MultiPublishRequest[],\n gas?: bigint,\n): SeedTxRequest {\n return {\n to,\n data: encodeFunctionData({\n abi: multiPublishAbi,\n functionName: 'multiPublish',\n args: [requests],\n }),\n gas,\n }\n}\n\nexport function encodeMultiPublishInteger(\n to: Address,\n requests: MultiPublishIntegerRequest[],\n gas?: bigint,\n): SeedTxRequest {\n return {\n to,\n data: encodeFunctionData({\n abi: multiPublishIntegerAbi,\n functionName: 'multiPublish',\n args: [requests],\n }),\n gas,\n }\n}\n\nexport function encodeSetEas(to: Address, eas: Address): SeedTxRequest {\n return {\n to,\n data: encodeFunctionData({\n abi: publisherReadWriteAbi,\n functionName: 'setEas',\n args: [eas],\n }),\n }\n}\n\nexport async function readGetEas(managedAddress: Address): Promise<Address> {\n return getPublishPublicClient().readContract({\n address: managedAddress,\n abi: publisherReadWriteAbi,\n functionName: 'getEas',\n })\n}\n\nexport async function readIsActiveSigner(\n managedAddress: Address,\n signer: Address,\n): Promise<boolean> {\n return getPublishPublicClient().readContract({\n address: managedAddress,\n abi: publisherReadWriteAbi,\n functionName: 'isActiveSigner',\n args: [signer],\n })\n}\n\nexport async function readFactoryGetAddress(\n adminSigner: Address,\n data: Hex = '0x',\n): Promise<Address> {\n const { thirdwebAccountFactoryAddress } = getPublishConfig()\n return getPublishPublicClient().readContract({\n address: (thirdwebAccountFactoryAddress ||\n THIRDWEB_ACCOUNT_FACTORY_ADDRESS) as Address,\n abi: managedAccountFactoryAbi,\n functionName: 'getAddress',\n args: [adminSigner, data],\n })\n}\n\nexport function encodeCreateAccount(\n admin: Address,\n data: Hex = '0x',\n): SeedTxRequest {\n const { thirdwebAccountFactoryAddress } = getPublishConfig()\n return {\n to: (thirdwebAccountFactoryAddress ||\n THIRDWEB_ACCOUNT_FACTORY_ADDRESS) as Address,\n data: encodeFunctionData({\n abi: managedAccountFactoryAbi,\n functionName: 'createAccount',\n args: [admin, data],\n }),\n }\n}\n\nexport type EasAttestParams = {\n schema: `0x${string}`\n data: {\n recipient?: `0x${string}`\n expirationTime?: bigint\n revocable?: boolean\n refUID: `0x${string}`\n data: `0x${string}`\n value?: bigint\n }\n}\n\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' as const\n\nexport function encodeEasAttest(params: EasAttestParams): SeedTxRequest {\n const { easContractAddress } = getPublishConfig()\n return {\n to: easContractAddress as Address,\n data: encodeFunctionData({\n abi: easAbi,\n functionName: 'attest',\n args: [\n {\n schema: params.schema,\n data: {\n recipient: (params.data.recipient ?? ZERO_ADDRESS) as Address,\n expirationTime: params.data.expirationTime ?? 0n,\n revocable: params.data.revocable ?? true,\n refUID: params.data.refUID,\n data: params.data.data,\n value: params.data.value ?? 0n,\n },\n },\n ],\n }),\n }\n}\n\nexport type MultiAttestationRequest = {\n schema: `0x${string}`\n data: Array<{\n recipient: `0x${string}`\n expirationTime: bigint\n revocable: boolean\n refUID: `0x${string}`\n data: `0x${string}`\n value: bigint\n }>\n}\n\nexport function encodeEasMultiAttest(requests: MultiAttestationRequest[]): SeedTxRequest {\n const { easContractAddress } = getPublishConfig()\n return {\n to: easContractAddress as Address,\n data: encodeFunctionData({\n abi: easAbi,\n functionName: 'multiAttest',\n args: [requests],\n }),\n }\n}\n\nexport type MultiRevocationRequest = {\n schema: `0x${string}`\n data: Array<{\n uid: `0x${string}`\n value?: bigint\n }>\n}\n\nexport function encodeEasMultiRevoke(requests: MultiRevocationRequest[]): SeedTxRequest {\n const { easContractAddress } = getPublishConfig()\n return {\n to: easContractAddress as Address,\n data: encodeFunctionData({\n abi: easAbi,\n functionName: 'multiRevoke',\n args: [\n requests.map((r) => ({\n schema: r.schema,\n data: r.data.map((d) => ({\n uid: d.uid,\n value: d.value ?? 0n,\n })),\n })),\n ],\n }),\n }\n}\n\nexport type SchemaRecord = {\n uid: string\n resolver: string\n revocable: boolean\n schema: string\n}\n\nconst ZERO_BYTES32 = '0x' + '0'.repeat(64)\n\nexport async function readSchemaRecord(uid: string): Promise<SchemaRecord | null> {\n const result = await getPublishPublicClient().readContract({\n address: SCHEMA_REGISTRY_ADDRESS as Address,\n abi: schemaRegistryAbi,\n functionName: 'getSchema',\n args: [uid as Hex],\n })\n if (!result || result.uid === ZERO_BYTES32) return null\n return {\n uid: result.uid,\n resolver: result.resolver,\n revocable: result.revocable,\n schema: result.schema,\n }\n}\n\nexport function encodeRegisterSchema(params: {\n schema: string\n resolverAddress: string\n revocable: boolean\n}): SeedTxRequest {\n return {\n to: SCHEMA_REGISTRY_ADDRESS as Address,\n data: encodeFunctionData({\n abi: schemaRegistryAbi,\n functionName: 'register',\n args: [params.schema, params.resolverAddress as Address, params.revocable],\n }),\n }\n}\n","import { encodeAbiParameters, encodeFunctionData, parseEventLogs, type Log } from 'viem'\nimport { getPublishConfig } from '~/config'\nimport { easAbi } from './abi/eas'\nimport {\n encodeEasAttest,\n encodeEasMultiAttest,\n encodeEasMultiRevoke,\n type EasAttestParams,\n type MultiAttestationRequest,\n type MultiRevocationRequest,\n} from './contracts'\nimport type { SeedTxRequest } from './seedSigner'\n\nexport type { EasAttestParams, MultiAttestationRequest, MultiRevocationRequest }\n\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' as const\nconst ZERO_BYTES32 = ('0x' + '0'.repeat(64)) as `0x${string}`\n\n/**\n * Prepares a single EAS attest call (encoded SeedTxRequest).\n */\nexport function prepareEasAttest(params: EasAttestParams): SeedTxRequest {\n return encodeEasAttest(params)\n}\n\n/**\n * Prepares an EAS multiAttest call for batch attestations.\n */\nexport function prepareEasMultiAttest(requests: MultiAttestationRequest[]): SeedTxRequest {\n return encodeEasMultiAttest(requests)\n}\n\n/**\n * Encodes a bytes32 value for Seed/Version attestation data.\n * Equivalent to Solidity abi.encode(bytes32).\n */\nexport function encodeBytes32(value: `0x${string}`): `0x${string}` {\n return encodeAbiParameters([{ type: 'bytes32' }], [value]) as `0x${string}`\n}\n\n/**\n * Extracts the attestation UID from an EAS attest transaction receipt.\n */\nexport function getAttestationUidFromReceipt(\n receipt: { logs?: Array<{ address?: string; data?: string; topics?: unknown[] }> },\n easContractAddress: string,\n): string | undefined {\n const all = getAttestedUidsFromReceipt(receipt, easContractAddress)\n return all[0]?.uid\n}\n\nexport type EasAttestedPair = { schemaUid: string; uid: string }\n\n/**\n * All `Attested` events from the EAS contract in this receipt, in log order.\n */\nexport function getAttestedUidsFromReceipt(\n receipt: { logs?: Array<{ address?: string; data?: string; topics?: unknown[] }> },\n easContractAddress: string,\n): EasAttestedPair[] {\n if (!receipt.logs?.length) return []\n const want = easContractAddress.toLowerCase()\n const logs = receipt.logs.filter((l) => l.address && l.address.toLowerCase() === want)\n if (!logs.length) return []\n try {\n const parsed = parseEventLogs({\n abi: easAbi,\n eventName: 'Attested',\n logs: logs as Log[],\n strict: false,\n })\n const out: EasAttestedPair[] = []\n for (const ev of parsed) {\n const uid = ev.args?.uid as string | undefined\n const schemaUid = ev.args?.schemaUID as string | undefined\n if (!uid || uid === ZERO_BYTES32) continue\n if (!schemaUid) continue\n out.push({ schemaUid, uid })\n }\n return out\n } catch {\n return []\n }\n}\n\n/**\n * Prepares an EAS multiRevoke call for batch revocation.\n * When `modularAccountModuleContract` is configured, targets the executor module so\n * automation session keys (module-only approvedTargets) can revoke with ManagedAccount\n * as the EAS attester. Otherwise targets EAS directly.\n */\nexport function prepareEasMultiRevoke(requests: MultiRevocationRequest[]): SeedTxRequest {\n const { modularAccountModuleContract } = getPublishConfig()\n const module = modularAccountModuleContract?.trim()\n if (module && /^0x[0-9a-fA-F]{40}$/.test(module)) {\n return encodeEasMultiRevokeTo(module as `0x${string}`, requests)\n }\n return encodeEasMultiRevoke(requests)\n}\n\n/**\n * Encode multiRevoke calldata to an arbitrary `to` (EAS or Seed executor module).\n */\nexport function encodeEasMultiRevokeTo(\n to: `0x${string}`,\n requests: MultiRevocationRequest[],\n): SeedTxRequest {\n return {\n to,\n data: encodeFunctionData({\n abi: easAbi,\n functionName: 'multiRevoke',\n args: [\n requests.map((r) => ({\n schema: r.schema,\n data: r.data.map((d) => ({\n uid: d.uid,\n value: d.value ?? 0n,\n })),\n })),\n ],\n }),\n }\n}\n\nexport { ZERO_ADDRESS, ZERO_BYTES32 }\n","import { client as seedClient } from '@seedprotocol/sdk'\nimport type { PublishWallet, SeedSigner, SeedTxSender } from './seedSigner'\n\nexport type PublishWalletSession = PublishWallet & {\n /** Addresses to treat as owned in the Seed SDK (EOA + smart account, etc.). */\n ownedAddresses?: string[]\n /** Preferred publisher address for new seeds (defaults to signer.address). */\n publisherAddress?: string\n}\n\nlet session: PublishWalletSession | null = null\n\nfunction waitUntilSeedInitialized(): Promise<void> {\n if (seedClient.isInitialized()) return Promise.resolve()\n return new Promise((resolve) => {\n seedClient.onReady(() => resolve())\n })\n}\n\n/**\n * Register the active publish wallet (EIP-1193, ethers, Thirdweb adapter, etc.).\n * Syncs owned addresses into the Seed SDK when possible.\n */\nexport async function setPublishWallet(\n next: PublishWalletSession | null,\n): Promise<void> {\n session = next\n if (!next) return\n await waitUntilSeedInitialized()\n const owned = new Set<string>()\n for (const a of next.ownedAddresses ?? []) {\n if (a) owned.add(a.toLowerCase())\n }\n owned.add(next.signer.address.toLowerCase())\n owned.add(next.txSender.address.toLowerCase())\n if (next.publisherAddress) owned.add(next.publisherAddress.toLowerCase())\n try {\n await seedClient.setAddresses({ owned: [...owned] })\n const claimAs = next.publisherAddress ?? next.signer.address\n if (claimAs) {\n await seedClient.claimUnpublishedDrafts(claimAs)\n }\n } catch (err) {\n console.warn('[publishWalletRegistry] Failed to set seed client addresses:', err)\n }\n}\n\nexport function getPublishWallet(): PublishWalletSession | null {\n return session\n}\n\nexport function clearPublishWallet(): void {\n session = null\n}\n\n/** Convenience for callers that only need signing. */\nexport function getRegisteredSigner(): SeedSigner | null {\n return session?.signer ?? null\n}\n\n/** Convenience for callers that only need sending. */\nexport function getRegisteredTxSender(): SeedTxSender | null {\n return session?.txSender ?? null\n}\n","import type { Address, Hex, SignableMessage } from 'viem'\nimport { ethers } from 'ethers'\n\n/** Encoded calldata ready for submission (viem path). */\nexport type SeedTxRequest = {\n to: Address\n data: Hex\n value?: bigint\n gas?: bigint\n}\n\n/**\n * Vendor-neutral key custody for Arweave DataItems and message signing.\n * Does not submit on-chain transactions.\n */\nexport interface SeedSigner {\n readonly address: Address\n\n /**\n * personal_sign. For Arweave/ANS-104 use `message: { raw: Hex | Uint8Array }`.\n * Plain string is UTF-8 prefixed hash.\n */\n signMessage(args: { message: SignableMessage }): Promise<Hex>\n}\n\n/**\n * Vendor-neutral transaction submission (EOA, AA, sponsored, etc.).\n */\nexport interface SeedTxSender {\n readonly address: Address\n\n /** Submit already-encoded calldata. */\n sendTransaction(tx: SeedTxRequest): Promise<{ transactionHash: Hex }>\n\n waitForReceipt?(transactionHash: Hex): Promise<{ status: 'success' | 'reverted' }>\n}\n\n/** Bundle used by publish / revoke flows that need both signing and sending. */\nexport type PublishWallet = {\n signer: SeedSigner\n txSender: SeedTxSender\n}\n\nconst SEED_SIGNER_BRAND = Symbol.for('seedprotocol.SeedSigner')\nconst SEED_TX_SENDER_BRAND = Symbol.for('seedprotocol.SeedTxSender')\n\ntype BrandedSeedSigner = SeedSigner & { readonly [SEED_SIGNER_BRAND]: true }\ntype BrandedSeedTxSender = SeedTxSender & { readonly [SEED_TX_SENDER_BRAND]: true }\n\nfunction brandSigner(signer: SeedSigner): SeedSigner {\n return Object.assign(signer, { [SEED_SIGNER_BRAND]: true as const }) as BrandedSeedSigner\n}\n\nfunction brandTxSender(sender: SeedTxSender): SeedTxSender {\n return Object.assign(sender, { [SEED_TX_SENDER_BRAND]: true as const }) as BrandedSeedTxSender\n}\n\nexport function isSeedSigner(value: unknown): value is SeedSigner {\n return !!value && typeof value === 'object' && SEED_SIGNER_BRAND in value\n}\n\nexport function isSeedTxSender(value: unknown): value is SeedTxSender {\n return !!value && typeof value === 'object' && SEED_TX_SENDER_BRAND in value\n}\n\nexport function isPublishWallet(value: unknown): value is PublishWallet {\n return (\n !!value &&\n typeof value === 'object' &&\n 'signer' in value &&\n 'txSender' in value &&\n isSeedSigner((value as PublishWallet).signer) &&\n isSeedTxSender((value as PublishWallet).txSender)\n )\n}\n\n/**\n * Wrap an ethers Wallet for tests / EOA scripts (signs + sends; no AA sponsorship).\n * Suitable for ANS-104 DataItem signing. Not a ManagedAccount session-key UserOp sender —\n * for automation on-chain publish, use a PublishWallet whose txSender submits UserOps\n * through the ManagedAccount (see docs/PUBLISH_AUTOMATION.md).\n */\nexport function fromEthersWallet(wallet: ethers.Wallet): PublishWallet {\n const address = wallet.address as Address\n const signer = brandSigner({\n address,\n signMessage: async ({ message }) => {\n if (typeof message === 'string') {\n return (await wallet.signMessage(message)) as Hex\n }\n const raw = message.raw\n const bytes =\n typeof raw === 'string'\n ? ethers.getBytes(raw)\n : raw instanceof Uint8Array\n ? raw\n : new Uint8Array(raw)\n return (await wallet.signMessage(bytes)) as Hex\n },\n })\n const txSender = brandTxSender({\n address,\n sendTransaction: async (tx) => {\n const result = await wallet.sendTransaction({\n to: tx.to,\n data: tx.data,\n value: tx.value,\n gasLimit: tx.gas,\n })\n return { transactionHash: result.hash as Hex }\n },\n })\n return { signer, txSender }\n}\n\n/**\n * Coerce a branded SeedSigner, PublishWallet.signer, or pass-through unknown branded value.\n * Does not wrap Thirdweb Accounts — use `fromThirdwebAccount` from `@seedprotocol/publish/thirdweb`.\n */\nexport function asSeedSigner(value: SeedSigner | PublishWallet): SeedSigner {\n if (isPublishWallet(value)) return value.signer\n if (isSeedSigner(value)) return value\n throw new Error(\n '@seedprotocol/publish: expected a SeedSigner or PublishWallet. Use fromEthersWallet, fromEip1193Provider, or fromThirdwebAccount.',\n )\n}\n\n/** Resolve tx sender from a PublishWallet or branded SeedTxSender. */\nexport function asSeedTxSender(value: SeedTxSender | PublishWallet): SeedTxSender {\n if (isPublishWallet(value)) return value.txSender\n if (isSeedTxSender(value)) return value\n throw new Error(\n '@seedprotocol/publish: expected a SeedTxSender or PublishWallet. Use fromEthersWallet, fromEip1193Provider, or fromThirdwebAccount.',\n )\n}\n\n/** Prefer PublishWallet; if only a branded SeedSigner is passed, throw (tx path needs a sender). */\nexport function asPublishWallet(value: PublishWallet | SeedSigner): PublishWallet {\n if (isPublishWallet(value)) return value\n throw new Error(\n '@seedprotocol/publish: expected a PublishWallet (signer + txSender). Use fromEthersWallet, fromEip1193Provider, or fromThirdwebAccount.',\n )\n}\n\n/** @internal used by optional Thirdweb adapter */\nexport { brandSigner, brandTxSender }\n","import { prepareTransaction, sendTransaction, defineChain } from 'thirdweb'\nimport type { Account } from 'thirdweb/wallets'\nimport { optimismSepolia as thirdwebOptimismSepolia } from 'thirdweb/chains'\nimport type { Address, Hex } from 'viem'\nimport {\n brandSigner,\n brandTxSender,\n isPublishWallet,\n isSeedSigner,\n type PublishWallet,\n type SeedSigner,\n} from '../seedSigner'\nimport { getPublishViemChain } from '../chainConfig'\n\nfunction resolveThirdwebChain() {\n const viemChain = getPublishViemChain()\n if (viemChain.id === thirdwebOptimismSepolia.id) {\n return thirdwebOptimismSepolia\n }\n return defineChain({\n id: viemChain.id,\n name: viemChain.name,\n nativeCurrency: viemChain.nativeCurrency,\n rpc: viemChain.rpcUrls.default.http[0] ?? '',\n })\n}\n\n/**\n * Wrap a Thirdweb Account so AA gas sponsorship still flows through thirdweb `sendTransaction`.\n */\nexport function fromThirdwebAccount(account: Account): PublishWallet {\n const address = account.address as Address\n const signer = brandSigner({\n address,\n signMessage: async ({ message }) => {\n const sig = await account.signMessage({ message })\n return sig as Hex\n },\n })\n const txSender = brandTxSender({\n address,\n sendTransaction: async (tx) => {\n const { getClient } = await import('../thirdweb')\n const chain = resolveThirdwebChain()\n const transaction = prepareTransaction({\n client: getClient(),\n chain,\n to: tx.to,\n data: tx.data,\n value: tx.value,\n gas: tx.gas,\n })\n const result = await sendTransaction({ account, transaction })\n return { transactionHash: result.transactionHash as Hex }\n },\n })\n return { signer, txSender }\n}\n\n/**\n * Coerce Thirdweb Account, SeedSigner, or PublishWallet to PublishWallet.\n */\nexport function asThirdwebPublishWallet(\n accountOrWallet: Account | SeedSigner | PublishWallet,\n): PublishWallet {\n if (isPublishWallet(accountOrWallet)) return accountOrWallet\n if (isSeedSigner(accountOrWallet)) {\n throw new Error(\n '@seedprotocol/publish/thirdweb: SeedSigner alone cannot send sponsored txs. Pass fromThirdwebAccount(account) or a PublishWallet.',\n )\n }\n return fromThirdwebAccount(accountOrWallet)\n}\n\n/** @deprecated Prefer {@link asThirdwebPublishWallet}; kept for call-site migration. */\nexport function asSeedSignerFromThirdweb(\n accountOrWallet: Account | SeedSigner | PublishWallet,\n): SeedSigner {\n if (isPublishWallet(accountOrWallet)) return accountOrWallet.signer\n if (isSeedSigner(accountOrWallet)) return accountOrWallet\n return fromThirdwebAccount(accountOrWallet).signer\n}\n","import { prepareEasMultiRevoke } from '~/helpers/easDirect'\nimport { waitForPublishReceipt } from '~/helpers/chainClient'\nimport { getPublishWallet } from '~/helpers/publishWalletRegistry'\nimport { fromThirdwebAccount } from '~/helpers/adapters/thirdwebAccount'\nimport type { PublishWallet } from '~/helpers/seedSigner'\nimport { getPublishConfig } from '~/config'\nimport {\n getVersionsForSeedUid,\n getMetadataAttestationUidsForSeedUid,\n getAttesterForSeed,\n updateSeedRevokedAt,\n VERSION_SCHEMA_UID_OPTIMISM_SEPOLIA,\n isValidEasAttestationUid,\n getGetAdditionalSyncAddresses,\n} from '@seedprotocol/sdk'\n\n/**\n * True when the EAS attester is the configured executor module (legacy path where the\n * module itself was recorded as attester). ManagedAccount attesters are not blocked.\n */\nasync function isLegacyModularExecutorAttester(attester: string | null): Promise<boolean> {\n if (!attester) return false\n const additionalGetter = getGetAdditionalSyncAddresses()\n if (!additionalGetter) return false\n const additional = await additionalGetter()\n const attesterLower = attester.toLowerCase()\n return !!additional?.some((a: string | undefined) => a?.toLowerCase() === attesterLower)\n}\n\n/**\n * Revokes the Seed attestation and all Version and metadata attestations on EAS.\n * Prefer the registered publish wallet; fall back to Thirdweb connected account when present.\n *\n * When `modularAccountModuleContract` is set, `multiRevoke` is sent to the executor module\n * so automation session keys (module-only targets) can revoke as the ManagedAccount.\n */\nexport async function revokeAttestations(params: {\n seedLocalId: string\n seedUid: string\n seedSchemaUid: string\n}): Promise<void> {\n const { seedLocalId, seedUid, seedSchemaUid } = params\n const attester = await getAttesterForSeed({ seedLocalId, seedUid })\n\n let wallet: PublishWallet | null = getPublishWallet()\n if (!wallet) {\n try {\n const { getConnectedAccount } = await import('~/helpers/thirdweb')\n const { resolveRevokeAccount } = await import('~/helpers/resolveRevokeAccount')\n const account = await getConnectedAccount()\n if (!account) {\n throw new Error('No wallet connected. Connect a wallet to revoke attestations.')\n }\n const revokeAccount = await resolveRevokeAccount({ account, attester })\n wallet = fromThirdwebAccount(revokeAccount)\n } catch (err) {\n if (err instanceof Error && err.message.includes('No wallet connected')) throw err\n if (err instanceof Error && err.message.includes('Revocation not supported')) throw err\n throw new Error(\n 'No wallet connected. Use useSeedWallet / setPublishWallet, or @seedprotocol/publish/thirdweb ConnectButton.',\n { cause: err },\n )\n }\n } else if (await isLegacyModularExecutorAttester(attester)) {\n // Registered automation / publish wallet cannot become the module attester on EAS.\n // Prefer ManagedAccount attester + executor-routed multiRevoke (module configured).\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 }\n\n const txSender = wallet.txSender\n\n const [versionRows, metadataRows] = await Promise.all([\n getVersionsForSeedUid(seedUid),\n getMetadataAttestationUidsForSeedUid(seedUid),\n ])\n\n const versionUids = versionRows\n .map((r: { uid: string }) => r.uid)\n .filter((uid: string) => isValidEasAttestationUid(uid))\n const metadataBySchema = new Map<string, string[]>()\n for (const { uid, schemaUid } of metadataRows) {\n if (!isValidEasAttestationUid(uid)) continue\n const list = metadataBySchema.get(schemaUid) ?? []\n list.push(uid)\n metadataBySchema.set(schemaUid, list)\n }\n\n const requests: Array<{\n schema: `0x${string}`\n data: Array<{ uid: `0x${string}`; value?: bigint }>\n }> = []\n\n for (const [schemaUid, uids] of metadataBySchema) {\n if (uids.length > 0) {\n requests.push({\n schema: schemaUid as `0x${string}`,\n data: uids.map((uid: string) => ({ uid: uid as `0x${string}` })),\n })\n }\n }\n\n if (versionUids.length > 0) {\n requests.push({\n schema: VERSION_SCHEMA_UID_OPTIMISM_SEPOLIA as `0x${string}`,\n data: versionUids.map((uid: string) => ({ uid: uid as `0x${string}` })),\n })\n }\n\n requests.push({\n schema: seedSchemaUid as `0x${string}`,\n data: [{ uid: seedUid as `0x${string}` }],\n })\n\n for (const req of requests) {\n if (req.data.length === 0) continue\n const multiRevokeTx = prepareEasMultiRevoke([req])\n try {\n const result = await txSender.sendTransaction(multiRevokeTx)\n await waitForPublishReceipt(result.transactionHash)\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err)\n if (msg.includes('AccessDenied') || msg.includes('0x4ca88867')) {\n throw new Error(\n 'Only the original attester can revoke attestations. Connect the wallet that published this item.',\n )\n }\n if (msg.includes('AlreadyRevoked')) {\n continue\n }\n throw err\n }\n }\n\n const revokedAt = Math.floor(Date.now() / 1000)\n await updateSeedRevokedAt({ seedLocalId, revokedAt })\n}\n","import {\n DEFAULT_ARWEAVE_GRAPHQL_URL,\n setAdditionalSyncAddresses,\n setGetPublisherForNewSeeds,\n setRevokeExecutor,\n type TransactionTag,\n} from '@seedprotocol/sdk'\nimport type { Chain } from 'viem'\nimport { revokeAttestations } from './services/revoke/revokeAttestations'\nimport {\n THIRDWEB_ACCOUNT_FACTORY_ADDRESS,\n EAS_CONTRACT_ADDRESS,\n} from './helpers/constants'\nimport { ethers } from 'ethers'\nimport { DEFAULT_PUBLISH_CHAIN } from './helpers/defaultChain'\nimport { getPublishWallet } from './helpers/publishWalletRegistry'\n\n/** Serialized upload item for Arweave signing (input to callback or used internally with JWK) */\nexport interface SerializedPublishUpload {\n versionLocalId: string\n itemPropertyName: string\n transactionJson: Record<string, unknown>\n}\n\n/** Result from Arweave signing (signed transaction + metadata) */\nexport interface ArweaveTransactionInfoResult {\n transaction: Record<string, unknown> & { chunks?: unknown }\n versionId: string\n modelName: string\n}\n\n/** Result from DataItem signing (compatible shape for createAttestations) */\nexport interface ArweaveDataItemInfoResult {\n transaction: { id: string }\n versionId?: string\n modelName?: string\n}\n\nexport type PublishAccountMode = 'eoa' | 'eip7702'\n\nexport interface PublishConfig {\n /**\n * Thirdweb client id — only required when using `@seedprotocol/publish/thirdweb`.\n * When set without `rpcUrl`, the public client falls back to Thirdweb’s RPC edge.\n */\n thirdwebClientId?: string\n /**\n * Viem chain for reads and adapters. Defaults to Optimism Sepolia.\n */\n chain?: Chain\n /**\n * JSON-RPC URL for the publish chain. Required when `thirdwebClientId` is unset.\n */\n rpcUrl?: string\n /**\n * ERC-4337 / EIP-7702 bundler URL for permissionless `SeedTxSender` (gasless path).\n */\n bundlerUrl?: string\n /**\n * Paymaster / sponsorship endpoint for permissionless EIP-7702 sends.\n */\n paymasterUrl?: string\n /**\n * How non-Thirdweb wallets submit txs. Defaults to `eip7702` when `bundlerUrl` is set, else `eoa`.\n */\n accountMode?: PublishAccountMode\n /** Upload API base URL (e.g. from VITE_UPLOAD_API_BASE_URL or NEXT_PUBLIC_UPLOAD_API_BASE_URL). Also used for bundler when useArweaveBundler is true. */\n uploadApiBaseUrl: string\n /**\n * Gateway transport for publish + read paths. Prefer resolving once via\n * `resolveSeedGatewayEndpoints(seedGatewayConfigFromSeedConfig(config))` at app bootstrap\n * and passing `uploadApiBaseUrl` / `arweaveGraphqlUrl` from the result.\n */\n gatewayTransport?: 'http-gateway' | 'hyper' | 'hybrid'\n /** Operator Gateway Hyper key (z32) — informational; sidecar is configured separately. */\n gatewayHyperKey?: string\n /**\n * Optional origin for verifying uploads via `GET /api/upload/arweave/data/:id`.\n * Defaults to {@link uploadApiBaseUrl} (e.g. set `ARWEAVE_UPLOAD_API_BASE_URL` as `uploadApiBaseUrl`).\n */\n arweaveUploadVerificationBaseUrl?: string\n /**\n * Arweave gateway GraphQL URL for resolving L1 bundle tx ids after bundler upload.\n * Defaults to {@link DEFAULT_ARWEAVE_GRAPHQL_URL}.\n */\n arweaveGraphqlUrl?: string\n /**\n * Use integer indices instead of string localId/publishLocalId for multiPublish (gas-efficient).\n * Set to true when using the new contract that expects uint256 localIdIndex/publishLocalIdIndex.\n * Default: false (uses string-based payload for backward compatibility).\n */\n useIntegerLocalIds?: boolean\n /**\n * Bypass the SeedProtocol contract and call EAS attest/multiAttest directly from the user's wallet.\n * Default: false (uses contract multiPublish).\n */\n useDirectEas?: boolean\n /**\n * Optional IModularCore module to ensure is installed on the **ModularCore** account contract.\n * When set, onConnect / publish prep will check getInstalledModules and install if missing.\n * If the smart account is not ModularCore (no Router), install is skipped — typical for default EIP-4337 accounts.\n */\n modularAccountModuleContract?: string\n /** Optional module install data (default \"0x\"). Used with modularAccountModuleContract. */\n modularAccountModuleData?: string\n /**\n * Use the modular executor for multiPublish.\n * Default: false (uses the smart wallet executor).\n */\n useModularExecutor?: boolean\n /**\n * When true (and `useModularExecutor`), attempts to deploy / bootstrap the modular in-app wallet’s\n * EIP-7702 smart account on Optimism Sepolia via Thirdweb’s `deploySmartAccount` when bytecode is still empty.\n * When **undefined** and `useModularExecutor` is true, defaults to **true**. Set explicitly to **false** to surface\n * an error instead of auto-deploying.\n */\n autoDeployEip7702ModularAccount?: boolean\n /**\n * When true (and `useModularExecutor`), attempts to deploy the ManagedAccount via the factory\n * if it is not yet deployed on Optimism Sepolia. Default: false (surface `managed_not_ready` instead).\n */\n autoDeployManagedAccount?: boolean\n /**\n * Optional override for automatic ManagedAccount factory deploy when {@link autoDeployManagedAccount} is true.\n * When unset, uses Thirdweb `deploySmartAccount` on the managed EIP-4337 in-app wallet account.\n */\n deployManagedAccount?: (params: {\n managedAddress: string\n managedSigningAccount: import('./helpers/seedSigner').PublishWallet\n }) => Promise<void>\n /**\n * Called when optional wallet setup steps fail after connect (e.g. executor module install).\n */\n onWalletSetupWarning?: (error: unknown) => void\n /**\n * EXPERIMENTAL: Use Arweave bundler for instant uploads instead of reimbursement + chunk upload.\n * When true, skips sendReimbursementRequest, pollForConfirmation, and chunk-by-chunk uploadData.\n * Uses uploadApiBaseUrl for the bundler endpoint. Not yet validated for production.\n */\n useArweaveBundler?: boolean\n /**\n * Tags appended to every Arweave upload after Content-SHA-256 / Content-Type (e.g. App-Name).\n * Merged at publish time with {@link CreatePublishOptions.arweaveUploadTags} as\n * `[...config, ...options]`.\n */\n arweaveUploadTags?: TransactionTag[]\n /**\n * Default Html embedded data-URI policy for publishes when not overridden per {@link CreatePublishOptions}.\n * Default behavior when unset: `materialize`.\n */\n htmlEmbeddedDataUriPolicy?: import('./types').HtmlEmbeddedDataUriPolicy\n /**\n * Optional fallback: Sign Arweave upload transactions (non-bundler path). Prefer passing at createPublish time.\n */\n signArweaveTransactions?: (\n uploads: SerializedPublishUpload[]\n ) => Promise<ArweaveTransactionInfoResult[]>\n /**\n * Optional fallback: Arweave JWK for in-process signing (non-bundler path). Prefer passing at createPublish time.\n */\n arweaveJwk?: { kty: string; n: string; e: string; d?: string; [key: string]: unknown }\n /**\n * Optional fallback: Signer for DataItem creation when useArweaveBundler is true. Prefer passing at createPublish time.\n */\n dataItemSigner?: ethers.Wallet | import('./helpers/seedSigner').SeedSigner\n /**\n * Optional fallback: Sign DataItems when useArweaveBundler is true. Prefer passing at createPublish time.\n * Each upload includes `tags` (content + configured {@link arweaveUploadTags}); forward them into the DataItem.\n */\n signDataItems?: (\n uploads: import('./services/publish/helpers/getPublishUploadData').PublishUploadData[]\n ) => Promise<ArweaveDataItemInfoResult[]>\n /**\n * Optional USD spot prices for publish cost estimates. When unset, Coinbase ETH-USD / AR-USD spots are used.\n * Results are cached for 60s.\n */\n getTokenPrices?: () => Promise<{ ethUsd: number; arUsd: number }>\n}\n\n/** Options passed at createPublish time. Signers here override config fallbacks. */\nexport interface CreatePublishOptions {\n /** `patch` (default): pending properties only. `new_version`: new Version attestation + all properties. */\n publishMode?: import('./types').PublishMode\n /**\n * Required when useArweaveBundler: sign DataItems (wallet flow).\n * Use each upload's `tags` when building the signed DataItem.\n */\n signDataItems?: (\n uploads: import('./services/publish/helpers/getPublishUploadData').PublishUploadData[]\n ) => Promise<ArweaveDataItemInfoResult[]>\n /** Required when useArweaveBundler: signer for DataItems (backend/script flow) */\n dataItemSigner?: ethers.Wallet | import('./helpers/seedSigner').SeedSigner\n /** Required when NOT useArweaveBundler: sign Arweave transactions */\n signArweaveTransactions?: (\n uploads: SerializedPublishUpload[]\n ) => Promise<ArweaveTransactionInfoResult[]>\n /** Required when NOT useArweaveBundler: JWK for in-process signing */\n arweaveJwk?: { kty: string; n: string; e: string; d?: string; [key: string]: unknown }\n /**\n * Extra tags for this publish only, appended after {@link PublishConfig.arweaveUploadTags}.\n * Resolved order: `[...initPublishTags, ...theseTags]`.\n */\n arweaveUploadTags?: TransactionTag[]\n /**\n * Default for Html embedded data-URI handling when a property does not set `htmlEmbeddedDataUriPolicy`.\n * Default: `materialize`.\n */\n htmlEmbeddedDataUriPolicy?: import('./types').HtmlEmbeddedDataUriPolicy\n}\n\n/** Internal: module-level config ref set by PublishProvider on mount. */\nlet configRef: PublishConfig | null = null\n\n/**\n * Internal: Set config ref. Called by PublishProvider on mount or initPublish.\n */\nexport function setConfigRef(c: PublishConfig | null): void {\n configRef = c\n}\n\n/**\n * Internal: Get current config ref. Used by PublishProvider when config is not passed.\n */\nexport function getConfigRef(): PublishConfig | null {\n return configRef\n}\n\n/**\n * Initialize the publish package. Call once before using PublishManager or other publish APIs.\n * Registers the config and SDK hooks (revoke executor, getPublisherForNewSeeds, etc.).\n * For React apps, you can alternatively pass config to PublishProvider.\n */\nexport function initPublish(c: PublishConfig): void {\n setConfigRef(c)\n setGetPublisherForNewSeeds(async () => {\n const wallet = getPublishWallet()\n if (wallet?.publisherAddress) return wallet.publisherAddress\n if (wallet?.signer?.address) return wallet.signer.address\n return undefined\n })\n setRevokeExecutor(revokeAttestations)\n void import('./services/arweaveL1Finalize/worker').then((m) => {\n m.startArweaveL1FinalizeWorker()\n })\n setAdditionalSyncAddresses(async () => {\n if (c.useModularExecutor && c.modularAccountModuleContract) {\n return [c.modularAccountModuleContract]\n }\n return []\n })\n}\n\n/** Alias for initPublish. Use initPublish for the primary API. */\nexport const configurePublish = initPublish\n\nexport interface ResolvedPublishConfig extends PublishConfig {\n thirdwebAccountFactoryAddress: string\n uploadApiBaseUrl: string\n /** Resolved verification origin (defaults to uploadApiBaseUrl). */\n arweaveUploadVerificationBaseUrl: string\n /** Resolved GraphQL endpoint for L1 tx resolution (defaults to DEFAULT_ARWEAVE_GRAPHQL_URL). */\n arweaveGraphqlUrl: string\n easContractAddress: string\n useIntegerLocalIds: boolean\n useDirectEas: boolean\n modularAccountModuleData: string\n useModularExecutor: boolean\n useArweaveBundler: boolean\n /** Resolved: defaults to false. */\n autoDeployManagedAccount: boolean\n /**\n * Resolved: when `useModularExecutor` is true, defaults to true unless explicitly false.\n */\n autoDeployEip7702ModularAccount: boolean\n /** Resolved viem chain (defaults to Optimism Sepolia). */\n chain: Chain\n /** Resolved account mode for non-Thirdweb senders. */\n accountMode: PublishAccountMode\n}\n\n/**\n * Returns the resolved publish config: defaults, env-driven fields, and\n * {@link ResolvedPublishConfig.autoDeployEip7702ModularAccount}.\n *\n * Reads the ref set by {@link initPublish} or {@link PublishProvider} with a `config` prop.\n * **Throws** if publish has not been initialized (same error as other publish APIs).\n */\nexport function getPublishConfig(): ResolvedPublishConfig {\n const config = configRef\n if (!config) {\n throw new Error(\n '@seedprotocol/publish: Call initPublish() or ensure PublishProvider is mounted with config before using the publish package'\n )\n }\n const useArweaveBundler = config.useArweaveBundler ?? false\n const arweaveUploadVerificationBaseUrl =\n config.arweaveUploadVerificationBaseUrl ?? config.uploadApiBaseUrl\n const arweaveGraphqlUrl = config.arweaveGraphqlUrl ?? DEFAULT_ARWEAVE_GRAPHQL_URL\n const useModularExecutor = config.useModularExecutor ?? false\n const chain = config.chain ?? DEFAULT_PUBLISH_CHAIN\n const accountMode: PublishAccountMode =\n config.accountMode ?? (config.bundlerUrl ? 'eip7702' : 'eoa')\n return {\n ...config,\n thirdwebAccountFactoryAddress: THIRDWEB_ACCOUNT_FACTORY_ADDRESS,\n easContractAddress: EAS_CONTRACT_ADDRESS,\n useIntegerLocalIds: config.useIntegerLocalIds ?? false,\n useDirectEas: config.useDirectEas ?? false,\n modularAccountModuleData: config.modularAccountModuleData ?? '0x',\n useModularExecutor,\n useArweaveBundler,\n arweaveUploadVerificationBaseUrl,\n arweaveGraphqlUrl,\n autoDeployManagedAccount: config.autoDeployManagedAccount ?? false,\n autoDeployEip7702ModularAccount: resolveAutoDeployEip7702ModularAccount(config, useModularExecutor),\n chain,\n accountMode,\n }\n}\n\n/** @internal Exported for unit tests. */\nexport function resolveAutoDeployEip7702ModularAccount(\n config: PublishConfig,\n useModularExecutor: boolean,\n): boolean {\n if (config.autoDeployEip7702ModularAccount === true) return true\n if (config.autoDeployEip7702ModularAccount === false) return false\n return useModularExecutor\n}\n"],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -158,6 +158,14 @@ export interface PublishConfig {
158
158
  * Each upload includes `tags` (content + configured {@link arweaveUploadTags}); forward them into the DataItem.
159
159
  */
160
160
  signDataItems?: (uploads: import('./services/publish/helpers/getPublishUploadData').PublishUploadData[]) => Promise<ArweaveDataItemInfoResult[]>;
161
+ /**
162
+ * Optional USD spot prices for publish cost estimates. When unset, Coinbase ETH-USD / AR-USD spots are used.
163
+ * Results are cached for 60s.
164
+ */
165
+ getTokenPrices?: () => Promise<{
166
+ ethUsd: number;
167
+ arUsd: number;
168
+ }>;
161
169
  }
162
170
  /** Options passed at createPublish time. Signers here override config fallbacks. */
163
171
  export interface CreatePublishOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import { R as e, W as t, nt as n } from "./config-BCCU2gwH.js";
2
+ import { r } from "./errors-Du3LNbJN.js";
3
+ import { D as i, d as a, j as o, p as s } from "./publishAuthorization-ctIWvkYC.js";
4
+ import { getContract as c, sendTransaction as l } from "thirdweb";
5
+ import { optimismSepolia as u } from "thirdweb/chains";
6
+ import { addSessionKey as d, removeSessionKey as f, shouldUpdateSessionKey as p } from "thirdweb/extensions/erc4337";
7
+ //#region src/helpers/ensureAutomationSessionKey.ts
8
+ var m = /* @__PURE__ */ n({
9
+ ensureAutomationSessionKey: () => y,
10
+ isAutomationSessionActive: () => x,
11
+ removeAutomationSessionKey: () => b
12
+ }), h = "Could not connect the managed publishing account to authorize an automation session key on Optimism Sepolia. Reconnect and try again.", g = "Could not authorize the automation session key on your publishing account on Optimism Sepolia.", _ = "Could not remove the automation session key from your publishing account on Optimism Sepolia.";
13
+ async function v(e) {
14
+ let t = o();
15
+ await t.autoConnect({
16
+ client: i(),
17
+ chain: u
18
+ });
19
+ let n = t.getAccount();
20
+ if (!n) throw new r(h, "MODULAR_SIGNER_ACTIVATION_FAILED", e);
21
+ return n;
22
+ }
23
+ async function y(e) {
24
+ let { managedAddress: n, sessionKeyAddress: o, expiresAt: f } = e, m = await v(n), h = c({
25
+ client: i(),
26
+ chain: u,
27
+ address: n
28
+ }), _ = s(a({ expiresAt: f })), y = !1;
29
+ try {
30
+ y = await p({
31
+ accountContract: h,
32
+ sessionKeyAddress: o,
33
+ newPermissions: _
34
+ });
35
+ } catch (e) {
36
+ throw new r(g, "MODULAR_SIGNER_ACTIVATION_FAILED", n, e);
37
+ }
38
+ if (y) try {
39
+ let e = d({
40
+ contract: h,
41
+ account: m,
42
+ sessionKeyAddress: o,
43
+ permissions: _
44
+ }), n = await l({
45
+ account: m,
46
+ transaction: e
47
+ });
48
+ await t(n.transactionHash);
49
+ } catch (e) {
50
+ throw new r(g, "MODULAR_SIGNER_ACTIVATION_FAILED", n, e);
51
+ }
52
+ if (!await x(n, o)) throw new r(g, "MODULAR_SIGNER_ACTIVATION_FAILED", n);
53
+ }
54
+ async function b(e) {
55
+ let { managedAddress: n, sessionKeyAddress: a } = e, o = await v(n), s = c({
56
+ client: i(),
57
+ chain: u,
58
+ address: n
59
+ });
60
+ try {
61
+ let e = f({
62
+ contract: s,
63
+ account: o,
64
+ sessionKeyAddress: a
65
+ }), n = await l({
66
+ account: o,
67
+ transaction: e
68
+ });
69
+ await t(n.transactionHash);
70
+ } catch (e) {
71
+ throw new r(_, "MODULAR_SIGNER_ACTIVATION_FAILED", n, e);
72
+ }
73
+ }
74
+ async function x(t, n) {
75
+ try {
76
+ return await e(t, n);
77
+ } catch (e) {
78
+ throw new r(g, "MODULAR_SIGNER_ACTIVATION_FAILED", t, e);
79
+ }
80
+ }
81
+ //#endregion
82
+ export { b as i, m as n, x as r, y as t };
83
+
84
+ //# sourceMappingURL=ensureAutomationSessionKey-DITBy2BP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureAutomationSessionKey-DITBy2BP.js","names":[],"sources":["../src/helpers/ensureAutomationSessionKey.ts"],"sourcesContent":["import { getContract, sendTransaction } from 'thirdweb'\nimport {\n addSessionKey,\n removeSessionKey,\n shouldUpdateSessionKey,\n} from 'thirdweb/extensions/erc4337'\nimport { optimismSepolia } from 'thirdweb/chains'\nimport type { Address } from 'viem'\nimport { ManagedAccountPublishError } from '../errors'\nimport { waitForPublishReceipt } from './chainClient'\nimport { readIsActiveSigner } from './contracts'\nimport {\n buildAutomationSessionKeyPermissions,\n toThirdwebSessionKeyPermissions,\n} from './automationSessionKeyPermissions'\nimport { getClient, getManagedAccountWallet } from './thirdweb'\n\nconst MSG_UNAVAILABLE =\n 'Could not connect the managed publishing account to authorize an automation session key on Optimism Sepolia. Reconnect and try again.'\nconst MSG_ACTIVATION_FAILED =\n 'Could not authorize the automation session key on your publishing account on Optimism Sepolia.'\nconst MSG_REMOVAL_FAILED =\n 'Could not remove the automation session key from your publishing account on Optimism Sepolia.'\n\nasync function getManagedAccountForSessionKeyAdmin(managedAddress: string) {\n const managedWallet = getManagedAccountWallet()\n await managedWallet.autoConnect({ client: getClient(), chain: optimismSepolia })\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: optimismSepolia,\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 const active = await isAutomationSessionActive(managedAddress, sessionKeyAddress)\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: optimismSepolia,\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/** True when `sessionKeyAddress` is an active signer on the ManagedAccount. */\nexport async function isAutomationSessionActive(\n managedAddress: string,\n sessionKeyAddress: string,\n): Promise<boolean> {\n try {\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":";;;;;;;;;;;IAiBM,IACJ,yIACI,IACJ,kGACI,IACJ;AAEF,eAAe,EAAoC,GAAwB;CACzE,IAAM,IAAgB,EAAwB;CAC9C,MAAM,EAAc,YAAY;EAAE,QAAQ,EAAU;EAAG,OAAO;CAAgB,CAAC;CAC/E,IAAM,IAAiB,EAAc,WAAW;CAChD,IAAI,CAAC,GACH,MAAM,IAAI,EACR,GACA,oCACA,CACF;CAEF,OAAO;AACT;AAMA,eAAsB,EAA2B,GAK/B;CAChB,IAAM,EAAE,mBAAgB,sBAAmB,iBAAc,GACnD,IAAiB,MAAM,EAAoC,CAAc,GAEzE,IAAkB,EAAY;EAClC,QAAQ,EAAU;EAClB,OAAO;EACP,SAAS;CACX,CAAC,GACK,IAAc,EAClB,EAAqC,EAAE,aAAU,CAAC,CACpD,GAEI,IAAe;CACnB,IAAI;EACF,IAAe,MAAM,EAAuB;GAC1C;GACA;GACA,gBAAgB;EAClB,CAAC;CACH,SAAS,GAAO;EACd,MAAM,IAAI,EACR,GACA,oCACA,GACA,CACF;CACF;CAEA,IAAI,GACF,IAAI;EACF,IAAM,IAAK,EAAc;GACvB,UAAU;GACV,SAAS;GACT;GACA;EACF,CAAC,GACK,IAAS,MAAM,EAAgB;GAAE,SAAS;GAAgB,aAAa;EAAG,CAAC;EACjF,MAAM,EAAsB,EAAO,eAAgC;CACrE,SAAS,GAAO;EACd,MAAM,IAAI,EACR,GACA,oCACA,GACA,CACF;CACF;CAIF,IAAI,CAAC,MADgB,EAA0B,GAAgB,CAAiB,GAE9E,MAAM,IAAI,EACR,GACA,oCACA,CACF;AAEJ;AAKA,eAAsB,EAA2B,GAG/B;CAChB,IAAM,EAAE,mBAAgB,yBAAsB,GACxC,IAAiB,MAAM,EAAoC,CAAc,GAEzE,IAAkB,EAAY;EAClC,QAAQ,EAAU;EAClB,OAAO;EACP,SAAS;CACX,CAAC;CAED,IAAI;EACF,IAAM,IAAK,EAAiB;GAC1B,UAAU;GACV,SAAS;GACT;EACF,CAAC,GACK,IAAS,MAAM,EAAgB;GAAE,SAAS;GAAgB,aAAa;EAAG,CAAC;EACjF,MAAM,EAAsB,EAAO,eAAgC;CACrE,SAAS,GAAO;EACd,MAAM,IAAI,EACR,GACA,oCACA,GACA,CACF;CACF;AACF;AAGA,eAAsB,EACpB,GACA,GACkB;CAClB,IAAI;EACF,OAAO,MAAM,EACX,GACA,CACF;CACF,SAAS,GAAO;EACd,MAAM,IAAI,EACR,GACA,oCACA,GACA,CACF;CACF;AACF"}
@@ -0,0 +1,127 @@
1
+ import { H as e, J as t, R as n, U as r, W as i, nt as a, r as o } from "./config-BCCU2gwH.js";
2
+ import { a as s, n as c, r as l } from "./errors-Du3LNbJN.js";
3
+ import { D as u, M as d, j as f, v as p } from "./publishAuthorization-ctIWvkYC.js";
4
+ import { deploySmartAccount as m, getContract as h, sendTransaction as g } from "thirdweb";
5
+ import { optimismSepolia as _ } from "thirdweb/chains";
6
+ import { addSessionKey as v, shouldUpdateSessionKey as y } from "thirdweb/extensions/erc4337";
7
+ //#region src/helpers/ensureEip7702ModularAccountReady.ts
8
+ var b = "Modular (EIP-7702) wallet is not connected. Sign in with the same method and try again.", x = "Your modular account is not upgraded to an EIP-7702 smart account on Optimism Sepolia yet. Enable autoDeployEip7702ModularAccount in publish config or complete wallet setup, then retry.", S = "Automatic EIP-7702 smart account setup failed on Optimism Sepolia. Retry or reconnect your wallet.", C = "EIP-7702 upgrade was sent but on-chain bytecode was not detected yet. Wait a moment and retry.", w = 5;
9
+ async function T() {
10
+ let { autoDeployEip7702ModularAccount: t } = o(), n = d();
11
+ await n.autoConnect({
12
+ client: u(),
13
+ chain: _
14
+ });
15
+ let i = n.getAccount();
16
+ if (!i) throw new c(b, "EIP7702_MODULAR_ACCOUNT_UNAVAILABLE");
17
+ let a = u(), s = h({
18
+ client: a,
19
+ chain: _,
20
+ address: i.address
21
+ });
22
+ if (!await e(i.address)) {
23
+ if (!t) throw new c(x, "EIP7702_MODULAR_NOT_UPGRADED", i.address);
24
+ try {
25
+ await m({
26
+ smartAccount: i,
27
+ chain: _,
28
+ client: a,
29
+ accountContract: s
30
+ });
31
+ } catch (e) {
32
+ if (await r(i.address, w)) return;
33
+ throw new c(S, "EIP7702_MODULAR_DEPLOY_FAILED", i.address, e);
34
+ }
35
+ if (!await r(i.address, w)) throw new c(C, "EIP7702_MODULAR_NOT_CONFIRMED", i.address);
36
+ }
37
+ }
38
+ //#endregion
39
+ //#region src/helpers/defaultApprovedTargetsForModularPublish.ts
40
+ function E(e) {
41
+ let t = /* @__PURE__ */ new Set();
42
+ for (let n of e) {
43
+ let e = n.trim().toLowerCase();
44
+ e.startsWith("0x") && e.length === 42 && t.add(e);
45
+ }
46
+ return [...t].sort().map((e) => e);
47
+ }
48
+ function D(e) {
49
+ let n = o(), r = [e, t];
50
+ return n.modularAccountModuleContract?.trim() && r.push(n.modularAccountModuleContract.trim()), E(r);
51
+ }
52
+ //#endregion
53
+ //#region src/helpers/ensureManagedSignerSessionKey.ts
54
+ var O = "Could not connect the managed publishing account to authorize the modular signer on Optimism Sepolia. Reconnect and try again.", k = "Could not authorize the modular wallet as a session signer on your publishing account on Optimism Sepolia.";
55
+ async function A(e) {
56
+ let { managedAddress: t, signerAddress: r } = e, a = f();
57
+ await a.autoConnect({
58
+ client: u(),
59
+ chain: _
60
+ });
61
+ let o = a.getAccount();
62
+ if (!o) throw new l(O, "MODULAR_SIGNER_ACTIVATION_FAILED", t);
63
+ let s = h({
64
+ client: u(),
65
+ chain: _,
66
+ address: t
67
+ }), c = {
68
+ approvedTargets: D(t),
69
+ nativeTokenLimitPerTransaction: 0
70
+ }, d = !1;
71
+ try {
72
+ d = await y({
73
+ accountContract: s,
74
+ sessionKeyAddress: r,
75
+ newPermissions: c
76
+ });
77
+ } catch (e) {
78
+ throw new l(k, "MODULAR_SIGNER_ACTIVATION_FAILED", t, e);
79
+ }
80
+ if (d) try {
81
+ let e = v({
82
+ contract: s,
83
+ account: o,
84
+ sessionKeyAddress: r,
85
+ permissions: c
86
+ }), t = await g({
87
+ account: o,
88
+ transaction: e
89
+ });
90
+ await i(t.transactionHash);
91
+ } catch (e) {
92
+ throw new l(k, "MODULAR_SIGNER_ACTIVATION_FAILED", t, e);
93
+ }
94
+ let p = !1;
95
+ try {
96
+ p = await n(t, r);
97
+ } catch (e) {
98
+ throw new l(k, "MODULAR_SIGNER_ACTIVATION_FAILED", t, e);
99
+ }
100
+ if (!p) throw new l(k, "MODULAR_SIGNER_ACTIVATION_FAILED", t);
101
+ }
102
+ //#endregion
103
+ //#region src/helpers/ensureModularPublishBootstrap.ts
104
+ var j = /* @__PURE__ */ a({ ensureModularPublishBootstrap: () => M });
105
+ async function M(e) {
106
+ let t = d();
107
+ await t.autoConnect({
108
+ client: u(),
109
+ chain: _
110
+ });
111
+ let n = t.getAccount();
112
+ if (!n) throw Error("Failed to get modular account");
113
+ try {
114
+ await A({
115
+ managedAddress: e,
116
+ signerAddress: n.address
117
+ });
118
+ } catch (e) {
119
+ if (!o().autoDeployEip7702ModularAccount || !s(e)) throw e;
120
+ await T();
121
+ }
122
+ return await p(e, (await import("./config-BCCU2gwH.js").then((e) => e.c)).fromThirdwebAccount(n)), n;
123
+ }
124
+ //#endregion
125
+ export { T as a, D as i, j as n, A as r, M as t };
126
+
127
+ //# sourceMappingURL=ensureModularPublishBootstrap-Cybk4i1Y.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureModularPublishBootstrap-Cybk4i1Y.js","names":[],"sources":["../src/helpers/ensureEip7702ModularAccountReady.ts","../src/helpers/defaultApprovedTargetsForModularPublish.ts","../src/helpers/ensureManagedSignerSessionKey.ts","../src/helpers/ensureModularPublishBootstrap.ts"],"sourcesContent":["import { deploySmartAccount, getContract } from 'thirdweb'\nimport { optimismSepolia } from 'thirdweb/chains'\nimport { getPublishConfig } from '../config'\nimport { Eip7702ModularAccountPublishError } from '../errors'\nimport { isContractDeployed, pollSmartWalletDeployed } from './chainClient'\nimport { getClient, getModularAccountWallet } from './thirdweb'\n\nconst MSG_NO_ACCOUNT =\n 'Modular (EIP-7702) wallet is not connected. Sign in with the same method and try again.'\nconst MSG_NOT_UPGRADED =\n 'Your modular account is not upgraded to an EIP-7702 smart account on Optimism Sepolia yet. Enable autoDeployEip7702ModularAccount in publish config or complete wallet setup, then retry.'\nconst MSG_DEPLOY_FAILED =\n 'Automatic EIP-7702 smart account setup failed on Optimism Sepolia. Retry or reconnect your wallet.'\nconst MSG_NOT_CONFIRMED =\n 'EIP-7702 upgrade was sent but on-chain bytecode was not detected yet. Wait a moment and retry.'\n\nconst DEPLOY_POLL_ATTEMPTS = 5\n\n/**\n * Ensures the Thirdweb in-app modular wallet (EIP-7702) has non-empty bytecode at its address\n * on Optimism Sepolia. deploySmartAccount remains Thirdweb; bytecode checks use viem.\n */\nexport async function ensureEip7702ModularAccountReady(): Promise<void> {\n const { autoDeployEip7702ModularAccount } = getPublishConfig()\n const modularAccountWallet = getModularAccountWallet()\n await modularAccountWallet.autoConnect({ client: getClient(), chain: optimismSepolia })\n const modularAccount = modularAccountWallet.getAccount()\n if (!modularAccount) {\n throw new Eip7702ModularAccountPublishError(MSG_NO_ACCOUNT, 'EIP7702_MODULAR_ACCOUNT_UNAVAILABLE')\n }\n\n const client = getClient()\n const accountContract = getContract({\n client,\n chain: optimismSepolia,\n address: modularAccount.address,\n })\n\n if (await isContractDeployed(modularAccount.address)) {\n return\n }\n\n if (!autoDeployEip7702ModularAccount) {\n throw new Eip7702ModularAccountPublishError(\n MSG_NOT_UPGRADED,\n 'EIP7702_MODULAR_NOT_UPGRADED',\n modularAccount.address,\n )\n }\n\n try {\n await deploySmartAccount({\n smartAccount: modularAccount,\n chain: optimismSepolia,\n client,\n accountContract,\n })\n } catch (cause) {\n if (await pollSmartWalletDeployed(modularAccount.address, DEPLOY_POLL_ATTEMPTS)) {\n return\n }\n throw new Eip7702ModularAccountPublishError(\n MSG_DEPLOY_FAILED,\n 'EIP7702_MODULAR_DEPLOY_FAILED',\n modularAccount.address,\n cause,\n )\n }\n\n if (!(await pollSmartWalletDeployed(modularAccount.address, DEPLOY_POLL_ATTEMPTS))) {\n throw new Eip7702ModularAccountPublishError(\n MSG_NOT_CONFIRMED,\n 'EIP7702_MODULAR_NOT_CONFIRMED',\n modularAccount.address,\n )\n }\n}\n","import { getPublishConfig } from '../config'\nimport { EAS_CONTRACT_ADDRESS } from './constants'\n\nfunction uniqueAddressesLower(addresses: string[]): `0x${string}`[] {\n const set = new Set<string>()\n for (const a of addresses) {\n const t = a.trim().toLowerCase()\n if (t.startsWith('0x') && t.length === 42) set.add(t)\n }\n return [...set].sort().map((x) => x as `0x${string}`)\n}\n\n/** Allowlisted call targets for modular session signers: managed account, EAS, optional executor module. */\nexport function defaultApprovedTargetsForModularPublish(managedAddress: string): `0x${string}`[] {\n const cfg = getPublishConfig()\n const extra: string[] = [managedAddress, EAS_CONTRACT_ADDRESS]\n if (cfg.modularAccountModuleContract?.trim()) {\n extra.push(cfg.modularAccountModuleContract.trim())\n }\n return uniqueAddressesLower(extra)\n}\n","import { getContract, sendTransaction } from 'thirdweb'\nimport { addSessionKey, shouldUpdateSessionKey } from 'thirdweb/extensions/erc4337'\nimport { optimismSepolia } from 'thirdweb/chains'\nimport type { Address } from 'viem'\nimport { ManagedAccountPublishError } from '../errors'\nimport { waitForPublishReceipt } from './chainClient'\nimport { readIsActiveSigner } from './contracts'\nimport { defaultApprovedTargetsForModularPublish } from './defaultApprovedTargetsForModularPublish'\nimport { getClient, getManagedAccountWallet } from './thirdweb'\n\nconst MSG_UNAVAILABLE =\n 'Could not connect the managed publishing account to authorize the modular signer on Optimism Sepolia. Reconnect and try again.'\nconst MSG_ACTIVATION_FAILED =\n 'Could not authorize the modular wallet as a session signer on your publishing account on Optimism Sepolia.'\n\n/**\n * Ensures the modular (EIP-7702) wallet is an active session signer on the ManagedAccount.\n * If permissions are missing or stale, sends `addSessionKey` signed by the managed EIP-4337 wallet.\n * Session-key AA extensions remain on Thirdweb; verification uses viem.\n */\nexport async function ensureManagedSignerSessionKey(params: {\n managedAddress: string\n signerAddress: string\n}): Promise<void> {\n const { managedAddress, signerAddress } = params\n const managedWallet = getManagedAccountWallet()\n await managedWallet.autoConnect({ client: getClient(), chain: optimismSepolia })\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\n const accountContract = getContract({\n client: getClient(),\n chain: optimismSepolia,\n address: managedAddress,\n })\n const permissions = {\n approvedTargets: defaultApprovedTargetsForModularPublish(managedAddress),\n nativeTokenLimitPerTransaction: 0,\n }\n\n let shouldUpdate = false\n try {\n shouldUpdate = await shouldUpdateSessionKey({\n accountContract,\n sessionKeyAddress: signerAddress,\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: signerAddress,\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 let active = false\n try {\n active = await readIsActiveSigner(managedAddress as Address, signerAddress as Address)\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 (!active) {\n throw new ManagedAccountPublishError(\n MSG_ACTIVATION_FAILED,\n 'MODULAR_SIGNER_ACTIVATION_FAILED',\n managedAddress,\n )\n }\n}\n","import type { Account } from 'thirdweb/wallets'\nimport { optimismSepolia } from 'thirdweb/chains'\nimport { getPublishConfig } from '../config'\nimport { isManagedAccountPublishError } from '../errors'\nimport { ensureEip7702ModularAccountReady } from './ensureEip7702ModularAccountReady'\nimport { ensureManagedAccountEasConfigured } from './ensureManagedAccountEasConfigured'\nimport { ensureManagedSignerSessionKey } from './ensureManagedSignerSessionKey'\nimport { getClient, getModularAccountWallet } from './thirdweb'\n\n/**\n * One-time modular publish bootstrap before `multiPublish`:\n * session signer on managed account → EAS pointer → optional EIP-7702 fallback.\n */\nexport async function ensureModularPublishBootstrap(managedAddress: string): Promise<Account> {\n const modularAccountWallet = getModularAccountWallet()\n await modularAccountWallet.autoConnect({ client: getClient(), chain: optimismSepolia })\n const modularAccount = modularAccountWallet.getAccount()\n if (!modularAccount) {\n throw new Error('Failed to get modular account')\n }\n\n try {\n await ensureManagedSignerSessionKey({\n managedAddress,\n signerAddress: modularAccount.address,\n })\n } catch (cause) {\n if (!getPublishConfig().autoDeployEip7702ModularAccount) {\n throw cause\n }\n if (!isManagedAccountPublishError(cause)) {\n throw cause\n }\n await ensureEip7702ModularAccountReady()\n }\n\n await ensureManagedAccountEasConfigured(managedAddress, (await import('./adapters/thirdwebAccount')).fromThirdwebAccount(modularAccount))\n return modularAccount\n}\n"],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { g as e, h as t, nt as n, r, s as i } from "./config-BCCU2gwH.js";
2
+ import { r as a } from "./errors-Du3LNbJN.js";
3
+ import { A as o, R as s, h as c, k as l } from "./publishAuthorization-ctIWvkYC.js";
4
+ import { optimismSepolia as u } from "thirdweb/chains";
5
+ import { ethers as d } from "ethers";
6
+ //#region src/helpers/ensureSmartWalletThenPublish.ts
7
+ var f = /* @__PURE__ */ n({ ensureSmartWalletThenPublish: () => g }), p = "A connected wallet is required for publishing with the modular executor. Connect your wallet and try again.", m = "Could not connect the managed publishing account on Optimism Sepolia. Reconnect with the same sign-in method and try again.";
8
+ function h(n) {
9
+ if (n) return n instanceof d.Wallet ? n : t(n) ? n.signer : e(n) ? n : i(n).signer;
10
+ }
11
+ async function g(e, t, n, d) {
12
+ let f = r(), g = await n();
13
+ if (!g || !g.trim()) return { outcome: "no_address" };
14
+ if (f.useModularExecutor) {
15
+ let t = await o();
16
+ if (!t) return {
17
+ outcome: "managed_not_ready",
18
+ error: new a(p, "MANAGED_ACCOUNT_UNAVAILABLE")
19
+ };
20
+ let n;
21
+ try {
22
+ n = await l(u);
23
+ } catch (e) {
24
+ return {
25
+ outcome: "managed_not_ready",
26
+ error: new a(m, "MANAGED_ACCOUNT_UNAVAILABLE", void 0, e)
27
+ };
28
+ }
29
+ let r = i(t);
30
+ return c.createPublish(e, n, r, {
31
+ ...d,
32
+ dataItemSigner: h(d?.dataItemSigner) ?? r.signer
33
+ }), { outcome: "started" };
34
+ }
35
+ let _ = await s(t ?? null);
36
+ if ("address" in _) {
37
+ let t = i(_.account);
38
+ return c.createPublish(e, _.address, t, {
39
+ ...d,
40
+ dataItemSigner: h(d?.dataItemSigner) ?? t.signer
41
+ }), { outcome: "started" };
42
+ }
43
+ return { outcome: "needs_deploy" };
44
+ }
45
+ //#endregion
46
+ export { f as n, g as t };
47
+
48
+ //# sourceMappingURL=ensureSmartWalletThenPublish-BY9SiutA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureSmartWalletThenPublish-BY9SiutA.js","names":[],"sources":["../src/helpers/ensureSmartWalletThenPublish.ts"],"sourcesContent":["import type { Item } from '@seedprotocol/sdk'\nimport type { Account } from 'thirdweb/wallets'\nimport { optimismSepolia } from 'thirdweb/chains'\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 { PublishManager } from '../services/publishManager'\nimport type { CreatePublishOptions } from '../config'\nimport { getPublishConfig } from '../config'\nimport { ManagedAccountPublishError } from '../errors'\n\nexport type EnsureSmartWalletResult =\n | { outcome: 'started' }\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 Optimism Sepolia. 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(optimismSepolia)\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)\n PublishManager.createPublish(item, managedAddress, wallet, {\n ...options,\n dataItemSigner: coerceDataItemSigner(options?.dataItemSigner) ?? wallet.signer,\n })\n return { outcome: 'started' }\n }\n\n const resolved = await resolveSmartWalletForPublish(activeAccount ?? null)\n if ('address' in resolved) {\n const wallet = fromThirdwebAccount(resolved.account)\n PublishManager.createPublish(item, resolved.address, wallet, {\n ...options,\n dataItemSigner: coerceDataItemSigner(options?.dataItemSigner) ?? wallet.signer,\n })\n return { outcome: 'started' }\n }\n return { outcome: 'needs_deploy' }\n}\n"],"mappings":";;;;;;sEAsBM,IACJ,+GAEI,IACJ;AAEF,SAAS,EACP,GACwC;CACnC,OAIL,OAHI,aAAkB,EAAO,SAAe,IACxC,EAAgB,CAAM,IAAU,EAAO,SACvC,EAAa,CAAM,IAAU,IAC1B,EAAoB,CAAiB,CAAC,CAAC;AAChD;AAMA,eAAsB,EACpB,GACA,GACA,GACA,GACkC;CAClC,IAAM,IAAS,EAAiB,GAC1B,IAAU,MAAM,EAAW;CACjC,IAAI,CAAC,KAAW,CAAC,EAAQ,KAAK,GAC5B,OAAO,EAAE,SAAS,aAAa;CAGjC,IAAI,EAAO,oBAAoB;EAC7B,IAAM,IAAiB,MAAM,EAA2B;EACxD,IAAI,CAAC,GACH,OAAO;GACL,SAAS;GACT,OAAO,IAAI,EAA2B,GAAwB,6BAA6B;EAC7F;EAGF,IAAI;EACJ,IAAI;GACF,IAAiB,MAAM,EAAkC,CAAe;EAC1E,SAAS,GAAO;GACd,OAAO;IACL,SAAS;IACT,OAAO,IAAI,EACT,GACA,+BACA,KAAA,GACA,CACF;GACF;EACF;EAEA,IAAM,IAAS,EAAoB,CAAc;EAKjD,OAJA,EAAe,cAAc,GAAM,GAAgB,GAAQ;GACzD,GAAG;GACH,gBAAgB,EAAqB,GAAS,cAAc,KAAK,EAAO;EAC1E,CAAC,GACM,EAAE,SAAS,UAAU;CAC9B;CAEA,IAAM,IAAW,MAAM,EAA6B,KAAiB,IAAI;CACzE,IAAI,aAAa,GAAU;EACzB,IAAM,IAAS,EAAoB,EAAS,OAAO;EAKnD,OAJA,EAAe,cAAc,GAAM,EAAS,SAAS,GAAQ;GAC3D,GAAG;GACH,gBAAgB,EAAqB,GAAS,cAAc,KAAK,EAAO;EAC1E,CAAC,GACM,EAAE,SAAS,UAAU;CAC9B;CACA,OAAO,EAAE,SAAS,eAAe;AACnC"}
@@ -1 +1 @@
1
- {"version":3,"file":"publishWalletRegistry.d.ts","sourceRoot":"","sources":["../../src/helpers/publishWalletRegistry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3E,MAAM,MAAM,oBAAoB,GAAG,aAAa,GAAG;IACjD,+EAA+E;IAC/E,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAWD;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,oBAAoB,GAAG,IAAI,GAChC,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,wBAAgB,gBAAgB,IAAI,oBAAoB,GAAG,IAAI,CAE9D;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,sDAAsD;AACtD,wBAAgB,mBAAmB,IAAI,UAAU,GAAG,IAAI,CAEvD;AAED,sDAAsD;AACtD,wBAAgB,qBAAqB,IAAI,YAAY,GAAG,IAAI,CAE3D"}
1
+ {"version":3,"file":"publishWalletRegistry.d.ts","sourceRoot":"","sources":["../../src/helpers/publishWalletRegistry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3E,MAAM,MAAM,oBAAoB,GAAG,aAAa,GAAG;IACjD,+EAA+E;IAC/E,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAWD;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,oBAAoB,GAAG,IAAI,GAChC,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED,wBAAgB,gBAAgB,IAAI,oBAAoB,GAAG,IAAI,CAE9D;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,sDAAsD;AACtD,wBAAgB,mBAAmB,IAAI,UAAU,GAAG,IAAI,CAEvD;AAED,sDAAsD;AACtD,wBAAgB,qBAAqB,IAAI,YAAY,GAAG,IAAI,CAE3D"}
@@ -4,4 +4,6 @@ export { useItemPublishStatus, type PublishProcessRecord } from './useItemPublis
4
4
  export { usePublishProcesses, usePublishProcessesForSeed, usePublishProcessesNonActiveCount, usePublishProcessesNonActiveCountForSeed, usePublishProcessesState, usePublishProcessesStateForSeed, usePublishProcessById, } from './usePublishProcesses';
5
5
  export { clearCompletedPublishProcesses, clearCompletedPublishProcessesForSeed, clearAllPublishProcesses, clearAllUploadProcesses, deletePublishProcessesForSeed, deletePublishProcessById, deletePublishProcessesByIds, } from './clearCompletedPublishProcesses';
6
6
  export { getArweaveTransactionIds, getEasPayload } from './publishProcessHelpers';
7
+ export { usePublishCostEstimate } from './usePublishCostEstimate';
8
+ export type { UsePublishCostEstimateResult } from './usePublishCostEstimate';
7
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AACxF,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,iCAAiC,EACjC,wCAAwC,EACxC,wBAAwB,EACxB,+BAA+B,EAC/B,qBAAqB,GACtB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,8BAA8B,EAC9B,qCAAqC,EACrC,wBAAwB,EACxB,uBAAuB,EACvB,6BAA6B,EAC7B,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AACxF,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,iCAAiC,EACjC,wCAAwC,EACxC,wBAAwB,EACxB,+BAA+B,EAC/B,qBAAqB,GACtB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,8BAA8B,EAC9B,qCAAqC,EACrC,wBAAwB,EACxB,uBAAuB,EACvB,6BAA6B,EAC7B,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,YAAY,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAA"}
@@ -0,0 +1,12 @@
1
+ import type { IItem } from '@seedprotocol/sdk';
2
+ import { type WatchPublishCostOptions } from '../services/publishCost/watchPublishCost';
3
+ import type { PublishCostEstimate } from '../services/publishCost/types';
4
+ export type UsePublishCostEstimateResult = {
5
+ estimate: PublishCostEstimate | null;
6
+ isEstimating: boolean;
7
+ isStale: boolean;
8
+ error: Error | null;
9
+ refresh: () => void;
10
+ };
11
+ export declare function usePublishCostEstimate(item: IItem<any> | null | undefined, options?: WatchPublishCostOptions): UsePublishCostEstimateResult;
12
+ //# sourceMappingURL=usePublishCostEstimate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePublishCostEstimate.d.ts","sourceRoot":"","sources":["../../src/hooks/usePublishCostEstimate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,0CAA0C,CAAA;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAExE,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAA;IACpC,YAAY,EAAE,OAAO,CAAA;IACrB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,CAAA;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,EACnC,OAAO,CAAC,EAAE,uBAAuB,GAChC,4BAA4B,CA6C9B"}
package/dist/index.d.ts CHANGED
@@ -17,10 +17,13 @@ export { createPermissionlessTxSender } from './helpers/adapters/permissionlessT
17
17
  export { setPublishWallet, getPublishWallet, clearPublishWallet, type PublishWalletSession, } from './helpers/publishWalletRegistry';
18
18
  export { getPublishPublicClient, waitForPublishReceipt, isContractDeployed, } from './helpers/chainClient';
19
19
  export { encodeMultiPublish, encodeMultiPublishInteger, encodeSetEas, encodeEasAttest, encodeEasMultiAttest, encodeEasMultiRevoke, readGetEas, readIsActiveSigner, } from './helpers/contracts';
20
+ export { estimatePublishCost, combinePublishCostEstimate, getCachedTokenPrices, getCachedMarketRates, resetMarketRateCache, resetTokenPriceCache, watchPublishCost, PUBLISH_GAS_HEURISTICS, heuristicPublishGas, } from './services/publishCost';
21
+ export type { PublishCostEstimate, EstimatePublishCostOptions, WatchPublishCostOptions, WatchPublishCostHandle, MarketRates, TokenPrices, } from './services/publishCost';
20
22
  export { ensureEasSchemasForItem, } from './services/publish/helpers/ensureEasSchemas';
21
23
  export { publishMachine } from './services/publish';
22
24
  export { PublishManager } from './services/publishManager';
23
- export { usePublishProcess, useCanPublishItem, useItemPublishStatus, usePublishProcesses, usePublishProcessesForSeed, usePublishProcessesNonActiveCount, usePublishProcessesNonActiveCountForSeed, usePublishProcessesState, usePublishProcessesStateForSeed, usePublishProcessById, clearCompletedPublishProcesses, clearCompletedPublishProcessesForSeed, clearAllPublishProcesses, clearAllUploadProcesses, deletePublishProcessesForSeed, deletePublishProcessById, deletePublishProcessesByIds, getArweaveTransactionIds, getEasPayload, } from './hooks';
25
+ export { usePublishProcess, useCanPublishItem, useItemPublishStatus, usePublishProcesses, usePublishProcessesForSeed, usePublishProcessesNonActiveCount, usePublishProcessesNonActiveCountForSeed, usePublishProcessesState, usePublishProcessesStateForSeed, usePublishProcessById, usePublishCostEstimate, clearCompletedPublishProcesses, clearCompletedPublishProcessesForSeed, clearAllPublishProcesses, clearAllUploadProcesses, deletePublishProcessesForSeed, deletePublishProcessById, deletePublishProcessesByIds, getArweaveTransactionIds, getEasPayload, } from './hooks';
26
+ export type { UsePublishCostEstimateResult } from './hooks';
24
27
  export type { PublishProcessRecord, PublishProcessStatus } from './hooks/useItemPublishStatus';
25
28
  export { useArweaveL1Finalize } from './hooks/useArweaveL1Finalize';
26
29
  export type { ArweaveL1FinalizeJobRow } from './hooks/useArweaveL1Finalize';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}