@seedprotocol/publish 0.6.1 → 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/config-BCCU2gwH.js +947 -0
  2. package/dist/config-BCCU2gwH.js.map +1 -0
  3. package/dist/config.d.ts +8 -0
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/ensureAutomationSessionKey-DITBy2BP.js +84 -0
  6. package/dist/ensureAutomationSessionKey-DITBy2BP.js.map +1 -0
  7. package/dist/ensureModularPublishBootstrap-Cybk4i1Y.js +127 -0
  8. package/dist/ensureModularPublishBootstrap-Cybk4i1Y.js.map +1 -0
  9. package/dist/ensureSmartWalletThenPublish-BY9SiutA.js +48 -0
  10. package/dist/ensureSmartWalletThenPublish-BY9SiutA.js.map +1 -0
  11. package/dist/helpers/publishWalletRegistry.d.ts.map +1 -1
  12. package/dist/hooks/index.d.ts +2 -0
  13. package/dist/hooks/index.d.ts.map +1 -1
  14. package/dist/hooks/usePublishCostEstimate.d.ts +12 -0
  15. package/dist/hooks/usePublishCostEstimate.d.ts.map +1 -0
  16. package/dist/index.d.ts +4 -1
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +469 -210
  19. package/dist/index.js.map +1 -1
  20. package/dist/publishAuthorization-ctIWvkYC.js +3479 -0
  21. package/dist/publishAuthorization-ctIWvkYC.js.map +1 -0
  22. package/dist/resolveRevokeAccount-CUr0F1ua.js +38 -0
  23. package/dist/resolveRevokeAccount-CUr0F1ua.js.map +1 -0
  24. package/dist/services/publishCost/estimatePublishCost.d.ts +9 -0
  25. package/dist/services/publishCost/estimatePublishCost.d.ts.map +1 -0
  26. package/dist/services/publishCost/gasHeuristics.d.ts +16 -0
  27. package/dist/services/publishCost/gasHeuristics.d.ts.map +1 -0
  28. package/dist/services/publishCost/index.d.ts +7 -0
  29. package/dist/services/publishCost/index.d.ts.map +1 -0
  30. package/dist/services/publishCost/marketRates.d.ts +13 -0
  31. package/dist/services/publishCost/marketRates.d.ts.map +1 -0
  32. package/dist/services/publishCost/tokenPrices.d.ts +12 -0
  33. package/dist/services/publishCost/tokenPrices.d.ts.map +1 -0
  34. package/dist/services/publishCost/types.d.ts +48 -0
  35. package/dist/services/publishCost/types.d.ts.map +1 -0
  36. package/dist/services/publishCost/watchPublishCost.d.ts +29 -0
  37. package/dist/services/publishCost/watchPublishCost.d.ts.map +1 -0
  38. package/dist/thirdweb.js +5 -5
  39. package/dist/worker-BI_q7Nkk.js +69 -0
  40. package/dist/worker-BI_q7Nkk.js.map +1 -0
  41. package/package.json +6 -6
