@shipstatic/ship 2.1.0 → 2.2.0-beta.4

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 CHANGED
@@ -47,6 +47,7 @@ const ship = new Ship({ token: 'ship-...' });
47
47
 
48
48
  ```bash
49
49
  ship ./dist # Deploy (shortcut)
50
+ ship ./dist --domain www.example.com # Deploy and serve it there
50
51
  ship ./dist --label production --label v1.0.0 # Deploy with labels
51
52
  ship deployments list
52
53
  ship deployments list --limit 20 # Page size; a hint shows the next cursor
@@ -152,6 +153,14 @@ open https://$(ship ./dist -q)
152
153
  ship deployments list -q | xargs -I{} ship deployments delete {} -q
153
154
  ```
154
155
 
156
+ `--domain` is the same two calls as one command:
157
+
158
+ ```bash
159
+ ship ./dist --domain www.example.com
160
+ ```
161
+
162
+ Both spellings are supported and neither replaces the other. The pipe composes interactively — any two commands, wherever `-q` gives you the value the next one wants. `--domain` is one process, one exit code, and one `--json`, which is what CI needs: a `run:` block is `bash -e` **without** `pipefail`, so a pipeline reports only the last command's status and a failed deploy is masked. It answers as the domain, exactly as `ship domains set` does — DNS records and setup link included on a new external domain — and it needs a token, which it checks before uploading anything.
163
+
155
164
  ### Shell Completion
156
165
 
157
166
  ```bash
@@ -180,6 +189,7 @@ Available on `ship <path>` and `ship deployments upload`:
180
189
 
181
190
  | Flag | Description |
182
191
  |------|-------------|
192
+ | `--domain <domain>` | Serve this deployment at that domain — creates or repoints it. Needs a token |
183
193
  | `--label <label>` | Add label (repeatable) |
184
194
  | `--password <password>` | Password-protect this deployment (6–128 chars) |
185
195
  | `--no-path-detect` | Disable automatic path optimization |
package/SKILL.md CHANGED
@@ -62,7 +62,7 @@ ship ./dist --json
62
62
  "via": "cli",
63
63
  "created": 1743552000,
64
64
  "expires": 1743811200,
65
- "claim": "https://my.shipstatic.com/claim/abc123"
65
+ "claim": "https://my.shipstatic.com/claim/1234567890abcdef1234567890abcdef"
66
66
  }
67
67
  ```
68
68
 
@@ -123,8 +123,8 @@ Requires an API key. Full workflow:
123
123
  # 1. Validate
124
124
  ship domains validate www.example.com
125
125
 
126
- # 2. Deploy + link in one pipe
127
- ship ./dist -q | ship domains set www.example.com
126
+ # 2. Deploy + link in one command
127
+ ship ./dist --domain www.example.com
128
128
 
129
129
  # 3. Show DNS records to the user
130
130
  ship domains records www.example.com
@@ -135,6 +135,8 @@ ship domains verify www.example.com
135
135
 
136
136
  Step 2 auto-prints DNS records and a setup link in text mode. With `--json`, call `domains records` separately.
137
137
 
138
+ `--domain` answers **as the domain** — same output as `ship domains set`, with the freshly linked deployment in the `deployment` field. Prefer it over the pipe (`ship ./dist -q | ship domains set www.example.com`), which still works: one process means one exit code and one JSON document, so a failed deploy cannot be masked by the second command. It requires a token and refuses before uploading anything if there isn't one. If the link fails, the deployment still exists and is reported first — re-run to link it again.
139
+
138
140
  Verification is async — DNS propagation takes minutes to hours. Check status with `ship domains get <name> --json` and look for `"status": "success"`.
139
141
 
140
142
  ### Domain types
@@ -235,6 +237,7 @@ List commands return `{"<resource>s": [...], "cursor": null}`. A non-null `curso
235
237
 
236
238
  ```bash
237
239
  ship ./dist # Deploy (shortcut)
240
+ ship ./dist --domain <name> # Deploy and serve it at that domain
238
241
  ship deployments upload <path> # Deploy (explicit)
239
242
  ship deployments list # List all
240
243
  ship deployments get <deployment> # Details
