@seedprotocol/publish 0.7.4 → 0.7.5-next.850.g9ab585b

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 (66) hide show
  1. package/CHANGELOG.md +223 -3
  2. package/README.md +31 -8
  3. package/dist/{chainConfig-DM9RSIMT.js → chainConfig-BWzE8DIF.js} +1347 -1356
  4. package/dist/chainConfig-BWzE8DIF.js.map +1 -0
  5. package/dist/config.d.ts +11 -5
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/{ensureAutomationSessionKey-DTO5lxXB.js → ensureAutomationSessionKey-BenLVZk4.js} +22 -22
  8. package/dist/{ensureAutomationSessionKey-DTO5lxXB.js.map → ensureAutomationSessionKey-BenLVZk4.js.map} +1 -1
  9. package/dist/{ensureModularPublishBootstrap-BYySx3sx.js → ensureModularPublishBootstrap-CngVyk4c.js} +9 -9
  10. package/dist/{ensureModularPublishBootstrap-BYySx3sx.js.map → ensureModularPublishBootstrap-CngVyk4c.js.map} +1 -1
  11. package/dist/{ensureSmartWalletThenPublish-DiH5CKLY.js → ensureSmartWalletThenPublish-3Q_vA8mD.js} +19 -25
  12. package/dist/ensureSmartWalletThenPublish-3Q_vA8mD.js.map +1 -0
  13. package/dist/helpers/adapters/thirdwebAccount.d.ts +3 -1
  14. package/dist/helpers/adapters/thirdwebAccount.d.ts.map +1 -1
  15. package/dist/helpers/ensureSmartWalletThenPublish.d.ts +3 -4
  16. package/dist/helpers/ensureSmartWalletThenPublish.d.ts.map +1 -1
  17. package/dist/helpers/ensureWalletThenPublish.d.ts +18 -4
  18. package/dist/helpers/ensureWalletThenPublish.d.ts.map +1 -1
  19. package/dist/helpers/publishItem.d.ts.map +1 -1
  20. package/dist/helpers/seedSigner.d.ts +8 -0
  21. package/dist/helpers/seedSigner.d.ts.map +1 -1
  22. package/dist/helpers/thirdweb.d.ts +4 -0
  23. package/dist/helpers/thirdweb.d.ts.map +1 -1
  24. package/dist/hooks/useCanPublishItem.d.ts +5 -0
  25. package/dist/hooks/useCanPublishItem.d.ts.map +1 -1
  26. package/dist/index.d.ts +1 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +274 -260
  29. package/dist/index.js.map +1 -1
  30. package/dist/{managedAccountAdmin-rhHtJC4y.js → managedAccountAdmin-CW1P40qh.js} +9 -9
  31. package/dist/{managedAccountAdmin-rhHtJC4y.js.map → managedAccountAdmin-CW1P40qh.js.map} +1 -1
  32. package/dist/{publishAuthorization-Dx-4adsz.js → publishAuthorization-BOalFNvQ.js} +24 -24
  33. package/dist/{publishAuthorization-Dx-4adsz.js.map → publishAuthorization-BOalFNvQ.js.map} +1 -1
  34. package/dist/publishWalletRegistry-Bf_Nvf_3.js +45 -0
  35. package/dist/publishWalletRegistry-Bf_Nvf_3.js.map +1 -0
  36. package/dist/react/ConnectButton.d.ts.map +1 -1
  37. package/dist/react/PublishProvider.d.ts.map +1 -1
  38. package/dist/react/PublishProvider.initOrder.test.d.ts +2 -0
  39. package/dist/react/PublishProvider.initOrder.test.d.ts.map +1 -0
  40. package/dist/react/PublishProvider.thirdweb.d.ts.map +1 -1
  41. package/dist/{resolveRevokeAccount-CC9X1H9x.js → resolveRevokeAccount-BUK9i1T4.js} +9 -9
  42. package/dist/{resolveRevokeAccount-CC9X1H9x.js.map → resolveRevokeAccount-BUK9i1T4.js.map} +1 -1
  43. package/dist/services/publish/actors/checking.d.ts.map +1 -1
  44. package/dist/services/publish/actors/pollForConfirmation.d.ts +14 -0
  45. package/dist/services/publish/actors/pollForConfirmation.d.ts.map +1 -1
  46. package/dist/services/publish/helpers/undeployedSmartAccount.d.ts +11 -7
  47. package/dist/services/publish/helpers/undeployedSmartAccount.d.ts.map +1 -1
  48. package/dist/services/publishCost/estimatePublishCost.d.ts +14 -2
  49. package/dist/services/publishCost/estimatePublishCost.d.ts.map +1 -1
  50. package/dist/services/publishCost/types.d.ts +10 -0
  51. package/dist/services/publishCost/types.d.ts.map +1 -1
  52. package/dist/services/publishManager/index.d.ts +6 -10
  53. package/dist/services/publishManager/index.d.ts.map +1 -1
  54. package/dist/thirdweb.js +97 -95
  55. package/dist/thirdweb.js.map +1 -1
  56. package/dist/undeployedSmartAccount-B6KSTipF.js +15 -0
  57. package/dist/undeployedSmartAccount-B6KSTipF.js.map +1 -0
  58. package/dist/{worker-Bv_xadel.js → worker-DAciYSNY.js} +2 -2
  59. package/dist/{worker-Bv_xadel.js.map → worker-DAciYSNY.js.map} +1 -1
  60. package/package.json +25 -7
  61. package/dist/chainConfig-DM9RSIMT.js.map +0 -1
  62. package/dist/ensureSmartWalletThenPublish-DiH5CKLY.js.map +0 -1
  63. package/dist/services/publishManager/actions/query.d.ts +0 -2
  64. package/dist/services/publishManager/actions/query.d.ts.map +0 -1
  65. package/dist/undeployedSmartAccount-uDk6iZjl.js +0 -24
  66. package/dist/undeployedSmartAccount-uDk6iZjl.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { At as e, Ct as t, D as n, E as r, Mt as i, O as a, Tt as o, a as s, jt as c, qt as l } from "./chainConfig-DM9RSIMT.js";
1
+ import { At as e, D as t, Et as n, O as r, Ot as i, Wt as a, a as o, k as s, kt as c, wt as l } from "./chainConfig-BWzE8DIF.js";
2
2
  import { keccak256 as u, toUtf8Bytes as d } from "ethers";
3
3
  import { SchemaEncoder as f, SchemaRegistry as p, ZERO_BYTES32 as m } from "@ethereum-attestation-service/eas-sdk";
4
4
  import { createContext as h, useContext as g } from "react";
