prompsit-cli 26.225.1206 → 26.227.2006
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 +10 -4
- package/dist/api/auth-session.d.ts +11 -11
- package/dist/api/auth-session.d.ts.map +1 -1
- package/dist/api/auth-session.js +21 -17
- package/dist/api/auth-session.js.map +1 -1
- package/dist/api/client.d.ts +4 -4
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +8 -8
- package/dist/api/client.js.map +1 -1
- package/dist/api/curl.d.ts +30 -0
- package/dist/api/curl.d.ts.map +1 -0
- package/dist/api/curl.js +115 -0
- package/dist/api/curl.js.map +1 -0
- package/dist/api/errors.d.ts +2 -3
- package/dist/api/errors.d.ts.map +1 -1
- package/dist/api/errors.js +4 -2
- package/dist/api/errors.js.map +1 -1
- package/dist/api/http-utils.d.ts +5 -0
- package/dist/api/http-utils.d.ts.map +1 -0
- package/dist/api/http-utils.js +19 -0
- package/dist/api/http-utils.js.map +1 -0
- package/dist/api/models.d.ts +135 -89
- package/dist/api/models.d.ts.map +1 -1
- package/dist/api/models.js +62 -72
- package/dist/api/models.js.map +1 -1
- package/dist/api/resources/data.d.ts +3 -5
- package/dist/api/resources/data.d.ts.map +1 -1
- package/dist/api/resources/data.js +11 -12
- package/dist/api/resources/data.js.map +1 -1
- package/dist/api/resources/discovery.d.ts +26 -0
- package/dist/api/resources/discovery.d.ts.map +1 -0
- package/dist/api/resources/discovery.js +46 -0
- package/dist/api/resources/discovery.js.map +1 -0
- package/dist/api/resources/evaluation.d.ts +9 -12
- package/dist/api/resources/evaluation.d.ts.map +1 -1
- package/dist/api/resources/evaluation.js +45 -20
- package/dist/api/resources/evaluation.js.map +1 -1
- package/dist/api/resources/formats.d.ts +1 -1
- package/dist/api/resources/formats.js +2 -2
- package/dist/api/resources/formats.js.map +1 -1
- package/dist/api/resources/jobs.d.ts +7 -8
- package/dist/api/resources/jobs.d.ts.map +1 -1
- package/dist/api/resources/jobs.js +10 -49
- package/dist/api/resources/jobs.js.map +1 -1
- package/dist/api/resources/languages.d.ts +25 -0
- package/dist/api/resources/languages.d.ts.map +1 -0
- package/dist/api/resources/languages.js +44 -0
- package/dist/api/resources/languages.js.map +1 -0
- package/dist/api/resources/translation.d.ts +8 -16
- package/dist/api/resources/translation.d.ts.map +1 -1
- package/dist/api/resources/translation.js +11 -15
- package/dist/api/resources/translation.js.map +1 -1
- package/dist/api/sse-client.d.ts +10 -16
- package/dist/api/sse-client.d.ts.map +1 -1
- package/dist/api/sse-client.js +158 -197
- package/dist/api/sse-client.js.map +1 -1
- package/dist/api/sse-models.js +1 -1
- package/dist/api/sse-models.js.map +1 -1
- package/dist/api/trace.js +1 -1
- package/dist/api/trace.js.map +1 -1
- package/dist/api/transport.d.ts +28 -1
- package/dist/api/transport.d.ts.map +1 -1
- package/dist/api/transport.js +89 -17
- package/dist/api/transport.js.map +1 -1
- package/dist/cli/arg-order.d.ts +2 -0
- package/dist/cli/arg-order.d.ts.map +1 -1
- package/dist/cli/arg-order.js +2 -0
- package/dist/cli/arg-order.js.map +1 -1
- package/dist/cli/exit-codes.d.ts +0 -2
- package/dist/cli/exit-codes.d.ts.map +1 -1
- package/dist/cli/exit-codes.js +0 -2
- package/dist/cli/exit-codes.js.map +1 -1
- package/dist/cli/exit.d.ts +4 -4
- package/dist/cli/exit.d.ts.map +1 -1
- package/dist/cli/exit.js +4 -4
- package/dist/cli/exit.js.map +1 -1
- package/dist/cli/prompts.d.ts +0 -2
- package/dist/cli/prompts.d.ts.map +1 -1
- package/dist/cli/prompts.js +1 -1
- package/dist/cli/prompts.js.map +1 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +0 -1
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/batch-processor.d.ts +38 -0
- package/dist/commands/batch-processor.d.ts.map +1 -0
- package/dist/commands/batch-processor.js +73 -0
- package/dist/commands/batch-processor.js.map +1 -0
- package/dist/commands/config/api-url.d.ts.map +1 -1
- package/dist/commands/config/api-url.js +4 -1
- package/dist/commands/config/api-url.js.map +1 -1
- package/dist/commands/config/command.d.ts.map +1 -1
- package/dist/commands/config/command.js +3 -2
- package/dist/commands/config/command.js.map +1 -1
- package/dist/commands/config/language.d.ts.map +1 -1
- package/dist/commands/config/language.js.map +1 -1
- package/dist/commands/config/reset.d.ts.map +1 -1
- package/dist/commands/config/reset.js.map +1 -1
- package/dist/commands/config/shared.js +3 -3
- package/dist/commands/config/shared.js.map +1 -1
- package/dist/commands/config/show.d.ts.map +1 -1
- package/dist/commands/config/show.js +0 -13
- package/dist/commands/config/show.js.map +1 -1
- package/dist/commands/data.d.ts.map +1 -1
- package/dist/commands/data.js +241 -68
- package/dist/commands/data.js.map +1 -1
- package/dist/commands/evaluate.d.ts.map +1 -1
- package/dist/commands/evaluate.js +111 -29
- package/dist/commands/evaluate.js.map +1 -1
- package/dist/commands/formats.d.ts +1 -1
- package/dist/commands/formats.d.ts.map +1 -1
- package/dist/commands/formats.js +5 -12
- package/dist/commands/formats.js.map +1 -1
- package/dist/commands/health.d.ts +1 -1
- package/dist/commands/health.d.ts.map +1 -1
- package/dist/commands/health.js +3 -10
- package/dist/commands/health.js.map +1 -1
- package/dist/commands/job-tracking.d.ts +13 -5
- package/dist/commands/job-tracking.d.ts.map +1 -1
- package/dist/commands/job-tracking.js +25 -18
- package/dist/commands/job-tracking.js.map +1 -1
- package/dist/commands/languages.d.ts +12 -0
- package/dist/commands/languages.d.ts.map +1 -0
- package/dist/commands/languages.js +48 -0
- package/dist/commands/languages.js.map +1 -0
- package/dist/commands/mappers.d.ts +15 -3
- package/dist/commands/mappers.d.ts.map +1 -1
- package/dist/commands/mappers.js +38 -18
- package/dist/commands/mappers.js.map +1 -1
- package/dist/commands/progress-animator.d.ts +2 -1
- package/dist/commands/progress-animator.d.ts.map +1 -1
- package/dist/commands/progress-animator.js +4 -2
- package/dist/commands/progress-animator.js.map +1 -1
- package/dist/commands/translate.d.ts.map +1 -1
- package/dist/commands/translate.js +149 -87
- package/dist/commands/translate.js.map +1 -1
- package/dist/config/credentials.d.ts +11 -87
- package/dist/config/credentials.d.ts.map +1 -1
- package/dist/config/credentials.js +28 -87
- package/dist/config/credentials.js.map +1 -1
- package/dist/config/env-parser.d.ts.map +1 -1
- package/dist/config/env-parser.js +3 -2
- package/dist/config/env-parser.js.map +1 -1
- package/dist/config/file-utils.js +1 -1
- package/dist/config/file-utils.js.map +1 -1
- package/dist/config/index.d.ts +4 -7
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +6 -12
- package/dist/config/index.js.map +1 -1
- package/dist/config/schemas.d.ts +4 -33
- package/dist/config/schemas.d.ts.map +1 -1
- package/dist/config/schemas.js +14 -19
- package/dist/config/schemas.js.map +1 -1
- package/dist/config/settings.d.ts +4 -4
- package/dist/config/settings.d.ts.map +1 -1
- package/dist/config/settings.js +16 -21
- package/dist/config/settings.js.map +1 -1
- package/dist/config/toml-io.js +1 -1
- package/dist/config/toml-io.js.map +1 -1
- package/dist/constants.d.ts +10 -9
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +10 -9
- package/dist/constants.js.map +1 -1
- package/dist/errors/catalog.d.ts.map +1 -1
- package/dist/errors/catalog.js +6 -8
- package/dist/errors/catalog.js.map +1 -1
- package/dist/errors/contracts.d.ts.map +1 -1
- package/dist/errors/contracts.js +2 -3
- package/dist/errors/contracts.js.map +1 -1
- package/dist/i18n/cache.d.ts +0 -2
- package/dist/i18n/cache.d.ts.map +1 -1
- package/dist/i18n/cache.js +4 -4
- package/dist/i18n/cache.js.map +1 -1
- package/dist/i18n/catalog.d.ts +34 -37
- package/dist/i18n/catalog.d.ts.map +1 -1
- package/dist/i18n/catalog.js +38 -40
- package/dist/i18n/catalog.js.map +1 -1
- package/dist/i18n/index.d.ts +0 -1
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +0 -3
- package/dist/i18n/index.js.map +1 -1
- package/dist/i18n/translator-adapter.js +1 -1
- package/dist/i18n/translator-adapter.js.map +1 -1
- package/dist/i18n/translator.d.ts.map +1 -1
- package/dist/i18n/translator.js +1 -0
- package/dist/i18n/translator.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -3
- package/dist/index.js.map +1 -1
- package/dist/logging/console-handler.js +1 -1
- package/dist/logging/console-handler.js.map +1 -1
- package/dist/logging/file-handler.d.ts.map +1 -1
- package/dist/logging/file-handler.js +4 -5
- package/dist/logging/file-handler.js.map +1 -1
- package/dist/logging/index.d.ts +2 -2
- package/dist/logging/index.d.ts.map +1 -1
- package/dist/logging/index.js +1 -1
- package/dist/logging/index.js.map +1 -1
- package/dist/logging/logger.d.ts +18 -22
- package/dist/logging/logger.d.ts.map +1 -1
- package/dist/logging/logger.js +38 -64
- package/dist/logging/logger.js.map +1 -1
- package/dist/logging/loki-handler.js +1 -1
- package/dist/logging/loki-handler.js.map +1 -1
- package/dist/logging/setup.d.ts +4 -3
- package/dist/logging/setup.d.ts.map +1 -1
- package/dist/logging/setup.js +136 -33
- package/dist/logging/setup.js.map +1 -1
- package/dist/output/ansi-utils.d.ts +13 -0
- package/dist/output/ansi-utils.d.ts.map +1 -0
- package/dist/output/ansi-utils.js +37 -0
- package/dist/output/ansi-utils.js.map +1 -0
- package/dist/output/index.d.ts +2 -5
- package/dist/output/index.d.ts.map +1 -1
- package/dist/output/index.js +3 -2
- package/dist/output/index.js.map +1 -1
- package/dist/output/output-events.d.ts +0 -1
- package/dist/output/output-events.d.ts.map +1 -1
- package/dist/output/tables/catalog.d.ts +5 -2
- package/dist/output/tables/catalog.d.ts.map +1 -1
- package/dist/output/tables/catalog.js +65 -9
- package/dist/output/tables/catalog.js.map +1 -1
- package/dist/output/tables/evaluation.d.ts.map +1 -1
- package/dist/output/tables/evaluation.js +3 -0
- package/dist/output/tables/evaluation.js.map +1 -1
- package/dist/output/tables/health-status.d.ts.map +1 -1
- package/dist/output/tables/health-status.js +11 -7
- package/dist/output/tables/health-status.js.map +1 -1
- package/dist/output/tables/index.d.ts +3 -3
- package/dist/output/tables/index.d.ts.map +1 -1
- package/dist/output/tables/index.js +2 -2
- package/dist/output/tables/index.js.map +1 -1
- package/dist/output/tables/render.d.ts.map +1 -1
- package/dist/output/tables/render.js +2 -10
- package/dist/output/tables/render.js.map +1 -1
- package/dist/output/terminal.d.ts +1 -5
- package/dist/output/terminal.d.ts.map +1 -1
- package/dist/output/terminal.js +25 -24
- package/dist/output/terminal.js.map +1 -1
- package/dist/output/view-models.d.ts +28 -2
- package/dist/output/view-models.d.ts.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +21 -29
- package/dist/program.js.map +1 -1
- package/dist/repl/controller.d.ts.map +1 -1
- package/dist/repl/controller.js +82 -47
- package/dist/repl/controller.js.map +1 -1
- package/dist/repl/core/output-bridge.d.ts.map +1 -1
- package/dist/repl/core/output-bridge.js +6 -4
- package/dist/repl/core/output-bridge.js.map +1 -1
- package/dist/repl/core/progress-types.d.ts +1 -1
- package/dist/repl/core/progress-types.d.ts.map +1 -1
- package/dist/repl/core/progress-types.js +1 -1
- package/dist/repl/core/progress-types.js.map +1 -1
- package/dist/repl/examples.d.ts +5 -7
- package/dist/repl/examples.d.ts.map +1 -1
- package/dist/repl/examples.js +27 -14
- package/dist/repl/examples.js.map +1 -1
- package/dist/repl/executor.d.ts +2 -4
- package/dist/repl/executor.d.ts.map +1 -1
- package/dist/repl/executor.js +69 -58
- package/dist/repl/executor.js.map +1 -1
- package/dist/repl/help.d.ts +10 -3
- package/dist/repl/help.d.ts.map +1 -1
- package/dist/repl/help.js +31 -4
- package/dist/repl/help.js.map +1 -1
- package/dist/repl/history/command-history.js +5 -5
- package/dist/repl/history/command-history.js.map +1 -1
- package/dist/repl/history/output-render.d.ts +1 -3
- package/dist/repl/history/output-render.d.ts.map +1 -1
- package/dist/repl/history/output-render.js +4 -6
- package/dist/repl/history/output-render.js.map +1 -1
- package/dist/repl/history/output-store.d.ts.map +1 -1
- package/dist/repl/history/output-store.js +6 -3
- package/dist/repl/history/output-store.js.map +1 -1
- package/dist/repl/input/autocomplete-provider.d.ts.map +1 -1
- package/dist/repl/input/autocomplete-provider.js +1 -2
- package/dist/repl/input/autocomplete-provider.js.map +1 -1
- package/dist/repl/input/completer.d.ts +0 -2
- package/dist/repl/input/completer.d.ts.map +1 -1
- package/dist/repl/input/completer.js +9 -7
- package/dist/repl/input/completer.js.map +1 -1
- package/dist/repl/input/ghost-text.d.ts +1 -1
- package/dist/repl/input/ghost-text.d.ts.map +1 -1
- package/dist/repl/input/ghost-text.js +1 -1
- package/dist/repl/input/ghost-text.js.map +1 -1
- package/dist/repl/input/input-handler.d.ts.map +1 -1
- package/dist/repl/input/input-handler.js +21 -15
- package/dist/repl/input/input-handler.js.map +1 -1
- package/dist/repl/input/keybindings.d.ts +0 -5
- package/dist/repl/input/keybindings.d.ts.map +1 -1
- package/dist/repl/input/keybindings.js +0 -65
- package/dist/repl/input/keybindings.js.map +1 -1
- package/dist/repl/loop.d.ts +1 -2
- package/dist/repl/loop.d.ts.map +1 -1
- package/dist/repl/loop.js +14 -14
- package/dist/repl/loop.js.map +1 -1
- package/dist/repl/registry.d.ts +28 -20
- package/dist/repl/registry.d.ts.map +1 -1
- package/dist/repl/registry.js +229 -171
- package/dist/repl/registry.js.map +1 -1
- package/dist/repl/service.d.ts +1 -10
- package/dist/repl/service.d.ts.map +1 -1
- package/dist/repl/service.js +15 -26
- package/dist/repl/service.js.map +1 -1
- package/dist/repl/ui/components/curl-panel.js +4 -4
- package/dist/repl/ui/components/curl-panel.js.map +1 -1
- package/dist/repl/ui/components/ghost-text-editor.d.ts +4 -0
- package/dist/repl/ui/components/ghost-text-editor.d.ts.map +1 -1
- package/dist/repl/ui/components/ghost-text-editor.js +17 -6
- package/dist/repl/ui/components/ghost-text-editor.js.map +1 -1
- package/dist/repl/ui/components/history-component.d.ts.map +1 -1
- package/dist/repl/ui/components/history-component.js +7 -69
- package/dist/repl/ui/components/history-component.js.map +1 -1
- package/dist/repl/ui/components/progress-bar.js.map +1 -1
- package/dist/repl/ui/components/status-bar-line.js +1 -1
- package/dist/repl/ui/components/status-bar-line.js.map +1 -1
- package/dist/repl/ui/data.js +3 -3
- package/dist/repl/ui/data.js.map +1 -1
- package/dist/repl/ui/hint-state.d.ts +0 -1
- package/dist/repl/ui/hint-state.d.ts.map +1 -1
- package/dist/repl/ui/hint-state.js +1 -1
- package/dist/repl/ui/hint-state.js.map +1 -1
- package/dist/repl/ui/selection-utils.d.ts +28 -0
- package/dist/repl/ui/selection-utils.d.ts.map +1 -0
- package/dist/repl/ui/selection-utils.js +70 -0
- package/dist/repl/ui/selection-utils.js.map +1 -0
- package/dist/repl/ui/status-bar.d.ts +1 -4
- package/dist/repl/ui/status-bar.d.ts.map +1 -1
- package/dist/repl/ui/status-bar.js +6 -33
- package/dist/repl/ui/status-bar.js.map +1 -1
- package/dist/runtime/async-utils.d.ts +16 -0
- package/dist/runtime/async-utils.d.ts.map +1 -0
- package/dist/runtime/async-utils.js +40 -0
- package/dist/runtime/async-utils.js.map +1 -0
- package/dist/runtime/clipboard-win32.d.ts.map +1 -1
- package/dist/runtime/clipboard-win32.js +2 -1
- package/dist/runtime/clipboard-win32.js.map +1 -1
- package/dist/runtime/clipboard.d.ts.map +1 -1
- package/dist/runtime/clipboard.js +6 -2
- package/dist/runtime/clipboard.js.map +1 -1
- package/dist/runtime/external-transport.d.ts.map +1 -1
- package/dist/runtime/external-transport.js +1 -1
- package/dist/runtime/external-transport.js.map +1 -1
- package/dist/runtime/file-args.d.ts +38 -0
- package/dist/runtime/file-args.d.ts.map +1 -0
- package/dist/runtime/file-args.js +133 -0
- package/dist/runtime/file-args.js.map +1 -0
- package/dist/runtime/platform.d.ts +0 -2
- package/dist/runtime/platform.d.ts.map +1 -1
- package/dist/runtime/platform.js +0 -6
- package/dist/runtime/platform.js.map +1 -1
- package/dist/tui/settings-screen.d.ts +1 -13
- package/dist/tui/settings-screen.d.ts.map +1 -1
- package/dist/tui/settings-screen.js +46 -34
- package/dist/tui/settings-screen.js.map +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +3 -2
- package/dist/version.js.map +1 -1
- package/examples/sample.tmx +6 -0
- package/package.json +18 -7
package/README.md
CHANGED
|
@@ -8,7 +8,11 @@ CLI for the Prompsit Translation API. Translate text and documents, evaluate qua
|
|
|
8
8
|
|
|
9
9
|
## Requirements
|
|
10
10
|
|
|
11
|
-
Node.js 22+
|
|
11
|
+
[Node.js](https://nodejs.org/) 22+
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
node -v # Should print v22.x or higher
|
|
15
|
+
```
|
|
12
16
|
|
|
13
17
|
## Install
|
|
14
18
|
|
|
@@ -32,12 +36,11 @@ command -v prompsit
|
|
|
32
36
|
|
|
33
37
|
## Usage
|
|
34
38
|
|
|
35
|
-
Run `prompsit` to enter interactive REPL with tab completion.
|
|
39
|
+
Run `prompsit` to enter interactive REPL with tab completion.
|
|
36
40
|
|
|
37
41
|
```bash
|
|
38
42
|
prompsit # Enter interactive REPL
|
|
39
43
|
prompsit translate "Hello" -s "en" -t "es" # Run single command
|
|
40
|
-
prompsit --json engines # JSON output mode
|
|
41
44
|
```
|
|
42
45
|
|
|
43
46
|
> **Quoting rule:** All values must be quoted. Commands, subcommands, and flags stay unquoted.
|
|
@@ -222,7 +225,6 @@ $ prompsit formats
|
|
|
222
225
|
| Command | Description |
|
|
223
226
|
|---------|-------------|
|
|
224
227
|
| `health` | API health check |
|
|
225
|
-
| `verbose` / `terse` | Enable/disable verbose HTTP output |
|
|
226
228
|
| `help` | Show all commands (also: `?`) |
|
|
227
229
|
| `clear` | Clear screen |
|
|
228
230
|
| `exit` | Quit CLI (also: `quit`, `q`) |
|
|
@@ -254,6 +256,10 @@ Config file: `~/.prompsit/config.toml` | Env override: `PROMPSIT_<SECTION>__<KEY
|
|
|
254
256
|
| `examples/sample.xliff` | Bundled example: XLIFF 1.2 translation file |
|
|
255
257
|
| `examples/sample.csv` | Bundled example: CSV tabular data |
|
|
256
258
|
|
|
259
|
+
## Troubleshooting
|
|
260
|
+
|
|
261
|
+
See [docs/project/runbook.md](docs/project/runbook.md) for setup issues, common errors, and fixes.
|
|
262
|
+
|
|
257
263
|
## License
|
|
258
264
|
|
|
259
265
|
MIT
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Method, Options as GotOptions } from "got";
|
|
2
|
-
import type { HttpTransport } from "./transport.ts";
|
|
2
|
+
import type { HttpTransport, RawResponse } from "./transport.ts";
|
|
3
3
|
import { AuthResource } from "./resources/auth.ts";
|
|
4
4
|
/**
|
|
5
5
|
* Authenticated HTTP session with automatic token refresh.
|
|
@@ -18,19 +18,19 @@ export declare class AuthSession {
|
|
|
18
18
|
private readonly authResource;
|
|
19
19
|
private refreshPromise;
|
|
20
20
|
constructor(transport: HttpTransport, authResource: AuthResource);
|
|
21
|
+
/** Make authenticated JSON request with auto-refresh. */
|
|
22
|
+
request<T>(method: Method, url: string, options?: Partial<GotOptions>, signal?: AbortSignal): Promise<T>;
|
|
23
|
+
/** Make authenticated request returning raw buffer + headers. */
|
|
24
|
+
requestRaw(method: Method, url: string, options?: Partial<GotOptions>, signal?: AbortSignal): Promise<RawResponse>;
|
|
25
|
+
/** Stream authenticated response directly to file on disk. */
|
|
26
|
+
requestToFile(method: Method, url: string, outputPath: string, options?: Partial<GotOptions>, signal?: AbortSignal): Promise<string>;
|
|
21
27
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* Flow: public fallback -> proactive refresh -> request -> reactive 401 retry
|
|
28
|
+
* Auth wrapper: public fallback -> proactive refresh -> execute -> reactive 401 retry.
|
|
25
29
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* @param options - Got request options
|
|
29
|
-
* @returns Response body (JSON parsed)
|
|
30
|
-
* @throws AuthenticationError if not authenticated or refresh fails
|
|
31
|
-
* @throws NetworkError if API unreachable
|
|
30
|
+
* Generic over return type — works for JSON (request), buffer (requestRaw),
|
|
31
|
+
* and file streaming (requestToFile).
|
|
32
32
|
*/
|
|
33
|
-
|
|
33
|
+
private withAuth;
|
|
34
34
|
/**
|
|
35
35
|
* Attempt token refresh using refresh token.
|
|
36
36
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-session.d.ts","sourceRoot":"","sources":["../../src/api/auth-session.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,KAAK,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"auth-session.d.ts","sourceRoot":"","sources":["../../src/api/auth-session.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,KAAK,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAWnD;;;;;;;;;;;GAWG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAE5C,OAAO,CAAC,cAAc,CAAiC;gBAE3C,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY;IAKhE,yDAAyD;IACnD,OAAO,CAAC,CAAC,EACb,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,OAAO,CAAC,UAAU,CAAM,EACjC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,CAAC,CAAC;IAOb,iEAAiE;IAC3D,UAAU,CACd,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,OAAO,CAAC,UAAU,CAAM,EACjC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,WAAW,CAAC;IAOvB,8DAA8D;IACxD,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,OAAO,CAAC,UAAU,CAAM,EACjC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC;IAQlB;;;;;OAKG;YACW,QAAQ;IAmCtB;;;;;;;;;OASG;IACH,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;YAShB,UAAU;CAiCzB"}
|
package/dist/api/auth-session.js
CHANGED
|
@@ -25,24 +25,28 @@ export class AuthSession {
|
|
|
25
25
|
this.transport = transport;
|
|
26
26
|
this.authResource = authResource;
|
|
27
27
|
}
|
|
28
|
+
/** Make authenticated JSON request with auto-refresh. */
|
|
29
|
+
async request(method, url, options = {}, signal) {
|
|
30
|
+
return this.withAuth((publicFlag, sig) => this.transport.request(method, url, options, publicFlag, sig), signal);
|
|
31
|
+
}
|
|
32
|
+
/** Make authenticated request returning raw buffer + headers. */
|
|
33
|
+
async requestRaw(method, url, options = {}, signal) {
|
|
34
|
+
return this.withAuth((publicFlag, sig) => this.transport.requestRaw(method, url, options, publicFlag, sig), signal);
|
|
35
|
+
}
|
|
36
|
+
/** Stream authenticated response directly to file on disk. */
|
|
37
|
+
async requestToFile(method, url, outputPath, options = {}, signal) {
|
|
38
|
+
return this.withAuth((publicFlag, sig) => this.transport.requestToFile(method, url, outputPath, options, publicFlag, sig), signal);
|
|
39
|
+
}
|
|
28
40
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* Flow: public fallback -> proactive refresh -> request -> reactive 401 retry
|
|
41
|
+
* Auth wrapper: public fallback -> proactive refresh -> execute -> reactive 401 retry.
|
|
32
42
|
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
* @param options - Got request options
|
|
36
|
-
* @returns Response body (JSON parsed)
|
|
37
|
-
* @throws AuthenticationError if not authenticated or refresh fails
|
|
38
|
-
* @throws NetworkError if API unreachable
|
|
43
|
+
* Generic over return type — works for JSON (request), buffer (requestRaw),
|
|
44
|
+
* and file streaming (requestToFile).
|
|
39
45
|
*/
|
|
40
|
-
async
|
|
41
|
-
// 1. No token — send without auth header; let API decide (public vs protected)
|
|
42
|
-
// Public endpoints (engines, formats) succeed; protected ones return 401
|
|
43
|
-
// which transport classifies as AuthenticationError.
|
|
46
|
+
async withAuth(fn, signal) {
|
|
47
|
+
// 1. No token — send without auth header; let API decide (public vs protected)
|
|
44
48
|
if (!isAuthenticated()) {
|
|
45
|
-
return await
|
|
49
|
+
return await fn(true, signal);
|
|
46
50
|
}
|
|
47
51
|
// 2. Proactive refresh: if token expired, refresh before request
|
|
48
52
|
if (isTokenExpired()) {
|
|
@@ -52,16 +56,16 @@ export class AuthSession {
|
|
|
52
56
|
throw new AuthenticationError("Session expired. Run: prompsit login");
|
|
53
57
|
}
|
|
54
58
|
}
|
|
55
|
-
// 3. Execute
|
|
59
|
+
// 3. Execute with auth
|
|
56
60
|
try {
|
|
57
|
-
return await
|
|
61
|
+
return await fn(false, signal);
|
|
58
62
|
}
|
|
59
63
|
catch (error) {
|
|
60
64
|
// 4. Reactive refresh: on 401, refresh once and retry
|
|
61
65
|
if (error instanceof AuthenticationError) {
|
|
62
66
|
const refreshed = await this.tryRefresh();
|
|
63
67
|
if (refreshed) {
|
|
64
|
-
return await
|
|
68
|
+
return await fn(false, signal);
|
|
65
69
|
}
|
|
66
70
|
clearTokens();
|
|
67
71
|
throw new AuthenticationError("Authentication failed. Run: prompsit login");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-session.js","sourceRoot":"","sources":["../../src/api/auth-session.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,qFAAqF;AACrF,iFAAiF;AAIjF,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EACL,eAAe,EACf,YAAY,EACZ,UAAU,EACV,WAAW,EACX,eAAe,EACf,cAAc,GACf,MAAM,0BAA0B,CAAC;AAElC;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,WAAW;IACL,SAAS,CAAgB;IACzB,YAAY,CAAe;IAC5C,oGAAoG;IAC5F,cAAc,GAA4B,IAAI,CAAC;IAEvD,YAAY,SAAwB,EAAE,YAA0B;QAC9D,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"auth-session.js","sourceRoot":"","sources":["../../src/api/auth-session.ts"],"names":[],"mappings":"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"}
|
package/dist/api/client.d.ts
CHANGED
|
@@ -3,8 +3,8 @@ import { AuthResource } from "./resources/auth.ts";
|
|
|
3
3
|
import { HealthResource } from "./resources/health.ts";
|
|
4
4
|
import { TranslationResource } from "./resources/translation.ts";
|
|
5
5
|
import { EvaluationResource } from "./resources/evaluation.ts";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { LanguagesResource } from "./resources/languages.ts";
|
|
7
|
+
import { DiscoveryResource } from "./resources/discovery.ts";
|
|
8
8
|
import { JobsResource } from "./resources/jobs.ts";
|
|
9
9
|
import { DataResource } from "./resources/data.ts";
|
|
10
10
|
/**
|
|
@@ -21,8 +21,8 @@ export declare class APIClient {
|
|
|
21
21
|
readonly health: HealthResource;
|
|
22
22
|
readonly translation: TranslationResource;
|
|
23
23
|
readonly evaluation: EvaluationResource;
|
|
24
|
-
readonly
|
|
25
|
-
readonly
|
|
24
|
+
readonly languages: LanguagesResource;
|
|
25
|
+
readonly discovery: DiscoveryResource;
|
|
26
26
|
readonly jobs: JobsResource;
|
|
27
27
|
readonly data: DataResource;
|
|
28
28
|
constructor();
|
package/dist/api/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,IAAI,EAAE,YAAY,CAAC;IACnC,SAAgB,OAAO,EAAE,WAAW,CAAC;IACrC,SAAgB,MAAM,EAAE,cAAc,CAAC;IACvC,SAAgB,WAAW,EAAE,mBAAmB,CAAC;IACjD,SAAgB,UAAU,EAAE,kBAAkB,CAAC;IAC/C,SAAgB,SAAS,EAAE,iBAAiB,CAAC;IAC7C,SAAgB,SAAS,EAAE,iBAAiB,CAAC;IAC7C,SAAgB,IAAI,EAAE,YAAY,CAAC;IACnC,SAAgB,IAAI,EAAE,YAAY,CAAC;;IAgBnC;;OAEG;IACH,SAAS,IAAI,IAAI;IAIjB;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAKD;;GAEG;AACH,wBAAgB,YAAY,IAAI,SAAS,CAGxC;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAKrC"}
|
package/dist/api/client.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
// See API-448, API-469, API-477, API-484, API-490, API-496: API Client facade with singleton pattern
|
|
2
2
|
// Composes resource instances over shared HttpTransport.
|
|
3
|
-
// Pattern: Module-level singleton with explicit invalidation
|
|
3
|
+
// Pattern: Module-level singleton with explicit invalidation.
|
|
4
4
|
import { HttpTransport } from "./transport.js";
|
|
5
5
|
import { AuthSession } from "./auth-session.js";
|
|
6
6
|
import { AuthResource } from "./resources/auth.js";
|
|
7
7
|
import { HealthResource } from "./resources/health.js";
|
|
8
8
|
import { TranslationResource } from "./resources/translation.js";
|
|
9
9
|
import { EvaluationResource } from "./resources/evaluation.js";
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
10
|
+
import { LanguagesResource } from "./resources/languages.js";
|
|
11
|
+
import { DiscoveryResource } from "./resources/discovery.js";
|
|
12
12
|
import { JobsResource } from "./resources/jobs.js";
|
|
13
13
|
import { DataResource } from "./resources/data.js";
|
|
14
14
|
import { getSettings } from "../config/settings.js";
|
|
@@ -26,20 +26,20 @@ export class APIClient {
|
|
|
26
26
|
health;
|
|
27
27
|
translation;
|
|
28
28
|
evaluation;
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
languages;
|
|
30
|
+
discovery;
|
|
31
31
|
jobs;
|
|
32
32
|
data;
|
|
33
33
|
constructor() {
|
|
34
|
-
this.baseUrl = getSettings().api.base_url.replace(
|
|
34
|
+
this.baseUrl = getSettings().api.base_url.replace(/\/{1,100}$/, "");
|
|
35
35
|
this.transport = new HttpTransport();
|
|
36
36
|
this.auth = new AuthResource(this.transport, this.baseUrl);
|
|
37
37
|
this.session = new AuthSession(this.transport, this.auth);
|
|
38
38
|
this.health = new HealthResource(this.transport, this.baseUrl);
|
|
39
39
|
this.translation = new TranslationResource(this.session, this.baseUrl);
|
|
40
40
|
this.evaluation = new EvaluationResource(this.session, this.baseUrl);
|
|
41
|
-
this.
|
|
42
|
-
this.
|
|
41
|
+
this.languages = new LanguagesResource(this.session, this.baseUrl);
|
|
42
|
+
this.discovery = new DiscoveryResource(this.session, this.baseUrl);
|
|
43
43
|
this.jobs = new JobsResource(this.session, this.baseUrl);
|
|
44
44
|
this.data = new DataResource(this.session, this.baseUrl);
|
|
45
45
|
}
|
package/dist/api/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,qGAAqG;AACrG,yDAAyD;AACzD,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Options as GotOptions } from "got";
|
|
2
|
+
/**
|
|
3
|
+
* Set the output function for curl display.
|
|
4
|
+
* Callback receives sanitized curl (for display) and raw curl (for clipboard copy).
|
|
5
|
+
*/
|
|
6
|
+
export declare function setCurlOutputFn(fn: ((sanitized: string, raw: string) => void) | null): void;
|
|
7
|
+
/**
|
|
8
|
+
* Check if curl display is enabled.
|
|
9
|
+
*/
|
|
10
|
+
export declare function isCurlEnabled(): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Enable or disable curl display.
|
|
13
|
+
*/
|
|
14
|
+
export declare function setCurlEnabled(enabled: boolean): void;
|
|
15
|
+
/**
|
|
16
|
+
* Convert got request options to a curl command string.
|
|
17
|
+
*
|
|
18
|
+
* Includes method, URL, headers (except SKIP_HEADERS), and body.
|
|
19
|
+
* Pretty-formats JSON body for readability.
|
|
20
|
+
*/
|
|
21
|
+
export declare function buildCurl(options: GotOptions): string;
|
|
22
|
+
/**
|
|
23
|
+
* Remove sensitive data from curl string for display.
|
|
24
|
+
*
|
|
25
|
+
* - Replaces Bearer tokens with [token]
|
|
26
|
+
* - Hides password/secret/refresh_token/access_token values
|
|
27
|
+
*/
|
|
28
|
+
export declare function sanitizeCurl(curl: string): string;
|
|
29
|
+
export declare function logCurl(options: GotOptions): void;
|
|
30
|
+
//# sourceMappingURL=curl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"curl.d.ts","sourceRoot":"","sources":["../../src/api/curl.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,KAAK,CAAC;AASjD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAE3F;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAErD;AAaD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAqCrD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiBjD;AAWD,wBAAgB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAWjD"}
|
package/dist/api/curl.js
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
// See API-444: Curl command output for API requests
|
|
2
|
+
// Shows API requests as curl commands for --debug flag and show_curl setting.
|
|
3
|
+
// Layer: Infrastructure. Output is injected via setCurlOutputFn() callback.
|
|
4
|
+
// Module-level curl display state
|
|
5
|
+
let curlEnabled = false;
|
|
6
|
+
// Injectable output callback: (sanitized, raw) => void
|
|
7
|
+
// CLI mode displays sanitized only; REPL stores both for panel + clipboard.
|
|
8
|
+
let outputFn = null;
|
|
9
|
+
/**
|
|
10
|
+
* Set the output function for curl display.
|
|
11
|
+
* Callback receives sanitized curl (for display) and raw curl (for clipboard copy).
|
|
12
|
+
*/
|
|
13
|
+
export function setCurlOutputFn(fn) {
|
|
14
|
+
outputFn = fn;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Check if curl display is enabled.
|
|
18
|
+
*/
|
|
19
|
+
export function isCurlEnabled() {
|
|
20
|
+
return curlEnabled;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Enable or disable curl display.
|
|
24
|
+
*/
|
|
25
|
+
export function setCurlEnabled(enabled) {
|
|
26
|
+
curlEnabled = enabled;
|
|
27
|
+
}
|
|
28
|
+
// Headers to skip in curl output (standard HTTP headers added by got/Node)
|
|
29
|
+
const SKIP_HEADERS = new Set([
|
|
30
|
+
"host",
|
|
31
|
+
"user-agent",
|
|
32
|
+
"accept",
|
|
33
|
+
"accept-encoding",
|
|
34
|
+
"connection",
|
|
35
|
+
"content-length",
|
|
36
|
+
"transfer-encoding",
|
|
37
|
+
]);
|
|
38
|
+
/**
|
|
39
|
+
* Convert got request options to a curl command string.
|
|
40
|
+
*
|
|
41
|
+
* Includes method, URL, headers (except SKIP_HEADERS), and body.
|
|
42
|
+
* Pretty-formats JSON body for readability.
|
|
43
|
+
*/
|
|
44
|
+
export function buildCurl(options) {
|
|
45
|
+
const method = options.method;
|
|
46
|
+
const url = typeof options.url === "string" ? options.url : (options.url?.toString() ?? "");
|
|
47
|
+
const parts = [`curl -X ${method} '${url}'`];
|
|
48
|
+
// Add headers (skip standard ones)
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- got types say headers is defined, but runtime can be undefined
|
|
50
|
+
const headers = options.headers ?? {};
|
|
51
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
52
|
+
if (SKIP_HEADERS.has(key.toLowerCase())) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const headerValue = Array.isArray(value) ? value.join(", ") : (value ?? "");
|
|
56
|
+
parts.push(` -H '${key}: ${headerValue}'`);
|
|
57
|
+
}
|
|
58
|
+
// Add body
|
|
59
|
+
if (options.json) {
|
|
60
|
+
const body = JSON.stringify(options.json);
|
|
61
|
+
parts.push(` -d '${body}'`);
|
|
62
|
+
}
|
|
63
|
+
else if (options.form) {
|
|
64
|
+
const formData = new URLSearchParams(options.form).toString();
|
|
65
|
+
parts.push(` -H 'Content-Type: application/x-www-form-urlencoded'`, ` -d '${formData}'`);
|
|
66
|
+
}
|
|
67
|
+
else if (options.body) {
|
|
68
|
+
const body = typeof options.body === "string" ? options.body : JSON.stringify(options.body);
|
|
69
|
+
// Try to pretty-format JSON
|
|
70
|
+
try {
|
|
71
|
+
const parsed = JSON.parse(body);
|
|
72
|
+
const formatted = JSON.stringify(parsed);
|
|
73
|
+
parts.push(` -d '${formatted}'`);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
parts.push(` -d '${body}'`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return parts.join("\n");
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Remove sensitive data from curl string for display.
|
|
83
|
+
*
|
|
84
|
+
* - Replaces Bearer tokens with [token]
|
|
85
|
+
* - Hides password/secret/refresh_token/access_token values
|
|
86
|
+
*/
|
|
87
|
+
export function sanitizeCurl(curl) {
|
|
88
|
+
// Replace Bearer tokens
|
|
89
|
+
let result = curl.replaceAll(/(Bearer )\S+/g, "$1[token]");
|
|
90
|
+
// Hide sensitive query params and form data
|
|
91
|
+
result = result.replaceAll(/((?:refresh_token|password|access_token|secret)=)[^&'\s]{1,1000}/g, "$1[hidden]");
|
|
92
|
+
// Hide sensitive JSON body fields: "key": "value" or "key":"value"
|
|
93
|
+
result = result.replaceAll(/("(?:password|secret|token|(?:access_|refresh_)token)":\s{0,100}")[^"]{0,10000}"/g, '$1[hidden]"');
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Log curl for got request (called from got hooks).
|
|
98
|
+
*
|
|
99
|
+
* Builds both raw and sanitized curl, passes both to outputFn.
|
|
100
|
+
* Raw version contains real tokens (for clipboard), sanitized has [token] (for display).
|
|
101
|
+
*/
|
|
102
|
+
/** URL paths to exclude from curl output (internal/service requests). */
|
|
103
|
+
const SKIP_URLS = ["/v1/auth/token", "/v1/jobs/"];
|
|
104
|
+
export function logCurl(options) {
|
|
105
|
+
if (!curlEnabled || !outputFn) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const url = typeof options.url === "string" ? options.url : (options.url?.toString() ?? "");
|
|
109
|
+
if (SKIP_URLS.some((path) => url.includes(path)))
|
|
110
|
+
return;
|
|
111
|
+
const raw = buildCurl(options);
|
|
112
|
+
const sanitized = sanitizeCurl(raw);
|
|
113
|
+
outputFn(sanitized, raw);
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=curl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"curl.js","sourceRoot":"","sources":["../../src/api/curl.ts"],"names":[],"mappings":"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"}
|
package/dist/api/errors.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { APIError
|
|
2
|
-
export { APIError, AuthenticationError, CancelledError, ForbiddenError, JobError, NetworkError, ProblemDetailSchema, RateLimitError, ServerError, ValidationError, };
|
|
3
|
-
export type { ProblemDetail };
|
|
1
|
+
import { APIError } from "../errors/contracts.ts";
|
|
4
2
|
export declare function parseApiError(responseData: unknown, statusCode: number): APIError;
|
|
3
|
+
export { CancelledError, NetworkError, APIError, AuthenticationError, RateLimitError, ServerError, } from "../errors/contracts.ts";
|
|
5
4
|
//# sourceMappingURL=errors.d.ts.map
|
package/dist/api/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/api/errors.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/api/errors.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,EAOT,MAAM,wBAAwB,CAAC;AAQhC,wBAAgB,aAAa,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,QAAQ,CA4EjF;AAcD,OAAO,EACL,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,mBAAmB,EACnB,cAAc,EACd,WAAW,GACZ,MAAM,wBAAwB,CAAC"}
|
package/dist/api/errors.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
// See API-442: Error hierarchy with codes & RFC 9457 ProblemDetail
|
|
2
|
-
import { APIError, AuthenticationError,
|
|
2
|
+
import { APIError, AuthenticationError, ForbiddenError, ProblemDetailSchema, RateLimitError, ServerError, ValidationError, } from "../errors/contracts.js";
|
|
3
3
|
import { HttpStatus } from "../constants.js";
|
|
4
|
-
export
|
|
4
|
+
// Re-export only symbols that external consumers actually import.
|
|
5
|
+
// ForbiddenError, ValidationError, ProblemDetailSchema are used internally by parseApiError().
|
|
5
6
|
// Parse API response and return appropriate exception
|
|
6
7
|
// Supports RFC 9457 ProblemDetail format with fallback payload normalization.
|
|
7
8
|
export function parseApiError(responseData, statusCode) {
|
|
@@ -70,4 +71,5 @@ function mapStatusToError(statusCode, message) {
|
|
|
70
71
|
return new ServerError(message, statusCode);
|
|
71
72
|
return new APIError(message, `E${statusCode}`, statusCode);
|
|
72
73
|
}
|
|
74
|
+
export { CancelledError, NetworkError, APIError, AuthenticationError, RateLimitError, ServerError, } from "../errors/contracts.js";
|
|
73
75
|
//# sourceMappingURL=errors.js.map
|
package/dist/api/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/api/errors.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,OAAO,EACL,QAAQ,EACR,mBAAmB,EACnB,cAAc,EACd,
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/api/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Build auth headers object from current token (empty object if not authenticated). */
|
|
2
|
+
export declare function getAuthHeaders(): Record<string, string>;
|
|
3
|
+
/** Extract filename from Content-Disposition header value. Returns null if not found. */
|
|
4
|
+
export declare function parseContentDispositionFilename(header: string | undefined): string | null;
|
|
5
|
+
//# sourceMappingURL=http-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-utils.d.ts","sourceRoot":"","sources":["../../src/api/http-utils.ts"],"names":[],"mappings":"AAMA,wFAAwF;AACxF,wBAAgB,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIvD;AAED,yFAAyF;AACzF,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAIzF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Shared HTTP utilities for API resources that bypass transport (binary responses).
|
|
2
|
+
// Used by: JobsResource.download(), EvaluationResource.evaluateFile()
|
|
3
|
+
import { getAccessToken } from "../config/credentials.js";
|
|
4
|
+
import { HEADER_AUTHORIZATION, BEARER_PREFIX } from "../constants.js";
|
|
5
|
+
/** Build auth headers object from current token (empty object if not authenticated). */
|
|
6
|
+
export function getAuthHeaders() {
|
|
7
|
+
const token = getAccessToken();
|
|
8
|
+
if (!token)
|
|
9
|
+
return {};
|
|
10
|
+
return { [HEADER_AUTHORIZATION]: `${BEARER_PREFIX} ${token}` };
|
|
11
|
+
}
|
|
12
|
+
/** Extract filename from Content-Disposition header value. Returns null if not found. */
|
|
13
|
+
export function parseContentDispositionFilename(header) {
|
|
14
|
+
if (!header?.includes("filename="))
|
|
15
|
+
return null;
|
|
16
|
+
const match = /filename="?([^";\s]+)"?/.exec(header);
|
|
17
|
+
return match?.[1] ?? null;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=http-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-utils.js","sourceRoot":"","sources":["../../src/api/http-utils.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,sEAAsE;AAEtE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEtE,wFAAwF;AACxF,MAAM,UAAU,cAAc;IAC5B,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,EAAE,CAAC,oBAAoB,CAAC,EAAE,GAAG,aAAa,IAAI,KAAK,EAAE,EAAE,CAAC;AACjE,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,+BAA+B,CAAC,MAA0B;IACxE,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC5B,CAAC"}
|