@@ -275,6 +278,7 @@ ship tokens delete <token> # Delete (revokes immediately)
275
278
  | `--json` | JSON output |
276
279
  | `-q, --quiet` | Identifier only |
277
280
  | `--token <token>` | Any ship token: API key or deploy token |
281
+ | `--domain <domain>` | Deploy and serve it there — creates or repoints. Needs a token |
278
282
  | `--label <label>` | Set label (repeatable, replaces all) |
279
283
  | `--password <pwd>` | Password-protect deployment (6–128 chars) |
280
284
  | `--no-path-detect` | Skip build output auto-detection |
@@ -0,0 +1,365 @@
1
+ # Third-party licenses
2
+
3
+ `@shipstatic/ship` bundles the packages below into its published artifact.
4
+ Their copyright notices travel with that copy, and are reproduced here in
5
+ full. This file is GENERATED from the build's own metafile — edit the
6
+ bundle, not this list.
7
+
8
+ ## @shipstatic/types 2.7.0-beta.2
9
+
10
+ License: MIT
11
+
12
+ ```
13
+ MIT License
14
+
15
+ Copyright (c) 2025 shipstatic
16
+
17
+ Permission is hereby granted, free of charge, to any person obtaining a copy
18
+ of this software and associated documentation files (the "Software"), to deal
19
+ in the Software without restriction, including without limitation the rights
20
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
21
+ copies of the Software, and to permit persons to whom the Software is
22
+ furnished to do so, subject to the following conditions:
23
+
24
+ The above copyright notice and this permission notice shall be included in all
25
+ copies or substantial portions of the Software.
26
+
27
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
28
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
29
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
30
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
31
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
32
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
33
+ SOFTWARE.
34
+ ```
35
+
36
+ ## ansi-regex 5.0.1
37
+
38
+ License: MIT
39
+
40
+ ```
41
+ MIT License
42
+
43
+ Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
44
+
45
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
46
+
47
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
48
+
49
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
50
+ ```
51
+
52
+ ## clone 1.0.4
53
+
54
+ License: MIT
55
+
56
+ ```
57
+ Copyright © 2011-2015 Paul Vorbach <paul@vorba.ch>
58
+
59
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
60
+ this software and associated documentation files (the “Software”), to deal in
61
+ the Software without restriction, including without limitation the rights to
62
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
63
+ the Software, and to permit persons to whom the Software is furnished to do so,
64
+ subject to the following conditions:
65
+
66
+ The above copyright notice and this permission notice shall be included in all
67
+ copies or substantial portions of the Software.
68
+
69
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
70
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
71
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
72
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
73
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, OUT OF OR IN CONNECTION WITH THE
74
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
75
+ ```
76
+
77
+ ## columnify 1.6.0
78
+
79
+ License: MIT
80
+
81
+ ```
82
+ The MIT License (MIT)
83
+
84
+ Copyright (c) 2013 Tim Oxley
85
+
86
+ Permission is hereby granted, free of charge, to any person obtaining a copy
87
+ of this software and associated documentation files (the "Software"), to deal
88
+ in the Software without restriction, including without limitation the rights
89
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
90
+ copies of the Software, and to permit persons to whom the Software is
91
+ furnished to do so, subject to the following conditions:
92
+
93
+ The above copyright notice and this permission notice shall be included in
94
+ all copies or substantial portions of the Software.
95
+
96
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
97
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
98
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
99
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
100
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
101
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
102
+ THE SOFTWARE.
103
+ ```
104
+
105
+ ## commander 14.0.3
106
+
107
+ License: MIT
108
+
109
+ ```
110
+ (The MIT License)
111
+
112
+ Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>
113
+
114
+ Permission is hereby granted, free of charge, to any person obtaining
115
+ a copy of this software and associated documentation files (the
116
+ 'Software'), to deal in the Software without restriction, including
117
+ without limitation the rights to use, copy, modify, merge, publish,
118
+ distribute, sublicense, and/or sell copies of the Software, and to
119
+ permit persons to whom the Software is furnished to do so, subject to
120
+ the following conditions:
121
+
122
+ The above copyright notice and this permission notice shall be
123
+ included in all copies or substantial portions of the Software.
124
+
125
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
126
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
127
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
128
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
129
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
130
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
131
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
132
+ ```
133
+
134
+ ## defaults 1.0.4
135
+
136
+ License: MIT
137
+
138
+ ```
139
+ The MIT License (MIT)
140
+
141
+ Copyright (c) 2022 Sindre Sorhus
142
+ Copyright (c) 2015 Elijah Insua
143
+
144
+ Permission is hereby granted, free of charge, to any person obtaining a copy
145
+ of this software and associated documentation files (the "Software"), to deal
146
+ in the Software without restriction, including without limitation the rights
147
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
148
+ copies of the Software, and to permit persons to whom the Software is
149
+ furnished to do so, subject to the following conditions:
150
+
151
+ The above copyright notice and this permission notice shall be included in
152
+ all copies or substantial portions of the Software.
153
+
154
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
155
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
156
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
157
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
158
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
159
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
160
+ THE SOFTWARE.
161
+ ```
162
+
163
+ ## form-data-encoder 4.1.0
164
+
165
+ License: MIT
166
+
167
+ ```
168
+ The MIT License (MIT)
169
+
170
+ Copyright (c) 2021-present Nick K.
171
+
172
+ Permission is hereby granted, free of charge, to any person obtaining a copy
173
+ of this software and associated documentation files (the "Software"), to deal
174
+ in the Software without restriction, including without limitation the rights
175
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
176
+ copies of the Software, and to permit persons to whom the Software is
177
+ furnished to do so, subject to the following conditions:
178
+
179
+ The above copyright notice and this permission notice shall be included in all
180
+ copies or substantial portions of the Software.
181
+
182
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
183
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
184
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
185
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
186
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
187
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
188
+ SOFTWARE.
189
+ ```
190
+
191
+ ## formdata-node 6.0.3
192
+
193
+ License: MIT
194
+
195
+ ```
196
+ The MIT License (MIT)
197
+
198
+ Copyright (c) 2017-present Nick K.
199
+
200
+ Permission is hereby granted, free of charge, to any person obtaining a copy
201
+ of this software and associated documentation files (the "Software"), to deal
202
+ in the Software without restriction, including without limitation the rights
203
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
204
+ copies of the Software, and to permit persons to whom the Software is
205
+ furnished to do so, subject to the following conditions:
206
+
207
+ The above copyright notice and this permission notice shall be included in all
208
+ copies or substantial portions of the Software.
209
+
210
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
211
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
212
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
213
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
214
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
215
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
216
+ SOFTWARE.
217
+ ```
218
+
219
+ ## junk 4.0.1
220
+
221
+ License: MIT
222
+
223
+ ```
224
+ MIT License
225
+
226
+ Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
227
+
228
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
229
+
230
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
231
+
232
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
233
+ ```
234
+
235
+ ## spark-md5 3.0.2
236
+
237
+ License: (WTFPL OR MIT)
238
+
239
+ ```
240
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
241
+ Version 2, December 2004
242
+
243
+ Copyright (C) 2015 André Cruz <amdfcruz@gmail.com>
244
+
245
+ Everyone is permitted to copy and distribute verbatim or modified
246
+ copies of this license document, and changing it is allowed as long
247
+ as the name is changed.
248
+
249
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
250
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
251
+
252
+ 0. You just DO WHAT THE FUCK YOU WANT TO.
253
+ ```
254
+
255
+ ## strip-ansi 6.0.1
256
+
257
+ License: MIT
258
+
259
+ ```
260
+ MIT License
261
+
262
+ Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
263
+
264
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
265
+
266
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
267
+
268
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
269
+ ```
270
+
271
+ ## wcwidth 1.0.1
272
+
273
+ License: MIT
274
+
275
+ ```
276
+ wcwidth.js: JavaScript Portng of Markus Kuhn's wcwidth() Implementation
277
+ =======================================================================
278
+
279
+ Copyright (C) 2012 by Jun Woong.
280
+
281
+ This package is a JavaScript porting of `wcwidth()` implementation
282
+ [by Markus Kuhn](http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c).
283
+
284
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
285
+ this software and associated documentation files (the "Software"), to deal in
286
+ the Software without restriction, including without limitation the rights to
287
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
288
+ of the Software, and to permit persons to whom the Software is furnished to do
289
+ so, subject to the following conditions:
290
+
291
+ The above copyright notice and this permission notice shall be included in all
292
+ copies or substantial portions of the Software.
293
+
294
+
295
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
296
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
297
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR
298
+ OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
299
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
300
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
301
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
302
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
303
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
304
+ POSSIBILITY OF SUCH DAMAGE.
305
+ ```
306
+
307
+ ## yocto-spinner 1.2.2
308
+
309
+ License: MIT
310
+
311
+ ```
312
+ MIT License
313
+
314
+ Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
315
+
316
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
317
+
318
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
319
+
320
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
321
+ ```
322
+
323
+ ## yoctocolors 2.2.0
324
+
325
+ License: MIT
326
+
327
+ ```
328
+ MIT License
329
+
330
+ Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
331
+
332
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
333
+
334
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
335
+
336
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
337
+ ```
338
+
339
+ ## zod 4.4.3
340
+
341
+ License: MIT
342
+
343
+ ```
344
+ MIT License
345
+
346
+ Copyright (c) 2025 Colin McDonnell
347
+
348
+ Permission is hereby granted, free of charge, to any person obtaining a copy
349
+ of this software and associated documentation files (the "Software"), to deal
350
+ in the Software without restriction, including without limitation the rights
351
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
352
+ copies of the Software, and to permit persons to whom the Software is
353
+ furnished to do so, subject to the following conditions:
354
+
355
+ The above copyright notice and this permission notice shall be included in all
356
+ copies or substantial portions of the Software.
357
+
358
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
359
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
360
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
361
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
362
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
363
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
364
+ SOFTWARE.
365
+ ```
package/dist/browser.d.ts CHANGED
@@ -788,12 +788,30 @@ declare class ShipError extends Error {
788
788
  *
789
789
  * Routing:
790
790
  * - Already a `ShipError` → returned as-is (caller's intent preserved)
791
- * - `AbortError` → `ShipError.cancelled(...)`
791
+ * - `AbortError` → `ShipError.cancelled(...)` — someone stopped it on purpose
792
+ * - `TimeoutError` → `ShipError.network(...)` — a deadline expired, so
793
+ * nothing was exchanged; the message names the timeout
792
794
  * - A transport failure → `ShipError.network(...)` — see `isTransportFailure`
793
795
  * for what each runtime offers as evidence
794
796
  * - Any other `Error` → `ShipError(Api, ...)` (no HTTP status — fetch never reached the server)
795
797
  * - Anything else (string, undefined, etc.) → `ShipError(Api, ...)`
796
798
  *
799
+ * **Abort and timeout are read from `name` BEFORE any `instanceof Error`
800
+ * gate.** A `DOMException` satisfies that gate in every runtime measured
801
+ * (Node, Bun, Chromium, Firefox, WebKit, workerd — all six), but the
802
+ * inheritance is a comparatively recent spec change and this classification
803
+ * has no reason to depend on it: `name` is where the meaning lives, and
804
+ * reading it first costs nothing. The suite plants a non-`Error`
805
+ * `DOMException` shape to hold the arm, since no runtime on the table
806
+ * produces one.
807
+ *
808
+ * A caller's own `AbortSignal.timeout()` is the reachable source of
809
+ * `TimeoutError` — and the two are NOT interchangeable per runtime: WebKit
810
+ * reports a fired `AbortSignal.timeout()` as `AbortError`, so on Safari a
811
+ * deadline is indistinguishable from a cancellation and lands on
812
+ * `Cancelled`. Recorded rather than worked around; `Cancelled` is honest
813
+ * there, since the caller's signal is what stopped it.
814
+ *
797
815
  * The optional `operationName` is composed into the message for context:
798
816
  * `"Get account was cancelled"`, `"Get account failed: ..."`. Defaults to
799
817
  * `"Request"` when omitted.
@@ -863,14 +881,17 @@ declare class ShipError extends Error {
863
881
  */
864
882
  declare function isShipError(error: unknown): error is ShipError;
865
883
  /**
866
- * Plan-based platform limits returned by the `/limits` endpoint.
884
+ * What the platform will refuse, returned by the `/limits` endpoint.
867
885
  *
868
- * The SDK fetches these once on first API call to drive client-side
869
- * file-size / file-count / total-size validation that mirrors what the API
870
- * would enforce server-side. Limits vary by account plan.
886
+ * The SDK fetches this once on first API call to drive client-side validation
887
+ * that mirrors what the API would enforce server-side. The caps vary by
888
+ * account plan; the blocklist does not.
871
889
  *
872
- * These are the *platform's* posted caps for the current account — server
873
- * truth delivered at runtime, never hard-coded on the client.
890
+ * These are the *platform's* posted rules for the current account — server
891
+ * truth delivered at runtime, never hard-coded on the client. That is the
892
+ * whole point of the shape: a rule the server owns and may change reaches the
893
+ * client as data, so a pinned client cannot enforce a policy the platform has
894
+ * moved on from (`npm/types/CLAUDE.md`, "Validation: format vs policy").
874
895
  *
875
896
  * A report: it answers a question and carries only the answer (`CLAUDE.md`,
876
897
  * "A report answers a question").
@@ -882,38 +903,61 @@ interface PlatformLimits {
882
903
  maxFilesCount: number;
883
904
  /** Maximum total size in bytes across all files in a deployment. */
884
905
  maxTotalSize: number;
906
+ /**
907
+ * Lowercase extensions, without the dot, that the platform refuses to host
908
+ * (`exe`, `dmg`, …). Owned and evolved by the API — see
909
+ * `cloudflare/api/src/lib/blocklist.ts`.
910
+ *
911
+ * **Optional, and the absence is load-bearing.** An API deployed before this
912
+ * field existed sends nothing, so a client MUST read absence as "no
913
+ * client-side check" rather than as an empty policy. The hint fails open,
914
+ * the boundary fails closed: the server refuses the file either way, and a
915
+ * client that guessed would only ever be wrong in the direction that refuses
916
+ * a file the platform accepts.
917
+ *
918
+ * The optionality follows the additive-evolution law and retires with its
919
+ * reason: once every environment serves the field, it hardens to required at
920
+ * the entity's next natural break, and the clients' fail-open spellings
921
+ * retire with it (tracked in root `backlog.md`).
922
+ */
923
+ readonly blockedExtensions?: readonly string[];
885
924
  }
886
925
  /**
887
- * Blocked file extensions files that cannot be uploaded.
926
+ * Whether a file is one the platform refuses to host.
888
927
  *
889
- * We accept any file type by default and derive Content-Type from the
890
- * extension at serve time (via mime-db in the API worker). Unknown extensions
891
- * are served as `application/octet-stream` with `X-Content-Type-Options: nosniff`.
928
+ * **The list is not this package's, and that separation is the point.** What
929
+ * counts as a blocked extension is hosting POLICY it evolves, it is enforced
930
+ * at one security boundary, and `virus.exe` is a perfectly well-formed
931
+ * filename that breaks nothing about the upload→serve round-trip. So the API
932
+ * owns the list (`cloudflare/api/src/lib/blocklist.ts`) and delivers it as
933
+ * `PlatformLimits.blockedExtensions`; a client passes what it was given.
892
934
  *
893
- * The blocklist targets file types that pose direct security risks when hosted:
894
- * executables, disk images, malware vectors, dangerous scripts, and shortcuts.
895
- */
896
- declare const BLOCKED_EXTENSIONS: ReadonlySet<string>;
897
- /**
898
- * Check if a filename has a blocked extension.
899
- * Extracts the extension from the filename and checks against the blocklist.
900
- * Case-insensitive. Returns false for files without extensions.
935
+ * What lives here is the MATCHING RULE, and it earns its place by the
936
+ * constellation law's own test. The list's drift is loud in both directions —
937
+ * a stale client uploads a file the API refuses by name, on the first try.
938
+ * A second *matcher* drifts SILENTLY in the one direction that matters: a
939
+ * client stricter than the server refuses a legal file without the server ever
940
+ * being asked, and no error names it. Two holders, silent drift, one owner.
941
+ *
942
+ * The `blocked` collection is required rather than defaulted: this predicate
943
+ * guards a security boundary in the API, and a defaulted-empty argument there
944
+ * would block nothing while reading as though it did. Callers holding a
945
+ * possibly-absent wire field spell the fail-open themselves.
901
946
  *
902
947
  * @example
903
- * isBlockedExtension('virus.exe') // true
904
- * isBlockedExtension('app.dmg') // true
905
- * isBlockedExtension('style.css') // false
906
- * isBlockedExtension('data.custom') // false
907
- * isBlockedExtension('README') // false
948
+ * isBlockedExtension('virus.exe', ['exe']) // true
949
+ * isBlockedExtension('virus.EXE', ['exe']) // true — case-insensitive
950
+ * isBlockedExtension('style.css', ['exe']) // false
951
+ * isBlockedExtension('README', ['exe']) // false — no extension
908
952
  */
909
- declare function isBlockedExtension(filename: string): boolean;
953
+ declare function isBlockedExtension(filename: string, blocked: ReadonlySet<string> | readonly string[]): boolean;
910
954
  /**
911
955
  * The `accept` attribute value for a browser file picker offering web files.
912
956
  *
913
- * **This is a hint, never a rule.** `BLOCKED_EXTENSIONS` is the platform's
914
- * gate and the only thing that decides what may be hosted; this constant
915
- * decides what a *file dialog* shows first. The two are not two halves of one
916
- * policy, and this one must never be consulted to accept or reject a file.
957
+ * **This is a hint, never a rule.** The API's blocklist is the platform's gate
958
+ * and the only thing that decides what may be hosted; this constant decides
959
+ * what a *file dialog* shows first. The two are not two halves of one policy,
960
+ * and this one must never be consulted to accept or reject a file.
917
961
  *
918
962
  * The distinction is structural, not stylistic. `accept` can express only an
919
963
  * allowlist, while the platform's rule is a blocklist — so this list is
@@ -924,9 +968,12 @@ declare function isBlockedExtension(filename: string): boolean;
924
968
  * dropzone and the picker must reach the same verdict on the same files, and
925
969
  * they do — because the verdict is `validateFiles`, downstream of both.
926
970
  *
927
- * Kept beside `BLOCKED_EXTENSIONS` so one file holds both, which is what lets
928
- * `tests/validation-constants.test.ts` fence the invariant that matters: the
929
- * picker must never offer a file the platform will refuse.
971
+ * The invariant that matters the picker must never offer a file the platform
972
+ * will refuse — is fenced where the authority lives, in the API's own suite
973
+ * (`cloudflare/api/tests/lib/blocklist.test.ts`), which reads this published
974
+ * string and holds it against the list it owns. It sat here until the
975
+ * blocklist became the API's, and moving it was the price of that: a fence
976
+ * belongs with whichever side can change and break it.
930
977
  */
931
978
  declare const WEB_FILE_ACCEPT: string;
932
979
  /**
@@ -2358,13 +2405,22 @@ declare function validateDeployPath(deployPath: string, sourceIdentifier: string
2358
2405
  /**
2359
2406
  * Validate a deploy file's name and extension.
2360
2407
  * Rejects unsafe filenames (shell/URL-dangerous chars, reserved names)
2361
- * and blocked file extensions (.exe, .msi, .dll, etc.).
2408
+ * and file extensions the platform refuses to host.
2409
+ *
2410
+ * **The blocklist is the platform's, delivered — not this package's.** It
2411
+ * arrives as `PlatformLimits.blockedExtensions` from `GET /limits`, which the
2412
+ * client has already fetched by the time any file is processed. That is what
2413
+ * keeps a pinned CLI from enforcing a policy the platform has moved on from,
2414
+ * in either direction. Callers pass `[]` when the API sent no list (one that
2415
+ * predates the field): the check then does nothing and the API refuses the
2416
+ * file at the boundary, which is the correct place for it to be refused.
2362
2417
  *
2363
2418
  * @param deployPath - The deployment path to validate
2364
2419
  * @param sourceIdentifier - Human-readable identifier for error messages
2365
- * @throws {ShipError} If the filename is unsafe or extension is blocked
2420
+ * @param blockedExtensions - The platform's blocklist, from `/limits`
2421
+ * @throws {ShipError} If the filename is unsafe or the extension is blocked
2366
2422
  */
2367
- declare function validateDeployFile(deployPath: string, sourceIdentifier: string): void;
2423
+ declare function validateDeployFile(deployPath: string, sourceIdentifier: string, blockedExtensions: readonly string[]): void;
2368
2424
 
2369
2425
  /**
2370
2426
  * Utility functions for string manipulation.
@@ -2448,4 +2504,4 @@ declare class Ship extends Ship$1 {
2448
2504
  protected getDeployBodyCreator(): DeployBodyCreator;
2449
2505
  }
2450
2506
 
2451
- export { API_KEY, API_PATHS, AUTH_BASE_PATH, type Account, type AccountDeleteResponse, type AccountGetResponse, type AccountKeyResponse, type AccountOverrides, AccountPlan, type AccountPlanType, type AccountResource, type AccountUsage, type Activity, type ActivityEvent, type ActivityListResponse, type ActivityMeta, type ApiDeployOptions, ApiHttp, type ApiHttpOptions, AuthMethod, type AuthMethodType, BLOCKED_EXTENSIONS, type BillingCancelResponse, type BillingStatus, CALLER, type CheckoutSession, DEFAULT_API, DEPLOYMENT_CONFIG_FILENAME, DEPLOY_FIELDS, DEPLOY_TOKEN, type DeployBody, type DeployBodyContext, type DeployBodyCreator, type DeployFile, type DeployInput, type Deployment, type DeploymentCreateResponse, type DeploymentDeleteResponse, type DeploymentListResponse, type DeploymentOptions, type DeploymentResource, type DeploymentResourceContext, type DeploymentSetOptions, DeploymentStatus, type DeploymentStatusType, type DeploymentUploadOptions, DeploymentVia, type DeploymentViaType, type DnsLookup, type DnsProvider, type DnsRecord, type DnsRecordType, type Domain, type DomainDeleteResponse, type DomainDnsResponse, type DomainListResponse, type DomainRecordsResponse, type DomainResource, type DomainSetOptions, type DomainSetResult, type DomainShareResponse, DomainStatus, type DomainStatusType, type DomainValidateResponse, type DomainVerifyResponse, type ErrorResponse, ErrorType, type ExecutionEnvironment, FileValidationStatus as FILE_VALIDATION_STATUS, type Fetch, type FileValidationResult, FileValidationStatus, type FileValidationStatusType, IDEMPOTENCY_KEY_CONSTRAINTS, JUNK_DIRECTORIES, LABEL_CONSTRAINTS, LABEL_PATTERN, type LabelsResponse, type ListOptions, type ListResponse, type MD5Result, MY_API_KEY_URL, OAuthScope, type OAuthScopeType, PASSWORD_CONSTRAINTS, PUBLIC_DEPLOYMENT_TTL_SECONDS, type PingResponse, type PlatformLimits, type ResourceContext, SHIP_ENV, type SPACheckDebug, type SPACheckRequest, type SPACheckResponse, SPA_CHECK_CONSTRAINTS, SPA_DEFAULT_CONFIG, type SetupInstructionsResponse, Ship, type ShipClientOptions, ShipError, type ShipEvents, type StaticFile, type Token, type TokenCreateOptions, type TokenCreateResponse, type TokenDeleteResponse, TokenKind, type TokenKindType, type TokenListResponse, type TokenProvider, type TokenResource, UNBUILT_PROJECT_MARKERS, UNSAFE_FILENAME_CHARS, type UploadedFile, type UserVisibleActivityEvent, type ValidatableFile, type ValidationIssue, WEB_FILE_ACCEPT, __setTestEnvironment, allValidFilesReady, assertShipJsonSyntax, calculateMD5, classifyToken, createAccountResource, createDeploymentResource, createDomainResource, createTokenResource, Ship as default, deserializeLabels, extractSubdomain, filterJunk, formatFileSize, generateDeploymentUrl, generateDomainUrl, getENV, getValidFiles, hasUnbuiltMarker, hasUnsafeChars, isBlockedExtension, isCustomDomain, isDeployment, isPlatformDomain, isShipError, normalizeVia, optimizeDeployPaths, pluralize, processFilesForBrowser, serializeLabels, validateApiKey, validateApiUrl, validateCaller, validateDeployFile, validateDeployPath, validateDeployToken, validateFileName, validateFiles, validateIdempotencyKey, validatePassword, validateToken };
2507
+ export { API_KEY, API_PATHS, AUTH_BASE_PATH, type Account, type AccountDeleteResponse, type AccountGetResponse, type AccountKeyResponse, type AccountOverrides, AccountPlan, type AccountPlanType, type AccountResource, type AccountUsage, type Activity, type ActivityEvent, type ActivityListResponse, type ActivityMeta, type ApiDeployOptions, ApiHttp, type ApiHttpOptions, AuthMethod, type AuthMethodType, type BillingCancelResponse, type BillingStatus, CALLER, type CheckoutSession, DEFAULT_API, DEPLOYMENT_CONFIG_FILENAME, DEPLOY_FIELDS, DEPLOY_TOKEN, type DeployBody, type DeployBodyContext, type DeployBodyCreator, type DeployFile, type DeployInput, type Deployment, type DeploymentCreateResponse, type DeploymentDeleteResponse, type DeploymentListResponse, type DeploymentOptions, type DeploymentResource, type DeploymentResourceContext, type DeploymentSetOptions, DeploymentStatus, type DeploymentStatusType, type DeploymentUploadOptions, DeploymentVia, type DeploymentViaType, type DnsLookup, type DnsProvider, type DnsRecord, type DnsRecordType, type Domain, type DomainDeleteResponse, type DomainDnsResponse, type DomainListResponse, type DomainRecordsResponse, type DomainResource, type DomainSetOptions, type DomainSetResult, type DomainShareResponse, DomainStatus, type DomainStatusType, type DomainValidateResponse, type DomainVerifyResponse, type ErrorResponse, ErrorType, type ExecutionEnvironment, FileValidationStatus as FILE_VALIDATION_STATUS, type Fetch, type FileValidationResult, FileValidationStatus, type FileValidationStatusType, IDEMPOTENCY_KEY_CONSTRAINTS, JUNK_DIRECTORIES, LABEL_CONSTRAINTS, LABEL_PATTERN, type LabelsResponse, type ListOptions, type ListResponse, type MD5Result, MY_API_KEY_URL, OAuthScope, type OAuthScopeType, PASSWORD_CONSTRAINTS, PUBLIC_DEPLOYMENT_TTL_SECONDS, type PingResponse, type PlatformLimits, type ResourceContext, SHIP_ENV, type SPACheckDebug, type SPACheckRequest, type SPACheckResponse, SPA_CHECK_CONSTRAINTS, SPA_DEFAULT_CONFIG, type SetupInstructionsResponse, Ship, type ShipClientOptions, ShipError, type ShipEvents, type StaticFile, type Token, type TokenCreateOptions, type TokenCreateResponse, type TokenDeleteResponse, TokenKind, type TokenKindType, type TokenListResponse, type TokenProvider, type TokenResource, UNBUILT_PROJECT_MARKERS, UNSAFE_FILENAME_CHARS, type UploadedFile, type UserVisibleActivityEvent, type ValidatableFile, type ValidationIssue, WEB_FILE_ACCEPT, __setTestEnvironment, allValidFilesReady, assertShipJsonSyntax, calculateMD5, classifyToken, createAccountResource, createDeploymentResource, createDomainResource, createTokenResource, Ship as default, deserializeLabels, extractSubdomain, filterJunk, formatFileSize, generateDeploymentUrl, generateDomainUrl, getENV, getValidFiles, hasUnbuiltMarker, hasUnsafeChars, isBlockedExtension, isCustomDomain, isDeployment, isPlatformDomain, isShipError, normalizeVia, optimizeDeployPaths, pluralize, processFilesForBrowser, serializeLabels, validateApiKey, validateApiUrl, validateCaller, validateDeployFile, validateDeployPath, validateDeployToken, validateFileName, validateFiles, validateIdempotencyKey, validatePassword, validateToken };