@@ -13,7 +13,7 @@ function A() {
13
13
  //#endregion
14
14
  //#region src/helpers/approvedTargetsForAutomationPublish.ts
15
15
  function j() {
16
- let e = s().modularAccountModuleContract?.trim();
16
+ let e = o().modularAccountModuleContract?.trim();
17
17
  if (!e || !/^0x[0-9a-fA-F]{40}$/.test(e)) throw Error("@seedprotocol/publish: session keys require PublishConfig.modularAccountModuleContract (their only approved target is the Seed executor module).");
18
18
  return [e.toLowerCase()];
19
19
  }
@@ -45,13 +45,13 @@ function F(e) {
45
45
  //#region src/services/publishAuthorization/index.ts
46
46
  var I = "0x0000000000000000000000000000000000000000", L = !0, R = "0x0000000000000000000000000000000000000000";
47
47
  function z(e) {
48
- if (t(e)) return e.txSender;
49
- if (o(e)) return e;
48
+ if (l(e)) return e.txSender;
49
+ if (n(e)) return e;
50
50
  throw Error("@seedprotocol/publish: publish authorization write APIs require a PublishWallet or SeedTxSender");
51
51
  }
52
52
  async function B(e, t) {
53
53
  let n = await e.sendTransaction(t);
54
- return l(n.transactionHash);
54
+ return a(n.transactionHash);
55
55
  }
56
56
  function V(e, t) {
57
57
  let n = t.trim();
@@ -62,12 +62,12 @@ function H() {
62
62
  return p.getSchemaUID(v, I, L);
63
63
  }
64
64
  async function U(e) {
65
- let t = z(e), i = H();
66
- return await n(i) || (await B(t, a({
65
+ let n = z(e), i = H();
66
+ return await r(i) || (await B(n, s({
67
67
  schema: v,
68
68
  resolverAddress: I,
69
69
  revocable: L
70
- })), await B(t, r({
70
+ })), await B(n, t({
71
71
  schemaUid: i,
72
72
  schemaName: b
73
73
  }))), i;
@@ -111,19 +111,19 @@ function W(e) {
111
111
  }
112
112
  ]);
113
113
  }
114
- async function G(t) {
115
- let n = z(t.wallet), r = t.ensureSchema === !1 ? H() : await U(t.wallet), i = V("identity", t.identity), a = V("sessionKey", t.sessionKey), o = t.app?.trim() ? V("app", t.app) : R, l = t.grantedAt ?? Math.floor(Date.now() / 1e3), u = typeof t.expiresAt == "number" && t.expiresAt > 0 ? Math.trunc(t.expiresAt) : 0, d = t.scopes ?? S, f = O(t.permissionsHash ?? P(N({ expiresAt: u > 0 ? u : void 0 }), d === S ? "publish,revoke" : d));
114
+ async function G(e) {
115
+ let t = z(e.wallet), n = e.ensureSchema === !1 ? H() : await U(e.wallet), r = V("identity", e.identity), a = V("sessionKey", e.sessionKey), s = e.app?.trim() ? V("app", e.app) : R, l = e.grantedAt ?? Math.floor(Date.now() / 1e3), u = typeof e.expiresAt == "number" && e.expiresAt > 0 ? Math.trunc(e.expiresAt) : 0, d = e.scopes ?? S, f = O(e.permissionsHash ?? P(N({ expiresAt: u > 0 ? u : void 0 }), d === S ? "publish,revoke" : d));
116
116
  if (f === m) throw Error("@seedprotocol/publish: attestPublishAuthorization requires a non-zero permissionsHash");
117
- let p = typeof t.expirationTime == "number" && t.expirationTime > 0 ? t.expirationTime : u > 0 ? u : l + _, h = W({
118
- identity: i,
117
+ let p = typeof e.expirationTime == "number" && e.expirationTime > 0 ? e.expirationTime : u > 0 ? u : l + _, h = W({
118
+ identity: r,
119
119
  sessionKey: a,
120
- app: o,
120
+ app: s,
121
121
  scopes: d,
122
122
  grantedAt: l,
123
123
  expiresAt: u,
124
124
  permissionsHash: f
125
- }), g = await B(n, c({
126
- schema: r,
125
+ }), g = await B(t, c({
126
+ schema: n,
127
127
  data: {
128
128
  recipient: a,
129
129
  expirationTime: BigInt(p),
@@ -134,23 +134,23 @@ async function G(t) {
134
134
  }
135
135
  }));
136
136
  if (!g) throw Error("@seedprotocol/publish: attestPublishAuthorization failed — no receipt");
137
- let { easContractAddress: v } = s(), y = e(g, v);
137
+ let { easContractAddress: v } = o(), y = i(g, v);
138
138
  if (!y || !D(y)) throw Error("@seedprotocol/publish: attestPublishAuthorization failed — could not parse attestation UID");
139
139
  return {
140
140
  uid: y,
141
- schemaUid: r,
141
+ schemaUid: n,
142
142
  permissionsHash: f,
143
143
  grantedAt: l,
144
144
  expiresAt: u,
145
145
  expirationTime: p
146
146
  };
147
147
  }
148
- async function K(e) {
149
- let t = z(e.wallet), n = e.schemaUid ?? H(), r = O(e.uid);
150
- if (!D(r)) throw Error("@seedprotocol/publish: revokePublishAuthorization requires a valid attestation uid");
151
- if (!await B(t, i([{
152
- schema: n,
153
- data: [{ uid: r }]
148
+ async function K(t) {
149
+ let n = z(t.wallet), r = t.schemaUid ?? H(), i = O(t.uid);
150
+ if (!D(i)) throw Error("@seedprotocol/publish: revokePublishAuthorization requires a valid attestation uid");
151
+ if (!await B(n, e([{
152
+ schema: r,
153
+ data: [{ uid: i }]
154
154
  }]))) throw Error("@seedprotocol/publish: revokePublishAuthorization failed — no receipt");
155
155
  }
156
156
  async function q(e) {
@@ -173,4 +173,4 @@ async function q(e) {
173
173
  //#endregion
174
174
  export { G as a, H as c, N as d, P as f, A as g, k as h, q as i, K as l, j as m, x as n, W as o, F as p, C as r, U as s, y as t, M as u };
175
175
 
176
- //# sourceMappingURL=publishAuthorization-Dx-4adsz.js.map
176
+ //# sourceMappingURL=publishAuthorization-BOalFNvQ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"publishAuthorization-Dx-4adsz.js","names":["ZERO_ADDRESS","getAttestationUidFromReceipt","isPublishWallet","getSchemaRecord","prepareNameSchemaAttestation","prepareEasMultiRevoke","registerSchema","isSeedTxSender","getPublishConfig","prepareEasAttest","waitForPublishReceipt","PUBLISH_AUTHORIZATION_SCHEMA_DEF$1","PUBLISH_AUTHORIZATION_SCHEMA_NAME$1","PUBLISH_AUTHORIZATION_SCOPES$1","PublishConfigContext","createContext","usePublishConfig","config","useContext","approvedTargetsForAutomationPublish","module","PUBLISH_AUTOMATION_SCOPES","buildAutomationSessionKeyPermissions","out","params","hashAutomationSessionKeyPermissions","material","permissions","a","scopes","keccak256","toUtf8Bytes","toThirdwebSessionKeyPermissions","base","RESOLVER_ADDRESS","REVOCABLE","ZERO_ADDRESS$1","resolveTxSender","account","sendAndWait","result","txSender","tx","assertAddress","t","addr","label","getPublishAuthorizationSchemaUid","SchemaRegistry","PUBLISH_AUTHORIZATION_SCHEMA_DEF","ensurePublishAuthorizationSchema","sender","schemaUid","PUBLISH_AUTHORIZATION_SCHEMA_NAME","encodePublishAuthorizationAttestationData","SchemaEncoder","normalizeBytes32Hex","attestPublishAuthorization","identity","sessionKey","app","grantedAt","expiresAt","PUBLISH_AUTHORIZATION_SCOPES","permissionsHash","ZERO_BYTES32","expirationTime","PUBLISH_AUTHORIZATION_DEFAULT_EXPIRATION_SECS","data","receipt","uid","easContractAddress","isValidEasAttestationUid","revokePublishAuthorization","assessPublishAuthorizationLive","row","getPublishAuthorizationFromEas","r","decoded","decodePublishAuthorizationData","assessPublishAuthorization"],"sources":["../src/react/PublishConfigContext.tsx","../src/helpers/approvedTargetsForAutomationPublish.ts","../src/helpers/automationSessionKeyPermissions.ts","../src/services/publishAuthorization/index.ts"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport type { PublishConfig } from '../config'\n\nexport const PublishConfigContext = createContext<PublishConfig | null>(null)\n\nexport function usePublishConfig(): PublishConfig {\n const config = useContext(PublishConfigContext)\n if (!config) {\n throw new Error(\n 'usePublishConfig: PublishConfig is missing. Pass config to PublishProvider or call initPublish() before render.',\n )\n }\n return config\n}\n","import { getPublishConfig } from '../config'\n\n/**\n * Allowlisted call targets for session keys on a ManagedAccount.\n * Returns only the configured Seed executor module — never the ManagedAccount or raw EAS\n * (those would allow `setEas` / arbitrary attestations).\n *\n * @throws if `modularAccountModuleContract` is unset or invalid\n */\nexport function approvedTargetsForAutomationPublish(): `0x${string}`[] {\n const module = getPublishConfig().modularAccountModuleContract?.trim()\n if (!module || !/^0x[0-9a-fA-F]{40}$/.test(module)) {\n throw new Error(\n '@seedprotocol/publish: session keys require PublishConfig.modularAccountModuleContract ' +\n '(their only approved target is the Seed executor module).',\n )\n }\n return [module.toLowerCase() as `0x${string}`]\n}\n","import { keccak256, toUtf8Bytes } from 'ethers'\nimport { approvedTargetsForAutomationPublish } from './approvedTargetsForAutomationPublish'\n\n/** Fixed v1 scopes for publish automation grants. */\nexport const PUBLISH_AUTOMATION_SCOPES = 'publish,revoke' as const\n\nexport type AutomationSessionKeyPermissions = {\n approvedTargets: `0x${string}`[]\n nativeTokenLimitPerTransaction: number\n /** Unix seconds; omit for Thirdweb default long window. */\n expiresAt?: number\n}\n\n/**\n * Canonical permissions for an automation session key (module-only targets).\n */\nexport function buildAutomationSessionKeyPermissions(params?: {\n expiresAt?: number\n}): AutomationSessionKeyPermissions {\n const approvedTargets = approvedTargetsForAutomationPublish()\n const out: AutomationSessionKeyPermissions = {\n approvedTargets,\n nativeTokenLimitPerTransaction: 0,\n }\n if (typeof params?.expiresAt === 'number' && params.expiresAt > 0) {\n out.expiresAt = Math.trunc(params.expiresAt)\n }\n return out\n}\n\n/**\n * Deterministic permissions hash for the PublishAuthorization sidecar.\n * Material: sorted targets | nativeLimit | expiresAt (0 if unset) | scopes\n */\nexport function hashAutomationSessionKeyPermissions(\n permissions: AutomationSessionKeyPermissions,\n scopes: string = PUBLISH_AUTOMATION_SCOPES,\n): `0x${string}` {\n const targets = [...permissions.approvedTargets].map((a) => a.toLowerCase()).sort().join(',')\n const limit = permissions.nativeTokenLimitPerTransaction\n const expiresAt = permissions.expiresAt ?? 0\n const material = `${targets}|${limit}|${expiresAt}|${scopes.trim()}`\n return keccak256(toUtf8Bytes(material)) as `0x${string}`\n}\n\n/** Shape passed to Thirdweb `addSessionKey` / `shouldUpdateSessionKey`. */\nexport function toThirdwebSessionKeyPermissions(permissions: AutomationSessionKeyPermissions): {\n approvedTargets: `0x${string}`[]\n nativeTokenLimitPerTransaction: number\n permissionEndTimestamp?: Date\n} {\n const base = {\n approvedTargets: permissions.approvedTargets,\n nativeTokenLimitPerTransaction: permissions.nativeTokenLimitPerTransaction,\n }\n if (permissions.expiresAt != null && permissions.expiresAt > 0) {\n return {\n ...base,\n permissionEndTimestamp: new Date(permissions.expiresAt * 1000),\n }\n }\n return base\n}\n","import {\n PUBLISH_AUTHORIZATION_DEFAULT_EXPIRATION_SECS,\n PUBLISH_AUTHORIZATION_SCHEMA_DEF,\n PUBLISH_AUTHORIZATION_SCHEMA_NAME,\n PUBLISH_AUTHORIZATION_SCOPES,\n assessPublishAuthorization,\n decodePublishAuthorizationData,\n getPublishAuthorizationFromEas,\n type PublishAuthorizationAssessResult,\n type PublishAuthorizationDecoded,\n} from '@seedprotocol/eas'\nimport { SchemaEncoder, ZERO_BYTES32 } from '@ethereum-attestation-service/eas-sdk'\nimport { SchemaRegistry } from '@ethereum-attestation-service/eas-sdk'\nimport { prepareEasAttest, prepareEasMultiRevoke } from '~/helpers/easDirect'\nimport { getSchemaRecord, registerSchema } from '~/helpers/schemaRegistry'\nimport { prepareNameSchemaAttestation } from '~/helpers/nameSchemaAttestation'\nimport { waitForPublishReceipt } from '~/helpers/chainClient'\nimport { getPublishConfig } from '~/config'\nimport {\n isPublishWallet,\n isSeedTxSender,\n type PublishWallet,\n type SeedTxSender,\n} from '~/helpers/seedSigner'\nimport { getAttestationUidFromReceipt } from '~/helpers/easDirect'\nimport { normalizeBytes32Hex, isValidEasAttestationUid } from '@seedprotocol/eas'\nimport {\n buildAutomationSessionKeyPermissions,\n hashAutomationSessionKeyPermissions,\n PUBLISH_AUTOMATION_SCOPES,\n} from '~/helpers/automationSessionKeyPermissions'\n\nexport {\n PUBLISH_AUTHORIZATION_SCHEMA_DEF,\n PUBLISH_AUTHORIZATION_SCHEMA_NAME,\n PUBLISH_AUTHORIZATION_SCOPES,\n} from '@seedprotocol/eas'\n\nconst RESOLVER_ADDRESS = '0x0000000000000000000000000000000000000000'\nconst REVOCABLE = true\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'\n\nfunction resolveTxSender(account: PublishWallet | SeedTxSender): SeedTxSender {\n if (isPublishWallet(account)) return account.txSender\n if (isSeedTxSender(account)) return account\n throw new Error(\n '@seedprotocol/publish: publish authorization write APIs require a PublishWallet or SeedTxSender',\n )\n}\n\nasync function sendAndWait(\n txSender: SeedTxSender,\n tx: Parameters<SeedTxSender['sendTransaction']>[0],\n) {\n const result = await txSender.sendTransaction(tx)\n return waitForPublishReceipt(result.transactionHash)\n}\n\nfunction assertAddress(label: string, addr: string): `0x${string}` {\n const t = addr.trim()\n if (!/^0x[0-9a-fA-F]{40}$/.test(t)) {\n throw new Error(`@seedprotocol/publish: ${label} must be a valid address`)\n }\n return t as `0x${string}`\n}\n\n/** Deterministic on-chain schema UID for {@link PUBLISH_AUTHORIZATION_SCHEMA_DEF}. */\nexport function getPublishAuthorizationSchemaUid(): `0x${string}` {\n return SchemaRegistry.getSchemaUID(\n PUBLISH_AUTHORIZATION_SCHEMA_DEF,\n RESOLVER_ADDRESS as `0x${string}`,\n REVOCABLE,\n ) as `0x${string}`\n}\n\n/**\n * Registers the PublishAuthorization EAS schema (if missing) and creates a Schema #1 name attestation.\n */\nexport async function ensurePublishAuthorizationSchema(\n account: PublishWallet | SeedTxSender,\n): Promise<`0x${string}`> {\n const sender = resolveTxSender(account)\n const schemaUid = getPublishAuthorizationSchemaUid()\n const onChain = await getSchemaRecord(schemaUid)\n if (!onChain) {\n await sendAndWait(\n sender,\n registerSchema({\n schema: PUBLISH_AUTHORIZATION_SCHEMA_DEF,\n resolverAddress: RESOLVER_ADDRESS,\n revocable: REVOCABLE,\n }),\n )\n await sendAndWait(\n sender,\n prepareNameSchemaAttestation({\n schemaUid,\n schemaName: PUBLISH_AUTHORIZATION_SCHEMA_NAME,\n }),\n )\n }\n return schemaUid\n}\n\nexport function encodePublishAuthorizationAttestationData(params: {\n identity: string\n sessionKey: string\n app: string\n scopes: string\n grantedAt: number\n expiresAt: number\n permissionsHash: string\n}): `0x${string}` {\n const schemaEncoder = new SchemaEncoder(PUBLISH_AUTHORIZATION_SCHEMA_DEF)\n const encodedData = schemaEncoder.encodeData([\n { name: 'identity', value: params.identity as `0x${string}`, type: 'address' },\n { name: 'sessionKey', value: params.sessionKey as `0x${string}`, type: 'address' },\n { name: 'app', value: params.app as `0x${string}`, type: 'address' },\n { name: 'scopes', value: params.scopes, type: 'string' },\n { name: 'grantedAt', value: params.grantedAt, type: 'uint64' },\n { name: 'expiresAt', value: params.expiresAt, type: 'uint64' },\n {\n name: 'permissionsHash',\n value: normalizeBytes32Hex(params.permissionsHash) as `0x${string}`,\n type: 'bytes32',\n },\n ])\n return encodedData as `0x${string}`\n}\n\nexport type AttestPublishAuthorizationParams = {\n /** Must be the ManagedAccount (identity) wallet — becomes EAS attester. */\n wallet: PublishWallet | SeedTxSender\n identity: string\n sessionKey: string\n /** Optional app label address; defaults to zero address. */\n app?: string\n scopes?: string\n grantedAt?: number\n expiresAt?: number\n permissionsHash?: string\n ensureSchema?: boolean\n /** Override EAS expirationTime (unix seconds). */\n expirationTime?: number\n}\n\nexport type AttestPublishAuthorizationResult = {\n uid: `0x${string}`\n schemaUid: `0x${string}`\n permissionsHash: `0x${string}`\n grantedAt: number\n expiresAt: number\n expirationTime: number\n}\n\n/**\n * ManagedAccount attests a PublishAuthorization grant (recipient = session key).\n */\nexport async function attestPublishAuthorization(\n params: AttestPublishAuthorizationParams,\n): Promise<AttestPublishAuthorizationResult> {\n const sender = resolveTxSender(params.wallet)\n const schemaUid =\n params.ensureSchema === false\n ? getPublishAuthorizationSchemaUid()\n : await ensurePublishAuthorizationSchema(params.wallet)\n\n const identity = assertAddress('identity', params.identity)\n const sessionKey = assertAddress('sessionKey', params.sessionKey)\n const app = params.app?.trim()\n ? assertAddress('app', params.app)\n : (ZERO_ADDRESS as `0x${string}`)\n\n const grantedAt = params.grantedAt ?? Math.floor(Date.now() / 1000)\n const expiresAt =\n typeof params.expiresAt === 'number' && params.expiresAt > 0\n ? Math.trunc(params.expiresAt)\n : 0\n const scopes = params.scopes ?? PUBLISH_AUTHORIZATION_SCOPES\n\n const permissionsHash = normalizeBytes32Hex(\n params.permissionsHash ??\n hashAutomationSessionKeyPermissions(\n buildAutomationSessionKeyPermissions({\n expiresAt: expiresAt > 0 ? expiresAt : undefined,\n }),\n scopes === PUBLISH_AUTHORIZATION_SCOPES ? PUBLISH_AUTOMATION_SCOPES : scopes,\n ),\n ) as `0x${string}`\n\n if (permissionsHash === ZERO_BYTES32) {\n throw new Error(\n '@seedprotocol/publish: attestPublishAuthorization requires a non-zero permissionsHash',\n )\n }\n\n const expirationTime =\n typeof params.expirationTime === 'number' && params.expirationTime > 0\n ? params.expirationTime\n : expiresAt > 0\n ? expiresAt\n : grantedAt + PUBLISH_AUTHORIZATION_DEFAULT_EXPIRATION_SECS\n\n const data = encodePublishAuthorizationAttestationData({\n identity,\n sessionKey,\n app,\n scopes,\n grantedAt,\n expiresAt,\n permissionsHash,\n })\n\n const tx = prepareEasAttest({\n schema: schemaUid,\n data: {\n recipient: sessionKey,\n expirationTime: BigInt(expirationTime),\n revocable: true,\n refUID: ZERO_BYTES32 as `0x${string}`,\n data,\n value: 0n,\n },\n })\n\n const receipt = await sendAndWait(sender, tx)\n if (!receipt) {\n throw new Error('@seedprotocol/publish: attestPublishAuthorization failed — no receipt')\n }\n const { easContractAddress } = getPublishConfig()\n const uid = getAttestationUidFromReceipt(receipt, easContractAddress)\n if (!uid || !isValidEasAttestationUid(uid)) {\n throw new Error(\n '@seedprotocol/publish: attestPublishAuthorization failed — could not parse attestation UID',\n )\n }\n\n return {\n uid: uid as `0x${string}`,\n schemaUid,\n permissionsHash,\n grantedAt,\n expiresAt,\n expirationTime,\n }\n}\n\n/**\n * Revoke a PublishAuthorization sidecar (must be signed by the original ManagedAccount attester).\n */\nexport async function revokePublishAuthorization(params: {\n wallet: PublishWallet | SeedTxSender\n uid: string\n schemaUid?: string\n}): Promise<void> {\n const sender = resolveTxSender(params.wallet)\n const schemaUid = (params.schemaUid ?? getPublishAuthorizationSchemaUid()) as `0x${string}`\n const uid = normalizeBytes32Hex(params.uid) as `0x${string}`\n if (!isValidEasAttestationUid(uid)) {\n throw new Error(\n '@seedprotocol/publish: revokePublishAuthorization requires a valid attestation uid',\n )\n }\n\n const tx = prepareEasMultiRevoke([\n {\n schema: schemaUid,\n data: [{ uid }],\n },\n ])\n const receipt = await sendAndWait(sender, tx)\n if (!receipt) {\n throw new Error('@seedprotocol/publish: revokePublishAuthorization failed — no receipt')\n }\n}\n\nexport type AssessPublishAuthorizationLiveResult = {\n uid: string\n decoded: PublishAuthorizationDecoded\n assess: PublishAuthorizationAssessResult\n expirationTime?: number | null\n}\n\n/**\n * Load a PublishAuthorization attestation by uid (via identity filter + client match) and assess.\n * Prefer filtering with {@link getPublishAuthorizationFromEas} when you know identity/sessionKey.\n */\nexport async function assessPublishAuthorizationLive(params: {\n uid: string\n identities: string[]\n}): Promise<AssessPublishAuthorizationLiveResult | null> {\n const rows = await getPublishAuthorizationFromEas({\n identities: params.identities,\n excludeRevoked: false,\n })\n const row = rows.find((r) => r.id?.toLowerCase() === params.uid.toLowerCase())\n if (!row) return null\n const decoded = decodePublishAuthorizationData(row.decodedDataJson ?? '[]')\n const expirationTime =\n typeof row.expirationTime === 'number'\n ? row.expirationTime\n : typeof row.expirationTime === 'string'\n ? Number(row.expirationTime)\n : null\n return {\n uid: row.id,\n decoded,\n assess: assessPublishAuthorization({ decoded, expirationTime }),\n expirationTime,\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"publishAuthorization-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"}
@@ -0,0 +1,45 @@
1
+ import { client as e } from "@seedprotocol/sdk";
2
+ //#region src/helpers/publishWalletRegistry.ts
3
+ var t = null;
4
+ function n() {
5
+ return e.isInitialized() ? Promise.resolve() : new Promise((t) => {
6
+ e.onReady(() => t());
7
+ });
8
+ }
9
+ async function r(r) {
10
+ if (t = r, !r) return;
11
+ await n();
12
+ let i = /* @__PURE__ */ new Set();
13
+ for (let e of r.ownedAddresses ?? []) e && i.add(e.toLowerCase());
14
+ i.add(r.signer.address.toLowerCase()), i.add(r.txSender.address.toLowerCase()), r.publisherAddress && i.add(r.publisherAddress.toLowerCase());
15
+ try {
16
+ let { watched: t } = await e.getAddresses();
17
+ await e.setAddresses({
18
+ owned: [...i],
19
+ watched: t
20
+ });
21
+ let n = r.publisherAddress ?? r.signer.address;
22
+ n && await e.claimUnpublishedDrafts(n);
23
+ } catch (e) {
24
+ console.warn("[publishWalletRegistry] Failed to set seed client addresses:", e);
25
+ }
26
+ }
27
+ function i() {
28
+ return t;
29
+ }
30
+ async function a() {
31
+ if (t = null, e.isInitialized()) try {
32
+ let { watched: n } = await e.getAddresses();
33
+ if (t) return;
34
+ await e.setAddresses({
35
+ owned: [],
36
+ watched: n
37
+ });
38
+ } catch (e) {
39
+ console.warn("[publishWalletRegistry] Failed to clear seed client owned addresses:", e);
40
+ }
41
+ }
42
+ //#endregion
43
+ export { i as n, r, a as t };
44
+
45
+ //# sourceMappingURL=publishWalletRegistry-Bf_Nvf_3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publishWalletRegistry-Bf_Nvf_3.js","names":["seedClient","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\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":";;AAeA,IAAIC,IAAuC;AAE3C,SAASC,IAA0C;CAEjD,OADIF,EAAW,cAAc,IAAU,QAAQ,QAAQ,IAChD,IAAI,SAAS,MAAY;EAC9B,EAAW,cAAcI,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,MAAMN,EAAW,aAAa;EAClD,MAAMA,EAAW,aAAa;GAAE,OAAO,CAAC,GAAGO,CAAK;GAAG;EAAQ,CAAC;EAC5D,IAAME,IAAUH,EAAK,oBAAoBA,EAAK,OAAO;EACrD,AAAIG,KACF,MAAMT,EAAW,uBAAuBS,CAAO;CAEnD,SAASC,GAAK;EACZ,QAAQ,KAAK,gEAAgEA,CAAG;CAClF;AACF;AAEA,SAAgBC,IAAgD;CAC9D,OAAOV;AACT;AAOA,eAAsBW,IAAoC;CAExD,IADA,IAAU,MACLZ,EAAW,cAAc,GAC9B,IAAI;EACF,IAAM,EAAE,eAAY,MAAMA,EAAW,aAAa;EAElD,IAAIC,GAAS;EACb,MAAMD,EAAW,aAAa;GAAE,OAAO,CAAC;GAAG;EAAQ,CAAC;CACtD,SAASU,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;AAsFjE,QAAA,MAAM,aAAa,EAAE,EAoMpB,CAAA;AAED,eAAe,aAAa,CAAA"}
1
+ {"version":3,"file":"ConnectButton.d.ts","sourceRoot":"","sources":["../../src/react/ConnectButton.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAAkC,MAAM,OAAO,CAAA;AAsFjE,QAAA,MAAM,aAAa,EAAE,EA8MpB,CAAA;AAED,eAAe,aAAa,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"PublishProvider.d.ts","sourceRoot":"","sources":["../../src/react/PublishProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,EAAa,MAAM,OAAO,CAAA;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAExD,OAAO,EAA6B,KAAK,aAAa,EAAE,MAAM,WAAW,CAAA;AACzE,OAAO,EAAwB,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAE/E,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAC3B,YAAY,EAAE,aAAa,EAAE,CAAA;AAE7B,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB;;;OAGG;IACH,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,oGAAoG;IACpG,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,0EAA0E;IAC1E,cAAc,CAAC,EAAE,gBAAgB,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;CACtD;AAED;;;GAGG;AACH,QAAA,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CAmB7C,CAAA;AAED,eAAe,eAAe,CAAA"}
1
+ {"version":3,"file":"PublishProvider.d.ts","sourceRoot":"","sources":["../../src/react/PublishProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,EAAU,MAAM,OAAO,CAAA;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAExD,OAAO,EAA6B,KAAK,aAAa,EAAE,MAAM,WAAW,CAAA;AACzE,OAAO,EAAwB,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAE/E,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAC3B,YAAY,EAAE,aAAa,EAAE,CAAA;AAE7B,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB;;;OAGG;IACH,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,oGAAoG;IACpG,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,0EAA0E;IAC1E,cAAc,CAAC,EAAE,gBAAgB,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;CACtD;AAED;;;GAGG;AACH,QAAA,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CAqB7C,CAAA;AAED,eAAe,eAAe,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=PublishProvider.initOrder.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PublishProvider.initOrder.test.d.ts","sourceRoot":"","sources":["../../src/react/PublishProvider.initOrder.test.tsx"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"PublishProvider.thirdweb.d.ts","sourceRoot":"","sources":["../../src/react/PublishProvider.thirdweb.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAAa,MAAM,OAAO,CAAA;AAM5C,OAAO,EAAwB,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAE7D,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAC3B,YAAY,EAAE,oBAAoB,EAAE,CAAA;AAEpC;;GAEG;AACH,QAAA,MAAM,uBAAuB,EAAE,EAAE,CAAC,oBAAoB,CAqBrD,CAAA;AAED,eAAe,uBAAuB,CAAA"}
1
+ {"version":3,"file":"PublishProvider.thirdweb.d.ts","sourceRoot":"","sources":["../../src/react/PublishProvider.thirdweb.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAAU,MAAM,OAAO,CAAA;AAMzC,OAAO,EAAwB,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAE7D,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAC3B,YAAY,EAAE,oBAAoB,EAAE,CAAA;AAEpC;;GAEG;AACH,QAAA,MAAM,uBAAuB,EAAE,EAAE,CAAC,oBAAoB,CAuBrD,CAAA;AAED,eAAe,uBAAuB,CAAA"}
@@ -1,4 +1,4 @@
1
- import { B as e, G as t, H as n, X as r, a as i, gt as a, nt as o, q as s } from "./chainConfig-DM9RSIMT.js";
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-BWzE8DIF.js";
2
2
  import { getGetAdditionalSyncAddresses as c } from "@seedprotocol/sdk";
3
3
  //#region src/helpers/resolveRevokeAccount.ts
4
4
  async function l(l) {
@@ -10,14 +10,14 @@ async function l(l) {
10
10
  p = !!e?.some((e) => e?.toLowerCase() === t);
11
11
  }
12
12
  try {
13
- let i = await t(u.address);
14
- if (d.toLowerCase() === i.toLowerCase() || p) {
15
- let t = p ? await e(a()).catch(() => i) : i;
16
- if (await s(t)) {
17
- r();
13
+ let o = await t(u.address);
14
+ if (d.toLowerCase() === o.toLowerCase() || p) {
15
+ let t = p ? await r(a()).catch(() => o) : o;
16
+ if (await e(t)) {
17
+ i();
18
18
  let e = n();
19
19
  await e.autoConnect({
20
- client: o(),
20
+ client: s(),
21
21
  chain: a()
22
22
  });
23
23
  let t = e.getAccount();
@@ -26,7 +26,7 @@ async function l(l) {
26
26
  }
27
27
  } catch {}
28
28
  if (p) {
29
- let { modularAccountModuleContract: e } = i();
29
+ let { modularAccountModuleContract: e } = o();
30
30
  throw e?.trim() ? Error("Revocation not supported for items published via the modular executor. Connect the ManagedAccount that controls the executor module.") : Error("Revocation not supported for items published via the modular executor.");
31
31
  }
32
32
  return u;
@@ -34,4 +34,4 @@ async function l(l) {
34
34
  //#endregion
35
35
  export { l as resolveRevokeAccount };
36
36
 
37
- //# sourceMappingURL=resolveRevokeAccount-CC9X1H9x.js.map
37
+ //# sourceMappingURL=resolveRevokeAccount-BUK9i1T4.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolveRevokeAccount-CC9X1H9x.js","names":["getConnectedManagedAccountAddress","getSmartWalletAddressForAdmin","getManagedAccountWallet","syncPublishInAppAuthToken","getPublishConfig","getPublishThirdwebChain","getClient","isSmartWalletDeployed","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,MAAMd,EAAkCK,EAAwB,CAAC,CAAC,CAAC,YAAYa,CAAqB,IACpGA;GAEJ,IAAI,MADmBX,EAAsBY,CAAc,GAC7C;IAEZ,EAA0B;IAC1B,IAAMC,IAAuBlB,EAAwB;IACrD,MAAMkB,EAAqB,YAAY;KACrC,QAAQd,EAAU;KAClB,OAAOD,EAAwB;IACjC,CAAC;IACD,IAAMgB,IAAiBD,EAAqB,WAAW;IACvD,IAAIC,GACF,OAAOA;GAEX;EACF;CACF,QAAQ,CAER;CAEA,IAAIP,GAA0B;EAC5B,IAAM,EAAE,oCAAiCV,EAAiB;EAO1D,MANKkB,GAA8B,KAAK,IAM9B,MACR,sIACF,IAPY,MACR,wEACF;CAMJ;CAEA,OAAOX;AACT"}
1
+ {"version":3,"file":"resolveRevokeAccount-BUK9i1T4.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":"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;AAqDlD,eAAO,MAAM,QAAQ,yGAiIpB,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;AA8DlD,eAAO,MAAM,QAAQ,yGAiIpB,CAAA"}
@@ -1,4 +1,18 @@
1
1
  import type { PublishMachineContext } from '../../../types';
2
+ export type WaitForConfirmationOptions = {
3
+ intervalMs?: number;
4
+ /** Give up after this long. Default 30 min: Arweave usually confirms within minutes. */
5
+ timeoutMs?: number;
6
+ /** Give up after this many failed status requests in a row (default 12, about a minute). */
7
+ maxConsecutiveErrors?: number;
8
+ };
9
+ /**
10
+ * Polls `getStatus` until it reports `confirmed`. Rejects on timeout, or with the last error once
11
+ * the status request has failed `maxConsecutiveErrors` times in a row; a success resets the count.
12
+ */
13
+ export declare function waitForArweaveConfirmation(getStatus: () => Promise<{
14
+ confirmed?: unknown;
15
+ } | null | undefined>, label: string, { intervalMs, timeoutMs, maxConsecutiveErrors }?: WaitForConfirmationOptions): Promise<void>;
2
16
  export declare const pollForConfirmation: import("xstate").PromiseActorLogic<void, {
3
17
  context: PublishMachineContext;
4
18
  event: unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"pollForConfirmation.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/pollForConfirmation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAK3D,eAAO,MAAM,mBAAmB;aAFQ,qBAAqB;WAAS,OAAO;gCA+B3E,CAAA"}
1
+ {"version":3,"file":"pollForConfirmation.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/actors/pollForConfirmation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAK3D,MAAM,MAAM,0BAA0B,GAAG;IACvC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,4FAA4F;IAC5F,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,OAAO,CAAC;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,CAAC,EACpE,KAAK,EAAE,MAAM,EACb,EAAE,UAAiB,EAAE,SAAuB,EAAE,oBAAyB,EAAE,GAAE,0BAA+B,GACzG,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED,eAAO,MAAM,mBAAmB;aAjDQ,qBAAqB;WAAS,OAAO;gCAiE3E,CAAA"}
@@ -1,15 +1,19 @@
1
1
  import type { PublishWallet } from '~/helpers/seedSigner';
2
+ export type DirectEasProblem = 'sender_is_not_publisher' | 'smart_account' | 'unknown_wallet_kind' | 'signer_is_not_publisher';
2
3
  /**
3
4
  * For a publisher address with no bytecode, says why it must not attest straight to EAS, or
4
- * returns null when it can (an EOA).
5
+ * returns null when it may: the wallet says it is an EOA (`kind: 'eoa'`) and its signer is the
6
+ * publisher. An address with no code can be an EOA or an undeployed smart account, and the
7
+ * address alone can't tell (a thirdweb smart wallet's signer address is the smart account), so
8
+ * the wallet has to say (`useDirectEas` skips this check).
5
9
  *
6
10
  * - The wallet sends from another address: EAS would record that address as the attester.
7
- * - The publisher is the ManagedAccount factory address of a known admin (the wallet's signer,
8
- * or an admin / owned address of the registered session): it is a smart account that is not
9
- * deployed yet. Direct EAS would attest one transaction per Seed and deploy the account as a
10
- * side effect, instead of the account's multiPublish.
11
+ * - `kind: 'smart'`: an undeployed smart account; direct EAS would attest one transaction per Seed
12
+ * instead of the account's multiPublish.
13
+ * - No kind: unknown, refused rather than guessed.
14
+ * - An EOA whose signer isn't the publisher: it would attest as someone else.
11
15
  *
12
- * Factory reads that fail (no factory configured, RPC error) rule that admin out.
16
+ * A wallet passed without a kind takes the registered session's kind when it's the same signer.
13
17
  */
14
- export declare function undeployedPublisherProblem(publisherAddress: string, wallet: Partial<PublishWallet> | undefined): Promise<'sender_is_not_publisher' | 'undeployed_smart_account' | null>;
18
+ export declare function directEasProblem(publisherAddress: string, wallet: Partial<PublishWallet> | undefined): DirectEasProblem | null;
15
19
  //# sourceMappingURL=undeployedSmartAccount.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"undeployedSmartAccount.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/helpers/undeployedSmartAccount.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAMzD;;;;;;;;;;;GAWG;AACH,wBAAsB,0BAA0B,CAC9C,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,SAAS,GACzC,OAAO,CAAC,yBAAyB,GAAG,0BAA0B,GAAG,IAAI,CAAC,CAuBxE"}
1
+ {"version":3,"file":"undeployedSmartAccount.d.ts","sourceRoot":"","sources":["../../../../src/services/publish/helpers/undeployedSmartAccount.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAMzD,MAAM,MAAM,gBAAgB,GACxB,yBAAyB,GACzB,eAAe,GACf,qBAAqB,GACrB,yBAAyB,CAAA;AAE7B;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC9B,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,SAAS,GACzC,gBAAgB,GAAG,IAAI,CAYzB"}
@@ -1,10 +1,22 @@
1
1
  import type { IItem } from '@seedprotocol/sdk';
2
2
  import { type MarketRates } from './marketRates';
3
3
  import type { EstimatePublishCostOptions, PublishCostEstimate, PublishWorkSummary } from './types';
4
- export declare function combinePublishCostEstimate(work: PublishWorkSummary, rates: MarketRates, flags?: {
4
+ /** Arweave charges every L1 transaction for at least this much data. */
5
+ export declare const ARWEAVE_MIN_CHARGED_BYTES: number;
6
+ /** Turbo doesn't charge for uploads up to this size. */
7
+ export declare const TURBO_FREE_BYTES: number;
8
+ type PublishCostFlags = {
5
9
  evmUserPays?: boolean;
6
10
  arweaveUserPays?: boolean;
7
11
  arweavePath?: 'l1' | 'bundler';
8
- }): PublishCostEstimate;
12
+ /** Where uploads go; with 'turbo' small uploads are free. */
13
+ uploadTo?: 'upload-api' | 'turbo';
14
+ /** The publish chain is a testnet. */
15
+ testnet?: boolean;
16
+ };
17
+ /** The bytes Arweave (or Turbo) charges for, given how the uploads are sent. */
18
+ export declare function chargedUploadBytes(work: Pick<PublishWorkSummary, 'uploadCount' | 'uploadBytes' | 'uploadSizes'>, path: 'l1' | 'bundler', uploadTo?: 'upload-api' | 'turbo'): number;
19
+ export declare function combinePublishCostEstimate(work: PublishWorkSummary, rates: MarketRates, flags?: PublishCostFlags): PublishCostEstimate;
9
20
  export declare function estimatePublishCost(item: IItem<any>, options?: EstimatePublishCostOptions): Promise<PublishCostEstimate>;
21
+ export {};
10
22
  //# sourceMappingURL=estimatePublishCost.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"estimatePublishCost.d.ts","sourceRoot":"","sources":["../../../src/services/publishCost/estimatePublishCost.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAI9C,OAAO,EAAwB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AACtE,OAAO,KAAK,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAuBlG,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,kBAAkB,EACxB,KAAK,EAAE,WAAW,EAClB,KAAK,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,IAAI,GAAG,SAAS,CAAA;CAAE,GAC3F,mBAAmB,CAqCrB;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAChB,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAAC,mBAAmB,CAAC,CAS9B"}
1
+ {"version":3,"file":"estimatePublishCost.d.ts","sourceRoot":"","sources":["../../../src/services/publishCost/estimatePublishCost.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAK9C,OAAO,EAAwB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AACtE,OAAO,KAAK,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAIlG,wEAAwE;AACxE,eAAO,MAAM,yBAAyB,QAAa,CAAA;AACnD,wDAAwD;AACxD,eAAO,MAAM,gBAAgB,QAAa,CAAA;AAE1C,KAAK,gBAAgB,GAAG;IACtB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,WAAW,CAAC,EAAE,IAAI,GAAG,SAAS,CAAA;IAC9B,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,YAAY,GAAG,OAAO,CAAA;IACjC,sCAAsC;IACtC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAwBD,gFAAgF;AAChF,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,aAAa,GAAG,aAAa,GAAG,aAAa,CAAC,EAC7E,IAAI,EAAE,IAAI,GAAG,SAAS,EACtB,QAAQ,GAAE,YAAY,GAAG,OAAsB,GAC9C,MAAM,CAQR;AAMD,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,kBAAkB,EACxB,KAAK,EAAE,WAAW,EAClB,KAAK,CAAC,EAAE,gBAAgB,GACvB,mBAAmB,CA0CrB;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAChB,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAAC,mBAAmB,CAAC,CAS9B"}
@@ -8,6 +8,8 @@ export type PublishWorkSummary = {
8
8
  attestationCount: number;
9
9
  uploadCount: number;
10
10
  uploadBytes: number;
11
+ /** Size of each upload. Without it, uploads are taken as equal parts of uploadBytes. */
12
+ uploadSizes?: number[];
11
13
  /** References to unpublished items; when non-empty the publish fails before sending anything. */
12
14
  unpublishedRelatedItems?: UnpublishedRelatedItem[];
13
15
  };
@@ -20,11 +22,19 @@ export type PublishCostEstimate = {
20
22
  gas: bigint;
21
23
  /** Whether the user's wallet pays this gas, or a sponsor (paymaster / Thirdweb) does. */
22
24
  userPays: boolean;
25
+ /** The publish chain is a testnet: its ETH has no value, so `usd` is 0. */
26
+ testnet: boolean;
23
27
  };
24
28
  arweave: {
25
29
  ar: string;
26
30
  usd: number;
31
+ /** Bytes uploaded. */
27
32
  bytes: number;
33
+ /**
34
+ * Bytes paid for: on L1 each transaction is charged for at least 256 KiB; on the bundler path
35
+ * the bundle is one transaction; with Turbo, uploads of 100 KiB or less are free.
36
+ */
37
+ chargedBytes: number;
28
38
  uploadCount: number;
29
39
  path: 'l1' | 'bundler';
30
40
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/publishCost/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAE5E,YAAY,EAAE,WAAW,EAAE,CAAA;AAE3B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,WAAW,EAAE,WAAW,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,MAAM,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,iGAAiG;IACjG,uBAAuB,CAAC,EAAE,sBAAsB,EAAE,CAAA;CACnD,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,oFAAoF;IACpF,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE;QACH,GAAG,EAAE,MAAM,CAAA;QACX,GAAG,EAAE,MAAM,CAAA;QACX,GAAG,EAAE,MAAM,CAAA;QACX,yFAAyF;QACzF,QAAQ,EAAE,OAAO,CAAA;KAClB,CAAA;IACD,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAA;QACV,GAAG,EAAE,MAAM,CAAA;QACX,KAAK,EAAE,MAAM,CAAA;QACb,WAAW,EAAE,MAAM,CAAA;QACnB,IAAI,EAAE,IAAI,GAAG,SAAS,CAAA;QACtB;;;;WAIG;QACH,QAAQ,EAAE,OAAO,CAAA;KAClB,CAAA;IACD,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;QACb,SAAS,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,IAAI,EAAE,kBAAkB,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,kBAAkB,CAAA;IACzB,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;QACb,SAAS,EAAE,MAAM,CAAA;QACjB,WAAW,EAAE,MAAM,CAAA;QACnB,cAAc,EAAE,MAAM,CAAA;KACvB,CAAA;CACF,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/publishCost/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAE5E,YAAY,EAAE,WAAW,EAAE,CAAA;AAE3B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,WAAW,EAAE,WAAW,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,MAAM,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,iGAAiG;IACjG,uBAAuB,CAAC,EAAE,sBAAsB,EAAE,CAAA;CACnD,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,oFAAoF;IACpF,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE;QACH,GAAG,EAAE,MAAM,CAAA;QACX,GAAG,EAAE,MAAM,CAAA;QACX,GAAG,EAAE,MAAM,CAAA;QACX,yFAAyF;QACzF,QAAQ,EAAE,OAAO,CAAA;QACjB,2EAA2E;QAC3E,OAAO,EAAE,OAAO,CAAA;KACjB,CAAA;IACD,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAA;QACV,GAAG,EAAE,MAAM,CAAA;QACX,sBAAsB;QACtB,KAAK,EAAE,MAAM,CAAA;QACb;;;WAGG;QACH,YAAY,EAAE,MAAM,CAAA;QACpB,WAAW,EAAE,MAAM,CAAA;QACnB,IAAI,EAAE,IAAI,GAAG,SAAS,CAAA;QACtB;;;;WAIG;QACH,QAAQ,EAAE,OAAO,CAAA;KAClB,CAAA;IACD,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;QACb,SAAS,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,IAAI,EAAE,kBAAkB,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,kBAAkB,CAAA;IACzB,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;QACb,SAAS,EAAE,MAAM,CAAA;QACjB,WAAW,EAAE,MAAM,CAAA;QACnB,cAAc,EAAE,MAAM,CAAA;KACvB,CAAA;CACF,CAAA"}
@@ -46,9 +46,6 @@ type PublishManagerEvent = {
46
46
  } | {
47
47
  type: 'STOP_PUBLISH';
48
48
  seedLocalId: string;
49
- } | {
50
- type: 'QUERY';
51
- seedLocalId: string;
52
49
  } | {
53
50
  type: 'STOP_ALL';
54
51
  };
@@ -89,9 +86,6 @@ export declare const publishManagerMachine: import("xstate").StateMachine<Publis
89
86
  } | {
90
87
  type: "STOP_PUBLISH";
91
88
  seedLocalId: string;
92
- } | {
93
- type: "QUERY";
94
- seedLocalId: string;
95
89
  } | {
96
90
  type: "STOP_ALL";
97
91
  }, {
@@ -148,9 +142,6 @@ export declare const PublishManager: {
148
142
  } | {
149
143
  type: "STOP_PUBLISH";
150
144
  seedLocalId: string;
151
- } | {
152
- type: "QUERY";
153
- seedLocalId: string;
154
145
  } | {
155
146
  type: "STOP_ALL";
156
147
  }, {
@@ -182,7 +173,12 @@ export declare const PublishManager: {
182
173
  createPublish: (item: InstanceType<typeof Item>, address: string, account?: import("../../helpers/seedSigner").PublishWallet, options?: import("../../config").CreatePublishOptions) => Promise<import("xstate").ActorRef<any, any> | undefined>;
183
174
  retryAttestations: (seedLocalId: string, account?: import("../../helpers/seedSigner").PublishWallet) => void;
184
175
  stopPublish: (seedLocalId: string) => void;
185
- query: (seedLocalId: string) => void;
176
+ /**
177
+ * The current snapshot of a seed's publish (running, or settled this session), or undefined.
178
+ * A read only: it used to stop the publish it named, as stopPublish does without marking the row
179
+ * or releasing the lock.
180
+ */
181
+ query: (seedLocalId: string) => any;
186
182
  stopAll: () => void;
187
183
  getPublish: (seedLocalId: string) => import("xstate").ActorRef<any, any, import("xstate").EventObject> | undefined;
188
184
  savePublish: (seedLocalId: string, publishProcess: ActorRefFrom<typeof publishMachine>) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/publishManager/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/publishManager/index.ts"],"names":[],"mappings":"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"}