@forumulate/cli 0.9.0 → 0.10.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 +3 -3
- package/dist/api/args.d.ts.map +1 -1
- package/dist/api/args.js +1 -0
- package/dist/api/args.js.map +1 -1
- package/dist/api/command.d.ts +1 -1
- package/dist/api/command.d.ts.map +1 -1
- package/dist/api/command.js +86 -11
- package/dist/api/command.js.map +1 -1
- package/dist/api/http.d.ts +8 -0
- package/dist/api/http.d.ts.map +1 -1
- package/dist/api/http.js +3 -2
- package/dist/api/http.js.map +1 -1
- package/dist/api/live-spec.d.ts +48 -0
- package/dist/api/live-spec.d.ts.map +1 -0
- package/dist/api/live-spec.js +72 -0
- package/dist/api/live-spec.js.map +1 -0
- package/dist/api/operations.json +1 -1
- package/dist/api/request.d.ts.map +1 -1
- package/dist/api/request.js +25 -1
- package/dist/api/request.js.map +1 -1
- package/dist/api/send.d.ts +10 -1
- package/dist/api/send.d.ts.map +1 -1
- package/dist/api/send.js +14 -3
- package/dist/api/send.js.map +1 -1
- package/dist/api/slim.d.ts +14 -0
- package/dist/api/slim.d.ts.map +1 -0
- package/dist/api/slim.js +174 -0
- package/dist/api/slim.js.map +1 -0
- package/dist/cache-command.d.ts +12 -0
- package/dist/cache-command.d.ts.map +1 -0
- package/dist/cache-command.js +93 -0
- package/dist/cache-command.js.map +1 -0
- package/dist/check/command.d.ts +48 -0
- package/dist/check/command.d.ts.map +1 -0
- package/dist/check/command.js +256 -0
- package/dist/check/command.js.map +1 -0
- package/dist/check/external.d.ts +66 -0
- package/dist/check/external.d.ts.map +1 -0
- package/dist/check/external.js +177 -0
- package/dist/check/external.js.map +1 -0
- package/dist/check/markdown-links.d.ts +38 -0
- package/dist/check/markdown-links.d.ts.map +1 -0
- package/dist/check/markdown-links.js +166 -0
- package/dist/check/markdown-links.js.map +1 -0
- package/dist/cli.js +42 -7
- package/dist/cli.js.map +1 -1
- package/dist/commands/completion.d.ts.map +1 -1
- package/dist/commands/completion.js +1 -0
- package/dist/commands/completion.js.map +1 -1
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +6 -2
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/groups-api.d.ts.map +1 -1
- package/dist/commands/groups-api.js +20 -2
- package/dist/commands/groups-api.js.map +1 -1
- package/dist/commands/groups-docs.d.ts.map +1 -1
- package/dist/commands/groups-docs.js +8 -2
- package/dist/commands/groups-docs.js.map +1 -1
- package/dist/commands/groups-jobs.d.ts +10 -0
- package/dist/commands/groups-jobs.d.ts.map +1 -0
- package/dist/commands/groups-jobs.js +89 -0
- package/dist/commands/groups-jobs.js.map +1 -0
- package/dist/commands/groups-org.d.ts.map +1 -1
- package/dist/commands/groups-org.js +59 -2
- package/dist/commands/groups-org.js.map +1 -1
- package/dist/commands/groups-site.d.ts.map +1 -1
- package/dist/commands/groups-site.js +33 -3
- package/dist/commands/groups-site.js.map +1 -1
- package/dist/commands/groups-spaces.d.ts.map +1 -1
- package/dist/commands/groups-spaces.js +11 -5
- package/dist/commands/groups-spaces.js.map +1 -1
- package/dist/commands/groups-types.d.ts.map +1 -1
- package/dist/commands/groups-types.js +74 -0
- package/dist/commands/groups-types.js.map +1 -1
- package/dist/commands/groups.d.ts.map +1 -1
- package/dist/commands/groups.js +2 -0
- package/dist/commands/groups.js.map +1 -1
- package/dist/commands/index.d.ts +9 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +18 -3
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/job-wait.d.ts +64 -0
- package/dist/commands/job-wait.d.ts.map +1 -0
- package/dist/commands/job-wait.js +91 -0
- package/dist/commands/job-wait.js.map +1 -0
- package/dist/commands/resource.d.ts +19 -0
- package/dist/commands/resource.d.ts.map +1 -1
- package/dist/commands/resource.js +65 -3
- package/dist/commands/resource.js.map +1 -1
- package/dist/content/library.d.ts +8 -0
- package/dist/content/library.d.ts.map +1 -1
- package/dist/content/library.js +10 -2
- package/dist/content/library.js.map +1 -1
- package/dist/credentials.d.ts +43 -4
- package/dist/credentials.d.ts.map +1 -1
- package/dist/credentials.js +67 -4
- package/dist/credentials.js.map +1 -1
- package/dist/doctor/address-checks.d.ts +56 -0
- package/dist/doctor/address-checks.d.ts.map +1 -0
- package/dist/doctor/address-checks.js +183 -0
- package/dist/doctor/address-checks.js.map +1 -0
- package/dist/doctor/boilerplate.d.ts +33 -0
- package/dist/doctor/boilerplate.d.ts.map +1 -0
- package/dist/doctor/boilerplate.js +78 -0
- package/dist/doctor/boilerplate.js.map +1 -0
- package/dist/doctor/command.d.ts +18 -0
- package/dist/doctor/command.d.ts.map +1 -0
- package/dist/doctor/command.js +234 -0
- package/dist/doctor/command.js.map +1 -0
- package/dist/doctor/crawl.d.ts +49 -0
- package/dist/doctor/crawl.d.ts.map +1 -0
- package/dist/doctor/crawl.js +210 -0
- package/dist/doctor/crawl.js.map +1 -0
- package/dist/doctor/extended.d.ts +52 -0
- package/dist/doctor/extended.d.ts.map +1 -0
- package/dist/doctor/extended.js +150 -0
- package/dist/doctor/extended.js.map +1 -0
- package/dist/doctor/page-checks.d.ts +42 -0
- package/dist/doctor/page-checks.d.ts.map +1 -0
- package/dist/doctor/page-checks.js +200 -0
- package/dist/doctor/page-checks.js.map +1 -0
- package/dist/doctor/probe.d.ts +63 -0
- package/dist/doctor/probe.d.ts.map +1 -0
- package/dist/doctor/probe.js +170 -0
- package/dist/doctor/probe.js.map +1 -0
- package/dist/doctor/reader-auth-atlas.d.ts +18 -0
- package/dist/doctor/reader-auth-atlas.d.ts.map +1 -0
- package/dist/doctor/reader-auth-atlas.js +50 -0
- package/dist/doctor/reader-auth-atlas.js.map +1 -0
- package/dist/doctor/robots-params.d.ts +36 -0
- package/dist/doctor/robots-params.d.ts.map +1 -0
- package/dist/doctor/robots-params.js +97 -0
- package/dist/doctor/robots-params.js.map +1 -0
- package/dist/doctor/site.d.ts +42 -0
- package/dist/doctor/site.d.ts.map +1 -0
- package/dist/doctor/site.js +82 -0
- package/dist/doctor/site.js.map +1 -0
- package/dist/doctor.d.ts +21 -0
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +94 -3
- package/dist/doctor.js.map +1 -1
- package/dist/exit-codes.d.ts +40 -0
- package/dist/exit-codes.d.ts.map +1 -0
- package/dist/exit-codes.js +66 -0
- package/dist/exit-codes.js.map +1 -0
- package/dist/help-commands.d.ts +13 -0
- package/dist/help-commands.d.ts.map +1 -0
- package/dist/help-commands.js +215 -0
- package/dist/help-commands.js.map +1 -0
- package/dist/help.d.ts +1 -1
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +57 -11
- package/dist/help.js.map +1 -1
- package/dist/io.d.ts +33 -0
- package/dist/io.d.ts.map +1 -0
- package/dist/io.js +81 -0
- package/dist/io.js.map +1 -0
- package/dist/preview-comment.d.ts +20 -0
- package/dist/preview-comment.d.ts.map +1 -0
- package/dist/preview-comment.js +88 -0
- package/dist/preview-comment.js.map +1 -0
- package/dist/publish/about.d.ts +23 -0
- package/dist/publish/about.d.ts.map +1 -0
- package/dist/publish/about.js +66 -0
- package/dist/publish/about.js.map +1 -0
- package/dist/publish/command.d.ts +20 -0
- package/dist/publish/command.d.ts.map +1 -1
- package/dist/publish/command.js +97 -4
- package/dist/publish/command.js.map +1 -1
- package/dist/publish/context.d.ts +8 -0
- package/dist/publish/context.d.ts.map +1 -1
- package/dist/publish/context.js.map +1 -1
- package/dist/publish/docs-apply.d.ts.map +1 -1
- package/dist/publish/docs-apply.js +13 -1
- package/dist/publish/docs-apply.js.map +1 -1
- package/dist/publish/extras.d.ts +10 -0
- package/dist/publish/extras.d.ts.map +1 -1
- package/dist/publish/extras.js +54 -2
- package/dist/publish/extras.js.map +1 -1
- package/dist/publish/manifest.d.ts.map +1 -1
- package/dist/publish/manifest.js +27 -2
- package/dist/publish/manifest.js.map +1 -1
- package/dist/publish/preview.d.ts +56 -0
- package/dist/publish/preview.d.ts.map +1 -0
- package/dist/publish/preview.js +133 -0
- package/dist/publish/preview.js.map +1 -0
- package/dist/publish/redirects.d.ts +13 -0
- package/dist/publish/redirects.d.ts.map +1 -0
- package/dist/publish/redirects.js +154 -0
- package/dist/publish/redirects.js.map +1 -0
- package/dist/publish/studio-edits.d.ts +25 -0
- package/dist/publish/studio-edits.d.ts.map +1 -0
- package/dist/publish/studio-edits.js +53 -0
- package/dist/publish/studio-edits.js.map +1 -0
- package/dist/publish/types.d.ts +22 -1
- package/dist/publish/types.d.ts.map +1 -1
- package/dist/publish-command.d.ts +55 -0
- package/dist/publish-command.d.ts.map +1 -0
- package/dist/publish-command.js +197 -0
- package/dist/publish-command.js.map +1 -0
- package/dist/run.d.ts +3 -10
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +122 -110
- package/dist/run.js.map +1 -1
- package/dist/translations/target.d.ts.map +1 -1
- package/dist/translations/target.js +2 -2
- package/dist/translations/target.js.map +1 -1
- package/dist/validate.d.ts +39 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +166 -0
- package/dist/validate.js.map +1 -0
- package/dist/version.d.ts +8 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +11 -0
- package/dist/version.js.map +1 -0
- package/dist/whoami.d.ts +41 -0
- package/dist/whoami.d.ts.map +1 -0
- package/dist/whoami.js +161 -0
- package/dist/whoami.js.map +1 -0
- package/package.json +2 -2
- package/dist/publish-dir.d.ts +0 -54
- package/dist/publish-dir.d.ts.map +0 -1
- package/dist/publish-dir.js +0 -119
- package/dist/publish-dir.js.map +0 -1
package/README.md
CHANGED
|
@@ -21,7 +21,7 @@ forumulate login # prompts for the token (not echoed), checks it, sto
|
|
|
21
21
|
forumulate whoami
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
The token is stored per API in `~/.config/forumulate/credentials.json`, readable only by you. In CI, set `FORUMULATE_TOKEN` instead; it
|
|
24
|
+
The token is stored per API in `~/.config/forumulate/credentials.json`, readable only by you. In CI, set `FORUMULATE_TOKEN` instead; it wins over a stored token. For one run, every command also takes `--token <pat>`, which wins over both: the precedence is `--token`, then `FORUMULATE_TOKEN`, then `credentials.json` (`forumulate whoami` prints which one it used). On the few operations with a `token` field of their own (`sdks registries set`, `github connect`, `domains acme-challenge`) `--token` is that field.
|
|
25
25
|
|
|
26
26
|
| Variable | Default | Meaning |
|
|
27
27
|
| -------------------- | ------------------------ | -------------------------------------------------------------------------------- |
|
|
@@ -156,7 +156,7 @@ forumulate sync . --apply --prune # do it, read it back
|
|
|
156
156
|
**2. Publish one page by id.**
|
|
157
157
|
|
|
158
158
|
```sh
|
|
159
|
-
forumulate publish
|
|
159
|
+
forumulate items publish <pageId> --org acme --space docs
|
|
160
160
|
```
|
|
161
161
|
|
|
162
162
|
**3. Search docs, forum and blog together.**
|
|
@@ -196,7 +196,7 @@ Add `--json` to any command for raw JSON, `--version` for the version, and `foru
|
|
|
196
196
|
|
|
197
197
|
```yaml
|
|
198
198
|
# GitHub Actions
|
|
199
|
-
- run: npx -y @forumulate/cli publish acme ${{ vars.DOCS_SPACE_ID }}
|
|
199
|
+
- run: npx -y @forumulate/cli publish ./docs --org acme --space ${{ vars.DOCS_SPACE_ID }}
|
|
200
200
|
env:
|
|
201
201
|
FORUMULATE_TOKEN: ${{ secrets.FORUMULATE_TOKEN }}
|
|
202
202
|
- run: npx -y @forumulate/cli translations status --org acme --space docs --fail-on missing,outdated
|
package/dist/api/args.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/api/args.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,WAAW,MAAM;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,kEAAkE;IAClE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC9B;AAED,qCAAqC;AACrC,eAAO,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/api/args.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,WAAW,MAAM;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,kEAAkE;IAClE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC9B;AAED,qCAAqC;AACrC,eAAO,MAAM,QAAQ,aAcnB,CAAC;AAYH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,GAAE,GAAG,CAAC,MAAM,CAAY,GAAG,MAAM,CAsClF;AAED,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,EAAE,MAAM,MAAM,KAAG,MAAM,GAAG,SAAsC,CAAC;AAC/F,eAAO,MAAM,GAAG,GAAI,GAAG,MAAM,EAAE,MAAM,MAAM,KAAG,OAG7C,CAAC;AACF,eAAO,MAAM,GAAG,GAAI,GAAG,MAAM,EAAE,MAAM,MAAM,KAAG,MAAM,EAA6B,CAAC"}
|
package/dist/api/args.js
CHANGED
package/dist/api/args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/api/args.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/api/args.ts"],"names":[],"mappings":"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"}
|
package/dist/api/command.d.ts
CHANGED
|
@@ -12,6 +12,6 @@ import type { CommandDeps } from '../commands/context';
|
|
|
12
12
|
* this covers everything else, so a route that ships today is callable today
|
|
13
13
|
* with no CLI release — `operations.test.ts` walks the spec to keep it so.
|
|
14
14
|
*/
|
|
15
|
-
export declare const API_HELP = "forumulate api \u2014 call any operation in the Forumulate API\n\nUsage:\n forumulate api list [--tag <tag>] [--search <words>] [--method GET]\n forumulate api describe <operationId | METHOD path> [--json]\n forumulate api <operationId> [path params\u2026] [flags]\n forumulate api <METHOD> <path> [path params\u2026] [flags]\n\nParameters:\n --<name> <value> a path, query or header parameter (--orgId, --org-id)\n -p, --param name=value the same, for a name that collides with a flag below\n path params may also be given positionally, in path order; orgId defaults\n to --org / FORUMULATE_ORG / `forumulate config set org \u2026`\n\nBody:\n -d, --data '{\u2026}' | @file.json | - JSON body (- reads stdin)\n -f, --field a.b=value one field, typed by the body schema (a:=<json> raw)\n --<field> <value> a top-level body field the operation declares\n --form name=value | name=@file multipart operations (uploads)\n\nOutput and transport:\n --json the response body, untouched\n --paginate follow page.nextCursor to the end (one merged list)\n --max-pages <n> stop after n pages (default 1000)\n --columns a,b,c table columns for a list answer\n -i, --include-headers print the status line and response headers\n -H, --header 'Name: v' an extra request header\n --api-version <date> Forumulate-Version to send (default 2026-12-01)\n --idempotency-key <k> instead of the generated one\n --dry-run print the request, send nothing\n\
|
|
15
|
+
export declare const API_HELP = "forumulate api \u2014 call any operation in the Forumulate API\n\nUsage:\n forumulate api list [--tag <tag>] [--search <words>] [--method GET] [--refresh]\n forumulate api describe <operationId | METHOD path> [--json]\n forumulate api <operationId> [path params\u2026] [flags]\n forumulate api <METHOD> <path> [path params\u2026] [flags]\n\nParameters:\n --<name> <value> a path, query or header parameter (--orgId, --org-id)\n -p, --param name=value the same, for a name that collides with a flag below\n path params may also be given positionally, in path order; orgId defaults\n to --org / FORUMULATE_ORG / `forumulate config set org \u2026`\n\nBody:\n -d, --data '{\u2026}' | @file.json | - JSON body (- reads stdin)\n -f, --field a.b=value one field, typed by the body schema (a:=<json> raw)\n --<field> <value> a top-level body field the operation declares\n --form name=value | name=@file multipart operations (uploads)\n\nOutput and transport:\n --json the response body, untouched\n --paginate follow page.nextCursor to the end (one merged list)\n --max-pages <n> stop after n pages (default 1000)\n --columns a,b,c table columns for a list answer\n -i, --include-headers print the status line and response headers\n -H, --header 'Name: v' an extra request header\n --api-version <date> Forumulate-Version to send (default 2026-12-01)\n --idempotency-key <k> instead of the generated one\n --dry-run print the request, send nothing\n\nOperation list:\n --refresh fetch the live API's spec (ETag-revalidated) and use it\n from now on; the bundled list is the one this CLI was\n built with, and the API keeps growing after a release\n\nOutput and exit:\n --jsonl with --paginate: one JSON row per line, streamed\n --out <file> write the output to a file\n Exit 0 on a 2xx; 2 usage, 3 auth (401/403), 4 not found, 5 conflict (409/412),\n 1 anything else.";
|
|
16
16
|
export declare function runApi(argv: string[], deps: CommandDeps): Promise<number>;
|
|
17
17
|
//# sourceMappingURL=command.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/api/command.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/api/command.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,QAAQ,yhEAwCF,CAAC;AAapB,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAmC/E"}
|
package/dist/api/command.js
CHANGED
|
@@ -3,10 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.API_HELP = void 0;
|
|
4
4
|
exports.runApi = runApi;
|
|
5
5
|
const args_1 = require("./args");
|
|
6
|
+
const exit_codes_1 = require("../exit-codes");
|
|
6
7
|
const describe_1 = require("./describe");
|
|
7
8
|
const output_1 = require("./output");
|
|
8
9
|
const send_1 = require("./send");
|
|
9
10
|
const spec_1 = require("./spec");
|
|
11
|
+
const live_spec_1 = require("./live-spec");
|
|
12
|
+
const version_1 = require("../version");
|
|
13
|
+
/** Named in the footer so "1,810 operations" says which CLI counted them. */
|
|
14
|
+
const VERSION_LABEL = `@forumulate/cli ${version_1.VERSION}`;
|
|
10
15
|
const request_1 = require("./request");
|
|
11
16
|
/**
|
|
12
17
|
* `forumulate api` — every operation in the API, from the bundled spec.
|
|
@@ -24,7 +29,7 @@ const request_1 = require("./request");
|
|
|
24
29
|
exports.API_HELP = `forumulate api — call any operation in the Forumulate API
|
|
25
30
|
|
|
26
31
|
Usage:
|
|
27
|
-
forumulate api list [--tag <tag>] [--search <words>] [--method GET]
|
|
32
|
+
forumulate api list [--tag <tag>] [--search <words>] [--method GET] [--refresh]
|
|
28
33
|
forumulate api describe <operationId | METHOD path> [--json]
|
|
29
34
|
forumulate api <operationId> [path params…] [flags]
|
|
30
35
|
forumulate api <METHOD> <path> [path params…] [flags]
|
|
@@ -52,8 +57,26 @@ Output and transport:
|
|
|
52
57
|
--idempotency-key <k> instead of the generated one
|
|
53
58
|
--dry-run print the request, send nothing
|
|
54
59
|
|
|
55
|
-
|
|
56
|
-
|
|
60
|
+
Operation list:
|
|
61
|
+
--refresh fetch the live API's spec (ETag-revalidated) and use it
|
|
62
|
+
from now on; the bundled list is the one this CLI was
|
|
63
|
+
built with, and the API keeps growing after a release
|
|
64
|
+
|
|
65
|
+
Output and exit:
|
|
66
|
+
--jsonl with --paginate: one JSON row per line, streamed
|
|
67
|
+
--out <file> write the output to a file
|
|
68
|
+
Exit 0 on a 2xx; 2 usage, 3 auth (401/403), 4 not found, 5 conflict (409/412),
|
|
69
|
+
1 anything else.`;
|
|
70
|
+
const API_SWITCHES = new Set([
|
|
71
|
+
'json',
|
|
72
|
+
'jsonl',
|
|
73
|
+
'paginate',
|
|
74
|
+
'include-headers',
|
|
75
|
+
'dry-run',
|
|
76
|
+
'help',
|
|
77
|
+
'verbose',
|
|
78
|
+
'refresh',
|
|
79
|
+
]);
|
|
57
80
|
async function runApi(argv, deps) {
|
|
58
81
|
const parsed = (0, args_1.parseArgs)(argv, API_SWITCHES);
|
|
59
82
|
const [first, ...rest] = parsed.positionals;
|
|
@@ -62,9 +85,13 @@ async function runApi(argv, deps) {
|
|
|
62
85
|
deps.out(exports.API_HELP);
|
|
63
86
|
return first || (0, args_1.has)(parsed, 'help') ? 0 : 1;
|
|
64
87
|
}
|
|
88
|
+
// The newer of the bundled index and a refreshed live one (FMU-D13).
|
|
89
|
+
const source = await chooseIndex(parsed, deps);
|
|
90
|
+
if (typeof source === 'number')
|
|
91
|
+
return source;
|
|
65
92
|
try {
|
|
66
93
|
if (first === 'list' || first === 'ls')
|
|
67
|
-
return list(parsed, rest, deps, json);
|
|
94
|
+
return list(parsed, rest, deps, json, source);
|
|
68
95
|
if (first === 'describe') {
|
|
69
96
|
const target = resolveOp(rest);
|
|
70
97
|
if (!target)
|
|
@@ -81,7 +108,7 @@ async function runApi(argv, deps) {
|
|
|
81
108
|
catch (e) {
|
|
82
109
|
if (e instanceof request_1.UsageError) {
|
|
83
110
|
deps.err(`Usage: ${e.message}`);
|
|
84
|
-
return
|
|
111
|
+
return exit_codes_1.EXIT.USAGE;
|
|
85
112
|
}
|
|
86
113
|
throw e;
|
|
87
114
|
}
|
|
@@ -90,7 +117,7 @@ function usage(deps, form, got) {
|
|
|
90
117
|
if (got)
|
|
91
118
|
deps.err(`No operation matches "${got}". Try: forumulate api list --search <words>`);
|
|
92
119
|
deps.err(`Usage: forumulate ${form}`);
|
|
93
|
-
return
|
|
120
|
+
return exit_codes_1.EXIT.USAGE;
|
|
94
121
|
}
|
|
95
122
|
/** `Space_list` or `GET /orgs/{orgId}/spaces` or `GET /orgs/acme/spaces`. */
|
|
96
123
|
function resolveOp(words) {
|
|
@@ -104,7 +131,32 @@ function resolveOp(words) {
|
|
|
104
131
|
const op = (0, spec_1.findById)(a);
|
|
105
132
|
return op && { op, values: {}, used: 1 };
|
|
106
133
|
}
|
|
107
|
-
function
|
|
134
|
+
async function chooseIndex(parsed, deps) {
|
|
135
|
+
const apiBase = deps.http.opts.baseUrl;
|
|
136
|
+
(0, spec_1.setIndex)(undefined);
|
|
137
|
+
const bundled = (0, spec_1.loadIndex)().ops.length;
|
|
138
|
+
if ((0, args_1.has)(parsed, 'refresh')) {
|
|
139
|
+
try {
|
|
140
|
+
const r = await (0, live_spec_1.refreshLive)(apiBase, { env: deps.env });
|
|
141
|
+
deps.err(r.changed
|
|
142
|
+
? `Fetched the live spec from ${r.meta.url}: ${r.meta.ops} operations (this CLI bundles ${bundled}).`
|
|
143
|
+
: `The live spec has not changed since ${r.meta.fetchedAt.slice(0, 10)} (304).`);
|
|
144
|
+
}
|
|
145
|
+
catch (e) {
|
|
146
|
+
deps.err(`Could not refresh the operation list: ${e.message}`);
|
|
147
|
+
return exit_codes_1.EXIT.FAILED;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
const live = (0, live_spec_1.readLive)(apiBase, deps.env);
|
|
151
|
+
if (live && live.meta.ops >= bundled) {
|
|
152
|
+
(0, spec_1.setIndex)(live.index);
|
|
153
|
+
return { label: `live spec, fetched ${live.meta.fetchedAt.slice(0, 16).replace('T', ' ')}` };
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
label: `bundled with this CLI (${VERSION_LABEL}); the live API may have more — run \`forumulate api list --refresh\``,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
function list(parsed, rest, deps, json, source) {
|
|
108
160
|
const ops = (0, spec_1.filterOps)({
|
|
109
161
|
tag: (0, args_1.flag)(parsed, 'tag'),
|
|
110
162
|
search: [(0, args_1.flag)(parsed, 'search'), ...rest].filter(Boolean).join(' ') || undefined,
|
|
@@ -116,13 +168,32 @@ function list(parsed, rest, deps, json) {
|
|
|
116
168
|
}
|
|
117
169
|
if (ops.length === 0) {
|
|
118
170
|
deps.err('No operations match.');
|
|
119
|
-
return
|
|
171
|
+
return exit_codes_1.EXIT.NOT_FOUND;
|
|
120
172
|
}
|
|
121
173
|
for (const l of (0, output_1.table)(ops.map((o) => ({ operationId: o.id, method: o.m, path: o.p, summary: o.s ?? '' })), ['operationId', 'method', 'path', 'summary']))
|
|
122
174
|
deps.out(l);
|
|
123
|
-
deps.out(`-- ${ops.length} of ${(0, spec_1.loadIndex)().ops.length} operations`);
|
|
175
|
+
deps.out(`-- ${ops.length} of ${(0, spec_1.loadIndex)().ops.length} operations (${source.label})`);
|
|
124
176
|
return 0;
|
|
125
177
|
}
|
|
178
|
+
/**
|
|
179
|
+
* Whether `--dry-run` belongs to the operation rather than to the CLI.
|
|
180
|
+
*
|
|
181
|
+
* A handful of writes have a dry run of their own that answers a DIFF
|
|
182
|
+
* (`Site_replace`, the front pages), and `--dry-run` reaches those. Since
|
|
183
|
+
* FMU-SI06 every authenticated write also carries the API's GENERIC `dryRun`
|
|
184
|
+
* (validate, write nothing), and reading that as "the operation's own" turned
|
|
185
|
+
* the documented "print the request, send nothing" into a live call for
|
|
186
|
+
* ~1,200 operations — needing a token and a network. The generic one is
|
|
187
|
+
* reachable as `--param dryRun=true`; it is told apart by the description
|
|
188
|
+
* the API stamps on every copy of it (openapi-orchestration.ts).
|
|
189
|
+
*/
|
|
190
|
+
const GENERIC_DRY_RUN = '`true`: authenticate, authorize and validate this request';
|
|
191
|
+
function ownDryRun(op) {
|
|
192
|
+
return (op.q ?? []).some((p) => p.n === 'dryRun' && !(p.d ?? '').startsWith(GENERIC_DRY_RUN));
|
|
193
|
+
}
|
|
194
|
+
function withoutFlag(parsed, name) {
|
|
195
|
+
return { ...parsed, flags: new Map([...parsed.flags].filter(([k]) => k !== name)) };
|
|
196
|
+
}
|
|
126
197
|
async function invoke(parsed, deps, json) {
|
|
127
198
|
const words = parsed.positionals;
|
|
128
199
|
const target = resolveOp(words);
|
|
@@ -135,7 +206,10 @@ async function invoke(parsed, deps, json) {
|
|
|
135
206
|
let op;
|
|
136
207
|
if (target) {
|
|
137
208
|
op = target.op;
|
|
138
|
-
|
|
209
|
+
// A local dry run must not ALSO become the operation's `dryRun=true` —
|
|
210
|
+
// printed, it is a request the user never meant to send.
|
|
211
|
+
const planned = (0, args_1.has)(parsed, 'dry-run') && !ownDryRun(op) ? withoutFlag(parsed, 'dry-run') : parsed;
|
|
212
|
+
({ request } = await (0, request_1.planRequest)(op, planned, words.slice(target.used), src, target.values));
|
|
139
213
|
}
|
|
140
214
|
else if ((0, spec_1.isMethod)(words[0]) && words[1]?.startsWith('/')) {
|
|
141
215
|
// A path the bundled spec does not know (a route newer than this CLI):
|
|
@@ -165,13 +239,14 @@ async function invoke(parsed, deps, json) {
|
|
|
165
239
|
return usage(deps, 'api <operationId | METHOD path> [flags]', words.join(' '));
|
|
166
240
|
}
|
|
167
241
|
const http = deps.http;
|
|
168
|
-
if ((0, args_1.has)(parsed, 'dry-run') && !op
|
|
242
|
+
if ((0, args_1.has)(parsed, 'dry-run') && !(op && ownDryRun(op))) {
|
|
169
243
|
(0, send_1.printRequest)(http, request, deps);
|
|
170
244
|
return 0;
|
|
171
245
|
}
|
|
172
246
|
await (0, send_1.sendAndPrint)(http, request, {
|
|
173
247
|
json,
|
|
174
248
|
paginate: (0, args_1.has)(parsed, 'paginate'),
|
|
249
|
+
jsonl: (0, args_1.has)(parsed, 'jsonl'),
|
|
175
250
|
maxPages: Number((0, args_1.flag)(parsed, 'max-pages') ?? 1000),
|
|
176
251
|
columns: columns(parsed),
|
|
177
252
|
includeHeaders: (0, args_1.has)(parsed, 'include-headers'),
|
package/dist/api/command.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/api/command.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/api/command.ts"],"names":[],"mappings":"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"}
|
package/dist/api/http.d.ts
CHANGED
|
@@ -23,6 +23,12 @@ export declare const DEFAULT_API_VERSION = "2026-12-01";
|
|
|
23
23
|
export interface HttpOptions {
|
|
24
24
|
baseUrl: string;
|
|
25
25
|
token?: string;
|
|
26
|
+
/**
|
|
27
|
+
* The global `--token` (FMU-DOC01): the bearer instead of `token`, except on
|
|
28
|
+
* a request whose operation owns a `token` parameter (`tokenIsParam`) — there
|
|
29
|
+
* the flag's value was that parameter, and `token` is the bearer.
|
|
30
|
+
*/
|
|
31
|
+
flagToken?: string;
|
|
26
32
|
userAgent: string;
|
|
27
33
|
apiVersion?: string;
|
|
28
34
|
fetch?: typeof fetch;
|
|
@@ -51,6 +57,8 @@ export interface HttpRequest {
|
|
|
51
57
|
* the file a person saves will not open.
|
|
52
58
|
*/
|
|
53
59
|
raw?: boolean;
|
|
60
|
+
/** `--token` was this operation's own `token` parameter, not the bearer (FMU-DOC01). */
|
|
61
|
+
tokenIsParam?: boolean;
|
|
54
62
|
}
|
|
55
63
|
export interface HttpResponse {
|
|
56
64
|
status: number;
|
package/dist/api/http.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/api/http.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAChF;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC3C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,+EAA+E;IAC/E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/api/http.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAChF;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC3C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,+EAA+E;IAC/E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,wFAAwF;IACxF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,oFAAoF;IACpF,IAAI,EAAE,OAAO,CAAC;CACf;AAED,qBAAa,QAAS,SAAQ,KAAK;IAE/B,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAErB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM;gBAJb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACN,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,YAAA,EAClC,IAAI,CAAC,EAAE,MAAM,YAAA;CAKzB;AAKD,yGAAyG;AACzG,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,SAAa,GAAG,MAAM,GAAG,SAAS,CAOvF;AAED,qBAAa,IAAI;IAEH,QAAQ,CAAC,IAAI,EAAE,WAAW;IADtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;gBACpB,IAAI,EAAE,WAAW;IAItC,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAM,GAAG,MAAM;IAMzE,UAAU,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAe9C,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CAqDpD;AA6CD,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,CAehD"}
|
package/dist/api/http.js
CHANGED
|
@@ -78,8 +78,9 @@ class Http {
|
|
|
78
78
|
'User-Agent': this.opts.userAgent,
|
|
79
79
|
'Forumulate-Version': this.opts.apiVersion ?? exports.DEFAULT_API_VERSION,
|
|
80
80
|
};
|
|
81
|
-
|
|
82
|
-
|
|
81
|
+
const bearer = (req.tokenIsParam ? undefined : this.opts.flagToken) ?? this.opts.token;
|
|
82
|
+
if (bearer)
|
|
83
|
+
h.Authorization = `Bearer ${bearer}`;
|
|
83
84
|
if (req.body !== undefined && !req.form)
|
|
84
85
|
h['Content-Type'] = 'application/json';
|
|
85
86
|
Object.assign(h, req.headers ?? {});
|
package/dist/api/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/api/http.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/api/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { OperationIndex } from './spec';
|
|
2
|
+
/**
|
|
3
|
+
* The live API's operations, cached beside the bundled index (FMU-D13).
|
|
4
|
+
*
|
|
5
|
+
* `forumulate api list` said 1,810 operations while the live spec had 2,471:
|
|
6
|
+
* the index is cut from the spec at the moment the CLI is built, and 0.8.0 was
|
|
7
|
+
* built on 2026-10-17 — the API grew by six hundred operations in the week
|
|
8
|
+
* after. Nothing was filtered; the CLI was simply older than the API, and
|
|
9
|
+
* nothing said so. `api list --refresh` fetches the live `openapi.json` (an
|
|
10
|
+
* `If-None-Match` revalidation when it already has one, so a refresh that finds
|
|
11
|
+
* nothing new costs a 304), cuts the same slim index from it and keeps it per
|
|
12
|
+
* API base. Every `api` command then runs from the newer of the two, and the
|
|
13
|
+
* list's footer says which one it counted.
|
|
14
|
+
*/
|
|
15
|
+
export interface LiveMeta {
|
|
16
|
+
url: string;
|
|
17
|
+
etag: string | null;
|
|
18
|
+
fetchedAt: string;
|
|
19
|
+
ops: number;
|
|
20
|
+
}
|
|
21
|
+
export declare function cacheDir(env?: NodeJS.ProcessEnv): string;
|
|
22
|
+
/** The cached live index for this API base, when a refresh has made one. */
|
|
23
|
+
export declare function readLive(apiBase: string, env?: NodeJS.ProcessEnv): {
|
|
24
|
+
index: OperationIndex;
|
|
25
|
+
meta: LiveMeta;
|
|
26
|
+
} | undefined;
|
|
27
|
+
export type SpecFetch = (url: string, init: {
|
|
28
|
+
headers: Record<string, string>;
|
|
29
|
+
}) => Promise<{
|
|
30
|
+
status: number;
|
|
31
|
+
headers: {
|
|
32
|
+
get(n: string): string | null;
|
|
33
|
+
};
|
|
34
|
+
text(): Promise<string>;
|
|
35
|
+
}>;
|
|
36
|
+
/**
|
|
37
|
+
* Fetch the live spec (revalidating with the stored ETag) and store its slim
|
|
38
|
+
* index. Answers whether it changed and how many operations the API has.
|
|
39
|
+
*/
|
|
40
|
+
export declare function refreshLive(apiBase: string, opts?: {
|
|
41
|
+
env?: NodeJS.ProcessEnv;
|
|
42
|
+
fetchImpl?: SpecFetch;
|
|
43
|
+
userAgent?: string;
|
|
44
|
+
}): Promise<{
|
|
45
|
+
changed: boolean;
|
|
46
|
+
meta: LiveMeta;
|
|
47
|
+
}>;
|
|
48
|
+
//# sourceMappingURL=live-spec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-spec.d.ts","sourceRoot":"","sources":["../../src/api/live-spec.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAE7C;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,QAAQ,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAIrE;AAWD,4EAA4E;AAC5E,wBAAgB,QAAQ,CACtB,OAAO,EAAE,MAAM,EACf,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC;IAAE,KAAK,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAAG,SAAS,CAUvD;AAED,MAAM,MAAM,SAAS,GAAG,CACtB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,KACtC,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE;QAAE,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC,CAAC;AAEtG;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAChF,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,CA+B/C"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cacheDir = cacheDir;
|
|
4
|
+
exports.readLive = readLive;
|
|
5
|
+
exports.refreshLive = refreshLive;
|
|
6
|
+
const node_fs_1 = require("node:fs");
|
|
7
|
+
const node_os_1 = require("node:os");
|
|
8
|
+
const node_path_1 = require("node:path");
|
|
9
|
+
const slim_1 = require("./slim");
|
|
10
|
+
function cacheDir(env = process.env) {
|
|
11
|
+
if (env.FORUMULATE_CONFIG_DIR)
|
|
12
|
+
return (0, node_path_1.join)(env.FORUMULATE_CONFIG_DIR, 'cache');
|
|
13
|
+
if (env.XDG_CACHE_HOME)
|
|
14
|
+
return (0, node_path_1.join)(env.XDG_CACHE_HOME, 'forumulate');
|
|
15
|
+
return (0, node_path_1.join)((0, node_os_1.homedir)(), '.cache', 'forumulate');
|
|
16
|
+
}
|
|
17
|
+
const keyOf = (apiBase) => apiBase.replace(/^https?:\/\//, '').replace(/[^a-z0-9.-]+/gi, '_').toLowerCase();
|
|
18
|
+
function paths(apiBase, env) {
|
|
19
|
+
const dir = cacheDir(env);
|
|
20
|
+
const key = keyOf(apiBase);
|
|
21
|
+
return { dir, index: (0, node_path_1.join)(dir, `operations-${key}.json`), meta: (0, node_path_1.join)(dir, `operations-${key}.meta.json`) };
|
|
22
|
+
}
|
|
23
|
+
/** The cached live index for this API base, when a refresh has made one. */
|
|
24
|
+
function readLive(apiBase, env = process.env) {
|
|
25
|
+
try {
|
|
26
|
+
const p = paths(apiBase, env);
|
|
27
|
+
return {
|
|
28
|
+
index: JSON.parse((0, node_fs_1.readFileSync)(p.index, 'utf8')),
|
|
29
|
+
meta: JSON.parse((0, node_fs_1.readFileSync)(p.meta, 'utf8')),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Fetch the live spec (revalidating with the stored ETag) and store its slim
|
|
38
|
+
* index. Answers whether it changed and how many operations the API has.
|
|
39
|
+
*/
|
|
40
|
+
async function refreshLive(apiBase, opts = {}) {
|
|
41
|
+
const env = opts.env ?? process.env;
|
|
42
|
+
const p = paths(apiBase, env);
|
|
43
|
+
const prior = readLive(apiBase, env);
|
|
44
|
+
const url = `${apiBase.replace(/\/+$/, '')}/openapi.json`;
|
|
45
|
+
const doFetch = opts.fetchImpl ?? ((u, init) => fetch(u, init));
|
|
46
|
+
const res = await doFetch(url, {
|
|
47
|
+
headers: {
|
|
48
|
+
accept: 'application/json',
|
|
49
|
+
'user-agent': opts.userAgent ?? '@forumulate/cli',
|
|
50
|
+
...(prior?.meta.etag ? { 'if-none-match': prior.meta.etag } : {}),
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
if (res.status === 304 && prior) {
|
|
54
|
+
const meta = { ...prior.meta, fetchedAt: new Date().toISOString() };
|
|
55
|
+
(0, node_fs_1.writeFileSync)(p.meta, `${JSON.stringify(meta, null, 2)}\n`);
|
|
56
|
+
return { changed: false, meta };
|
|
57
|
+
}
|
|
58
|
+
if (res.status < 200 || res.status >= 300)
|
|
59
|
+
throw Object.assign(new Error(`GET ${url} answered ${res.status}`), { status: res.status });
|
|
60
|
+
const index = (0, slim_1.slim)(JSON.parse(await res.text()));
|
|
61
|
+
const meta = {
|
|
62
|
+
url,
|
|
63
|
+
etag: res.headers.get('etag'),
|
|
64
|
+
fetchedAt: new Date().toISOString(),
|
|
65
|
+
ops: index.ops.length,
|
|
66
|
+
};
|
|
67
|
+
(0, node_fs_1.mkdirSync)(p.dir, { recursive: true });
|
|
68
|
+
(0, node_fs_1.writeFileSync)(p.index, JSON.stringify(index));
|
|
69
|
+
(0, node_fs_1.writeFileSync)(p.meta, `${JSON.stringify(meta, null, 2)}\n`);
|
|
70
|
+
return { changed: true, meta };
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=live-spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-spec.js","sourceRoot":"","sources":["../../src/api/live-spec.ts"],"names":[],"mappings":"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"}
|