blogwright-core 0.1.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/LICENSE +24 -0
- package/README.md +7 -0
- package/dist/adapters/memory-fs.d.ts +9 -0
- package/dist/adapters/memory-fs.js +54 -0
- package/dist/adapters/memory-fs.js.map +1 -0
- package/dist/adapters/node-fs.d.ts +4 -0
- package/dist/adapters/node-fs.js +65 -0
- package/dist/adapters/node-fs.js.map +1 -0
- package/dist/adapters/node-terminal.d.ts +29 -0
- package/dist/adapters/node-terminal.js +58 -0
- package/dist/adapters/node-terminal.js.map +1 -0
- package/dist/adapters/script-terminal.d.ts +22 -0
- package/dist/adapters/script-terminal.js +38 -0
- package/dist/adapters/script-terminal.js.map +1 -0
- package/dist/aws/acm.d.ts +20 -0
- package/dist/aws/acm.js +55 -0
- package/dist/aws/acm.js.map +1 -0
- package/dist/aws/cloudfront.d.ts +72 -0
- package/dist/aws/cloudfront.js +341 -0
- package/dist/aws/cloudfront.js.map +1 -0
- package/dist/aws/credentials.d.ts +19 -0
- package/dist/aws/credentials.js +36 -0
- package/dist/aws/credentials.js.map +1 -0
- package/dist/aws/endpoint.d.ts +29 -0
- package/dist/aws/endpoint.js +58 -0
- package/dist/aws/endpoint.js.map +1 -0
- package/dist/aws/errors.d.ts +20 -0
- package/dist/aws/errors.js +35 -0
- package/dist/aws/errors.js.map +1 -0
- package/dist/aws/form.d.ts +2 -0
- package/dist/aws/form.js +11 -0
- package/dist/aws/form.js.map +1 -0
- package/dist/aws/iam.d.ts +18 -0
- package/dist/aws/iam.js +122 -0
- package/dist/aws/iam.js.map +1 -0
- package/dist/aws/logs.d.ts +32 -0
- package/dist/aws/logs.js +148 -0
- package/dist/aws/logs.js.map +1 -0
- package/dist/aws/microvms.d.ts +85 -0
- package/dist/aws/microvms.js +182 -0
- package/dist/aws/microvms.js.map +1 -0
- package/dist/aws/route53.d.ts +19 -0
- package/dist/aws/route53.js +71 -0
- package/dist/aws/route53.js.map +1 -0
- package/dist/aws/s3.d.ts +31 -0
- package/dist/aws/s3.js +178 -0
- package/dist/aws/s3.js.map +1 -0
- package/dist/aws/secretsmanager.d.ts +21 -0
- package/dist/aws/secretsmanager.js +84 -0
- package/dist/aws/secretsmanager.js.map +1 -0
- package/dist/aws/signer.d.ts +44 -0
- package/dist/aws/signer.js +144 -0
- package/dist/aws/signer.js.map +1 -0
- package/dist/aws/sts.d.ts +7 -0
- package/dist/aws/sts.js +22 -0
- package/dist/aws/sts.js.map +1 -0
- package/dist/aws/xml.d.ts +18 -0
- package/dist/aws/xml.js +65 -0
- package/dist/aws/xml.js.map +1 -0
- package/dist/clients.d.ts +33 -0
- package/dist/clients.js +38 -0
- package/dist/clients.js.map +1 -0
- package/dist/colors.d.ts +11 -0
- package/dist/colors.js +24 -0
- package/dist/colors.js.map +1 -0
- package/dist/config.d.ts +136 -0
- package/dist/config.js +236 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/ports.d.ts +53 -0
- package/dist/ports.js +15 -0
- package/dist/ports.js.map +1 -0
- package/dist/repo-root.d.ts +8 -0
- package/dist/repo-root.js +20 -0
- package/dist/repo-root.js.map +1 -0
- package/dist/state.d.ts +23 -0
- package/dist/state.js +44 -0
- package/dist/state.js.map +1 -0
- package/dist/util.d.ts +15 -0
- package/dist/util.js +38 -0
- package/dist/util.js.map +1 -0
- package/package.json +42 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Ant Stanley
|
|
4
|
+
|
|
5
|
+
Portions of packages/cli/src/pds/rkey.ts are vendored from
|
|
6
|
+
https://github.com/mastrojs/atproto (MIT License, © 2025 Mastro).
|
|
7
|
+
|
|
8
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
9
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
10
|
+
in the Software without restriction, including without limitation the rights
|
|
11
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
12
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
13
|
+
furnished to do so, subject to the following conditions:
|
|
14
|
+
|
|
15
|
+
The above copyright notice and this permission notice shall be included in all
|
|
16
|
+
copies or substantial portions of the Software.
|
|
17
|
+
|
|
18
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
21
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
22
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
23
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
24
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# blogwright-core
|
|
2
|
+
|
|
3
|
+
SigV4 transport, per-service AWS HTTP clients, config parsing, and the S3 state store
|
|
4
|
+
used by [blogwright](https://www.npmjs.com/package/blogwright). Not useful on its
|
|
5
|
+
own — install `blogwright` instead.
|
|
6
|
+
|
|
7
|
+
Full documentation: https://github.com/antstanley/blogwright
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** In-memory adapter for the FileSystem port, for tests. */
|
|
2
|
+
import { type FileSystem } from '../ports.js';
|
|
3
|
+
/**
|
|
4
|
+
* Build a Map-backed FileSystem seeded with `initialFiles` (path → content).
|
|
5
|
+
* Contents are text; `readBytes` returns the UTF-8 encoding. A directory
|
|
6
|
+
* "exists" when any file lives under it; inspect writes back through
|
|
7
|
+
* `readText`/`listFiles`.
|
|
8
|
+
*/
|
|
9
|
+
export declare function createMemoryFileSystem(initialFiles?: Record<string, string>): FileSystem;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/** In-memory adapter for the FileSystem port, for tests. */
|
|
2
|
+
import { posix } from 'node:path';
|
|
3
|
+
import { FileNotFoundError } from '../ports.js';
|
|
4
|
+
function normalise(path) {
|
|
5
|
+
return posix.resolve('/', path);
|
|
6
|
+
}
|
|
7
|
+
function directoryPrefix(path) {
|
|
8
|
+
return path === '/' ? '/' : `${path}/`;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Build a Map-backed FileSystem seeded with `initialFiles` (path → content).
|
|
12
|
+
* Contents are text; `readBytes` returns the UTF-8 encoding. A directory
|
|
13
|
+
* "exists" when any file lives under it; inspect writes back through
|
|
14
|
+
* `readText`/`listFiles`.
|
|
15
|
+
*/
|
|
16
|
+
export function createMemoryFileSystem(initialFiles = {}) {
|
|
17
|
+
const files = new Map(Object.entries(initialFiles).map(([path, content]) => [normalise(path), content]));
|
|
18
|
+
function isDirectory(path) {
|
|
19
|
+
const prefix = directoryPrefix(path);
|
|
20
|
+
return [...files.keys()].some((key) => key.startsWith(prefix));
|
|
21
|
+
}
|
|
22
|
+
function contentOf(path) {
|
|
23
|
+
const content = files.get(normalise(path));
|
|
24
|
+
if (content === undefined)
|
|
25
|
+
throw new FileNotFoundError(path);
|
|
26
|
+
return content;
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
async readText(path) {
|
|
30
|
+
return contentOf(path);
|
|
31
|
+
},
|
|
32
|
+
async readBytes(path) {
|
|
33
|
+
return new TextEncoder().encode(contentOf(path));
|
|
34
|
+
},
|
|
35
|
+
async writeText(path, text) {
|
|
36
|
+
files.set(normalise(path), text);
|
|
37
|
+
},
|
|
38
|
+
async exists(path) {
|
|
39
|
+
const key = normalise(path);
|
|
40
|
+
return files.has(key) || isDirectory(key);
|
|
41
|
+
},
|
|
42
|
+
async listFiles(dir) {
|
|
43
|
+
const key = normalise(dir);
|
|
44
|
+
if (!isDirectory(key))
|
|
45
|
+
throw new FileNotFoundError(dir);
|
|
46
|
+
const prefix = directoryPrefix(key);
|
|
47
|
+
return [...files.keys()]
|
|
48
|
+
.filter((path) => path.startsWith(prefix))
|
|
49
|
+
.map((path) => path.slice(prefix.length))
|
|
50
|
+
.sort();
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=memory-fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-fs.js","sourceRoot":"","sources":["../../src/adapters/memory-fs.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAE5D,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,iBAAiB,EAAmB,MAAM,aAAa,CAAC;AAEjE,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC;AACzC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,eAAuC,EAAE;IAC9E,MAAM,KAAK,GAAG,IAAI,GAAG,CACnB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAClF,CAAC;IAEF,SAAS,WAAW,CAAC,IAAY;QAC/B,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,SAAS,SAAS,CAAC,IAAY;QAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3C,IAAI,OAAO,KAAK,SAAS;YAAE,MAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC7D,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO;QACL,KAAK,CAAC,QAAQ,CAAC,IAAY;YACzB,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QAED,KAAK,CAAC,SAAS,CAAC,IAAY;YAC1B,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,CAAC;QAED,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,IAAY;YACxC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QACnC,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,IAAY;YACvB,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAC5B,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;QAC5C,CAAC;QAED,KAAK,CAAC,SAAS,CAAC,GAAW;YACzB,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;gBAAE,MAAM,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;iBACrB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;iBACzC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;iBACxC,IAAI,EAAE,CAAC;QACZ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/** Node adapter for the FileSystem port (real disk I/O via node:fs). */
|
|
2
|
+
import { mkdir, readdir, readFile, stat, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { dirname, join, relative } from 'node:path';
|
|
4
|
+
import { FileNotFoundError } from '../ports.js';
|
|
5
|
+
function isAbsence(err) {
|
|
6
|
+
const code = err.code;
|
|
7
|
+
return code === 'ENOENT' || code === 'ENOTDIR';
|
|
8
|
+
}
|
|
9
|
+
function contextualise(operation, path, err) {
|
|
10
|
+
return new Error(`${operation} ${path} failed: ${err.message}`, { cause: err });
|
|
11
|
+
}
|
|
12
|
+
/** Build the real-disk FileSystem adapter. */
|
|
13
|
+
export function createNodeFileSystem() {
|
|
14
|
+
return {
|
|
15
|
+
async readText(path) {
|
|
16
|
+
try {
|
|
17
|
+
return await readFile(path, 'utf8');
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
throw isAbsence(err) ? new FileNotFoundError(path) : contextualise('reading', path, err);
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
async readBytes(path) {
|
|
24
|
+
try {
|
|
25
|
+
return await readFile(path);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
throw isAbsence(err) ? new FileNotFoundError(path) : contextualise('reading', path, err);
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
async writeText(path, text) {
|
|
32
|
+
try {
|
|
33
|
+
await mkdir(dirname(path), { recursive: true });
|
|
34
|
+
await writeFile(path, text);
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
throw contextualise('writing', path, err);
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
async exists(path) {
|
|
41
|
+
try {
|
|
42
|
+
await stat(path);
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
if (isAbsence(err))
|
|
47
|
+
return false;
|
|
48
|
+
throw contextualise('checking', path, err);
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
async listFiles(dir) {
|
|
52
|
+
try {
|
|
53
|
+
const entries = await readdir(dir, { recursive: true, withFileTypes: true });
|
|
54
|
+
return entries
|
|
55
|
+
.filter((entry) => entry.isFile())
|
|
56
|
+
.map((entry) => relative(dir, join(entry.parentPath, entry.name)))
|
|
57
|
+
.sort();
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
throw isAbsence(err) ? new FileNotFoundError(dir) : contextualise('listing', dir, err);
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=node-fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-fs.js","sourceRoot":"","sources":["../../src/adapters/node-fs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** Node adapter for the Terminal port (process streams + node:readline). */
|
|
2
|
+
import type { Terminal } from '../ports.js';
|
|
3
|
+
/** The standard streams the adapter owns; injectable for adapter tests only. */
|
|
4
|
+
export interface TerminalStreams {
|
|
5
|
+
input: NodeJS.ReadableStream & {
|
|
6
|
+
isTTY?: boolean | undefined;
|
|
7
|
+
};
|
|
8
|
+
output: NodeJS.WritableStream & {
|
|
9
|
+
isTTY?: boolean | undefined;
|
|
10
|
+
};
|
|
11
|
+
errorOutput: NodeJS.WritableStream;
|
|
12
|
+
}
|
|
13
|
+
export interface NodeTerminalOptions extends Partial<TerminalStreams> {
|
|
14
|
+
/**
|
|
15
|
+
* Force the minimal, machine-friendly presentation (`--plain`): the terminal
|
|
16
|
+
* reports non-interactive, so output is plain durable lines — no colour, no
|
|
17
|
+
* transient status, no prompts left hanging for automation.
|
|
18
|
+
*/
|
|
19
|
+
plain?: boolean | undefined;
|
|
20
|
+
/** Disable colour only (https://no-color.org). Defaults to the NO_COLOR env var. */
|
|
21
|
+
noColor?: boolean | undefined;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Build the real Terminal adapter over the process's standard streams. TTY
|
|
25
|
+
* state is read once, at construction — never at module load or per call.
|
|
26
|
+
* The transient status line exists only on an interactive TTY; `write`/`error`
|
|
27
|
+
* clear it first so durable lines never interleave with a stale status.
|
|
28
|
+
*/
|
|
29
|
+
export declare function createNodeTerminal(options?: NodeTerminalOptions): Terminal;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/** Node adapter for the Terminal port (process streams + node:readline). */
|
|
2
|
+
import { createInterface } from 'node:readline/promises';
|
|
3
|
+
import { stripColors } from '../colors.js';
|
|
4
|
+
const CLEAR_LINE = '\r\u001B[2K';
|
|
5
|
+
/**
|
|
6
|
+
* Build the real Terminal adapter over the process's standard streams. TTY
|
|
7
|
+
* state is read once, at construction — never at module load or per call.
|
|
8
|
+
* The transient status line exists only on an interactive TTY; `write`/`error`
|
|
9
|
+
* clear it first so durable lines never interleave with a stale status.
|
|
10
|
+
*/
|
|
11
|
+
export function createNodeTerminal(options = {}) {
|
|
12
|
+
const input = options.input ?? process.stdin;
|
|
13
|
+
const output = options.output ?? process.stdout;
|
|
14
|
+
const errorOutput = options.errorOutput ?? process.stderr;
|
|
15
|
+
const plain = options.plain === true;
|
|
16
|
+
const noColor = options.noColor ?? Boolean(process.env.NO_COLOR);
|
|
17
|
+
const interactive = !plain && input.isTTY === true && output.isTTY === true;
|
|
18
|
+
const paint = (line) => (noColor || plain ? stripColors(line) : line);
|
|
19
|
+
let statusShown = false;
|
|
20
|
+
const clearStatus = () => {
|
|
21
|
+
if (!statusShown)
|
|
22
|
+
return;
|
|
23
|
+
output.write(CLEAR_LINE);
|
|
24
|
+
statusShown = false;
|
|
25
|
+
};
|
|
26
|
+
return {
|
|
27
|
+
isInteractive: interactive,
|
|
28
|
+
write(line) {
|
|
29
|
+
clearStatus();
|
|
30
|
+
output.write(`${paint(line)}\n`);
|
|
31
|
+
},
|
|
32
|
+
error(line) {
|
|
33
|
+
clearStatus();
|
|
34
|
+
errorOutput.write(`${paint(line)}\n`);
|
|
35
|
+
},
|
|
36
|
+
status(line) {
|
|
37
|
+
if (!interactive)
|
|
38
|
+
return;
|
|
39
|
+
if (line === '') {
|
|
40
|
+
clearStatus();
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
output.write(`${CLEAR_LINE}${paint(line)}`);
|
|
44
|
+
statusShown = true;
|
|
45
|
+
},
|
|
46
|
+
async question(prompt) {
|
|
47
|
+
clearStatus();
|
|
48
|
+
const readline = createInterface({ input, output });
|
|
49
|
+
try {
|
|
50
|
+
return await readline.question(paint(prompt));
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
readline.close();
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=node-terminal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-terminal.js","sourceRoot":"","sources":["../../src/adapters/node-terminal.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAE5E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAqB3C,MAAM,UAAU,GAAG,aAAa,CAAC;AAEjC;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAA+B,EAAE;IAClE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAChD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC;IACrC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjE,MAAM,WAAW,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;IAC5E,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9E,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,IAAI,CAAC,WAAW;YAAE,OAAO;QACzB,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACzB,WAAW,GAAG,KAAK,CAAC;IACtB,CAAC,CAAC;IAEF,OAAO;QACL,aAAa,EAAE,WAAW;QAE1B,KAAK,CAAC,IAAY;YAChB,WAAW,EAAE,CAAC;YACd,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QAED,KAAK,CAAC,IAAY;YAChB,WAAW,EAAE,CAAC;YACd,WAAW,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,CAAC,IAAY;YACjB,IAAI,CAAC,WAAW;gBAAE,OAAO;YACzB,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;gBAChB,WAAW,EAAE,CAAC;gBACd,OAAO;YACT,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5C,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,MAAc;YAC3B,WAAW,EAAE,CAAC;YACd,MAAM,QAAQ,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACpD,IAAI,CAAC;gBACH,OAAO,MAAM,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YAChD,CAAC;oBAAS,CAAC;gBACT,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** Scripted in-memory adapter for the Terminal port, for tests. */
|
|
2
|
+
import type { Terminal } from '../ports.js';
|
|
3
|
+
/** A Terminal that captures output and answers prompts from a script. */
|
|
4
|
+
export interface ScriptedTerminal extends Terminal {
|
|
5
|
+
/** Lines written to standard output, in order. */
|
|
6
|
+
readonly writes: string[];
|
|
7
|
+
/** Lines written to standard error, in order. */
|
|
8
|
+
readonly errors: string[];
|
|
9
|
+
/** Transient status lines, in order ('' is a clear). */
|
|
10
|
+
readonly statuses: string[];
|
|
11
|
+
/** Prompts shown by `question`, in order. */
|
|
12
|
+
readonly prompts: string[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Build a scripted Terminal. It reports interactive unless told otherwise
|
|
16
|
+
* (a scripted terminal exists to answer prompts) and hands out `answers` in
|
|
17
|
+
* order; a question beyond the script throws so a test never hangs on input.
|
|
18
|
+
*/
|
|
19
|
+
export declare function createScriptedTerminal(options?: {
|
|
20
|
+
interactive?: boolean | undefined;
|
|
21
|
+
answers?: string[] | undefined;
|
|
22
|
+
}): ScriptedTerminal;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/** Scripted in-memory adapter for the Terminal port, for tests. */
|
|
2
|
+
/**
|
|
3
|
+
* Build a scripted Terminal. It reports interactive unless told otherwise
|
|
4
|
+
* (a scripted terminal exists to answer prompts) and hands out `answers` in
|
|
5
|
+
* order; a question beyond the script throws so a test never hangs on input.
|
|
6
|
+
*/
|
|
7
|
+
export function createScriptedTerminal(options = {}) {
|
|
8
|
+
const pendingAnswers = [...(options.answers ?? [])];
|
|
9
|
+
const writes = [];
|
|
10
|
+
const errors = [];
|
|
11
|
+
const statuses = [];
|
|
12
|
+
const prompts = [];
|
|
13
|
+
return {
|
|
14
|
+
isInteractive: options.interactive ?? true,
|
|
15
|
+
writes,
|
|
16
|
+
errors,
|
|
17
|
+
statuses,
|
|
18
|
+
prompts,
|
|
19
|
+
write(line) {
|
|
20
|
+
writes.push(line);
|
|
21
|
+
},
|
|
22
|
+
error(line) {
|
|
23
|
+
errors.push(line);
|
|
24
|
+
},
|
|
25
|
+
status(line) {
|
|
26
|
+
statuses.push(line);
|
|
27
|
+
},
|
|
28
|
+
async question(prompt) {
|
|
29
|
+
prompts.push(prompt);
|
|
30
|
+
const answer = pendingAnswers.shift();
|
|
31
|
+
if (answer === undefined) {
|
|
32
|
+
throw new Error(`scripted terminal has no answer left for prompt: ${prompt}`);
|
|
33
|
+
}
|
|
34
|
+
return answer;
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=script-terminal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script-terminal.js","sourceRoot":"","sources":["../../src/adapters/script-terminal.ts"],"names":[],"mappings":"AAAA,mEAAmE;AAgBnE;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,UAAiF,EAAE;IAEnF,MAAM,cAAc,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;IACpD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,OAAO;QACL,aAAa,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI;QAC1C,MAAM;QACN,MAAM;QACN,QAAQ;QACR,OAAO;QAEP,KAAK,CAAC,IAAY;YAChB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QAED,KAAK,CAAC,IAAY;YAChB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QAED,MAAM,CAAC,IAAY;YACjB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,MAAc;YAC3B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrB,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC;YACtC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,oDAAoD,MAAM,EAAE,CAAC,CAAC;YAChF,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { SigningClient } from './signer.js';
|
|
2
|
+
export interface DomainValidationRecord {
|
|
3
|
+
name: string;
|
|
4
|
+
type: string;
|
|
5
|
+
value: string;
|
|
6
|
+
}
|
|
7
|
+
export interface CertificateStatus {
|
|
8
|
+
status: string;
|
|
9
|
+
validation: DomainValidationRecord[];
|
|
10
|
+
}
|
|
11
|
+
/** ACM client (AWS JSON 1.1). Certificates for CloudFront must live in us-east-1. */
|
|
12
|
+
export declare class AcmClient {
|
|
13
|
+
private readonly client;
|
|
14
|
+
constructor(client: SigningClient);
|
|
15
|
+
private call;
|
|
16
|
+
/** Request a DNS-validated certificate and return its ARN. */
|
|
17
|
+
requestCertificate(domainName: string, idempotencyToken: string): Promise<string>;
|
|
18
|
+
describeCertificate(certificateArn: string): Promise<CertificateStatus>;
|
|
19
|
+
deleteCertificate(certificateArn: string): Promise<void>;
|
|
20
|
+
}
|
package/dist/aws/acm.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { AwsError } from './errors.js';
|
|
2
|
+
const TARGET = 'CertificateManager';
|
|
3
|
+
/** ACM client (AWS JSON 1.1). Certificates for CloudFront must live in us-east-1. */
|
|
4
|
+
export class AcmClient {
|
|
5
|
+
client;
|
|
6
|
+
constructor(client) {
|
|
7
|
+
this.client = client;
|
|
8
|
+
}
|
|
9
|
+
async call(op, payload) {
|
|
10
|
+
const res = await this.client.send({
|
|
11
|
+
service: 'acm',
|
|
12
|
+
method: 'POST',
|
|
13
|
+
path: '/',
|
|
14
|
+
headers: {
|
|
15
|
+
'content-type': 'application/x-amz-json-1.1',
|
|
16
|
+
'x-amz-target': `${TARGET}.${op}`,
|
|
17
|
+
},
|
|
18
|
+
body: JSON.stringify(payload),
|
|
19
|
+
});
|
|
20
|
+
const text = res.text();
|
|
21
|
+
return (text ? JSON.parse(text) : {});
|
|
22
|
+
}
|
|
23
|
+
/** Request a DNS-validated certificate and return its ARN. */
|
|
24
|
+
async requestCertificate(domainName, idempotencyToken) {
|
|
25
|
+
const out = await this.call('RequestCertificate', {
|
|
26
|
+
DomainName: domainName,
|
|
27
|
+
ValidationMethod: 'DNS',
|
|
28
|
+
IdempotencyToken: idempotencyToken,
|
|
29
|
+
});
|
|
30
|
+
return out.CertificateArn;
|
|
31
|
+
}
|
|
32
|
+
async describeCertificate(certificateArn) {
|
|
33
|
+
const out = await this.call('DescribeCertificate', { CertificateArn: certificateArn });
|
|
34
|
+
const cert = out.Certificate ?? {};
|
|
35
|
+
const validation = [];
|
|
36
|
+
for (const opt of cert.DomainValidationOptions ?? []) {
|
|
37
|
+
const rr = opt.ResourceRecord;
|
|
38
|
+
if (rr?.Name && rr.Type && rr.Value) {
|
|
39
|
+
validation.push({ name: rr.Name, type: rr.Type, value: rr.Value });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return { status: cert.Status ?? 'PENDING_VALIDATION', validation };
|
|
43
|
+
}
|
|
44
|
+
async deleteCertificate(certificateArn) {
|
|
45
|
+
try {
|
|
46
|
+
await this.call('DeleteCertificate', { CertificateArn: certificateArn });
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
if (err instanceof AwsError && err.isNotFound)
|
|
50
|
+
return;
|
|
51
|
+
throw err;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=acm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acm.js","sourceRoot":"","sources":["../../src/aws/acm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,MAAM,MAAM,GAAG,oBAAoB,CAAC;AAapC,qFAAqF;AACrF,MAAM,OAAO,SAAS;IACS;IAA7B,YAA6B,MAAqB;QAArB,WAAM,GAAN,MAAM,CAAe;IAAG,CAAC;IAE9C,KAAK,CAAC,IAAI,CAAI,EAAU,EAAE,OAAe;QAC/C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACjC,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,GAAG;YACT,OAAO,EAAE;gBACP,cAAc,EAAE,4BAA4B;gBAC5C,cAAc,EAAE,GAAG,MAAM,IAAI,EAAE,EAAE;aAClC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC9B,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAM,CAAC;IAC7C,CAAC;IAED,8DAA8D;IAC9D,KAAK,CAAC,kBAAkB,CAAC,UAAkB,EAAE,gBAAwB;QACnE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAA6B,oBAAoB,EAAE;YAC5E,UAAU,EAAE,UAAU;YACtB,gBAAgB,EAAE,KAAK;YACvB,gBAAgB,EAAE,gBAAgB;SACnC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,cAAc,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,cAAsB;QAC9C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAOxB,qBAAqB,EAAE,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC,CAAC;QAE9D,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;QACnC,MAAM,UAAU,GAA6B,EAAE,CAAC;QAChD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,uBAAuB,IAAI,EAAE,EAAE,CAAC;YACrD,MAAM,EAAE,GAAG,GAAG,CAAC,cAAc,CAAC;YAC9B,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;gBACpC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,oBAAoB,EAAE,UAAU,EAAE,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,cAAsB;QAC5C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC,CAAC;QAC3E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,QAAQ,IAAI,GAAG,CAAC,UAAU;gBAAE,OAAO;YACtD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { SigningClient } from './signer.js';
|
|
2
|
+
/** AWS managed "CachingOptimized" cache policy. */
|
|
3
|
+
export declare const CACHING_OPTIMIZED = "658327ea-f89d-4fab-a63d-7e88639e58f6";
|
|
4
|
+
/** AWS managed "CachingDisabled" cache policy (used for previews — no CDN caching). */
|
|
5
|
+
export declare const CACHING_DISABLED = "4135ea2d-6df8-44a3-9df3-4b5a84be39ad";
|
|
6
|
+
export interface DistributionSummary {
|
|
7
|
+
id: string;
|
|
8
|
+
arn: string;
|
|
9
|
+
domainName: string;
|
|
10
|
+
status: string;
|
|
11
|
+
etag: string | undefined;
|
|
12
|
+
}
|
|
13
|
+
export interface DistributionConfigInput {
|
|
14
|
+
callerReference: string;
|
|
15
|
+
comment: string;
|
|
16
|
+
bucketDomainName: string;
|
|
17
|
+
originPath: string;
|
|
18
|
+
originAccessControlId: string;
|
|
19
|
+
defaultRootObject: string;
|
|
20
|
+
aliases: string[];
|
|
21
|
+
acmCertificateArn: string | undefined;
|
|
22
|
+
/** Managed cache policy id (defaults to CachingOptimized). */
|
|
23
|
+
cachePolicyId?: string | undefined;
|
|
24
|
+
/** CloudFront Function ARN to associate on viewer-request (for preview routing). */
|
|
25
|
+
functionArn?: string | undefined;
|
|
26
|
+
/** Custom error responses (e.g. map the S3 REST origin's 403 for a missing key to /404.html). */
|
|
27
|
+
customErrorResponses?: CustomErrorResponse[] | undefined;
|
|
28
|
+
}
|
|
29
|
+
export interface CustomErrorResponse {
|
|
30
|
+
errorCode: number;
|
|
31
|
+
responsePagePath: string;
|
|
32
|
+
responseCode: number;
|
|
33
|
+
/** Seconds CloudFront caches the error response before re-querying the origin. */
|
|
34
|
+
errorCachingMinTtl?: number | undefined;
|
|
35
|
+
}
|
|
36
|
+
/** CloudFront client (REST-XML). Global service, signed in us-east-1. */
|
|
37
|
+
export declare class CloudFrontClient {
|
|
38
|
+
private readonly client;
|
|
39
|
+
constructor(client: SigningClient);
|
|
40
|
+
createOriginAccessControl(name: string): Promise<string>;
|
|
41
|
+
deleteOriginAccessControl(id: string): Promise<void>;
|
|
42
|
+
createDistribution(input: DistributionConfigInput): Promise<DistributionSummary>;
|
|
43
|
+
getDistribution(id: string): Promise<DistributionSummary | undefined>;
|
|
44
|
+
/** Fetch the raw DistributionConfig XML plus its ETag (needed to update/disable). */
|
|
45
|
+
getDistributionConfig(id: string): Promise<{
|
|
46
|
+
config: string;
|
|
47
|
+
etag: string;
|
|
48
|
+
} | undefined>;
|
|
49
|
+
/**
|
|
50
|
+
* Reconcile the distribution's aliases and viewer certificate in place — the
|
|
51
|
+
* path taken when a domain is added (or changed) after the distribution was
|
|
52
|
+
* first created. Compares semantically (CNAME set + certificate ARN), since
|
|
53
|
+
* the returned config carries legacy elements our builder never emits.
|
|
54
|
+
* Returns true when a change was pushed.
|
|
55
|
+
*/
|
|
56
|
+
setDistributionAliases(id: string, aliases: string[], acmCertificateArn: string | undefined): Promise<boolean>;
|
|
57
|
+
/**
|
|
58
|
+
* Disable a distribution by flipping its top-level `<Enabled>` to false. The config
|
|
59
|
+
* also contains `<Enabled>false</Enabled>` inside TrustedSigners/Logging, so the
|
|
60
|
+
* distribution-level flag must be matched specifically — it is the one immediately
|
|
61
|
+
* followed by `<ViewerCertificate>` in the schema.
|
|
62
|
+
*/
|
|
63
|
+
disableDistribution(id: string): Promise<void>;
|
|
64
|
+
deleteDistribution(id: string): Promise<void>;
|
|
65
|
+
/** Invalidate paths (defaults to everything). Returns the invalidation id. */
|
|
66
|
+
createInvalidation(id: string, paths: string[], reference: string): Promise<string>;
|
|
67
|
+
private functionBody;
|
|
68
|
+
private describeFunction;
|
|
69
|
+
/** Create-or-update the function code and publish it. Returns the published ARN. */
|
|
70
|
+
ensureFunction(name: string, code: string, comment: string): Promise<string>;
|
|
71
|
+
deleteFunction(name: string): Promise<void>;
|
|
72
|
+
}
|