@@ -0,0 +1,38 @@
1
+ import { r as e } from "./config-BCCU2gwH.js";
2
+ import { D as t, I as n, P as r, j as i, k as a } from "./publishAuthorization-ctIWvkYC.js";
3
+ import { getGetAdditionalSyncAddresses as o } from "@seedprotocol/sdk";
4
+ import { optimismSepolia as s } from "thirdweb/chains";
5
+ //#region src/helpers/resolveRevokeAccount.ts
6
+ async function c(c) {
7
+ let { account: l, attester: u } = c;
8
+ if (!u || l.address.toLowerCase() === u.toLowerCase()) return l;
9
+ let d = o(), f = !1;
10
+ if (d) {
11
+ let e = await d(), t = u.toLowerCase();
12
+ f = !!e?.some((e) => e?.toLowerCase() === t);
13
+ }
14
+ try {
15
+ let e = await r(l.address);
16
+ if (u.toLowerCase() === e.toLowerCase() || f) {
17
+ let r = f ? await a(s).catch(() => e) : e;
18
+ if (await n(r)) {
19
+ let e = i();
20
+ await e.autoConnect({
21
+ client: t(),
22
+ chain: s
23
+ });
24
+ let n = e.getAccount();
25
+ if (n) return n;
26
+ }
27
+ }
28
+ } catch {}
29
+ if (f) {
30
+ let { modularAccountModuleContract: t } = e();
31
+ throw t?.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.");
32
+ }
33
+ return l;
34
+ }
35
+ //#endregion
36
+ export { c as resolveRevokeAccount };
37
+
38
+ //# sourceMappingURL=resolveRevokeAccount-CUr0F1ua.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveRevokeAccount-CUr0F1ua.js","names":[],"sources":["../src/helpers/resolveRevokeAccount.ts"],"sourcesContent":["import type { Account } from 'thirdweb/wallets'\nimport { optimismSepolia } from 'thirdweb/chains'\nimport { getGetAdditionalSyncAddresses } from '@seedprotocol/sdk'\nimport { getPublishConfig } from '~/config'\nimport {\n getClient,\n getSmartWalletAddressForAdmin,\n isSmartWalletDeployed,\n getManagedAccountWallet,\n getConnectedManagedAccountAddress,\n} from '~/helpers/thirdweb'\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(optimismSepolia).catch(() => derivedManagedAccount)\n : derivedManagedAccount\n const deployed = await isSmartWalletDeployed(managedAddress)\n if (deployed) {\n const managedAccountWallet = getManagedAccountWallet()\n await managedAccountWallet.autoConnect({\n client: getClient(),\n chain: optimismSepolia,\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":";;;;;AAsBA,eAAsB,EAAqB,GAGtB;CACnB,IAAM,EAAE,YAAS,gBAAa;CAE9B,IAAI,CAAC,KAAY,EAAQ,QAAQ,YAAY,MAAM,EAAS,YAAY,GACtE,OAAO;CAGT,IAAM,IAAmB,EAA8B,GACnD,IAA2B;CAC/B,IAAI,GAAkB;EACpB,IAAM,IAAa,MAAM,EAAiB,GACpC,IAAgB,EAAS,YAAY;EAC3C,IAA2B,CAAC,CAAC,GAAY,MACtC,MAA0B,GAAG,YAAY,MAAM,CAClD;CACF;CAEA,IAAI;EACF,IAAM,IAAwB,MAAM,EAA8B,EAAQ,OAAO;EAIjF,IAHsB,EAAS,YAG3B,MAFiB,EAAsB,YAErB,KAAgB,GAA0B;GAC9D,IAAM,IAAiB,IACnB,MAAM,EAAkC,CAAe,CAAC,CAAC,YAAY,CAAqB,IAC1F;GAEJ,IAAI,MADmB,EAAsB,CAAc,GAC7C;IACZ,IAAM,IAAuB,EAAwB;IACrD,MAAM,EAAqB,YAAY;KACrC,QAAQ,EAAU;KAClB,OAAO;IACT,CAAC;IACD,IAAM,IAAiB,EAAqB,WAAW;IACvD,IAAI,GACF,OAAO;GAEX;EACF;CACF,QAAQ,CAER;CAEA,IAAI,GAA0B;EAC5B,IAAM,EAAE,oCAAiC,EAAiB;EAO1D,MANK,GAA8B,KAAK,IAM9B,MACR,sIACF,IAPY,MACR,wEACF;CAMJ;CAEA,OAAO;AACT"}
@@ -0,0 +1,9 @@
1
+ import type { IItem } from '@seedprotocol/sdk';
2
+ import { type MarketRates } from './marketRates';
3
+ import type { EstimatePublishCostOptions, PublishCostEstimate, PublishWorkSummary } from './types';
4
+ export declare function combinePublishCostEstimate(work: PublishWorkSummary, rates: MarketRates, flags?: {
5
+ evmUserPays?: boolean;
6
+ arweavePath?: 'l1' | 'bundler';
7
+ }): PublishCostEstimate;
8
+ export declare function estimatePublishCost(item: IItem<any>, options?: EstimatePublishCostOptions): Promise<PublishCostEstimate>;
9
+ //# sourceMappingURL=estimatePublishCost.d.ts.map
@@ -0,0 +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;AAG9C,OAAO,EAAwB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AACtE,OAAO,KAAK,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAqBlG,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,kBAAkB,EACxB,KAAK,EAAE,WAAW,EAClB,KAAK,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,IAAI,GAAG,SAAS,CAAA;CAAE,GAChE,mBAAmB,CAoCrB;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAChB,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAAC,mBAAmB,CAAC,CAS9B"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Rough Optimism L2 gas for Seed `multiPublish` / EAS attestations.
3
+ * These are heuristics for a USD quote, not `eth_estimateGas`.
4
+ */
5
+ export declare const PUBLISH_GAS_HEURISTICS: {
6
+ readonly BASE: 80000n;
7
+ readonly NEW_SEED: 120000n;
8
+ readonly NEW_VERSION: 80000n;
9
+ readonly ATTESTATION: 55000n;
10
+ };
11
+ export declare function heuristicPublishGas(work: {
12
+ newSeedCount: number;
13
+ newVersionCount: number;
14
+ attestationCount: number;
15
+ }): bigint;
16
+ //# sourceMappingURL=gasHeuristics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gasHeuristics.d.ts","sourceRoot":"","sources":["../../../src/services/publishCost/gasHeuristics.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,sBAAsB;;;;;CAKzB,CAAA;AAEV,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,MAAM,CAAA;CACzB,GAAG,MAAM,CAOT"}
@@ -0,0 +1,7 @@
1
+ export { estimatePublishCost, combinePublishCostEstimate, } from './estimatePublishCost';
2
+ export { getCachedTokenPrices, resetTokenPriceCache, type TokenPrices } from './tokenPrices';
3
+ export { getCachedMarketRates, resetMarketRateCache, type MarketRates } from './marketRates';
4
+ export { PUBLISH_GAS_HEURISTICS, heuristicPublishGas } from './gasHeuristics';
5
+ export { watchPublishCost, itemPublishFingerprint, type WatchPublishCostOptions, type WatchPublishCostHandle, type WatchPublishCostSnapshot, } from './watchPublishCost';
6
+ export type { PublishCostEstimate, EstimatePublishCostOptions, PublishWorkSummary, PublishMode, } from './types';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/publishCost/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AAC5F,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AAC5F,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAC7E,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,GAC9B,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EACV,mBAAmB,EACnB,0BAA0B,EAC1B,kBAAkB,EAClB,WAAW,GACZ,MAAM,SAAS,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { type TokenPrices } from './tokenPrices';
2
+ export type MarketRates = TokenPrices & {
3
+ gasPriceWei: bigint;
4
+ winstonPerByte: number;
5
+ };
6
+ declare const ARWEAVE_PRICE_REF_BYTES = 1000000;
7
+ /** Token prices + L2 gas + AR winston/byte, shared 60s TTL. */
8
+ export declare function getCachedMarketRates(options?: {
9
+ forceRefresh?: boolean;
10
+ }): Promise<MarketRates>;
11
+ export declare function resetMarketRateCache(): void;
12
+ export { ARWEAVE_PRICE_REF_BYTES };
13
+ //# sourceMappingURL=marketRates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketRates.d.ts","sourceRoot":"","sources":["../../../src/services/publishCost/marketRates.ts"],"names":[],"mappings":"AAEA,OAAO,EAA8C,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AAE5F,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG;IACtC,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;CACvB,CAAA;AAGD,QAAA,MAAM,uBAAuB,UAAY,CAAA;AAgBzC,+DAA+D;AAC/D,wBAAsB,oBAAoB,CAAC,OAAO,CAAC,EAAE;IACnD,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,GAAG,OAAO,CAAC,WAAW,CAAC,CAiCvB;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAI3C;AAED,OAAO,EAAE,uBAAuB,EAAE,CAAA"}
@@ -0,0 +1,12 @@
1
+ export type TokenPrices = {
2
+ ethUsd: number;
3
+ arUsd: number;
4
+ fetchedAt: number;
5
+ };
6
+ export declare function fetchCoinbaseSpot(symbol: 'ETH' | 'AR'): Promise<number>;
7
+ /** Process-wide ETH/USD + AR/USD cache (60s). Failed refresh keeps the last good values. */
8
+ export declare function getCachedTokenPrices(options?: {
9
+ forceRefresh?: boolean;
10
+ }): Promise<TokenPrices>;
11
+ export declare function resetTokenPriceCache(): void;
12
+ //# sourceMappingURL=tokenPrices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenPrices.d.ts","sourceRoot":"","sources":["../../../src/services/publishCost/tokenPrices.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAeD,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAW7E;AAUD,4FAA4F;AAC5F,wBAAsB,oBAAoB,CAAC,OAAO,CAAC,EAAE;IACnD,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,GAAG,OAAO,CAAC,WAAW,CAAC,CA6BvB;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAG3C"}
@@ -0,0 +1,48 @@
1
+ import type { PublishMode } from '@seedprotocol/sdk';
2
+ export type { PublishMode };
3
+ export type PublishWorkSummary = {
4
+ publishMode: PublishMode;
5
+ seedCount: number;
6
+ newSeedCount: number;
7
+ newVersionCount: number;
8
+ attestationCount: number;
9
+ uploadCount: number;
10
+ uploadBytes: number;
11
+ };
12
+ export type PublishCostEstimate = {
13
+ totalUsd: number;
14
+ evm: {
15
+ eth: string;
16
+ usd: number;
17
+ gas: bigint;
18
+ userPays: boolean;
19
+ };
20
+ arweave: {
21
+ ar: string;
22
+ usd: number;
23
+ bytes: number;
24
+ uploadCount: number;
25
+ path: 'l1' | 'bundler';
26
+ userPays: boolean;
27
+ };
28
+ prices: {
29
+ ethUsd: number;
30
+ arUsd: number;
31
+ fetchedAt: number;
32
+ };
33
+ work: PublishWorkSummary;
34
+ estimatedAt: number;
35
+ };
36
+ export type EstimatePublishCostOptions = {
37
+ publishMode?: PublishMode;
38
+ /** Skip summarize + network; used by tests and the watcher reprice path. */
39
+ work?: PublishWorkSummary;
40
+ rates?: {
41
+ ethUsd: number;
42
+ arUsd: number;
43
+ fetchedAt: number;
44
+ gasPriceWei: bigint;
45
+ winstonPerByte: number;
46
+ };
47
+ };
48
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/publishCost/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,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;CACpB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE;QACH,GAAG,EAAE,MAAM,CAAA;QACX,GAAG,EAAE,MAAM,CAAA;QACX,GAAG,EAAE,MAAM,CAAA;QACX,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,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"}
@@ -0,0 +1,29 @@
1
+ import type { IItem } from '@seedprotocol/sdk';
2
+ import type { EstimatePublishCostOptions, PublishCostEstimate } from './types';
3
+ export type WatchPublishCostSnapshot = {
4
+ estimate: PublishCostEstimate | null;
5
+ isEstimating: boolean;
6
+ isStale: boolean;
7
+ error: Error | null;
8
+ };
9
+ export type WatchPublishCostOptions = EstimatePublishCostOptions & {
10
+ priceRefreshMs?: number;
11
+ /** Trailing idle before re-summarizing the item. 0 = re-estimate on every fingerprint change. */
12
+ itemIdleMs?: number;
13
+ estimate?: (item: IItem<any>) => Promise<PublishCostEstimate>;
14
+ reprice?: (estimate: PublishCostEstimate) => Promise<PublishCostEstimate>;
15
+ };
16
+ export type WatchPublishCostHandle = {
17
+ dispose: () => void;
18
+ refresh: () => void;
19
+ };
20
+ export declare function itemPublishFingerprint(item: IItem<any>): string;
21
+ /**
22
+ * Watches an item and emits USD publish-cost estimates.
23
+ * First estimate is immediate. Later item edits restart a 15s idle timer.
24
+ * Market rates refresh every 60s and reprice the last work without re-summarizing.
25
+ */
26
+ export declare function watchPublishCost(item: IItem<any>, onChange: (snapshot: WatchPublishCostSnapshot & {
27
+ refresh: () => void;
28
+ }) => void, options?: WatchPublishCostOptions): WatchPublishCostHandle;
29
+ //# sourceMappingURL=watchPublishCost.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watchPublishCost.d.ts","sourceRoot":"","sources":["../../../src/services/publishCost/watchPublishCost.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAI9C,OAAO,KAAK,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAE9E,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAA;IACpC,YAAY,EAAE,OAAO,CAAA;IACrB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG,0BAA0B,GAAG;IACjE,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iGAAiG;IACjG,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAC7D,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAA;CAC1E,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,CAAA;AAeD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAS/D;AAMD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAChB,QAAQ,EAAE,CAAC,QAAQ,EAAE,wBAAwB,GAAG;IAAE,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,KAAK,IAAI,EAChF,OAAO,CAAC,EAAE,uBAAuB,GAChC,sBAAsB,CAsHxB"}
package/dist/thirdweb.js CHANGED
@@ -1,9 +1,9 @@
1
- import { a as e, b as t, i as n, n as r, o as i, r as a, s as o, v as s } from "./config-gmiloACE.js";
1
+ import { a as e, b as t, i as n, n as r, o as i, r as a, s as o, v as s } from "./config-BCCU2gwH.js";
2
2
  import { o as c, r as l } from "./errors-Du3LNbJN.js";
