@artblocks/abx-effects 0.1.0-alpha.29 → 0.1.0-alpha.30
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 +7 -405
- package/dist/harness.d.ts +5 -5
- package/dist/harness.js +1 -1
- package/dist/render.d.ts +1 -1
- package/dist/render.js +1 -1
- package/package.json +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,412 +1,14 @@
|
|
|
1
1
|
# @artblocks/abx-effects
|
|
2
2
|
|
|
3
|
-
## 0.1.0-alpha.
|
|
3
|
+
## 0.1.0-alpha.30
|
|
4
4
|
|
|
5
5
|
### Patch Changes
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
|
|
9
|
-
- @artblocks/abx-
|
|
7
|
+
- 64248d9: Establish the public source baseline and refresh dependency constraints.
|
|
8
|
+
- Updated dependencies [64248d9]
|
|
9
|
+
- @artblocks/abx-sdk@0.1.0-alpha.30
|
|
10
|
+
- @artblocks/abx-storage@0.1.0-alpha.30
|
|
10
11
|
|
|
11
|
-
##
|
|
12
|
+
## Unreleased
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
- c5e0d84: Published package `homepage` and `bugs` fields now point at docs.abx.io instead of a private GitHub
|
|
16
|
-
repo that 404s. File reports with `abx feedback`; `npm bugs` no longer names a repository the public
|
|
17
|
-
cannot open.
|
|
18
|
-
|
|
19
|
-
Reported in the 2026-08-27 tester batch (feedback 40142396).
|
|
20
|
-
|
|
21
|
-
- Updated dependencies [c5e0d84]
|
|
22
|
-
- Updated dependencies [c5e0d84]
|
|
23
|
-
- @artblocks/abx-sdk@0.1.0-alpha.28
|
|
24
|
-
- @artblocks/abx-storage@0.1.0-alpha.28
|
|
25
|
-
|
|
26
|
-
## 0.1.0-alpha.27
|
|
27
|
-
|
|
28
|
-
### Patch Changes
|
|
29
|
-
|
|
30
|
-
- Updated dependencies [4072f0c]
|
|
31
|
-
- @artblocks/abx-sdk@0.1.0-alpha.27
|
|
32
|
-
- @artblocks/abx-storage@0.1.0-alpha.27
|
|
33
|
-
|
|
34
|
-
## 0.1.0-alpha.26
|
|
35
|
-
|
|
36
|
-
### Patch Changes
|
|
37
|
-
|
|
38
|
-
- Updated dependencies [b182f23]
|
|
39
|
-
- @artblocks/abx-sdk@0.1.0-alpha.26
|
|
40
|
-
- @artblocks/abx-storage@0.1.0-alpha.26
|
|
41
|
-
|
|
42
|
-
## 0.1.0-alpha.25
|
|
43
|
-
|
|
44
|
-
### Patch Changes
|
|
45
|
-
|
|
46
|
-
- Updated dependencies [8f2f78a]
|
|
47
|
-
- @artblocks/abx-sdk@0.1.0-alpha.25
|
|
48
|
-
- @artblocks/abx-storage@0.1.0-alpha.25
|
|
49
|
-
|
|
50
|
-
## 0.1.0-alpha.24
|
|
51
|
-
|
|
52
|
-
### Patch Changes
|
|
53
|
-
|
|
54
|
-
- Updated dependencies [61503c3]
|
|
55
|
-
- @artblocks/abx-sdk@0.1.0-alpha.24
|
|
56
|
-
- @artblocks/abx-storage@0.1.0-alpha.24
|
|
57
|
-
|
|
58
|
-
## 0.1.0-alpha.23
|
|
59
|
-
|
|
60
|
-
### Patch Changes
|
|
61
|
-
|
|
62
|
-
- bd77ba2: Correct the Node floor to 22.13, and refuse to start with a remedy instead of a stack trace.
|
|
63
|
-
|
|
64
|
-
Every package declared `engines.node: ">=22.5.0"` — the version `node:sqlite` was **added**, not the
|
|
65
|
-
version it became usable. It shipped in v22.5.0 behind `--experimental-sqlite` and lost the flag in
|
|
66
|
-
v22.13.0 / v23.4.0. So `npm i -g @artblocks/abx-cli` on Node 22.5 installed silently (the engine
|
|
67
|
-
range was satisfied) and then `abx doctor` — the first command we tell everyone to run — died with a
|
|
68
|
-
raw `ERR_UNKNOWN_BUILTIN_MODULE: No such built-in module: node:sqlite` stack trace naming neither
|
|
69
|
-
abx nor a fix. Reported 2026-08-24; the floor is now `>=22.13.0` everywhere, so npm warns at install
|
|
70
|
-
time.
|
|
71
|
-
|
|
72
|
-
The crash happened while ESM _linked_ `main.ts`'s import graph (`output.ts` →
|
|
73
|
-
`@artblocks/abx-indexer` → `node:sqlite`), before any of our code ran, so no guard inside the CLI
|
|
74
|
-
could have caught it. The published binary is now a deliberately import-free shim (`dist/bin.js`)
|
|
75
|
-
that probes for `node:sqlite` and hands off to `main.js` — it prints the running version, the real
|
|
76
|
-
floor, and the upgrade command. It probes the **capability**, not the version number: an old Node
|
|
77
|
-
launched with `NODE_OPTIONS=--experimental-sqlite` genuinely works, and refusing that would be a
|
|
78
|
-
false negative. `engines` states what we support; the guard blocks only what is actually broken.
|
|
79
|
-
|
|
80
|
-
`abx doctor`'s header now also reports the running Node, since its output is what people paste when
|
|
81
|
-
something is wrong.
|
|
82
|
-
|
|
83
|
-
- Updated dependencies [bd77ba2]
|
|
84
|
-
- @artblocks/abx-storage@0.1.0-alpha.23
|
|
85
|
-
- @artblocks/abx-sdk@0.1.0-alpha.23
|
|
86
|
-
|
|
87
|
-
## 0.1.0-alpha.22
|
|
88
|
-
|
|
89
|
-
### Patch Changes
|
|
90
|
-
|
|
91
|
-
- Updated dependencies [993e095]
|
|
92
|
-
- @artblocks/abx-sdk@0.1.0-alpha.22
|
|
93
|
-
- @artblocks/abx-storage@0.1.0-alpha.22
|
|
94
|
-
|
|
95
|
-
## 0.1.0-alpha.21
|
|
96
|
-
|
|
97
|
-
### Patch Changes
|
|
98
|
-
|
|
99
|
-
- Updated dependencies [c9f7aeb]
|
|
100
|
-
- @artblocks/abx-sdk@0.1.0-alpha.21
|
|
101
|
-
- @artblocks/abx-storage@0.1.0-alpha.21
|
|
102
|
-
|
|
103
|
-
## 0.1.0-alpha.20
|
|
104
|
-
|
|
105
|
-
### Patch Changes
|
|
106
|
-
|
|
107
|
-
- Updated dependencies [84ca9dd]
|
|
108
|
-
- Updated dependencies [84ca9dd]
|
|
109
|
-
- @artblocks/abx-sdk@0.1.0-alpha.20
|
|
110
|
-
- @artblocks/abx-storage@0.1.0-alpha.20
|
|
111
|
-
|
|
112
|
-
## 0.1.0-alpha.19
|
|
113
|
-
|
|
114
|
-
### Patch Changes
|
|
115
|
-
|
|
116
|
-
- Updated dependencies [b1c333d]
|
|
117
|
-
- Updated dependencies [b1c333d]
|
|
118
|
-
- @artblocks/abx-sdk@0.1.0-alpha.19
|
|
119
|
-
- @artblocks/abx-storage@0.1.0-alpha.19
|
|
120
|
-
|
|
121
|
-
## 0.1.0-alpha.18
|
|
122
|
-
|
|
123
|
-
### Patch Changes
|
|
124
|
-
|
|
125
|
-
- Updated dependencies [77a6248]
|
|
126
|
-
- Updated dependencies [77a6248]
|
|
127
|
-
- @artblocks/abx-sdk@0.1.0-alpha.18
|
|
128
|
-
- @artblocks/abx-storage@0.1.0-alpha.18
|
|
129
|
-
|
|
130
|
-
## 0.1.0-alpha.17
|
|
131
|
-
|
|
132
|
-
### Patch Changes
|
|
133
|
-
|
|
134
|
-
- Updated dependencies [c5b8ec3]
|
|
135
|
-
- Updated dependencies [5b29f53]
|
|
136
|
-
- @artblocks/abx-sdk@0.1.0-alpha.17
|
|
137
|
-
- @artblocks/abx-storage@0.1.0-alpha.17
|
|
138
|
-
|
|
139
|
-
## 0.1.0-alpha.16
|
|
140
|
-
|
|
141
|
-
### Patch Changes
|
|
142
|
-
|
|
143
|
-
- Updated dependencies [9c287c0]
|
|
144
|
-
- Updated dependencies [b5744a1]
|
|
145
|
-
- Updated dependencies [9c287c0]
|
|
146
|
-
- @artblocks/abx-sdk@0.1.0-alpha.16
|
|
147
|
-
- @artblocks/abx-storage@0.1.0-alpha.16
|
|
148
|
-
|
|
149
|
-
## 0.1.0-alpha.15
|
|
150
|
-
|
|
151
|
-
### Patch Changes
|
|
152
|
-
|
|
153
|
-
- Updated dependencies [7fec2d7]
|
|
154
|
-
- @artblocks/abx-sdk@0.1.0-alpha.15
|
|
155
|
-
- @artblocks/abx-storage@0.1.0-alpha.15
|
|
156
|
-
|
|
157
|
-
## 0.1.0-alpha.14
|
|
158
|
-
|
|
159
|
-
### Patch Changes
|
|
160
|
-
|
|
161
|
-
- Updated dependencies [1b6b741]
|
|
162
|
-
- Updated dependencies [1b6b741]
|
|
163
|
-
- Updated dependencies [1b6b741]
|
|
164
|
-
- Updated dependencies [1b6b741]
|
|
165
|
-
- Updated dependencies [1b6b741]
|
|
166
|
-
- Updated dependencies [1b6b741]
|
|
167
|
-
- Updated dependencies [f64a31f]
|
|
168
|
-
- Updated dependencies [1b6b741]
|
|
169
|
-
- Updated dependencies [1b6b741]
|
|
170
|
-
- Updated dependencies [1b6b741]
|
|
171
|
-
- Updated dependencies [1b6b741]
|
|
172
|
-
- Updated dependencies [1b6b741]
|
|
173
|
-
- Updated dependencies [1b6b741]
|
|
174
|
-
- Updated dependencies [1b6b741]
|
|
175
|
-
- Updated dependencies [1b6b741]
|
|
176
|
-
- Updated dependencies [1b6b741]
|
|
177
|
-
- Updated dependencies [1b6b741]
|
|
178
|
-
- @artblocks/abx-sdk@0.1.0-alpha.14
|
|
179
|
-
- @artblocks/abx-storage@0.1.0-alpha.14
|
|
180
|
-
|
|
181
|
-
## 0.1.0-alpha.13
|
|
182
|
-
|
|
183
|
-
### Patch Changes
|
|
184
|
-
|
|
185
|
-
- Updated dependencies [528c6c6]
|
|
186
|
-
- @artblocks/abx-sdk@0.1.0-alpha.13
|
|
187
|
-
- @artblocks/abx-storage@0.1.0-alpha.13
|
|
188
|
-
|
|
189
|
-
## 0.1.0-alpha.12
|
|
190
|
-
|
|
191
|
-
### Patch Changes
|
|
192
|
-
|
|
193
|
-
- Updated dependencies [afa9dd4]
|
|
194
|
-
- Updated dependencies [8c254d5]
|
|
195
|
-
- @artblocks/abx-sdk@0.1.0-alpha.12
|
|
196
|
-
- @artblocks/abx-storage@0.1.0-alpha.12
|
|
197
|
-
|
|
198
|
-
## 0.1.0-alpha.11
|
|
199
|
-
|
|
200
|
-
### Patch Changes
|
|
201
|
-
|
|
202
|
-
- Updated dependencies [d40caf4]
|
|
203
|
-
- Updated dependencies [d40caf4]
|
|
204
|
-
- @artblocks/abx-sdk@0.1.0-alpha.11
|
|
205
|
-
- @artblocks/abx-storage@0.1.0-alpha.11
|
|
206
|
-
|
|
207
|
-
## 0.1.0-alpha.10
|
|
208
|
-
|
|
209
|
-
### Patch Changes
|
|
210
|
-
|
|
211
|
-
- 11fa933: The remaining phases of the simplification refactor that hadn't yet gotten a changeset: the CLI's
|
|
212
|
-
internal module split, the token-api/effects/mint-page convergence on the SDK, the shipped skill's
|
|
213
|
-
rewrite for the simplified surface, and a new SDK README.
|
|
214
|
-
|
|
215
|
-
- **`abx`'s `main.ts` split into domain command modules** (`commands/{deploy,project,reads,service,
|
|
216
|
-
scaffold,storage}.ts`, shared `output.ts`/`errors.ts`), with one exit-discipline rule
|
|
217
|
-
(`process.exitCode` + return, or a typed `CliError`, everywhere — bare `process.exit` only at the
|
|
218
|
-
entry guard, the top-level catch, and the keep-alive SIGINT handler). Purely internal: a 207-fixture
|
|
219
|
-
byte-diff matrix (every help text, dry-run, error path, and exit code) confirmed identical output
|
|
220
|
-
before and after.
|
|
221
|
-
- **token-api / effects / mint-page converge on the SDK**: `@artblocks/abx-storage` gains one
|
|
222
|
-
`resolveGatewayBase` (`readiness.ts`), replacing three near-identical copies (two in token-api, one
|
|
223
|
-
inline in storage itself); token-api exports `buildGeneratorDocument` so the CLI's `abx preview`
|
|
224
|
-
consumes the real generator-document assembler instead of a hand-kept duplicate; the effects runner
|
|
225
|
-
now resolves its config via the SDK's `readEnv` and gets a `makePublicClient` fallback transport, so
|
|
226
|
-
`ABX_RPC_URL` accepts a comma-separated failover list like every other RPC var; the scaffolded
|
|
227
|
-
mint-page app now imports ABIs from `@artblocks/abx-sdk/abi` and a browser-safe `makePublicClient` +
|
|
228
|
-
typed `readSaleConfig` instead of hand-rolled fetch/decode, and pins its generated `package.json` to
|
|
229
|
-
the SDK's _resolved_ version via a new `@artblocks/abx-sdk/package.json` export (alpha version
|
|
230
|
-
counters diverge per package under changesets, so pinning the CLI's own number could produce an
|
|
231
|
-
unsatisfiable range).
|
|
232
|
-
- **The shipped skill (`.claude/skills/abx-self-host/`) is rewritten for the surface phases 0–5
|
|
233
|
-
actually shipped**: every warning made obsolete by an enforcement is deleted rather than softened —
|
|
234
|
-
predict-only deploy-preview addresses, the `approvals N` line, the single `ABX_REMOTE_SELF_*`
|
|
235
|
-
credential grammar, `doctor`'s version/provenance ladder, `storage show --check`, the render/storage
|
|
236
|
-
combo validator's dry-run row, and `ABX_DEPLOYER_PK` as the only key name. Retired names swept from
|
|
237
|
-
`dev-loop-test`, the agent-eval scenarios, and spec prose. The skill ships bundled inside this CLI
|
|
238
|
-
package (co-versioned via `SKILL.md` frontmatter), so it rides this same patch.
|
|
239
|
-
- **New `packages/sdk/README.md`**: what the SDK is, the send-injection model (`PreparedTx` +
|
|
240
|
-
`SendTx`, `makeHotSender` for a hot key, bring-your-own for a wallet/multisig), a complete
|
|
241
|
-
deploy → upload → mint → read walkthrough against real exports, and browser-use notes (explicit
|
|
242
|
-
`rpcUrls`, no env, the `/node` subpath is Node-only). Included in the npm tarball automatically
|
|
243
|
-
(README is one of the files npm always packs, regardless of the `files` allowlist).
|
|
244
|
-
|
|
245
|
-
- 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.
|
|
246
|
-
|
|
247
|
-
**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.
|
|
248
|
-
|
|
249
|
-
**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.
|
|
250
|
-
|
|
251
|
-
**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.
|
|
252
|
-
|
|
253
|
-
**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.
|
|
254
|
-
|
|
255
|
-
- Updated dependencies [11fa933]
|
|
256
|
-
- Updated dependencies [11fa933]
|
|
257
|
-
- Updated dependencies [11fa933]
|
|
258
|
-
- Updated dependencies [11fa933]
|
|
259
|
-
- @artblocks/abx-sdk@0.1.0-alpha.10
|
|
260
|
-
- @artblocks/abx-storage@0.1.0-alpha.10
|
|
261
|
-
|
|
262
|
-
## 0.1.0-alpha.9
|
|
263
|
-
|
|
264
|
-
### Patch Changes
|
|
265
|
-
|
|
266
|
-
- Updated dependencies [df298d8]
|
|
267
|
-
- Updated dependencies [df298d8]
|
|
268
|
-
- Updated dependencies [df298d8]
|
|
269
|
-
- @artblocks/abx-sdk@0.1.0-alpha.9
|
|
270
|
-
- @artblocks/abx-storage@0.1.0-alpha.9
|
|
271
|
-
|
|
272
|
-
## 0.1.0-alpha.8
|
|
273
|
-
|
|
274
|
-
### Patch Changes
|
|
275
|
-
|
|
276
|
-
- Updated dependencies [e325b46]
|
|
277
|
-
- @artblocks/abx-sdk@0.1.0-alpha.8
|
|
278
|
-
- @artblocks/abx-storage@0.1.0-alpha.8
|
|
279
|
-
|
|
280
|
-
## 0.1.0-alpha.7
|
|
281
|
-
|
|
282
|
-
### Patch Changes
|
|
283
|
-
|
|
284
|
-
- Updated dependencies [1b50f9d]
|
|
285
|
-
- Updated dependencies [1b50f9d]
|
|
286
|
-
- @artblocks/abx-sdk@0.1.0-alpha.7
|
|
287
|
-
- @artblocks/abx-storage@0.1.0-alpha.7
|
|
288
|
-
|
|
289
|
-
## 0.1.0-alpha.6
|
|
290
|
-
|
|
291
|
-
### Patch Changes
|
|
292
|
-
|
|
293
|
-
- Updated dependencies [1158420]
|
|
294
|
-
- Updated dependencies [1158420]
|
|
295
|
-
- Updated dependencies [1158420]
|
|
296
|
-
- @artblocks/abx-sdk@0.1.0-alpha.6
|
|
297
|
-
- @artblocks/abx-storage@0.1.0-alpha.6
|
|
298
|
-
|
|
299
|
-
## 0.1.0-alpha.5
|
|
300
|
-
|
|
301
|
-
### Minor Changes
|
|
302
|
-
|
|
303
|
-
- feba8c2: A resolver is no longer an object store: effect outputs split into **bound** and **referenced**
|
|
304
|
-
(`specs/protocol/effects.md → Bound vs referenced`), and the artifact registry enforces the split.
|
|
305
|
-
|
|
306
|
-
An output is **bound** iff a binding stitches its _content_ into the metadata JSON (today exactly
|
|
307
|
-
`render/traits` → `attributes`); everything else is **referenced** — the projection carries its URL,
|
|
308
|
-
or it only appears in the `artifacts` manifest. That one distinction decides who holds the bytes, and
|
|
309
|
-
it is now the wire rule rather than a runner constant.
|
|
310
|
-
|
|
311
|
-
- **`POST /v1/effect-artifacts` derives the mode from the binding, and refuses both mismatches.**
|
|
312
|
-
Bytes for a referenced output → `400` (the resolver redirects either way, so the bytes buy no
|
|
313
|
-
capability and cost it storage, retention and egress). A locator for a bound output → `400` (its
|
|
314
|
-
content is assembled into `tokenURI`; a pointer there used to be recorded and then silently never
|
|
315
|
-
stitch — a wrong answer served confidently). Bound content is capped at **64 KB**, and a locator
|
|
316
|
-
that only the producer could resolve (loopback/private host, presigned expiring URL) is rejected.
|
|
317
|
-
The resolver never fetches a locator while handling the write, and serves registered locators by
|
|
318
|
-
`302` — never by proxying.
|
|
319
|
-
- **Bound content moved out of byte custody** into the artifact row (`effect_artifacts.bytes`). Two
|
|
320
|
-
distinct rules, deliberately not one: a node **MUST** serve and stitch bound content only at the
|
|
321
|
-
token's current settled `inputsHash`, and it **MAY** drop superseded content whenever it likes
|
|
322
|
-
(nothing may read it, and it is re-creatable). The reference drops eagerly, on each bound
|
|
323
|
-
registration, so it holds at most `64 KB × minted × bound outputs` — but retention is a service
|
|
324
|
-
policy, not an obligation. Either way "conforming means holding a bounded amount of JSON in the
|
|
325
|
-
database you already run" is now literally true: a resolver in the publish topology needs no object
|
|
326
|
-
storage at all.
|
|
327
|
-
- **`abx-effects-publish/v1` is gone** (not deprecated): the two routes ride `abx-control-plane/v1`.
|
|
328
|
-
Once referenced output is locator-only, accepting a registration is a database insert, so the
|
|
329
|
-
capability flag described a distinction that no longer exists. A service that won't take a caller's
|
|
330
|
-
artifacts refuses on the credential (`403`) — interfaces describe wire grammar, tokens describe
|
|
331
|
-
permission. The interface ids are also explicitly **all-or-nothing**, and the conformance fixture
|
|
332
|
-
now checks that every route a declared interface names actually answers.
|
|
333
|
-
- **The runner declares bound outputs** (`EffectOutputDecl.bound`), refuses to start when it has a
|
|
334
|
-
publish token but a backend that can't name a locator, preflights the descriptor + credential
|
|
335
|
-
before spending a render, and **latches** on a permanent (4xx) publish failure instead of
|
|
336
|
-
re-rendering every sweep forever. Skips now re-register rows, so a transient publish failure heals
|
|
337
|
-
without a re-render.
|
|
338
|
-
- **The CLI refuses the impossible combination up front**: `abx render --remote`, `abx effects`
|
|
339
|
-
against a remote resolver, and `abx deploy-effects` all require a backend that can name a reachable
|
|
340
|
-
URL — `cloud` (S3/R2 + public base), `ipfs`, or `arweave`, named as **peers**. Derived output is
|
|
341
|
-
re-creatable, so the protocol has no preference among schemes: a chosen `https://` gateway or
|
|
342
|
-
bucket URL is exactly as legitimate as `ipfs://`/`ar://`, and reachability — not durability — is
|
|
343
|
-
the requirement. Rendering **co-located** with the resolver remains fully supported on any backend,
|
|
344
|
-
including `fs`.
|
|
345
|
-
|
|
346
|
-
Breaking for producers that relied on pushing media bytes to a resolver: publish a locator instead,
|
|
347
|
-
or co-locate. Breaking for clients that read `abx-effects-publish/v1` from a descriptor.
|
|
348
|
-
|
|
349
|
-
### Patch Changes
|
|
350
|
-
|
|
351
|
-
- Updated dependencies [feba8c2]
|
|
352
|
-
- @artblocks/abx-sdk@0.1.0-alpha.5
|
|
353
|
-
- @artblocks/abx-storage@0.1.0-alpha.5
|
|
354
|
-
|
|
355
|
-
## 0.1.0-alpha.4
|
|
356
|
-
|
|
357
|
-
### Patch Changes
|
|
358
|
-
|
|
359
|
-
- Updated dependencies [67b686b]
|
|
360
|
-
- @artblocks/abx-sdk@0.1.0-alpha.4
|
|
361
|
-
- @artblocks/abx-storage@0.1.0-alpha.4
|
|
362
|
-
|
|
363
|
-
## 0.1.0-alpha.3
|
|
364
|
-
|
|
365
|
-
### Patch Changes
|
|
366
|
-
|
|
367
|
-
- Updated dependencies [a72723d]
|
|
368
|
-
- @artblocks/abx-sdk@0.1.0-alpha.3
|
|
369
|
-
- @artblocks/abx-storage@0.1.0-alpha.3
|
|
370
|
-
|
|
371
|
-
## 0.1.0-alpha.2
|
|
372
|
-
|
|
373
|
-
### Minor Changes
|
|
374
|
-
|
|
375
|
-
- 3745bd3: Remote services are first-class: a provider-neutral control plane, named remotes, and a service
|
|
376
|
-
descriptor (specs/self-host-toolkit/remote-services.md).
|
|
377
|
-
|
|
378
|
-
- **Control plane moves to `/v1`** (hard cutover; `/admin/*` is gone — redeploy self-hosted nodes):
|
|
379
|
-
`POST/GET /v1/projects`, `DELETE|reindex|status /v1/projects/{chainId}/{address}`,
|
|
380
|
-
`POST /v1/effect-artifacts|effect-status`. `chainId` is explicit and validated everywhere; every
|
|
381
|
-
error carries a machine `code` (`unauthorized` 401 · `forbidden` 403 · `unsupported_chain` ·
|
|
382
|
-
`not_registered` · `disabled`) replacing the old prose-sniffed 404. One bearer guard replaces the
|
|
383
|
-
four inline copies; OPTIONS preflight now answers so browser clients can send `Authorization`.
|
|
384
|
-
- **`GET /.well-known/abx-service`** — the public service descriptor: `interfaces` (present iff
|
|
385
|
-
actually enabled), `chains`, `auth` (with optional provider-set `signupUrl`/`docsUrl` via
|
|
386
|
-
`ABX_SERVICE_*` env), and `render.attached` (managed rendering, probed from the runner's
|
|
387
|
-
`/health`) — so an agent can match a project to a provider before registering.
|
|
388
|
-
- **Named remotes in the CLI**: `--remote <name>` reads `ABX_REMOTE_<NAME>_URL`/`_TOKEN`
|
|
389
|
-
(a managed provider's per-account key — never falls back to `ABX_RESOLVER_ADMIN_TOKEN`);
|
|
390
|
-
`--remote <url> [--remote-token <t>]` for ad-hoc targets; bare `--remote` stays the self-host
|
|
391
|
-
default. New `abx remote [name|url]` inspects a service's descriptor and the projects a token
|
|
392
|
-
sees. `migrate --from/--to` accept names; only the destination needs a credential.
|
|
393
|
-
- **The SDK gains its first HTTP surface**: `AbxServiceClient` (endpoint + injected bearer, retry
|
|
394
|
-
on 5xx/network, immediate typed `AbxServiceError` on 4xx) — shared by the CLI and the effects
|
|
395
|
-
runner's publish lane. `envSuffix()` is the shared env-name normalization.
|
|
396
|
-
- **Conformance fixture**: `pnpm conformance -- <base-url> [--token …]` self-verifies any
|
|
397
|
-
implementation; the e2e suite runs it against the reference container.
|
|
398
|
-
|
|
399
|
-
### Patch Changes
|
|
400
|
-
|
|
401
|
-
- Updated dependencies [3745bd3]
|
|
402
|
-
- Updated dependencies [3745bd3]
|
|
403
|
-
- @artblocks/abx-sdk@0.1.0-alpha.2
|
|
404
|
-
- @artblocks/abx-storage@0.1.0-alpha.2
|
|
405
|
-
|
|
406
|
-
## 0.1.0-alpha.1
|
|
407
|
-
|
|
408
|
-
### Patch Changes
|
|
409
|
-
|
|
410
|
-
- Updated dependencies [4074766]
|
|
411
|
-
- @artblocks/abx-sdk@0.1.0-alpha.1
|
|
412
|
-
- @artblocks/abx-storage@0.1.0-alpha.1
|
|
14
|
+
Public release history begins here.
|
package/dist/harness.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { type Server } from 'node:http';
|
|
|
2
2
|
import { type Hex, type ProjectState, type PublicClient, type TokenState, type TokenDataResult } from '@artblocks/abx-sdk';
|
|
3
3
|
import type { StorageBackend } from '@artblocks/abx-storage';
|
|
4
4
|
/**
|
|
5
|
-
* The reference effect runner (`
|
|
5
|
+
* The reference effect runner (`site/content/docs/protocol/effects.mdx → The reference runner`).
|
|
6
6
|
*
|
|
7
7
|
* An effect is a spine subscriber, so its natural form is a deployed, long-running
|
|
8
8
|
* service. This harness is effect-agnostic: an effect registers `{key, outputs, run}`;
|
|
@@ -29,14 +29,14 @@ export interface EffectContext {
|
|
|
29
29
|
liveViewUrl: string;
|
|
30
30
|
}
|
|
31
31
|
/** One declared output: the key naming the artifact + its MIME type, declared where the effect is
|
|
32
|
-
* declared (`
|
|
32
|
+
* declared (`site/content/docs/protocol/data-plane.mdx → Declared type, never sniffed`). The declared type is
|
|
33
33
|
* what the manifest and the serving surface speak; the per-run `EffectOutput.contentType` still
|
|
34
34
|
* travels with the bytes (a mismatch is logged, the declaration wins). */
|
|
35
35
|
export interface EffectOutputDecl {
|
|
36
36
|
key: string;
|
|
37
37
|
mimeType: string;
|
|
38
38
|
/**
|
|
39
|
-
* This output's content stitches into the metadata JSON (`
|
|
39
|
+
* This output's content stitches into the metadata JSON (`site/content/docs/protocol/effects.mdx → Bound vs
|
|
40
40
|
* referenced`) — `traits` today. Bound output is published as capped inline **bytes**, because a
|
|
41
41
|
* locator can't work: the resolver assembles the content into `tokenURI`, so a pointer there would
|
|
42
42
|
* put a third-party fetch on its hottest read.
|
|
@@ -83,7 +83,7 @@ export interface RunnerOptions {
|
|
|
83
83
|
/** When set, register each artifact with the resolver's control plane
|
|
84
84
|
* (POST /v1/effect-artifacts) so a resolver that does NOT share this backend's disk can serve it
|
|
85
85
|
* — a locator for referenced output, capped content for bound output
|
|
86
|
-
* (`
|
|
86
|
+
* (`site/content/docs/protocol/effects.mdx → Bound vs referenced`). Requires a backend that exposes a locator;
|
|
87
87
|
* the constructor refuses otherwise. Bearer only; never signs on-chain. Omit for the co-located
|
|
88
88
|
* topology (runner + resolver share one backend). */
|
|
89
89
|
adminToken?: string;
|
|
@@ -182,7 +182,7 @@ export declare class EffectRunner {
|
|
|
182
182
|
/**
|
|
183
183
|
* Register one stored output with the resolver's control plane so a node that doesn't share this
|
|
184
184
|
* backend's disk can serve it. The form follows the output's DECLARED class
|
|
185
|
-
* (`
|
|
185
|
+
* (`site/content/docs/protocol/effects.mdx → Bound vs referenced`), and the resolver enforces the same rule
|
|
186
186
|
* from its side — this is one contract, not a preference on either end:
|
|
187
187
|
*
|
|
188
188
|
* - **bound** (`traits`) → the content, capped. The resolver stitches it into the token JSON.
|
package/dist/harness.js
CHANGED
|
@@ -346,7 +346,7 @@ export class EffectRunner {
|
|
|
346
346
|
/**
|
|
347
347
|
* Register one stored output with the resolver's control plane so a node that doesn't share this
|
|
348
348
|
* backend's disk can serve it. The form follows the output's DECLARED class
|
|
349
|
-
* (`
|
|
349
|
+
* (`site/content/docs/protocol/effects.mdx → Bound vs referenced`), and the resolver enforces the same rule
|
|
350
350
|
* from its side — this is one contract, not a preference on either end:
|
|
351
351
|
*
|
|
352
352
|
* - **bound** (`traits`) → the content, capped. The resolver stitches it into the token JSON.
|
package/dist/render.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ import type { EffectModule } from './harness.js';
|
|
|
8
8
|
* captures actually run (the effects image, or a laptop that ran
|
|
9
9
|
* `pnpm add playwright && npx playwright install chromium`).
|
|
10
10
|
*
|
|
11
|
-
* Capture contract (mirrors `
|
|
11
|
+
* Capture contract (mirrors `site/content/docs/protocol/code-projects.mdx`): wait for `abx.done()`,
|
|
12
12
|
* else the project's `render.captureDelay` contract param (ms), else a default timeout.
|
|
13
13
|
* Dimensions: `render.imageWidth` (default 1200 — pass a larger width for a hi-def
|
|
14
14
|
* master when image is the primary display format) × `render.aspectRatio` (w/h,
|
package/dist/render.js
CHANGED
|
@@ -8,7 +8,7 @@ import { contractParamString } from '@artblocks/abx-sdk';
|
|
|
8
8
|
* captures actually run (the effects image, or a laptop that ran
|
|
9
9
|
* `pnpm add playwright && npx playwright install chromium`).
|
|
10
10
|
*
|
|
11
|
-
* Capture contract (mirrors `
|
|
11
|
+
* Capture contract (mirrors `site/content/docs/protocol/code-projects.mdx`): wait for `abx.done()`,
|
|
12
12
|
* else the project's `render.captureDelay` contract param (ms), else a default timeout.
|
|
13
13
|
* Dimensions: `render.imageWidth` (default 1200 — pass a larger width for a hi-def
|
|
14
14
|
* master when image is the primary display format) × `render.aspectRatio` (w/h,
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@artblocks/abx-effects",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.30",
|
|
4
4
|
"license": "MIT",
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "Reference rendering and effects runner for ABX projects.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./dist/index.js",
|
|
8
8
|
"exports": {
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"directory": "packages/effects"
|
|
27
27
|
},
|
|
28
28
|
"homepage": "https://docs.abx.io",
|
|
29
|
-
"bugs": "https://
|
|
29
|
+
"bugs": "https://github.com/ArtBlocks/abx/issues",
|
|
30
30
|
"keywords": [
|
|
31
31
|
"abx",
|
|
32
32
|
"nft",
|
|
@@ -39,10 +39,10 @@
|
|
|
39
39
|
"access": "public"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"playwright": "1.
|
|
43
|
-
"viem": "^2.
|
|
44
|
-
"@artblocks/abx-sdk": "0.1.0-alpha.
|
|
45
|
-
"@artblocks/abx-storage": "0.1.0-alpha.
|
|
42
|
+
"playwright": "1.62.1",
|
|
43
|
+
"viem": "^2.56.0",
|
|
44
|
+
"@artblocks/abx-sdk": "0.1.0-alpha.30",
|
|
45
|
+
"@artblocks/abx-storage": "0.1.0-alpha.30"
|
|
46
46
|
},
|
|
47
47
|
"scripts": {
|
|
48
48
|
"build": "tsc -b tsconfig.build.json"
|