@vibesdotdev/client 0.1.0 → 1.0.0-rc.2
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 -0
- package/README.md +31 -0
- package/dist/api-client-plugin.d.ts +4 -0
- package/dist/api-client-plugin.d.ts.map +1 -0
- package/dist/api-client-plugin.js +20 -0
- package/dist/api-client-plugin.js.map +1 -0
- package/dist/api-client.impl.d.ts +23 -0
- package/dist/api-client.impl.d.ts.map +1 -0
- package/dist/api-client.impl.js +47 -0
- package/dist/api-client.impl.js.map +1 -0
- package/dist/client.consumer.plugin.d.ts +3 -0
- package/dist/client.consumer.plugin.d.ts.map +1 -0
- package/dist/client.consumer.plugin.js +10 -0
- package/dist/client.consumer.plugin.js.map +1 -0
- package/dist/cloud.plugin.d.ts +3 -0
- package/dist/cloud.plugin.d.ts.map +1 -0
- package/dist/cloud.plugin.js +10 -0
- package/dist/cloud.plugin.js.map +1 -0
- package/dist/config/client.config.descriptor.d.ts +4 -0
- package/dist/config/client.config.descriptor.d.ts.map +1 -0
- package/dist/config/client.config.descriptor.js +32 -0
- package/dist/config/client.config.descriptor.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +3 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/settings.d.ts +9 -0
- package/dist/config/settings.d.ts.map +1 -0
- package/dist/config/settings.js +25 -0
- package/dist/config/settings.js.map +1 -0
- package/dist/docs/client.api-request.docs.descriptor.d.ts +4 -0
- package/dist/docs/client.api-request.docs.descriptor.d.ts.map +1 -0
- package/dist/docs/client.api-request.docs.descriptor.js +71 -0
- package/dist/docs/client.api-request.docs.descriptor.js.map +1 -0
- package/dist/events/auth-rejected.event.d.ts +35 -0
- package/dist/events/auth-rejected.event.d.ts.map +1 -0
- package/dist/events/auth-rejected.event.js +36 -0
- package/dist/events/auth-rejected.event.js.map +1 -0
- package/dist/factory.d.ts +5 -1
- package/dist/factory.d.ts.map +1 -1
- package/dist/factory.js +16 -17
- package/dist/factory.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/kind-augment.d.ts +11 -0
- package/dist/kind-augment.d.ts.map +1 -0
- package/dist/kind-augment.js +2 -0
- package/dist/kind-augment.js.map +1 -0
- package/dist/lib/client/api-diagnostics.d.ts +79 -0
- package/dist/lib/client/api-diagnostics.d.ts.map +1 -0
- package/dist/lib/client/api-diagnostics.js +111 -0
- package/dist/lib/client/api-diagnostics.js.map +1 -0
- package/dist/lib/client/configured.d.ts +78 -0
- package/dist/lib/client/configured.d.ts.map +1 -0
- package/dist/lib/client/configured.js +261 -0
- package/dist/lib/client/configured.js.map +1 -0
- package/dist/lib/client/internal/auth-headers.d.ts +11 -0
- package/dist/lib/client/internal/auth-headers.d.ts.map +1 -0
- package/dist/lib/client/internal/auth-headers.js +35 -0
- package/dist/lib/client/internal/auth-headers.js.map +1 -0
- package/dist/lib/client/internal/base-client.d.ts +5 -2
- package/dist/lib/client/internal/base-client.d.ts.map +1 -1
- package/dist/lib/client/internal/base-client.js +42 -22
- package/dist/lib/client/internal/base-client.js.map +1 -1
- package/dist/lib/client/internal/base-helpers.d.ts.map +1 -1
- package/dist/lib/client/internal/base-helpers.js +20 -20
- package/dist/lib/client/internal/base-helpers.js.map +1 -1
- package/dist/lib/client/internal/base-types.d.ts +10 -5
- package/dist/lib/client/internal/base-types.d.ts.map +1 -1
- package/dist/lib/client/internal/base-types.js +5 -3
- package/dist/lib/client/internal/base-types.js.map +1 -1
- package/dist/lib/client/internal/client-values.d.ts +43 -0
- package/dist/lib/client/internal/client-values.d.ts.map +1 -0
- package/dist/lib/client/internal/client-values.js +76 -0
- package/dist/lib/client/internal/client-values.js.map +1 -0
- package/dist/lib/client/internal/endpoint.d.ts +6 -5
- package/dist/lib/client/internal/endpoint.d.ts.map +1 -1
- package/dist/lib/client/internal/endpoint.js +3 -0
- package/dist/lib/client/internal/endpoint.js.map +1 -1
- package/dist/lib/client/internal/generator.d.ts +98 -9
- package/dist/lib/client/internal/generator.d.ts.map +1 -1
- package/dist/lib/client/internal/generator.js +92 -140
- package/dist/lib/client/internal/generator.js.map +1 -1
- package/dist/lib/client/internal/request-builder.d.ts +5 -2
- package/dist/lib/client/internal/request-builder.d.ts.map +1 -1
- package/dist/lib/client/internal/request-builder.js +105 -65
- package/dist/lib/client/internal/request-builder.js.map +1 -1
- package/dist/lib/client/internal/sse-stream.d.ts +9 -5
- package/dist/lib/client/internal/sse-stream.d.ts.map +1 -1
- package/dist/lib/client/internal/sse-stream.js +96 -94
- package/dist/lib/client/internal/sse-stream.js.map +1 -1
- package/dist/lib/client/internal/timeout-signal.d.ts +8 -0
- package/dist/lib/client/internal/timeout-signal.d.ts.map +1 -0
- package/dist/lib/client/internal/timeout-signal.js +17 -0
- package/dist/lib/client/internal/timeout-signal.js.map +1 -0
- package/dist/lib/client/internal/transport/http2-fetch.d.ts +8 -0
- package/dist/lib/client/internal/transport/http2-fetch.d.ts.map +1 -0
- package/dist/lib/client/internal/transport/http2-fetch.js +17 -0
- package/dist/lib/client/internal/transport/http2-fetch.js.map +1 -0
- package/dist/lib/client/internal/vibes-client.d.ts +17 -8
- package/dist/lib/client/internal/vibes-client.d.ts.map +1 -1
- package/dist/lib/client/internal/vibes-client.js +127 -67
- package/dist/lib/client/internal/vibes-client.js.map +1 -1
- package/dist/lib/client/internal/wrap-fetch.d.ts +3 -2
- package/dist/lib/client/internal/wrap-fetch.d.ts.map +1 -1
- package/dist/lib/client/internal/wrap-fetch.js +14 -33
- package/dist/lib/client/internal/wrap-fetch.js.map +1 -1
- package/dist/lib/client/runtime-fetch.d.ts +14 -0
- package/dist/lib/client/runtime-fetch.d.ts.map +1 -0
- package/dist/lib/client/runtime-fetch.js +25 -0
- package/dist/lib/client/runtime-fetch.js.map +1 -0
- package/dist/lib/client/types.d.ts +18 -9
- package/dist/lib/client/types.d.ts.map +1 -1
- package/dist/lib/client/types.js +22 -3
- package/dist/lib/client/types.js.map +1 -1
- package/dist/plugin.d.ts +2 -18
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +7 -74
- package/dist/plugin.js.map +1 -1
- package/dist/runtime-client.d.ts +10 -0
- package/dist/runtime-client.d.ts.map +1 -0
- package/dist/runtime-client.js +14 -0
- package/dist/runtime-client.js.map +1 -0
- package/dist/schemas/auth-rejected.d.ts +12 -0
- package/dist/schemas/auth-rejected.d.ts.map +1 -0
- package/dist/schemas/auth-rejected.js +11 -0
- package/dist/schemas/auth-rejected.js.map +1 -0
- package/dist/schemas/sdk-languages.d.ts +47 -0
- package/dist/schemas/sdk-languages.d.ts.map +1 -0
- package/dist/schemas/sdk-languages.js +75 -0
- package/dist/schemas/sdk-languages.js.map +1 -0
- package/dist/schemas/settings.d.ts +14 -0
- package/dist/schemas/settings.d.ts.map +1 -0
- package/dist/schemas/settings.js +10 -0
- package/dist/schemas/settings.js.map +1 -0
- package/dist/schemas/validated-request.d.ts +19 -0
- package/dist/schemas/validated-request.d.ts.map +1 -0
- package/dist/schemas/validated-request.js +2 -0
- package/dist/schemas/validated-request.js.map +1 -0
- package/dist/schemas.d.ts +23 -8
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +8 -2
- package/dist/schemas.js.map +1 -1
- package/dist/sse-client.d.ts +17 -15
- package/dist/sse-client.d.ts.map +1 -1
- package/dist/sse-client.js +111 -91
- package/dist/sse-client.js.map +1 -1
- package/dist/svelte/client-svelte.plugin.d.ts +3 -0
- package/dist/svelte/client-svelte.plugin.d.ts.map +1 -0
- package/dist/svelte/client-svelte.plugin.js +35 -0
- package/dist/svelte/index.d.ts +3 -0
- package/dist/svelte/index.d.ts.map +1 -0
- package/dist/svelte/index.js +2 -0
- package/dist/svelte/styles.css +8 -0
- package/dist/svelte/tool-widgets/ApiRequestToolCard.svelte +53 -0
- package/dist/svelte/tool-widgets/ApiRequestToolCard.svelte.d.ts +5 -0
- package/dist/svelte/tool-widgets/ApiRequestToolCard.svelte.d.ts.map +1 -0
- package/dist/svelte/tool-widgets/index.d.ts +2 -0
- package/dist/svelte/tool-widgets/index.d.ts.map +1 -0
- package/dist/svelte/tool-widgets/index.js +1 -0
- package/dist/tools/api-request/api-request.contract.d.ts +19 -0
- package/dist/tools/api-request/api-request.contract.d.ts.map +1 -0
- package/dist/tools/api-request/api-request.contract.js +110 -0
- package/dist/tools/api-request/api-request.contract.js.map +1 -0
- package/dist/tools/api-request/api-request.descriptor.d.ts +11 -4
- package/dist/tools/api-request/api-request.descriptor.d.ts.map +1 -1
- package/dist/tools/api-request/api-request.descriptor.js +8 -5
- package/dist/tools/api-request/api-request.descriptor.js.map +1 -1
- package/dist/tools/api-request/api-request.impl.cloud.d.ts +15 -0
- package/dist/tools/api-request/api-request.impl.cloud.d.ts.map +1 -0
- package/dist/tools/api-request/api-request.impl.cloud.js +75 -0
- package/dist/tools/api-request/api-request.impl.cloud.js.map +1 -0
- package/dist/tools/api-request/api-request.impl.consumer.d.ts +5 -3
- package/dist/tools/api-request/api-request.impl.consumer.d.ts.map +1 -1
- package/dist/tools/api-request/api-request.impl.consumer.js +27 -33
- package/dist/tools/api-request/api-request.impl.consumer.js.map +1 -1
- package/dist/tools/api-request/api-request.view.d.ts +29 -0
- package/dist/tools/api-request/api-request.view.d.ts.map +1 -0
- package/dist/tools/api-request/api-request.view.js +62 -0
- package/dist/tools/api-request/api-request.view.js.map +1 -0
- package/dist/tools/api-request/schemas/index.d.ts +12 -5
- package/dist/tools/api-request/schemas/index.d.ts.map +1 -1
- package/dist/tools/api-request/schemas/index.js +24 -6
- package/dist/tools/api-request/schemas/index.js.map +1 -1
- package/dist/tui/client-tui.plugin.d.ts +3 -0
- package/dist/tui/client-tui.plugin.d.ts.map +1 -0
- package/dist/tui/client-tui.plugin.js +32 -0
- package/dist/tui/client-tui.plugin.js.map +1 -0
- package/dist/tui/index.d.ts +2 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +2 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/tool-widgets/ApiRequestToolWidget.impl.tui.d.ts +17 -0
- package/dist/tui/tool-widgets/ApiRequestToolWidget.impl.tui.d.ts.map +1 -0
- package/dist/tui/tool-widgets/ApiRequestToolWidget.impl.tui.js +28 -0
- package/dist/tui/tool-widgets/ApiRequestToolWidget.impl.tui.js.map +1 -0
- package/dist/validated-request.d.ts +27 -0
- package/dist/validated-request.d.ts.map +1 -0
- package/dist/validated-request.js +119 -0
- package/dist/validated-request.js.map +1 -0
- package/package.json +190 -45
- package/SPEC.md +0 -107
- package/dist/lib/client/internal/node/http2-fetch.node.d.ts +0 -2
- package/dist/lib/client/internal/node/http2-fetch.node.d.ts.map +0 -1
- package/dist/lib/client/internal/node/http2-fetch.node.js +0 -131
- package/dist/lib/client/internal/node/http2-fetch.node.js.map +0 -1
- package/dist/lib/client/node.d.ts +0 -5
- package/dist/lib/client/node.d.ts.map +0 -1
- package/dist/lib/client/node.js +0 -33
- package/dist/lib/client/node.js.map +0 -1
- package/dist/tools/api-request/index.d.ts +0 -5
- package/dist/tools/api-request/index.d.ts.map +0 -1
- package/dist/tools/api-request/index.js +0 -4
- package/dist/tools/api-request/index.js.map +0 -1
- package/src/factory.ts +0 -114
- package/src/index.ts +0 -15
- package/src/lib/client/core.ts +0 -13
- package/src/lib/client/internal/base-client.ts +0 -107
- package/src/lib/client/internal/base-helpers.ts +0 -74
- package/src/lib/client/internal/base-types.ts +0 -42
- package/src/lib/client/internal/endpoint.ts +0 -51
- package/src/lib/client/internal/generator.ts +0 -181
- package/src/lib/client/internal/index.ts +0 -4
- package/src/lib/client/internal/node/http2-fetch.node.ts +0 -138
- package/src/lib/client/internal/request-builder.ts +0 -147
- package/src/lib/client/internal/sse-stream.ts +0 -130
- package/src/lib/client/internal/vibes-client.ts +0 -167
- package/src/lib/client/internal/wrap-fetch.ts +0 -59
- package/src/lib/client/node.ts +0 -36
- package/src/lib/client/types.ts +0 -156
- package/src/plugin.ts +0 -104
- package/src/schemas.ts +0 -91
- package/src/sse-client.ts +0 -155
- package/src/tools/api-request/api-request.descriptor.ts +0 -28
- package/src/tools/api-request/api-request.impl.consumer.ts +0 -66
- package/src/tools/api-request/index.ts +0 -4
- package/src/tools/api-request/schemas/index.ts +0 -29
package/dist/factory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,4 +7,7 @@ export { SSEClient, createSSEClient } from './sse-client.ts';
|
|
|
7
7
|
export type { SSEClientOptions, SSEConnectionStatus } from './sse-client.ts';
|
|
8
8
|
export { VibesClient } from './lib/client/core.ts';
|
|
9
9
|
export type { ClientConfig, AuthConfig, ClientHooks, ClientError } from './lib/client/types.ts';
|
|
10
|
+
export { apiRequestCardModel } from './tools/api-request/api-request.view.ts';
|
|
11
|
+
export type { ApiRequestCardModel } from './tools/api-request/api-request.view.ts';
|
|
12
|
+
export { RuntimeApiClient } from './runtime-client.ts';
|
|
10
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/D,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,YAAY,EACX,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7D,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/D,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,YAAY,EACX,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7D,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,YAAY,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAEnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,4 +3,6 @@ export { ApiClientDescriptorSchema } from "./schemas.js";
|
|
|
3
3
|
export { default as clientPlugin } from "./plugin.js";
|
|
4
4
|
export { SSEClient, createSSEClient } from "./sse-client.js";
|
|
5
5
|
export { VibesClient } from "./lib/client/core.js";
|
|
6
|
+
export { apiRequestCardModel } from "./tools/api-request/api-request.view.js";
|
|
7
|
+
export { RuntimeApiClient } from "./runtime-client.js";
|
|
6
8
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAS/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAS/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAG9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ApiClientDescriptor, ApiClientImplementation } from './schemas.ts';
|
|
2
|
+
/** Runtime typing for the `api/client` kind owned and registered by this package. */
|
|
3
|
+
declare global {
|
|
4
|
+
interface VibesKindTypeMap {
|
|
5
|
+
'api/client': {
|
|
6
|
+
descriptor: ApiClientDescriptor;
|
|
7
|
+
impl: ApiClientImplementation;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=kind-augment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kind-augment.d.ts","sourceRoot":"","sources":["../src/kind-augment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEjF,qFAAqF;AACrF,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,gBAAgB;QACzB,YAAY,EAAE;YAAE,UAAU,EAAE,mBAAmB,CAAC;YAAC,IAAI,EAAE,uBAAuB,CAAA;SAAE,CAAC;KACjF;CACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kind-augment.js","sourceRoot":"","sources":["../src/kind-augment.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API test and debug diagnostics over the configured client
|
|
3
|
+
* (`./node/api-diagnostics`). Restored from `@vibesdotdev/cli`
|
|
4
|
+
* (`cli/src/api/services/api.ts`, removed in d125decc8) beside the factory it
|
|
5
|
+
* calls (`./configured.ts`): the client package owns client construction.
|
|
6
|
+
*
|
|
7
|
+
* Both diagnostics run on the runtime the caller hands over in its context
|
|
8
|
+
* (`INTERNAL runtime-missing` without one), report auth by presence only
|
|
9
|
+
* (never a credential value), and carry a failed probe in the result. A
|
|
10
|
+
* failure to resolve the environment or the client configuration is logged
|
|
11
|
+
* through the caller's logger, when it hands one, and rethrown unchanged.
|
|
12
|
+
*/
|
|
13
|
+
import * as z from 'zod/v4';
|
|
14
|
+
import { type VibesRuntime } from '@vibesdotdev/kernel';
|
|
15
|
+
import { type ApiClientInspection, type ConfiguredClientContext } from './configured.ts';
|
|
16
|
+
/** What a diagnostic is handed beside its input: the runtime, the configured-client context, an optional logger. */
|
|
17
|
+
export interface ApiDiagnosticsContext extends ConfiguredClientContext {
|
|
18
|
+
readonly runtime?: VibesRuntime;
|
|
19
|
+
readonly logger?: {
|
|
20
|
+
error(message: string, error: Error): void;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/** An API test request: the endpoint to probe (default `/api/health`), its method and timeout. */
|
|
24
|
+
export declare const apiTestSchema: z.ZodObject<{
|
|
25
|
+
endpoint: z.ZodOptional<z.ZodString>;
|
|
26
|
+
method: z.ZodDefault<z.ZodEnum<{
|
|
27
|
+
GET: "GET";
|
|
28
|
+
POST: "POST";
|
|
29
|
+
PUT: "PUT";
|
|
30
|
+
DELETE: "DELETE";
|
|
31
|
+
}>>;
|
|
32
|
+
timeout: z.ZodOptional<z.ZodNumber>;
|
|
33
|
+
}, z.core.$strip>;
|
|
34
|
+
export type APITestInput = z.input<typeof apiTestSchema>;
|
|
35
|
+
/** One connection status: auth presence only, never a credential value. */
|
|
36
|
+
export declare const apiConnectionStatusSchema: z.ZodObject<{
|
|
37
|
+
connected: z.ZodBoolean;
|
|
38
|
+
environment: z.ZodString;
|
|
39
|
+
baseUrl: z.ZodString;
|
|
40
|
+
authType: z.ZodEnum<{
|
|
41
|
+
none: "none";
|
|
42
|
+
session: "session";
|
|
43
|
+
apiKey: "apiKey";
|
|
44
|
+
}>;
|
|
45
|
+
lastChecked: z.ZodISODateTime;
|
|
46
|
+
latency: z.ZodOptional<z.ZodNumber>;
|
|
47
|
+
error: z.ZodOptional<z.ZodString>;
|
|
48
|
+
}, z.core.$strip>;
|
|
49
|
+
export type APIConnectionStatus = z.infer<typeof apiConnectionStatusSchema>;
|
|
50
|
+
/** The inspection view of the configured client (`createAPIClientConfig`). */
|
|
51
|
+
export type APIClientConfig = ApiClientInspection;
|
|
52
|
+
export interface APITestResult {
|
|
53
|
+
success: boolean;
|
|
54
|
+
status: APIConnectionStatus;
|
|
55
|
+
response?: {
|
|
56
|
+
status: number;
|
|
57
|
+
statusText: string;
|
|
58
|
+
headers: Record<string, string>;
|
|
59
|
+
data?: {
|
|
60
|
+
message: string;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
error?: string;
|
|
64
|
+
}
|
|
65
|
+
export interface APIDebugResult {
|
|
66
|
+
config: APIClientConfig;
|
|
67
|
+
status: APIConnectionStatus;
|
|
68
|
+
diagnostics: {
|
|
69
|
+
environmentResolved: boolean;
|
|
70
|
+
authResolved: boolean;
|
|
71
|
+
baseUrlValid: boolean;
|
|
72
|
+
credentialsValid: boolean;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/** Probe `input.endpoint` on the selected API origin and report the connection status. */
|
|
76
|
+
export declare function executeAPITest(input: APITestInput, context: ApiDiagnosticsContext): Promise<APITestResult>;
|
|
77
|
+
/** Resolve the configured client's inspection view, probe `/api/health`, and report what resolved. */
|
|
78
|
+
export declare function executeAPIDebug(context: ApiDiagnosticsContext): Promise<APIDebugResult>;
|
|
79
|
+
//# sourceMappingURL=api-diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-diagnostics.d.ts","sourceRoot":"","sources":["../../../src/lib/client/api-diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAA0D,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAChH,OAAO,EAGN,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,MAAM,iBAAiB,CAAC;AAEzB,oHAAoH;AACpH,MAAM,WAAW,qBAAsB,SAAQ,uBAAuB;IACrE,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;KAAE,CAAC;CACjE;AAED,kGAAkG;AAClG,eAAO,MAAM,aAAa;;;;;;;;;iBAIxB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEzD,2EAA2E;AAC3E,eAAO,MAAM,yBAAyB;;;;;;;;;;;;iBAQpC,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,8EAA8E;AAC9E,MAAM,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAElD,MAAM,WAAW,aAAa;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,CAAC,EAAE;QACV,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,EAAE;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;KAC3B,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,WAAW,EAAE;QACZ,mBAAmB,EAAE,OAAO,CAAC;QAC7B,YAAY,EAAE,OAAO,CAAC;QACtB,YAAY,EAAE,OAAO,CAAC;QACtB,gBAAgB,EAAE,OAAO,CAAC;KAC1B,CAAC;CACF;AAoBD,0FAA0F;AAC1F,wBAAsB,cAAc,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,CAyBhH;AAED,sGAAsG;AACtG,wBAAsB,eAAe,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC,CA4B7F"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API test and debug diagnostics over the configured client
|
|
3
|
+
* (`./node/api-diagnostics`). Restored from `@vibesdotdev/cli`
|
|
4
|
+
* (`cli/src/api/services/api.ts`, removed in d125decc8) beside the factory it
|
|
5
|
+
* calls (`./configured.ts`): the client package owns client construction.
|
|
6
|
+
*
|
|
7
|
+
* Both diagnostics run on the runtime the caller hands over in its context
|
|
8
|
+
* (`INTERNAL runtime-missing` without one), report auth by presence only
|
|
9
|
+
* (never a credential value), and carry a failed probe in the result. A
|
|
10
|
+
* failure to resolve the environment or the client configuration is logged
|
|
11
|
+
* through the caller's logger, when it hands one, and rethrown unchanged.
|
|
12
|
+
*/
|
|
13
|
+
import * as z from 'zod/v4';
|
|
14
|
+
import { readClientValue, readClientFields } from "./internal/client-values.js";
|
|
15
|
+
import { CapabilityError, CaughtFailureSchema, valueFreeFailure } from '@vibesdotdev/kernel';
|
|
16
|
+
import { createAPIClientConfig, testAPIConnection } from "./configured.js";
|
|
17
|
+
/** An API test request: the endpoint to probe (default `/api/health`), its method and timeout. */
|
|
18
|
+
export const apiTestSchema = z.object({
|
|
19
|
+
endpoint: z.string().optional(),
|
|
20
|
+
method: z.enum(['GET', 'POST', 'PUT', 'DELETE']).default('GET'),
|
|
21
|
+
timeout: z.number().int().positive().optional()
|
|
22
|
+
});
|
|
23
|
+
/** One connection status: auth presence only, never a credential value. */
|
|
24
|
+
export const apiConnectionStatusSchema = z.object({
|
|
25
|
+
connected: z.boolean(),
|
|
26
|
+
environment: z.string(),
|
|
27
|
+
baseUrl: z.string(),
|
|
28
|
+
authType: z.enum(['none', 'apiKey', 'session']),
|
|
29
|
+
lastChecked: z.iso.datetime(),
|
|
30
|
+
latency: z.number().optional(),
|
|
31
|
+
error: z.string().optional()
|
|
32
|
+
});
|
|
33
|
+
/**
|
|
34
|
+
* The runtime these diagnostics were handed, from their context. Environment
|
|
35
|
+
* selection is read from it; nothing reads an ambient default.
|
|
36
|
+
*/
|
|
37
|
+
function contextRuntime(context) {
|
|
38
|
+
const runtime = readClientFields(() => context.runtime, 'client-context-unreadable');
|
|
39
|
+
if (!runtime) {
|
|
40
|
+
throw new CapabilityError('The API diagnostics were handed no runtime.', 'INTERNAL', { reason: 'runtime-missing', retryable: false });
|
|
41
|
+
}
|
|
42
|
+
return runtime;
|
|
43
|
+
}
|
|
44
|
+
/** Log a diagnostic failure through the caller's logger, when it handed one; the failure is rethrown by the caller. */
|
|
45
|
+
function reportFailure(context, message, error) {
|
|
46
|
+
const logger = readClientFields(() => context.logger, 'client-context-unreadable');
|
|
47
|
+
logger?.error(message, new CapabilityError('The API diagnostic failed.', 'INTERNAL', { reason: 'api-diagnostic-failed', cause: valueFreeFailure(CaughtFailureSchema.parse(error)) }));
|
|
48
|
+
}
|
|
49
|
+
/** Probe `input.endpoint` on the selected API origin and report the connection status. */
|
|
50
|
+
export async function executeAPITest(input, context) {
|
|
51
|
+
try {
|
|
52
|
+
const validatedInput = readClientValue(apiTestSchema, input, 'api-diagnostic-input-invalid');
|
|
53
|
+
const runtime = contextRuntime(context);
|
|
54
|
+
const config = await createAPIClientConfig(runtime, context);
|
|
55
|
+
const testResult = await testAPIConnection(runtime, validatedInput.endpoint, context, { method: validatedInput.method, timeout: validatedInput.timeout });
|
|
56
|
+
const status = {
|
|
57
|
+
connected: testResult.success,
|
|
58
|
+
environment: config.environment,
|
|
59
|
+
baseUrl: config.baseUrl,
|
|
60
|
+
authType: config.auth.type,
|
|
61
|
+
lastChecked: new Date().toISOString(),
|
|
62
|
+
latency: testResult.latency,
|
|
63
|
+
error: testResult.error
|
|
64
|
+
};
|
|
65
|
+
if (!testResult.success)
|
|
66
|
+
return { success: false, status, error: testResult.error };
|
|
67
|
+
return {
|
|
68
|
+
success: true,
|
|
69
|
+
status,
|
|
70
|
+
response: { status: testResult.status, statusText: 'OK', headers: {}, data: { message: 'Connection successful' } }
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
if (error instanceof Error)
|
|
75
|
+
reportFailure(context, 'Failed to test API', error);
|
|
76
|
+
throw error;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/** Resolve the configured client's inspection view, probe `/api/health`, and report what resolved. */
|
|
80
|
+
export async function executeAPIDebug(context) {
|
|
81
|
+
try {
|
|
82
|
+
const runtime = contextRuntime(context);
|
|
83
|
+
const config = await createAPIClientConfig(runtime, context);
|
|
84
|
+
const authConfigured = config.auth.type !== 'none';
|
|
85
|
+
const testResult = await testAPIConnection(runtime, '/api/health', context);
|
|
86
|
+
return {
|
|
87
|
+
config,
|
|
88
|
+
status: {
|
|
89
|
+
connected: testResult.success,
|
|
90
|
+
environment: config.environment,
|
|
91
|
+
baseUrl: config.baseUrl,
|
|
92
|
+
authType: config.auth.type,
|
|
93
|
+
lastChecked: new Date().toISOString(),
|
|
94
|
+
latency: testResult.latency,
|
|
95
|
+
error: testResult.error
|
|
96
|
+
},
|
|
97
|
+
diagnostics: {
|
|
98
|
+
environmentResolved: Boolean(config.environment),
|
|
99
|
+
authResolved: authConfigured,
|
|
100
|
+
baseUrlValid: config.baseUrl.startsWith('http'),
|
|
101
|
+
credentialsValid: authConfigured
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
if (error instanceof Error)
|
|
107
|
+
reportFailure(context, 'Failed to debug API', error);
|
|
108
|
+
throw error;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=api-diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-diagnostics.js","sourceRoot":"","sources":["../../../src/lib/client/api-diagnostics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The configured API client for a Node/Bun host: the selected environment's
|
|
3
|
+
* API origin (catalog, or an environment overlay the caller hands over), the
|
|
4
|
+
* caller's credentials, and the host's TLS declaration, composed into one
|
|
5
|
+
* `VibesClient`. Moved here from `@vibesdotdev/cli` (`cli/src/api/client/
|
|
6
|
+
* factory.ts`): the client package owns client construction (cli SPEC,
|
|
7
|
+
* "Does not own"), and the CLI no longer depends on this package.
|
|
8
|
+
*
|
|
9
|
+
* Every value the caller hands over is read field by field through a schema:
|
|
10
|
+
* a malformed field is absent, never a throw, and never gates another field.
|
|
11
|
+
*/
|
|
12
|
+
import * as z from 'zod/v4';
|
|
13
|
+
import { type ValueFreeFailure, type VibesRuntime } from '@vibesdotdev/kernel';
|
|
14
|
+
import type { VibesClient } from './internal/vibes-client.ts';
|
|
15
|
+
/** The caller's scoped config reader (only `debug` in scope `global` is read). */
|
|
16
|
+
export interface ConfiguredClientConfigReader {
|
|
17
|
+
get(key: string, scope: string): Promise<boolean | string | number | null | undefined | object>;
|
|
18
|
+
}
|
|
19
|
+
/** What a caller may hand over beside the runtime; every member is optional. */
|
|
20
|
+
export interface ConfiguredClientContext {
|
|
21
|
+
/** An environment overlay (`name`, `url`, `headers`, `data.apiUrl`/`tier`/`headers`). */
|
|
22
|
+
readonly environment?: object;
|
|
23
|
+
/** The credentials to send (`apiKey`, or `sessionToken` + `refreshToken`). */
|
|
24
|
+
readonly authCredentials?: object;
|
|
25
|
+
/** The caller's config reader, for the `debug` flag. */
|
|
26
|
+
readonly config?: ConfiguredClientConfigReader;
|
|
27
|
+
}
|
|
28
|
+
/** The inspection view of a configured client: auth presence only, never a credential value. */
|
|
29
|
+
export declare const ApiClientInspectionSchema: z.ZodObject<{
|
|
30
|
+
baseUrl: z.ZodURL;
|
|
31
|
+
environment: z.ZodString;
|
|
32
|
+
tier: z.ZodEnum<{
|
|
33
|
+
local: "local";
|
|
34
|
+
dev: "dev";
|
|
35
|
+
staging: "staging";
|
|
36
|
+
production: "production";
|
|
37
|
+
}>;
|
|
38
|
+
auth: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
39
|
+
type: z.ZodLiteral<"none">;
|
|
40
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
41
|
+
type: z.ZodLiteral<"apiKey">;
|
|
42
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
43
|
+
type: z.ZodLiteral<"session">;
|
|
44
|
+
hasRefreshToken: z.ZodOptional<z.ZodBoolean>;
|
|
45
|
+
}, z.core.$strip>], "type">;
|
|
46
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
47
|
+
timeout: z.ZodDefault<z.ZodNumber>;
|
|
48
|
+
retries: z.ZodDefault<z.ZodNumber>;
|
|
49
|
+
debug: z.ZodDefault<z.ZodBoolean>;
|
|
50
|
+
}, z.core.$strip>;
|
|
51
|
+
export type ApiClientInspection = z.infer<typeof ApiClientInspectionSchema>;
|
|
52
|
+
/** The outcome of a plain connection probe of the selected API origin. */
|
|
53
|
+
export interface ApiConnectionTest {
|
|
54
|
+
readonly success: boolean;
|
|
55
|
+
readonly status: number;
|
|
56
|
+
readonly latency: number;
|
|
57
|
+
readonly error?: string;
|
|
58
|
+
/** The transport failure's value-free facts (class, code, reason). */
|
|
59
|
+
readonly failure?: ValueFreeFailure;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* A `VibesClient` for the selected environment, with the caller's credentials.
|
|
63
|
+
* Certificate verification stays on unless the host declares
|
|
64
|
+
* `config.client.allowInsecureLocalTls=true` (local development only).
|
|
65
|
+
*/
|
|
66
|
+
export declare function createConfiguredClient(runtime: VibesRuntime, context?: ConfiguredClientContext): Promise<VibesClient>;
|
|
67
|
+
/** The inspection view of the client `createConfiguredClient` would build (auth presence only). */
|
|
68
|
+
export declare function createAPIClientConfig(runtime: VibesRuntime, context?: ConfiguredClientContext): Promise<ApiClientInspection>;
|
|
69
|
+
/**
|
|
70
|
+
* Probe `endpoint` on the selected API origin with a plain fetch (the client
|
|
71
|
+
* abstracts status codes away; a connection test reports the real one). A
|
|
72
|
+
* transport failure is a failed probe carrying the failure's message.
|
|
73
|
+
*/
|
|
74
|
+
export declare function testAPIConnection(runtime: VibesRuntime, endpoint?: string, context?: ConfiguredClientContext, options?: {
|
|
75
|
+
method?: string;
|
|
76
|
+
timeout?: number;
|
|
77
|
+
}): Promise<ApiConnectionTest>;
|
|
78
|
+
//# sourceMappingURL=configured.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configured.d.ts","sourceRoot":"","sources":["../../../src/lib/client/configured.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAA0D,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AASvI,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AA0C9D,kFAAkF;AAClF,MAAM,WAAW,4BAA4B;IAC5C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC,CAAC;CAChG;AAED,gFAAgF;AAChF,MAAM,WAAW,uBAAuB;IACvC,yFAAyF;IACzF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,8EAA8E;IAC9E,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,wDAAwD;IACxD,QAAQ,CAAC,MAAM,CAAC,EAAE,4BAA4B,CAAC;CAC/C;AAED,gGAAgG;AAChG,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;iBAapC,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,0EAA0E;AAC1E,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC;CACpC;AAyHD;;;;GAIG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,CAY3H;AAED,mGAAmG;AACnG,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAoBlI;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACtC,OAAO,EAAE,YAAY,EACrB,QAAQ,SAAgB,EACxB,OAAO,CAAC,EAAE,uBAAuB,EACjC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACjD,OAAO,CAAC,iBAAiB,CAAC,CAyB5B"}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { loadClientSettings } from "../../config/settings.js";
|
|
2
|
+
import { createTimeoutSignal } from "./internal/timeout-signal.js";
|
|
3
|
+
import { readClientValue, readClientFields, HttpOriginSchema } from "./internal/client-values.js";
|
|
4
|
+
import { redactCredentials } from '@vibesdotdev/shared/utils';
|
|
5
|
+
/**
|
|
6
|
+
* The configured API client for a Node/Bun host: the selected environment's
|
|
7
|
+
* API origin (catalog, or an environment overlay the caller hands over), the
|
|
8
|
+
* caller's credentials, and the host's TLS declaration, composed into one
|
|
9
|
+
* `VibesClient`. Moved here from `@vibesdotdev/cli` (`cli/src/api/client/
|
|
10
|
+
* factory.ts`): the client package owns client construction (cli SPEC,
|
|
11
|
+
* "Does not own"), and the CLI no longer depends on this package.
|
|
12
|
+
*
|
|
13
|
+
* Every value the caller hands over is read field by field through a schema:
|
|
14
|
+
* a malformed field is absent, never a throw, and never gates another field.
|
|
15
|
+
*/
|
|
16
|
+
import * as z from 'zod/v4';
|
|
17
|
+
import { CapabilityError, CaughtFailureSchema, valueFreeFailure } from '@vibesdotdev/kernel';
|
|
18
|
+
import { ConfigManifest } from '@vibesdotdev/config/manifest/config-manifest';
|
|
19
|
+
import { resolveDefaultCurrentEnvironment, resolveCurrentEnvironmentConfig } from '@vibesdotdev/config/environment/current';
|
|
20
|
+
import { LoggedErrorSchema } from '@vibesdotdev/logging';
|
|
21
|
+
import { createCLIClient } from "./runtime-fetch.js";
|
|
22
|
+
/** The environment selection manifest (`@vibesdotdev/config/environment/current`). */
|
|
23
|
+
const ENVIRONMENT_MANIFEST_ID = 'environment';
|
|
24
|
+
const EnvironmentTierSchema = z.enum(['local', 'dev', 'staging', 'production']);
|
|
25
|
+
const HeadersSchema = z.record(z.string(), z.string());
|
|
26
|
+
/** An environment overlay: each field read on its own, a malformed one absent. */
|
|
27
|
+
const EnvironmentOverlaySchema = z.object({
|
|
28
|
+
name: z.string().optional().catch(undefined),
|
|
29
|
+
url: HttpOriginSchema.optional().catch(undefined),
|
|
30
|
+
headers: HeadersSchema.optional().catch(undefined),
|
|
31
|
+
data: z
|
|
32
|
+
.object({
|
|
33
|
+
apiUrl: HttpOriginSchema.optional().catch(undefined),
|
|
34
|
+
tier: EnvironmentTierSchema.optional().catch(undefined),
|
|
35
|
+
headers: HeadersSchema.optional().catch(undefined)
|
|
36
|
+
})
|
|
37
|
+
.optional()
|
|
38
|
+
.catch(undefined)
|
|
39
|
+
});
|
|
40
|
+
/** Credentials the caller holds: each field read on its own. */
|
|
41
|
+
const AuthCredentialsSchema = z.object({
|
|
42
|
+
apiKey: z.string().optional().catch(undefined),
|
|
43
|
+
sessionToken: z.string().optional().catch(undefined),
|
|
44
|
+
refreshToken: z.string().optional().catch(undefined),
|
|
45
|
+
expiresAt: z.string().optional().catch(undefined)
|
|
46
|
+
});
|
|
47
|
+
/** A session refresh answer: a new token, and optionally the next refresh token. */
|
|
48
|
+
const SessionRefreshSchema = z.object({
|
|
49
|
+
token: z.string().min(1).optional().catch(undefined),
|
|
50
|
+
refreshToken: z.string().min(1).optional().catch(undefined)
|
|
51
|
+
});
|
|
52
|
+
/** The inspection view of a configured client: auth presence only, never a credential value. */
|
|
53
|
+
export const ApiClientInspectionSchema = z.object({
|
|
54
|
+
baseUrl: z.url(),
|
|
55
|
+
environment: z.string(),
|
|
56
|
+
tier: EnvironmentTierSchema,
|
|
57
|
+
auth: z.discriminatedUnion('type', [
|
|
58
|
+
z.object({ type: z.literal('none') }),
|
|
59
|
+
z.object({ type: z.literal('apiKey') }),
|
|
60
|
+
z.object({ type: z.literal('session'), hasRefreshToken: z.boolean().optional() })
|
|
61
|
+
]),
|
|
62
|
+
headers: HeadersSchema.optional(),
|
|
63
|
+
timeout: z.number().default(30000),
|
|
64
|
+
retries: z.number().default(3),
|
|
65
|
+
debug: z.boolean().default(false)
|
|
66
|
+
});
|
|
67
|
+
function readContext(context) {
|
|
68
|
+
try {
|
|
69
|
+
return { environment: context?.environment, credentials: context?.authCredentials, config: context?.config };
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
throw new CapabilityError('The client context could not be read.', 'INVALID_INPUT', { reason: 'client-context-unreadable', cause: CaughtFailureSchema.parse(error) });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function overlayOf(context) {
|
|
76
|
+
const value = readContext(context).environment;
|
|
77
|
+
return value === undefined ? undefined : readClientValue(EnvironmentOverlaySchema, value, 'client-context-unreadable');
|
|
78
|
+
}
|
|
79
|
+
function credentialsOf(context) {
|
|
80
|
+
const value = readContext(context).credentials;
|
|
81
|
+
return value === undefined ? undefined : readClientValue(AuthCredentialsSchema, value, 'client-context-unreadable');
|
|
82
|
+
}
|
|
83
|
+
/** The selected environment; a runtime that composes no environment manifest uses the built-in default. */
|
|
84
|
+
async function resolveCatalogEnvironment(runtime) {
|
|
85
|
+
if (!ConfigManifest.isRegistered(runtime, ENVIRONMENT_MANIFEST_ID))
|
|
86
|
+
return resolveDefaultCurrentEnvironment(runtime);
|
|
87
|
+
return resolveCurrentEnvironmentConfig(runtime);
|
|
88
|
+
}
|
|
89
|
+
/** The catalog environment with the caller's overlay applied (overlay wins per field). */
|
|
90
|
+
async function resolveClientEnvironment(runtime, context) {
|
|
91
|
+
const overlay = overlayOf(context);
|
|
92
|
+
const catalog = await resolveCatalogEnvironment(runtime);
|
|
93
|
+
const scopeTier = EnvironmentTierSchema.safeParse(runtime.declaredScope?.qualifiers?.environmentTier).data;
|
|
94
|
+
return {
|
|
95
|
+
apiUrl: overlay?.data?.apiUrl ?? overlay?.url ?? catalog.apiUrl,
|
|
96
|
+
name: overlay?.name ?? catalog.name,
|
|
97
|
+
tier: overlay?.data?.tier ?? scopeTier ?? catalog.tier,
|
|
98
|
+
headers: overlay?.data?.headers ?? overlay?.headers
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
const DebugFlagSchema = z.boolean().catch(false);
|
|
102
|
+
/**
|
|
103
|
+
* The caller's `debug` flag (scope `global`); a non-boolean value reads as off.
|
|
104
|
+
* A reader that fails refuses `UNAVAILABLE` `client-debug-flag-unreadable`
|
|
105
|
+
* with the failure as its cause.
|
|
106
|
+
*/
|
|
107
|
+
async function resolveDebugFlag(context) {
|
|
108
|
+
const reader = readContext(context).config;
|
|
109
|
+
if (reader === undefined)
|
|
110
|
+
return false;
|
|
111
|
+
try {
|
|
112
|
+
return DebugFlagSchema.parse(await reader.get('debug', 'global'));
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
throw new CapabilityError('The client debug flag could not be read from config.', 'UNAVAILABLE', {
|
|
116
|
+
reason: 'client-debug-flag-unreadable',
|
|
117
|
+
retryable: true,
|
|
118
|
+
cause: CaughtFailureSchema.parse(error)
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/** Bearer auth over a rotating session pair: each refresh stores the NEXT refresh token. */
|
|
123
|
+
function sessionAuth(runtime, sessionToken, refreshToken, baseUrl) {
|
|
124
|
+
const session = { token: sessionToken, refreshToken };
|
|
125
|
+
return {
|
|
126
|
+
type: 'bearer',
|
|
127
|
+
tokenProvider: async () => session.token,
|
|
128
|
+
refreshHandler: async () => {
|
|
129
|
+
if (!session.refreshToken)
|
|
130
|
+
return null;
|
|
131
|
+
const deadline = createTimeoutSignal(runtime, 10000);
|
|
132
|
+
try {
|
|
133
|
+
const response = await fetch(`${baseUrl}/api/auth/session`, {
|
|
134
|
+
method: 'POST',
|
|
135
|
+
headers: { 'Content-Type': 'application/json' },
|
|
136
|
+
body: JSON.stringify({ refreshToken: session.refreshToken }), signal: deadline.signal
|
|
137
|
+
});
|
|
138
|
+
if (!response.ok) {
|
|
139
|
+
throw new CapabilityError('Session refresh was refused.', 'AUTH_REQUIRED', { reason: 'session-refresh-refused', details: { status: response.status } });
|
|
140
|
+
}
|
|
141
|
+
const refreshed = readClientValue(SessionRefreshSchema, await response.json(), 'session-refresh-invalid');
|
|
142
|
+
if (refreshed?.token === undefined) {
|
|
143
|
+
throw new CapabilityError('Session refresh carried no token.', 'AUTH_REQUIRED', { reason: 'session-refresh-token-missing' });
|
|
144
|
+
}
|
|
145
|
+
session.token = refreshed.token;
|
|
146
|
+
if (refreshed.refreshToken !== undefined)
|
|
147
|
+
session.refreshToken = refreshed.refreshToken;
|
|
148
|
+
return { type: 'bearer', credentials: session.token, tokenProvider: async () => session.token };
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
const failure = CaughtFailureSchema.parse(error);
|
|
152
|
+
if (failure instanceof CapabilityError)
|
|
153
|
+
throw failure;
|
|
154
|
+
throw new CapabilityError('The session refresh request failed; re-authenticate with auth login.', 'UNAVAILABLE', {
|
|
155
|
+
reason: 'session-refresh-failed',
|
|
156
|
+
retryable: true,
|
|
157
|
+
cause: CaughtFailureSchema.parse(error)
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
finally {
|
|
161
|
+
deadline.dispose();
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
function buildAuthConfig(runtime, credentials, baseUrl) {
|
|
167
|
+
if (credentials?.apiKey)
|
|
168
|
+
return { type: 'apiKey', credentials: credentials.apiKey };
|
|
169
|
+
if (credentials?.sessionToken)
|
|
170
|
+
return sessionAuth(runtime, credentials.sessionToken, credentials.refreshToken, baseUrl);
|
|
171
|
+
return { type: 'none' };
|
|
172
|
+
}
|
|
173
|
+
/** `config` with every environment header set on each request; unchanged when there are none. */
|
|
174
|
+
function applyEnvironmentHeaders(config, headers) {
|
|
175
|
+
if (headers === undefined || Object.keys(headers).length === 0)
|
|
176
|
+
return config;
|
|
177
|
+
const beforeRequest = async (request) => {
|
|
178
|
+
const updated = new Headers(request.headers);
|
|
179
|
+
for (const [key, value] of Object.entries(headers))
|
|
180
|
+
updated.set(key, value);
|
|
181
|
+
return new Request(request, { headers: updated });
|
|
182
|
+
};
|
|
183
|
+
return { ...config, hooks: { ...config.hooks, beforeRequest } };
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* A `VibesClient` for the selected environment, with the caller's credentials.
|
|
187
|
+
* Certificate verification stays on unless the host declares
|
|
188
|
+
* `config.client.allowInsecureLocalTls=true` (local development only).
|
|
189
|
+
*/
|
|
190
|
+
export async function createConfiguredClient(runtime, context) {
|
|
191
|
+
const environment = await resolveClientEnvironment(runtime, context);
|
|
192
|
+
const baseUrl = environment.apiUrl;
|
|
193
|
+
const debug = await resolveDebugFlag(context);
|
|
194
|
+
const settings = await loadClientSettings(runtime);
|
|
195
|
+
const allowInsecureLocalTls = settings.allowInsecureLocalTls;
|
|
196
|
+
const initialConfig = {
|
|
197
|
+
baseUrl,
|
|
198
|
+
auth: buildAuthConfig(runtime, credentialsOf(context), baseUrl),
|
|
199
|
+
debug
|
|
200
|
+
};
|
|
201
|
+
return createCLIClient(runtime, { ...applyEnvironmentHeaders(initialConfig, environment.headers), allowInsecureLocalTls });
|
|
202
|
+
}
|
|
203
|
+
/** The inspection view of the client `createConfiguredClient` would build (auth presence only). */
|
|
204
|
+
export async function createAPIClientConfig(runtime, context) {
|
|
205
|
+
const environment = await resolveClientEnvironment(runtime, context);
|
|
206
|
+
const credentials = credentialsOf(context);
|
|
207
|
+
const auth = credentials?.apiKey
|
|
208
|
+
? { type: 'apiKey' }
|
|
209
|
+
: credentials?.sessionToken
|
|
210
|
+
? credentials.refreshToken
|
|
211
|
+
? { type: 'session', hasRefreshToken: true }
|
|
212
|
+
: { type: 'session' }
|
|
213
|
+
: { type: 'none' };
|
|
214
|
+
return ApiClientInspectionSchema.parse({
|
|
215
|
+
baseUrl: environment.apiUrl,
|
|
216
|
+
environment: environment.name,
|
|
217
|
+
tier: environment.tier,
|
|
218
|
+
auth,
|
|
219
|
+
headers: environment.headers ? Object.fromEntries(Object.entries(environment.headers).map(([name, value]) => [name, redactCredentials(`${name}=credential-value`) !== `${name}=credential-value` ? '[redacted]' : redactCredentials(value)])) : undefined,
|
|
220
|
+
timeout: (await loadClientSettings(runtime)).timeoutMs,
|
|
221
|
+
retries: 3,
|
|
222
|
+
debug: await resolveDebugFlag(context)
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Probe `endpoint` on the selected API origin with a plain fetch (the client
|
|
227
|
+
* abstracts status codes away; a connection test reports the real one). A
|
|
228
|
+
* transport failure is a failed probe carrying the failure's message.
|
|
229
|
+
*/
|
|
230
|
+
export async function testAPIConnection(runtime, endpoint = '/api/health', context, options = {}) {
|
|
231
|
+
const environment = await resolveClientEnvironment(runtime, context);
|
|
232
|
+
const start = runtime.lifecycle.now();
|
|
233
|
+
options = readClientFields(() => ({ ...options }), 'client-probe-unreadable');
|
|
234
|
+
const url = new URL(endpoint, environment.apiUrl);
|
|
235
|
+
if (url.origin !== new URL(environment.apiUrl).origin)
|
|
236
|
+
throw new CapabilityError('The API probe must stay on its selected origin.', 'INVALID_INPUT', { reason: 'client-probe-origin-mismatch' });
|
|
237
|
+
const deadline = createTimeoutSignal(runtime, readClientValue(z.number().int().positive(), options.timeout ?? 10000, 'client-probe-timeout-invalid'));
|
|
238
|
+
const method = readClientValue(z.enum(['GET', 'POST', 'PUT', 'DELETE']), options.method ?? 'GET', 'client-probe-method-invalid');
|
|
239
|
+
try {
|
|
240
|
+
const response = await fetch(url, {
|
|
241
|
+
method,
|
|
242
|
+
headers: environment.headers,
|
|
243
|
+
signal: deadline.signal
|
|
244
|
+
});
|
|
245
|
+
return { success: response.ok, status: response.status, latency: runtime.lifecycle.now() - start };
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
const failure = CaughtFailureSchema.parse(error);
|
|
249
|
+
return {
|
|
250
|
+
success: false,
|
|
251
|
+
status: 0,
|
|
252
|
+
latency: runtime.lifecycle.now() - start,
|
|
253
|
+
error: LoggedErrorSchema.parse(failure).message,
|
|
254
|
+
failure: valueFreeFailure(failure)
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
finally {
|
|
258
|
+
deadline.dispose();
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=configured.js.map
|