@seedprotocol/publish 0.7.5-next.850.g9ab585b → 0.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +31 -1
- package/dist/{chainConfig-BWzE8DIF.js → chainConfig-CY22-kWO.js} +1389 -1304
- package/dist/chainConfig-CY22-kWO.js.map +1 -0
- package/dist/{ensureAutomationSessionKey-BenLVZk4.js → ensureAutomationSessionKey-CKFyZNj7.js} +3 -3
- package/dist/{ensureAutomationSessionKey-BenLVZk4.js.map → ensureAutomationSessionKey-CKFyZNj7.js.map} +1 -1
- package/dist/{ensureModularPublishBootstrap-CngVyk4c.js → ensureModularPublishBootstrap-DQDSbkQy.js} +3 -3
- package/dist/{ensureModularPublishBootstrap-CngVyk4c.js.map → ensureModularPublishBootstrap-DQDSbkQy.js.map} +1 -1
- package/dist/ensureSmartWalletThenPublish-By_Xv7xG.js +47 -0
- package/dist/ensureSmartWalletThenPublish-By_Xv7xG.js.map +1 -0
- package/dist/helpers/arweave.d.ts.map +1 -1
- package/dist/helpers/chainClient.d.ts +6 -0
- package/dist/helpers/chainClient.d.ts.map +1 -1
- package/dist/helpers/ensureSmartWalletThenPublish.d.ts.map +1 -1
- package/dist/helpers/ensureWalletThenPublish.d.ts.map +1 -1
- package/dist/helpers/publishWalletRegistry.d.ts +17 -0
- package/dist/helpers/publishWalletRegistry.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/{managedAccountAdmin-CW1P40qh.js → managedAccountAdmin-DBAX8yny.js} +2 -2
- package/dist/{managedAccountAdmin-CW1P40qh.js.map → managedAccountAdmin-DBAX8yny.js.map} +1 -1
- package/dist/{publishAuthorization-BOalFNvQ.js → publishAuthorization-D2wbNc-H.js} +2 -2
- package/dist/{publishAuthorization-BOalFNvQ.js.map → publishAuthorization-D2wbNc-H.js.map} +1 -1
- package/dist/{publishWalletRegistry-Bf_Nvf_3.js → publishWalletRegistry-BaQe9rIR.js} +23 -20
- package/dist/publishWalletRegistry-BaQe9rIR.js.map +1 -0
- package/dist/react/ConnectButton.d.ts.map +1 -1
- package/dist/{resolveRevokeAccount-BUK9i1T4.js → resolveRevokeAccount-B7cj6OyT.js} +2 -2
- package/dist/{resolveRevokeAccount-BUK9i1T4.js.map → resolveRevokeAccount-B7cj6OyT.js.map} +1 -1
- package/dist/services/arweaveL1Finalize/worker.d.ts.map +1 -1
- package/dist/services/publish/actors/checking.d.ts.map +1 -1
- package/dist/services/publish/actors/createArweaveDataItems.d.ts +2 -0
- package/dist/services/publish/actors/createArweaveDataItems.d.ts.map +1 -1
- package/dist/services/publish/actors/createArweaveDataItemsPhase2.d.ts.map +1 -1
- package/dist/services/publish/actors/uploadViaBundler.d.ts +5 -0
- package/dist/services/publish/actors/uploadViaBundler.d.ts.map +1 -1
- package/dist/services/publish/index.d.ts +3 -1
- package/dist/services/publish/index.d.ts.map +1 -1
- package/dist/services/publishManager/actors/restorableSnapshot.d.ts +22 -0
- package/dist/services/publishManager/actors/restorableSnapshot.d.ts.map +1 -0
- package/dist/services/publishManager/actors/restoreFromDb.d.ts.map +1 -1
- package/dist/thirdweb.js +17 -13
- package/dist/thirdweb.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/{undeployedSmartAccount-B6KSTipF.js → undeployedSmartAccount-pbMpi4PV.js} +2 -2
- package/dist/{undeployedSmartAccount-B6KSTipF.js.map → undeployedSmartAccount-pbMpi4PV.js.map} +1 -1
- package/dist/worker-CBBwWaxo.js +87 -0
- package/dist/worker-CBBwWaxo.js.map +1 -0
- package/package.json +8 -8
- package/dist/chainConfig-BWzE8DIF.js.map +0 -1
- package/dist/ensureSmartWalletThenPublish-3Q_vA8mD.js +0 -46
- package/dist/ensureSmartWalletThenPublish-3Q_vA8mD.js.map +0 -1
- package/dist/publishWalletRegistry-Bf_Nvf_3.js.map +0 -1
- package/dist/worker-DAciYSNY.js +0 -88
- package/dist/worker-DAciYSNY.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publishAuthorization-BOalFNvQ.js","names":["ZERO_ADDRESS","prepareEasMultiRevoke","prepareNameSchemaAttestation","isSeedTxSender","getSchemaRecord","getAttestationUidFromReceipt","waitForPublishReceipt","getPublishConfig","registerSchema","prepareEasAttest","isPublishWallet","PUBLISH_AUTHORIZATION_SCHEMA_DEF$1","PUBLISH_AUTHORIZATION_SCHEMA_NAME$1","PUBLISH_AUTHORIZATION_SCOPES$1","PublishConfigContext","createContext","usePublishConfig","config","useContext","approvedTargetsForAutomationPublish","module","PUBLISH_AUTOMATION_SCOPES","buildAutomationSessionKeyPermissions","out","params","hashAutomationSessionKeyPermissions","material","permissions","a","scopes","keccak256","toUtf8Bytes","toThirdwebSessionKeyPermissions","base","RESOLVER_ADDRESS","REVOCABLE","ZERO_ADDRESS$1","resolveTxSender","account","sendAndWait","result","txSender","tx","assertAddress","t","addr","label","getPublishAuthorizationSchemaUid","SchemaRegistry","PUBLISH_AUTHORIZATION_SCHEMA_DEF","ensurePublishAuthorizationSchema","sender","schemaUid","PUBLISH_AUTHORIZATION_SCHEMA_NAME","encodePublishAuthorizationAttestationData","SchemaEncoder","normalizeBytes32Hex","attestPublishAuthorization","identity","sessionKey","app","grantedAt","expiresAt","PUBLISH_AUTHORIZATION_SCOPES","permissionsHash","ZERO_BYTES32","expirationTime","PUBLISH_AUTHORIZATION_DEFAULT_EXPIRATION_SECS","data","receipt","uid","easContractAddress","isValidEasAttestationUid","revokePublishAuthorization","assessPublishAuthorizationLive","row","getPublishAuthorizationFromEas","r","decoded","decodePublishAuthorizationData","assessPublishAuthorization"],"sources":["../src/react/PublishConfigContext.tsx","../src/helpers/approvedTargetsForAutomationPublish.ts","../src/helpers/automationSessionKeyPermissions.ts","../src/services/publishAuthorization/index.ts"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport type { PublishConfig } from '../config'\n\nexport const PublishConfigContext = createContext<PublishConfig | null>(null)\n\nexport function usePublishConfig(): PublishConfig {\n const config = useContext(PublishConfigContext)\n if (!config) {\n throw new Error(\n 'usePublishConfig: PublishConfig is missing. Pass config to PublishProvider or call initPublish() before render.',\n )\n }\n return config\n}\n","import { getPublishConfig } from '../config'\n\n/**\n * Allowlisted call targets for session keys on a ManagedAccount.\n * Returns only the configured Seed executor module — never the ManagedAccount or raw EAS\n * (those would allow `setEas` / arbitrary attestations).\n *\n * @throws if `modularAccountModuleContract` is unset or invalid\n */\nexport function approvedTargetsForAutomationPublish(): `0x${string}`[] {\n const module = getPublishConfig().modularAccountModuleContract?.trim()\n if (!module || !/^0x[0-9a-fA-F]{40}$/.test(module)) {\n throw new Error(\n '@seedprotocol/publish: session keys require PublishConfig.modularAccountModuleContract ' +\n '(their only approved target is the Seed executor module).',\n )\n }\n return [module.toLowerCase() as `0x${string}`]\n}\n","import { keccak256, toUtf8Bytes } from 'ethers'\nimport { approvedTargetsForAutomationPublish } from './approvedTargetsForAutomationPublish'\n\n/** Fixed v1 scopes for publish automation grants. */\nexport const PUBLISH_AUTOMATION_SCOPES = 'publish,revoke' as const\n\nexport type AutomationSessionKeyPermissions = {\n approvedTargets: `0x${string}`[]\n nativeTokenLimitPerTransaction: number\n /** Unix seconds; omit for Thirdweb default long window. */\n expiresAt?: number\n}\n\n/**\n * Canonical permissions for an automation session key (module-only targets).\n */\nexport function buildAutomationSessionKeyPermissions(params?: {\n expiresAt?: number\n}): AutomationSessionKeyPermissions {\n const approvedTargets = approvedTargetsForAutomationPublish()\n const out: AutomationSessionKeyPermissions = {\n approvedTargets,\n nativeTokenLimitPerTransaction: 0,\n }\n if (typeof params?.expiresAt === 'number' && params.expiresAt > 0) {\n out.expiresAt = Math.trunc(params.expiresAt)\n }\n return out\n}\n\n/**\n * Deterministic permissions hash for the PublishAuthorization sidecar.\n * Material: sorted targets | nativeLimit | expiresAt (0 if unset) | scopes\n */\nexport function hashAutomationSessionKeyPermissions(\n permissions: AutomationSessionKeyPermissions,\n scopes: string = PUBLISH_AUTOMATION_SCOPES,\n): `0x${string}` {\n const targets = [...permissions.approvedTargets].map((a) => a.toLowerCase()).sort().join(',')\n const limit = permissions.nativeTokenLimitPerTransaction\n const expiresAt = permissions.expiresAt ?? 0\n const material = `${targets}|${limit}|${expiresAt}|${scopes.trim()}`\n return keccak256(toUtf8Bytes(material)) as `0x${string}`\n}\n\n/** Shape passed to Thirdweb `addSessionKey` / `shouldUpdateSessionKey`. */\nexport function toThirdwebSessionKeyPermissions(permissions: AutomationSessionKeyPermissions): {\n approvedTargets: `0x${string}`[]\n nativeTokenLimitPerTransaction: number\n permissionEndTimestamp?: Date\n} {\n const base = {\n approvedTargets: permissions.approvedTargets,\n nativeTokenLimitPerTransaction: permissions.nativeTokenLimitPerTransaction,\n }\n if (permissions.expiresAt != null && permissions.expiresAt > 0) {\n return {\n ...base,\n permissionEndTimestamp: new Date(permissions.expiresAt * 1000),\n }\n }\n return base\n}\n","import {\n PUBLISH_AUTHORIZATION_DEFAULT_EXPIRATION_SECS,\n PUBLISH_AUTHORIZATION_SCHEMA_DEF,\n PUBLISH_AUTHORIZATION_SCHEMA_NAME,\n PUBLISH_AUTHORIZATION_SCOPES,\n assessPublishAuthorization,\n decodePublishAuthorizationData,\n getPublishAuthorizationFromEas,\n type PublishAuthorizationAssessResult,\n type PublishAuthorizationDecoded,\n} from '@seedprotocol/eas'\nimport { SchemaEncoder, ZERO_BYTES32 } from '@ethereum-attestation-service/eas-sdk'\nimport { SchemaRegistry } from '@ethereum-attestation-service/eas-sdk'\nimport { prepareEasAttest, prepareEasMultiRevoke } from '~/helpers/easDirect'\nimport { getSchemaRecord, registerSchema } from '~/helpers/schemaRegistry'\nimport { prepareNameSchemaAttestation } from '~/helpers/nameSchemaAttestation'\nimport { waitForPublishReceipt } from '~/helpers/chainClient'\nimport { getPublishConfig } from '~/config'\nimport {\n isPublishWallet,\n isSeedTxSender,\n type PublishWallet,\n type SeedTxSender,\n} from '~/helpers/seedSigner'\nimport { getAttestationUidFromReceipt } from '~/helpers/easDirect'\nimport { normalizeBytes32Hex, isValidEasAttestationUid } from '@seedprotocol/eas'\nimport {\n buildAutomationSessionKeyPermissions,\n hashAutomationSessionKeyPermissions,\n PUBLISH_AUTOMATION_SCOPES,\n} from '~/helpers/automationSessionKeyPermissions'\n\nexport {\n PUBLISH_AUTHORIZATION_SCHEMA_DEF,\n PUBLISH_AUTHORIZATION_SCHEMA_NAME,\n PUBLISH_AUTHORIZATION_SCOPES,\n} from '@seedprotocol/eas'\n\nconst RESOLVER_ADDRESS = '0x0000000000000000000000000000000000000000'\nconst REVOCABLE = true\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'\n\nfunction resolveTxSender(account: PublishWallet | SeedTxSender): SeedTxSender {\n if (isPublishWallet(account)) return account.txSender\n if (isSeedTxSender(account)) return account\n throw new Error(\n '@seedprotocol/publish: publish authorization write APIs require a PublishWallet or SeedTxSender',\n )\n}\n\nasync function sendAndWait(\n txSender: SeedTxSender,\n tx: Parameters<SeedTxSender['sendTransaction']>[0],\n) {\n const result = await txSender.sendTransaction(tx)\n return waitForPublishReceipt(result.transactionHash)\n}\n\nfunction assertAddress(label: string, addr: string): `0x${string}` {\n const t = addr.trim()\n if (!/^0x[0-9a-fA-F]{40}$/.test(t)) {\n throw new Error(`@seedprotocol/publish: ${label} must be a valid address`)\n }\n return t as `0x${string}`\n}\n\n/** Deterministic on-chain schema UID for {@link PUBLISH_AUTHORIZATION_SCHEMA_DEF}. */\nexport function getPublishAuthorizationSchemaUid(): `0x${string}` {\n return SchemaRegistry.getSchemaUID(\n PUBLISH_AUTHORIZATION_SCHEMA_DEF,\n RESOLVER_ADDRESS as `0x${string}`,\n REVOCABLE,\n ) as `0x${string}`\n}\n\n/**\n * Registers the PublishAuthorization EAS schema (if missing) and creates a Schema #1 name attestation.\n */\nexport async function ensurePublishAuthorizationSchema(\n account: PublishWallet | SeedTxSender,\n): Promise<`0x${string}`> {\n const sender = resolveTxSender(account)\n const schemaUid = getPublishAuthorizationSchemaUid()\n const onChain = await getSchemaRecord(schemaUid)\n if (!onChain) {\n await sendAndWait(\n sender,\n registerSchema({\n schema: PUBLISH_AUTHORIZATION_SCHEMA_DEF,\n resolverAddress: RESOLVER_ADDRESS,\n revocable: REVOCABLE,\n }),\n )\n await sendAndWait(\n sender,\n prepareNameSchemaAttestation({\n schemaUid,\n schemaName: PUBLISH_AUTHORIZATION_SCHEMA_NAME,\n }),\n )\n }\n return schemaUid\n}\n\nexport function encodePublishAuthorizationAttestationData(params: {\n identity: string\n sessionKey: string\n app: string\n scopes: string\n grantedAt: number\n expiresAt: number\n permissionsHash: string\n}): `0x${string}` {\n const schemaEncoder = new SchemaEncoder(PUBLISH_AUTHORIZATION_SCHEMA_DEF)\n const encodedData = schemaEncoder.encodeData([\n { name: 'identity', value: params.identity as `0x${string}`, type: 'address' },\n { name: 'sessionKey', value: params.sessionKey as `0x${string}`, type: 'address' },\n { name: 'app', value: params.app as `0x${string}`, type: 'address' },\n { name: 'scopes', value: params.scopes, type: 'string' },\n { name: 'grantedAt', value: params.grantedAt, type: 'uint64' },\n { name: 'expiresAt', value: params.expiresAt, type: 'uint64' },\n {\n name: 'permissionsHash',\n value: normalizeBytes32Hex(params.permissionsHash) as `0x${string}`,\n type: 'bytes32',\n },\n ])\n return encodedData as `0x${string}`\n}\n\nexport type AttestPublishAuthorizationParams = {\n /** Must be the ManagedAccount (identity) wallet — becomes EAS attester. */\n wallet: PublishWallet | SeedTxSender\n identity: string\n sessionKey: string\n /** Optional app label address; defaults to zero address. */\n app?: string\n scopes?: string\n grantedAt?: number\n expiresAt?: number\n permissionsHash?: string\n ensureSchema?: boolean\n /** Override EAS expirationTime (unix seconds). */\n expirationTime?: number\n}\n\nexport type AttestPublishAuthorizationResult = {\n uid: `0x${string}`\n schemaUid: `0x${string}`\n permissionsHash: `0x${string}`\n grantedAt: number\n expiresAt: number\n expirationTime: number\n}\n\n/**\n * ManagedAccount attests a PublishAuthorization grant (recipient = session key).\n */\nexport async function attestPublishAuthorization(\n params: AttestPublishAuthorizationParams,\n): Promise<AttestPublishAuthorizationResult> {\n const sender = resolveTxSender(params.wallet)\n const schemaUid =\n params.ensureSchema === false\n ? getPublishAuthorizationSchemaUid()\n : await ensurePublishAuthorizationSchema(params.wallet)\n\n const identity = assertAddress('identity', params.identity)\n const sessionKey = assertAddress('sessionKey', params.sessionKey)\n const app = params.app?.trim()\n ? assertAddress('app', params.app)\n : (ZERO_ADDRESS as `0x${string}`)\n\n const grantedAt = params.grantedAt ?? Math.floor(Date.now() / 1000)\n const expiresAt =\n typeof params.expiresAt === 'number' && params.expiresAt > 0\n ? Math.trunc(params.expiresAt)\n : 0\n const scopes = params.scopes ?? PUBLISH_AUTHORIZATION_SCOPES\n\n const permissionsHash = normalizeBytes32Hex(\n params.permissionsHash ??\n hashAutomationSessionKeyPermissions(\n buildAutomationSessionKeyPermissions({\n expiresAt: expiresAt > 0 ? expiresAt : undefined,\n }),\n scopes === PUBLISH_AUTHORIZATION_SCOPES ? PUBLISH_AUTOMATION_SCOPES : scopes,\n ),\n ) as `0x${string}`\n\n if (permissionsHash === ZERO_BYTES32) {\n throw new Error(\n '@seedprotocol/publish: attestPublishAuthorization requires a non-zero permissionsHash',\n )\n }\n\n const expirationTime =\n typeof params.expirationTime === 'number' && params.expirationTime > 0\n ? params.expirationTime\n : expiresAt > 0\n ? expiresAt\n : grantedAt + PUBLISH_AUTHORIZATION_DEFAULT_EXPIRATION_SECS\n\n const data = encodePublishAuthorizationAttestationData({\n identity,\n sessionKey,\n app,\n scopes,\n grantedAt,\n expiresAt,\n permissionsHash,\n })\n\n const tx = prepareEasAttest({\n schema: schemaUid,\n data: {\n recipient: sessionKey,\n expirationTime: BigInt(expirationTime),\n revocable: true,\n refUID: ZERO_BYTES32 as `0x${string}`,\n data,\n value: 0n,\n },\n })\n\n const receipt = await sendAndWait(sender, tx)\n if (!receipt) {\n throw new Error('@seedprotocol/publish: attestPublishAuthorization failed — no receipt')\n }\n const { easContractAddress } = getPublishConfig()\n const uid = getAttestationUidFromReceipt(receipt, easContractAddress)\n if (!uid || !isValidEasAttestationUid(uid)) {\n throw new Error(\n '@seedprotocol/publish: attestPublishAuthorization failed — could not parse attestation UID',\n )\n }\n\n return {\n uid: uid as `0x${string}`,\n schemaUid,\n permissionsHash,\n grantedAt,\n expiresAt,\n expirationTime,\n }\n}\n\n/**\n * Revoke a PublishAuthorization sidecar (must be signed by the original ManagedAccount attester).\n */\nexport async function revokePublishAuthorization(params: {\n wallet: PublishWallet | SeedTxSender\n uid: string\n schemaUid?: string\n}): Promise<void> {\n const sender = resolveTxSender(params.wallet)\n const schemaUid = (params.schemaUid ?? getPublishAuthorizationSchemaUid()) as `0x${string}`\n const uid = normalizeBytes32Hex(params.uid) as `0x${string}`\n if (!isValidEasAttestationUid(uid)) {\n throw new Error(\n '@seedprotocol/publish: revokePublishAuthorization requires a valid attestation uid',\n )\n }\n\n const tx = prepareEasMultiRevoke([\n {\n schema: schemaUid,\n data: [{ uid }],\n },\n ])\n const receipt = await sendAndWait(sender, tx)\n if (!receipt) {\n throw new Error('@seedprotocol/publish: revokePublishAuthorization failed — no receipt')\n }\n}\n\nexport type AssessPublishAuthorizationLiveResult = {\n uid: string\n decoded: PublishAuthorizationDecoded\n assess: PublishAuthorizationAssessResult\n expirationTime?: number | null\n}\n\n/**\n * Load a PublishAuthorization attestation by uid (via identity filter + client match) and assess.\n * Prefer filtering with {@link getPublishAuthorizationFromEas} when you know identity/sessionKey.\n */\nexport async function assessPublishAuthorizationLive(params: {\n uid: string\n identities: string[]\n}): Promise<AssessPublishAuthorizationLiveResult | null> {\n const rows = await getPublishAuthorizationFromEas({\n identities: params.identities,\n excludeRevoked: false,\n })\n const row = rows.find((r) => r.id?.toLowerCase() === params.uid.toLowerCase())\n if (!row) return null\n const decoded = decodePublishAuthorizationData(row.decodedDataJson ?? '[]')\n const expirationTime =\n typeof row.expirationTime === 'number'\n ? row.expirationTime\n : typeof row.expirationTime === 'string'\n ? Number(row.expirationTime)\n : null\n return {\n uid: row.id,\n decoded,\n assess: assessPublishAuthorization({ decoded, expirationTime }),\n expirationTime,\n }\n}\n"],"mappings":";;;;;;AAGA,IAAac,IAAuBC,EAAoC,IAAI;AAE5E,SAAgBC,IAAkC;CAChD,IAAMC,IAASC,EAAWJ,CAAoB;CAC9C,IAAI,CAACG,GACH,MAAU,MACR,iHACF;CAEF,OAAOA;AACT;;;ACJA,SAAgBE,IAAuD;CACrE,IAAMC,IAASb,EAAiB,CAAC,CAAC,8BAA8B,KAAK;CACrE,IAAI,CAACa,KAAU,CAAC,sBAAsB,KAAKA,CAAM,GAC/C,MAAU,MACR,kJAEF;CAEF,OAAO,CAACA,EAAO,YAAY,CAAkB;AAC/C;;;ACdA,IAAaC,IAA4B;AAYzC,SAAgBC,EAAqC,GAEjB;CAElC,IAAMC,IAAuC;EAC3C,iBAFsBJ,EAEtB;EACA,gCAAgC;CAClC;CAIA,OAHI,OAAOK,GAAQ,aAAc,YAAYA,EAAO,YAAY,MAC9D,EAAI,YAAY,KAAK,MAAMA,EAAO,SAAS,IAEtCD;AACT;AAMA,SAAgBE,EACd,GACA,IAAiBJ,GACF;CAIf,IAAMK,IAAW,GAHD,CAAC,GAAGC,EAAY,eAAe,CAAC,CAAC,KAAK,MAAMC,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAGrE,EAAQ,GAFdD,EAAY,+BAEW,GADnBA,EAAY,aAAa,EACO,GAAGE,EAAO,KAAK;CACjE,OAAOC,EAAUC,EAAYL,CAAQ,CAAC;AACxC;AAGA,SAAgBM,EAAgC,GAI9C;CACA,IAAMC,IAAO;EACX,iBAAiBN,EAAY;EAC7B,gCAAgCA,EAAY;CAC9C;CAOA,OANIA,EAAY,aAAa,QAAQA,EAAY,YAAY,IACpD;EACL,GAAGM;EACH,wCAAwB,IAAI,KAAKN,EAAY,YAAY,GAAI;CAC/D,IAEKM;AACT;;;ACxBA,IAAMC,IAAmB,8CACnBC,IAAY,IACZnC,IAAe;AAErB,SAASqC,EAAgB,GAAqD;CAC5E,IAAI3B,EAAgB4B,CAAO,GAAG,OAAOA,EAAQ;CAC7C,IAAInC,EAAemC,CAAO,GAAG,OAAOA;CACpC,MAAU,MACR,iGACF;AACF;AAEA,eAAeC,EACb,GACA,GACA;CACA,IAAMC,IAAS,MAAMC,EAAS,gBAAgBC,CAAE;CAChD,OAAOpC,EAAsBkC,EAAO,eAAe;AACrD;AAEA,SAASG,EAAc,GAAe,GAA6B;CACjE,IAAMC,IAAIC,EAAK,KAAK;CACpB,IAAI,CAAC,sBAAsB,KAAKD,CAAC,GAC/B,MAAU,MAAM,0BAA0BE,EAAM,yBAAyB;CAE3E,OAAOF;AACT;AAGA,SAAgBG,IAAkD;CAChE,OAAOC,EAAe,aACpBC,GACAf,GACAC,CACF;AACF;AAKA,eAAsBe,EACpB,GACwB;CACxB,IAAMC,IAASd,EAAgBC,CAAO,GAChCc,IAAYL,EAAiC;CAmBnD,OAjBK,MADiB3C,EAAgBgD,CAAS,MAE7C,MAAMb,EACJY,GACA3C,EAAe;EACb,QAAQyC;EACR,iBAAiBf;EACjB,WAAWC;CACb,CAAC,CACH,GACA,MAAMI,EACJY,GACAjD,EAA6B;EAC3B;EACA,YAAYmD;CACd,CAAC,CACH,IAEKD;AACT;AAEA,SAAgBE,EAA0C,GAQxC;CAehB,OAboB,IADMC,EAAcN,CACpB,CAAA,CAAc,WAAW;EAC3C;GAAE,MAAM;GAAY,OAAOzB,EAAO;GAA2B,MAAM;EAAU;EAC7E;GAAE,MAAM;GAAc,OAAOA,EAAO;GAA6B,MAAM;EAAU;EACjF;GAAE,MAAM;GAAO,OAAOA,EAAO;GAAsB,MAAM;EAAU;EACnE;GAAE,MAAM;GAAU,OAAOA,EAAO;GAAQ,MAAM;EAAS;EACvD;GAAE,MAAM;GAAa,OAAOA,EAAO;GAAW,MAAM;EAAS;EAC7D;GAAE,MAAM;GAAa,OAAOA,EAAO;GAAW,MAAM;EAAS;EAC7D;GACE,MAAM;GACN,OAAOgC,EAAoBhC,EAAO,eAAe;GACjD,MAAM;EACR;CACF,CACO;AACT;AA8BA,eAAsBiC,EACpB,GAC2C;CAC3C,IAAMN,IAASd,EAAgBb,EAAO,MAAM,GACtC4B,IACJ5B,EAAO,iBAAiB,KACpBuB,EAAiC,IACjC,MAAMG,EAAiC1B,EAAO,MAAM,GAEpDkC,IAAWf,EAAc,YAAYnB,EAAO,QAAQ,GACpDmC,IAAahB,EAAc,cAAcnB,EAAO,UAAU,GAC1DoC,IAAMpC,EAAO,KAAK,KAAK,IACzBmB,EAAc,OAAOnB,EAAO,GAAG,IAC9BxB,GAEC6D,IAAYrC,EAAO,aAAa,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI,GAC5DsC,IACJ,OAAOtC,EAAO,aAAc,YAAYA,EAAO,YAAY,IACvD,KAAK,MAAMA,EAAO,SAAS,IAC3B,GACAK,IAASL,EAAO,UAAUuC,GAE1BC,IAAkBR,EACtBhC,EAAO,mBACLC,EACEH,EAAqC,EACnC,WAAWwC,IAAY,IAAIA,IAAY,KAAA,EACzC,CAAC,GACDjC,MAAWkC,IAAA,mBAA2DlC,CACxE,CACJ;CAEA,IAAImC,MAAoBC,GACtB,MAAU,MACR,uFACF;CAGF,IAAMC,IACJ,OAAO1C,EAAO,kBAAmB,YAAYA,EAAO,iBAAiB,IACjEA,EAAO,iBACPsC,IAAY,IACVA,IACAD,IAAYM,GAEdC,IAAOd,EAA0C;EACrD;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC,GAcKe,IAAU,MAAM9B,EAAYY,GAZvB1C,EAAiB;EAC1B,QAAQ2C;EACR,MAAM;GACJ,WAAWO;GACX,gBAAgB,OAAOO,CAAc;GACrC,WAAW;GACX,QAAQD;GACR;GACA,OAAO;EACT;CACF,CAE0C,CAAE;CAC5C,IAAI,CAACI,GACH,MAAU,MAAM,uEAAuE;CAEzF,IAAM,EAAE,0BAAuB9D,EAAiB,GAC1C+D,IAAMjE,EAA6BgE,GAASE,CAAkB;CACpE,IAAI,CAACD,KAAO,CAACE,EAAyBF,CAAG,GACvC,MAAU,MACR,4FACF;CAGF,OAAO;EACA;EACL;EACA;EACA;EACA;EACA;CACF;AACF;AAKA,eAAsBG,EAA2B,GAI/B;CAChB,IAAMtB,IAASd,EAAgBb,EAAO,MAAM,GACtC4B,IAAa5B,EAAO,aAAauB,EAAiC,GAClEuB,IAAMd,EAAoBhC,EAAO,GAAG;CAC1C,IAAI,CAACgD,EAAyBF,CAAG,GAC/B,MAAU,MACR,oFACF;CAUF,IAAI,CAAC,MADiB/B,EAAYY,GANvBlD,EAAsB,CAC/B;EACE,QAAQmD;EACR,MAAM,CAAC,EAAE,OAAI,CAAC;CAChB,CACF,CAC0C,CAAE,GAE1C,MAAU,MAAM,uEAAuE;AAE3F;AAaA,eAAsBsB,EAA+B,GAGI;CAKvD,IAAMC,KAAM,MAJOC,EAA+B;EAChD,YAAYpD,EAAO;EACnB,gBAAgB;CAClB,CAAC,EAAA,CACgB,MAAM,MAAMqD,EAAE,IAAI,YAAY,MAAMrD,EAAO,IAAI,YAAY,CAAC;CAC7E,IAAI,CAACmD,GAAK,OAAO;CACjB,IAAMG,IAAUC,EAA+BJ,EAAI,mBAAmB,IAAI,GACpET,IACJ,OAAOS,EAAI,kBAAmB,WAC1BA,EAAI,iBACJ,OAAOA,EAAI,kBAAmB,WAC5B,OAAOA,EAAI,cAAc,IACzB;CACR,OAAO;EACL,KAAKA,EAAI;EACT;EACA,QAAQK,EAA2B;GAAE;GAAS;EAAe,CAAC;EAC9D;CACF;AACF"}
|
|
1
|
+
{"version":3,"file":"publishAuthorization-D2wbNc-H.js","names":["ZERO_ADDRESS","prepareEasMultiRevoke","prepareNameSchemaAttestation","isSeedTxSender","getSchemaRecord","getAttestationUidFromReceipt","waitForPublishReceipt","getPublishConfig","registerSchema","prepareEasAttest","isPublishWallet","PUBLISH_AUTHORIZATION_SCHEMA_DEF$1","PUBLISH_AUTHORIZATION_SCHEMA_NAME$1","PUBLISH_AUTHORIZATION_SCOPES$1","PublishConfigContext","createContext","usePublishConfig","config","useContext","approvedTargetsForAutomationPublish","module","PUBLISH_AUTOMATION_SCOPES","buildAutomationSessionKeyPermissions","out","params","hashAutomationSessionKeyPermissions","material","permissions","a","scopes","keccak256","toUtf8Bytes","toThirdwebSessionKeyPermissions","base","RESOLVER_ADDRESS","REVOCABLE","ZERO_ADDRESS$1","resolveTxSender","account","sendAndWait","result","txSender","tx","assertAddress","t","addr","label","getPublishAuthorizationSchemaUid","SchemaRegistry","PUBLISH_AUTHORIZATION_SCHEMA_DEF","ensurePublishAuthorizationSchema","sender","schemaUid","PUBLISH_AUTHORIZATION_SCHEMA_NAME","encodePublishAuthorizationAttestationData","SchemaEncoder","normalizeBytes32Hex","attestPublishAuthorization","identity","sessionKey","app","grantedAt","expiresAt","PUBLISH_AUTHORIZATION_SCOPES","permissionsHash","ZERO_BYTES32","expirationTime","PUBLISH_AUTHORIZATION_DEFAULT_EXPIRATION_SECS","data","receipt","uid","easContractAddress","isValidEasAttestationUid","revokePublishAuthorization","assessPublishAuthorizationLive","row","getPublishAuthorizationFromEas","r","decoded","decodePublishAuthorizationData","assessPublishAuthorization"],"sources":["../src/react/PublishConfigContext.tsx","../src/helpers/approvedTargetsForAutomationPublish.ts","../src/helpers/automationSessionKeyPermissions.ts","../src/services/publishAuthorization/index.ts"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport type { PublishConfig } from '../config'\n\nexport const PublishConfigContext = createContext<PublishConfig | null>(null)\n\nexport function usePublishConfig(): PublishConfig {\n const config = useContext(PublishConfigContext)\n if (!config) {\n throw new Error(\n 'usePublishConfig: PublishConfig is missing. Pass config to PublishProvider or call initPublish() before render.',\n )\n }\n return config\n}\n","import { getPublishConfig } from '../config'\n\n/**\n * Allowlisted call targets for session keys on a ManagedAccount.\n * Returns only the configured Seed executor module — never the ManagedAccount or raw EAS\n * (those would allow `setEas` / arbitrary attestations).\n *\n * @throws if `modularAccountModuleContract` is unset or invalid\n */\nexport function approvedTargetsForAutomationPublish(): `0x${string}`[] {\n const module = getPublishConfig().modularAccountModuleContract?.trim()\n if (!module || !/^0x[0-9a-fA-F]{40}$/.test(module)) {\n throw new Error(\n '@seedprotocol/publish: session keys require PublishConfig.modularAccountModuleContract ' +\n '(their only approved target is the Seed executor module).',\n )\n }\n return [module.toLowerCase() as `0x${string}`]\n}\n","import { keccak256, toUtf8Bytes } from 'ethers'\nimport { approvedTargetsForAutomationPublish } from './approvedTargetsForAutomationPublish'\n\n/** Fixed v1 scopes for publish automation grants. */\nexport const PUBLISH_AUTOMATION_SCOPES = 'publish,revoke' as const\n\nexport type AutomationSessionKeyPermissions = {\n approvedTargets: `0x${string}`[]\n nativeTokenLimitPerTransaction: number\n /** Unix seconds; omit for Thirdweb default long window. */\n expiresAt?: number\n}\n\n/**\n * Canonical permissions for an automation session key (module-only targets).\n */\nexport function buildAutomationSessionKeyPermissions(params?: {\n expiresAt?: number\n}): AutomationSessionKeyPermissions {\n const approvedTargets = approvedTargetsForAutomationPublish()\n const out: AutomationSessionKeyPermissions = {\n approvedTargets,\n nativeTokenLimitPerTransaction: 0,\n }\n if (typeof params?.expiresAt === 'number' && params.expiresAt > 0) {\n out.expiresAt = Math.trunc(params.expiresAt)\n }\n return out\n}\n\n/**\n * Deterministic permissions hash for the PublishAuthorization sidecar.\n * Material: sorted targets | nativeLimit | expiresAt (0 if unset) | scopes\n */\nexport function hashAutomationSessionKeyPermissions(\n permissions: AutomationSessionKeyPermissions,\n scopes: string = PUBLISH_AUTOMATION_SCOPES,\n): `0x${string}` {\n const targets = [...permissions.approvedTargets].map((a) => a.toLowerCase()).sort().join(',')\n const limit = permissions.nativeTokenLimitPerTransaction\n const expiresAt = permissions.expiresAt ?? 0\n const material = `${targets}|${limit}|${expiresAt}|${scopes.trim()}`\n return keccak256(toUtf8Bytes(material)) as `0x${string}`\n}\n\n/** Shape passed to Thirdweb `addSessionKey` / `shouldUpdateSessionKey`. */\nexport function toThirdwebSessionKeyPermissions(permissions: AutomationSessionKeyPermissions): {\n approvedTargets: `0x${string}`[]\n nativeTokenLimitPerTransaction: number\n permissionEndTimestamp?: Date\n} {\n const base = {\n approvedTargets: permissions.approvedTargets,\n nativeTokenLimitPerTransaction: permissions.nativeTokenLimitPerTransaction,\n }\n if (permissions.expiresAt != null && permissions.expiresAt > 0) {\n return {\n ...base,\n permissionEndTimestamp: new Date(permissions.expiresAt * 1000),\n }\n }\n return base\n}\n","import {\n PUBLISH_AUTHORIZATION_DEFAULT_EXPIRATION_SECS,\n PUBLISH_AUTHORIZATION_SCHEMA_DEF,\n PUBLISH_AUTHORIZATION_SCHEMA_NAME,\n PUBLISH_AUTHORIZATION_SCOPES,\n assessPublishAuthorization,\n decodePublishAuthorizationData,\n getPublishAuthorizationFromEas,\n type PublishAuthorizationAssessResult,\n type PublishAuthorizationDecoded,\n} from '@seedprotocol/eas'\nimport { SchemaEncoder, ZERO_BYTES32 } from '@ethereum-attestation-service/eas-sdk'\nimport { SchemaRegistry } from '@ethereum-attestation-service/eas-sdk'\nimport { prepareEasAttest, prepareEasMultiRevoke } from '~/helpers/easDirect'\nimport { getSchemaRecord, registerSchema } from '~/helpers/schemaRegistry'\nimport { prepareNameSchemaAttestation } from '~/helpers/nameSchemaAttestation'\nimport { waitForPublishReceipt } from '~/helpers/chainClient'\nimport { getPublishConfig } from '~/config'\nimport {\n isPublishWallet,\n isSeedTxSender,\n type PublishWallet,\n type SeedTxSender,\n} from '~/helpers/seedSigner'\nimport { getAttestationUidFromReceipt } from '~/helpers/easDirect'\nimport { normalizeBytes32Hex, isValidEasAttestationUid } from '@seedprotocol/eas'\nimport {\n buildAutomationSessionKeyPermissions,\n hashAutomationSessionKeyPermissions,\n PUBLISH_AUTOMATION_SCOPES,\n} from '~/helpers/automationSessionKeyPermissions'\n\nexport {\n PUBLISH_AUTHORIZATION_SCHEMA_DEF,\n PUBLISH_AUTHORIZATION_SCHEMA_NAME,\n PUBLISH_AUTHORIZATION_SCOPES,\n} from '@seedprotocol/eas'\n\nconst RESOLVER_ADDRESS = '0x0000000000000000000000000000000000000000'\nconst REVOCABLE = true\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'\n\nfunction resolveTxSender(account: PublishWallet | SeedTxSender): SeedTxSender {\n if (isPublishWallet(account)) return account.txSender\n if (isSeedTxSender(account)) return account\n throw new Error(\n '@seedprotocol/publish: publish authorization write APIs require a PublishWallet or SeedTxSender',\n )\n}\n\nasync function sendAndWait(\n txSender: SeedTxSender,\n tx: Parameters<SeedTxSender['sendTransaction']>[0],\n) {\n const result = await txSender.sendTransaction(tx)\n return waitForPublishReceipt(result.transactionHash)\n}\n\nfunction assertAddress(label: string, addr: string): `0x${string}` {\n const t = addr.trim()\n if (!/^0x[0-9a-fA-F]{40}$/.test(t)) {\n throw new Error(`@seedprotocol/publish: ${label} must be a valid address`)\n }\n return t as `0x${string}`\n}\n\n/** Deterministic on-chain schema UID for {@link PUBLISH_AUTHORIZATION_SCHEMA_DEF}. */\nexport function getPublishAuthorizationSchemaUid(): `0x${string}` {\n return SchemaRegistry.getSchemaUID(\n PUBLISH_AUTHORIZATION_SCHEMA_DEF,\n RESOLVER_ADDRESS as `0x${string}`,\n REVOCABLE,\n ) as `0x${string}`\n}\n\n/**\n * Registers the PublishAuthorization EAS schema (if missing) and creates a Schema #1 name attestation.\n */\nexport async function ensurePublishAuthorizationSchema(\n account: PublishWallet | SeedTxSender,\n): Promise<`0x${string}`> {\n const sender = resolveTxSender(account)\n const schemaUid = getPublishAuthorizationSchemaUid()\n const onChain = await getSchemaRecord(schemaUid)\n if (!onChain) {\n await sendAndWait(\n sender,\n registerSchema({\n schema: PUBLISH_AUTHORIZATION_SCHEMA_DEF,\n resolverAddress: RESOLVER_ADDRESS,\n revocable: REVOCABLE,\n }),\n )\n await sendAndWait(\n sender,\n prepareNameSchemaAttestation({\n schemaUid,\n schemaName: PUBLISH_AUTHORIZATION_SCHEMA_NAME,\n }),\n )\n }\n return schemaUid\n}\n\nexport function encodePublishAuthorizationAttestationData(params: {\n identity: string\n sessionKey: string\n app: string\n scopes: string\n grantedAt: number\n expiresAt: number\n permissionsHash: string\n}): `0x${string}` {\n const schemaEncoder = new SchemaEncoder(PUBLISH_AUTHORIZATION_SCHEMA_DEF)\n const encodedData = schemaEncoder.encodeData([\n { name: 'identity', value: params.identity as `0x${string}`, type: 'address' },\n { name: 'sessionKey', value: params.sessionKey as `0x${string}`, type: 'address' },\n { name: 'app', value: params.app as `0x${string}`, type: 'address' },\n { name: 'scopes', value: params.scopes, type: 'string' },\n { name: 'grantedAt', value: params.grantedAt, type: 'uint64' },\n { name: 'expiresAt', value: params.expiresAt, type: 'uint64' },\n {\n name: 'permissionsHash',\n value: normalizeBytes32Hex(params.permissionsHash) as `0x${string}`,\n type: 'bytes32',\n },\n ])\n return encodedData as `0x${string}`\n}\n\nexport type AttestPublishAuthorizationParams = {\n /** Must be the ManagedAccount (identity) wallet — becomes EAS attester. */\n wallet: PublishWallet | SeedTxSender\n identity: string\n sessionKey: string\n /** Optional app label address; defaults to zero address. */\n app?: string\n scopes?: string\n grantedAt?: number\n expiresAt?: number\n permissionsHash?: string\n ensureSchema?: boolean\n /** Override EAS expirationTime (unix seconds). */\n expirationTime?: number\n}\n\nexport type AttestPublishAuthorizationResult = {\n uid: `0x${string}`\n schemaUid: `0x${string}`\n permissionsHash: `0x${string}`\n grantedAt: number\n expiresAt: number\n expirationTime: number\n}\n\n/**\n * ManagedAccount attests a PublishAuthorization grant (recipient = session key).\n */\nexport async function attestPublishAuthorization(\n params: AttestPublishAuthorizationParams,\n): Promise<AttestPublishAuthorizationResult> {\n const sender = resolveTxSender(params.wallet)\n const schemaUid =\n params.ensureSchema === false\n ? getPublishAuthorizationSchemaUid()\n : await ensurePublishAuthorizationSchema(params.wallet)\n\n const identity = assertAddress('identity', params.identity)\n const sessionKey = assertAddress('sessionKey', params.sessionKey)\n const app = params.app?.trim()\n ? assertAddress('app', params.app)\n : (ZERO_ADDRESS as `0x${string}`)\n\n const grantedAt = params.grantedAt ?? Math.floor(Date.now() / 1000)\n const expiresAt =\n typeof params.expiresAt === 'number' && params.expiresAt > 0\n ? Math.trunc(params.expiresAt)\n : 0\n const scopes = params.scopes ?? PUBLISH_AUTHORIZATION_SCOPES\n\n const permissionsHash = normalizeBytes32Hex(\n params.permissionsHash ??\n hashAutomationSessionKeyPermissions(\n buildAutomationSessionKeyPermissions({\n expiresAt: expiresAt > 0 ? expiresAt : undefined,\n }),\n scopes === PUBLISH_AUTHORIZATION_SCOPES ? PUBLISH_AUTOMATION_SCOPES : scopes,\n ),\n ) as `0x${string}`\n\n if (permissionsHash === ZERO_BYTES32) {\n throw new Error(\n '@seedprotocol/publish: attestPublishAuthorization requires a non-zero permissionsHash',\n )\n }\n\n const expirationTime =\n typeof params.expirationTime === 'number' && params.expirationTime > 0\n ? params.expirationTime\n : expiresAt > 0\n ? expiresAt\n : grantedAt + PUBLISH_AUTHORIZATION_DEFAULT_EXPIRATION_SECS\n\n const data = encodePublishAuthorizationAttestationData({\n identity,\n sessionKey,\n app,\n scopes,\n grantedAt,\n expiresAt,\n permissionsHash,\n })\n\n const tx = prepareEasAttest({\n schema: schemaUid,\n data: {\n recipient: sessionKey,\n expirationTime: BigInt(expirationTime),\n revocable: true,\n refUID: ZERO_BYTES32 as `0x${string}`,\n data,\n value: 0n,\n },\n })\n\n const receipt = await sendAndWait(sender, tx)\n if (!receipt) {\n throw new Error('@seedprotocol/publish: attestPublishAuthorization failed — no receipt')\n }\n const { easContractAddress } = getPublishConfig()\n const uid = getAttestationUidFromReceipt(receipt, easContractAddress)\n if (!uid || !isValidEasAttestationUid(uid)) {\n throw new Error(\n '@seedprotocol/publish: attestPublishAuthorization failed — could not parse attestation UID',\n )\n }\n\n return {\n uid: uid as `0x${string}`,\n schemaUid,\n permissionsHash,\n grantedAt,\n expiresAt,\n expirationTime,\n }\n}\n\n/**\n * Revoke a PublishAuthorization sidecar (must be signed by the original ManagedAccount attester).\n */\nexport async function revokePublishAuthorization(params: {\n wallet: PublishWallet | SeedTxSender\n uid: string\n schemaUid?: string\n}): Promise<void> {\n const sender = resolveTxSender(params.wallet)\n const schemaUid = (params.schemaUid ?? getPublishAuthorizationSchemaUid()) as `0x${string}`\n const uid = normalizeBytes32Hex(params.uid) as `0x${string}`\n if (!isValidEasAttestationUid(uid)) {\n throw new Error(\n '@seedprotocol/publish: revokePublishAuthorization requires a valid attestation uid',\n )\n }\n\n const tx = prepareEasMultiRevoke([\n {\n schema: schemaUid,\n data: [{ uid }],\n },\n ])\n const receipt = await sendAndWait(sender, tx)\n if (!receipt) {\n throw new Error('@seedprotocol/publish: revokePublishAuthorization failed — no receipt')\n }\n}\n\nexport type AssessPublishAuthorizationLiveResult = {\n uid: string\n decoded: PublishAuthorizationDecoded\n assess: PublishAuthorizationAssessResult\n expirationTime?: number | null\n}\n\n/**\n * Load a PublishAuthorization attestation by uid (via identity filter + client match) and assess.\n * Prefer filtering with {@link getPublishAuthorizationFromEas} when you know identity/sessionKey.\n */\nexport async function assessPublishAuthorizationLive(params: {\n uid: string\n identities: string[]\n}): Promise<AssessPublishAuthorizationLiveResult | null> {\n const rows = await getPublishAuthorizationFromEas({\n identities: params.identities,\n excludeRevoked: false,\n })\n const row = rows.find((r) => r.id?.toLowerCase() === params.uid.toLowerCase())\n if (!row) return null\n const decoded = decodePublishAuthorizationData(row.decodedDataJson ?? '[]')\n const expirationTime =\n typeof row.expirationTime === 'number'\n ? row.expirationTime\n : typeof row.expirationTime === 'string'\n ? Number(row.expirationTime)\n : null\n return {\n uid: row.id,\n decoded,\n assess: assessPublishAuthorization({ decoded, expirationTime }),\n expirationTime,\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,45 +1,48 @@
|
|
|
1
1
|
import { client as e } from "@seedprotocol/sdk";
|
|
2
2
|
//#region src/helpers/publishWalletRegistry.ts
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
function t(e) {
|
|
4
|
+
if (e) return e.dataItemSigner ? e.dataItemSigner : e.kind === "smart" ? void 0 : e.signer;
|
|
5
|
+
}
|
|
6
|
+
var n = null;
|
|
7
|
+
function r() {
|
|
5
8
|
return e.isInitialized() ? Promise.resolve() : new Promise((t) => {
|
|
6
9
|
e.onReady(() => t());
|
|
7
10
|
});
|
|
8
11
|
}
|
|
9
|
-
async function
|
|
10
|
-
if (
|
|
11
|
-
await
|
|
12
|
+
async function i(t) {
|
|
13
|
+
if (n = t, !t) return;
|
|
14
|
+
await r();
|
|
12
15
|
let i = /* @__PURE__ */ new Set();
|
|
13
|
-
for (let e of
|
|
14
|
-
i.add(
|
|
16
|
+
for (let e of t.ownedAddresses ?? []) e && i.add(e.toLowerCase());
|
|
17
|
+
i.add(t.signer.address.toLowerCase()), i.add(t.txSender.address.toLowerCase()), t.publisherAddress && i.add(t.publisherAddress.toLowerCase());
|
|
15
18
|
try {
|
|
16
|
-
let { watched:
|
|
19
|
+
let { watched: n } = await e.getAddresses();
|
|
17
20
|
await e.setAddresses({
|
|
18
21
|
owned: [...i],
|
|
19
|
-
watched:
|
|
22
|
+
watched: n
|
|
20
23
|
});
|
|
21
|
-
let
|
|
22
|
-
|
|
24
|
+
let r = t.publisherAddress ?? t.signer.address;
|
|
25
|
+
r && await e.claimUnpublishedDrafts(r);
|
|
23
26
|
} catch (e) {
|
|
24
27
|
console.warn("[publishWalletRegistry] Failed to set seed client addresses:", e);
|
|
25
28
|
}
|
|
26
29
|
}
|
|
27
|
-
function
|
|
28
|
-
return
|
|
30
|
+
function a() {
|
|
31
|
+
return n;
|
|
29
32
|
}
|
|
30
|
-
async function
|
|
31
|
-
if (
|
|
32
|
-
let { watched:
|
|
33
|
-
if (
|
|
33
|
+
async function o() {
|
|
34
|
+
if (n = null, e.isInitialized()) try {
|
|
35
|
+
let { watched: t } = await e.getAddresses();
|
|
36
|
+
if (n) return;
|
|
34
37
|
await e.setAddresses({
|
|
35
38
|
owned: [],
|
|
36
|
-
watched:
|
|
39
|
+
watched: t
|
|
37
40
|
});
|
|
38
41
|
} catch (e) {
|
|
39
42
|
console.warn("[publishWalletRegistry] Failed to clear seed client owned addresses:", e);
|
|
40
43
|
}
|
|
41
44
|
}
|
|
42
45
|
//#endregion
|
|
43
|
-
export { i as n, r,
|
|
46
|
+
export { i, t as n, a as r, o as t };
|
|
44
47
|
|
|
45
|
-
//# sourceMappingURL=publishWalletRegistry-
|
|
48
|
+
//# sourceMappingURL=publishWalletRegistry-BaQe9rIR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publishWalletRegistry-BaQe9rIR.js","names":["seedClient","defaultDataItemSigner","wallet","session","waitUntilSeedInitialized","client","resolve","setPublishWallet","next","owned","a","claimAs","err","getPublishWallet","clearPublishWallet"],"sources":["../src/helpers/publishWalletRegistry.ts"],"sourcesContent":["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 * Admin (EOA) of the smart account this session publishes from, when there is one. Lets publish\n * tell an undeployed smart account from an EOA, which both have no bytecode.\n */\n adminAddress?: string\n /**\n * Signs Arweave data items (bundler and Turbo uploads). They need a plain ECDSA key: a smart\n * account's signatures (EIP-1271/6492) don't verify as data items, so a smart wallet sets its\n * admin EOA here. Without it, publish uses `signer` only when the wallet is an EOA.\n */\n dataItemSigner?: import('./seedSigner').SeedSigner\n /**\n * Deploys the publisher's smart account (kind 'smart') when it has no code yet. Publish calls it\n * before a first publish instead of refusing it; ConnectButton sets it for its smart wallet.\n */\n deploy?: () => Promise<void>\n}\n\n/**\n * The data-item signer to default to for this wallet: its own `dataItemSigner`, else its signer\n * when that is an EOA's (`kind: 'eoa'`, or a known EOA admin). Undefined for a smart account with\n * no EOA signer, whose signatures data items can't use.\n */\nexport function defaultDataItemSigner(\n wallet: (Partial<PublishWalletSession> & Pick<PublishWallet, 'signer'>) | null | undefined,\n): import('./seedSigner').SeedSigner | undefined {\n if (!wallet) return undefined\n if (wallet.dataItemSigner) return wallet.dataItemSigner\n return wallet.kind === 'smart' ? undefined : wallet.signer\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 // Watched addresses aren't the wallet's: keep them (setAddresses replaces both lists).\n const { watched } = await seedClient.getAddresses()\n await seedClient.setAddresses({ owned: [...owned], watched })\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\n/**\n * Forget the publish wallet and stop treating its addresses as owned in the Seed SDK (watched\n * addresses are kept). New drafts are then signed-out drafts, editable until a wallet connects\n * and claims them; drafts stamped with the old wallet are read-only until it reconnects.\n */\nexport async function clearPublishWallet(): Promise<void> {\n session = null\n if (!seedClient.isInitialized()) return\n try {\n const { watched } = await seedClient.getAddresses()\n // A wallet connected while we read: its addresses win.\n if (session) return\n await seedClient.setAddresses({ owned: [], watched })\n } catch (err) {\n console.warn('[publishWalletRegistry] Failed to clear seed client owned addresses:', err)\n }\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"],"mappings":";;AA+BA,SAAgBC,EACd,GAC+C;CAC/C,IAAKC,GAEL,OADIA,EAAO,iBAAuBA,EAAO,iBAClCA,EAAO,SAAS,UAAU,KAAA,IAAYA,EAAO;AACtD;AAEA,IAAIC,IAAuC;AAE3C,SAASC,IAA0C;CAEjD,OADIJ,EAAW,cAAc,IAAU,QAAQ,QAAQ,IAChD,IAAI,SAAS,MAAY;EAC9B,EAAW,cAAcM,EAAQ,CAAC;CACpC,CAAC;AACH;AAMA,eAAsBC,EACpB,GACe;CAEf,IADA,IAAUC,GACN,CAACA,GAAM;CACX,MAAMJ,EAAyB;CAC/B,IAAMK,oBAAQ,IAAI,IAAY;CAC9B,KAAK,IAAMC,KAAKF,EAAK,kBAAkB,CAAC,GACtC,AAAIE,KAAGD,EAAM,IAAIC,EAAE,YAAY,CAAC;CAIlC,AAFAD,EAAM,IAAID,EAAK,OAAO,QAAQ,YAAY,CAAC,GAC3CC,EAAM,IAAID,EAAK,SAAS,QAAQ,YAAY,CAAC,GACzCA,EAAK,oBAAkBC,EAAM,IAAID,EAAK,iBAAiB,YAAY,CAAC;CACxE,IAAI;EAEF,IAAM,EAAE,eAAY,MAAMR,EAAW,aAAa;EAClD,MAAMA,EAAW,aAAa;GAAE,OAAO,CAAC,GAAGS,CAAK;GAAG;EAAQ,CAAC;EAC5D,IAAME,IAAUH,EAAK,oBAAoBA,EAAK,OAAO;EACrD,AAAIG,KACF,MAAMX,EAAW,uBAAuBW,CAAO;CAEnD,SAASC,GAAK;EACZ,QAAQ,KAAK,gEAAgEA,CAAG;CAClF;AACF;AAEA,SAAgBC,IAAgD;CAC9D,OAAOV;AACT;AAOA,eAAsBW,IAAoC;CAExD,IADA,IAAU,MACLd,EAAW,cAAc,GAC9B,IAAI;EACF,IAAM,EAAE,eAAY,MAAMA,EAAW,aAAa;EAElD,IAAIG,GAAS;EACb,MAAMH,EAAW,aAAa;GAAE,OAAO,CAAC;GAAG;EAAQ,CAAC;CACtD,SAASY,GAAK;EACZ,QAAQ,KAAK,wEAAwEA,CAAG;CAC1F;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConnectButton.d.ts","sourceRoot":"","sources":["../../src/react/ConnectButton.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAAkC,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"ConnectButton.d.ts","sourceRoot":"","sources":["../../src/react/ConnectButton.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAAkC,MAAM,OAAO,CAAA;AAuFjE,QAAA,MAAM,aAAa,EAAE,EA4NpB,CAAA;AAED,eAAe,aAAa,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { J as e, K as t, U as n, V as r, Z as i, _t as a, a as o, rt as s } from "./chainConfig-
|
|
1
|
+
import { J as e, K as t, U as n, V as r, Z as i, _t as a, a as o, rt as s } from "./chainConfig-CY22-kWO.js";
|
|
2
2
|
import { getGetAdditionalSyncAddresses as c } from "@seedprotocol/sdk";
|
|
3
3
|
//#region src/helpers/resolveRevokeAccount.ts
|
|
4
4
|
async function l(l) {
|
|
@@ -34,4 +34,4 @@ async function l(l) {
|
|
|
34
34
|
//#endregion
|
|
35
35
|
export { l as resolveRevokeAccount };
|
|
36
36
|
|
|
37
|
-
//# sourceMappingURL=resolveRevokeAccount-
|
|
37
|
+
//# sourceMappingURL=resolveRevokeAccount-B7cj6OyT.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveRevokeAccount-
|
|
1
|
+
{"version":3,"file":"resolveRevokeAccount-B7cj6OyT.js","names":["isSmartWalletDeployed","getSmartWalletAddressForAdmin","getManagedAccountWallet","getConnectedManagedAccountAddress","syncPublishInAppAuthToken","getPublishThirdwebChain","getPublishConfig","getClient","resolveRevokeAccount","params","attester","account","additionalGetter","getGetAdditionalSyncAddresses","attesterIsExecutorModule","additional","attesterLower","a","derivedManagedAccount","managedAddress","managedAccountWallet","managedAccount","modularAccountModuleContract"],"sources":["../src/helpers/resolveRevokeAccount.ts"],"sourcesContent":["import type { Account } from 'thirdweb/wallets'\nimport { getGetAdditionalSyncAddresses } from '@seedprotocol/sdk'\nimport { getPublishConfig } from '~/config'\nimport {\n getClient,\n getSmartWalletAddressForAdmin,\n isSmartWalletDeployed,\n getManagedAccountWallet,\n getConnectedManagedAccountAddress,\n syncPublishInAppAuthToken,\n} from '~/helpers/thirdweb'\nimport { getPublishThirdwebChain } from './thirdwebChain'\n\n/**\n * Resolves which account to use for revoking attestations.\n * When the attester is the user's ManagedAccount (EIP4337) but they're connected\n * with a different wallet (e.g. EOA or modular account), attempts to use the\n * ManagedAccount wallet for the revoke.\n *\n * When the attester is the legacy executor module address, attempts the ManagedAccount\n * wallet if `modularAccountModuleContract` is configured (executor-routed multiRevoke).\n * Throws only when the module was the attester and no ManagedAccount path is available.\n */\nexport async function resolveRevokeAccount(params: {\n account: Account\n attester: string | null\n}): Promise<Account> {\n const { account, attester } = params\n\n if (!attester || account.address.toLowerCase() === attester.toLowerCase()) {\n return account\n }\n\n const additionalGetter = getGetAdditionalSyncAddresses()\n let attesterIsExecutorModule = false\n if (additionalGetter) {\n const additional = await additionalGetter()\n const attesterLower = attester.toLowerCase()\n attesterIsExecutorModule = !!additional?.some(\n (a: string | undefined) => a?.toLowerCase() === attesterLower,\n )\n }\n\n try {\n const derivedManagedAccount = await getSmartWalletAddressForAdmin(account.address)\n const attesterLower = attester.toLowerCase()\n const derivedLower = derivedManagedAccount.toLowerCase()\n\n if (attesterLower === derivedLower || attesterIsExecutorModule) {\n const managedAddress = attesterIsExecutorModule\n ? await getConnectedManagedAccountAddress(getPublishThirdwebChain()).catch(() => derivedManagedAccount)\n : derivedManagedAccount\n const deployed = await isSmartWalletDeployed(managedAddress)\n if (deployed) {\n // Same as ensureModularPublishBootstrap: the managed wallet reads the in-app session token.\n syncPublishInAppAuthToken()\n const managedAccountWallet = getManagedAccountWallet()\n await managedAccountWallet.autoConnect({\n client: getClient(),\n chain: getPublishThirdwebChain(),\n })\n const managedAccount = managedAccountWallet.getAccount()\n if (managedAccount) {\n return managedAccount\n }\n }\n }\n } catch {\n // Fall through\n }\n\n if (attesterIsExecutorModule) {\n const { modularAccountModuleContract } = getPublishConfig()\n if (!modularAccountModuleContract?.trim()) {\n throw new Error(\n 'Revocation not supported for items published via the modular executor.',\n )\n }\n // Module configured but ManagedAccount wallet unavailable\n throw new Error(\n 'Revocation not supported for items published via the modular executor. Connect the ManagedAccount that controls the executor module.',\n )\n }\n\n return account\n}\n"],"mappings":";;;AAuBA,eAAsBQ,EAAqB,GAGtB;CACnB,IAAM,EAAE,YAAS,gBAAaC;CAE9B,IAAI,CAACC,KAAYC,EAAQ,QAAQ,YAAY,MAAMD,EAAS,YAAY,GACtE,OAAOC;CAGT,IAAMC,IAAmBC,EAA8B,GACnDC,IAA2B;CAC/B,IAAIF,GAAkB;EACpB,IAAMG,IAAa,MAAMH,EAAiB,GACpCI,IAAgBN,EAAS,YAAY;EAC3C,IAA2B,CAAC,CAACK,GAAY,MACtC,MAA0BE,GAAG,YAAY,MAAMD,CAClD;CACF;CAEA,IAAI;EACF,IAAME,IAAwB,MAAMjB,EAA8BU,EAAQ,OAAO;EAIjF,IAHsBD,EAAS,YAG3B,MAFiBQ,EAAsB,YAErB,KAAgBJ,GAA0B;GAC9D,IAAMK,IAAiBL,IACnB,MAAMX,EAAkCE,EAAwB,CAAC,CAAC,CAAC,YAAYa,CAAqB,IACpGA;GAEJ,IAAI,MADmBlB,EAAsBmB,CAAc,GAC7C;IAEZ,EAA0B;IAC1B,IAAMC,IAAuBlB,EAAwB;IACrD,MAAMkB,EAAqB,YAAY;KACrC,QAAQb,EAAU;KAClB,OAAOF,EAAwB;IACjC,CAAC;IACD,IAAMgB,IAAiBD,EAAqB,WAAW;IACvD,IAAIC,GACF,OAAOA;GAEX;EACF;CACF,QAAQ,CAER;CAEA,IAAIP,GAA0B;EAC5B,IAAM,EAAE,oCAAiCR,EAAiB;EAO1D,MANKgB,GAA8B,KAAK,IAM9B,MACR,sIACF,IAPY,MACR,wEACF;CAMJ;CAEA,OAAOX;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/services/arweaveL1Finalize/worker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/services/arweaveL1Finalize/worker.ts"],"names":[],"mappings":"AAyBA,wBAAgB,4BAA4B,IAAI,IAAI,CAMnD;AAED,wBAAgB,2BAA2B,IAAI,IAAI,CAKlD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checking.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/checking.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAE3D,KAAK,iBAAiB,CAAC,CAAC,IAAI;IAAE,OAAO,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAgB,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"checking.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/checking.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAE3D,KAAK,iBAAiB,CAAC,CAAC,IAAI;IAAE,OAAO,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAgB,MAAM,QAAQ,CAAA;AAwElD,eAAO,MAAM,QAAQ,yGAmJpB,CAAA"}
|
|
@@ -7,6 +7,8 @@ export type CreateArweaveDataItemsResult = {
|
|
|
7
7
|
publishUploads: PublishUpload[];
|
|
8
8
|
/** Signed DataItems for uploadViaBundler (dataItemSigner path only). */
|
|
9
9
|
signedDataItems?: unknown[];
|
|
10
|
+
/** Nothing for uploadViaBundler to send: signDataItems uploaded the items itself, or there were none. */
|
|
11
|
+
bundlerUploadNotNeeded: boolean;
|
|
10
12
|
};
|
|
11
13
|
type Signers = {
|
|
12
14
|
signDataItems: PublishMachineContext['signDataItems'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createArweaveDataItems.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/createArweaveDataItems.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA+B,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAGrG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAiBnD,MAAM,MAAM,4BAA4B,GAAG;IACzC,mBAAmB,EAAE,sBAAsB,EAAE,CAAA;IAC7C,cAAc,EAAE,aAAa,EAAE,CAAA;IAC/B,wEAAwE;IACxE,eAAe,CAAC,EAAE,OAAO,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"createArweaveDataItems.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/createArweaveDataItems.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA+B,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAGrG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAiBnD,MAAM,MAAM,4BAA4B,GAAG;IACzC,mBAAmB,EAAE,sBAAsB,EAAE,CAAA;IAC7C,cAAc,EAAE,aAAa,EAAE,CAAA;IAC/B,wEAAwE;IACxE,eAAe,CAAC,EAAE,OAAO,EAAE,CAAA;IAC3B,yGAAyG;IACzG,sBAAsB,EAAE,OAAO,CAAA;CAChC,CAAA;AAID,KAAK,OAAO,GAAG;IACb,aAAa,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAA;IACrD,cAAc,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,CAAA;CACxD,CAAA;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,cAAc,EAAE,iBAAiB,EAAE,EACnC,aAAa,EAAE,OAAO,CAAC,eAAe,CAAC,EACvC,cAAc,EAAE,OAAO,CAAC,gBAAgB,CAAC,GACxC,OAAO,CAAC,4BAA4B,CAAC,CA6EvC;AAED;;;GAGG;AACH,eAAO,MAAM,sBAAsB;aAjGK,qBAAqB;WAAS,OAAO;gCA6H5E,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createArweaveDataItemsPhase2.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/createArweaveDataItemsPhase2.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAI3D,OAAO,EAA6B,KAAK,4BAA4B,EAAE,MAAM,0BAA0B,CAAA;AAIvG;;;GAGG;AACH,wBAAsB,mCAAmC,CACvD,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,4BAA4B,CAAC,
|
|
1
|
+
{"version":3,"file":"createArweaveDataItemsPhase2.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/createArweaveDataItemsPhase2.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAI3D,OAAO,EAA6B,KAAK,4BAA4B,EAAE,MAAM,0BAA0B,CAAA;AAIvG;;;GAGG;AACH,wBAAsB,mCAAmC,CACvD,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,4BAA4B,CAAC,CAqCvC;AAED,eAAO,MAAM,4BAA4B;aA/CD,qBAAqB;WAAS,OAAO;gCAkD5E,CAAA"}
|
|
@@ -6,6 +6,11 @@ import type { PublishMachineContext } from '../../../types';
|
|
|
6
6
|
* When signDataItems is used, the callback handles upload (e.g. ArConnect) so signedDataItems
|
|
7
7
|
* is undefined — we skip the upload step and send uploadComplete immediately.
|
|
8
8
|
*/
|
|
9
|
+
/** The data items to upload are gone, e.g. the publish was restored after a reload. */
|
|
10
|
+
export declare class MissingSignedDataItemsError extends Error {
|
|
11
|
+
readonly code = "SIGNED_DATA_ITEMS_MISSING";
|
|
12
|
+
constructor();
|
|
13
|
+
}
|
|
9
14
|
export declare const uploadViaBundler: import("xstate").CallbackActorLogic<EventObject, {
|
|
10
15
|
context: PublishMachineContext;
|
|
11
16
|
}, EventObject>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploadViaBundler.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/uploadViaBundler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAgB,MAAM,QAAQ,CAAA;AAClD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAqC3D;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB;aAAwC,qBAAqB;
|
|
1
|
+
{"version":3,"file":"uploadViaBundler.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/uploadViaBundler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAgB,MAAM,QAAQ,CAAA;AAClD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAqC3D;;;;;GAKG;AACH,uFAAuF;AACvF,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,QAAQ,CAAC,IAAI,+BAA8B;;CAO5C;AAED,eAAO,MAAM,gBAAgB;aAAwC,qBAAqB;eAoKzF,CAAA"}
|
|
@@ -208,7 +208,7 @@ export declare const publishMachine: import("xstate").StateMachine<Partial<Publi
|
|
|
208
208
|
} | {
|
|
209
209
|
type: "assignErrorCheckingFailed";
|
|
210
210
|
params: import("xstate").NonReducibleUnknown;
|
|
211
|
-
}, never, never, "success" | "failure" | "pollingForConfirmation" | "uploadingData" | "uploadingViaBundler" | "uploadingViaBundlerPhase2" | "checking" | "authorizing" | "preparingHtmlEmbedded" | "rewritingHtmlEmbedded" | "creatingArweaveTransactions" | "creatingArweaveDataItems" | "sendingReimbursementRequest" | "creatingArweaveTransactionsPhase2" | "uploadingDataPhase2" | "creatingArweaveDataItemsPhase2" | "creatingAttestations" | "creatingAttestationsDirectToEas" | "stopping" | "attestationFailureRecoverable" | "attestationFailureRecoverableDirectToEas", string, Partial<PublishMachineContext>, import("xstate").NonReducibleUnknown, import("xstate").EventObject, import("xstate").MetaObject, {
|
|
211
|
+
}, never, never, "success" | "failure" | "pollingForConfirmation" | "uploadingData" | "uploadingViaBundler" | "uploadingViaBundlerPhase2" | "checking" | "authorizing" | "preparingHtmlEmbedded" | "rewritingHtmlEmbedded" | "creatingArweaveTransactions" | "creatingArweaveDataItems" | "sendingReimbursementRequest" | "creatingArweaveTransactionsPhase2" | "uploadingDataPhase2" | "creatingArweaveDataItemsPhase2" | "creatingAttestations" | "creatingAttestationsDirectToEas" | "stopping" | "sendingReimbursementRequestPhase2" | "pollingForConfirmationPhase2" | "attestationFailureRecoverable" | "attestationFailureRecoverableDirectToEas", string, Partial<PublishMachineContext>, import("xstate").NonReducibleUnknown, import("xstate").EventObject, import("xstate").MetaObject, {
|
|
212
212
|
id: "publish";
|
|
213
213
|
states: {
|
|
214
214
|
readonly authorizing: {};
|
|
@@ -224,6 +224,8 @@ export declare const publishMachine: import("xstate").StateMachine<Partial<Publi
|
|
|
224
224
|
readonly uploadingData: {};
|
|
225
225
|
readonly rewritingHtmlEmbedded: {};
|
|
226
226
|
readonly creatingArweaveTransactionsPhase2: {};
|
|
227
|
+
readonly sendingReimbursementRequestPhase2: {};
|
|
228
|
+
readonly pollingForConfirmationPhase2: {};
|
|
227
229
|
readonly uploadingDataPhase2: {};
|
|
228
230
|
readonly creatingAttestations: {};
|
|
229
231
|
readonly attestationFailureRecoverable: {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/publish/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAE1C,OAAO,EAEL,qBAAqB,EACrB,qBAAqB,EAEtB,MAAiG,aAAa,CAAA;AAiD/G,eAAO,MAAM,cAAc
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/publish/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAE1C,OAAO,EAEL,qBAAqB,EACrB,qBAAqB,EAEtB,MAAiG,aAAa,CAAA;AAiD/G,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BAqsBzB,CAAA;AAEF,MAAM,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** Minimal snapshot shape for restore; avoids excessive type recursion from SnapshotFrom<typeof publishMachine>.
|
|
2
|
+
* Older rows may omit `context.attestationStrategy`; publish guards then fall back to `useDirectEas`. */
|
|
3
|
+
export interface PersistedSnapshot {
|
|
4
|
+
status?: string;
|
|
5
|
+
value?: string | Record<string, unknown>;
|
|
6
|
+
context?: {
|
|
7
|
+
item?: {
|
|
8
|
+
seedLocalId?: string;
|
|
9
|
+
modelName?: string;
|
|
10
|
+
schemaId?: string;
|
|
11
|
+
};
|
|
12
|
+
modelName?: string;
|
|
13
|
+
schemaId?: string;
|
|
14
|
+
reimbursementTransactionId?: string;
|
|
15
|
+
requestResponse?: unknown;
|
|
16
|
+
arweaveTransactions?: unknown[];
|
|
17
|
+
publishUploads?: unknown[];
|
|
18
|
+
bundlerUploadNotNeeded?: boolean;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export declare function isRestorableSnapshot(parsed: PersistedSnapshot): boolean;
|
|
22
|
+
//# sourceMappingURL=restorableSnapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restorableSnapshot.d.ts","sourceRoot":"","sources":["../../../../src/services/publishManager/actors/restorableSnapshot.ts"],"names":[],"mappings":"AAEA;yGACyG;AACzG,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACxC,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE;YAAE,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;QACtE,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,0BAA0B,CAAC,EAAE,MAAM,CAAA;QACnC,eAAe,CAAC,EAAE,OAAO,CAAA;QACzB,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAA;QAC/B,cAAc,CAAC,EAAE,OAAO,EAAE,CAAA;QAC1B,sBAAsB,CAAC,EAAE,OAAO,CAAA;KACjC,CAAA;CACF;AAeD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAevE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restoreFromDb.d.ts","sourceRoot":"","sources":["../../../../src/services/publishManager/actors/restoreFromDb.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,WAAW,EAAgB,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"restoreFromDb.d.ts","sourceRoot":"","sources":["../../../../src/services/publishManager/actors/restoreFromDb.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,WAAW,EAAgB,MAAM,QAAQ,CAAA;AA+E/D,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE;QACP,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACtC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACpC,CAAA;CACF;AAED,eAAO,MAAM,aAAa,mFAqGzB,CAAA"}
|
package/dist/thirdweb.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { $ as e, A as t, B as n, G as r, H as i, Ht as a, I as o, J as s, K as c, Kt as l, L as u, M as
|
|
2
|
-
import {
|
|
3
|
-
import { a as O, d as k, f as A, g as j, h as M, l as N, m as P, p as F, u as I } from "./publishAuthorization-
|
|
4
|
-
import { t as L } from "./ensureSmartWalletThenPublish-
|
|
5
|
-
import { t as R } from "./ensureModularPublishBootstrap-
|
|
6
|
-
import { i as z, r as B, t as V } from "./ensureAutomationSessionKey-
|
|
1
|
+
import { $ as e, A as t, B as n, G as r, H as i, Ht as a, I as o, J as s, K as c, Kt as l, L as u, M as d, N as f, P as ee, Q as te, R as ne, Rt as p, U as m, V as h, Vt as re, W as g, Wt as ie, X as ae, Y as oe, Z as _, _t as v, a as y, et as se, gt as b, ht as ce, i as le, j as ue, m as x, mt as de, nt as fe, o as pe, q as S, qt as C, rt as w, t as T, tt as me, z as E } from "./chainConfig-CY22-kWO.js";
|
|
2
|
+
import { i as he, t as D } from "./publishWalletRegistry-BaQe9rIR.js";
|
|
3
|
+
import { a as O, d as k, f as A, g as j, h as M, l as N, m as P, p as F, u as I } from "./publishAuthorization-D2wbNc-H.js";
|
|
4
|
+
import { t as L } from "./ensureSmartWalletThenPublish-By_Xv7xG.js";
|
|
5
|
+
import { t as R } from "./ensureModularPublishBootstrap-DQDSbkQy.js";
|
|
6
|
+
import { i as z, r as B, t as V } from "./ensureAutomationSessionKey-CKFyZNj7.js";
|
|
7
7
|
import { client as H } from "@seedprotocol/sdk";
|
|
8
8
|
import { deploySmartAccount as ge, getContract as U, sendTransaction as _e } from "thirdweb";
|
|
9
9
|
import { ConnectButton as ve, ThirdwebProvider as ye, darkTheme as be, useActiveAccount as xe, useActiveWallet as Se, useActiveWalletConnectionStatus as Ce, useIsAutoConnecting as we } from "thirdweb/react";
|
|
@@ -35,10 +35,10 @@ async function Pe(e, t, n) {
|
|
|
35
35
|
});
|
|
36
36
|
let r = e.getAccount();
|
|
37
37
|
if (!r) return;
|
|
38
|
-
await
|
|
38
|
+
await f(t, r, n);
|
|
39
39
|
} catch {}
|
|
40
40
|
} else try {
|
|
41
|
-
await
|
|
41
|
+
await f(e.address, e, n);
|
|
42
42
|
} catch (e) {
|
|
43
43
|
Me(e);
|
|
44
44
|
}
|
|
@@ -97,11 +97,15 @@ var Fe = () => {
|
|
|
97
97
|
if (o.current !== s) {
|
|
98
98
|
o.current !== null && x.stopAll(), o.current = s;
|
|
99
99
|
try {
|
|
100
|
-
let e = n.getAdminAccount?.()?.address, t = !!a || !!e && e.toLowerCase() !== r.address.toLowerCase(), o = b(r, { kind: t ? "smart" : "eoa" });
|
|
101
|
-
await
|
|
100
|
+
let e = n.getAdminAccount?.()?.address, t = !!a || !!e && e.toLowerCase() !== r.address.toLowerCase(), o = b(r, { kind: t ? "smart" : "eoa" }), s = n.getAdminAccount?.(), c = a ? o.signer : t && s && s.address.toLowerCase() !== r.address.toLowerCase() ? b(s, { kind: "eoa" }).signer : void 0;
|
|
101
|
+
await he({
|
|
102
102
|
...o,
|
|
103
103
|
ownedAddresses: [...i],
|
|
104
104
|
publisherAddress: a ?? r.address,
|
|
105
|
+
...c ? { dataItemSigner: c } : {},
|
|
106
|
+
...t && !a ? { deploy: async () => {
|
|
107
|
+
await E(r);
|
|
108
|
+
} } : {},
|
|
105
109
|
...e && e.toLowerCase() !== r.address.toLowerCase() ? { adminAddress: e } : {}
|
|
106
110
|
});
|
|
107
111
|
} catch (e) {
|
|
@@ -280,11 +284,11 @@ async function Ue(e) {
|
|
|
280
284
|
if (!t.modularAccountModuleContract?.trim()) throw Error("@seedprotocol/publish: enrollPublishAutomation requires PublishConfig.modularAccountModuleContract");
|
|
281
285
|
let n = await Q(e), r;
|
|
282
286
|
try {
|
|
283
|
-
r = await
|
|
287
|
+
r = await f(e, n, t);
|
|
284
288
|
} catch (t) {
|
|
285
289
|
throw t instanceof C ? t : new C("Executor module setup failed for publish automation.", "EXECUTOR_MODULE_NOT_INSTALLED", e, t);
|
|
286
290
|
}
|
|
287
|
-
await
|
|
291
|
+
await ee(e, r.status === "installed" ? { installedEas: r.eas } : { readAttempts: r.status === "already-installed" ? 5 : 1 });
|
|
288
292
|
}
|
|
289
293
|
async function We(e) {
|
|
290
294
|
let { managedAddress: t, sessionKeyAddress: n, appAddress: r, expiresAt: i } = e;
|
|
@@ -365,6 +369,6 @@ async function Ke(e) {
|
|
|
365
369
|
};
|
|
366
370
|
}
|
|
367
371
|
//#endregion
|
|
368
|
-
export { me as CALL_GAS_HEADROOM_BPS, Fe as ConnectButton, o as ExternalWalletsForDeploy, I as PUBLISH_AUTOMATION_SCOPES, Ie as PublishProvider, u as appMetadata, P as approvedTargetsForAutomationPublish, de as asSeedSignerFromThirdweb, ce as asThirdwebPublishWallet, Ke as assertStorageBoundToIdentity, k as buildAutomationSessionKeyPermissions, X as defaultApprovedTargetsForModularPublish,
|
|
372
|
+
export { me as CALL_GAS_HEADROOM_BPS, Fe as ConnectButton, o as ExternalWalletsForDeploy, I as PUBLISH_AUTOMATION_SCOPES, Ie as PublishProvider, u as appMetadata, P as approvedTargetsForAutomationPublish, de as asSeedSignerFromThirdweb, ce as asThirdwebPublishWallet, Ke as assertStorageBoundToIdentity, k as buildAutomationSessionKeyPermissions, X as defaultApprovedTargetsForModularPublish, ne as deployManagedAccountViaFactory, E as deploySmartWalletContract, We as enrollPublishAutomation, V as ensureAutomationSessionKey, Be as ensureEip7702ModularAccountReady, f as ensureExecutorModuleInstalled, t as ensureManagedAccountReady, He as ensureManagedSignerSessionKey, R as ensureModularPublishBootstrap, L as ensureSmartWalletThenPublish, b as fromThirdwebAccount, w as getClient, n as getConnectedAccount, h as getConnectedManagedAccountAddress, i as getConnectedModularAccount, m as getManagedAccountWallet, g as getModularAccountWallet, v as getPublishThirdwebChain, r as getSharedPublishInAppWalletStorage, c as getSmartWalletAddressForAdmin, S as getWalletsForConnectButton, A as hashAutomationSessionKeyPermissions, B as isAutomationSessionActive, s as isSmartWalletDeployed, oe as pollSmartWalletDeployed, z as removeAutomationSessionKey, ae as resolveSmartWalletForPublish, Ge as revokePublishAutomation, ue as runModularExecutorPublishPrep, fe as seedPaymaster, F as toThirdwebSessionKeyPermissions, d as tryDeployManagedAccount, te as useActiveSmartWalletContract, e as useLocalWalletAccount, j as usePublishConfig, se as wallets };
|
|
369
373
|
|
|
370
374
|
//# sourceMappingURL=thirdweb.js.map
|