@intentic/base 1.310.0 → 1.312.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 +30 -64
- package/dist/acme.d.ts +18 -0
- package/dist/acme.d.ts.map +1 -0
- package/dist/acme.js +167 -0
- package/dist/acme.js.map +1 -0
- package/dist/authoritative-dns.d.ts +2 -0
- package/dist/authoritative-dns.d.ts.map +1 -0
- package/dist/authoritative-dns.js +37 -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/errors.d.ts +3 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +14 -0
- package/dist/errors.js.map +1 -1
- package/dist/fuzzy.d.ts +3 -1
- package/dist/fuzzy.d.ts.map +1 -1
- package/dist/fuzzy.js +11 -0
- package/dist/fuzzy.js.map +1 -1
- package/dist/sqlite.d.ts.map +1 -1
- package/dist/sqlite.js +3 -1
- package/dist/sqlite.js.map +1 -1
- package/package.json +15 -4
package/README.md
CHANGED
|
@@ -1,73 +1,39 @@
|
|
|
1
|
-
#
|
|
1
|
+
# base
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
outside-text neutralizer, the fuzzy path scorer, and the SQLite driver seam.
|
|
5
|
-
|
|
6
|
-
Almost nothing in here knows what this product is. That is the point: each module replaced a decision
|
|
7
|
-
that had been made independently, and differently, in the daemon and in the web app, where the copies could
|
|
8
|
-
only ever drift apart. `outside-text` is the one deliberate exception — it IS product vocabulary (the
|
|
9
|
-
untrusted-content envelope), and it sits here precisely because three separate writers (the daemon's seams,
|
|
10
|
-
webq's saved pages, fileq's sidecars) must speak it byte-identically. There is no barrel export: a consumer
|
|
11
|
-
imports the module it needs (`@intentic/base/when`), because these modules have nothing to do with each other
|
|
12
|
-
and a package that offers them as one thing invites being treated as a junk drawer.
|
|
13
|
-
|
|
14
|
-
## Responsibilities
|
|
15
|
-
|
|
16
|
-
- **`when`**: parse and evaluate a condition written as a string, against a bag of named values the caller
|
|
17
|
-
supplies. This is what lets a condition live in a JSON manifest an extension ships, and be evaluated the same
|
|
18
|
-
way on both sides of the wire. Deliberately not a general expression language: no arithmetic, no calls, no
|
|
19
|
-
reaching past the context object, because these strings arrive from installed extensions.
|
|
20
|
-
- **`lifecycle`**: teardown as structure rather than as a list somebody maintains. A store is registered into
|
|
21
|
-
where things are created and disposed once; it keeps going past a member that throws and reports the failures
|
|
22
|
-
together, so one bad stop cannot strand the ports and child processes queued behind it.
|
|
23
|
-
- **`outside-text`**: the untrusted-content envelope (`wrapOutsideContent`) and the marker neutralizer
|
|
24
|
-
(`neutralizeOutsideText`) that makes it trustworthy: envelope forgeries, harness control tags and model
|
|
25
|
-
reserved tokens are folded (homoglyphs, zero-width characters) and replaced before content is sealed or
|
|
26
|
-
written to disk. Shared because the daemon's seams, webq's saved pages and fileq's derived sidecars must all
|
|
27
|
-
neutralize identically — a drifted copy is a working forgery.
|
|
28
|
-
- **`fuzzy`**: the fzf-style path scorer and the ranking order built on it. Both ends of quick-open answer with
|
|
29
|
-
it — the sandbox's iq `files` engine and the app's own search box — and they used to answer with two copies of
|
|
30
|
-
it, kept identical by hand, where the same keystrokes could have put a different file first on either side.
|
|
31
|
-
- **`sqlite`**: the narrow seam a `node:sqlite` store is written against — the five-method driver interface, the
|
|
32
|
-
BEGIN/COMMIT/ROLLBACK transaction the driver has no helper for, and the schema-version guard that treats a
|
|
33
|
-
mismatch as cache loss. iq's index and iq's session recall are written against this one, not against two.
|
|
34
|
-
- **`async`**: the four shapes of "don't do that again yet", named so the choice between them is visible:
|
|
35
|
-
`Delayer` restarts its clock on every call, `Coalescer` opens a window on the first call and lets later ones
|
|
36
|
-
join it, `SingleFlight` shares one run per key among concurrent callers, and `retry` is the loop with the
|
|
37
|
-
delay in it. Under them sit the three primitives every reconnect loop and readiness wait was hand-rolling
|
|
38
|
-
beside its own `setTimeout`-in-a-promise: `sleep` (interruptible, because a pause a teardown cannot cut
|
|
39
|
-
short is a teardown that waits for it), `pollUntil`, and `createBackoff`. `mapPool` is the odd one out and
|
|
40
|
-
the opposite question — not "wait longer" but "start more at once, up to a limit": the bounded fan-out a
|
|
41
|
-
caller reaches for after writing the same `for (… ) await` loop that turns twenty writes into twenty round
|
|
42
|
-
trips.
|
|
43
|
-
|
|
44
|
-
## Delayer or Coalescer
|
|
45
|
-
|
|
46
|
-
The two debouncers differ by one character when they are written by hand (`timer = setTimeout(…)` versus
|
|
47
|
-
`timer ??= setTimeout(…)`) and by everything in behaviour. Choosing wrong is not a style mistake: a source that
|
|
48
|
-
never goes quiet starves a `Delayer` forever.
|
|
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, and fuzzy path scoring.
|
|
49
4
|
|
|
50
5
|
```mermaid
|
|
51
6
|
flowchart LR
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
end
|
|
7
|
+
manifest["Extension manifests<br/>when strings"] --> base(["base"])
|
|
8
|
+
base -->|"when · fuzzy"| web["Web app<br/>and extension host"]
|
|
9
|
+
base -->|"outside-text · plain-text · lifecycle"| daemon["Sandbox daemon<br/>fileq · webq"]
|
|
10
|
+
base -->|"fuzzy · sqlite"| iq["iq engine"]
|
|
11
|
+
base -->|"async · errors · format"| rest["Every tier<br/>devices, deploy, extensions"]
|
|
58
12
|
```
|
|
59
13
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
14
|
+
- One implementation per rule that more than one tier applies: two copies of a condition, a size label or a
|
|
15
|
+
quick-open ranking disagree on screen. Anything only one surface renders belongs next to that surface.
|
|
16
|
+
- Subpath exports only, with no index, so a browser bundle pulls nothing it does not use. `outside-text` uses Web
|
|
17
|
+
Crypto and `sqlite` imports only types from `node:sqlite`, so neither ties a caller to Node.
|
|
18
|
+
- `when.ts` is a closed grammar with no arithmetic, calls or property access, because its strings arrive from
|
|
19
|
+
installed extensions.
|
|
20
|
+
- `outside-text.ts` wraps chat, pages and tool results in `<untrusted-content>` tags whose close carries a fresh id,
|
|
21
|
+
so content cannot forge its own end. It marks taint and does not defend against a hostile model.
|
|
22
|
+
- `lifecycle.ts` is teardown as a store: whatever needs undoing registers when it is created, a member that throws
|
|
23
|
+
does not stop the rest, and failures surface together. Every scheduler in `async.ts` is disposable.
|
|
24
|
+
- `errors.ts` lets a catch name the failure it expects: `isMissing` is ENOENT or ENOTDIR only, and
|
|
25
|
+
`undefinedIfMissing` answers undefined for "not there" while EACCES, EIO and a bug's TypeError still arrive.
|
|
63
26
|
|
|
64
27
|
## Key files
|
|
65
28
|
|
|
66
|
-
- [src/when.ts](src/when.ts)
|
|
67
|
-
- [src/
|
|
68
|
-
- [src/
|
|
69
|
-
- [src/
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
29
|
+
- [src/when.ts](src/when.ts) — `parseWhen` and `evaluateWhen`, the condition language manifests carry.
|
|
30
|
+
- [src/async.ts](src/async.ts) — `Delayer`, `Coalescer`, `SingleFlight`, `keyedLock`, `retry`, `pollUntil`, `createBackoff`.
|
|
31
|
+
- [src/lifecycle.ts](src/lifecycle.ts) — `IDisposable`, `DisposableStore` and `MutableDisposable`.
|
|
32
|
+
- [src/outside-text.ts](src/outside-text.ts) — `wrapOutsideContent`, the envelope for outside text.
|
|
33
|
+
- [src/fuzzy.ts](src/fuzzy.ts) — `fuzzyScore`, `rankByFuzzy` and the per-keystroke `fuzzyRanker` both quick-open ends share.
|
|
34
|
+
|
|
35
|
+
## Commands
|
|
36
|
+
|
|
37
|
+
```sh
|
|
38
|
+
pnpm --filter @intentic/base test
|
|
39
|
+
```
|
package/dist/acme.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type KeyObject } from "node:crypto";
|
|
2
|
+
export declare const LETS_ENCRYPT_DIRECTORY = "https://acme-v02.api.letsencrypt.org/directory";
|
|
3
|
+
export interface AcmeOptions {
|
|
4
|
+
readonly directoryUrl: string;
|
|
5
|
+
readonly accountKey: KeyObject;
|
|
6
|
+
readonly certificateKey: KeyObject;
|
|
7
|
+
readonly hostnames: readonly string[];
|
|
8
|
+
readonly publishChallenge: (recordName: string, value: string) => Promise<void>;
|
|
9
|
+
readonly removeChallenge: (recordName: string) => Promise<void>;
|
|
10
|
+
readonly resolveTxt?: (recordName: string) => Promise<string[]>;
|
|
11
|
+
readonly fetchImpl?: typeof fetch;
|
|
12
|
+
readonly wait?: (ms: number) => Promise<void>;
|
|
13
|
+
readonly now?: () => number;
|
|
14
|
+
}
|
|
15
|
+
export declare const obtainCertificate: (options: AcmeOptions) => Promise<{
|
|
16
|
+
certificate: string;
|
|
17
|
+
}>;
|
|
18
|
+
//# 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;AAuB/D,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,MAAM,EAAE,CAAC,CAAC;IAChE,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,CAyK7F,CAAC"}
|
package/dist/acme.js
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
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
|
+
const TRANSPORT_ATTEMPTS = 3;
|
|
11
|
+
const TRANSPORT_RETRY_MS = 2_000;
|
|
12
|
+
export const LETS_ENCRYPT_DIRECTORY = "https://acme-v02.api.letsencrypt.org/directory";
|
|
13
|
+
const jsonOf = async (response) => {
|
|
14
|
+
const text = await response.text();
|
|
15
|
+
if (text === "") {
|
|
16
|
+
return {};
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
return JSON.parse(text);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return {};
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
const problemOf = async (response) => {
|
|
26
|
+
const body = await jsonOf(response);
|
|
27
|
+
const detail = typeof body["detail"] === "string" ? body["detail"] : undefined;
|
|
28
|
+
const type = typeof body["type"] === "string" ? body["type"] : undefined;
|
|
29
|
+
return detail ?? type ?? `HTTP ${response.status}`;
|
|
30
|
+
};
|
|
31
|
+
export const obtainCertificate = async (options) => {
|
|
32
|
+
const resolveTxt = options.resolveTxt ?? resolveTxtAuthoritatively;
|
|
33
|
+
const wait = options.wait ?? ((ms) => sleep(ms));
|
|
34
|
+
const now = options.now ?? (() => Date.now());
|
|
35
|
+
const transport = options.fetchImpl ?? fetch;
|
|
36
|
+
const doFetch = async (input, init) => {
|
|
37
|
+
for (let attempt = 1;; attempt += 1) {
|
|
38
|
+
try {
|
|
39
|
+
return await transport(input, init);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
if (attempt >= TRANSPORT_ATTEMPTS) {
|
|
43
|
+
throw error;
|
|
44
|
+
}
|
|
45
|
+
await wait(TRANSPORT_RETRY_MS);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const { crv, kty, x, y } = options.accountKey.export({ format: "jwk" });
|
|
50
|
+
if (kty !== "EC" || crv !== "P-256" || x === undefined || y === undefined) {
|
|
51
|
+
throw new Error("the ACME account key must be a P-256 key");
|
|
52
|
+
}
|
|
53
|
+
const publicJwk = { crv, kty, x, y };
|
|
54
|
+
const thumbprint = base64Url(new Uint8Array(createHash("sha256").update(JSON.stringify(publicJwk)).digest()));
|
|
55
|
+
const directory = (await jsonOf(await doFetch(options.directoryUrl)));
|
|
56
|
+
if (directory.newNonce === undefined || directory.newAccount === undefined || directory.newOrder === undefined) {
|
|
57
|
+
throw new Error(`${options.directoryUrl} is not an ACME directory`);
|
|
58
|
+
}
|
|
59
|
+
let nonce = (await doFetch(directory.newNonce, { method: "HEAD" })).headers.get("replay-nonce") ?? "";
|
|
60
|
+
let kid;
|
|
61
|
+
const signedPost = async (url, payload) => {
|
|
62
|
+
const encode = (text) => Buffer.from(text, "utf8").toString("base64url");
|
|
63
|
+
const header = encode(JSON.stringify({ alg: "ES256", nonce, url, ...(kid === undefined ? { jwk: publicJwk } : { kid }) }));
|
|
64
|
+
const body = payload === undefined ? "" : encode(JSON.stringify(payload));
|
|
65
|
+
const signature = sign("sha256", Buffer.from(`${header}.${body}`, "ascii"), { key: options.accountKey, dsaEncoding: "ieee-p1363" });
|
|
66
|
+
const jws = { protected: header, payload: body, signature: signature.toString("base64url") };
|
|
67
|
+
const response = await doFetch(url, {
|
|
68
|
+
method: "POST",
|
|
69
|
+
headers: { "content-type": "application/jose+json" },
|
|
70
|
+
body: JSON.stringify(jws),
|
|
71
|
+
});
|
|
72
|
+
nonce = response.headers.get("replay-nonce") ?? nonce;
|
|
73
|
+
if (response.status === 400 && (await response.clone().text()).includes("badNonce")) {
|
|
74
|
+
return signedPost(url, payload);
|
|
75
|
+
}
|
|
76
|
+
return response;
|
|
77
|
+
};
|
|
78
|
+
const account = await signedPost(directory.newAccount, { termsOfServiceAgreed: true });
|
|
79
|
+
if (!account.ok) {
|
|
80
|
+
throw new Error(`ACME account registration failed: ${await problemOf(account)}`);
|
|
81
|
+
}
|
|
82
|
+
kid = account.headers.get("location") ?? undefined;
|
|
83
|
+
if (kid === undefined) {
|
|
84
|
+
throw new Error("ACME account registration returned no account URL");
|
|
85
|
+
}
|
|
86
|
+
const orderResponse = await signedPost(directory.newOrder, {
|
|
87
|
+
identifiers: options.hostnames.map((value) => ({ type: "dns", value })),
|
|
88
|
+
});
|
|
89
|
+
if (!orderResponse.ok) {
|
|
90
|
+
throw new Error(`ACME order failed: ${await problemOf(orderResponse)}`);
|
|
91
|
+
}
|
|
92
|
+
const orderUrl = orderResponse.headers.get("location") ?? "";
|
|
93
|
+
const order = await jsonOf(orderResponse);
|
|
94
|
+
const authorizations = Array.isArray(order["authorizations"]) ? order["authorizations"] : [];
|
|
95
|
+
const finalizeUrl = typeof order["finalize"] === "string" ? order["finalize"] : undefined;
|
|
96
|
+
if (finalizeUrl === undefined) {
|
|
97
|
+
throw new Error("ACME order carried no finalize URL");
|
|
98
|
+
}
|
|
99
|
+
const published = [];
|
|
100
|
+
try {
|
|
101
|
+
for (const authzUrl of authorizations) {
|
|
102
|
+
const authz = await jsonOf(await signedPost(authzUrl, undefined));
|
|
103
|
+
const identifier = authz["identifier"]?.value ?? "";
|
|
104
|
+
const challenges = Array.isArray(authz["challenges"]) ? authz["challenges"] : [];
|
|
105
|
+
const dns01 = challenges.find((challenge) => challenge["type"] === "dns-01");
|
|
106
|
+
if (dns01 === undefined || typeof dns01["token"] !== "string" || typeof dns01["url"] !== "string") {
|
|
107
|
+
throw new Error(`the CA offered no dns-01 challenge for ${identifier}`);
|
|
108
|
+
}
|
|
109
|
+
const keyAuthorization = `${dns01["token"]}.${thumbprint}`;
|
|
110
|
+
const recordName = `_acme-challenge.${identifier}`;
|
|
111
|
+
const digest = base64Url(new Uint8Array(createHash("sha256").update(keyAuthorization).digest()));
|
|
112
|
+
await options.publishChallenge(recordName, digest);
|
|
113
|
+
published.push(recordName);
|
|
114
|
+
await awaitOrThrow(async () => (await resolveTxt(recordName)).includes(digest), {
|
|
115
|
+
wait,
|
|
116
|
+
now,
|
|
117
|
+
what: `publication of ${recordName}`,
|
|
118
|
+
timeoutMs: PUBLICATION_TIMEOUT_MS,
|
|
119
|
+
intervalMs: PUBLICATION_INTERVAL_MS,
|
|
120
|
+
});
|
|
121
|
+
const accepted = await signedPost(dns01["url"], {});
|
|
122
|
+
if (!accepted.ok) {
|
|
123
|
+
throw new Error(`the CA refused the dns-01 challenge for ${identifier}: ${await problemOf(accepted)}`);
|
|
124
|
+
}
|
|
125
|
+
await awaitOrThrow(async () => {
|
|
126
|
+
const state = await jsonOf(await signedPost(authzUrl, undefined));
|
|
127
|
+
if (state["status"] === "invalid") {
|
|
128
|
+
const reason = state["challenges"]?.find((c) => c.error)?.error?.detail;
|
|
129
|
+
throw new Error(`the CA could not validate ${identifier}${reason === undefined ? "" : `: ${reason}`}`);
|
|
130
|
+
}
|
|
131
|
+
return state["status"] === "valid";
|
|
132
|
+
}, { wait, now, what: `validation of ${identifier}`, timeoutMs: VALIDATION_TIMEOUT_MS, intervalMs: POLL_INTERVAL_MS });
|
|
133
|
+
}
|
|
134
|
+
const finalized = await signedPost(finalizeUrl, { csr: base64Url(buildCsr(options.certificateKey, options.hostnames)) });
|
|
135
|
+
if (!finalized.ok) {
|
|
136
|
+
throw new Error(`ACME finalize failed: ${await problemOf(finalized)}`);
|
|
137
|
+
}
|
|
138
|
+
let certificateUrl = typeof (await jsonOf(finalized.clone()))["certificate"] === "string" ? String((await jsonOf(finalized))["certificate"]) : undefined;
|
|
139
|
+
if (certificateUrl === undefined) {
|
|
140
|
+
await awaitOrThrow(async () => {
|
|
141
|
+
const state = await jsonOf(await signedPost(orderUrl, undefined));
|
|
142
|
+
if (state["status"] === "invalid") {
|
|
143
|
+
throw new Error("the CA marked the order invalid after finalize");
|
|
144
|
+
}
|
|
145
|
+
certificateUrl = typeof state["certificate"] === "string" ? state["certificate"] : undefined;
|
|
146
|
+
return certificateUrl !== undefined;
|
|
147
|
+
}, { wait, now, what: "certificate issuance", timeoutMs: VALIDATION_TIMEOUT_MS, intervalMs: POLL_INTERVAL_MS });
|
|
148
|
+
}
|
|
149
|
+
const download = await signedPost(certificateUrl, undefined);
|
|
150
|
+
if (!download.ok) {
|
|
151
|
+
throw new Error(`ACME certificate download failed: ${await problemOf(download)}`);
|
|
152
|
+
}
|
|
153
|
+
return { certificate: await download.text() };
|
|
154
|
+
}
|
|
155
|
+
finally {
|
|
156
|
+
for (const recordName of published) {
|
|
157
|
+
await options.removeChallenge(recordName).catch(() => {
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
const awaitOrThrow = async (predicate, context) => {
|
|
163
|
+
if (!(await pollUntil(predicate, context))) {
|
|
164
|
+
throw new Error(`timed out waiting for ${context.what}`);
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
//# 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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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authoritative-dns.d.ts","sourceRoot":"","sources":["../src/authoritative-dns.ts"],"names":[],"mappings":"AAmCA,eAAO,MAAM,yBAAyB,eAAsB,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CAoBpF,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Resolver } from "node:dns/promises";
|
|
2
|
+
const QUERY_TIMEOUT_MS = 3_000;
|
|
3
|
+
const resolverFor = (servers) => {
|
|
4
|
+
const resolver = new Resolver({ timeout: QUERY_TIMEOUT_MS, tries: 1 });
|
|
5
|
+
if (servers !== undefined) {
|
|
6
|
+
resolver.setServers([...servers]);
|
|
7
|
+
}
|
|
8
|
+
return resolver;
|
|
9
|
+
};
|
|
10
|
+
const nameserversFor = async (recordName) => {
|
|
11
|
+
const resolver = resolverFor();
|
|
12
|
+
const labels = recordName.split(".");
|
|
13
|
+
for (let index = 0; index < labels.length - 1; index += 1) {
|
|
14
|
+
const nameservers = await resolver.resolveNs(labels.slice(index).join(".")).catch(() => []);
|
|
15
|
+
if (nameservers.length > 0) {
|
|
16
|
+
return nameservers;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return [];
|
|
20
|
+
};
|
|
21
|
+
export const resolveTxtAuthoritatively = async (recordName) => {
|
|
22
|
+
const nameservers = await nameserversFor(recordName);
|
|
23
|
+
const perNameserver = await Promise.all(nameservers.map(async (nameserver) => {
|
|
24
|
+
const addresses = await resolverFor()
|
|
25
|
+
.resolve4(nameserver)
|
|
26
|
+
.catch(() => []);
|
|
27
|
+
if (addresses.length === 0) {
|
|
28
|
+
return [];
|
|
29
|
+
}
|
|
30
|
+
const records = await resolverFor(addresses)
|
|
31
|
+
.resolveTxt(recordName)
|
|
32
|
+
.catch(() => []);
|
|
33
|
+
return records.map((chunks) => chunks.join(""));
|
|
34
|
+
}));
|
|
35
|
+
return perNameserver.reduce((shared, values) => shared.filter((value) => values.includes(value)), perNameserver[0] ?? []);
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=authoritative-dns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authoritative-dns.js","sourceRoot":"","sources":["../src/authoritative-dns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAM7C,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAE/B,MAAM,WAAW,GAAG,CAAC,OAA2B,EAAY,EAAE;IAC1D,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACvE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACxB,QAAQ,CAAC,UAAU,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AAIF,MAAM,cAAc,GAAG,KAAK,EAAE,UAAkB,EAAqB,EAAE;IACnE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAErC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAGxD,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5F,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,WAAW,CAAC;QACvB,CAAC;IACL,CAAC;IACD,OAAO,EAAE,CAAC;AACd,CAAC,CAAC;AAIF,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,EAAE,UAAkB,EAAqB,EAAE;IACrF,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;IACrD,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACnC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;QACjC,MAAM,SAAS,GAAG,MAAM,WAAW,EAAE;aAChC,QAAQ,CAAC,UAAU,CAAC;aAEpB,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACrB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACd,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC;aACvC,UAAU,CAAC,UAAU,CAAC;aAEtB,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAErB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CACL,CAAC;IACF,OAAO,aAAa,CAAC,MAAM,CAAW,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACxI,CAAC,CAAC"}
|
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/errors.d.ts
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
1
|
export declare const errorMessage: (error: unknown) => string;
|
|
2
|
+
export declare const errnoCode: (error: unknown) => string | undefined;
|
|
3
|
+
export declare const isMissing: (error: unknown) => boolean;
|
|
4
|
+
export declare const undefinedIfMissing: (error: unknown) => undefined;
|
|
2
5
|
//# sourceMappingURL=errors.d.ts.map
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,YAAY,UAAW,OAAO,KAAG,MAAkE,CAAC"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,YAAY,UAAW,OAAO,KAAG,MAAkE,CAAC;AAGjH,eAAO,MAAM,SAAS,UAAW,OAAO,KAAG,MAAM,GAAG,SAGnD,CAAC;AAGF,eAAO,MAAM,SAAS,UAAW,OAAO,KAAG,OAG1C,CAAC;AAGF,eAAO,MAAM,kBAAkB,UAAW,OAAO,KAAG,SAKnD,CAAC"}
|
package/dist/errors.js
CHANGED
|
@@ -1,2 +1,16 @@
|
|
|
1
1
|
export const errorMessage = (error) => (error instanceof Error ? error.message : String(error));
|
|
2
|
+
export const errnoCode = (error) => {
|
|
3
|
+
const code = typeof error === `object` && error !== null ? error.code : undefined;
|
|
4
|
+
return typeof code === `string` ? code : undefined;
|
|
5
|
+
};
|
|
6
|
+
export const isMissing = (error) => {
|
|
7
|
+
const code = errnoCode(error);
|
|
8
|
+
return code === `ENOENT` || code === `ENOTDIR`;
|
|
9
|
+
};
|
|
10
|
+
export const undefinedIfMissing = (error) => {
|
|
11
|
+
if (isMissing(error)) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
throw error;
|
|
15
|
+
};
|
|
2
16
|
//# sourceMappingURL=errors.js.map
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAGjH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAc,EAAsB,EAAE;IAC5D,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAE,KAA4B,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1G,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAc,EAAW,EAAE;IACjD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,CAAC;AACnD,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAc,EAAa,EAAE;IAC5D,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,KAAK,CAAC;AAChB,CAAC,CAAC"}
|
package/dist/fuzzy.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export declare const fuzzyScore: (needle: string, path: string) => number | undefined;
|
|
2
|
-
export
|
|
2
|
+
export type Ranked = {
|
|
3
3
|
readonly path: string;
|
|
4
4
|
readonly score: number;
|
|
5
5
|
}[];
|
|
6
|
+
export declare const rankByFuzzy: (needle: string, paths: Iterable<string>) => Ranked;
|
|
7
|
+
export declare const fuzzyRanker: () => ((needle: string, paths: readonly string[]) => Ranked);
|
|
6
8
|
//# sourceMappingURL=fuzzy.d.ts.map
|
package/dist/fuzzy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fuzzy.d.ts","sourceRoot":"","sources":["../src/fuzzy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fuzzy.d.ts","sourceRoot":"","sources":["../src/fuzzy.ts"],"names":[],"mappings":"AAkCA,eAAO,MAAM,UAAU,WAAY,MAAM,QAAQ,MAAM,KAAG,MAAM,GAAG,SAalE,CAAC;AAGF,MAAM,MAAM,MAAM,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC;AAMzE,eAAO,MAAM,WAAW,WAAY,MAAM,SAAS,QAAQ,CAAC,MAAM,CAAC,KAAG,MASrE,CAAC;AAMF,eAAO,MAAM,WAAW,QAAO,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,MAAM,CAWnF,CAAC"}
|
package/dist/fuzzy.js
CHANGED
|
@@ -40,4 +40,15 @@ export const rankByFuzzy = (needle, paths) => {
|
|
|
40
40
|
}
|
|
41
41
|
return scored.toSorted((a, b) => b.score - a.score || (a.path < b.path ? -1 : 1));
|
|
42
42
|
};
|
|
43
|
+
export const fuzzyRanker = () => {
|
|
44
|
+
let last;
|
|
45
|
+
return (needle, paths) => {
|
|
46
|
+
const narrowed = last !== undefined && last.paths === paths && last.needle !== "" && needle.toLowerCase().startsWith(last.needle.toLowerCase())
|
|
47
|
+
? last.ranked.map((entry) => entry.path)
|
|
48
|
+
: paths;
|
|
49
|
+
const ranked = rankByFuzzy(needle, narrowed);
|
|
50
|
+
last = { paths, needle, ranked };
|
|
51
|
+
return ranked;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
43
54
|
//# sourceMappingURL=fuzzy.js.map
|
package/dist/fuzzy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fuzzy.js","sourceRoot":"","sources":["../src/fuzzy.ts"],"names":[],"mappings":"AAIA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAG/C,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAE,EAAU,EAAU,EAAE,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;AAI9I,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAE,QAAgB,EAAE,IAAY,EAAsB,EAAE;IAC5F,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;IACrB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;QACxC,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAE,CAAC;QACvB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACvC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"fuzzy.js","sourceRoot":"","sources":["../src/fuzzy.ts"],"names":[],"mappings":"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"}
|
package/dist/sqlite.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,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,
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,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"}
|
package/dist/sqlite.js
CHANGED
package/dist/sqlite.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"AAmBA,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,EAAgB,EAAY,EAAE,CAAC,CAAC;IACnD,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAU;IAChE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAoB;IAC1E,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,EAAE;QACpB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IACnC,CAAC;IACD,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE;QAChB,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjB,IAAI,CAAC;YACD,EAAE,EAAE,CAAC;YACL,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"AAmBA,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,EAAgB,EAAY,EAAE,CAAC,CAAC;IACnD,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAU;IAChE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAoB;IAC1E,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,EAAE;QACpB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IACnC,CAAC;IACD,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE;QAChB,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjB,IAAI,CAAC;YACD,EAAE,EAAE,CAAC;YACL,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAEb,IAAI,EAAE,CAAC,aAAa,EAAE,CAAC;gBACnB,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACxB,CAAC;YACD,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IACD,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE;CAC1B,CAAC,CAAC;AAMH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EAAY,EAAE,OAAe,EAAE,KAAa,EAAQ,EAAE;IACrF,MAAM,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,qDAAqD,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACvF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,EAAE,CAAC,GAAG,CAAC,4DAA4D,EAAE,OAAO,CAAC,CAAC;QAC9E,OAAO;IACX,CAAC;IACD,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACpB,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,MAAM,CAAC,KAAK,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;IACtE,CAAC;AACL,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intentic/base",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.312.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,17 @@
|
|
|
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
|
+
},
|
|
53
64
|
"./async": {
|
|
54
65
|
"types": "./dist/async.d.ts",
|
|
55
66
|
"import": {
|
|
@@ -123,10 +134,10 @@
|
|
|
123
134
|
"devDependencies": {
|
|
124
135
|
"@intentic/testing": "0.0.0",
|
|
125
136
|
"@intentic/tsconfig": "0.0.0",
|
|
126
|
-
"@types/bun": "1.4.
|
|
127
|
-
"@types/node": "24.13.
|
|
137
|
+
"@types/bun": "1.4.2",
|
|
138
|
+
"@types/node": "24.13.6",
|
|
128
139
|
"@typescript/native-preview": "7.0.0-dev.20260707.2",
|
|
129
|
-
"fast-check": "4.
|
|
140
|
+
"fast-check": "4.10.2"
|
|
130
141
|
},
|
|
131
142
|
"scripts": {
|
|
132
143
|
"build": "tsgo",
|