@intentic/base 1.311.0 → 1.313.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/README.md +24 -2
- package/dist/acme.d.ts +22 -0
- package/dist/acme.d.ts.map +1 -0
- package/dist/acme.js +193 -0
- package/dist/acme.js.map +1 -0
- package/dist/async.d.ts +2 -0
- package/dist/async.d.ts.map +1 -1
- package/dist/async.js +15 -0
- package/dist/async.js.map +1 -1
- package/dist/authoritative-dns.d.ts +6 -0
- package/dist/authoritative-dns.d.ts.map +1 -0
- package/dist/authoritative-dns.js +45 -0
- package/dist/authoritative-dns.js.map +1 -0
- package/dist/csr.d.ts +4 -0
- package/dist/csr.d.ts.map +1 -0
- package/dist/csr.js +48 -0
- package/dist/csr.js.map +1 -0
- package/dist/held.d.ts +18 -0
- package/dist/held.d.ts.map +1 -0
- package/dist/held.js +49 -0
- package/dist/held.js.map +1 -0
- package/dist/node/fs.d.ts +5 -0
- package/dist/node/fs.d.ts.map +1 -0
- package/dist/node/fs.js +62 -0
- package/dist/node/fs.js.map +1 -0
- package/dist/node/web-stream.d.ts +4 -0
- package/dist/node/web-stream.d.ts.map +1 -0
- package/dist/node/web-stream.js +3 -0
- package/dist/node/web-stream.js.map +1 -0
- package/dist/node/whisper.d.ts +15 -0
- package/dist/node/whisper.d.ts.map +1 -0
- package/dist/node/whisper.js +48 -0
- package/dist/node/whisper.js.map +1 -0
- package/dist/sqlite.d.ts +6 -1
- package/dist/sqlite.d.ts.map +1 -1
- package/dist/sqlite.js +37 -0
- package/dist/sqlite.js.map +1 -1
- package/dist/workers/worker-calls.d.ts +26 -0
- package/dist/workers/worker-calls.d.ts.map +1 -0
- package/dist/workers/worker-calls.js +103 -0
- package/dist/workers/worker-calls.js.map +1 -0
- package/package.json +70 -4
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# base
|
|
2
2
|
|
|
3
|
-
Runtime primitives that every tier, from the daemon to the browser, must run identically: when-expressions, disposal, async schedulers, untrusted-content tags, size and token formatting,
|
|
3
|
+
Runtime primitives that every tier, from the daemon to the browser, must run identically: when-expressions, disposal, async schedulers, untrusted-content tags, size and token formatting, fuzzy path scoring, and the file, SQLite, worker-thread and whisper plumbing the Node tiers share.
|
|
4
4
|
|
|
5
5
|
```mermaid
|
|
6
6
|
flowchart LR
|
|
@@ -8,21 +8,41 @@ flowchart LR
|
|
|
8
8
|
base -->|"when · fuzzy"| web["Web app<br/>and extension host"]
|
|
9
9
|
base -->|"outside-text · plain-text · lifecycle"| daemon["Sandbox daemon<br/>fileq · webq"]
|
|
10
10
|
base -->|"fuzzy · sqlite"| iq["iq engine"]
|
|
11
|
+
base -->|"fs · sqlite · worker-calls · whisper"| node["Node tiers<br/>daemon, devices, Discord"]
|
|
11
12
|
base -->|"async · errors · format"| rest["Every tier<br/>devices, deploy, extensions"]
|
|
13
|
+
base -->|"held"| daemon
|
|
12
14
|
```
|
|
13
15
|
|
|
14
16
|
- One implementation per rule that more than one tier applies: two copies of a condition, a size label or a
|
|
15
17
|
quick-open ranking disagree on screen. Anything only one surface renders belongs next to that surface.
|
|
16
18
|
- Subpath exports only, with no index, so a browser bundle pulls nothing it does not use. `outside-text` uses Web
|
|
17
|
-
Crypto
|
|
19
|
+
Crypto, so it does not tie a caller to Node; `fs`, `sqlite`, `worker-calls`, `whisper`, `web-stream` and `acme` are Node's.
|
|
18
20
|
- `when.ts` is a closed grammar with no arithmetic, calls or property access, because its strings arrive from
|
|
19
21
|
installed extensions.
|
|
20
22
|
- `outside-text.ts` wraps chat, pages and tool results in `<untrusted-content>` tags whose close carries a fresh id,
|
|
21
23
|
so content cannot forge its own end. It marks taint and does not defend against a hostile model.
|
|
22
24
|
- `lifecycle.ts` is teardown as a store: whatever needs undoing registers when it is created, a member that throws
|
|
23
25
|
does not stop the rest, and failures surface together. Every scheduler in `async.ts` is disposable.
|
|
26
|
+
- `held.ts` is how a reading kept between asks states its two limits: the change feed that makes it stale, and
|
|
27
|
+
`maxAgeMs`, how late a change that feed missed may show. `freshness` is one reading, `held` is readings by key. The
|
|
28
|
+
daemon's directory reads and compiled `.gitignore` matchers, land standings and history index use it.
|
|
24
29
|
- `errors.ts` lets a catch name the failure it expects: `isMissing` is ENOENT or ENOTDIR only, and
|
|
25
30
|
`undefinedIfMissing` answers undefined for "not there" while EACCES, EIO and a bug's TypeError still arrive.
|
|
31
|
+
- `node/fs.ts` is the one atomic write: staged beside the target and renamed over it, a given mode exact rather than cut
|
|
32
|
+
by the umask, the rename retried while Windows holds the target open. `queueOnFile` serializes one path's
|
|
33
|
+
read-modify-write across every handle in the process.
|
|
34
|
+
- `sqlite.ts` has two doors. A cache store holds the `SqliteDb` seam, whose `transaction` is a plain BEGIN that does
|
|
35
|
+
not nest. A store holding a `DatabaseSync` opens it with `openSqlite` (WAL, a busy timeout, foreign keys) and
|
|
36
|
+
groups writes with `immediateTransaction`, which takes the write lock at BEGIN and joins a transaction already open.
|
|
37
|
+
- `workers/worker-calls.ts` is a call-and-answer channel to a worker thread, spawned on first call and again after a
|
|
38
|
+
crash, and `workerPool` spreads independent calls over a few of them.
|
|
39
|
+
- `node/whisper.ts` runs whisper-cli the one way the daemon's speech route and Discord voice share, and stores a
|
|
40
|
+
downloaded model so a partial one never reads as present. Reading what whisper prints stays in the contract.
|
|
41
|
+
|
|
42
|
+
- `acme.ts` orders a certificate over DNS-01 and tells the CA to look only once the zone's own nameservers serve the
|
|
43
|
+
challenge (`authoritative-dns.ts`), since an early look fails the authorization for good. On a host whose network
|
|
44
|
+
blocks direct DNS, a caller's `confirmChallenge` (the DNS provider reading the record back) plus
|
|
45
|
+
`PROVIDER_SETTLE_MS` stands in for that, with a warning; without one the wait's deadline fails the order.
|
|
26
46
|
|
|
27
47
|
## Key files
|
|
28
48
|
|
|
@@ -30,7 +50,9 @@ flowchart LR
|
|
|
30
50
|
- [src/async.ts](src/async.ts) — `Delayer`, `Coalescer`, `SingleFlight`, `keyedLock`, `retry`, `pollUntil`, `createBackoff`.
|
|
31
51
|
- [src/lifecycle.ts](src/lifecycle.ts) — `IDisposable`, `DisposableStore` and `MutableDisposable`.
|
|
32
52
|
- [src/outside-text.ts](src/outside-text.ts) — `wrapOutsideContent`, the envelope for outside text.
|
|
53
|
+
- [src/held.ts](src/held.ts) — `freshness` and `held`: a change feed and a time bound for anything kept.
|
|
33
54
|
- [src/fuzzy.ts](src/fuzzy.ts) — `fuzzyScore`, `rankByFuzzy` and the per-keystroke `fuzzyRanker` both quick-open ends share.
|
|
55
|
+
- [src/node/fs.ts](src/node/fs.ts) — `writeFileAtomic`, `queueOnFile`, `pathExists` and `freePort`, the file primitives of every Node tier.
|
|
34
56
|
|
|
35
57
|
## Commands
|
|
36
58
|
|
package/dist/acme.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type KeyObject } from "node:crypto";
|
|
2
|
+
import { type TxtLookup } from "./authoritative-dns.js";
|
|
3
|
+
export declare const PROVIDER_SETTLE_MS = 30000;
|
|
4
|
+
export declare const LETS_ENCRYPT_DIRECTORY = "https://acme-v02.api.letsencrypt.org/directory";
|
|
5
|
+
export interface AcmeOptions {
|
|
6
|
+
readonly directoryUrl: string;
|
|
7
|
+
readonly accountKey: KeyObject;
|
|
8
|
+
readonly certificateKey: KeyObject;
|
|
9
|
+
readonly hostnames: readonly string[];
|
|
10
|
+
readonly publishChallenge: (recordName: string, value: string) => Promise<void>;
|
|
11
|
+
readonly removeChallenge: (recordName: string) => Promise<void>;
|
|
12
|
+
readonly resolveTxt?: (recordName: string) => Promise<TxtLookup>;
|
|
13
|
+
readonly confirmChallenge?: (recordName: string, value: string) => Promise<boolean>;
|
|
14
|
+
readonly warn?: (message: string) => void;
|
|
15
|
+
readonly fetchImpl?: typeof fetch;
|
|
16
|
+
readonly wait?: (ms: number) => Promise<void>;
|
|
17
|
+
readonly now?: () => number;
|
|
18
|
+
}
|
|
19
|
+
export declare const obtainCertificate: (options: AcmeOptions) => Promise<{
|
|
20
|
+
certificate: string;
|
|
21
|
+
}>;
|
|
22
|
+
//# sourceMappingURL=acme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acme.d.ts","sourceRoot":"","sources":["../src/acme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,SAAS,EAAQ,MAAM,aAAa,CAAC;AAG/D,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAiBnF,eAAO,MAAM,kBAAkB,QAAS,CAAC;AAOzC,eAAO,MAAM,sBAAsB,mDAAmD,CAAC;AAQvF,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC;IAE/B,QAAQ,CAAC,cAAc,EAAE,SAAS,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAEtC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,QAAQ,CAAC,eAAe,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAIjE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpF,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC/B;AAwBD,eAAO,MAAM,iBAAiB,YAAmB,WAAW,KAAG,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAiK7F,CAAC"}
|
package/dist/acme.js
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { createHash, sign } from "node:crypto";
|
|
2
|
+
import { setTimeout as sleep } from "node:timers/promises";
|
|
3
|
+
import { pollUntil } from "./async.js";
|
|
4
|
+
import { resolveTxtAuthoritatively } from "./authoritative-dns.js";
|
|
5
|
+
import { base64Url, buildCsr } from "./csr.js";
|
|
6
|
+
const VALIDATION_TIMEOUT_MS = 120_000;
|
|
7
|
+
const POLL_INTERVAL_MS = 3_000;
|
|
8
|
+
const PUBLICATION_TIMEOUT_MS = 90_000;
|
|
9
|
+
const PUBLICATION_INTERVAL_MS = 2_000;
|
|
10
|
+
export const PROVIDER_SETTLE_MS = 30_000;
|
|
11
|
+
const TRANSPORT_ATTEMPTS = 3;
|
|
12
|
+
const TRANSPORT_RETRY_MS = 2_000;
|
|
13
|
+
export const LETS_ENCRYPT_DIRECTORY = "https://acme-v02.api.letsencrypt.org/directory";
|
|
14
|
+
const jsonOf = async (response) => {
|
|
15
|
+
const text = await response.text();
|
|
16
|
+
if (text === "") {
|
|
17
|
+
return {};
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
return JSON.parse(text);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return {};
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
const problemOf = async (response) => {
|
|
27
|
+
const body = await jsonOf(response);
|
|
28
|
+
const detail = typeof body["detail"] === "string" ? body["detail"] : undefined;
|
|
29
|
+
const type = typeof body["type"] === "string" ? body["type"] : undefined;
|
|
30
|
+
return detail ?? type ?? `HTTP ${response.status}`;
|
|
31
|
+
};
|
|
32
|
+
export const obtainCertificate = async (options) => {
|
|
33
|
+
const resolveTxt = options.resolveTxt ?? resolveTxtAuthoritatively;
|
|
34
|
+
const wait = options.wait ?? ((ms) => sleep(ms));
|
|
35
|
+
const now = options.now ?? (() => Date.now());
|
|
36
|
+
const transport = options.fetchImpl ?? fetch;
|
|
37
|
+
const doFetch = async (input, init) => {
|
|
38
|
+
for (let attempt = 1;; attempt += 1) {
|
|
39
|
+
try {
|
|
40
|
+
return await transport(input, init);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
if (attempt >= TRANSPORT_ATTEMPTS) {
|
|
44
|
+
throw error;
|
|
45
|
+
}
|
|
46
|
+
await wait(TRANSPORT_RETRY_MS);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
const { crv, kty, x, y } = options.accountKey.export({ format: "jwk" });
|
|
51
|
+
if (kty !== "EC" || crv !== "P-256" || x === undefined || y === undefined) {
|
|
52
|
+
throw new Error("the ACME account key must be a P-256 key");
|
|
53
|
+
}
|
|
54
|
+
const publicJwk = { crv, kty, x, y };
|
|
55
|
+
const thumbprint = base64Url(new Uint8Array(createHash("sha256").update(JSON.stringify(publicJwk)).digest()));
|
|
56
|
+
const directory = (await jsonOf(await doFetch(options.directoryUrl)));
|
|
57
|
+
if (directory.newNonce === undefined || directory.newAccount === undefined || directory.newOrder === undefined) {
|
|
58
|
+
throw new Error(`${options.directoryUrl} is not an ACME directory`);
|
|
59
|
+
}
|
|
60
|
+
let nonce = (await doFetch(directory.newNonce, { method: "HEAD" })).headers.get("replay-nonce") ?? "";
|
|
61
|
+
let kid;
|
|
62
|
+
const signedPost = async (url, payload) => {
|
|
63
|
+
const encode = (text) => Buffer.from(text, "utf8").toString("base64url");
|
|
64
|
+
const header = encode(JSON.stringify({ alg: "ES256", nonce, url, ...(kid === undefined ? { jwk: publicJwk } : { kid }) }));
|
|
65
|
+
const body = payload === undefined ? "" : encode(JSON.stringify(payload));
|
|
66
|
+
const signature = sign("sha256", Buffer.from(`${header}.${body}`, "ascii"), { key: options.accountKey, dsaEncoding: "ieee-p1363" });
|
|
67
|
+
const jws = { protected: header, payload: body, signature: signature.toString("base64url") };
|
|
68
|
+
const response = await doFetch(url, {
|
|
69
|
+
method: "POST",
|
|
70
|
+
headers: { "content-type": "application/jose+json" },
|
|
71
|
+
body: JSON.stringify(jws),
|
|
72
|
+
});
|
|
73
|
+
nonce = response.headers.get("replay-nonce") ?? nonce;
|
|
74
|
+
if (response.status === 400 && (await response.clone().text()).includes("badNonce")) {
|
|
75
|
+
return signedPost(url, payload);
|
|
76
|
+
}
|
|
77
|
+
return response;
|
|
78
|
+
};
|
|
79
|
+
const account = await signedPost(directory.newAccount, { termsOfServiceAgreed: true });
|
|
80
|
+
if (!account.ok) {
|
|
81
|
+
throw new Error(`ACME account registration failed: ${await problemOf(account)}`);
|
|
82
|
+
}
|
|
83
|
+
kid = account.headers.get("location") ?? undefined;
|
|
84
|
+
if (kid === undefined) {
|
|
85
|
+
throw new Error("ACME account registration returned no account URL");
|
|
86
|
+
}
|
|
87
|
+
const orderResponse = await signedPost(directory.newOrder, {
|
|
88
|
+
identifiers: options.hostnames.map((value) => ({ type: "dns", value })),
|
|
89
|
+
});
|
|
90
|
+
if (!orderResponse.ok) {
|
|
91
|
+
throw new Error(`ACME order failed: ${await problemOf(orderResponse)}`);
|
|
92
|
+
}
|
|
93
|
+
const orderUrl = orderResponse.headers.get("location") ?? "";
|
|
94
|
+
const order = await jsonOf(orderResponse);
|
|
95
|
+
const authorizations = Array.isArray(order["authorizations"]) ? order["authorizations"] : [];
|
|
96
|
+
const finalizeUrl = typeof order["finalize"] === "string" ? order["finalize"] : undefined;
|
|
97
|
+
if (finalizeUrl === undefined) {
|
|
98
|
+
throw new Error("ACME order carried no finalize URL");
|
|
99
|
+
}
|
|
100
|
+
const published = [];
|
|
101
|
+
try {
|
|
102
|
+
for (const authzUrl of authorizations) {
|
|
103
|
+
const authz = await jsonOf(await signedPost(authzUrl, undefined));
|
|
104
|
+
const identifier = authz["identifier"]?.value ?? "";
|
|
105
|
+
const challenges = Array.isArray(authz["challenges"]) ? authz["challenges"] : [];
|
|
106
|
+
const dns01 = challenges.find((challenge) => challenge["type"] === "dns-01");
|
|
107
|
+
if (dns01 === undefined || typeof dns01["token"] !== "string" || typeof dns01["url"] !== "string") {
|
|
108
|
+
throw new Error(`the CA offered no dns-01 challenge for ${identifier}`);
|
|
109
|
+
}
|
|
110
|
+
const keyAuthorization = `${dns01["token"]}.${thumbprint}`;
|
|
111
|
+
const recordName = `_acme-challenge.${identifier}`;
|
|
112
|
+
const digest = base64Url(new Uint8Array(createHash("sha256").update(keyAuthorization).digest()));
|
|
113
|
+
await options.publishChallenge(recordName, digest);
|
|
114
|
+
published.push(recordName);
|
|
115
|
+
await awaitPublication(recordName, digest, { ...options, resolveTxt, wait, now });
|
|
116
|
+
const accepted = await signedPost(dns01["url"], {});
|
|
117
|
+
if (!accepted.ok) {
|
|
118
|
+
throw new Error(`the CA refused the dns-01 challenge for ${identifier}: ${await problemOf(accepted)}`);
|
|
119
|
+
}
|
|
120
|
+
await awaitOrThrow(async () => {
|
|
121
|
+
const state = await jsonOf(await signedPost(authzUrl, undefined));
|
|
122
|
+
if (state["status"] === "invalid") {
|
|
123
|
+
const reason = state["challenges"]?.find((c) => c.error)?.error?.detail;
|
|
124
|
+
throw new Error(`the CA could not validate ${identifier}${reason === undefined ? "" : `: ${reason}`}`);
|
|
125
|
+
}
|
|
126
|
+
return state["status"] === "valid";
|
|
127
|
+
}, { wait, now, what: `validation of ${identifier}`, timeoutMs: VALIDATION_TIMEOUT_MS, intervalMs: POLL_INTERVAL_MS });
|
|
128
|
+
}
|
|
129
|
+
const finalized = await signedPost(finalizeUrl, { csr: base64Url(buildCsr(options.certificateKey, options.hostnames)) });
|
|
130
|
+
if (!finalized.ok) {
|
|
131
|
+
throw new Error(`ACME finalize failed: ${await problemOf(finalized)}`);
|
|
132
|
+
}
|
|
133
|
+
let certificateUrl = typeof (await jsonOf(finalized.clone()))["certificate"] === "string" ? String((await jsonOf(finalized))["certificate"]) : undefined;
|
|
134
|
+
if (certificateUrl === undefined) {
|
|
135
|
+
await awaitOrThrow(async () => {
|
|
136
|
+
const state = await jsonOf(await signedPost(orderUrl, undefined));
|
|
137
|
+
if (state["status"] === "invalid") {
|
|
138
|
+
throw new Error("the CA marked the order invalid after finalize");
|
|
139
|
+
}
|
|
140
|
+
certificateUrl = typeof state["certificate"] === "string" ? state["certificate"] : undefined;
|
|
141
|
+
return certificateUrl !== undefined;
|
|
142
|
+
}, { wait, now, what: "certificate issuance", timeoutMs: VALIDATION_TIMEOUT_MS, intervalMs: POLL_INTERVAL_MS });
|
|
143
|
+
}
|
|
144
|
+
const download = await signedPost(certificateUrl, undefined);
|
|
145
|
+
if (!download.ok) {
|
|
146
|
+
throw new Error(`ACME certificate download failed: ${await problemOf(download)}`);
|
|
147
|
+
}
|
|
148
|
+
return { certificate: await download.text() };
|
|
149
|
+
}
|
|
150
|
+
finally {
|
|
151
|
+
for (const recordName of published) {
|
|
152
|
+
await options.removeChallenge(recordName).catch(() => {
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
const awaitPublication = async (recordName, digest, context) => {
|
|
158
|
+
let last = { values: [], reached: "none" };
|
|
159
|
+
const visible = await pollUntil(async () => {
|
|
160
|
+
last = await context.resolveTxt(recordName);
|
|
161
|
+
return last.values.includes(digest);
|
|
162
|
+
}, { wait: context.wait, now: context.now, timeoutMs: PUBLICATION_TIMEOUT_MS, intervalMs: PUBLICATION_INTERVAL_MS });
|
|
163
|
+
if (visible) {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const timedOut = `timed out waiting for publication of ${recordName}`;
|
|
167
|
+
if (context.confirmChallenge === undefined) {
|
|
168
|
+
throw new Error(timedOut);
|
|
169
|
+
}
|
|
170
|
+
let confirmed;
|
|
171
|
+
try {
|
|
172
|
+
confirmed = await context.confirmChallenge(recordName, digest);
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
throw new Error(timedOut, { cause: error });
|
|
176
|
+
}
|
|
177
|
+
if (!confirmed) {
|
|
178
|
+
throw new Error(timedOut);
|
|
179
|
+
}
|
|
180
|
+
const seen = {
|
|
181
|
+
none: "none of the zone's nameservers answered this host, so its network likely blocks or intercepts direct DNS",
|
|
182
|
+
some: "only some of the zone's nameservers answered this host",
|
|
183
|
+
all: "the zone's nameservers answered this host without the value, so something on its network may be answering in their place",
|
|
184
|
+
}[last.reached];
|
|
185
|
+
context.warn?.(`${recordName} never showed the challenge in DNS: ${seen}. The DNS provider confirms the record holds it, so the CA is told after ${PROVIDER_SETTLE_MS / 1000} s more.`);
|
|
186
|
+
await context.wait(PROVIDER_SETTLE_MS);
|
|
187
|
+
};
|
|
188
|
+
const awaitOrThrow = async (predicate, context) => {
|
|
189
|
+
if (!(await pollUntil(predicate, context))) {
|
|
190
|
+
throw new Error(`timed out waiting for ${context.what}`);
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
//# sourceMappingURL=acme.js.map
|
package/dist/acme.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acme.js","sourceRoot":"","sources":["../src/acme.ts"],"names":[],"mappings":"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"}
|
package/dist/async.d.ts
CHANGED
|
@@ -29,6 +29,7 @@ export declare class SingleFlight<K, T> implements IDisposable {
|
|
|
29
29
|
dispose(): void;
|
|
30
30
|
}
|
|
31
31
|
export declare const keyedLock: <K>() => (<T>(key: K, task: () => Promise<T>) => Promise<T>);
|
|
32
|
+
export declare const serialLock: () => (<T>(task: () => Promise<T>) => Promise<T>);
|
|
32
33
|
export declare const retry: <T>(task: () => Promise<T>, delay: number, attempts: number) => Promise<T>;
|
|
33
34
|
export declare const mapPool: <T>(items: readonly T[], limit: number, task: (item: T) => Promise<void>) => Promise<void>;
|
|
34
35
|
export declare const sleep: (ms: number, options?: {
|
|
@@ -66,4 +67,5 @@ export declare function narrate<Value, Frame>(run: (onLine: (line: string) => vo
|
|
|
66
67
|
readonly ok: false;
|
|
67
68
|
readonly error: string;
|
|
68
69
|
}) => Frame): AsyncGenerator<NarratedLine | Frame>;
|
|
70
|
+
export declare const whenAborted: (signal: AbortSignal | undefined, handler: () => void) => (() => void);
|
|
69
71
|
//# sourceMappingURL=async.d.ts.map
|
package/dist/async.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../src/async.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../src/async.ts"],"names":[],"mappings":"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"}
|
package/dist/async.js
CHANGED
|
@@ -129,6 +129,10 @@ export const keyedLock = () => {
|
|
|
129
129
|
return next;
|
|
130
130
|
};
|
|
131
131
|
};
|
|
132
|
+
export const serialLock = () => {
|
|
133
|
+
const lock = keyedLock();
|
|
134
|
+
return (task) => lock(undefined, task);
|
|
135
|
+
};
|
|
132
136
|
export const retry = async (task, delay, attempts) => {
|
|
133
137
|
let last;
|
|
134
138
|
for (let attempt = 0; attempt < attempts; attempt += 1) {
|
|
@@ -237,4 +241,15 @@ export async function* narrate(run, end) {
|
|
|
237
241
|
await finished;
|
|
238
242
|
yield end(settled);
|
|
239
243
|
}
|
|
244
|
+
export const whenAborted = (signal, handler) => {
|
|
245
|
+
if (signal === undefined) {
|
|
246
|
+
return () => { };
|
|
247
|
+
}
|
|
248
|
+
if (signal.aborted) {
|
|
249
|
+
handler();
|
|
250
|
+
return () => { };
|
|
251
|
+
}
|
|
252
|
+
signal.addEventListener("abort", handler, { once: true });
|
|
253
|
+
return () => signal.removeEventListener("abort", handler);
|
|
254
|
+
};
|
|
240
255
|
//# sourceMappingURL=async.js.map
|
package/dist/async.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"async.js","sourceRoot":"","sources":["../src/async.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"async.js","sourceRoot":"","sources":["../src/async.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authoritative-dns.d.ts","sourceRoot":"","sources":["../src/authoritative-dns.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,SAAS;IAEtB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAG1B,QAAQ,CAAC,OAAO,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;CAC7C;AA+CD,eAAO,MAAM,yBAAyB,eAAsB,MAAM,KAAG,OAAO,CAAC,SAAS,CAOrF,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Resolver } from "node:dns/promises";
|
|
2
|
+
const QUERY_TIMEOUT_MS = 3_000;
|
|
3
|
+
const ANSWERED_EMPTY = new Set(["ENOTFOUND", "ENODATA"]);
|
|
4
|
+
const resolverFor = (servers) => {
|
|
5
|
+
const resolver = new Resolver({ timeout: QUERY_TIMEOUT_MS, tries: 1 });
|
|
6
|
+
if (servers !== undefined) {
|
|
7
|
+
resolver.setServers([...servers]);
|
|
8
|
+
}
|
|
9
|
+
return resolver;
|
|
10
|
+
};
|
|
11
|
+
const nameserversFor = async (recordName) => {
|
|
12
|
+
const resolver = resolverFor();
|
|
13
|
+
const labels = recordName.split(".");
|
|
14
|
+
for (let index = 0; index < labels.length - 1; index += 1) {
|
|
15
|
+
const nameservers = await resolver.resolveNs(labels.slice(index).join(".")).catch(() => []);
|
|
16
|
+
if (nameservers.length > 0) {
|
|
17
|
+
return nameservers;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return [];
|
|
21
|
+
};
|
|
22
|
+
const askNameserver = async (nameserver, recordName) => {
|
|
23
|
+
const addresses = await resolverFor()
|
|
24
|
+
.resolve4(nameserver)
|
|
25
|
+
.catch(() => []);
|
|
26
|
+
if (addresses.length === 0) {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
const records = await resolverFor(addresses).resolveTxt(recordName);
|
|
31
|
+
return records.map((chunks) => chunks.join(""));
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
return error instanceof Error && "code" in error && ANSWERED_EMPTY.has(String(error.code)) ? [] : undefined;
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
export const resolveTxtAuthoritatively = async (recordName) => {
|
|
38
|
+
const nameservers = await nameserversFor(recordName);
|
|
39
|
+
const answers = await Promise.all(nameservers.map((nameserver) => askNameserver(nameserver, recordName)));
|
|
40
|
+
const answered = answers.filter((values) => values !== undefined);
|
|
41
|
+
const reached = answered.length === 0 ? "none" : answered.length === answers.length ? "all" : "some";
|
|
42
|
+
const values = reached === "all" ? answered.reduce((shared, next) => shared.filter((value) => next.includes(value)), answered[0] ?? []) : [];
|
|
43
|
+
return { values, reached };
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=authoritative-dns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authoritative-dns.js","sourceRoot":"","sources":["../src/authoritative-dns.ts"],"names":[],"mappings":"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"}
|
package/dist/csr.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csr.d.ts","sourceRoot":"","sources":["../src/csr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,SAAS,EAAQ,MAAM,aAAa,CAAC;AA2DpE,eAAO,MAAM,QAAQ,eAAgB,SAAS,aAAa,SAAS,MAAM,EAAE,KAAG,UAiB9E,CAAC;AAGF,eAAO,MAAM,SAAS,UAAW,UAAU,KAAG,MAAkD,CAAC"}
|
package/dist/csr.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { createPublicKey, sign } from "node:crypto";
|
|
2
|
+
const concat = (...parts) => {
|
|
3
|
+
const out = new Uint8Array(parts.reduce((total, part) => total + part.length, 0));
|
|
4
|
+
let offset = 0;
|
|
5
|
+
for (const part of parts) {
|
|
6
|
+
out.set(part, offset);
|
|
7
|
+
offset += part.length;
|
|
8
|
+
}
|
|
9
|
+
return out;
|
|
10
|
+
};
|
|
11
|
+
const lengthBytes = (size) => {
|
|
12
|
+
if (size < 0x80) {
|
|
13
|
+
return Uint8Array.from([size]);
|
|
14
|
+
}
|
|
15
|
+
const bytes = [];
|
|
16
|
+
for (let remaining = size; remaining > 0; remaining = Math.floor(remaining / 256)) {
|
|
17
|
+
bytes.unshift(remaining % 256);
|
|
18
|
+
}
|
|
19
|
+
return Uint8Array.from([0x80 | bytes.length, ...bytes]);
|
|
20
|
+
};
|
|
21
|
+
const der = (tag, content) => concat(Uint8Array.from([tag]), lengthBytes(content.length), content);
|
|
22
|
+
const SEQUENCE = 0x30;
|
|
23
|
+
const SET = 0x31;
|
|
24
|
+
const OCTET_STRING = 0x04;
|
|
25
|
+
const BIT_STRING = 0x03;
|
|
26
|
+
const CONTEXT_0 = 0xa0;
|
|
27
|
+
const DNS_NAME = 0x82;
|
|
28
|
+
const VERSION_0 = Uint8Array.from([0x02, 0x01, 0x00]);
|
|
29
|
+
const OID_EXTENSION_REQUEST = Uint8Array.from([0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x0e]);
|
|
30
|
+
const OID_SUBJECT_ALT_NAME = Uint8Array.from([0x06, 0x03, 0x55, 0x1d, 0x11]);
|
|
31
|
+
const OID_ECDSA_WITH_SHA256 = Uint8Array.from([0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02]);
|
|
32
|
+
const sanAttributes = (hostnames) => {
|
|
33
|
+
const generalNames = der(SEQUENCE, concat(...hostnames.map((host) => der(DNS_NAME, new TextEncoder().encode(host)))));
|
|
34
|
+
const extension = der(SEQUENCE, concat(OID_SUBJECT_ALT_NAME, der(OCTET_STRING, generalNames)));
|
|
35
|
+
const attribute = der(SEQUENCE, concat(OID_EXTENSION_REQUEST, der(SET, der(SEQUENCE, extension))));
|
|
36
|
+
return der(CONTEXT_0, attribute);
|
|
37
|
+
};
|
|
38
|
+
export const buildCsr = (privateKey, hostnames) => {
|
|
39
|
+
if (hostnames.length === 0) {
|
|
40
|
+
throw new Error("a certificate request needs at least one hostname");
|
|
41
|
+
}
|
|
42
|
+
const spki = new Uint8Array(createPublicKey(privateKey).export({ type: "spki", format: "der" }));
|
|
43
|
+
const requestInfo = der(SEQUENCE, concat(VERSION_0, der(SEQUENCE, new Uint8Array()), spki, sanAttributes(hostnames)));
|
|
44
|
+
const signature = new Uint8Array(sign("sha256", requestInfo, privateKey));
|
|
45
|
+
return der(SEQUENCE, concat(requestInfo, der(SEQUENCE, OID_ECDSA_WITH_SHA256), der(BIT_STRING, concat(Uint8Array.from([0x00]), signature))));
|
|
46
|
+
};
|
|
47
|
+
export const base64Url = (bytes) => Buffer.from(bytes).toString("base64url");
|
|
48
|
+
//# sourceMappingURL=csr.js.map
|
package/dist/csr.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csr.js","sourceRoot":"","sources":["../src/csr.ts"],"names":[],"mappings":"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"}
|
package/dist/held.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface Freshness {
|
|
2
|
+
readonly fresh: () => boolean;
|
|
3
|
+
readonly taken: () => void;
|
|
4
|
+
readonly changed: () => void;
|
|
5
|
+
}
|
|
6
|
+
export interface FeedBound {
|
|
7
|
+
readonly maxAgeMs: number;
|
|
8
|
+
readonly now?: () => number;
|
|
9
|
+
}
|
|
10
|
+
export declare const freshness: ({ maxAgeMs, now }: FeedBound) => Freshness;
|
|
11
|
+
export interface Held<K, V> {
|
|
12
|
+
readonly get: (key: K, read: () => V) => V;
|
|
13
|
+
readonly drop: (key: K) => void;
|
|
14
|
+
readonly clear: () => void;
|
|
15
|
+
readonly size: () => number;
|
|
16
|
+
}
|
|
17
|
+
export declare const held: <K, V>({ maxAgeMs, now }: FeedBound) => Held<K, V>;
|
|
18
|
+
//# sourceMappingURL=held.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"held.d.ts","sourceRoot":"","sources":["../src/held.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,SAAS;IAEtB,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC;IAE9B,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;IAE3B,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,SAAS;IAEtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC/B;AAED,eAAO,MAAM,SAAS,sBAAkC,SAAS,KAAG,SAWnE,CAAC;AAGF,MAAM,WAAW,IAAI,CAAC,CAAC,EAAE,CAAC;IAEtB,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAE3C,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;IAEhC,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,MAAM,CAAC;CAC/B;AAED,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,CAAC,qBAAgC,SAAS,KAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAoC7E,CAAC"}
|
package/dist/held.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export const freshness = ({ maxAgeMs, now = Date.now }) => {
|
|
2
|
+
let at;
|
|
3
|
+
return {
|
|
4
|
+
fresh: () => at !== undefined && now() - at <= maxAgeMs,
|
|
5
|
+
taken: () => {
|
|
6
|
+
at = now();
|
|
7
|
+
},
|
|
8
|
+
changed: () => {
|
|
9
|
+
at = undefined;
|
|
10
|
+
},
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
export const held = ({ maxAgeMs, now = Date.now }) => {
|
|
14
|
+
const readings = new Map();
|
|
15
|
+
let swept = now();
|
|
16
|
+
const sweep = (at) => {
|
|
17
|
+
if (at - swept <= maxAgeMs) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
swept = at;
|
|
21
|
+
for (const [key, reading] of readings) {
|
|
22
|
+
if (at - reading.at > maxAgeMs) {
|
|
23
|
+
readings.delete(key);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
return {
|
|
28
|
+
get: (key, read) => {
|
|
29
|
+
const at = now();
|
|
30
|
+
sweep(at);
|
|
31
|
+
const kept = readings.get(key);
|
|
32
|
+
if (kept !== undefined && at - kept.at <= maxAgeMs) {
|
|
33
|
+
return kept.value;
|
|
34
|
+
}
|
|
35
|
+
const value = read();
|
|
36
|
+
readings.set(key, { at, value });
|
|
37
|
+
return value;
|
|
38
|
+
},
|
|
39
|
+
drop: (key) => {
|
|
40
|
+
readings.delete(key);
|
|
41
|
+
sweep(now());
|
|
42
|
+
},
|
|
43
|
+
clear: () => {
|
|
44
|
+
readings.clear();
|
|
45
|
+
},
|
|
46
|
+
size: () => readings.size,
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=held.js.map
|
package/dist/held.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"held.js","sourceRoot":"","sources":["../src/held.ts"],"names":[],"mappings":"AAoBA,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAa,EAAa,EAAE;IAC5E,IAAI,EAAsB,CAAC;IAC3B,OAAO;QACH,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,SAAS,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,QAAQ;QACvD,KAAK,EAAE,GAAG,EAAE;YACR,EAAE,GAAG,GAAG,EAAE,CAAC;QACf,CAAC;QACD,OAAO,EAAE,GAAG,EAAE;YACV,EAAE,GAAG,SAAS,CAAC;QACnB,CAAC;KACJ,CAAC;AACN,CAAC,CAAC;AAaF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAO,EAAE,QAAQ,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAa,EAAc,EAAE;IAC9E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAiD,CAAC;IAC1E,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;IAElB,MAAM,KAAK,GAAG,CAAC,EAAU,EAAQ,EAAE;QAC/B,IAAI,EAAE,GAAG,KAAK,IAAI,QAAQ,EAAE,CAAC;YACzB,OAAO;QACX,CAAC;QACD,KAAK,GAAG,EAAE,CAAC;QACX,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC;YACpC,IAAI,EAAE,GAAG,OAAO,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;gBAC7B,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;QACL,CAAC;IACL,CAAC,CAAC;IACF,OAAO;QACH,GAAG,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACf,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC;YACjB,KAAK,CAAC,EAAE,CAAC,CAAC;YACV,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,IAAI,KAAK,SAAS,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,QAAQ,EAAE,CAAC;gBACjD,OAAO,IAAI,CAAC,KAAK,CAAC;YACtB,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC;YACrB,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACjC,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;YACV,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACrB,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QACjB,CAAC;QACD,KAAK,EAAE,GAAG,EAAE;YACR,QAAQ,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QACD,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI;KAC5B,CAAC;AACN,CAAC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const pathExists: (path: string) => Promise<boolean>;
|
|
2
|
+
export declare const queueOnFile: <T>(path: string, task: () => Promise<T>) => Promise<T>;
|
|
3
|
+
export declare const writeFileAtomic: (path: string, content: string | Uint8Array, mode?: number) => Promise<void>;
|
|
4
|
+
export declare const freePort: (host?: string) => Promise<number>;
|
|
5
|
+
//# sourceMappingURL=fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/node/fs.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,UAAU,SAAgB,MAAM,KAAG,OAAO,CAAC,OAAO,CAI1D,CAAC;AAMN,eAAO,MAAM,WAAW,GAAI,CAAC,QAAQ,MAAM,QAAQ,MAAM,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAe9E,CAAC;AA2BF,eAAO,MAAM,eAAe,SAAgB,MAAM,WAAW,MAAM,GAAG,UAAU,SAAS,MAAM,KAAG,OAAO,CAAC,IAAI,CAe7G,CAAC;AAGF,eAAO,MAAM,QAAQ,qBAAyB,OAAO,CAAC,MAAM,CAStD,CAAC"}
|
package/dist/node/fs.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { access, chmod, mkdir, rename, rm, writeFile } from "node:fs/promises";
|
|
2
|
+
import { createServer } from "node:net";
|
|
3
|
+
import { basename, dirname, join, resolve } from "node:path";
|
|
4
|
+
import { setTimeout as sleep } from "node:timers/promises";
|
|
5
|
+
export const pathExists = async (path) => access(path).then(() => true, () => false);
|
|
6
|
+
const queues = new Map();
|
|
7
|
+
export const queueOnFile = (path, task) => {
|
|
8
|
+
const key = resolve(path);
|
|
9
|
+
const next = (queues.get(key) ?? Promise.resolve()).then(task);
|
|
10
|
+
const settled = next
|
|
11
|
+
.then(() => undefined, () => undefined)
|
|
12
|
+
.then(() => {
|
|
13
|
+
if (queues.get(key) === settled) {
|
|
14
|
+
queues.delete(key);
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
queues.set(key, settled);
|
|
18
|
+
return next;
|
|
19
|
+
};
|
|
20
|
+
const TRANSIENT_RENAME = new Set(["EPERM", "EACCES", "EBUSY"]);
|
|
21
|
+
const RENAME_ATTEMPTS = 10;
|
|
22
|
+
const RENAME_RETRY_MS = 25;
|
|
23
|
+
const renameOver = async (from, to) => {
|
|
24
|
+
for (let attempt = 1;; attempt++) {
|
|
25
|
+
try {
|
|
26
|
+
await rename(from, to);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
if (process.platform !== "win32" || attempt >= RENAME_ATTEMPTS || !TRANSIENT_RENAME.has(error.code ?? "")) {
|
|
31
|
+
throw error;
|
|
32
|
+
}
|
|
33
|
+
await sleep(RENAME_RETRY_MS);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
let writes = 0;
|
|
38
|
+
export const writeFileAtomic = async (path, content, mode) => {
|
|
39
|
+
writes += 1;
|
|
40
|
+
const staging = join(dirname(path), `.${basename(path)}.${process.pid}.${writes}.tmp`);
|
|
41
|
+
await mkdir(dirname(path), { recursive: true });
|
|
42
|
+
try {
|
|
43
|
+
await writeFile(staging, content, mode === undefined ? undefined : { mode });
|
|
44
|
+
if (mode !== undefined) {
|
|
45
|
+
await chmod(staging, mode);
|
|
46
|
+
}
|
|
47
|
+
await renameOver(staging, path);
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
await rm(staging, { force: true });
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
export const freePort = (host = "127.0.0.1") => new Promise((resolvePort, rejectPort) => {
|
|
54
|
+
const server = createServer();
|
|
55
|
+
server.on("error", rejectPort);
|
|
56
|
+
server.listen(0, host, () => {
|
|
57
|
+
const address = server.address();
|
|
58
|
+
const port = typeof address === "object" && address !== null ? address.port : 0;
|
|
59
|
+
server.close(() => (port === 0 ? rejectPort(new Error("no free port")) : resolvePort(port)));
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/node/fs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ReadableStream as NodeReadableStream } from "node:stream/web";
|
|
2
|
+
export declare const nodeStream: <T>(stream: ReadableStream<T>) => NodeReadableStream<T>;
|
|
3
|
+
export declare const webStream: <T>(stream: NodeReadableStream<T>) => ReadableStream<T>;
|
|
4
|
+
//# sourceMappingURL=web-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-stream.d.ts","sourceRoot":"","sources":["../../src/node/web-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAI5E,eAAO,MAAM,UAAU,GAAI,CAAC,UAAU,cAAc,CAAC,CAAC,CAAC,KAAG,kBAAkB,CAAC,CAAC,CAA+C,CAAC;AAE9H,eAAO,MAAM,SAAS,GAAI,CAAC,UAAU,kBAAkB,CAAC,CAAC,CAAC,KAAG,cAAc,CAAC,CAAC,CAA2C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-stream.js","sourceRoot":"","sources":["../../src/node/web-stream.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAI,MAAyB,EAAyB,EAAE,CAAC,MAA0C,CAAC;AAE9H,MAAM,CAAC,MAAM,SAAS,GAAG,CAAI,MAA6B,EAAqB,EAAE,CAAC,MAAsC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type WhisperExec = (command: string, args: string[], options: {
|
|
2
|
+
timeout: number;
|
|
3
|
+
}) => Promise<{
|
|
4
|
+
stdout: string;
|
|
5
|
+
}>;
|
|
6
|
+
export declare const whisperCliMissing: (exec?: WhisperExec) => Promise<boolean>;
|
|
7
|
+
export interface WhisperRun {
|
|
8
|
+
readonly model: string;
|
|
9
|
+
readonly language: string;
|
|
10
|
+
readonly threads?: number | undefined;
|
|
11
|
+
readonly exec?: WhisperExec | undefined;
|
|
12
|
+
}
|
|
13
|
+
export declare const runWhisper: (wav: Uint8Array, { model, language, threads, exec }: WhisperRun) => Promise<string>;
|
|
14
|
+
export declare const storeWhisperModel: (path: string, model: Blob) => Promise<void>;
|
|
15
|
+
//# sourceMappingURL=whisper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whisper.d.ts","sourceRoot":"","sources":["../../src/node/whisper.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAQzH,eAAO,MAAM,iBAAiB,UAAgB,WAAW,KAAiB,OAAO,CAAC,OAAO,CAOxF,CAAC;AAKF,MAAM,WAAW,UAAU;IAEvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAC3C;AAGD,eAAO,MAAM,UAAU,QAAe,UAAU,sCAAoD,UAAU,KAAG,OAAO,CAAC,MAAM,CAY9H,CAAC;AAGF,eAAO,MAAM,iBAAiB,SAAgB,MAAM,SAAS,IAAI,KAAG,OAAO,CAAC,IAAI,CAW/E,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { createWriteStream } from "node:fs";
|
|
4
|
+
import { mkdir, mkdtemp, rename, rm, writeFile } from "node:fs/promises";
|
|
5
|
+
import { tmpdir } from "node:os";
|
|
6
|
+
import { dirname, join } from "node:path";
|
|
7
|
+
import { Readable } from "node:stream";
|
|
8
|
+
import { pipeline } from "node:stream/promises";
|
|
9
|
+
const execWhisper = (command, args, options) => new Promise((resolve, reject) => {
|
|
10
|
+
execFile(command, args, options, (error, stdout) => (error === null ? resolve({ stdout }) : reject(error)));
|
|
11
|
+
});
|
|
12
|
+
export const whisperCliMissing = async (exec = execWhisper) => {
|
|
13
|
+
try {
|
|
14
|
+
await exec("whisper-cli", ["--help"], { timeout: 10_000 });
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
return error.code === "ENOENT";
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
const RUN_TIMEOUT_MS = 120_000;
|
|
22
|
+
export const runWhisper = async (wav, { model, language, threads, exec = execWhisper }) => {
|
|
23
|
+
const dir = await mkdtemp(join(tmpdir(), "intentic-utterance-"));
|
|
24
|
+
const wavPath = join(dir, "utterance.wav");
|
|
25
|
+
try {
|
|
26
|
+
await writeFile(wavPath, wav, { mode: 0o600 });
|
|
27
|
+
const threadArgs = threads === undefined ? [] : ["-t", String(threads)];
|
|
28
|
+
const args = ["-m", model, "-f", wavPath, "-l", language, ...threadArgs, "--no-timestamps", "--no-prints"];
|
|
29
|
+
const { stdout } = await exec("whisper-cli", args, { timeout: RUN_TIMEOUT_MS });
|
|
30
|
+
return stdout;
|
|
31
|
+
}
|
|
32
|
+
finally {
|
|
33
|
+
await rm(dir, { force: true, recursive: true });
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
export const storeWhisperModel = async (path, model) => {
|
|
37
|
+
await mkdir(dirname(path), { recursive: true });
|
|
38
|
+
const staged = `${path}.${randomUUID()}.part`;
|
|
39
|
+
try {
|
|
40
|
+
await pipeline(Readable.fromWeb(model.stream()), createWriteStream(staged));
|
|
41
|
+
await rename(staged, path);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
await rm(staged, { force: true });
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=whisper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whisper.js","sourceRoot":"","sources":["../../src/node/whisper.ts"],"names":[],"mappings":"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"}
|
package/dist/sqlite.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { DatabaseSync } from "node:sqlite";
|
|
2
2
|
export type SqliteValue = string | number | bigint | Uint8Array | null;
|
|
3
3
|
export type Row = Record<string, SqliteValue>;
|
|
4
4
|
export interface SqliteDb {
|
|
@@ -10,4 +10,9 @@ export interface SqliteDb {
|
|
|
10
10
|
}
|
|
11
11
|
export declare const wrapDb: (db: DatabaseSync) => SqliteDb;
|
|
12
12
|
export declare const guardSchemaVersion: (db: SqliteDb, version: string, label: string) => void;
|
|
13
|
+
export declare const IN_MEMORY = ":memory:";
|
|
14
|
+
export declare const openSqlite: (path: string, options?: {
|
|
15
|
+
readonly readOnly?: boolean;
|
|
16
|
+
}) => DatabaseSync;
|
|
17
|
+
export declare const immediateTransaction: <T>(db: DatabaseSync, work: () => T) => T;
|
|
13
18
|
//# sourceMappingURL=sqlite.d.ts.map
|
package/dist/sqlite.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;AACvE,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAE9C,MAAM,WAAW,QAAQ;IACrB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,GAAG,GAAG,EAAE,CAAC;IAClD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,GAAG,GAAG,GAAG,SAAS,CAAC;IAC5D,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IACjD,WAAW,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAClC,KAAK,IAAI,IAAI,CAAC;CACjB;AAMD,eAAO,MAAM,MAAM,OAAQ,YAAY,KAAG,QAoBxC,CAAC;AAMH,eAAO,MAAM,kBAAkB,OAAQ,QAAQ,WAAW,MAAM,SAAS,MAAM,KAAG,IAUjF,CAAC;AAGF,eAAO,MAAM,SAAS,aAAa,CAAC;AAMpC,eAAO,MAAM,UAAU,SAAU,MAAM,YAAW;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,KAAQ,YAYxF,CAAC;AAGF,eAAO,MAAM,oBAAoB,GAAI,CAAC,MAAM,YAAY,QAAQ,MAAM,CAAC,KAAG,CAqBzE,CAAC"}
|
package/dist/sqlite.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { mkdirSync } from "node:fs";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
|
+
import { DatabaseSync } from "node:sqlite";
|
|
1
4
|
export const wrapDb = (db) => ({
|
|
2
5
|
all: (sql, ...params) => db.prepare(sql).all(...params),
|
|
3
6
|
get: (sql, ...params) => db.prepare(sql).get(...params),
|
|
@@ -30,4 +33,38 @@ export const guardSchemaVersion = (db, version, label) => {
|
|
|
30
33
|
throw new Error(`${label} schema ${String(found)} != ${version}`);
|
|
31
34
|
}
|
|
32
35
|
};
|
|
36
|
+
export const IN_MEMORY = ":memory:";
|
|
37
|
+
const BUSY_TIMEOUT_MS = 5_000;
|
|
38
|
+
export const openSqlite = (path, options = {}) => {
|
|
39
|
+
const memory = path === IN_MEMORY;
|
|
40
|
+
if (!memory && options.readOnly !== true) {
|
|
41
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
42
|
+
}
|
|
43
|
+
const db = new DatabaseSync(path, { readOnly: options.readOnly === true });
|
|
44
|
+
db.exec(`PRAGMA foreign_keys = ON; PRAGMA busy_timeout = ${BUSY_TIMEOUT_MS};`);
|
|
45
|
+
if (!memory && options.readOnly !== true) {
|
|
46
|
+
db.exec("PRAGMA journal_mode = WAL; PRAGMA synchronous = NORMAL;");
|
|
47
|
+
}
|
|
48
|
+
return db;
|
|
49
|
+
};
|
|
50
|
+
export const immediateTransaction = (db, work) => {
|
|
51
|
+
if (db.isTransaction) {
|
|
52
|
+
return work();
|
|
53
|
+
}
|
|
54
|
+
db.exec("BEGIN IMMEDIATE");
|
|
55
|
+
try {
|
|
56
|
+
const result = work();
|
|
57
|
+
if (result instanceof Promise) {
|
|
58
|
+
throw new TypeError("a transaction's work must be synchronous");
|
|
59
|
+
}
|
|
60
|
+
db.exec("COMMIT");
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
if (db.isTransaction) {
|
|
65
|
+
db.exec("ROLLBACK");
|
|
66
|
+
}
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
};
|
|
33
70
|
//# sourceMappingURL=sqlite.js.map
|
package/dist/sqlite.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type MessagePort, Worker } from "node:worker_threads";
|
|
2
|
+
export declare const siblingModule: (meta: ImportMeta, name: string) => URL;
|
|
3
|
+
export type WorkerAnswer<News> = {
|
|
4
|
+
readonly id: number;
|
|
5
|
+
readonly ok: true;
|
|
6
|
+
readonly value?: unknown;
|
|
7
|
+
readonly news?: News;
|
|
8
|
+
} | {
|
|
9
|
+
readonly id: number;
|
|
10
|
+
readonly ok: false;
|
|
11
|
+
readonly message: string;
|
|
12
|
+
} | {
|
|
13
|
+
readonly id?: undefined;
|
|
14
|
+
readonly news: News;
|
|
15
|
+
};
|
|
16
|
+
export interface WorkerCalls<Ask> {
|
|
17
|
+
readonly call: <T>(ask: Ask) => Promise<T>;
|
|
18
|
+
readonly close: () => Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
export declare const post: (port: MessagePort | Worker, message: unknown) => void;
|
|
21
|
+
export declare const workerCalls: <Ask extends object, News = never>(url: URL, workerData: unknown, onNews?: (news: News) => void) => WorkerCalls<Ask>;
|
|
22
|
+
export declare const workerPool: <Ask extends object>(url: URL, workerData: unknown, size: number, idleMs?: number) => WorkerCalls<Ask>;
|
|
23
|
+
export declare const serveCalls: <Ask extends {
|
|
24
|
+
readonly id: number;
|
|
25
|
+
}>(port: MessagePort, answer: (ask: Ask) => Promise<unknown>) => void;
|
|
26
|
+
//# sourceMappingURL=worker-calls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-calls.d.ts","sourceRoot":"","sources":["../../src/workers/worker-calls.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAK/D,eAAO,MAAM,aAAa,SAAU,UAAU,QAAQ,MAAM,KAAG,GAA8D,CAAC;AAG9H,MAAM,MAAM,YAAY,CAAC,IAAI,IACvB;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAA;CAAE,GAC1F;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACrE;IAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC;AAEvD,MAAM,WAAW,WAAW,CAAC,GAAG;IAC5B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAGD,eAAO,MAAM,IAAI,SAAU,WAAW,GAAG,MAAM,WAAW,OAAO,KAAG,IAAqC,CAAC;AAE1G,eAAO,MAAM,WAAW,GAAI,GAAG,SAAS,MAAM,EAAE,IAAI,GAAG,KAAK,OAAO,GAAG,cAAc,OAAO,WAAW,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,KAAG,WAAW,CAAC,GAAG,CAsD3I,CAAC;AAGF,eAAO,MAAM,UAAU,GAAI,GAAG,SAAS,MAAM,OAAO,GAAG,cAAc,OAAO,QAAQ,MAAM,sBAAoB,WAAW,CAAC,GAAG,CAiD5H,CAAC;AAGF,eAAO,MAAM,UAAU,GAAI,GAAG,SAAS;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,QAAQ,WAAW,UAAU,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,OAAO,CAAC,KAAG,IAQ3H,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { extname } from "node:path";
|
|
2
|
+
import { Worker } from "node:worker_threads";
|
|
3
|
+
export const siblingModule = (meta, name) => new URL(`./${name}${extname(meta.filename)}`, meta.url);
|
|
4
|
+
export const post = (port, message) => port.postMessage(message, []);
|
|
5
|
+
export const workerCalls = (url, workerData, onNews) => {
|
|
6
|
+
const pending = new Map();
|
|
7
|
+
let nextId = 0;
|
|
8
|
+
let worker;
|
|
9
|
+
const spawn = () => {
|
|
10
|
+
const spawned = new Worker(url, { workerData });
|
|
11
|
+
const fail = (error) => {
|
|
12
|
+
if (worker === spawned) {
|
|
13
|
+
worker = undefined;
|
|
14
|
+
}
|
|
15
|
+
for (const waiter of pending.values()) {
|
|
16
|
+
waiter.reject(error);
|
|
17
|
+
}
|
|
18
|
+
pending.clear();
|
|
19
|
+
};
|
|
20
|
+
spawned.on("message", (answer) => {
|
|
21
|
+
if ("news" in answer && answer.news !== undefined) {
|
|
22
|
+
onNews?.(answer.news);
|
|
23
|
+
}
|
|
24
|
+
const waiter = answer.id === undefined ? undefined : pending.get(answer.id);
|
|
25
|
+
if (answer.id === undefined || waiter === undefined) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
pending.delete(answer.id);
|
|
29
|
+
if (pending.size === 0) {
|
|
30
|
+
spawned.unref();
|
|
31
|
+
}
|
|
32
|
+
if (answer.ok) {
|
|
33
|
+
waiter.resolve(answer.value);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
waiter.reject(new Error(answer.message));
|
|
37
|
+
});
|
|
38
|
+
spawned.on("error", fail);
|
|
39
|
+
spawned.on("exit", (code) => fail(new Error(`a worker thread exited with code ${String(code)}`)));
|
|
40
|
+
spawned.unref();
|
|
41
|
+
return spawned;
|
|
42
|
+
};
|
|
43
|
+
return {
|
|
44
|
+
call: (ask) => new Promise((resolve, reject) => {
|
|
45
|
+
worker ??= spawn();
|
|
46
|
+
nextId += 1;
|
|
47
|
+
pending.set(nextId, { resolve: resolve, reject });
|
|
48
|
+
worker.ref();
|
|
49
|
+
post(worker, { ...ask, id: nextId });
|
|
50
|
+
}),
|
|
51
|
+
close: async () => {
|
|
52
|
+
await worker?.terminate();
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
export const workerPool = (url, workerData, size, idleMs = 30_000) => {
|
|
57
|
+
const threads = [];
|
|
58
|
+
const pick = () => {
|
|
59
|
+
const least = threads.reduce((best, thread) => (best === undefined || thread.busy < best.busy ? thread : best), undefined);
|
|
60
|
+
if (least !== undefined && (least.busy === 0 || threads.length >= size)) {
|
|
61
|
+
return least;
|
|
62
|
+
}
|
|
63
|
+
const added = { calls: workerCalls(url, workerData), busy: 0 };
|
|
64
|
+
threads.push(added);
|
|
65
|
+
return added;
|
|
66
|
+
};
|
|
67
|
+
const rest = (thread) => {
|
|
68
|
+
if (thread.busy > 0 || thread === threads[0]) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
thread.idle = setTimeout(() => {
|
|
72
|
+
threads.splice(threads.indexOf(thread), 1);
|
|
73
|
+
void thread.calls.close();
|
|
74
|
+
}, idleMs);
|
|
75
|
+
thread.idle.unref();
|
|
76
|
+
};
|
|
77
|
+
return {
|
|
78
|
+
call: async (ask) => {
|
|
79
|
+
const thread = pick();
|
|
80
|
+
clearTimeout(thread.idle);
|
|
81
|
+
thread.busy += 1;
|
|
82
|
+
try {
|
|
83
|
+
return await thread.calls.call(ask);
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
thread.busy -= 1;
|
|
87
|
+
rest(thread);
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
close: async () => {
|
|
91
|
+
for (const thread of threads) {
|
|
92
|
+
clearTimeout(thread.idle);
|
|
93
|
+
}
|
|
94
|
+
await Promise.all(threads.splice(0).map((thread) => thread.calls.close()));
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
export const serveCalls = (port, answer) => {
|
|
99
|
+
port.on("message", (ask) => {
|
|
100
|
+
void answer(ask).then((value) => post(port, { id: ask.id, ok: true, value }), (error) => post(port, { id: ask.id, ok: false, message: error instanceof Error ? error.message : String(error) }));
|
|
101
|
+
});
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=worker-calls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-calls.js","sourceRoot":"","sources":["../../src/workers/worker-calls.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intentic/base",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.313.0",
|
|
4
4
|
"description": "Runtime primitives every tier shares, when-expressions, disposal, and the async schedulers",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -50,6 +50,28 @@
|
|
|
50
50
|
"default": "./dist/outside-text.js"
|
|
51
51
|
}
|
|
52
52
|
},
|
|
53
|
+
"./acme": {
|
|
54
|
+
"types": "./dist/acme.d.ts",
|
|
55
|
+
"import": {
|
|
56
|
+
"@intentic/src": "./src/acme.ts",
|
|
57
|
+
"default": "./dist/acme.js"
|
|
58
|
+
},
|
|
59
|
+
"require": {
|
|
60
|
+
"@intentic/src": "./src/acme.ts",
|
|
61
|
+
"default": "./dist/acme.js"
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"./web-stream": {
|
|
65
|
+
"types": "./dist/node/web-stream.d.ts",
|
|
66
|
+
"import": {
|
|
67
|
+
"@intentic/src": "./src/node/web-stream.ts",
|
|
68
|
+
"default": "./dist/node/web-stream.js"
|
|
69
|
+
},
|
|
70
|
+
"require": {
|
|
71
|
+
"@intentic/src": "./src/node/web-stream.ts",
|
|
72
|
+
"default": "./dist/node/web-stream.js"
|
|
73
|
+
}
|
|
74
|
+
},
|
|
53
75
|
"./async": {
|
|
54
76
|
"types": "./dist/async.d.ts",
|
|
55
77
|
"import": {
|
|
@@ -115,6 +137,50 @@
|
|
|
115
137
|
"@intentic/src": "./src/plain-text.ts",
|
|
116
138
|
"default": "./dist/plain-text.js"
|
|
117
139
|
}
|
|
140
|
+
},
|
|
141
|
+
"./held": {
|
|
142
|
+
"types": "./dist/held.d.ts",
|
|
143
|
+
"import": {
|
|
144
|
+
"@intentic/src": "./src/held.ts",
|
|
145
|
+
"default": "./dist/held.js"
|
|
146
|
+
},
|
|
147
|
+
"require": {
|
|
148
|
+
"@intentic/src": "./src/held.ts",
|
|
149
|
+
"default": "./dist/held.js"
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
"./fs": {
|
|
153
|
+
"types": "./dist/node/fs.d.ts",
|
|
154
|
+
"import": {
|
|
155
|
+
"@intentic/src": "./src/node/fs.ts",
|
|
156
|
+
"default": "./dist/node/fs.js"
|
|
157
|
+
},
|
|
158
|
+
"require": {
|
|
159
|
+
"@intentic/src": "./src/node/fs.ts",
|
|
160
|
+
"default": "./dist/node/fs.js"
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
"./worker-calls": {
|
|
164
|
+
"types": "./dist/workers/worker-calls.d.ts",
|
|
165
|
+
"import": {
|
|
166
|
+
"@intentic/src": "./src/workers/worker-calls.ts",
|
|
167
|
+
"default": "./dist/workers/worker-calls.js"
|
|
168
|
+
},
|
|
169
|
+
"require": {
|
|
170
|
+
"@intentic/src": "./src/workers/worker-calls.ts",
|
|
171
|
+
"default": "./dist/workers/worker-calls.js"
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
"./whisper": {
|
|
175
|
+
"types": "./dist/node/whisper.d.ts",
|
|
176
|
+
"import": {
|
|
177
|
+
"@intentic/src": "./src/node/whisper.ts",
|
|
178
|
+
"default": "./dist/node/whisper.js"
|
|
179
|
+
},
|
|
180
|
+
"require": {
|
|
181
|
+
"@intentic/src": "./src/node/whisper.ts",
|
|
182
|
+
"default": "./dist/node/whisper.js"
|
|
183
|
+
}
|
|
118
184
|
}
|
|
119
185
|
},
|
|
120
186
|
"dependencies": {
|
|
@@ -123,10 +189,10 @@
|
|
|
123
189
|
"devDependencies": {
|
|
124
190
|
"@intentic/testing": "0.0.0",
|
|
125
191
|
"@intentic/tsconfig": "0.0.0",
|
|
126
|
-
"@types/bun": "1.4.
|
|
127
|
-
"@types/node": "24.13.
|
|
192
|
+
"@types/bun": "1.4.2",
|
|
193
|
+
"@types/node": "24.13.6",
|
|
128
194
|
"@typescript/native-preview": "7.0.0-dev.20260707.2",
|
|
129
|
-
"fast-check": "4.
|
|
195
|
+
"fast-check": "4.10.2"
|
|
130
196
|
},
|
|
131
197
|
"scripts": {
|
|
132
198
|
"build": "tsgo",
|