@uns-kit/core 1.0.45 → 1.0.46
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 +21 -21
- package/README.md +102 -102
- package/dist/base-path.js.map +1 -1
- package/dist/config/app-config.js.map +1 -1
- package/dist/config/project.config.extension.js.map +1 -1
- package/dist/config-file.js.map +1 -1
- package/dist/graphql/schema.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/logger.js.map +1 -1
- package/dist/tools/auth/auth-client.js.map +1 -1
- package/dist/tools/auth/index.js.map +1 -1
- package/dist/tools/auth/secure-store.js.map +1 -1
- package/dist/tools/base-path.js.map +1 -1
- package/dist/tools/generate-config-schema.js.map +1 -1
- package/dist/tools/generate-uns-dictionary.js +7 -7
- package/dist/tools/generate-uns-dictionary.js.map +1 -1
- package/dist/tools/generate-uns-measurements.js +7 -7
- package/dist/tools/generate-uns-measurements.js.map +1 -1
- package/dist/tools/generate-uns-reference.js +9 -9
- package/dist/tools/generate-uns-reference.js.map +1 -1
- package/dist/tools/pull-request.js.map +1 -1
- package/dist/tools/refresh-uns.js +50 -50
- package/dist/tools/refresh-uns.js.map +1 -1
- package/dist/tools/schema.js.map +1 -1
- package/dist/uns/handover-manager-event-emitter.js.map +1 -1
- package/dist/uns/handover-manager.js.map +1 -1
- package/dist/uns/process-config.js.map +1 -1
- package/dist/uns/process-name-service.js.map +1 -1
- package/dist/uns/status-monitor.js.map +1 -1
- package/dist/uns/uns-asset.js.map +1 -1
- package/dist/uns/uns-attributes.js.map +1 -1
- package/dist/uns/uns-dictionary-registry.js.map +1 -1
- package/dist/uns/uns-dictionary.generated.js.map +1 -1
- package/dist/uns/uns-event-emitter.js.map +1 -1
- package/dist/uns/uns-interfaces.js.map +1 -1
- package/dist/uns/uns-measurements.generated.js.map +1 -1
- package/dist/uns/uns-measurements.js.map +1 -1
- package/dist/uns/uns-object.js.map +1 -1
- package/dist/uns/uns-packet.js.map +1 -1
- package/dist/uns/uns-proxy-process.js.map +1 -1
- package/dist/uns/uns-proxy.js.map +1 -1
- package/dist/uns/uns-tags.js.map +1 -1
- package/dist/uns/uns-topic-matcher.js.map +1 -1
- package/dist/uns/uns-topics.js.map +1 -1
- package/dist/uns-config/config-schema.js.map +1 -1
- package/dist/uns-config/host-placeholders.js.map +1 -1
- package/dist/uns-config/schema-tolls.js.map +1 -1
- package/dist/uns-config/schema-tools.js.map +1 -1
- package/dist/uns-config/secret-placeholders.js.map +1 -1
- package/dist/uns-config/secret-resolver.js.map +1 -1
- package/dist/uns-config/uns-core-schema.js.map +1 -1
- package/dist/uns-grpc/uns-gateway-cli.js.map +1 -1
- package/dist/uns-grpc/uns-gateway-server.js.map +1 -1
- package/dist/uns-grpc/uns-gateway.proto +104 -104
- package/dist/uns-mqtt/mqtt-interfaces.js.map +1 -1
- package/dist/uns-mqtt/mqtt-proxy.js.map +1 -1
- package/dist/uns-mqtt/mqtt-topic-builder.js.map +1 -1
- package/dist/uns-mqtt/mqtt-worker-init.js.map +1 -1
- package/dist/uns-mqtt/mqtt-worker.js.map +1 -1
- package/dist/uns-mqtt/throttled-queue.js.map +1 -1
- package/dist/uns-mqtt/uns-mqtt-proxy.js.map +1 -1
- package/dist/uns-mqtt/ws-proxy.js.map +1 -1
- package/package.json +1 -1
- package/dist/app-config.d.ts.map +0 -1
- package/dist/app-config.js.map +0 -1
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2023 Aljoša Vister
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023 Aljoša Vister
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
# @uns-kit/core
|
|
2
|
-
|
|
3
|
-
Core utilities and runtime building blocks for building Unified Namespace (UNS) realtime transformers. The package bundles the process lifecycle manager, MQTT integrations, gRPC gateway helpers, configuration tooling, and shared type definitions that power the UNS ecosystem.
|
|
4
|
-
|
|
5
|
-
Note: Apps built with uns-kit are intended to be managed by the **UNS Datahub controller**.
|
|
6
|
-
|
|
7
|
-
## uns-kit in context
|
|
8
|
-
|
|
9
|
-
uns-kit is a batteries-included toolkit for Unified Namespace applications. It standardizes MQTT wiring, auth, config schemas, and scaffolding so teams can focus on domain logic instead of boilerplate. This package is the foundation; the full toolkit includes:
|
|
10
|
-
|
|
11
|
-
| Package | Description |
|
|
12
|
-
| --- | --- |
|
|
13
|
-
| [`@uns-kit/core`](https://github.com/uns-datahub/uns-kit/tree/main/packages/uns-core) | Base runtime utilities (UnsProxyProcess, MQTT helpers, configuration tooling, gRPC gateway support). |
|
|
14
|
-
| [`@uns-kit/api`](https://github.com/uns-datahub/uns-kit/tree/main/packages/uns-api) | Express plugin that exposes HTTP endpoints, handles JWT/JWKS auth, and republishes API metadata to UNS. |
|
|
15
|
-
| [`@uns-kit/cron`](https://github.com/uns-datahub/uns-kit/tree/main/packages/uns-cron) | Cron-driven scheduler that emits UNS events on a fixed cadence. |
|
|
16
|
-
| [`@uns-kit/temporal`](https://github.com/uns-datahub/uns-kit/tree/main/packages/uns-temporal) | Temporal.io integration that wires workflows into UnsProxyProcess. |
|
|
17
|
-
| [`@uns-kit/cli`](https://github.com/uns-datahub/uns-kit/tree/main/packages/uns-cli) | Command line tool for scaffolding new UNS applications. |
|
|
18
|
-
|
|
19
|
-
## Installation
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
pnpm add @uns-kit/core
|
|
23
|
-
# or
|
|
24
|
-
npm install @uns-kit/core
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Key Features
|
|
28
|
-
|
|
29
|
-
- **UnsProxyProcess** – plugin-ready runtime for managing UNS proxy instances and MQTT wiring.
|
|
30
|
-
- **MQTT helpers** – resilient publishers, topic builders, throttled queues, and handover support.
|
|
31
|
-
- **Configuration utilities** – Zod-powered config schema generation and secret resolution helpers.
|
|
32
|
-
- **gRPC gateway helpers** – infrastructure to bridge Python workers into the UNS message fabric.
|
|
33
|
-
- **GraphQL tooling** – utilities such as `refresh-uns` that rebuild UNS topic/tag unions from your environment.
|
|
34
|
-
|
|
35
|
-
## Usage
|
|
36
|
-
|
|
37
|
-
Most projects start by creating an `UnsProxyProcess` and registering plugins:
|
|
38
|
-
|
|
39
|
-
```ts
|
|
40
|
-
import UnsProxyProcess from "@uns-kit/core/uns/uns-proxy-process";
|
|
41
|
-
|
|
42
|
-
const process = new UnsProxyProcess("mqtt-broker.svc:1883", { processName: "my-rtt" });
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
See the individual plugin packages (`@uns-kit/cron`, `@uns-kit/api`, `@uns-kit/temporal`) for examples on extending the process with runtime capabilities.
|
|
46
|
-
For a list of topics published by core (and the API plugin), see `../../docs/uns-topics.md`.
|
|
47
|
-
|
|
48
|
-
### Refresh UNS topic/tag/attribute unions
|
|
49
|
-
|
|
50
|
-
The package ships a CLI tool that regenerates strongly-typed UNS topics and tags based on the live GraphQL schema:
|
|
51
|
-
|
|
52
|
-
```bash
|
|
53
|
-
pnpm run refresh-uns
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
When configured via `uns-kit configure-codegen`, this script lives in your project `package.json` and writes into `src/uns/` (topics, tags, and attribute summaries for IntelliSense).
|
|
57
|
-
|
|
58
|
-
### Generate UNS dictionary (object types & attributes with descriptions)
|
|
59
|
-
|
|
60
|
-
Use `packages/uns-core/src/tools/generate-uns-dictionary.ts` to turn a JSON dictionary into a TypeScript helper. No network or GraphQL calls are involved.
|
|
61
|
-
|
|
62
|
-
```bash
|
|
63
|
-
pnpm tsx packages/uns-core/src/tools/generate-uns-dictionary.ts \
|
|
64
|
-
--input uns-dictionary.json \ # base JSON
|
|
65
|
-
--output src/uns/uns-dictionary.generated.ts \
|
|
66
|
-
--lang sl # pick language code from descriptions
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
- Reads the provided JSON and emits TypeScript constants, description maps, and helper getters for IntelliSense and metadata emission.
|
|
70
|
-
|
|
71
|
-
To generate both dictionary and measurements in one step, use the wrapper:
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
pnpm tsx packages/uns-core/src/tools/generate-uns-reference.ts \
|
|
75
|
-
--dictionary uns-dictionary.json \
|
|
76
|
-
--dictionary-output src/uns/uns-dictionary.generated.ts \
|
|
77
|
-
--measurements uns-measurements.json \
|
|
78
|
-
--measurements-output src/uns/uns-measurements.generated.ts \
|
|
79
|
-
--lang sl
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### Infisical secret resolution in development
|
|
83
|
-
|
|
84
|
-
- The resolver looks for `SecretResolverOptions.infisical.fetchSecret`, then `INFISICAL_TOKEN`/`INFISICAL_PERSONAL_TOKEN`, then `/run/secrets/infisical_token` (or `/var/lib/uns/secrets/infisical_token`).
|
|
85
|
-
- If no fetcher/token is available, the resolver now logs a warning and returns the placeholder `default`, or `undefined` when `optional: true`; required secrets still trigger `onMissingSecret` before throwing.
|
|
86
|
-
- If Infisical is configured but the host is unreachable (e.g., DNS/network failure), the resolver warns and falls back to the same `default`/`optional` handling, reusing a cached value when present; required secrets throw with the original error message.
|
|
87
|
-
- To inspect what would be used, call `resolveInfisicalConfig()` to get `{ token, projectId, siteUrl }` via the same lookup rules.
|
|
88
|
-
- Use this to run locally without Infisical: mark dev-only secrets as `optional` or give `default` values, and provide real tokens only in production.
|
|
89
|
-
|
|
90
|
-
## Development
|
|
91
|
-
|
|
92
|
-
```bash
|
|
93
|
-
# Lint and type-check the sources
|
|
94
|
-
pnpm run typecheck
|
|
95
|
-
|
|
96
|
-
# Emit JavaScript and declaration files to dist/
|
|
97
|
-
pnpm run build
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
## License
|
|
101
|
-
|
|
102
|
-
MIT © Aljoša Vister
|
|
1
|
+
# @uns-kit/core
|
|
2
|
+
|
|
3
|
+
Core utilities and runtime building blocks for building Unified Namespace (UNS) realtime transformers. The package bundles the process lifecycle manager, MQTT integrations, gRPC gateway helpers, configuration tooling, and shared type definitions that power the UNS ecosystem.
|
|
4
|
+
|
|
5
|
+
Note: Apps built with uns-kit are intended to be managed by the **UNS Datahub controller**.
|
|
6
|
+
|
|
7
|
+
## uns-kit in context
|
|
8
|
+
|
|
9
|
+
uns-kit is a batteries-included toolkit for Unified Namespace applications. It standardizes MQTT wiring, auth, config schemas, and scaffolding so teams can focus on domain logic instead of boilerplate. This package is the foundation; the full toolkit includes:
|
|
10
|
+
|
|
11
|
+
| Package | Description |
|
|
12
|
+
| --- | --- |
|
|
13
|
+
| [`@uns-kit/core`](https://github.com/uns-datahub/uns-kit/tree/main/packages/uns-core) | Base runtime utilities (UnsProxyProcess, MQTT helpers, configuration tooling, gRPC gateway support). |
|
|
14
|
+
| [`@uns-kit/api`](https://github.com/uns-datahub/uns-kit/tree/main/packages/uns-api) | Express plugin that exposes HTTP endpoints, handles JWT/JWKS auth, and republishes API metadata to UNS. |
|
|
15
|
+
| [`@uns-kit/cron`](https://github.com/uns-datahub/uns-kit/tree/main/packages/uns-cron) | Cron-driven scheduler that emits UNS events on a fixed cadence. |
|
|
16
|
+
| [`@uns-kit/temporal`](https://github.com/uns-datahub/uns-kit/tree/main/packages/uns-temporal) | Temporal.io integration that wires workflows into UnsProxyProcess. |
|
|
17
|
+
| [`@uns-kit/cli`](https://github.com/uns-datahub/uns-kit/tree/main/packages/uns-cli) | Command line tool for scaffolding new UNS applications. |
|
|
18
|
+
|
|
19
|
+
## Installation
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
pnpm add @uns-kit/core
|
|
23
|
+
# or
|
|
24
|
+
npm install @uns-kit/core
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Key Features
|
|
28
|
+
|
|
29
|
+
- **UnsProxyProcess** – plugin-ready runtime for managing UNS proxy instances and MQTT wiring.
|
|
30
|
+
- **MQTT helpers** – resilient publishers, topic builders, throttled queues, and handover support.
|
|
31
|
+
- **Configuration utilities** – Zod-powered config schema generation and secret resolution helpers.
|
|
32
|
+
- **gRPC gateway helpers** – infrastructure to bridge Python workers into the UNS message fabric.
|
|
33
|
+
- **GraphQL tooling** – utilities such as `refresh-uns` that rebuild UNS topic/tag unions from your environment.
|
|
34
|
+
|
|
35
|
+
## Usage
|
|
36
|
+
|
|
37
|
+
Most projects start by creating an `UnsProxyProcess` and registering plugins:
|
|
38
|
+
|
|
39
|
+
```ts
|
|
40
|
+
import UnsProxyProcess from "@uns-kit/core/uns/uns-proxy-process";
|
|
41
|
+
|
|
42
|
+
const process = new UnsProxyProcess("mqtt-broker.svc:1883", { processName: "my-rtt" });
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
See the individual plugin packages (`@uns-kit/cron`, `@uns-kit/api`, `@uns-kit/temporal`) for examples on extending the process with runtime capabilities.
|
|
46
|
+
For a list of topics published by core (and the API plugin), see `../../docs/uns-topics.md`.
|
|
47
|
+
|
|
48
|
+
### Refresh UNS topic/tag/attribute unions
|
|
49
|
+
|
|
50
|
+
The package ships a CLI tool that regenerates strongly-typed UNS topics and tags based on the live GraphQL schema:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
pnpm run refresh-uns
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
When configured via `uns-kit configure-codegen`, this script lives in your project `package.json` and writes into `src/uns/` (topics, tags, and attribute summaries for IntelliSense).
|
|
57
|
+
|
|
58
|
+
### Generate UNS dictionary (object types & attributes with descriptions)
|
|
59
|
+
|
|
60
|
+
Use `packages/uns-core/src/tools/generate-uns-dictionary.ts` to turn a JSON dictionary into a TypeScript helper. No network or GraphQL calls are involved.
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
pnpm tsx packages/uns-core/src/tools/generate-uns-dictionary.ts \
|
|
64
|
+
--input uns-dictionary.json \ # base JSON
|
|
65
|
+
--output src/uns/uns-dictionary.generated.ts \
|
|
66
|
+
--lang sl # pick language code from descriptions
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
- Reads the provided JSON and emits TypeScript constants, description maps, and helper getters for IntelliSense and metadata emission.
|
|
70
|
+
|
|
71
|
+
To generate both dictionary and measurements in one step, use the wrapper:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
pnpm tsx packages/uns-core/src/tools/generate-uns-reference.ts \
|
|
75
|
+
--dictionary uns-dictionary.json \
|
|
76
|
+
--dictionary-output src/uns/uns-dictionary.generated.ts \
|
|
77
|
+
--measurements uns-measurements.json \
|
|
78
|
+
--measurements-output src/uns/uns-measurements.generated.ts \
|
|
79
|
+
--lang sl
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Infisical secret resolution in development
|
|
83
|
+
|
|
84
|
+
- The resolver looks for `SecretResolverOptions.infisical.fetchSecret`, then `INFISICAL_TOKEN`/`INFISICAL_PERSONAL_TOKEN`, then `/run/secrets/infisical_token` (or `/var/lib/uns/secrets/infisical_token`).
|
|
85
|
+
- If no fetcher/token is available, the resolver now logs a warning and returns the placeholder `default`, or `undefined` when `optional: true`; required secrets still trigger `onMissingSecret` before throwing.
|
|
86
|
+
- If Infisical is configured but the host is unreachable (e.g., DNS/network failure), the resolver warns and falls back to the same `default`/`optional` handling, reusing a cached value when present; required secrets throw with the original error message.
|
|
87
|
+
- To inspect what would be used, call `resolveInfisicalConfig()` to get `{ token, projectId, siteUrl }` via the same lookup rules.
|
|
88
|
+
- Use this to run locally without Infisical: mark dev-only secrets as `optional` or give `default` values, and provide real tokens only in production.
|
|
89
|
+
|
|
90
|
+
## Development
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
# Lint and type-check the sources
|
|
94
|
+
pnpm run typecheck
|
|
95
|
+
|
|
96
|
+
# Emit JavaScript and declaration files to dist/
|
|
97
|
+
pnpm run build
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## License
|
|
101
|
+
|
|
102
|
+
MIT © Aljoša Vister
|
package/dist/base-path.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-path.js","sourceRoot":"","sources":["../src/base-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAE/C,MAAM,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEhE,MAAM,uBAAuB,GAAG,oBAAsF,CAAC;AAEvH,MAAM,YAAY,GAAG,CAAC,KAAa,EAAsB,EAAE;IACzD,IAAI,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAE7B,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;YAC9C,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,SAAkB,EAAsB,EAAE;IAClE,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IAEjC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAErC,IAAI,OAAO,uBAAuB,KAAK,UAAU,EAAE,CAAC;QAClD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,uBAAuB,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;YAC3D,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,mDAAmD;QACrD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;YAClD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;QACxC,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;AAC9C,CAAC,CAAC;AAQF,MAAM,UAAU,eAAe,CAAC,UAAkC,EAAE;IAClE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IAErG,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,WAAW,IAAI,SAAS,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC;IAE3E,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC","sourcesContent":["import { fileURLToPath } from \"url\";\
|
|
1
|
+
{"version":3,"file":"base-path.js","sourceRoot":"","sources":["../src/base-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAE/C,MAAM,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEhE,MAAM,uBAAuB,GAAG,oBAAsF,CAAC;AAEvH,MAAM,YAAY,GAAG,CAAC,KAAa,EAAsB,EAAE;IACzD,IAAI,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAE7B,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;YAC9C,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,SAAkB,EAAsB,EAAE;IAClE,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IAEjC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAErC,IAAI,OAAO,uBAAuB,KAAK,UAAU,EAAE,CAAC;QAClD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,uBAAuB,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;YAC3D,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,mDAAmD;QACrD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;YAClD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;QACxC,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;AAC9C,CAAC,CAAC;AAQF,MAAM,UAAU,eAAe,CAAC,UAAkC,EAAE;IAClE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IAErG,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,WAAW,IAAI,SAAS,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC;IAE3E,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC","sourcesContent":["import { fileURLToPath } from \"url\";\nimport { dirname, resolve, join } from \"path\";\nimport { existsSync } from \"fs\";\nimport { packageDirectorySync } from \"pkg-dir\";\n\nconst moduleDirectory = dirname(fileURLToPath(import.meta.url));\n\nconst packageDirectorySyncAny = packageDirectorySync as unknown as ((arg?: unknown) => string | undefined) | undefined;\n\nconst fallbackFind = (start: string): string | undefined => {\n let current = resolve(start);\n\n while (true) {\n if (existsSync(join(current, \"package.json\"))) {\n return current;\n }\n\n const parent = dirname(current);\n if (parent === current) {\n return undefined;\n }\n\n current = parent;\n }\n};\n\nconst resolveCandidate = (candidate?: string): string | undefined => {\n if (!candidate) return undefined;\n\n const directory = resolve(candidate);\n\n if (typeof packageDirectorySyncAny === \"function\") {\n try {\n const result = packageDirectorySyncAny({ cwd: directory });\n if (typeof result === \"string\") {\n return result;\n }\n } catch {\n // ignore – fall back to alternate invocation style\n }\n\n try {\n const result = packageDirectorySyncAny(directory);\n if (typeof result === \"string\") {\n return result;\n }\n } catch {\n // ignore – fall back to manual search\n }\n }\n\n return fallbackFind(directory) ?? directory;\n};\n\nexport interface ResolveBasePathOptions {\n start?: string;\n envBasePath?: string | null;\n cwd?: string;\n}\n\nexport function resolveBasePath(options: ResolveBasePathOptions = {}): string {\n const { start, envBasePath = process.env.UNS_BASE_PATH ?? undefined, cwd = process.cwd() } = options;\n\n const candidates = [start, envBasePath ?? undefined, cwd, moduleDirectory];\n\n for (const candidate of candidates) {\n const resolved = resolveCandidate(candidate);\n if (resolved) {\n return resolved;\n }\n }\n\n return resolve(moduleDirectory, \"..\");\n}\n\nexport const basePath = resolveBasePath();\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-config.js","sourceRoot":"","sources":["../../src/config/app-config.ts"],"names":[],"mappings":"","sourcesContent":["/* Auto-generated. Do not edit by hand. */\
|
|
1
|
+
{"version":3,"file":"app-config.js","sourceRoot":"","sources":["../../src/config/app-config.ts"],"names":[],"mappings":"","sourcesContent":["/* Auto-generated. Do not edit by hand. */\nexport interface ProjectAppConfig {\n uns: {\n graphql: string;\n rest: string;\n /** Email used when authenticating to graphql endpoint of the UNS instance. */\n email: string;\n /** Password or secret value paired with the UNS email. */\n password: string;\n instanceMode?: \"wait\" | \"force\" | \"handover\";\n /** Process name used in MQTT topics and logs. */\n processName: string;\n handover?: boolean;\n jwksWellKnownUrl?: string | undefined;\n kidWellKnownUrl?: string | undefined;\n env?: \"dev\" | \"staging\" | \"test\" | \"prod\";\n };\n input?: {\n host?: string | undefined;\n hosts?: string[] | undefined;\n servers?: {\n host: string;\n port?: number | undefined;\n protocol?: (\"mqtt\" | \"mqtts\" | \"ws\" | \"wss\" | \"tcp\" | \"ssl\") | undefined;\n }[] | undefined;\n port?: number | undefined;\n protocol?: (\"mqtt\" | \"mqtts\" | \"ws\" | \"wss\" | \"tcp\" | \"ssl\") | undefined;\n username?: string | undefined;\n password?: string | undefined;\n clientId?: string | undefined;\n clean?: boolean | undefined;\n keepalive?: number | undefined;\n connectTimeout?: number | undefined;\n reconnectPeriod?: number | undefined;\n reconnectOnConnackError?: boolean | undefined;\n resubscribe?: boolean | undefined;\n queueQoSZero?: boolean | undefined;\n rejectUnauthorized?: boolean | undefined;\n properties?: {\n sessionExpiryInterval?: number | undefined;\n receiveMaximum?: number | undefined;\n maximumPacketSize?: number | undefined;\n topicAliasMaximum?: number | undefined;\n requestResponseInformation?: boolean | undefined;\n requestProblemInformation?: boolean | undefined;\n userProperties?: {\n [x: string]: string;\n } | undefined;\n } | undefined;\n ca?: string | undefined;\n cert?: string | undefined;\n key?: string | undefined;\n servername?: string | undefined;\n } | undefined;\n output?: {\n host?: string | undefined;\n hosts?: string[] | undefined;\n servers?: {\n host: string;\n port?: number | undefined;\n protocol?: (\"mqtt\" | \"mqtts\" | \"ws\" | \"wss\" | \"tcp\" | \"ssl\") | undefined;\n }[] | undefined;\n port?: number | undefined;\n protocol?: (\"mqtt\" | \"mqtts\" | \"ws\" | \"wss\" | \"tcp\" | \"ssl\") | undefined;\n username?: string | undefined;\n password?: string | undefined;\n clientId?: string | undefined;\n clean?: boolean | undefined;\n keepalive?: number | undefined;\n connectTimeout?: number | undefined;\n reconnectPeriod?: number | undefined;\n reconnectOnConnackError?: boolean | undefined;\n resubscribe?: boolean | undefined;\n queueQoSZero?: boolean | undefined;\n rejectUnauthorized?: boolean | undefined;\n properties?: {\n sessionExpiryInterval?: number | undefined;\n receiveMaximum?: number | undefined;\n maximumPacketSize?: number | undefined;\n topicAliasMaximum?: number | undefined;\n requestResponseInformation?: boolean | undefined;\n requestProblemInformation?: boolean | undefined;\n userProperties?: {\n [x: string]: string;\n } | undefined;\n } | undefined;\n ca?: string | undefined;\n cert?: string | undefined;\n key?: string | undefined;\n servername?: string | undefined;\n } | undefined;\n infra: {\n host?: string | undefined;\n hosts?: string[] | undefined;\n servers?: {\n host: string;\n port?: number | undefined;\n protocol?: (\"mqtt\" | \"mqtts\" | \"ws\" | \"wss\" | \"tcp\" | \"ssl\") | undefined;\n }[] | undefined;\n port?: number | undefined;\n protocol?: (\"mqtt\" | \"mqtts\" | \"ws\" | \"wss\" | \"tcp\" | \"ssl\") | undefined;\n username?: string | undefined;\n password?: string | undefined;\n clientId?: string | undefined;\n clean?: boolean | undefined;\n keepalive?: number | undefined;\n connectTimeout?: number | undefined;\n reconnectPeriod?: number | undefined;\n reconnectOnConnackError?: boolean | undefined;\n resubscribe?: boolean | undefined;\n queueQoSZero?: boolean | undefined;\n rejectUnauthorized?: boolean | undefined;\n properties?: {\n sessionExpiryInterval?: number | undefined;\n receiveMaximum?: number | undefined;\n maximumPacketSize?: number | undefined;\n topicAliasMaximum?: number | undefined;\n requestResponseInformation?: boolean | undefined;\n requestProblemInformation?: boolean | undefined;\n userProperties?: {\n [x: string]: string;\n } | undefined;\n } | undefined;\n ca?: string | undefined;\n cert?: string | undefined;\n key?: string | undefined;\n servername?: string | undefined;\n };\n devops?: {\n provider?: \"azure-devops\";\n organization: string;\n project?: string | undefined;\n } | undefined;\n}\n\nexport interface AppConfig extends ProjectAppConfig {}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.config.extension.js","sourceRoot":"","sources":["../../src/config/project.config.extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,kCAAkC;AAClC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC","sourcesContent":["import { z } from \"zod\";\
|
|
1
|
+
{"version":3,"file":"project.config.extension.js","sourceRoot":"","sources":["../../src/config/project.config.extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,kCAAkC;AAClC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC","sourcesContent":["import { z } from \"zod\";\n\n// Exported constant in PascalCase\nexport const projectExtrasSchema = z.object({});\n\nexport type ProjectExtras = z.infer<typeof projectExtrasSchema>;\n"]}
|
package/dist/config-file.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-file.js","sourceRoot":"","sources":["../src/config-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,yBAAyB,EACzB,oBAAoB,GAGrB,MAAM,iCAAiC,CAAC;AAEzC,MAAM,UAAU,GAAG,CAAC,OAA+B,EAAW,EAAE,CAC9D,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;AAEzE,MAAM,OAAO,UAAU;IACb,MAAM,CAAC,QAAQ,CAAa;IAC5B,MAAM,CAAC,OAAO,CAAU;IACxB,MAAM,CAAC,aAAa,CAAqB;IAEjD,MAAM,CAAC,aAAa,CAAC,UAAmB;QACtC,MAAM,CAAC,GAAG,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACvC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAc,CAAC,CAAC,wBAAwB;YACtE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;YACjB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,GAAG;QACR,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,UAAU,CACrB,UAAmB,EACnB,OAA+B;QAE/B,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAE3C,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,IAAI,CAAC,aAAa,GAAG,MAAM,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAChE,CAAC;QAED,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAC7B,OAA+B;QAE/B,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,UAAU;QACf,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,yBAAyB,EAAE,CAAC;IAC9B,CAAC;CACF","sourcesContent":["import fs from \"node:fs\";\
|
|
1
|
+
{"version":3,"file":"config-file.js","sourceRoot":"","sources":["../src/config-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,yBAAyB,EACzB,oBAAoB,GAGrB,MAAM,iCAAiC,CAAC;AAEzC,MAAM,UAAU,GAAG,CAAC,OAA+B,EAAW,EAAE,CAC9D,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;AAEzE,MAAM,OAAO,UAAU;IACb,MAAM,CAAC,QAAQ,CAAa;IAC5B,MAAM,CAAC,OAAO,CAAU;IACxB,MAAM,CAAC,aAAa,CAAqB;IAEjD,MAAM,CAAC,aAAa,CAAC,UAAmB;QACtC,MAAM,CAAC,GAAG,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACvC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAc,CAAC,CAAC,wBAAwB;YACtE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;YACjB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,GAAG;QACR,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,UAAU,CACrB,UAAmB,EACnB,OAA+B;QAE/B,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAE3C,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,IAAI,CAAC,aAAa,GAAG,MAAM,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAChE,CAAC;QAED,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAC7B,OAA+B;QAE/B,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,UAAU;QACf,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,yBAAyB,EAAE,CAAC;IAC9B,CAAC;CACF","sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { AppConfig } from \"./config/app-config.js\";\nimport {\n clearSecretResolverCaches,\n resolveConfigSecrets,\n type ResolvedAppConfig,\n type SecretResolverOptions,\n} from \"./uns-config/secret-resolver.js\";\n\nconst hasOptions = (options?: SecretResolverOptions): boolean =>\n !!options && Object.values(options).some(value => value !== undefined);\n\nexport class ConfigFile {\n private static rawCache?: AppConfig;\n private static rawPath?: string;\n private static resolvedCache?: ResolvedAppConfig;\n\n static loadRawConfig(configPath?: string): AppConfig {\n const p = configPath ?? path.resolve(process.cwd(), \"config.json\");\n if (!this.rawCache || this.rawPath !== p) {\n const raw = fs.readFileSync(p, \"utf8\");\n this.rawCache = JSON.parse(raw) as AppConfig; // no runtime validation\n this.rawPath = p;\n this.resolvedCache = undefined;\n }\n return this.rawCache;\n }\n\n static get(): AppConfig {\n if (!this.rawCache) {\n throw new Error(\"Config not loaded. Call ConfigFile.loadConfig() first.\");\n }\n return this.rawCache;\n }\n\n static async loadConfig(\n configPath?: string,\n options?: SecretResolverOptions\n ): Promise<ResolvedAppConfig> {\n const raw = this.loadRawConfig(configPath);\n\n if (!this.resolvedCache) {\n this.resolvedCache = await resolveConfigSecrets(raw, options);\n }\n\n return this.resolvedCache;\n }\n\n static async loadResolvedConfig(\n options?: SecretResolverOptions\n ): Promise<ResolvedAppConfig> {\n return this.loadConfig(undefined, options);\n }\n\n static clearCache(): void {\n this.rawCache = undefined;\n this.resolvedCache = undefined;\n this.rawPath = undefined;\n clearSecretResolverCaches();\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/graphql/schema.ts"],"names":[],"mappings":"AA0KA,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,+BAAW,CAAA;IACX,iCAAa,CAAA;IACb,mCAAe,CAAA;AACjB,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B;AAqBD,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,sCAAuB,CAAA;IACvB,4CAA6B,CAAA;IAC7B,8BAAe,CAAA;AACjB,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB","sourcesContent":["import { GraphQLResolveInfo, GraphQLScalarType, GraphQLScalarTypeConfig } from 'graphql';\r\nexport type Maybe<T> = T | null;\r\nexport type InputMaybe<T> = Maybe<T>;\r\nexport type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };\r\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };\r\nexport type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };\r\nexport type MakeEmpty<T extends { [key: string]: unknown }, K extends keyof T> = { [_ in K]?: never };\r\nexport type Incremental<T> = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never };\r\n/** All built-in and custom scalars, mapped to their actual values */\r\nexport type Scalars = {\r\n ID: { input: string; output: string; }\r\n String: { input: string; output: string; }\r\n Boolean: { input: boolean; output: boolean; }\r\n Int: { input: number; output: number; }\r\n Float: { input: number; output: number; }\r\n Date: { input: any; output: any; }\r\n Timestamp: { input: any; output: any; }\r\n};\r\n\r\nexport type InitUnsTopic = {\r\n topic?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\nexport type InsertUnsNode = {\r\n apiDescription?: InputMaybe<Scalars['String']['input']>;\r\n apiEndpoint?: InputMaybe<Scalars['String']['input']>;\r\n apiMethod?: InputMaybe<Scalars['String']['input']>;\r\n attributeNeedsPersistance?: InputMaybe<Scalars['Boolean']['input']>;\r\n attributeTags?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\r\n attributeTimestamp?: InputMaybe<Scalars['Timestamp']['input']>;\r\n attributeType?: InputMaybe<UnsAttributeType>;\r\n description?: InputMaybe<Scalars['String']['input']>;\r\n fullTopic?: InputMaybe<Scalars['String']['input']>;\r\n parent: Scalars['Int']['input'];\r\n processName?: InputMaybe<Scalars['String']['input']>;\r\n processVersion?: InputMaybe<Scalars['String']['input']>;\r\n type?: InputMaybe<UnsNodeType>;\r\n unsNode?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\nexport type Mutation = {\r\n __typename?: 'Mutation';\r\n AddUnsNode?: Maybe<Scalars['Int']['output']>;\r\n DeleteRttNode?: Maybe<Scalars['Boolean']['output']>;\r\n DeleteUnsNode?: Maybe<Scalars['Boolean']['output']>;\r\n DeployRttNode?: Maybe<Scalars['Boolean']['output']>;\r\n ModifyUnsNode?: Maybe<Scalars['Boolean']['output']>;\r\n /** Purge all nodes that are older the maxAge in hours */\r\n PurgeOldNodes?: Maybe<Scalars['Boolean']['output']>;\r\n SetRttNodeConfig?: Maybe<Scalars['Boolean']['output']>;\r\n StartRttNode?: Maybe<Scalars['Boolean']['output']>;\r\n StopRttNode?: Maybe<Scalars['Boolean']['output']>;\r\n};\r\n\r\n\r\nexport type MutationAddUnsNodeArgs = {\r\n node?: InputMaybe<InsertUnsNode>;\r\n};\r\n\r\n\r\nexport type MutationDeleteRttNodeArgs = {\r\n rttNode?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\n\r\nexport type MutationDeleteUnsNodeArgs = {\r\n id?: InputMaybe<Scalars['Int']['input']>;\r\n};\r\n\r\n\r\nexport type MutationDeployRttNodeArgs = {\r\n rttNode?: InputMaybe<Scalars['String']['input']>;\r\n tag?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\n\r\nexport type MutationModifyUnsNodeArgs = {\r\n id?: InputMaybe<Scalars['Int']['input']>;\r\n node?: InputMaybe<UpdateUnsNode>;\r\n};\r\n\r\n\r\nexport type MutationPurgeOldNodesArgs = {\r\n maxAge?: InputMaybe<Scalars['Int']['input']>;\r\n};\r\n\r\n\r\nexport type MutationSetRttNodeConfigArgs = {\r\n configuration?: InputMaybe<Scalars['String']['input']>;\r\n rttNode?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\n\r\nexport type MutationStartRttNodeArgs = {\r\n rttNode?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\n\r\nexport type MutationStopRttNodeArgs = {\r\n rttNode?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\n/** name: uns-datahub */\r\nexport type Query = {\r\n __typename?: 'Query';\r\n GetRepositories?: Maybe<Array<Maybe<Repository>>>;\r\n GetRttNodeConfig?: Maybe<Scalars['String']['output']>;\r\n GetRttNodes?: Maybe<Array<Maybe<RttNode>>>;\r\n GetTags?: Maybe<Array<Maybe<Scalars['String']['output']>>>;\r\n GetTreeStructure?: Maybe<Array<Maybe<TreeStructure>>>;\r\n GetUnsNodes?: Maybe<Array<Maybe<UnsNode>>>;\r\n};\r\n\r\n\r\n/** name: uns-datahub */\r\nexport type QueryGetRttNodeConfigArgs = {\r\n rttNode?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\n\r\n/** name: uns-datahub */\r\nexport type QueryGetTreeStructureArgs = {\r\n attributeTags?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\r\n};\r\n\r\nexport type Repository = {\r\n __typename?: 'Repository';\r\n name?: Maybe<Scalars['String']['output']>;\r\n tags?: Maybe<Array<Maybe<Scalars['String']['output']>>>;\r\n};\r\n\r\nexport type RttNode = {\r\n __typename?: 'RttNode';\r\n author?: Maybe<Scalars['String']['output']>;\r\n deployedVersions?: Maybe<Array<Maybe<Scalars['String']['output']>>>;\r\n description?: Maybe<Scalars['String']['output']>;\r\n lastErrLog?: Maybe<Scalars['String']['output']>;\r\n lastLog?: Maybe<Scalars['String']['output']>;\r\n latestDeployedVersion?: Maybe<Scalars['String']['output']>;\r\n memory?: Maybe<Scalars['Int']['output']>;\r\n pid?: Maybe<Scalars['Int']['output']>;\r\n restarts?: Maybe<Scalars['Int']['output']>;\r\n rttNode?: Maybe<Scalars['String']['output']>;\r\n runningVersion?: Maybe<Scalars['String']['output']>;\r\n status?: Maybe<Scalars['String']['output']>;\r\n topics?: Maybe<Array<Maybe<Scalars['String']['output']>>>;\r\n uptime?: Maybe<Scalars['Int']['output']>;\r\n version?: Maybe<Scalars['String']['output']>;\r\n};\r\n\r\nexport type TreeStructure = {\r\n __typename?: 'TreeStructure';\r\n apiDescription?: Maybe<Scalars['String']['output']>;\r\n apiEndpoint?: Maybe<Scalars['String']['output']>;\r\n apiMethod?: Maybe<Scalars['String']['output']>;\r\n attributeNeedsPersistance?: Maybe<Scalars['Boolean']['output']>;\r\n attributeTags?: Maybe<Array<Maybe<Scalars['String']['output']>>>;\r\n attributeTimestamp?: Maybe<Scalars['Timestamp']['output']>;\r\n attributeType?: Maybe<UnsAttributeType>;\r\n children?: Maybe<Array<Maybe<TreeStructure>>>;\r\n description?: Maybe<Scalars['String']['output']>;\r\n fullTopic?: Maybe<Scalars['String']['output']>;\r\n id?: Maybe<Scalars['Int']['output']>;\r\n parent?: Maybe<Scalars['Int']['output']>;\r\n processName?: Maybe<Scalars['String']['output']>;\r\n processVersion?: Maybe<Scalars['String']['output']>;\r\n type?: Maybe<UnsNodeType>;\r\n unsNode?: Maybe<Scalars['String']['output']>;\r\n};\r\n\r\nexport enum UnsAttributeType {\r\n Api = 'Api',\r\n Data = 'Data',\r\n Table = 'Table'\r\n}\r\n\r\nexport type UnsNode = {\r\n __typename?: 'UnsNode';\r\n apiDescription?: Maybe<Scalars['String']['output']>;\r\n apiEndpoint?: Maybe<Scalars['String']['output']>;\r\n apiMethod?: Maybe<Scalars['String']['output']>;\r\n attributeNeedsPersistance?: Maybe<Scalars['Boolean']['output']>;\r\n attributeTags?: Maybe<Array<Maybe<Scalars['String']['output']>>>;\r\n attributeTimestamp?: Maybe<Scalars['Timestamp']['output']>;\r\n attributeType?: Maybe<UnsAttributeType>;\r\n description?: Maybe<Scalars['String']['output']>;\r\n fullTopic?: Maybe<Scalars['String']['output']>;\r\n id?: Maybe<Scalars['Int']['output']>;\r\n parent?: Maybe<Scalars['Int']['output']>;\r\n processName?: Maybe<Scalars['String']['output']>;\r\n processVersion?: Maybe<Scalars['String']['output']>;\r\n type?: Maybe<UnsNodeType>;\r\n unsNode?: Maybe<Scalars['String']['output']>;\r\n};\r\n\r\nexport enum UnsNodeType {\r\n Attribute = 'Attribute',\r\n DynamicTopic = 'DynamicTopic',\r\n Topic = 'Topic'\r\n}\r\n\r\nexport type UpdateUnsNode = {\r\n apiDescription?: InputMaybe<Scalars['String']['input']>;\r\n apiEndpoint?: InputMaybe<Scalars['String']['input']>;\r\n apiMethod?: InputMaybe<Scalars['String']['input']>;\r\n attributeNeedsPersistance?: InputMaybe<Scalars['Boolean']['input']>;\r\n attributeTags?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\r\n attributeTimestamp?: InputMaybe<Scalars['Timestamp']['input']>;\r\n attributeType?: InputMaybe<UnsAttributeType>;\r\n description?: InputMaybe<Scalars['String']['input']>;\r\n fullTopic?: InputMaybe<Scalars['String']['input']>;\r\n parent?: InputMaybe<Scalars['Int']['input']>;\r\n processName?: InputMaybe<Scalars['String']['input']>;\r\n processVersion?: InputMaybe<Scalars['String']['input']>;\r\n type?: InputMaybe<UnsNodeType>;\r\n unsNode?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\n\r\n\r\nexport type ResolverTypeWrapper<T> = Promise<T> | T;\r\n\r\n\r\nexport type ResolverWithResolve<TResult, TParent, TContext, TArgs> = {\r\n resolve: ResolverFn<TResult, TParent, TContext, TArgs>;\r\n};\r\nexport type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> = ResolverFn<TResult, TParent, TContext, TArgs> | ResolverWithResolve<TResult, TParent, TContext, TArgs>;\r\n\r\nexport type ResolverFn<TResult, TParent, TContext, TArgs> = (\r\n parent: TParent,\r\n args: TArgs,\r\n context: TContext,\r\n info: GraphQLResolveInfo\r\n) => Promise<TResult> | TResult;\r\n\r\nexport type SubscriptionSubscribeFn<TResult, TParent, TContext, TArgs> = (\r\n parent: TParent,\r\n args: TArgs,\r\n context: TContext,\r\n info: GraphQLResolveInfo\r\n) => AsyncIterable<TResult> | Promise<AsyncIterable<TResult>>;\r\n\r\nexport type SubscriptionResolveFn<TResult, TParent, TContext, TArgs> = (\r\n parent: TParent,\r\n args: TArgs,\r\n context: TContext,\r\n info: GraphQLResolveInfo\r\n) => TResult | Promise<TResult>;\r\n\r\nexport interface SubscriptionSubscriberObject<TResult, TKey extends string, TParent, TContext, TArgs> {\r\n subscribe: SubscriptionSubscribeFn<{ [key in TKey]: TResult }, TParent, TContext, TArgs>;\r\n resolve?: SubscriptionResolveFn<TResult, { [key in TKey]: TResult }, TContext, TArgs>;\r\n}\r\n\r\nexport interface SubscriptionResolverObject<TResult, TParent, TContext, TArgs> {\r\n subscribe: SubscriptionSubscribeFn<any, TParent, TContext, TArgs>;\r\n resolve: SubscriptionResolveFn<TResult, any, TContext, TArgs>;\r\n}\r\n\r\nexport type SubscriptionObject<TResult, TKey extends string, TParent, TContext, TArgs> =\r\n | SubscriptionSubscriberObject<TResult, TKey, TParent, TContext, TArgs>\r\n | SubscriptionResolverObject<TResult, TParent, TContext, TArgs>;\r\n\r\nexport type SubscriptionResolver<TResult, TKey extends string, TParent = {}, TContext = {}, TArgs = {}> =\r\n | ((...args: any[]) => SubscriptionObject<TResult, TKey, TParent, TContext, TArgs>)\r\n | SubscriptionObject<TResult, TKey, TParent, TContext, TArgs>;\r\n\r\nexport type TypeResolveFn<TTypes, TParent = {}, TContext = {}> = (\r\n parent: TParent,\r\n context: TContext,\r\n info: GraphQLResolveInfo\r\n) => Maybe<TTypes> | Promise<Maybe<TTypes>>;\r\n\r\nexport type IsTypeOfResolverFn<T = {}, TContext = {}> = (obj: T, context: TContext, info: GraphQLResolveInfo) => boolean | Promise<boolean>;\r\n\r\nexport type NextResolverFn<T> = () => Promise<T>;\r\n\r\nexport type DirectiveResolverFn<TResult = {}, TParent = {}, TContext = {}, TArgs = {}> = (\r\n next: NextResolverFn<TResult>,\r\n parent: TParent,\r\n args: TArgs,\r\n context: TContext,\r\n info: GraphQLResolveInfo\r\n) => TResult | Promise<TResult>;\r\n\r\n\r\n\r\n/** Mapping between all available schema types and the resolvers types */\r\nexport type ResolversTypes = {\r\n Boolean: ResolverTypeWrapper<Scalars['Boolean']['output']>;\r\n Date: ResolverTypeWrapper<Scalars['Date']['output']>;\r\n InitUnsTopic: InitUnsTopic;\r\n InsertUnsNode: InsertUnsNode;\r\n Int: ResolverTypeWrapper<Scalars['Int']['output']>;\r\n Mutation: ResolverTypeWrapper<{}>;\r\n Query: ResolverTypeWrapper<{}>;\r\n Repository: ResolverTypeWrapper<Repository>;\r\n RttNode: ResolverTypeWrapper<RttNode>;\r\n String: ResolverTypeWrapper<Scalars['String']['output']>;\r\n Timestamp: ResolverTypeWrapper<Scalars['Timestamp']['output']>;\r\n TreeStructure: ResolverTypeWrapper<TreeStructure>;\r\n UnsAttributeType: UnsAttributeType;\r\n UnsNode: ResolverTypeWrapper<UnsNode>;\r\n UnsNodeType: UnsNodeType;\r\n UpdateUnsNode: UpdateUnsNode;\r\n};\r\n\r\n/** Mapping between all available schema types and the resolvers parents */\r\nexport type ResolversParentTypes = {\r\n Boolean: Scalars['Boolean']['output'];\r\n Date: Scalars['Date']['output'];\r\n InitUnsTopic: InitUnsTopic;\r\n InsertUnsNode: InsertUnsNode;\r\n Int: Scalars['Int']['output'];\r\n Mutation: {};\r\n Query: {};\r\n Repository: Repository;\r\n RttNode: RttNode;\r\n String: Scalars['String']['output'];\r\n Timestamp: Scalars['Timestamp']['output'];\r\n TreeStructure: TreeStructure;\r\n UnsNode: UnsNode;\r\n UpdateUnsNode: UpdateUnsNode;\r\n};\r\n\r\nexport interface DateScalarConfig extends GraphQLScalarTypeConfig<ResolversTypes['Date'], any> {\r\n name: 'Date';\r\n}\r\n\r\nexport type MutationResolvers<ContextType = any, ParentType extends ResolversParentTypes['Mutation'] = ResolversParentTypes['Mutation']> = {\r\n AddUnsNode?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType, Partial<MutationAddUnsNodeArgs>>;\r\n DeleteRttNode?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType, Partial<MutationDeleteRttNodeArgs>>;\r\n DeleteUnsNode?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType, Partial<MutationDeleteUnsNodeArgs>>;\r\n DeployRttNode?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType, Partial<MutationDeployRttNodeArgs>>;\r\n ModifyUnsNode?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType, Partial<MutationModifyUnsNodeArgs>>;\r\n PurgeOldNodes?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType, Partial<MutationPurgeOldNodesArgs>>;\r\n SetRttNodeConfig?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType, Partial<MutationSetRttNodeConfigArgs>>;\r\n StartRttNode?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType, Partial<MutationStartRttNodeArgs>>;\r\n StopRttNode?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType, Partial<MutationStopRttNodeArgs>>;\r\n};\r\n\r\nexport type QueryResolvers<ContextType = any, ParentType extends ResolversParentTypes['Query'] = ResolversParentTypes['Query']> = {\r\n GetRepositories?: Resolver<Maybe<Array<Maybe<ResolversTypes['Repository']>>>, ParentType, ContextType>;\r\n GetRttNodeConfig?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType, Partial<QueryGetRttNodeConfigArgs>>;\r\n GetRttNodes?: Resolver<Maybe<Array<Maybe<ResolversTypes['RttNode']>>>, ParentType, ContextType>;\r\n GetTags?: Resolver<Maybe<Array<Maybe<ResolversTypes['String']>>>, ParentType, ContextType>;\r\n GetTreeStructure?: Resolver<Maybe<Array<Maybe<ResolversTypes['TreeStructure']>>>, ParentType, ContextType, Partial<QueryGetTreeStructureArgs>>;\r\n GetUnsNodes?: Resolver<Maybe<Array<Maybe<ResolversTypes['UnsNode']>>>, ParentType, ContextType>;\r\n};\r\n\r\nexport type RepositoryResolvers<ContextType = any, ParentType extends ResolversParentTypes['Repository'] = ResolversParentTypes['Repository']> = {\r\n name?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n tags?: Resolver<Maybe<Array<Maybe<ResolversTypes['String']>>>, ParentType, ContextType>;\r\n __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;\r\n};\r\n\r\nexport type RttNodeResolvers<ContextType = any, ParentType extends ResolversParentTypes['RttNode'] = ResolversParentTypes['RttNode']> = {\r\n author?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n deployedVersions?: Resolver<Maybe<Array<Maybe<ResolversTypes['String']>>>, ParentType, ContextType>;\r\n description?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n lastErrLog?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n lastLog?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n latestDeployedVersion?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n memory?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;\r\n pid?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;\r\n restarts?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;\r\n rttNode?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n runningVersion?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n status?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n topics?: Resolver<Maybe<Array<Maybe<ResolversTypes['String']>>>, ParentType, ContextType>;\r\n uptime?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;\r\n version?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;\r\n};\r\n\r\nexport interface TimestampScalarConfig extends GraphQLScalarTypeConfig<ResolversTypes['Timestamp'], any> {\r\n name: 'Timestamp';\r\n}\r\n\r\nexport type TreeStructureResolvers<ContextType = any, ParentType extends ResolversParentTypes['TreeStructure'] = ResolversParentTypes['TreeStructure']> = {\r\n apiDescription?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n apiEndpoint?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n apiMethod?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n attributeNeedsPersistance?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;\r\n attributeTags?: Resolver<Maybe<Array<Maybe<ResolversTypes['String']>>>, ParentType, ContextType>;\r\n attributeTimestamp?: Resolver<Maybe<ResolversTypes['Timestamp']>, ParentType, ContextType>;\r\n attributeType?: Resolver<Maybe<ResolversTypes['UnsAttributeType']>, ParentType, ContextType>;\r\n children?: Resolver<Maybe<Array<Maybe<ResolversTypes['TreeStructure']>>>, ParentType, ContextType>;\r\n description?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n fullTopic?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n id?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;\r\n parent?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;\r\n processName?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n processVersion?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n type?: Resolver<Maybe<ResolversTypes['UnsNodeType']>, ParentType, ContextType>;\r\n unsNode?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;\r\n};\r\n\r\nexport type UnsNodeResolvers<ContextType = any, ParentType extends ResolversParentTypes['UnsNode'] = ResolversParentTypes['UnsNode']> = {\r\n apiDescription?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n apiEndpoint?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n apiMethod?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n attributeNeedsPersistance?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;\r\n attributeTags?: Resolver<Maybe<Array<Maybe<ResolversTypes['String']>>>, ParentType, ContextType>;\r\n attributeTimestamp?: Resolver<Maybe<ResolversTypes['Timestamp']>, ParentType, ContextType>;\r\n attributeType?: Resolver<Maybe<ResolversTypes['UnsAttributeType']>, ParentType, ContextType>;\r\n description?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n fullTopic?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n id?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;\r\n parent?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;\r\n processName?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n processVersion?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n type?: Resolver<Maybe<ResolversTypes['UnsNodeType']>, ParentType, ContextType>;\r\n unsNode?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\r\n __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;\r\n};\r\n\r\nexport type Resolvers<ContextType = any> = {\r\n Date?: GraphQLScalarType;\r\n Mutation?: MutationResolvers<ContextType>;\r\n Query?: QueryResolvers<ContextType>;\r\n Repository?: RepositoryResolvers<ContextType>;\r\n RttNode?: RttNodeResolvers<ContextType>;\r\n Timestamp?: GraphQLScalarType;\r\n TreeStructure?: TreeStructureResolvers<ContextType>;\r\n UnsNode?: UnsNodeResolvers<ContextType>;\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/graphql/schema.ts"],"names":[],"mappings":"AA0KA,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,+BAAW,CAAA;IACX,iCAAa,CAAA;IACb,mCAAe,CAAA;AACjB,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B;AAqBD,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,sCAAuB,CAAA;IACvB,4CAA6B,CAAA;IAC7B,8BAAe,CAAA;AACjB,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB","sourcesContent":["import { GraphQLResolveInfo, GraphQLScalarType, GraphQLScalarTypeConfig } from 'graphql';\nexport type Maybe<T> = T | null;\nexport type InputMaybe<T> = Maybe<T>;\nexport type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };\nexport type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };\nexport type MakeEmpty<T extends { [key: string]: unknown }, K extends keyof T> = { [_ in K]?: never };\nexport type Incremental<T> = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never };\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: { input: string; output: string; }\n String: { input: string; output: string; }\n Boolean: { input: boolean; output: boolean; }\n Int: { input: number; output: number; }\n Float: { input: number; output: number; }\n Date: { input: any; output: any; }\n Timestamp: { input: any; output: any; }\n};\n\nexport type InitUnsTopic = {\n topic?: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type InsertUnsNode = {\n apiDescription?: InputMaybe<Scalars['String']['input']>;\n apiEndpoint?: InputMaybe<Scalars['String']['input']>;\n apiMethod?: InputMaybe<Scalars['String']['input']>;\n attributeNeedsPersistance?: InputMaybe<Scalars['Boolean']['input']>;\n attributeTags?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n attributeTimestamp?: InputMaybe<Scalars['Timestamp']['input']>;\n attributeType?: InputMaybe<UnsAttributeType>;\n description?: InputMaybe<Scalars['String']['input']>;\n fullTopic?: InputMaybe<Scalars['String']['input']>;\n parent: Scalars['Int']['input'];\n processName?: InputMaybe<Scalars['String']['input']>;\n processVersion?: InputMaybe<Scalars['String']['input']>;\n type?: InputMaybe<UnsNodeType>;\n unsNode?: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type Mutation = {\n __typename?: 'Mutation';\n AddUnsNode?: Maybe<Scalars['Int']['output']>;\n DeleteRttNode?: Maybe<Scalars['Boolean']['output']>;\n DeleteUnsNode?: Maybe<Scalars['Boolean']['output']>;\n DeployRttNode?: Maybe<Scalars['Boolean']['output']>;\n ModifyUnsNode?: Maybe<Scalars['Boolean']['output']>;\n /** Purge all nodes that are older the maxAge in hours */\n PurgeOldNodes?: Maybe<Scalars['Boolean']['output']>;\n SetRttNodeConfig?: Maybe<Scalars['Boolean']['output']>;\n StartRttNode?: Maybe<Scalars['Boolean']['output']>;\n StopRttNode?: Maybe<Scalars['Boolean']['output']>;\n};\n\n\nexport type MutationAddUnsNodeArgs = {\n node?: InputMaybe<InsertUnsNode>;\n};\n\n\nexport type MutationDeleteRttNodeArgs = {\n rttNode?: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type MutationDeleteUnsNodeArgs = {\n id?: InputMaybe<Scalars['Int']['input']>;\n};\n\n\nexport type MutationDeployRttNodeArgs = {\n rttNode?: InputMaybe<Scalars['String']['input']>;\n tag?: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type MutationModifyUnsNodeArgs = {\n id?: InputMaybe<Scalars['Int']['input']>;\n node?: InputMaybe<UpdateUnsNode>;\n};\n\n\nexport type MutationPurgeOldNodesArgs = {\n maxAge?: InputMaybe<Scalars['Int']['input']>;\n};\n\n\nexport type MutationSetRttNodeConfigArgs = {\n configuration?: InputMaybe<Scalars['String']['input']>;\n rttNode?: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type MutationStartRttNodeArgs = {\n rttNode?: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type MutationStopRttNodeArgs = {\n rttNode?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** name: uns-datahub */\nexport type Query = {\n __typename?: 'Query';\n GetRepositories?: Maybe<Array<Maybe<Repository>>>;\n GetRttNodeConfig?: Maybe<Scalars['String']['output']>;\n GetRttNodes?: Maybe<Array<Maybe<RttNode>>>;\n GetTags?: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n GetTreeStructure?: Maybe<Array<Maybe<TreeStructure>>>;\n GetUnsNodes?: Maybe<Array<Maybe<UnsNode>>>;\n};\n\n\n/** name: uns-datahub */\nexport type QueryGetRttNodeConfigArgs = {\n rttNode?: InputMaybe<Scalars['String']['input']>;\n};\n\n\n/** name: uns-datahub */\nexport type QueryGetTreeStructureArgs = {\n attributeTags?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n};\n\nexport type Repository = {\n __typename?: 'Repository';\n name?: Maybe<Scalars['String']['output']>;\n tags?: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n};\n\nexport type RttNode = {\n __typename?: 'RttNode';\n author?: Maybe<Scalars['String']['output']>;\n deployedVersions?: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n description?: Maybe<Scalars['String']['output']>;\n lastErrLog?: Maybe<Scalars['String']['output']>;\n lastLog?: Maybe<Scalars['String']['output']>;\n latestDeployedVersion?: Maybe<Scalars['String']['output']>;\n memory?: Maybe<Scalars['Int']['output']>;\n pid?: Maybe<Scalars['Int']['output']>;\n restarts?: Maybe<Scalars['Int']['output']>;\n rttNode?: Maybe<Scalars['String']['output']>;\n runningVersion?: Maybe<Scalars['String']['output']>;\n status?: Maybe<Scalars['String']['output']>;\n topics?: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n uptime?: Maybe<Scalars['Int']['output']>;\n version?: Maybe<Scalars['String']['output']>;\n};\n\nexport type TreeStructure = {\n __typename?: 'TreeStructure';\n apiDescription?: Maybe<Scalars['String']['output']>;\n apiEndpoint?: Maybe<Scalars['String']['output']>;\n apiMethod?: Maybe<Scalars['String']['output']>;\n attributeNeedsPersistance?: Maybe<Scalars['Boolean']['output']>;\n attributeTags?: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n attributeTimestamp?: Maybe<Scalars['Timestamp']['output']>;\n attributeType?: Maybe<UnsAttributeType>;\n children?: Maybe<Array<Maybe<TreeStructure>>>;\n description?: Maybe<Scalars['String']['output']>;\n fullTopic?: Maybe<Scalars['String']['output']>;\n id?: Maybe<Scalars['Int']['output']>;\n parent?: Maybe<Scalars['Int']['output']>;\n processName?: Maybe<Scalars['String']['output']>;\n processVersion?: Maybe<Scalars['String']['output']>;\n type?: Maybe<UnsNodeType>;\n unsNode?: Maybe<Scalars['String']['output']>;\n};\n\nexport enum UnsAttributeType {\n Api = 'Api',\n Data = 'Data',\n Table = 'Table'\n}\n\nexport type UnsNode = {\n __typename?: 'UnsNode';\n apiDescription?: Maybe<Scalars['String']['output']>;\n apiEndpoint?: Maybe<Scalars['String']['output']>;\n apiMethod?: Maybe<Scalars['String']['output']>;\n attributeNeedsPersistance?: Maybe<Scalars['Boolean']['output']>;\n attributeTags?: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n attributeTimestamp?: Maybe<Scalars['Timestamp']['output']>;\n attributeType?: Maybe<UnsAttributeType>;\n description?: Maybe<Scalars['String']['output']>;\n fullTopic?: Maybe<Scalars['String']['output']>;\n id?: Maybe<Scalars['Int']['output']>;\n parent?: Maybe<Scalars['Int']['output']>;\n processName?: Maybe<Scalars['String']['output']>;\n processVersion?: Maybe<Scalars['String']['output']>;\n type?: Maybe<UnsNodeType>;\n unsNode?: Maybe<Scalars['String']['output']>;\n};\n\nexport enum UnsNodeType {\n Attribute = 'Attribute',\n DynamicTopic = 'DynamicTopic',\n Topic = 'Topic'\n}\n\nexport type UpdateUnsNode = {\n apiDescription?: InputMaybe<Scalars['String']['input']>;\n apiEndpoint?: InputMaybe<Scalars['String']['input']>;\n apiMethod?: InputMaybe<Scalars['String']['input']>;\n attributeNeedsPersistance?: InputMaybe<Scalars['Boolean']['input']>;\n attributeTags?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;\n attributeTimestamp?: InputMaybe<Scalars['Timestamp']['input']>;\n attributeType?: InputMaybe<UnsAttributeType>;\n description?: InputMaybe<Scalars['String']['input']>;\n fullTopic?: InputMaybe<Scalars['String']['input']>;\n parent?: InputMaybe<Scalars['Int']['input']>;\n processName?: InputMaybe<Scalars['String']['input']>;\n processVersion?: InputMaybe<Scalars['String']['input']>;\n type?: InputMaybe<UnsNodeType>;\n unsNode?: InputMaybe<Scalars['String']['input']>;\n};\n\n\n\nexport type ResolverTypeWrapper<T> = Promise<T> | T;\n\n\nexport type ResolverWithResolve<TResult, TParent, TContext, TArgs> = {\n resolve: ResolverFn<TResult, TParent, TContext, TArgs>;\n};\nexport type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> = ResolverFn<TResult, TParent, TContext, TArgs> | ResolverWithResolve<TResult, TParent, TContext, TArgs>;\n\nexport type ResolverFn<TResult, TParent, TContext, TArgs> = (\n parent: TParent,\n args: TArgs,\n context: TContext,\n info: GraphQLResolveInfo\n) => Promise<TResult> | TResult;\n\nexport type SubscriptionSubscribeFn<TResult, TParent, TContext, TArgs> = (\n parent: TParent,\n args: TArgs,\n context: TContext,\n info: GraphQLResolveInfo\n) => AsyncIterable<TResult> | Promise<AsyncIterable<TResult>>;\n\nexport type SubscriptionResolveFn<TResult, TParent, TContext, TArgs> = (\n parent: TParent,\n args: TArgs,\n context: TContext,\n info: GraphQLResolveInfo\n) => TResult | Promise<TResult>;\n\nexport interface SubscriptionSubscriberObject<TResult, TKey extends string, TParent, TContext, TArgs> {\n subscribe: SubscriptionSubscribeFn<{ [key in TKey]: TResult }, TParent, TContext, TArgs>;\n resolve?: SubscriptionResolveFn<TResult, { [key in TKey]: TResult }, TContext, TArgs>;\n}\n\nexport interface SubscriptionResolverObject<TResult, TParent, TContext, TArgs> {\n subscribe: SubscriptionSubscribeFn<any, TParent, TContext, TArgs>;\n resolve: SubscriptionResolveFn<TResult, any, TContext, TArgs>;\n}\n\nexport type SubscriptionObject<TResult, TKey extends string, TParent, TContext, TArgs> =\n | SubscriptionSubscriberObject<TResult, TKey, TParent, TContext, TArgs>\n | SubscriptionResolverObject<TResult, TParent, TContext, TArgs>;\n\nexport type SubscriptionResolver<TResult, TKey extends string, TParent = {}, TContext = {}, TArgs = {}> =\n | ((...args: any[]) => SubscriptionObject<TResult, TKey, TParent, TContext, TArgs>)\n | SubscriptionObject<TResult, TKey, TParent, TContext, TArgs>;\n\nexport type TypeResolveFn<TTypes, TParent = {}, TContext = {}> = (\n parent: TParent,\n context: TContext,\n info: GraphQLResolveInfo\n) => Maybe<TTypes> | Promise<Maybe<TTypes>>;\n\nexport type IsTypeOfResolverFn<T = {}, TContext = {}> = (obj: T, context: TContext, info: GraphQLResolveInfo) => boolean | Promise<boolean>;\n\nexport type NextResolverFn<T> = () => Promise<T>;\n\nexport type DirectiveResolverFn<TResult = {}, TParent = {}, TContext = {}, TArgs = {}> = (\n next: NextResolverFn<TResult>,\n parent: TParent,\n args: TArgs,\n context: TContext,\n info: GraphQLResolveInfo\n) => TResult | Promise<TResult>;\n\n\n\n/** Mapping between all available schema types and the resolvers types */\nexport type ResolversTypes = {\n Boolean: ResolverTypeWrapper<Scalars['Boolean']['output']>;\n Date: ResolverTypeWrapper<Scalars['Date']['output']>;\n InitUnsTopic: InitUnsTopic;\n InsertUnsNode: InsertUnsNode;\n Int: ResolverTypeWrapper<Scalars['Int']['output']>;\n Mutation: ResolverTypeWrapper<{}>;\n Query: ResolverTypeWrapper<{}>;\n Repository: ResolverTypeWrapper<Repository>;\n RttNode: ResolverTypeWrapper<RttNode>;\n String: ResolverTypeWrapper<Scalars['String']['output']>;\n Timestamp: ResolverTypeWrapper<Scalars['Timestamp']['output']>;\n TreeStructure: ResolverTypeWrapper<TreeStructure>;\n UnsAttributeType: UnsAttributeType;\n UnsNode: ResolverTypeWrapper<UnsNode>;\n UnsNodeType: UnsNodeType;\n UpdateUnsNode: UpdateUnsNode;\n};\n\n/** Mapping between all available schema types and the resolvers parents */\nexport type ResolversParentTypes = {\n Boolean: Scalars['Boolean']['output'];\n Date: Scalars['Date']['output'];\n InitUnsTopic: InitUnsTopic;\n InsertUnsNode: InsertUnsNode;\n Int: Scalars['Int']['output'];\n Mutation: {};\n Query: {};\n Repository: Repository;\n RttNode: RttNode;\n String: Scalars['String']['output'];\n Timestamp: Scalars['Timestamp']['output'];\n TreeStructure: TreeStructure;\n UnsNode: UnsNode;\n UpdateUnsNode: UpdateUnsNode;\n};\n\nexport interface DateScalarConfig extends GraphQLScalarTypeConfig<ResolversTypes['Date'], any> {\n name: 'Date';\n}\n\nexport type MutationResolvers<ContextType = any, ParentType extends ResolversParentTypes['Mutation'] = ResolversParentTypes['Mutation']> = {\n AddUnsNode?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType, Partial<MutationAddUnsNodeArgs>>;\n DeleteRttNode?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType, Partial<MutationDeleteRttNodeArgs>>;\n DeleteUnsNode?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType, Partial<MutationDeleteUnsNodeArgs>>;\n DeployRttNode?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType, Partial<MutationDeployRttNodeArgs>>;\n ModifyUnsNode?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType, Partial<MutationModifyUnsNodeArgs>>;\n PurgeOldNodes?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType, Partial<MutationPurgeOldNodesArgs>>;\n SetRttNodeConfig?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType, Partial<MutationSetRttNodeConfigArgs>>;\n StartRttNode?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType, Partial<MutationStartRttNodeArgs>>;\n StopRttNode?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType, Partial<MutationStopRttNodeArgs>>;\n};\n\nexport type QueryResolvers<ContextType = any, ParentType extends ResolversParentTypes['Query'] = ResolversParentTypes['Query']> = {\n GetRepositories?: Resolver<Maybe<Array<Maybe<ResolversTypes['Repository']>>>, ParentType, ContextType>;\n GetRttNodeConfig?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType, Partial<QueryGetRttNodeConfigArgs>>;\n GetRttNodes?: Resolver<Maybe<Array<Maybe<ResolversTypes['RttNode']>>>, ParentType, ContextType>;\n GetTags?: Resolver<Maybe<Array<Maybe<ResolversTypes['String']>>>, ParentType, ContextType>;\n GetTreeStructure?: Resolver<Maybe<Array<Maybe<ResolversTypes['TreeStructure']>>>, ParentType, ContextType, Partial<QueryGetTreeStructureArgs>>;\n GetUnsNodes?: Resolver<Maybe<Array<Maybe<ResolversTypes['UnsNode']>>>, ParentType, ContextType>;\n};\n\nexport type RepositoryResolvers<ContextType = any, ParentType extends ResolversParentTypes['Repository'] = ResolversParentTypes['Repository']> = {\n name?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n tags?: Resolver<Maybe<Array<Maybe<ResolversTypes['String']>>>, ParentType, ContextType>;\n __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;\n};\n\nexport type RttNodeResolvers<ContextType = any, ParentType extends ResolversParentTypes['RttNode'] = ResolversParentTypes['RttNode']> = {\n author?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n deployedVersions?: Resolver<Maybe<Array<Maybe<ResolversTypes['String']>>>, ParentType, ContextType>;\n description?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n lastErrLog?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n lastLog?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n latestDeployedVersion?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n memory?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;\n pid?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;\n restarts?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;\n rttNode?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n runningVersion?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n status?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n topics?: Resolver<Maybe<Array<Maybe<ResolversTypes['String']>>>, ParentType, ContextType>;\n uptime?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;\n version?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;\n};\n\nexport interface TimestampScalarConfig extends GraphQLScalarTypeConfig<ResolversTypes['Timestamp'], any> {\n name: 'Timestamp';\n}\n\nexport type TreeStructureResolvers<ContextType = any, ParentType extends ResolversParentTypes['TreeStructure'] = ResolversParentTypes['TreeStructure']> = {\n apiDescription?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n apiEndpoint?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n apiMethod?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n attributeNeedsPersistance?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;\n attributeTags?: Resolver<Maybe<Array<Maybe<ResolversTypes['String']>>>, ParentType, ContextType>;\n attributeTimestamp?: Resolver<Maybe<ResolversTypes['Timestamp']>, ParentType, ContextType>;\n attributeType?: Resolver<Maybe<ResolversTypes['UnsAttributeType']>, ParentType, ContextType>;\n children?: Resolver<Maybe<Array<Maybe<ResolversTypes['TreeStructure']>>>, ParentType, ContextType>;\n description?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n fullTopic?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n id?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;\n parent?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;\n processName?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n processVersion?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n type?: Resolver<Maybe<ResolversTypes['UnsNodeType']>, ParentType, ContextType>;\n unsNode?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;\n};\n\nexport type UnsNodeResolvers<ContextType = any, ParentType extends ResolversParentTypes['UnsNode'] = ResolversParentTypes['UnsNode']> = {\n apiDescription?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n apiEndpoint?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n apiMethod?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n attributeNeedsPersistance?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;\n attributeTags?: Resolver<Maybe<Array<Maybe<ResolversTypes['String']>>>, ParentType, ContextType>;\n attributeTimestamp?: Resolver<Maybe<ResolversTypes['Timestamp']>, ParentType, ContextType>;\n attributeType?: Resolver<Maybe<ResolversTypes['UnsAttributeType']>, ParentType, ContextType>;\n description?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n fullTopic?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n id?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;\n parent?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;\n processName?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n processVersion?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n type?: Resolver<Maybe<ResolversTypes['UnsNodeType']>, ParentType, ContextType>;\n unsNode?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;\n __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;\n};\n\nexport type Resolvers<ContextType = any> = {\n Date?: GraphQLScalarType;\n Mutation?: MutationResolvers<ContextType>;\n Query?: QueryResolvers<ContextType>;\n Repository?: RepositoryResolvers<ContextType>;\n RttNode?: RttNodeResolvers<ContextType>;\n Timestamp?: GraphQLScalarType;\n TreeStructure?: TreeStructureResolvers<ContextType>;\n UnsNode?: UnsNodeResolvers<ContextType>;\n};\n"]}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAOxE,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC","sourcesContent":["export { default as UnsProxyProcess } from \"./uns/uns-proxy-process.js\";\
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAOxE,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC","sourcesContent":["export { default as UnsProxyProcess } from \"./uns/uns-proxy-process.js\";\nexport type {\n UnsProxyProcessPlugin,\n UnsProxyProcessPluginApi,\n UnsProxyProcessPluginMethod,\n UnsProxyProcessPluginMethods,\n} from \"./uns/uns-proxy-process.js\";\nexport * from \"./uns/uns-interfaces.js\";\nexport { ConfigFile } from \"./config-file.js\";\nexport { default as logger } from \"./logger.js\";\nexport { resolveInfisicalConfig } from \"./uns-config/secret-resolver.js\";\n"]}
|
package/dist/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE3D,MAAM,MAAM,GAAG,YAAY,CAAC;IAC1B,KAAK,EAAE,MAAM,EAAE,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC,OAAO,CACpB,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,EACnD,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,sBAAsB;IACtD,MAAM,CAAC,KAAK,EAAE,EACd,MAAM,CAAC,IAAI,EAAE,CACd;IACD,UAAU,EAAE;QACV,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,sBAAsB;QAChD,yDAAyD;QACzD,wEAAwE;QACxE,yDAAyD;KAC1D;IACD,iBAAiB,EAAE;QACjB,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,4BAA4B;QACtD,mCAAmC;QACnC,2DAA2D;KAC5D;CACF,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC","sourcesContent":["import { createLogger, format, transports } from 'winston';\
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE3D,MAAM,MAAM,GAAG,YAAY,CAAC;IAC1B,KAAK,EAAE,MAAM,EAAE,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC,OAAO,CACpB,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,EACnD,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,sBAAsB;IACtD,MAAM,CAAC,KAAK,EAAE,EACd,MAAM,CAAC,IAAI,EAAE,CACd;IACD,UAAU,EAAE;QACV,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,sBAAsB;QAChD,yDAAyD;QACzD,wEAAwE;QACxE,yDAAyD;KAC1D;IACD,iBAAiB,EAAE;QACjB,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,4BAA4B;QACtD,mCAAmC;QACnC,2DAA2D;KAC5D;CACF,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC","sourcesContent":["import { createLogger, format, transports } from 'winston';\n\nconst logger = createLogger({\n level: 'info', // Default logging level\n format: format.combine(\n format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),\n format.errors({ stack: true }), // Include stack trace\n format.splat(),\n format.json()\n ),\n transports: [\n new transports.Console(), // Log to console only\n // Remove the file transports to prevent logging to files\n // new transports.File({ filename: 'logs/error.log', level: 'error' }), \n // new transports.File({ filename: 'logs/combined.log' })\n ],\n exceptionHandlers: [\n new transports.Console(), // Log exceptions to console\n // Remove exception logging to file\n // new transports.File({ filename: 'logs/exceptions.log' })\n ]\n});\n\nexport default logger;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-client.js","sourceRoot":"","sources":["../../../src/tools/auth/auth-client.ts"],"names":[],"mappings":"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","sourcesContent":["import { ConfigFile } from \"../../config-file.js\";\r\nimport { SecureStoreFactory, ISecureStore } from \"./secure-store.js\";\r\nimport jwt from \"jsonwebtoken\";\r\nimport readline from \"readline\";\r\n\r\nconst cfg = await ConfigFile.loadConfig();\r\n\r\ntype LoginResponse = {\r\n accessToken: string;\r\n};\r\n\r\n/**\r\n * AuthClient handles acquiring and refreshing JWT access tokens\r\n * using the configured REST base URL.\r\n */\r\nexport class AuthClient {\r\n private readonly restBase: string;\r\n private readonly namespace: string;\r\n private store!: ISecureStore;\r\n\r\n private constructor(restBase: string) {\r\n this.restBase = restBase.replace(/\\/$/, \"\");\r\n // namespace store by rest base to allow multiple environments\r\n this.namespace = `uns-auth:${this.restBase}`;\r\n }\r\n\r\n static async create(): Promise<AuthClient> {\r\n const restBase: string = cfg?.uns?.rest;\r\n if (!restBase) throw new Error(\"config.uns.rest is not set\");\r\n const client = new AuthClient(restBase);\r\n client.store = await SecureStoreFactory.create(client.namespace);\r\n return client;\r\n }\r\n\r\n async getAccessToken(): Promise<string> {\r\n const accessToken = await this.store.get(\"accessToken\");\r\n const refreshToken = await this.store.get(\"refreshToken\");\r\n\r\n if (accessToken && !AuthClient.isExpired(accessToken)) {\r\n return accessToken;\r\n }\r\n\r\n // Try refresh if we have refresh token\r\n if (refreshToken) {\r\n try {\r\n const refreshed = await this.refresh(refreshToken);\r\n await this.persistTokens(refreshed.accessToken, refreshed.refreshToken);\r\n return refreshed.accessToken;\r\n } catch {\r\n // ignore, fallback to login\r\n }\r\n }\r\n\r\n // First try to get email and password from config\r\n const configEmail = cfg?.uns?.email;\r\n const configPassword = cfg?.uns?.password;\r\n if (typeof configEmail === \"string\" && typeof configPassword === \"string\") {\r\n try {\r\n const loggedIn = await this.login(configEmail, configPassword);\r\n await this.persistTokens(loggedIn.accessToken, loggedIn.refreshToken);\r\n return loggedIn.accessToken;\r\n } catch {\r\n // ignore, fallback to interactive login\r\n }\r\n }\r\n\r\n // Interactive login\r\n const { email, password } = await AuthClient.promptCredentials();\r\n const loggedIn = await this.login(email, password);\r\n await this.persistTokens(loggedIn.accessToken, loggedIn.refreshToken);\r\n return loggedIn.accessToken;\r\n }\r\n\r\n private static isExpired(token: string, skewSeconds = 30): boolean {\r\n try {\r\n const decoded: any = jwt.decode(token);\r\n if (!decoded || typeof decoded !== \"object\" || !decoded.exp) return true;\r\n const now = Math.floor(Date.now() / 1000);\r\n return decoded.exp <= now + skewSeconds;\r\n } catch {\r\n return true;\r\n }\r\n }\r\n\r\n private static endpoint(base: string, tail: string): string {\r\n // base ends without trailing slash; tail must not start with slash\r\n const b = base.replace(/\\/$/, \"\");\r\n const t = tail.replace(/^\\//, \"\");\r\n return `${b}/${t}`;\r\n }\r\n\r\n private static async fetchWithTimeout(url: string, init: RequestInit = {}, timeoutMs = 10_000): Promise<Response> {\r\n const controller = new AbortController();\r\n const id = setTimeout(() => controller.abort(), timeoutMs);\r\n try {\r\n const resp = await fetch(url, { ...init, signal: controller.signal });\r\n return resp;\r\n } finally {\r\n clearTimeout(id);\r\n }\r\n }\r\n\r\n private static extractRefreshCookie(resp: Response): string | null {\r\n const anyHeaders: any = resp.headers as any;\r\n const getSetCookie = typeof anyHeaders.getSetCookie === \"function\" ? anyHeaders.getSetCookie.bind(anyHeaders) : null;\r\n const candidates: string[] = getSetCookie ? getSetCookie() : (resp.headers.get(\"set-cookie\") ? [resp.headers.get(\"set-cookie\") as string] : []);\r\n for (const header of candidates) {\r\n const match = header.match(/(?:^|;\\s*)RefreshToken=([^;]+)/i);\r\n if (match) return match[1];\r\n }\r\n return null;\r\n }\r\n\r\n private async login(email: string, password: string): Promise<{ accessToken: string; refreshToken: string; }> {\r\n const url = AuthClient.endpoint(this.restBase, \"auth/login\");\r\n const resp = await AuthClient.fetchWithTimeout(url, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify({ email, password }),\r\n }, 12_000);\r\n\r\n if (!resp.ok) {\r\n throw new Error(`Login failed: ${resp.status} ${resp.statusText}`);\r\n }\r\n const data = (await resp.json()) as LoginResponse;\r\n const refreshToken = AuthClient.extractRefreshCookie(resp);\r\n if (!data?.accessToken || !refreshToken) {\r\n throw new Error(\"Login response missing tokens\");\r\n }\r\n return { accessToken: data.accessToken, refreshToken };\r\n }\r\n\r\n private async refresh(refreshToken: string): Promise<{ accessToken: string; refreshToken: string; }> {\r\n const url = AuthClient.endpoint(this.restBase, \"auth/refresh\");\r\n const resp = await AuthClient.fetchWithTimeout(url, {\r\n method: \"POST\",\r\n headers: {\r\n // server expects cookie RefreshToken\r\n \"Cookie\": `RefreshToken=${refreshToken}`,\r\n },\r\n }, 8_000);\r\n\r\n if (!resp.ok) {\r\n throw new Error(`Refresh failed: ${resp.status} ${resp.statusText}`);\r\n }\r\n const data = (await resp.json()) as LoginResponse;\r\n const newRefreshToken = AuthClient.extractRefreshCookie(resp) || refreshToken;\r\n if (!data?.accessToken) throw new Error(\"Refresh response missing accessToken\");\r\n return { accessToken: data.accessToken, refreshToken: newRefreshToken };\r\n }\r\n\r\n private async persistTokens(accessToken: string, refreshToken: string): Promise<void> {\r\n await this.store.set(\"accessToken\", accessToken);\r\n await this.store.set(\"refreshToken\", refreshToken);\r\n }\r\n\r\n static async promptCredentials(): Promise<{ email: string; password: string }> {\r\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout, terminal: true });\r\n\r\n const ask = (q: string) => new Promise<string>((resolve) => rl.question(q, (ans) => resolve(ans.trim())));\r\n\r\n const askMasked = (q: string) => new Promise<string>((resolve) => {\r\n const anyRl = rl as any;\r\n const out: any = anyRl.output || process.stdout;\r\n const origWrite = (anyRl._writeToOutput as ((str: string) => void))?.bind(rl) || ((s: string) => out.write(s));\r\n anyRl.stdoutMuted = true;\r\n anyRl._writeToOutput = function (stringToWrite: string) {\r\n // Keep prompt text intact; mask user input\r\n if (anyRl.stdoutMuted) {\r\n if (stringToWrite.startsWith(q)) {\r\n out.write(stringToWrite);\r\n } else if (stringToWrite.endsWith(\"\\n\")) {\r\n out.write(\"\\n\");\r\n } else {\r\n out.write(\"*\");\r\n }\r\n } else {\r\n origWrite(stringToWrite);\r\n }\r\n };\r\n rl.question(q, (value) => {\r\n anyRl.stdoutMuted = false;\r\n anyRl._writeToOutput = origWrite;\r\n out.write(\"\\n\");\r\n resolve(value.trim());\r\n });\r\n });\r\n\r\n try {\r\n const email = await ask(\"Email: \");\r\n const password = await askMasked(\"Password: \");\r\n rl.close();\r\n return { email, password };\r\n } catch (e) {\r\n rl.close();\r\n throw e;\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"auth-client.js","sourceRoot":"","sources":["../../../src/tools/auth/auth-client.ts"],"names":[],"mappings":"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","sourcesContent":["import { ConfigFile } from \"../../config-file.js\";\nimport { SecureStoreFactory, ISecureStore } from \"./secure-store.js\";\nimport jwt from \"jsonwebtoken\";\nimport readline from \"readline\";\n\nconst cfg = await ConfigFile.loadConfig();\n\ntype LoginResponse = {\n accessToken: string;\n};\n\n/**\n * AuthClient handles acquiring and refreshing JWT access tokens\n * using the configured REST base URL.\n */\nexport class AuthClient {\n private readonly restBase: string;\n private readonly namespace: string;\n private store!: ISecureStore;\n\n private constructor(restBase: string) {\n this.restBase = restBase.replace(/\\/$/, \"\");\n // namespace store by rest base to allow multiple environments\n this.namespace = `uns-auth:${this.restBase}`;\n }\n\n static async create(): Promise<AuthClient> {\n const restBase: string = cfg?.uns?.rest;\n if (!restBase) throw new Error(\"config.uns.rest is not set\");\n const client = new AuthClient(restBase);\n client.store = await SecureStoreFactory.create(client.namespace);\n return client;\n }\n\n async getAccessToken(): Promise<string> {\n const accessToken = await this.store.get(\"accessToken\");\n const refreshToken = await this.store.get(\"refreshToken\");\n\n if (accessToken && !AuthClient.isExpired(accessToken)) {\n return accessToken;\n }\n\n // Try refresh if we have refresh token\n if (refreshToken) {\n try {\n const refreshed = await this.refresh(refreshToken);\n await this.persistTokens(refreshed.accessToken, refreshed.refreshToken);\n return refreshed.accessToken;\n } catch {\n // ignore, fallback to login\n }\n }\n\n // First try to get email and password from config\n const configEmail = cfg?.uns?.email;\n const configPassword = cfg?.uns?.password;\n if (typeof configEmail === \"string\" && typeof configPassword === \"string\") {\n try {\n const loggedIn = await this.login(configEmail, configPassword);\n await this.persistTokens(loggedIn.accessToken, loggedIn.refreshToken);\n return loggedIn.accessToken;\n } catch {\n // ignore, fallback to interactive login\n }\n }\n\n // Interactive login\n const { email, password } = await AuthClient.promptCredentials();\n const loggedIn = await this.login(email, password);\n await this.persistTokens(loggedIn.accessToken, loggedIn.refreshToken);\n return loggedIn.accessToken;\n }\n\n private static isExpired(token: string, skewSeconds = 30): boolean {\n try {\n const decoded: any = jwt.decode(token);\n if (!decoded || typeof decoded !== \"object\" || !decoded.exp) return true;\n const now = Math.floor(Date.now() / 1000);\n return decoded.exp <= now + skewSeconds;\n } catch {\n return true;\n }\n }\n\n private static endpoint(base: string, tail: string): string {\n // base ends without trailing slash; tail must not start with slash\n const b = base.replace(/\\/$/, \"\");\n const t = tail.replace(/^\\//, \"\");\n return `${b}/${t}`;\n }\n\n private static async fetchWithTimeout(url: string, init: RequestInit = {}, timeoutMs = 10_000): Promise<Response> {\n const controller = new AbortController();\n const id = setTimeout(() => controller.abort(), timeoutMs);\n try {\n const resp = await fetch(url, { ...init, signal: controller.signal });\n return resp;\n } finally {\n clearTimeout(id);\n }\n }\n\n private static extractRefreshCookie(resp: Response): string | null {\n const anyHeaders: any = resp.headers as any;\n const getSetCookie = typeof anyHeaders.getSetCookie === \"function\" ? anyHeaders.getSetCookie.bind(anyHeaders) : null;\n const candidates: string[] = getSetCookie ? getSetCookie() : (resp.headers.get(\"set-cookie\") ? [resp.headers.get(\"set-cookie\") as string] : []);\n for (const header of candidates) {\n const match = header.match(/(?:^|;\\s*)RefreshToken=([^;]+)/i);\n if (match) return match[1];\n }\n return null;\n }\n\n private async login(email: string, password: string): Promise<{ accessToken: string; refreshToken: string; }> {\n const url = AuthClient.endpoint(this.restBase, \"auth/login\");\n const resp = await AuthClient.fetchWithTimeout(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ email, password }),\n }, 12_000);\n\n if (!resp.ok) {\n throw new Error(`Login failed: ${resp.status} ${resp.statusText}`);\n }\n const data = (await resp.json()) as LoginResponse;\n const refreshToken = AuthClient.extractRefreshCookie(resp);\n if (!data?.accessToken || !refreshToken) {\n throw new Error(\"Login response missing tokens\");\n }\n return { accessToken: data.accessToken, refreshToken };\n }\n\n private async refresh(refreshToken: string): Promise<{ accessToken: string; refreshToken: string; }> {\n const url = AuthClient.endpoint(this.restBase, \"auth/refresh\");\n const resp = await AuthClient.fetchWithTimeout(url, {\n method: \"POST\",\n headers: {\n // server expects cookie RefreshToken\n \"Cookie\": `RefreshToken=${refreshToken}`,\n },\n }, 8_000);\n\n if (!resp.ok) {\n throw new Error(`Refresh failed: ${resp.status} ${resp.statusText}`);\n }\n const data = (await resp.json()) as LoginResponse;\n const newRefreshToken = AuthClient.extractRefreshCookie(resp) || refreshToken;\n if (!data?.accessToken) throw new Error(\"Refresh response missing accessToken\");\n return { accessToken: data.accessToken, refreshToken: newRefreshToken };\n }\n\n private async persistTokens(accessToken: string, refreshToken: string): Promise<void> {\n await this.store.set(\"accessToken\", accessToken);\n await this.store.set(\"refreshToken\", refreshToken);\n }\n\n static async promptCredentials(): Promise<{ email: string; password: string }> {\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout, terminal: true });\n\n const ask = (q: string) => new Promise<string>((resolve) => rl.question(q, (ans) => resolve(ans.trim())));\n\n const askMasked = (q: string) => new Promise<string>((resolve) => {\n const anyRl = rl as any;\n const out: any = anyRl.output || process.stdout;\n const origWrite = (anyRl._writeToOutput as ((str: string) => void))?.bind(rl) || ((s: string) => out.write(s));\n anyRl.stdoutMuted = true;\n anyRl._writeToOutput = function (stringToWrite: string) {\n // Keep prompt text intact; mask user input\n if (anyRl.stdoutMuted) {\n if (stringToWrite.startsWith(q)) {\n out.write(stringToWrite);\n } else if (stringToWrite.endsWith(\"\\n\")) {\n out.write(\"\\n\");\n } else {\n out.write(\"*\");\n }\n } else {\n origWrite(stringToWrite);\n }\n };\n rl.question(q, (value) => {\n anyRl.stdoutMuted = false;\n anyRl._writeToOutput = origWrite;\n out.write(\"\\n\");\n resolve(value.trim());\n });\n });\n\n try {\n const email = await ask(\"Email: \");\n const password = await askMasked(\"Password: \");\n rl.close();\n return { email, password };\n } catch (e) {\n rl.close();\n throw e;\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC","sourcesContent":["export { AuthClient } from \"./auth-client.js\";\
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC","sourcesContent":["export { AuthClient } from \"./auth-client.js\";\n"]}
|