3
- import { A as u, C as d, D as f, E as ee, F as p, H as m, I as h, L as g, M as _, N as te, O as v, P as y, Q as b, R as x, S, T as C, U as w, V as ne, Z as re, a as ie, b as ae, d as oe, f as se, h as T, j as E, k as D, l as O, m as k, p as A, u as j, w as M, x as N, y as P, z as F } from "./publishAuthorization-BzmqxKCT.js";
4
- import { t as I } from "./ensureSmartWalletThenPublish-iPHk38a4.js";
5
- import { a as L, i as R, r as z, t as B } from "./ensureModularPublishBootstrap-AQdNHeLj.js";
6
- import { i as V, r as H, t as U } from "./ensureAutomationSessionKey-C_RJobXU.js";
3
+ import { A as u, C as d, D as f, E as ee, F as p, H as m, I as h, L as g, M as _, N as te, O as v, P as y, Q as b, R as x, S, T as C, U as w, V as ne, Z as re, a as ie, b as ae, d as oe, f as se, h as T, j as E, k as D, l as O, m as k, p as A, u as j, w as M, x as N, y as P, z as F } from "./publishAuthorization-ctIWvkYC.js";
4
+ import { t as I } from "./ensureSmartWalletThenPublish-BY9SiutA.js";
5
+ import { a as L, i as R, r as z, t as B } from "./ensureModularPublishBootstrap-Cybk4i1Y.js";
6
+ import { i as V, r as H, t as U } from "./ensureAutomationSessionKey-DITBy2BP.js";
7
7
  import { client as W } from "@seedprotocol/sdk";
