bulletin-deploy 0.6.7-rc.0 → 0.6.7
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/README.md +60 -6
- package/dist/{chunk-HMCNHEMO.js → chunk-FBXG7YMT.js} +1 -1
- package/dist/{chunk-5B6UCUSH.js → chunk-TD73EZ5I.js} +2 -2
- package/dist/{chunk-DOBGWPA3.js → chunk-ZGP4DMFK.js} +3 -1
- package/dist/deploy.js +3 -3
- package/dist/dotns.js +2 -2
- package/dist/index.js +3 -3
- package/dist/telemetry.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@ Your site is live at `https://my-app00.dot.li`
|
|
|
15
15
|
## Prerequisites
|
|
16
16
|
|
|
17
17
|
- **Node.js 22+**
|
|
18
|
-
- **IPFS Kubo** (for merkleizing directories)
|
|
18
|
+
- **IPFS Kubo** (for merkleizing directories — not needed with `--js-merkle`)
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
21
|
# macOS
|
|
@@ -29,6 +29,8 @@ sudo bash kubo/install.sh
|
|
|
29
29
|
ipfs init
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
+
> **No Kubo?** Use `--js-merkle` to skip the Kubo requirement entirely. See [Merkleization modes](#merkleization-modes) below.
|
|
33
|
+
|
|
32
34
|
## CLI Usage
|
|
33
35
|
|
|
34
36
|
```bash
|
|
@@ -55,6 +57,7 @@ Options:
|
|
|
55
57
|
--rpc wss://... Bulletin RPC (or set BULLETIN_RPC env var)
|
|
56
58
|
--mnemonic "..." DotNS owner mnemonic (or set MNEMONIC env var)
|
|
57
59
|
--playground Publish to the Playground remix registry
|
|
60
|
+
--js-merkle Use pure-JS merkleization (no IPFS Kubo binary required)
|
|
58
61
|
--pool-size N Number of pool accounts (default: 10)
|
|
59
62
|
--help Show help
|
|
60
63
|
```
|
|
@@ -92,6 +95,20 @@ const result = await deploy("./dist", "my-app00.dot");
|
|
|
92
95
|
console.log(result.cid, result.domainName);
|
|
93
96
|
```
|
|
94
97
|
|
|
98
|
+
### JS merkleization and custom telemetry
|
|
99
|
+
|
|
100
|
+
For environments without Kubo (WebContainers, serverless), use `jsMerkle`. The optional `attributes` field lets you inject telemetry context when git is unavailable:
|
|
101
|
+
|
|
102
|
+
```javascript
|
|
103
|
+
const result = await deploy("./dist", "my-app00.dot", {
|
|
104
|
+
jsMerkle: true,
|
|
105
|
+
attributes: {
|
|
106
|
+
"deploy.source": "revx",
|
|
107
|
+
"deploy.repo": "user/project",
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
```
|
|
111
|
+
|
|
95
112
|
## Domain Names and Proof of Personhood
|
|
96
113
|
|
|
97
114
|
DotNS domain names are classified by the PopOracle contract on Asset Hub. The classification determines what level of **Proof of Personhood (PoP)** is required to register:
|
|
@@ -124,18 +141,53 @@ If you see **"Requires Full Personhood verification"**, the deploy will fail ear
|
|
|
124
141
|
## How It Works
|
|
125
142
|
|
|
126
143
|
```
|
|
127
|
-
Build output ──>
|
|
128
|
-
./dist
|
|
129
|
-
|
|
144
|
+
Build output ──> Merkleize ──> CAR file ──> Chunk upload ──> DotNS
|
|
145
|
+
./dist (Kubo or JS) .car Bulletin Asset Hub
|
|
146
|
+
Storage Registry
|
|
130
147
|
```
|
|
131
148
|
|
|
132
|
-
1. **Merkleize** your build directory
|
|
149
|
+
1. **Merkleize** your build directory to produce a content-addressed CAR file
|
|
133
150
|
2. **Chunk and upload** the CAR file to Bulletin's TransactionStorage (1MB chunks, 2 per batch)
|
|
134
151
|
3. **Store the DAG root** that links all chunks together under a single CID
|
|
135
152
|
4. **Register or update** your `.dot` domain on Asset Hub with the new contenthash
|
|
136
153
|
|
|
137
154
|
Your site is immediately accessible at `https://your-domain.dot.li`
|
|
138
155
|
|
|
156
|
+
## Merkleization modes
|
|
157
|
+
|
|
158
|
+
bulletin-deploy supports two ways to merkleize your build directory into a CAR file:
|
|
159
|
+
|
|
160
|
+
| Mode | Flag | Requires | Best for |
|
|
161
|
+
|---|---|---|---|
|
|
162
|
+
| **Kubo** (default) | _(none)_ | IPFS Kubo binary installed | CI pipelines, local development |
|
|
163
|
+
| **JS** | `--js-merkle` | Nothing beyond Node.js | WebContainers, serverless, environments without system binaries |
|
|
164
|
+
|
|
165
|
+
Both modes produce valid IPFS UnixFS DAGs. The CIDs may differ between modes for the same input (different chunking implementations), but this is fine — each deploy sets a fresh contenthash on DotNS regardless.
|
|
166
|
+
|
|
167
|
+
### CLI
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
# Default (Kubo)
|
|
171
|
+
bulletin-deploy ./dist my-app00.dot
|
|
172
|
+
|
|
173
|
+
# JS merkleization
|
|
174
|
+
bulletin-deploy --js-merkle ./dist my-app00.dot
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Programmatic
|
|
178
|
+
|
|
179
|
+
```javascript
|
|
180
|
+
import { deploy } from "bulletin-deploy";
|
|
181
|
+
|
|
182
|
+
// Default (Kubo)
|
|
183
|
+
await deploy("./dist", "my-app00.dot");
|
|
184
|
+
|
|
185
|
+
// JS merkleization
|
|
186
|
+
await deploy("./dist", "my-app00.dot", { jsMerkle: true });
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
The JS mode uses `ipfs-unixfs-importer` (the same chunker Kubo uses internally) and `@ipld/car` for CAR serialization. It runs entirely in-memory with no temp files.
|
|
190
|
+
|
|
139
191
|
## Resilience Features
|
|
140
192
|
|
|
141
193
|
### Chunk-level retry
|
|
@@ -161,7 +213,9 @@ What's tracked:
|
|
|
161
213
|
- Pool account selection
|
|
162
214
|
- Source metadata (repo, branch, PR number, CI vs local)
|
|
163
215
|
|
|
164
|
-
Dashboard:
|
|
216
|
+
Dashboard:
|
|
217
|
+
- Bulletin Deploy Health: https://paritytech.sentry.io/dashboard/1669817/
|
|
218
|
+
- Deploy Failures Detail: https://paritytech.sentry.io/dashboard/1669818/
|
|
165
219
|
|
|
166
220
|
## Troubleshooting
|
|
167
221
|
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
TX_TIMEOUT_MS,
|
|
5
5
|
fetchNonce,
|
|
6
6
|
validateDomainLabel
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-FBXG7YMT.js";
|
|
8
8
|
import {
|
|
9
9
|
merkleizeJS
|
|
10
10
|
} from "./chunk-GZ5UUECB.js";
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
setDeployAttribute,
|
|
22
22
|
withDeploySpan,
|
|
23
23
|
withSpan
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-ZGP4DMFK.js";
|
|
25
25
|
|
|
26
26
|
// src/deploy.ts
|
|
27
27
|
import { Buffer } from "buffer";
|
|
@@ -6,7 +6,7 @@ import * as path from "path";
|
|
|
6
6
|
// package.json
|
|
7
7
|
var package_default = {
|
|
8
8
|
name: "bulletin-deploy",
|
|
9
|
-
version: "0.6.7
|
|
9
|
+
version: "0.6.7",
|
|
10
10
|
private: false,
|
|
11
11
|
repository: {
|
|
12
12
|
type: "git",
|
|
@@ -175,6 +175,8 @@ function captureWarning(message, context) {
|
|
|
175
175
|
try {
|
|
176
176
|
Sentry.addBreadcrumb({ level: "warning", message, data: context });
|
|
177
177
|
Sentry.captureMessage(message, { level: "warning", extra: context });
|
|
178
|
+
const root = Sentry.getRootSpan(Sentry.getActiveSpan());
|
|
179
|
+
if (root) root.setAttribute("deploy.sad", true);
|
|
178
180
|
} catch {
|
|
179
181
|
}
|
|
180
182
|
}
|
package/dist/deploy.js
CHANGED
|
@@ -21,11 +21,11 @@ import {
|
|
|
21
21
|
storeChunkedContent,
|
|
22
22
|
storeDirectory,
|
|
23
23
|
storeFile
|
|
24
|
-
} from "./chunk-
|
|
25
|
-
import "./chunk-
|
|
24
|
+
} from "./chunk-TD73EZ5I.js";
|
|
25
|
+
import "./chunk-FBXG7YMT.js";
|
|
26
26
|
import "./chunk-GZ5UUECB.js";
|
|
27
27
|
import "./chunk-LGPTJYA3.js";
|
|
28
|
-
import "./chunk-
|
|
28
|
+
import "./chunk-ZGP4DMFK.js";
|
|
29
29
|
import "./chunk-QGM4M3NI.js";
|
|
30
30
|
export {
|
|
31
31
|
DEFAULT_BULLETIN_RPC,
|
package/dist/dotns.js
CHANGED
|
@@ -19,8 +19,8 @@ import {
|
|
|
19
19
|
sanitizeDomainLabel,
|
|
20
20
|
stripTrailingDigits,
|
|
21
21
|
validateDomainLabel
|
|
22
|
-
} from "./chunk-
|
|
23
|
-
import "./chunk-
|
|
22
|
+
} from "./chunk-FBXG7YMT.js";
|
|
23
|
+
import "./chunk-ZGP4DMFK.js";
|
|
24
24
|
import "./chunk-QGM4M3NI.js";
|
|
25
25
|
export {
|
|
26
26
|
CONNECTION_TIMEOUT_MS,
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
deploy
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-TD73EZ5I.js";
|
|
4
4
|
import {
|
|
5
5
|
DotNS
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-FBXG7YMT.js";
|
|
7
7
|
import {
|
|
8
8
|
merkleizeJS
|
|
9
9
|
} from "./chunk-GZ5UUECB.js";
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
fetchPoolAuthorizations,
|
|
15
15
|
selectAccount
|
|
16
16
|
} from "./chunk-LGPTJYA3.js";
|
|
17
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-ZGP4DMFK.js";
|
|
18
18
|
import "./chunk-QGM4M3NI.js";
|
|
19
19
|
export {
|
|
20
20
|
DotNS,
|
package/dist/telemetry.js
CHANGED