@doist/outline-cli 1.10.4 → 2.0.0
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 +16 -0
- package/README.md +1 -1
- package/dist/transport/fetch-with-retry.js +56 -4
- package/dist/transport/fetch-with-retry.js.map +1 -1
- package/dist/transport/http-dispatcher.d.ts +33 -2
- package/dist/transport/http-dispatcher.js +23 -11
- package/dist/transport/http-dispatcher.js.map +1 -1
- package/package.json +5 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
## [2.0.0](https://github.com/Doist/outline-cli/compare/v1.10.5...v2.0.0) (2026-08-27)
|
|
2
|
+
|
|
3
|
+
### ⚠ BREAKING CHANGES
|
|
4
|
+
|
|
5
|
+
* update @doist/cli-core to 1.4.0 and require Node 24 (#93)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* update @doist/cli-core to 1.4.0 and require Node 24 ([#93](https://github.com/Doist/outline-cli/issues/93)) ([e695029](https://github.com/Doist/outline-cli/commit/e6950291d895133887505c67c984601825320407))
|
|
10
|
+
|
|
11
|
+
## [1.10.5](https://github.com/Doist/outline-cli/compare/v1.10.4...v1.10.5) (2026-08-27)
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* pair the undici dispatcher with its own fetch and bump to 7.29.0 ([#92](https://github.com/Doist/outline-cli/issues/92)) ([173d857](https://github.com/Doist/outline-cli/commit/173d857df858615b81e7d903630fdd379eb93db6))
|
|
16
|
+
|
|
1
17
|
## [1.10.4](https://github.com/Doist/outline-cli/compare/v1.10.3...v1.10.4) (2026-07-29)
|
|
2
18
|
|
|
3
19
|
### Bug Fixes
|
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getDefaultTransport } from './http-dispatcher.js';
|
|
2
2
|
const DEFAULT_RETRY_CONFIG = {
|
|
3
3
|
retries: 0,
|
|
4
4
|
retryCondition: isNetworkError,
|
|
@@ -46,8 +46,50 @@ function createTimeoutSignal(timeoutMs, existingSignal) {
|
|
|
46
46
|
});
|
|
47
47
|
return { signal: controller.signal, clear };
|
|
48
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Both `Request` classes in play here — the global one and undici's — reject
|
|
51
|
+
* each other's instances: the check is a plain `instanceof`, and anything that
|
|
52
|
+
* fails it gets stringified, so the request dies with `Failed to parse URL
|
|
53
|
+
* from [object Request]`. Duck-typing catches either class.
|
|
54
|
+
*/
|
|
55
|
+
function isRequestLike(value) {
|
|
56
|
+
return (typeof value === 'object' &&
|
|
57
|
+
value !== null &&
|
|
58
|
+
'url' in value &&
|
|
59
|
+
'method' in value &&
|
|
60
|
+
'headers' in value);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Flatten a `Request` input into a plain URL and init, so neither `fetch`
|
|
64
|
+
* implementation is ever handed a `Request` the other one owns.
|
|
65
|
+
* `fetchWithRetry` is exposed as a `typeof fetch` (see `outlineFetch` in
|
|
66
|
+
* `auth-provider.ts`), so a `Request` is a shape callers may legitimately pass.
|
|
67
|
+
*
|
|
68
|
+
* Reading the body to a buffer up front also keeps it replayable: a request
|
|
69
|
+
* stream is consumed by the first attempt and would replay as an empty body.
|
|
70
|
+
*
|
|
71
|
+
* Explicit `options` win over the request's own fields, matching
|
|
72
|
+
* `fetch(request, init)`.
|
|
73
|
+
*/
|
|
74
|
+
async function flattenRequestInput(url, options) {
|
|
75
|
+
if (typeof url === 'string' || url instanceof URL || !isRequestLike(url)) {
|
|
76
|
+
return { url: url, options };
|
|
77
|
+
}
|
|
78
|
+
const body = url.body ? await url.arrayBuffer() : undefined;
|
|
79
|
+
return {
|
|
80
|
+
url: url.url,
|
|
81
|
+
options: {
|
|
82
|
+
method: url.method,
|
|
83
|
+
headers: [...url.headers],
|
|
84
|
+
...(body === undefined ? {} : { body }),
|
|
85
|
+
...(url.signal ? { signal: url.signal } : {}),
|
|
86
|
+
...options,
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
}
|
|
49
90
|
export async function fetchWithRetry(args) {
|
|
50
|
-
const { url, options = {}, retryConfig = {} } = args;
|
|
91
|
+
const { url, options: rawOptions = {}, retryConfig = {} } = args;
|
|
92
|
+
const { url: requestUrl, options } = await flattenRequestInput(url, rawOptions);
|
|
51
93
|
const config = { ...DEFAULT_RETRY_CONFIG, ...retryConfig };
|
|
52
94
|
const { timeout, signal: userSignal, ...requestOptions } = options;
|
|
53
95
|
let lastError;
|
|
@@ -64,9 +106,19 @@ export async function fetchWithRetry(args) {
|
|
|
64
106
|
...requestOptions,
|
|
65
107
|
signal: requestSignal,
|
|
66
108
|
};
|
|
109
|
+
// Take the dispatcher and its `fetch` as one value: the dispatcher
|
|
110
|
+
// decompresses the body itself, so a `fetch` from a different
|
|
111
|
+
// undici build decodes it a second time and the request fails with
|
|
112
|
+
// `terminated`. A `fetch` of `undefined` means the global one is
|
|
113
|
+
// the right partner (see `DefaultTransport`).
|
|
114
|
+
const transport = getDefaultTransport();
|
|
67
115
|
// @ts-expect-error dispatcher is supported by Node.js fetch via Undici
|
|
68
|
-
fetchOptions.dispatcher =
|
|
69
|
-
|
|
116
|
+
fetchOptions.dispatcher = transport.dispatcher;
|
|
117
|
+
// undici's `fetch` and the global `fetch` have the same call shape;
|
|
118
|
+
// the cast only reconciles undici's own Request/Response types with
|
|
119
|
+
// the global lib types.
|
|
120
|
+
const fetchImpl = (transport.fetch ?? fetch);
|
|
121
|
+
const response = await fetchImpl(requestUrl, fetchOptions);
|
|
70
122
|
if (clearTimeoutFn) {
|
|
71
123
|
clearTimeoutFn();
|
|
72
124
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-with-retry.js","sourceRoot":"","sources":["../../src/transport/fetch-with-retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"fetch-with-retry.js","sourceRoot":"","sources":["../../src/transport/fetch-with-retry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,36 @@
|
|
|
1
|
-
import { type Dispatcher } from 'undici';
|
|
2
|
-
|
|
1
|
+
import { type Dispatcher, fetch as undiciFetch } from 'undici';
|
|
2
|
+
type UndiciFetch = typeof undiciFetch;
|
|
3
|
+
/**
|
|
4
|
+
* A dispatcher and the `fetch` it must be used with. `fetch` is undici's own
|
|
5
|
+
* `fetch` when the decompress interceptor is composed, or `undefined` (meaning:
|
|
6
|
+
* use the runtime's global `fetch`) on runtimes that ship a partial undici.
|
|
7
|
+
*
|
|
8
|
+
* The two halves are cached together so a caller can never hold a dispatcher
|
|
9
|
+
* paired with a mismatched `fetch`. The dispatcher decompresses the response
|
|
10
|
+
* body itself and strips `content-encoding` from the parsed headers only; a
|
|
11
|
+
* `fetch` from a different undici build reads the *raw* headers, still sees
|
|
12
|
+
* `content-encoding: gzip`, and decodes an already-decoded body — the request
|
|
13
|
+
* then dies mid-stream with `TypeError: terminated`. Node's global `fetch` is
|
|
14
|
+
* backed by whatever undici ships inside that Node release (6.x on Node 22 …
|
|
15
|
+
* 8.x on Node 26), which is never the npm `undici` this dispatcher comes from,
|
|
16
|
+
* so sourcing `fetch` from the same package keeps the whole request path on
|
|
17
|
+
* one version.
|
|
18
|
+
*/
|
|
19
|
+
export type DefaultTransport = {
|
|
20
|
+
dispatcher: Dispatcher;
|
|
21
|
+
fetch: UndiciFetch | undefined;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* The default dispatcher and the `fetch` it must be used with, as a single
|
|
25
|
+
* value so the two are always read together. Use both halves:
|
|
26
|
+
*
|
|
27
|
+
* ```ts
|
|
28
|
+
* const transport = getDefaultTransport()
|
|
29
|
+
* const fetchImpl = transport.fetch ?? fetch
|
|
30
|
+
* await fetchImpl(url, { ...options, dispatcher: transport.dispatcher })
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export declare function getDefaultTransport(): DefaultTransport;
|
|
3
34
|
export declare function resetDefaultDispatcherForTests(): Promise<void>;
|
|
4
35
|
type SyncOnly<T> = T extends PromiseLike<unknown> ? never : T;
|
|
5
36
|
export declare function suppressExperimentalWarningsSync<T>(fn: () => SyncOnly<T>): SyncOnly<T>;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { Agent, EnvHttpProxyAgent, interceptors } from 'undici';
|
|
1
|
+
import { Agent, EnvHttpProxyAgent, fetch as undiciFetch, interceptors, } from 'undici';
|
|
2
2
|
const KEEP_ALIVE_OPTIONS = {
|
|
3
3
|
keepAliveTimeout: 1,
|
|
4
4
|
keepAliveMaxTimeout: 1,
|
|
5
5
|
};
|
|
6
6
|
const PROXY_ENV_KEYS = ['HTTPS_PROXY', 'https_proxy', 'HTTP_PROXY', 'http_proxy'];
|
|
7
|
-
let
|
|
7
|
+
let defaultTransport;
|
|
8
8
|
function hasProxyEnv() {
|
|
9
9
|
for (const key of PROXY_ENV_KEYS) {
|
|
10
10
|
if (process.env[key]) {
|
|
@@ -13,7 +13,7 @@ function hasProxyEnv() {
|
|
|
13
13
|
}
|
|
14
14
|
return false;
|
|
15
15
|
}
|
|
16
|
-
function
|
|
16
|
+
function createDefaultTransport() {
|
|
17
17
|
const base = hasProxyEnv()
|
|
18
18
|
? new EnvHttpProxyAgent(KEEP_ALIVE_OPTIONS)
|
|
19
19
|
: new Agent(KEEP_ALIVE_OPTIONS);
|
|
@@ -24,7 +24,9 @@ function createDefaultDispatcher() {
|
|
|
24
24
|
// skip the interceptor instead of crashing on the missing API. Optional
|
|
25
25
|
// chaining also guards a runtime that omits the `interceptors` export.
|
|
26
26
|
if (typeof interceptors?.decompress !== 'function') {
|
|
27
|
-
|
|
27
|
+
// Nothing decompresses on our side, so the global `fetch` — which
|
|
28
|
+
// decompresses natively here — is the correct partner.
|
|
29
|
+
return { dispatcher: base, fetch: undefined };
|
|
28
30
|
}
|
|
29
31
|
// Compose the response-decompression interceptor so gzip/deflate/br/zstd
|
|
30
32
|
// bodies are decoded before consumers parse them. Required on Node 24+:
|
|
@@ -33,18 +35,28 @@ function createDefaultDispatcher() {
|
|
|
33
35
|
// so callers receive raw gzipped bytes and `JSON.parse` fails.
|
|
34
36
|
// See https://github.com/Doist/todoist-cli/issues/318.
|
|
35
37
|
const decompress = suppressExperimentalWarningsSync(() => interceptors.decompress());
|
|
36
|
-
return base.compose(decompress);
|
|
38
|
+
return { dispatcher: base.compose(decompress), fetch: undiciFetch };
|
|
37
39
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
/**
|
|
41
|
+
* The default dispatcher and the `fetch` it must be used with, as a single
|
|
42
|
+
* value so the two are always read together. Use both halves:
|
|
43
|
+
*
|
|
44
|
+
* ```ts
|
|
45
|
+
* const transport = getDefaultTransport()
|
|
46
|
+
* const fetchImpl = transport.fetch ?? fetch
|
|
47
|
+
* await fetchImpl(url, { ...options, dispatcher: transport.dispatcher })
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export function getDefaultTransport() {
|
|
51
|
+
defaultTransport ??= createDefaultTransport();
|
|
52
|
+
return defaultTransport;
|
|
41
53
|
}
|
|
42
54
|
export async function resetDefaultDispatcherForTests() {
|
|
43
|
-
if (!
|
|
55
|
+
if (!defaultTransport) {
|
|
44
56
|
return;
|
|
45
57
|
}
|
|
46
|
-
const dispatcher =
|
|
47
|
-
|
|
58
|
+
const { dispatcher } = defaultTransport;
|
|
59
|
+
defaultTransport = undefined;
|
|
48
60
|
await dispatcher.close();
|
|
49
61
|
}
|
|
50
62
|
export function suppressExperimentalWarningsSync(fn) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-dispatcher.js","sourceRoot":"","sources":["../../src/transport/http-dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"http-dispatcher.js","sourceRoot":"","sources":["../../src/transport/http-dispatcher.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@doist/outline-cli",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "CLI for the Outline wiki/knowledge base API",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -45,17 +45,18 @@
|
|
|
45
45
|
],
|
|
46
46
|
"license": "MIT",
|
|
47
47
|
"engines": {
|
|
48
|
-
"node": ">=
|
|
48
|
+
"node": ">=24",
|
|
49
|
+
"npm": ">=11"
|
|
49
50
|
},
|
|
50
51
|
"dependencies": {
|
|
51
|
-
"@doist/cli-core": "
|
|
52
|
+
"@doist/cli-core": "1.4.0",
|
|
52
53
|
"chalk": "5.6.2",
|
|
53
54
|
"commander": "14.0.2",
|
|
54
55
|
"marked": "18.0.3",
|
|
55
56
|
"marked-terminal-renderer": "2.2.0",
|
|
56
57
|
"oauth4webapi": "3.8.6",
|
|
57
58
|
"open": "10.2.0",
|
|
58
|
-
"undici": "7.
|
|
59
|
+
"undici": "^7.29.0"
|
|
59
60
|
},
|
|
60
61
|
"devDependencies": {
|
|
61
62
|
"@semantic-release/changelog": "6.0.3",
|