8
8
  import { getContract as G } from "thirdweb";
9
9
  import { optimismSepolia as K } from "thirdweb/chains";
@@ -0,0 +1,69 @@
1
+ import { r as e } from "./config-BCCU2gwH.js";
2
+ import { BaseDb as t, applyArweaveL1TransactionIdLocal as n, arweaveL1FinalizeJobs as r, getArweaveUploadStatus as i, isArweaveL1AnchoringComplete as a, queryArweaveGatewayTransactionWithFallback as o } from "@seedprotocol/sdk";
3
+ import s from "debug";
4
+ import { eq as c } from "drizzle-orm";
5
+ //#region src/services/arweaveL1Finalize/worker.ts
6
+ var l = s("seedProtocol:arweaveL1Finalize:worker"), u = 45e3, d = null;
7
+ function f() {
8
+ d ?? (d = setInterval(() => {
9
+ p();
10
+ }, u), p());
11
+ }
12
+ async function p() {
13
+ let s;
14
+ try {
15
+ s = e();
16
+ } catch {
17
+ return;
18
+ }
19
+ if (!s.useArweaveBundler || !t.isAppDbReady()) return;
20
+ let u = t.getAppDb();
21
+ if (!u) return;
22
+ let d = await u.select().from(r).where(c(r.phase, "pending_l1")).limit(25);
23
+ if (d.length === 0) return;
24
+ let f = s.arweaveUploadVerificationBaseUrl, p = s.arweaveGraphqlUrl;
25
+ for (let e of d) {
26
+ let t = e.dataItemId;
27
+ try {
28
+ let s = e.l1TransactionId;
29
+ if (!s) {
30
+ let n = (await o(p, t))?.bundledInId ?? null;
31
+ n && (s = n, await u.update(r).set({
32
+ l1TransactionId: n,
33
+ bundleId: n,
34
+ updatedAt: Date.now()
35
+ }).where(c(r.id, e.id)));
36
+ }
37
+ let l = await i(f, t), d = l ? JSON.stringify(l) : null;
38
+ if (l && a(l)) {
39
+ let i = s ?? l.bundleId ?? l.turbo?.bundleId ?? e.l1TransactionId ?? null;
40
+ i && await n({
41
+ seedLocalId: e.seedLocalId,
42
+ versionLocalId: e.versionLocalId,
43
+ dataItemId: t,
44
+ l1TransactionId: i
45
+ }), await u.update(r).set({
46
+ phase: "confirmed",
47
+ statusJson: d,
48
+ l1TransactionId: i ?? e.l1TransactionId,
49
+ bundleId: l.bundleId ?? e.bundleId,
50
+ updatedAt: Date.now()
51
+ }).where(c(r.id, e.id));
52
+ continue;
53
+ }
54
+ await u.update(r).set({
55
+ statusJson: d,
56
+ updatedAt: Date.now()
57
+ }).where(c(r.id, e.id));
58
+ } catch (t) {
59
+ l("tick error for job", e.id, t), await u.update(r).set({
60
+ errorMessage: t instanceof Error ? t.message : String(t),
61
+ updatedAt: Date.now()
62
+ }).where(c(r.id, e.id));
63
+ }
64
+ }
65
+ }
66
+ //#endregion
67
+ export { f as startArweaveL1FinalizeWorker };
68
+
69
+ //# sourceMappingURL=worker-BI_q7Nkk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-BI_q7Nkk.js","names":[],"sources":["../src/services/arweaveL1Finalize/worker.ts"],"sourcesContent":["import {\n applyArweaveL1TransactionIdLocal,\n arweaveL1FinalizeJobs,\n BaseDb,\n getArweaveUploadStatus,\n isArweaveL1AnchoringComplete,\n queryArweaveGatewayTransactionWithFallback,\n} from '@seedprotocol/sdk'\nimport { eq } from 'drizzle-orm'\nimport { getPublishConfig } from '~/config'\nimport debug from 'debug'\n\nconst logger = debug('seedProtocol:arweaveL1Finalize:worker')\n\nconst TICK_MS = 45_000\n\nlet intervalId: ReturnType<typeof setInterval> | null = null\n\nexport function startArweaveL1FinalizeWorker(): void {\n if (intervalId != null) return\n intervalId = setInterval(() => {\n void runArweaveL1FinalizeTick()\n }, TICK_MS)\n void runArweaveL1FinalizeTick()\n}\n\nexport function stopArweaveL1FinalizeWorker(): void {\n if (intervalId != null) {\n clearInterval(intervalId)\n intervalId = null\n }\n}\n\nasync function runArweaveL1FinalizeTick(): Promise<void> {\n let config: ReturnType<typeof getPublishConfig>\n try {\n config = getPublishConfig()\n } catch {\n return\n }\n if (!config.useArweaveBundler) return\n\n // initPublish may start this worker before Seed platformClassesInit configures BaseDb.\n if (!BaseDb.isAppDbReady()) return\n const db = BaseDb.getAppDb()\n if (!db) return\n\n const pending = await db\n .select()\n .from(arweaveL1FinalizeJobs)\n .where(eq(arweaveL1FinalizeJobs.phase, 'pending_l1'))\n .limit(25)\n\n if (pending.length === 0) return\n\n const uploadBase = config.arweaveUploadVerificationBaseUrl\n const graphqlUrl = config.arweaveGraphqlUrl\n\n for (const job of pending) {\n const dataItemId = job.dataItemId\n try {\n let l1TxId = job.l1TransactionId\n\n if (!l1TxId) {\n const gql = await queryArweaveGatewayTransactionWithFallback(graphqlUrl, dataItemId)\n const bundled = gql?.bundledInId ?? null\n if (bundled) {\n l1TxId = bundled\n await db\n .update(arweaveL1FinalizeJobs)\n .set({\n l1TransactionId: bundled,\n bundleId: bundled,\n updatedAt: Date.now(),\n })\n .where(eq(arweaveL1FinalizeJobs.id, job.id!))\n }\n }\n\n const status = await getArweaveUploadStatus(uploadBase, dataItemId)\n const statusStr = status ? JSON.stringify(status) : null\n\n if (status && isArweaveL1AnchoringComplete(status)) {\n const resolvedL1 =\n l1TxId ??\n status.bundleId ??\n status.turbo?.bundleId ??\n job.l1TransactionId ??\n null\n\n if (resolvedL1) {\n await applyArweaveL1TransactionIdLocal({\n seedLocalId: job.seedLocalId,\n versionLocalId: job.versionLocalId,\n dataItemId,\n l1TransactionId: resolvedL1,\n })\n }\n\n await db\n .update(arweaveL1FinalizeJobs)\n .set({\n phase: 'confirmed',\n statusJson: statusStr,\n l1TransactionId: resolvedL1 ?? job.l1TransactionId,\n bundleId: status.bundleId ?? job.bundleId,\n updatedAt: Date.now(),\n })\n .where(eq(arweaveL1FinalizeJobs.id, job.id!))\n continue\n }\n\n await db\n .update(arweaveL1FinalizeJobs)\n .set({\n statusJson: statusStr,\n updatedAt: Date.now(),\n })\n .where(eq(arweaveL1FinalizeJobs.id, job.id!))\n } catch (err) {\n logger('tick error for job', job.id, err)\n await db\n .update(arweaveL1FinalizeJobs)\n .set({\n errorMessage: err instanceof Error ? err.message : String(err),\n updatedAt: Date.now(),\n })\n .where(eq(arweaveL1FinalizeJobs.id, job.id!))\n }\n }\n}\n"],"mappings":";;;;;AAYA,IAAM,IAAS,EAAM,uCAAuC,GAEtD,IAAU,MAEZ,IAAoD;AAExD,SAAgB,IAAqC;CAC/C,MACJ,IAAa,kBAAkB;EAC7B,EAA8B;CAChC,GAAG,CAAO,GACV,EAA8B;AAChC;AASA,eAAe,IAA0C;CACvD,IAAI;CACJ,IAAI;EACF,IAAS,EAAiB;CAC5B,QAAQ;EACN;CACF;CAIA,IAHI,CAAC,EAAO,qBAGR,CAAC,EAAO,aAAa,GAAG;CAC5B,IAAM,IAAK,EAAO,SAAS;CAC3B,IAAI,CAAC,GAAI;CAET,IAAM,IAAU,MAAM,EACnB,OAAO,CAAC,CACR,KAAK,CAAqB,CAAC,CAC3B,MAAM,EAAG,EAAsB,OAAO,YAAY,CAAC,CAAC,CACpD,MAAM,EAAE;CAEX,IAAI,EAAQ,WAAW,GAAG;CAE1B,IAAM,IAAa,EAAO,kCACpB,IAAa,EAAO;CAE1B,KAAK,IAAM,KAAO,GAAS;EACzB,IAAM,IAAa,EAAI;EACvB,IAAI;GACF,IAAI,IAAS,EAAI;GAEjB,IAAI,CAAC,GAAQ;IAEX,IAAM,KAAU,MADE,EAA2C,GAAY,CAAU,EAAA,EAC9D,eAAe;IACpC,AAAI,MACF,IAAS,GACT,MAAM,EACH,OAAO,CAAqB,CAAC,CAC7B,IAAI;KACH,iBAAiB;KACjB,UAAU;KACV,WAAW,KAAK,IAAI;IACtB,CAAC,CAAC,CACD,MAAM,EAAG,EAAsB,IAAI,EAAI,EAAG,CAAC;GAElD;GAEA,IAAM,IAAS,MAAM,EAAuB,GAAY,CAAU,GAC5D,IAAY,IAAS,KAAK,UAAU,CAAM,IAAI;GAEpD,IAAI,KAAU,EAA6B,CAAM,GAAG;IAClD,IAAM,IACJ,KACA,EAAO,YACP,EAAO,OAAO,YACd,EAAI,mBACJ;IAWF,AATI,KACF,MAAM,EAAiC;KACrC,aAAa,EAAI;KACjB,gBAAgB,EAAI;KACpB;KACA,iBAAiB;IACnB,CAAC,GAGH,MAAM,EACH,OAAO,CAAqB,CAAC,CAC7B,IAAI;KACH,OAAO;KACP,YAAY;KACZ,iBAAiB,KAAc,EAAI;KACnC,UAAU,EAAO,YAAY,EAAI;KACjC,WAAW,KAAK,IAAI;IACtB,CAAC,CAAC,CACD,MAAM,EAAG,EAAsB,IAAI,EAAI,EAAG,CAAC;IAC9C;GACF;GAEA,MAAM,EACH,OAAO,CAAqB,CAAC,CAC7B,IAAI;IACH,YAAY;IACZ,WAAW,KAAK,IAAI;GACtB,CAAC,CAAC,CACD,MAAM,EAAG,EAAsB,IAAI,EAAI,EAAG,CAAC;EAChD,SAAS,GAAK;GAEZ,AADA,EAAO,sBAAsB,EAAI,IAAI,CAAG,GACxC,MAAM,EACH,OAAO,CAAqB,CAAC,CAC7B,IAAI;IACH,cAAc,aAAe,QAAQ,EAAI,UAAU,OAAO,CAAG;IAC7D,WAAW,KAAK,IAAI;GACtB,CAAC,CAAC,CACD,MAAM,EAAG,EAAsB,IAAI,EAAI,EAAG,CAAC;EAChD;CACF;AACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seedprotocol/publish",
3
- "version": "0.6.1",
3
+ "version": "0.6.3",
4
4
  "description": "Publish UI components and helpers for Seed Protocol",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -34,14 +34,14 @@
