@artblocks/abx-effects 0.1.0-alpha.2 → 0.1.0-alpha.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +320 -0
- package/dist/harness.d.ts +75 -17
- package/dist/harness.d.ts.map +1 -1
- package/dist/harness.js +168 -26
- package/dist/harness.js.map +1 -1
- package/dist/main.js +20 -13
- package/dist/main.js.map +1 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +3 -1
- package/dist/render.js.map +1 -1
- package/package.json +4 -3
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
# @artblocks/abx-effects
|
|
2
|
+
|
|
3
|
+
## 0.1.0-alpha.21
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [c9f7aeb]
|
|
8
|
+
- @artblocks/abx-sdk@0.1.0-alpha.21
|
|
9
|
+
- @artblocks/abx-storage@0.1.0-alpha.21
|
|
10
|
+
|
|
11
|
+
## 0.1.0-alpha.20
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- Updated dependencies [84ca9dd]
|
|
16
|
+
- Updated dependencies [84ca9dd]
|
|
17
|
+
- @artblocks/abx-sdk@0.1.0-alpha.20
|
|
18
|
+
- @artblocks/abx-storage@0.1.0-alpha.20
|
|
19
|
+
|
|
20
|
+
## 0.1.0-alpha.19
|
|
21
|
+
|
|
22
|
+
### Patch Changes
|
|
23
|
+
|
|
24
|
+
- Updated dependencies [b1c333d]
|
|
25
|
+
- Updated dependencies [b1c333d]
|
|
26
|
+
- @artblocks/abx-sdk@0.1.0-alpha.19
|
|
27
|
+
- @artblocks/abx-storage@0.1.0-alpha.19
|
|
28
|
+
|
|
29
|
+
## 0.1.0-alpha.18
|
|
30
|
+
|
|
31
|
+
### Patch Changes
|
|
32
|
+
|
|
33
|
+
- Updated dependencies [77a6248]
|
|
34
|
+
- Updated dependencies [77a6248]
|
|
35
|
+
- @artblocks/abx-sdk@0.1.0-alpha.18
|
|
36
|
+
- @artblocks/abx-storage@0.1.0-alpha.18
|
|
37
|
+
|
|
38
|
+
## 0.1.0-alpha.17
|
|
39
|
+
|
|
40
|
+
### Patch Changes
|
|
41
|
+
|
|
42
|
+
- Updated dependencies [c5b8ec3]
|
|
43
|
+
- Updated dependencies [5b29f53]
|
|
44
|
+
- @artblocks/abx-sdk@0.1.0-alpha.17
|
|
45
|
+
- @artblocks/abx-storage@0.1.0-alpha.17
|
|
46
|
+
|
|
47
|
+
## 0.1.0-alpha.16
|
|
48
|
+
|
|
49
|
+
### Patch Changes
|
|
50
|
+
|
|
51
|
+
- Updated dependencies [9c287c0]
|
|
52
|
+
- Updated dependencies [b5744a1]
|
|
53
|
+
- Updated dependencies [9c287c0]
|
|
54
|
+
- @artblocks/abx-sdk@0.1.0-alpha.16
|
|
55
|
+
- @artblocks/abx-storage@0.1.0-alpha.16
|
|
56
|
+
|
|
57
|
+
## 0.1.0-alpha.15
|
|
58
|
+
|
|
59
|
+
### Patch Changes
|
|
60
|
+
|
|
61
|
+
- Updated dependencies [7fec2d7]
|
|
62
|
+
- @artblocks/abx-sdk@0.1.0-alpha.15
|
|
63
|
+
- @artblocks/abx-storage@0.1.0-alpha.15
|
|
64
|
+
|
|
65
|
+
## 0.1.0-alpha.14
|
|
66
|
+
|
|
67
|
+
### Patch Changes
|
|
68
|
+
|
|
69
|
+
- Updated dependencies [1b6b741]
|
|
70
|
+
- Updated dependencies [1b6b741]
|
|
71
|
+
- Updated dependencies [1b6b741]
|
|
72
|
+
- Updated dependencies [1b6b741]
|
|
73
|
+
- Updated dependencies [1b6b741]
|
|
74
|
+
- Updated dependencies [1b6b741]
|
|
75
|
+
- Updated dependencies [f64a31f]
|
|
76
|
+
- Updated dependencies [1b6b741]
|
|
77
|
+
- Updated dependencies [1b6b741]
|
|
78
|
+
- Updated dependencies [1b6b741]
|
|
79
|
+
- Updated dependencies [1b6b741]
|
|
80
|
+
- Updated dependencies [1b6b741]
|
|
81
|
+
- Updated dependencies [1b6b741]
|
|
82
|
+
- Updated dependencies [1b6b741]
|
|
83
|
+
- Updated dependencies [1b6b741]
|
|
84
|
+
- Updated dependencies [1b6b741]
|
|
85
|
+
- Updated dependencies [1b6b741]
|
|
86
|
+
- @artblocks/abx-sdk@0.1.0-alpha.14
|
|
87
|
+
- @artblocks/abx-storage@0.1.0-alpha.14
|
|
88
|
+
|
|
89
|
+
## 0.1.0-alpha.13
|
|
90
|
+
|
|
91
|
+
### Patch Changes
|
|
92
|
+
|
|
93
|
+
- Updated dependencies [528c6c6]
|
|
94
|
+
- @artblocks/abx-sdk@0.1.0-alpha.13
|
|
95
|
+
- @artblocks/abx-storage@0.1.0-alpha.13
|
|
96
|
+
|
|
97
|
+
## 0.1.0-alpha.12
|
|
98
|
+
|
|
99
|
+
### Patch Changes
|
|
100
|
+
|
|
101
|
+
- Updated dependencies [afa9dd4]
|
|
102
|
+
- Updated dependencies [8c254d5]
|
|
103
|
+
- @artblocks/abx-sdk@0.1.0-alpha.12
|
|
104
|
+
- @artblocks/abx-storage@0.1.0-alpha.12
|
|
105
|
+
|
|
106
|
+
## 0.1.0-alpha.11
|
|
107
|
+
|
|
108
|
+
### Patch Changes
|
|
109
|
+
|
|
110
|
+
- Updated dependencies [d40caf4]
|
|
111
|
+
- Updated dependencies [d40caf4]
|
|
112
|
+
- @artblocks/abx-sdk@0.1.0-alpha.11
|
|
113
|
+
- @artblocks/abx-storage@0.1.0-alpha.11
|
|
114
|
+
|
|
115
|
+
## 0.1.0-alpha.10
|
|
116
|
+
|
|
117
|
+
### Patch Changes
|
|
118
|
+
|
|
119
|
+
- 11fa933: The remaining phases of the simplification refactor that hadn't yet gotten a changeset: the CLI's
|
|
120
|
+
internal module split, the token-api/effects/mint-page convergence on the SDK, the shipped skill's
|
|
121
|
+
rewrite for the simplified surface, and a new SDK README.
|
|
122
|
+
|
|
123
|
+
- **`abx`'s `main.ts` split into domain command modules** (`commands/{deploy,project,reads,service,
|
|
124
|
+
scaffold,storage}.ts`, shared `output.ts`/`errors.ts`), with one exit-discipline rule
|
|
125
|
+
(`process.exitCode` + return, or a typed `CliError`, everywhere — bare `process.exit` only at the
|
|
126
|
+
entry guard, the top-level catch, and the keep-alive SIGINT handler). Purely internal: a 207-fixture
|
|
127
|
+
byte-diff matrix (every help text, dry-run, error path, and exit code) confirmed identical output
|
|
128
|
+
before and after.
|
|
129
|
+
- **token-api / effects / mint-page converge on the SDK**: `@artblocks/abx-storage` gains one
|
|
130
|
+
`resolveGatewayBase` (`readiness.ts`), replacing three near-identical copies (two in token-api, one
|
|
131
|
+
inline in storage itself); token-api exports `buildGeneratorDocument` so the CLI's `abx preview`
|
|
132
|
+
consumes the real generator-document assembler instead of a hand-kept duplicate; the effects runner
|
|
133
|
+
now resolves its config via the SDK's `readEnv` and gets a `makePublicClient` fallback transport, so
|
|
134
|
+
`ABX_RPC_URL` accepts a comma-separated failover list like every other RPC var; the scaffolded
|
|
135
|
+
mint-page app now imports ABIs from `@artblocks/abx-sdk/abi` and a browser-safe `makePublicClient` +
|
|
136
|
+
typed `readSaleConfig` instead of hand-rolled fetch/decode, and pins its generated `package.json` to
|
|
137
|
+
the SDK's _resolved_ version via a new `@artblocks/abx-sdk/package.json` export (alpha version
|
|
138
|
+
counters diverge per package under changesets, so pinning the CLI's own number could produce an
|
|
139
|
+
unsatisfiable range).
|
|
140
|
+
- **The shipped skill (`.claude/skills/abx-self-host/`) is rewritten for the surface phases 0–5
|
|
141
|
+
actually shipped**: every warning made obsolete by an enforcement is deleted rather than softened —
|
|
142
|
+
predict-only deploy-preview addresses, the `approvals N` line, the single `ABX_REMOTE_SELF_*`
|
|
143
|
+
credential grammar, `doctor`'s version/provenance ladder, `storage show --check`, the render/storage
|
|
144
|
+
combo validator's dry-run row, and `ABX_DEPLOYER_PK` as the only key name. Retired names swept from
|
|
145
|
+
`dev-loop-test`, the agent-eval scenarios, and spec prose. The skill ships bundled inside this CLI
|
|
146
|
+
package (co-versioned via `SKILL.md` frontmatter), so it rides this same patch.
|
|
147
|
+
- **New `packages/sdk/README.md`**: what the SDK is, the send-injection model (`PreparedTx` +
|
|
148
|
+
`SendTx`, `makeHotSender` for a hot key, bring-your-own for a wallet/multisig), a complete
|
|
149
|
+
deploy → upload → mint → read walkthrough against real exports, and browser-use notes (explicit
|
|
150
|
+
`rpcUrls`, no env, the `/node` subpath is Node-only). Included in the npm tarball automatically
|
|
151
|
+
(README is one of the files npm always packs, regardless of the `files` allowlist).
|
|
152
|
+
|
|
153
|
+
- 11fa933: Phase 1 of the simplification refactor: one transaction shape with one send-injection point, and an SDK that never touches `.env` or a Node-only global on its own. Two related passes, same release.
|
|
154
|
+
|
|
155
|
+
**One transaction shape, one executor.** `StagingTx`/`SendStagingTx` are gone — everything is a `PreparedTx` sent through a single `SendTx`. New `execute.ts` carries `makeHotSender` (pins the nonce once, detects an under-estimated gas limit against a just-deployed target, throws a typed `TxRevertedError` instead of reporting a reverted tx as confirmed) plus `pinGas`/`waitForCodeAt`, moved from the CLI (`gas.ts` is gone) with their design comments intact. Every `deployX` is now `prepareDeployX` (pure) + `deployX(send, ...)`; the CLI's hot lane and `abx deploy-code --resume` both delegate to the same sender instead of hand-rolling their own nonce/gas loop — the class of bug that reported a burned, reverted transaction as a successful deploy can't recur in a second call site because there is no longer a second implementation.
|
|
156
|
+
|
|
157
|
+
**The SDK never loads `.env` implicitly.** `loadDotEnv`/`parseEnvContent` moved to a new `@artblocks/abx-sdk/node` subpath — the only module that touches `node:fs`/`node:path`. The package's main entry is now browser-bundle-safe (a permanent esbuild smoke test guards it); a host calls `loadDotEnv()` once at startup (the CLI's `main()`, the effects runner's `main()`) and the SDK core reads whatever's already in `process.env` through a tiny `readEnv` that no-ops outside Node. `ClientOptions` gained `rpcUrls?: string[]` and `makeWalletClient`/`envSigningKey` gained a `privateKey`/`override` escape — explicit config now wins outright over env resolution, following the same override → env → manifest precedence `deployments.ts` already used for contract addresses.
|
|
158
|
+
|
|
159
|
+
**Single signing-key name.** `ABX_DEPLOYER_PK` is the only env var the SDK reads for a hot key — `SEPOLIA_FUNDED_PK` and `SEPOLIA_WALLET_PK` (earlier-alpha names) are no longer consulted. A caller with one of the old names set now gets a `MissingSigningKeyError` that names the new one explicitly and says the old ones are retired, rather than a plain "no key found" that leaves an upgrader hunting for why a key that's clearly _there_ isn't being read. Sandbox/e2e scripts and test fixtures move to the new name too.
|
|
160
|
+
|
|
161
|
+
**Shared, environment-neutral utilities.** New `sdk/src/util.ts`: `sleep`, a `linearBackoffDelay` helper (service.ts's retry ladder and the effects runner's resolver poll both use it now instead of hand-rolled backoff math), `parseDataUri` (replaces three near-identical `data:` URI regexes across the CLI and the tokenURI probe with one permissive parser), and `tryReadContract` (replaces three near-identical try/read-return-undefined helpers; the CLI's "no contract at this address" diagnostic still wraps it where that mattered). `Buffer` is gone from the SDK core (chunk hex-encoding and param base64-encoding now use viem's `bytesToHex` and a ~12-line dependency-free base64 codec) — nothing in the SDK's main import graph is Node-only any more.
|
|
162
|
+
|
|
163
|
+
- Updated dependencies [11fa933]
|
|
164
|
+
- Updated dependencies [11fa933]
|
|
165
|
+
- Updated dependencies [11fa933]
|
|
166
|
+
- Updated dependencies [11fa933]
|
|
167
|
+
- @artblocks/abx-sdk@0.1.0-alpha.10
|
|
168
|
+
- @artblocks/abx-storage@0.1.0-alpha.10
|
|
169
|
+
|
|
170
|
+
## 0.1.0-alpha.9
|
|
171
|
+
|
|
172
|
+
### Patch Changes
|
|
173
|
+
|
|
174
|
+
- Updated dependencies [df298d8]
|
|
175
|
+
- Updated dependencies [df298d8]
|
|
176
|
+
- Updated dependencies [df298d8]
|
|
177
|
+
- @artblocks/abx-sdk@0.1.0-alpha.9
|
|
178
|
+
- @artblocks/abx-storage@0.1.0-alpha.9
|
|
179
|
+
|
|
180
|
+
## 0.1.0-alpha.8
|
|
181
|
+
|
|
182
|
+
### Patch Changes
|
|
183
|
+
|
|
184
|
+
- Updated dependencies [e325b46]
|
|
185
|
+
- @artblocks/abx-sdk@0.1.0-alpha.8
|
|
186
|
+
- @artblocks/abx-storage@0.1.0-alpha.8
|
|
187
|
+
|
|
188
|
+
## 0.1.0-alpha.7
|
|
189
|
+
|
|
190
|
+
### Patch Changes
|
|
191
|
+
|
|
192
|
+
- Updated dependencies [1b50f9d]
|
|
193
|
+
- Updated dependencies [1b50f9d]
|
|
194
|
+
- @artblocks/abx-sdk@0.1.0-alpha.7
|
|
195
|
+
- @artblocks/abx-storage@0.1.0-alpha.7
|
|
196
|
+
|
|
197
|
+
## 0.1.0-alpha.6
|
|
198
|
+
|
|
199
|
+
### Patch Changes
|
|
200
|
+
|
|
201
|
+
- Updated dependencies [1158420]
|
|
202
|
+
- Updated dependencies [1158420]
|
|
203
|
+
- Updated dependencies [1158420]
|
|
204
|
+
- @artblocks/abx-sdk@0.1.0-alpha.6
|
|
205
|
+
- @artblocks/abx-storage@0.1.0-alpha.6
|
|
206
|
+
|
|
207
|
+
## 0.1.0-alpha.5
|
|
208
|
+
|
|
209
|
+
### Minor Changes
|
|
210
|
+
|
|
211
|
+
- feba8c2: A resolver is no longer an object store: effect outputs split into **bound** and **referenced**
|
|
212
|
+
(`specs/protocol/effects.md → Bound vs referenced`), and the artifact registry enforces the split.
|
|
213
|
+
|
|
214
|
+
An output is **bound** iff a binding stitches its _content_ into the metadata JSON (today exactly
|
|
215
|
+
`render/traits` → `attributes`); everything else is **referenced** — the projection carries its URL,
|
|
216
|
+
or it only appears in the `artifacts` manifest. That one distinction decides who holds the bytes, and
|
|
217
|
+
it is now the wire rule rather than a runner constant.
|
|
218
|
+
|
|
219
|
+
- **`POST /v1/effect-artifacts` derives the mode from the binding, and refuses both mismatches.**
|
|
220
|
+
Bytes for a referenced output → `400` (the resolver redirects either way, so the bytes buy no
|
|
221
|
+
capability and cost it storage, retention and egress). A locator for a bound output → `400` (its
|
|
222
|
+
content is assembled into `tokenURI`; a pointer there used to be recorded and then silently never
|
|
223
|
+
stitch — a wrong answer served confidently). Bound content is capped at **64 KB**, and a locator
|
|
224
|
+
that only the producer could resolve (loopback/private host, presigned expiring URL) is rejected.
|
|
225
|
+
The resolver never fetches a locator while handling the write, and serves registered locators by
|
|
226
|
+
`302` — never by proxying.
|
|
227
|
+
- **Bound content moved out of byte custody** into the artifact row (`effect_artifacts.bytes`). Two
|
|
228
|
+
distinct rules, deliberately not one: a node **MUST** serve and stitch bound content only at the
|
|
229
|
+
token's current settled `inputsHash`, and it **MAY** drop superseded content whenever it likes
|
|
230
|
+
(nothing may read it, and it is re-creatable). The reference drops eagerly, on each bound
|
|
231
|
+
registration, so it holds at most `64 KB × minted × bound outputs` — but retention is a service
|
|
232
|
+
policy, not an obligation. Either way "conforming means holding a bounded amount of JSON in the
|
|
233
|
+
database you already run" is now literally true: a resolver in the publish topology needs no object
|
|
234
|
+
storage at all.
|
|
235
|
+
- **`abx-effects-publish/v1` is gone** (not deprecated): the two routes ride `abx-control-plane/v1`.
|
|
236
|
+
Once referenced output is locator-only, accepting a registration is a database insert, so the
|
|
237
|
+
capability flag described a distinction that no longer exists. A service that won't take a caller's
|
|
238
|
+
artifacts refuses on the credential (`403`) — interfaces describe wire grammar, tokens describe
|
|
239
|
+
permission. The interface ids are also explicitly **all-or-nothing**, and the conformance fixture
|
|
240
|
+
now checks that every route a declared interface names actually answers.
|
|
241
|
+
- **The runner declares bound outputs** (`EffectOutputDecl.bound`), refuses to start when it has a
|
|
242
|
+
publish token but a backend that can't name a locator, preflights the descriptor + credential
|
|
243
|
+
before spending a render, and **latches** on a permanent (4xx) publish failure instead of
|
|
244
|
+
re-rendering every sweep forever. Skips now re-register rows, so a transient publish failure heals
|
|
245
|
+
without a re-render.
|
|
246
|
+
- **The CLI refuses the impossible combination up front**: `abx render --remote`, `abx effects`
|
|
247
|
+
against a remote resolver, and `abx deploy-effects` all require a backend that can name a reachable
|
|
248
|
+
URL — `cloud` (S3/R2 + public base), `ipfs`, or `arweave`, named as **peers**. Derived output is
|
|
249
|
+
re-creatable, so the protocol has no preference among schemes: a chosen `https://` gateway or
|
|
250
|
+
bucket URL is exactly as legitimate as `ipfs://`/`ar://`, and reachability — not durability — is
|
|
251
|
+
the requirement. Rendering **co-located** with the resolver remains fully supported on any backend,
|
|
252
|
+
including `fs`.
|
|
253
|
+
|
|
254
|
+
Breaking for producers that relied on pushing media bytes to a resolver: publish a locator instead,
|
|
255
|
+
or co-locate. Breaking for clients that read `abx-effects-publish/v1` from a descriptor.
|
|
256
|
+
|
|
257
|
+
### Patch Changes
|
|
258
|
+
|
|
259
|
+
- Updated dependencies [feba8c2]
|
|
260
|
+
- @artblocks/abx-sdk@0.1.0-alpha.5
|
|
261
|
+
- @artblocks/abx-storage@0.1.0-alpha.5
|
|
262
|
+
|
|
263
|
+
## 0.1.0-alpha.4
|
|
264
|
+
|
|
265
|
+
### Patch Changes
|
|
266
|
+
|
|
267
|
+
- Updated dependencies [67b686b]
|
|
268
|
+
- @artblocks/abx-sdk@0.1.0-alpha.4
|
|
269
|
+
- @artblocks/abx-storage@0.1.0-alpha.4
|
|
270
|
+
|
|
271
|
+
## 0.1.0-alpha.3
|
|
272
|
+
|
|
273
|
+
### Patch Changes
|
|
274
|
+
|
|
275
|
+
- Updated dependencies [a72723d]
|
|
276
|
+
- @artblocks/abx-sdk@0.1.0-alpha.3
|
|
277
|
+
- @artblocks/abx-storage@0.1.0-alpha.3
|
|
278
|
+
|
|
279
|
+
## 0.1.0-alpha.2
|
|
280
|
+
|
|
281
|
+
### Minor Changes
|
|
282
|
+
|
|
283
|
+
- 3745bd3: Remote services are first-class: a provider-neutral control plane, named remotes, and a service
|
|
284
|
+
descriptor (specs/self-host-toolkit/remote-services.md).
|
|
285
|
+
|
|
286
|
+
- **Control plane moves to `/v1`** (hard cutover; `/admin/*` is gone — redeploy self-hosted nodes):
|
|
287
|
+
`POST/GET /v1/projects`, `DELETE|reindex|status /v1/projects/{chainId}/{address}`,
|
|
288
|
+
`POST /v1/effect-artifacts|effect-status`. `chainId` is explicit and validated everywhere; every
|
|
289
|
+
error carries a machine `code` (`unauthorized` 401 · `forbidden` 403 · `unsupported_chain` ·
|
|
290
|
+
`not_registered` · `disabled`) replacing the old prose-sniffed 404. One bearer guard replaces the
|
|
291
|
+
four inline copies; OPTIONS preflight now answers so browser clients can send `Authorization`.
|
|
292
|
+
- **`GET /.well-known/abx-service`** — the public service descriptor: `interfaces` (present iff
|
|
293
|
+
actually enabled), `chains`, `auth` (with optional provider-set `signupUrl`/`docsUrl` via
|
|
294
|
+
`ABX_SERVICE_*` env), and `render.attached` (managed rendering, probed from the runner's
|
|
295
|
+
`/health`) — so an agent can match a project to a provider before registering.
|
|
296
|
+
- **Named remotes in the CLI**: `--remote <name>` reads `ABX_REMOTE_<NAME>_URL`/`_TOKEN`
|
|
297
|
+
(a managed provider's per-account key — never falls back to `ABX_RESOLVER_ADMIN_TOKEN`);
|
|
298
|
+
`--remote <url> [--remote-token <t>]` for ad-hoc targets; bare `--remote` stays the self-host
|
|
299
|
+
default. New `abx remote [name|url]` inspects a service's descriptor and the projects a token
|
|
300
|
+
sees. `migrate --from/--to` accept names; only the destination needs a credential.
|
|
301
|
+
- **The SDK gains its first HTTP surface**: `AbxServiceClient` (endpoint + injected bearer, retry
|
|
302
|
+
on 5xx/network, immediate typed `AbxServiceError` on 4xx) — shared by the CLI and the effects
|
|
303
|
+
runner's publish lane. `envSuffix()` is the shared env-name normalization.
|
|
304
|
+
- **Conformance fixture**: `pnpm conformance -- <base-url> [--token …]` self-verifies any
|
|
305
|
+
implementation; the e2e suite runs it against the reference container.
|
|
306
|
+
|
|
307
|
+
### Patch Changes
|
|
308
|
+
|
|
309
|
+
- Updated dependencies [3745bd3]
|
|
310
|
+
- Updated dependencies [3745bd3]
|
|
311
|
+
- @artblocks/abx-sdk@0.1.0-alpha.2
|
|
312
|
+
- @artblocks/abx-storage@0.1.0-alpha.2
|
|
313
|
+
|
|
314
|
+
## 0.1.0-alpha.1
|
|
315
|
+
|
|
316
|
+
### Patch Changes
|
|
317
|
+
|
|
318
|
+
- Updated dependencies [4074766]
|
|
319
|
+
- @artblocks/abx-sdk@0.1.0-alpha.1
|
|
320
|
+
- @artblocks/abx-storage@0.1.0-alpha.1
|
package/dist/harness.d.ts
CHANGED
|
@@ -35,6 +35,21 @@ export interface EffectContext {
|
|
|
35
35
|
export interface EffectOutputDecl {
|
|
36
36
|
key: string;
|
|
37
37
|
mimeType: string;
|
|
38
|
+
/**
|
|
39
|
+
* This output's content stitches into the metadata JSON (`specs/protocol/effects.md → Bound vs
|
|
40
|
+
* referenced`) — `traits` today. Bound output is published as capped inline **bytes**, because a
|
|
41
|
+
* locator can't work: the resolver assembles the content into `tokenURI`, so a pointer there would
|
|
42
|
+
* put a third-party fetch on its hottest read.
|
|
43
|
+
*
|
|
44
|
+
* Everything else is **referenced**: the PRODUCER holds the bytes and publishes a reachable
|
|
45
|
+
* locator. The resolver serves referenced output by redirect either way, so handing it the bytes
|
|
46
|
+
* buys no capability and costs it an object store — it refuses them with a `400`.
|
|
47
|
+
*
|
|
48
|
+
* Declared here, next to the mimeType, for the same reason the type is: the serving side must not
|
|
49
|
+
* have to guess. A declaration the resolver doesn't share (an effect whose bindings it doesn't
|
|
50
|
+
* implement) is refused loudly rather than stored unservable.
|
|
51
|
+
*/
|
|
52
|
+
bound?: boolean;
|
|
38
53
|
}
|
|
39
54
|
export interface EffectModule {
|
|
40
55
|
/** Lowercase dot-namespaced effect key (`render`, `inference.caption`, …). */
|
|
@@ -44,9 +59,10 @@ export interface EffectModule {
|
|
|
44
59
|
run(ctx: EffectContext): Promise<Record<string, EffectOutput | null>>;
|
|
45
60
|
}
|
|
46
61
|
/** One artifact registration — the row a runner records (co-located, via `recordArtifact`) or
|
|
47
|
-
*
|
|
48
|
-
* token's data plane without learning any effect's internals. `locator === null` means the
|
|
49
|
-
*
|
|
62
|
+
* registers (`/v1/effect-artifacts`) per declared output, so the resolver can enumerate the
|
|
63
|
+
* token's data plane without learning any effect's internals. `locator === null` means the content
|
|
64
|
+
* isn't reached by pointer: a BOUND output (held with the row / stitched into the JSON), or a
|
|
65
|
+
* co-located producer's bytes in the shared backend at `key`. */
|
|
50
66
|
export interface EffectArtifactRecord {
|
|
51
67
|
key: Hex;
|
|
52
68
|
address: string;
|
|
@@ -64,13 +80,17 @@ export interface RunnerOptions {
|
|
|
64
80
|
storage: StorageBackend;
|
|
65
81
|
effects: EffectModule[];
|
|
66
82
|
environmentId?: string;
|
|
67
|
-
/** When set,
|
|
83
|
+
/** When set, register each artifact with the resolver's control plane
|
|
68
84
|
* (POST /v1/effect-artifacts) so a resolver that does NOT share this backend's disk can serve it
|
|
69
|
-
* — a
|
|
70
|
-
*
|
|
85
|
+
* — a locator for referenced output, capped content for bound output
|
|
86
|
+
* (`specs/protocol/effects.md → Bound vs referenced`). Requires a backend that exposes a locator;
|
|
87
|
+
* the constructor refuses otherwise. Bearer only; never signs on-chain. Omit for the co-located
|
|
88
|
+
* topology (runner + resolver share one backend). */
|
|
71
89
|
adminToken?: string;
|
|
72
|
-
/**
|
|
73
|
-
* idempotent
|
|
90
|
+
/** Re-register artifacts that already exist in storage (not just freshly-rendered ones) — the
|
|
91
|
+
* idempotent repair that restores a resolver which lost its rows, and that lands a publish which
|
|
92
|
+
* failed transiently after the bytes were stored. **Default on** with `adminToken` (it costs a
|
|
93
|
+
* presence probe and a locator string); pass `false` to opt out. */
|
|
74
94
|
republish?: boolean;
|
|
75
95
|
/** Co-located topology: record each declared output into the resolver's artifact registry
|
|
76
96
|
* directly (the shared SQLite store) — the enumeration surface the manifest lists. Recorded on
|
|
@@ -109,6 +129,17 @@ export declare class EffectRunner {
|
|
|
109
129
|
private readonly pending;
|
|
110
130
|
private draining;
|
|
111
131
|
private idleWaiters;
|
|
132
|
+
/**
|
|
133
|
+
* Set once a publish fails for a reason retrying can't fix (a 4xx, an unusable locator). While
|
|
134
|
+
* latched, the runner renders NOTHING: a render whose publish can't land is a render that this
|
|
135
|
+
* runner's own idempotency probe will ask for again on the next sweep, and every sweep after —
|
|
136
|
+
* so continuing would burn Chromium and storage indefinitely to produce an artifact nobody can
|
|
137
|
+
* serve. One actionable error beats an infinite quiet loop. Cleared by fixing the config and
|
|
138
|
+
* restarting, or by an explicit `force` (the operator asserting they've fixed it).
|
|
139
|
+
*/
|
|
140
|
+
private publishLatch;
|
|
141
|
+
/** The startup handshake, run once and reused (see {@link preflight}). */
|
|
142
|
+
private preflightOnce;
|
|
112
143
|
constructor(opts: RunnerOptions);
|
|
113
144
|
/** Merge a notification into the queue and kick the drain. Returns the queue depth. */
|
|
114
145
|
enqueue(address: string, tokenIds?: string[], force?: boolean): number;
|
|
@@ -121,9 +152,23 @@ export declare class EffectRunner {
|
|
|
121
152
|
private drain;
|
|
122
153
|
/** All projects the resolver serves → sweep each code project. */
|
|
123
154
|
sweepAll(): Promise<SweepStats>;
|
|
155
|
+
/**
|
|
156
|
+
* The startup handshake for the publish topology — run once, before any render, so a
|
|
157
|
+
* misconfiguration costs a round trip instead of a Chromium launch. Checks the two things a
|
|
158
|
+
* producer can know up front:
|
|
159
|
+
*
|
|
160
|
+
* - the descriptor declares `abx-control-plane/v1` (which now carries the artifact-registry
|
|
161
|
+
* routes — there is no separate publish capability to negotiate) and serves our chain;
|
|
162
|
+
* - our credential actually works, via one authenticated control-plane read.
|
|
163
|
+
*
|
|
164
|
+
* A service's capabilities and a caller's permissions should never be discoverable only by
|
|
165
|
+
* crashing after the expensive part. Descriptor trouble is a WARNING (a node may be older than
|
|
166
|
+
* this field, and the publish still works); a definitive credential rejection latches.
|
|
167
|
+
*/
|
|
168
|
+
private preflight;
|
|
124
169
|
/** Sweep one project: run every effect for every token whose current output is missing.
|
|
125
170
|
* `opts.force` re-renders even when the current output already exists (the repair lane for a
|
|
126
|
-
* bad/blank/timed-out capture — the
|
|
171
|
+
* bad/blank/timed-out capture — the render is otherwise deterministic, so a normal sweep skips it). */
|
|
127
172
|
sweepProject(address: string, tokenIds?: string[], opts?: {
|
|
128
173
|
force?: boolean;
|
|
129
174
|
}): Promise<SweepStats>;
|
|
@@ -135,17 +180,30 @@ export declare class EffectRunner {
|
|
|
135
180
|
* is never here — it stays artifact-presence at the settled inputsHash. */
|
|
136
181
|
private reportStatus;
|
|
137
182
|
/**
|
|
138
|
-
*
|
|
139
|
-
* backend's disk can serve it.
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
*
|
|
183
|
+
* Register one stored output with the resolver's control plane so a node that doesn't share this
|
|
184
|
+
* backend's disk can serve it. The form follows the output's DECLARED class
|
|
185
|
+
* (`specs/protocol/effects.md → Bound vs referenced`), and the resolver enforces the same rule
|
|
186
|
+
* from its side — this is one contract, not a preference on either end:
|
|
187
|
+
*
|
|
188
|
+
* - **bound** (`traits`) → the content, capped. The resolver stitches it into the token JSON.
|
|
189
|
+
* - **referenced** (`image`, `print`, …) → a reachable locator from THIS backend. We hold the
|
|
190
|
+
* bytes; the resolver holds a pointer and redirects. If the backend can't produce a locator
|
|
191
|
+
* there is no legal publish, and that is a configuration error we refuse to paper over —
|
|
192
|
+
* the constructor's boot guard normally catches it before a single render is spent.
|
|
193
|
+
*
|
|
194
|
+
* `contentType` is the DECLARED mimeType.
|
|
143
195
|
*/
|
|
144
196
|
private publishArtifact;
|
|
145
197
|
/** Record one artifact row into the co-located registry (`RunnerOptions.recordArtifact`). */
|
|
146
198
|
private record;
|
|
147
|
-
/**
|
|
148
|
-
*
|
|
199
|
+
/**
|
|
200
|
+
* Re-register already-stored outputs for (effect, token) at the current inputsHash — no re-render.
|
|
201
|
+
* Cheap now that referenced output travels as a pointer: a presence probe plus a locator string,
|
|
202
|
+
* no byte read (only a bound output's small content is read). That is why it runs on every skip in
|
|
203
|
+
* the publish topology rather than being opt-in: it self-heals a resolver that lost its rows AND —
|
|
204
|
+
* the case that matters more — a publish that failed transiently after the bytes had already
|
|
205
|
+
* landed here, which the "is the artifact stored?" ledger would otherwise mark done forever.
|
|
206
|
+
*/
|
|
149
207
|
private republishFromStorage;
|
|
150
208
|
/** Re-record registry rows for outputs already stored at the current inputsHash — presence probes
|
|
151
209
|
* only, no byte reads, no re-render. The deterministic-image lane records its stable public URL
|
|
@@ -170,7 +228,7 @@ export declare class EffectRunner {
|
|
|
170
228
|
* substituted URL lives under that public base. Then the still is written to the exact object the
|
|
171
229
|
* on-chain pointer names (`<publicBase>/<objectKey>`) — marketplaces read the on-chain tokenURI →
|
|
172
230
|
* this URL, never a resolver, and the URL is stable across re-renders (the pixels change, the
|
|
173
|
-
* pointer doesn't → no chain write to update
|
|
231
|
+
* pointer doesn't → no chain write to update content). Any other host → null (the normal locator lane).
|
|
174
232
|
*/
|
|
175
233
|
private deterministicImageTarget;
|
|
176
234
|
private getState;
|
package/dist/harness.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../src/harness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,MAAM,EAAC,MAAM,WAAW,CAAC;AAEpD,OAAO,
|
|
1
|
+
{"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../src/harness.ts"],"names":[],"mappings":"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"}
|
package/dist/harness.js
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { createServer } from 'node:http';
|
|
2
2
|
import { hexToString } from 'viem';
|
|
3
|
-
import { AbxServiceClient, buildTokenData, contentDigestOf, inputsHash, isCodeProject, renderArtifactKey, } from '@artblocks/abx-sdk';
|
|
3
|
+
import { AbxServiceClient, BOUND_ARTIFACT_MAX_BYTES, CONTROL_PLANE_INTERFACE, buildTokenData, contentDigestOf, inputsHash, isCodeProject, linearBackoffDelay, locatorRejectionReason, renderArtifactKey, sleep, } from '@artblocks/abx-sdk';
|
|
4
4
|
/** Give up on an artifact key after this many failed runs (a deterministically-crashing script
|
|
5
5
|
* must not hot-loop). In-memory: a runner restart, a NEW inputsHash (the state changed), or an
|
|
6
6
|
* explicit `force` all reset it. The failure itself is reported to the resolver with the error. */
|
|
7
7
|
const MAX_ATTEMPTS = 3;
|
|
8
|
-
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
|
|
8
|
+
/** A publish that failed for a reason retrying can't fix (400/403/404 — the wrong shape, a token
|
|
9
|
+
* that isn't allowed to write, a route the service doesn't serve). Distinct from a transient one
|
|
10
|
+
* because the response is opposite: stop, don't back off. See {@link EffectRunner.publishLatch}. */
|
|
11
|
+
class PublishConfigError extends Error {
|
|
12
|
+
}
|
|
12
13
|
export class EffectRunner {
|
|
13
14
|
opts;
|
|
14
15
|
log;
|
|
@@ -23,10 +24,31 @@ export class EffectRunner {
|
|
|
23
24
|
pending = new Map();
|
|
24
25
|
draining = false;
|
|
25
26
|
idleWaiters = [];
|
|
27
|
+
/**
|
|
28
|
+
* Set once a publish fails for a reason retrying can't fix (a 4xx, an unusable locator). While
|
|
29
|
+
* latched, the runner renders NOTHING: a render whose publish can't land is a render that this
|
|
30
|
+
* runner's own idempotency probe will ask for again on the next sweep, and every sweep after —
|
|
31
|
+
* so continuing would burn Chromium and storage indefinitely to produce an artifact nobody can
|
|
32
|
+
* serve. One actionable error beats an infinite quiet loop. Cleared by fixing the config and
|
|
33
|
+
* restarting, or by an explicit `force` (the operator asserting they've fixed it).
|
|
34
|
+
*/
|
|
35
|
+
publishLatch = null;
|
|
36
|
+
/** The startup handshake, run once and reused (see {@link preflight}). */
|
|
37
|
+
preflightOnce = null;
|
|
26
38
|
constructor(opts) {
|
|
27
39
|
this.opts = opts;
|
|
28
40
|
this.log = opts.log ?? ((line) => console.log(`[effects] ${line}`));
|
|
29
41
|
this.service = opts.adminToken ? new AbxServiceClient({ baseUrl: opts.resolverUrl, token: opts.adminToken }) : null;
|
|
42
|
+
// Boot guard: in the publish topology (we don't share the resolver's disk), referenced output
|
|
43
|
+
// can ONLY reach it as a locator — so a backend that can't produce one has no lane, and every
|
|
44
|
+
// render would be wasted work ending in a 400. Refuse at construction, where the fix is cheap,
|
|
45
|
+
// rather than after the first expensive capture. (Enforcing beats warning: the prose version of
|
|
46
|
+
// this was the trap agents kept walking into.)
|
|
47
|
+
if (opts.adminToken && !opts.storage.locator) {
|
|
48
|
+
throw new Error(`this storage backend exposes no locator, so a remote resolver could never serve the renders it holds. ` +
|
|
49
|
+
`Either point the runner at a backend that does — cloud/S3 or R2 with a public base, ipfs, or arweave (peers; pick on operational grounds, not durability dogma) — ` +
|
|
50
|
+
`or run co-located with the resolver, sharing one backend and no admin token.`);
|
|
51
|
+
}
|
|
30
52
|
}
|
|
31
53
|
/** Merge a notification into the queue and kick the drain. Returns the queue depth. */
|
|
32
54
|
enqueue(address, tokenIds, force = false) {
|
|
@@ -95,15 +117,76 @@ export class EffectRunner {
|
|
|
95
117
|
}
|
|
96
118
|
return total;
|
|
97
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* The startup handshake for the publish topology — run once, before any render, so a
|
|
122
|
+
* misconfiguration costs a round trip instead of a Chromium launch. Checks the two things a
|
|
123
|
+
* producer can know up front:
|
|
124
|
+
*
|
|
125
|
+
* - the descriptor declares `abx-control-plane/v1` (which now carries the artifact-registry
|
|
126
|
+
* routes — there is no separate publish capability to negotiate) and serves our chain;
|
|
127
|
+
* - our credential actually works, via one authenticated control-plane read.
|
|
128
|
+
*
|
|
129
|
+
* A service's capabilities and a caller's permissions should never be discoverable only by
|
|
130
|
+
* crashing after the expensive part. Descriptor trouble is a WARNING (a node may be older than
|
|
131
|
+
* this field, and the publish still works); a definitive credential rejection latches.
|
|
132
|
+
*/
|
|
133
|
+
async preflight() {
|
|
134
|
+
if (!this.service)
|
|
135
|
+
return;
|
|
136
|
+
if (!this.preflightOnce) {
|
|
137
|
+
this.preflightOnce = (async () => {
|
|
138
|
+
try {
|
|
139
|
+
const d = await this.service.descriptor();
|
|
140
|
+
if (!d.interfaces?.includes(CONTROL_PLANE_INTERFACE)) {
|
|
141
|
+
this.log(`warning: ${this.opts.resolverUrl} declares no ${CONTROL_PLANE_INTERFACE} — publishes may be refused ` +
|
|
142
|
+
`(interfaces: ${d.interfaces?.join(', ') || 'none'})`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
this.log(`warning: could not read the service descriptor (${err.message}) — continuing`);
|
|
147
|
+
}
|
|
148
|
+
try {
|
|
149
|
+
await this.service.listProjects();
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
const status = err.status;
|
|
153
|
+
if (status === 401 || status === 403 || status === 404) {
|
|
154
|
+
this.publishLatch =
|
|
155
|
+
`the resolver at ${this.opts.resolverUrl} rejected our control-plane credential (${status}) — ` +
|
|
156
|
+
`renders would be published nowhere. Check the admin/remote token; nothing has been rendered.`;
|
|
157
|
+
this.log(`publish lane unavailable: ${this.publishLatch}`);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
this.log(`warning: control-plane preflight failed (${err.message}) — treating as transient`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
})();
|
|
164
|
+
}
|
|
165
|
+
return this.preflightOnce;
|
|
166
|
+
}
|
|
98
167
|
/** Sweep one project: run every effect for every token whose current output is missing.
|
|
99
168
|
* `opts.force` re-renders even when the current output already exists (the repair lane for a
|
|
100
|
-
* bad/blank/timed-out capture — the
|
|
169
|
+
* bad/blank/timed-out capture — the render is otherwise deterministic, so a normal sweep skips it). */
|
|
101
170
|
async sweepProject(address, tokenIds, opts) {
|
|
102
171
|
const stats = { ran: 0, skipped: 0, failed: 0, errors: [] };
|
|
172
|
+
if (opts?.force)
|
|
173
|
+
this.publishLatch = null; // the operator asserting the config is fixed
|
|
174
|
+
await this.preflight();
|
|
175
|
+
// Latched: render nothing and say why once. Reporting it as a failure (rather than a silent
|
|
176
|
+
// skip) is the point — `abx render` surfaces it, and a hosted runner's logs carry one
|
|
177
|
+
// actionable line instead of a re-render loop nobody notices until the bill arrives.
|
|
178
|
+
if (this.publishLatch) {
|
|
179
|
+
stats.failed += 1;
|
|
180
|
+
stats.errors.push(this.publishLatch);
|
|
181
|
+
this.log(`skipping ${address}: ${this.publishLatch}`);
|
|
182
|
+
return stats;
|
|
183
|
+
}
|
|
103
184
|
const state = await this.getState(address);
|
|
104
185
|
if (!state || !isCodeProject(state))
|
|
105
186
|
return stats;
|
|
106
|
-
const tokens = (tokenIds
|
|
187
|
+
const tokens = (tokenIds
|
|
188
|
+
? state.tokens.filter((t) => tokenIds.includes(t.tokenId) && t.lifecycle !== 'burned')
|
|
189
|
+
: state.tokens.filter((t) => t.lifecycle === 'live'))
|
|
107
190
|
// ascending — token 0 (the collection page / oldest listings) lands first on a big fan-out
|
|
108
191
|
.sort((a, b) => (BigInt(a.tokenId) < BigInt(b.tokenId) ? -1 : 1));
|
|
109
192
|
// An explicit token id that matched nothing minted is a no-op that must SAY so — not a silent
|
|
@@ -133,6 +216,13 @@ export class EffectRunner {
|
|
|
133
216
|
const line = `${item.effect.key} ${address}/${item.token.tokenId}: ${err.message}`;
|
|
134
217
|
stats.errors.push(line);
|
|
135
218
|
this.log(`${line} (failed)`);
|
|
219
|
+
// A publish that can't succeed by retrying stops the whole pool: every remaining token
|
|
220
|
+
// would render, fail the same way, and be re-rendered next sweep. Fix the config, restart.
|
|
221
|
+
if (err instanceof PublishConfigError) {
|
|
222
|
+
this.publishLatch = `${err.message} — rendering stopped; fix this and restart (or re-run with force)`;
|
|
223
|
+
this.log(`publish lane unavailable: ${this.publishLatch}`);
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
136
226
|
}
|
|
137
227
|
}
|
|
138
228
|
};
|
|
@@ -162,7 +252,7 @@ export class EffectRunner {
|
|
|
162
252
|
// current output exists — idempotent (no re-render). Republish from storage on request so a
|
|
163
253
|
// resolver that lost its volume can be restored without re-rendering (RunnerOptions.republish).
|
|
164
254
|
// (No republish in the deterministic lane: the bytes already live at the public S3 key.)
|
|
165
|
-
if (!detImg && this.opts.adminToken && this.opts.republish)
|
|
255
|
+
if (!detImg && this.opts.adminToken && this.opts.republish !== false)
|
|
166
256
|
await this.republishFromStorage(effect, state, token, hash);
|
|
167
257
|
// Registry repair lane: re-record rows for whatever is stored at the current hash — a cheap
|
|
168
258
|
// local upsert per output, so a wiped artifact registry self-heals on the next sweep.
|
|
@@ -254,14 +344,41 @@ export class EffectRunner {
|
|
|
254
344
|
}
|
|
255
345
|
}
|
|
256
346
|
/**
|
|
257
|
-
*
|
|
258
|
-
* backend's disk can serve it.
|
|
259
|
-
*
|
|
260
|
-
*
|
|
261
|
-
*
|
|
347
|
+
* Register one stored output with the resolver's control plane so a node that doesn't share this
|
|
348
|
+
* backend's disk can serve it. The form follows the output's DECLARED class
|
|
349
|
+
* (`specs/protocol/effects.md → Bound vs referenced`), and the resolver enforces the same rule
|
|
350
|
+
* from its side — this is one contract, not a preference on either end:
|
|
351
|
+
*
|
|
352
|
+
* - **bound** (`traits`) → the content, capped. The resolver stitches it into the token JSON.
|
|
353
|
+
* - **referenced** (`image`, `print`, …) → a reachable locator from THIS backend. We hold the
|
|
354
|
+
* bytes; the resolver holds a pointer and redirects. If the backend can't produce a locator
|
|
355
|
+
* there is no legal publish, and that is a configuration error we refuse to paper over —
|
|
356
|
+
* the constructor's boot guard normally catches it before a single render is spent.
|
|
357
|
+
*
|
|
358
|
+
* `contentType` is the DECLARED mimeType.
|
|
262
359
|
*/
|
|
263
360
|
async publishArtifact(state, token, hash, effect, decl, output, key) {
|
|
264
|
-
|
|
361
|
+
let body;
|
|
362
|
+
if (decl.bound) {
|
|
363
|
+
if (output.bytes.length > BOUND_ARTIFACT_MAX_BYTES) {
|
|
364
|
+
throw new PublishConfigError(`bound output '${effect.key}/${decl.key}' is ${output.bytes.length}B — over the ${BOUND_ARTIFACT_MAX_BYTES}B cap a resolver accepts. ` +
|
|
365
|
+
`An output this size is referenced, not bound: drop \`bound\` from its declaration so it publishes as a locator.`);
|
|
366
|
+
}
|
|
367
|
+
body = { bytes_base64: Buffer.from(output.bytes).toString('base64') };
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
const locator = (await this.opts.storage.locator?.(key)) ?? null;
|
|
371
|
+
if (!locator) {
|
|
372
|
+
throw new PublishConfigError(`no locator for '${effect.key}/${decl.key}' from this storage backend — a resolver that doesn't share this disk can only serve referenced output by redirect, so it needs a URL. ` +
|
|
373
|
+
`Use a backend that exposes one (cloud/S3 or R2 with a public base, ipfs, arweave), or run this runner co-located with the resolver (drop the admin token and share the backend).`);
|
|
374
|
+
}
|
|
375
|
+
const bad = locatorRejectionReason(locator);
|
|
376
|
+
if (bad) {
|
|
377
|
+
throw new PublishConfigError(`this backend's locator for '${effect.key}/${decl.key}' (${locator}) won't be accepted: ${bad}. ` +
|
|
378
|
+
`A locator must resolve for anyone — check the public base / gateway this backend is configured with.`);
|
|
379
|
+
}
|
|
380
|
+
body = { locator };
|
|
381
|
+
}
|
|
265
382
|
try {
|
|
266
383
|
await this.service.publishEffectArtifact({
|
|
267
384
|
chainId: state.chainId,
|
|
@@ -271,18 +388,29 @@ export class EffectRunner {
|
|
|
271
388
|
output: decl.key,
|
|
272
389
|
effectKey: effect.key,
|
|
273
390
|
contentType: decl.mimeType,
|
|
274
|
-
...
|
|
391
|
+
...body,
|
|
275
392
|
});
|
|
276
393
|
}
|
|
277
394
|
catch (err) {
|
|
278
|
-
|
|
395
|
+
// Classify, because the two cases want opposite behavior. A 4xx will never succeed by
|
|
396
|
+
// retrying, and swallowing it is expensive in a way a log line hides: the work ledger is
|
|
397
|
+
// "custody lacks the artifact at the current hash", so an unpublished render re-renders on
|
|
398
|
+
// EVERY sweep, forever. A 5xx/network failure is transient — leave the artifact missing and
|
|
399
|
+
// let the next sweep retry it.
|
|
400
|
+
const status = err.status;
|
|
401
|
+
const detail = `publish ${decl.key} ${state.address}/${token.tokenId} → ${err.message}`;
|
|
402
|
+
if (status !== undefined && status >= 400 && status < 500 && status !== 408 && status !== 429) {
|
|
403
|
+
throw new PublishConfigError(detail);
|
|
404
|
+
}
|
|
405
|
+
throw new Error(detail);
|
|
279
406
|
}
|
|
280
|
-
this.log(`
|
|
407
|
+
this.log(`registered ${decl.key} ${state.address}/${token.tokenId} ` +
|
|
408
|
+
`(${'locator' in body ? `locator ${body.locator}` : `${output.bytes.length}B bound`})`);
|
|
281
409
|
}
|
|
282
410
|
/** Record one artifact row into the co-located registry (`RunnerOptions.recordArtifact`). */
|
|
283
411
|
async record(state, token, hash, effect, decl, key, locatorOverride) {
|
|
284
|
-
|
|
285
|
-
|
|
412
|
+
// A bound output's content is served from the registry row / shared custody, never a pointer.
|
|
413
|
+
const locator = locatorOverride ?? (decl.bound ? null : ((await this.opts.storage.locator?.(key)) ?? null));
|
|
286
414
|
await this.opts.recordArtifact({
|
|
287
415
|
key,
|
|
288
416
|
address: state.address.toLowerCase(),
|
|
@@ -294,14 +422,28 @@ export class EffectRunner {
|
|
|
294
422
|
locator,
|
|
295
423
|
});
|
|
296
424
|
}
|
|
297
|
-
/**
|
|
298
|
-
*
|
|
425
|
+
/**
|
|
426
|
+
* Re-register already-stored outputs for (effect, token) at the current inputsHash — no re-render.
|
|
427
|
+
* Cheap now that referenced output travels as a pointer: a presence probe plus a locator string,
|
|
428
|
+
* no byte read (only a bound output's small content is read). That is why it runs on every skip in
|
|
429
|
+
* the publish topology rather than being opt-in: it self-heals a resolver that lost its rows AND —
|
|
430
|
+
* the case that matters more — a publish that failed transiently after the bytes had already
|
|
431
|
+
* landed here, which the "is the artifact stored?" ledger would otherwise mark done forever.
|
|
432
|
+
*/
|
|
299
433
|
async republishFromStorage(effect, state, token, hash) {
|
|
300
434
|
for (const decl of effect.outputs) {
|
|
301
435
|
const key = this.artifactKey(state, token, hash, effect, decl.key);
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
436
|
+
if (decl.bound) {
|
|
437
|
+
const stored = await this.opts.storage.get(key);
|
|
438
|
+
if (stored)
|
|
439
|
+
await this.publishArtifact(state, token, hash, effect, decl, stored, key);
|
|
440
|
+
continue;
|
|
441
|
+
}
|
|
442
|
+
if (await this.opts.storage.has(key)) {
|
|
443
|
+
// The bytes never leave this backend, so an empty placeholder is all publishArtifact needs
|
|
444
|
+
// for a referenced output — it publishes the locator, not the content.
|
|
445
|
+
await this.publishArtifact(state, token, hash, effect, decl, { bytes: new Uint8Array(), contentType: decl.mimeType }, key);
|
|
446
|
+
}
|
|
305
447
|
}
|
|
306
448
|
}
|
|
307
449
|
/** Re-record registry rows for outputs already stored at the current inputsHash — presence probes
|
|
@@ -403,7 +545,7 @@ export class EffectRunner {
|
|
|
403
545
|
* substituted URL lives under that public base. Then the still is written to the exact object the
|
|
404
546
|
* on-chain pointer names (`<publicBase>/<objectKey>`) — marketplaces read the on-chain tokenURI →
|
|
405
547
|
* this URL, never a resolver, and the URL is stable across re-renders (the pixels change, the
|
|
406
|
-
* pointer doesn't → no chain write to update
|
|
548
|
+
* pointer doesn't → no chain write to update content). Any other host → null (the normal locator lane).
|
|
407
549
|
*/
|
|
408
550
|
deterministicImageTarget(state, token) {
|
|
409
551
|
const publicBase = this.opts.storage.publicBase;
|
|
@@ -452,7 +594,7 @@ export class EffectRunner {
|
|
|
452
594
|
lastErr = err;
|
|
453
595
|
}
|
|
454
596
|
if (attempt < 3)
|
|
455
|
-
await
|
|
597
|
+
await sleep(linearBackoffDelay(attempt + 1, 750));
|
|
456
598
|
}
|
|
457
599
|
throw new Error(`resolver unreachable at ${url} — ${lastErr?.message ?? String(lastErr)} ` +
|
|
458
600
|
`(is \`abx serve\` running there?)`);
|
package/dist/harness.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness.js","sourceRoot":"","sources":["../src/harness.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"harness.js","sourceRoot":"","sources":["../src/harness.ts"],"names":[],"mappings":"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"}
|
package/dist/main.js
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { loadDotEnv } from '@artblocks/abx-sdk/node';
|
|
3
|
+
import { makePublicClient, readEnv } from '@artblocks/abx-sdk';
|
|
4
4
|
import { resolveBackend } from '@artblocks/abx-storage';
|
|
5
5
|
import { EffectRunner } from './harness.js';
|
|
6
6
|
import { renderEffect } from './render.js';
|
|
7
7
|
/**
|
|
8
|
-
* The effect runner entrypoint — the deployed, long-running form (
|
|
8
|
+
* The effect runner entrypoint — the deployed, long-running form (a creator runs this
|
|
9
9
|
* beside their resolver during a drop; `docker compose` or a bare `pnpm abx-effects`).
|
|
10
10
|
*
|
|
11
11
|
* Config (env): ABX_RESOLVER_URL (required) · ABX_RPC_URL (recommended — augment hooks
|
|
12
|
-
* + data-backed params need reads
|
|
12
|
+
* + data-backed params need reads; a comma/whitespace-separated list gets the SDK's
|
|
13
|
+
* fallback-transport failover across endpoints — the same primitive the CLI/indexer use via
|
|
14
|
+
* `resolveRpcUrls` — a single URL behaves exactly as before) · ABX_EFFECTS_PORT (default 8788) ·
|
|
13
15
|
* ABX_EFFECTS_INTERVAL_MS (default 300000 — the SAFETY FLOOR: the resolver's chain watcher
|
|
14
16
|
* `POST /notify` is the primary trigger; the sweep only catches a missed ping / cold start) ·
|
|
15
17
|
* ABX_EFFECTS_CONCURRENCY (default 1 — parallel renders while draining) ·
|
|
@@ -28,20 +30,25 @@ import { renderEffect } from './render.js';
|
|
|
28
30
|
*/
|
|
29
31
|
async function main() {
|
|
30
32
|
loadDotEnv();
|
|
31
|
-
const resolverUrl = (
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
const resolverUrl = (readEnv('ABX_RESOLVER_URL') ?? 'http://localhost:8787').replace(/\/$/, '');
|
|
34
|
+
// Unset ⇒ no client (this runner tolerates that — only augment hooks + data-backed params need
|
|
35
|
+
// reads). Set ⇒ the SDK's makePublicClient, which gives a viem `fallback` transport across every
|
|
36
|
+
// endpoint when the value holds more than one (comma/whitespace-separated) — a single URL is
|
|
37
|
+
// still just `http(url)`, identical to before. An explicit `rpcUrls` override short-circuits the
|
|
38
|
+
// SDK's own env resolution entirely, so this stays the ONE place ABX_RPC_URL is read.
|
|
39
|
+
const rpcUrl = readEnv('ABX_RPC_URL');
|
|
40
|
+
const client = rpcUrl ? makePublicClient({ rpcUrls: rpcUrl.split(/[\s,]+/).filter(Boolean) }) : null;
|
|
34
41
|
const runner = new EffectRunner({
|
|
35
42
|
resolverUrl,
|
|
36
43
|
client,
|
|
37
44
|
storage: resolveBackend(),
|
|
38
45
|
effects: [renderEffect()],
|
|
39
|
-
environmentId:
|
|
46
|
+
environmentId: readEnv('ABX_ENVIRONMENT_ID') ?? 'web:any',
|
|
40
47
|
// With a token, publish each render to the resolver's control plane (locator bridge) so a runner
|
|
41
48
|
// that doesn't share the resolver's disk still lands the thumbnail. Omit ⇒ co-located shared store.
|
|
42
|
-
adminToken:
|
|
43
|
-
concurrency: Number(
|
|
44
|
-
authToken:
|
|
49
|
+
adminToken: readEnv('ABX_RESOLVER_ADMIN_TOKEN'),
|
|
50
|
+
concurrency: Number(readEnv('ABX_EFFECTS_CONCURRENCY') ?? 1),
|
|
51
|
+
authToken: readEnv('ABX_EFFECTS_TOKEN'),
|
|
45
52
|
});
|
|
46
53
|
const args = process.argv.slice(2);
|
|
47
54
|
if (args[0] === '--once') {
|
|
@@ -52,10 +59,10 @@ async function main() {
|
|
|
52
59
|
console.log(`[effects] once: ran=${stats.ran} skipped=${stats.skipped} failed=${stats.failed}`);
|
|
53
60
|
return;
|
|
54
61
|
}
|
|
55
|
-
const port = Number(
|
|
62
|
+
const port = Number(readEnv('ABX_EFFECTS_PORT') ?? 8788);
|
|
56
63
|
// 300s: the sweep is the SAFETY FLOOR (missed ping / cold start / new project), not the trigger —
|
|
57
64
|
// the resolver's chain watcher POSTs /notify the moment settled state changes.
|
|
58
|
-
const intervalMs = Number(
|
|
65
|
+
const intervalMs = Number(readEnv('ABX_EFFECTS_INTERVAL_MS') ?? 300_000);
|
|
59
66
|
runner.startHttp(port);
|
|
60
67
|
runner.startLoop(intervalMs);
|
|
61
68
|
console.log(`[effects] runner up — resolver=${resolverUrl} port=${port} sweep=${intervalMs}ms (safety floor) ` +
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AACA,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
package/dist/render.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgB,YAAY,EAAe,MAAM,cAAc,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,YAAY,CAAC,QAAQ,GAAE;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAM,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgB,YAAY,EAAe,MAAM,cAAc,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,YAAY,CAAC,QAAQ,GAAE;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAM,GAAG,YAAY,CAyC9F"}
|
package/dist/render.js
CHANGED
|
@@ -25,8 +25,10 @@ export function renderEffect(defaults = {}) {
|
|
|
25
25
|
return {
|
|
26
26
|
key: 'render',
|
|
27
27
|
outputs: [
|
|
28
|
+
// `traits` is the one BOUND output (its content stitches into `attributes`); `image` and
|
|
29
|
+
// `print` are referenced — the producer holds those bytes and publishes a locator.
|
|
28
30
|
{ key: 'image', mimeType: 'image/png' },
|
|
29
|
-
{ key: 'traits', mimeType: 'application/json' },
|
|
31
|
+
{ key: 'traits', mimeType: 'application/json', bound: true },
|
|
30
32
|
{ key: 'print', mimeType: 'image/png' },
|
|
31
33
|
],
|
|
32
34
|
async run(ctx) {
|
package/dist/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAC,MAAM,oBAAoB,CAAC;AAGvD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,YAAY,CAAC,WAAiD,EAAE;IAC9E,OAAO;QACL,GAAG,EAAE,QAAQ;QACb,OAAO,EAAE;YACP,EAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAC;YACrC,EAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,kBAAkB,EAAC;
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@artblocks/abx-effects",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.21",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "ABX Self-Host Toolkit (Layer 3) — the reference effect runner. A deployed, long-running service hosting spine-subscribing effects (render first) behind one harness; stateless via inputsHash addressing. The playwright npm package is a normal (small, browserless) dependency pinned EXACTLY to the Dockerfile.effects base-image tag; browsers install only where captures run (`npx playwright install chromium`).",
|
|
6
6
|
"type": "module",
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
},
|
|
14
14
|
"files": [
|
|
15
15
|
"dist",
|
|
16
|
+
"CHANGELOG.md",
|
|
16
17
|
"LICENSE"
|
|
17
18
|
],
|
|
18
19
|
"sideEffects": false,
|
|
@@ -40,8 +41,8 @@
|
|
|
40
41
|
"dependencies": {
|
|
41
42
|
"playwright": "1.61.1",
|
|
42
43
|
"viem": "^2.21.0",
|
|
43
|
-
"@artblocks/abx-
|
|
44
|
-
"@artblocks/abx-
|
|
44
|
+
"@artblocks/abx-sdk": "0.1.0-alpha.21",
|
|
45
|
+
"@artblocks/abx-storage": "0.1.0-alpha.21"
|
|
45
46
|
},
|
|
46
47
|
"scripts": {
|
|
47
48
|
"build": "tsc -b tsconfig.build.json"
|