34
34
  "scripts": {
35
35
  "build": "tsc -p tsconfig.build.json && vite build",
36
36
  "prepublishOnly": "npm run build && node ../../scripts/sync-versions.js",
37
- "test": "bun test src/helpers/arweave.test.ts src/helpers/defaultApprovedTargetsForModularPublish.test.ts src/helpers/ensureManagedAccountReady.test.ts src/helpers/ensureEip7702ModularAccountReady.test.ts src/helpers/ensureManagedSignerSessionKey.test.ts src/helpers/ensureModularPublishBootstrap.test.ts src/helpers/publishDisplayHelpers.test.ts src/services/publish/actors/createAttestationsRouting.test.ts src/services/publish/actors/seedUidHelpers.test.ts src/config.autoDeployEip7702.test.ts && bun test src/helpers/ensureSmartWalletThenPublish.test.ts && bun test src/helpers/ensureManagedAccountEasConfigured.test.ts && bun test src/services/domainOwnership/domainOwnership.test.ts && bun test src/services/publishAuthorization/publishAuthorization.test.ts && bun test src/helpers/approvedTargetsForAutomationPublish.test.ts && bun test src/helpers/easDirect.multiRevoke.test.ts && bun test src/helpers/ensureAutomationSessionKey.test.ts && bun test src/helpers/enrollPublishAutomation.test.ts && bun test src/helpers/assertStorageBoundToIdentity.test.ts"
37
+ "test": "bun test src/helpers/arweave.test.ts src/helpers/defaultApprovedTargetsForModularPublish.test.ts src/helpers/ensureManagedAccountReady.test.ts src/helpers/ensureEip7702ModularAccountReady.test.ts src/helpers/ensureManagedSignerSessionKey.test.ts src/helpers/ensureModularPublishBootstrap.test.ts src/helpers/publishDisplayHelpers.test.ts src/services/publish/actors/createAttestationsRouting.test.ts src/services/publish/actors/seedUidHelpers.test.ts src/config.autoDeployEip7702.test.ts && bun test src/helpers/ensureSmartWalletThenPublish.test.ts && bun test src/helpers/ensureManagedAccountEasConfigured.test.ts && bun test src/services/domainOwnership/domainOwnership.test.ts && bun test src/services/publishAuthorization/publishAuthorization.test.ts && bun test src/helpers/approvedTargetsForAutomationPublish.test.ts && bun test src/helpers/easDirect.multiRevoke.test.ts && bun test src/helpers/ensureAutomationSessionKey.test.ts && bun test src/helpers/enrollPublishAutomation.test.ts && bun test src/helpers/assertStorageBoundToIdentity.test.ts && bun test src/services/publishCost/estimatePublishCost.test.ts && bun test src/services/publishCost/watchPublishCost.test.ts"
38
38
  },
39
39
  "dependencies": {
40
40
  "@ethereum-attestation-service/eas-sdk": "^2.9.0",
41
- "@seedprotocol/arweave": "0.6.1",
42
- "@seedprotocol/eas": "0.6.1",
43
- "@seedprotocol/react": "0.6.1",
44
- "@seedprotocol/sdk": "0.6.1",
41
+ "@seedprotocol/arweave": "0.6.3",
42
+ "@seedprotocol/eas": "0.6.3",
43
+ "@seedprotocol/react": "0.6.3",
44
+ "@seedprotocol/sdk": "0.6.3",
45
45
  "@xstate/react": "^6.1.0",
46
46
  "arweave": "^1.15.7",
47
47
  "debug": "^4.4.1",