@zackbart/connecta 0.37.0 → 0.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +80 -0
- package/README.md +2 -2
- package/bin/connecta.mjs +1 -39
- package/bin/version.mjs +1 -1
- package/dist/access-tokens.js +2 -4
- package/dist/agent-identity.js +1 -1
- package/dist/auth/clerk-sdk/generated.js +2 -1
- package/dist/auth/cloudflare-access.d.ts +3 -1
- package/dist/auth/cloudflare-access.js +22 -11
- package/dist/auth/downstream-oauth.js +195 -270
- package/dist/auth/downstream-revocation.js +1 -1
- package/dist/auth/oauth-grant.js +11 -0
- package/dist/auth/oauth-token-response.js +1 -1
- package/dist/auth/vercel-agent.js +2 -1
- package/dist/auth-elicitation.js +2 -2
- package/dist/branding.d.ts +1 -15
- package/dist/branding.js +2 -2
- package/dist/bytes.js +42 -0
- package/dist/call-admission-context.js +2 -5
- package/dist/call-admission.js +5 -0
- package/dist/call-recovery.js +0 -3
- package/dist/catalog-cache.js +26 -7
- package/dist/catalog-fingerprint.js +2 -18
- package/dist/catalog-revision.js +9 -0
- package/dist/catalog-service.js +51 -20
- package/dist/config-defaults.d.ts +1 -0
- package/dist/config-defaults.js +1 -0
- package/dist/config-schema.d.ts +1 -1
- package/dist/config-schema.js +6 -2
- package/dist/config.d.ts +41 -14
- package/dist/config.js +21 -71
- package/dist/connector-caller.js +1 -1
- package/dist/connectors/api-connector.js +4 -3
- package/dist/connectors/guarded-fetch.d.ts +0 -6
- package/dist/connectors/guarded-fetch.js +1 -11
- package/dist/connectors/remote-mcp.js +93 -69
- package/dist/connectors/resource-uri.js +0 -4
- package/dist/credentials.js +3 -0
- package/dist/d1.d.ts +0 -89
- package/dist/d1.js +0 -34
- package/dist/downstream-input.js +2 -2
- package/dist/execute.js +161 -116
- package/dist/executor-result.js +2 -1
- package/dist/executors/quickjs-runtime.js +2 -25
- package/dist/executors/quickjs.js +1 -1
- package/dist/guest-runtime.js +5 -3
- package/dist/guest-types.d.ts +5 -5
- package/dist/http/client.js +1 -1
- package/dist/http/errors.js +2 -2
- package/dist/http/json-schema.js +1 -1
- package/dist/http/node-transport.js +0 -1
- package/dist/http/oauth.js +1 -1
- package/dist/http/paging.js +6 -9
- package/dist/http/provider.js +1 -1
- package/dist/http/safety.js +1 -1
- package/dist/http/services.js +1 -8
- package/dist/http/tools.js +1 -7
- package/dist/http/vendor.js +7 -7
- package/dist/identity.js +2 -6
- package/dist/index.js +1 -2
- package/dist/invocation-auth.js +2 -1
- package/dist/invocation.js +8 -2
- package/dist/meta-tools.js +27 -27
- package/dist/native-tools.js +2 -1
- package/dist/oauth-handoff.js +2 -2
- package/dist/operation-vocabulary.js +1 -1
- package/dist/operator-record.d.ts +8 -2
- package/dist/operator-record.js +18 -50
- package/dist/operator-ui/contract.d.ts +4 -2
- package/dist/operator-ui/generated.js +3 -3
- package/dist/operator-ui/model.d.ts +7 -2
- package/dist/program-writes.js +3 -8
- package/dist/provider-call.js +0 -7
- package/dist/provider.d.ts +1 -1
- package/dist/providers/_shared/google/kit.js +1 -6
- package/dist/providers/_shared/google/service-account.js +1 -3
- package/dist/providers/_shared/google/workspace.d.ts +1 -1
- package/dist/providers/_shared/guide.js +3 -0
- package/dist/providers/_shared/json.js +12 -0
- package/dist/providers/_shared/rest/compact-index.js +1 -1
- package/dist/providers/_shared/rest/kit.js +1 -3
- package/dist/providers/_shared/rest/operation-index.js +1 -3
- package/dist/providers/_shared/rest/value-safety.js +26 -28
- package/dist/providers/breeze/api.js +2 -7
- package/dist/providers/breeze/index.js +4 -2
- package/dist/providers/breeze/tools.js +3 -4
- package/dist/providers/ccb/api.js +1 -6
- package/dist/providers/ccb/index.js +2 -1
- package/dist/providers/ccb/tools.js +1 -6
- package/dist/providers/cloudflare/api.js +2 -2
- package/dist/providers/cloudflare/index.js +2 -1
- package/dist/providers/cloudflare/safety.js +3 -3
- package/dist/providers/docs/tools.js +2 -10
- package/dist/providers/drive/tools.js +12 -25
- package/dist/providers/forms/tools.js +1 -9
- package/dist/providers/gmail/tools.js +5 -21
- package/dist/providers/overflow/api.js +1 -3
- package/dist/providers/overflow/index.js +2 -1
- package/dist/providers/overflow/tools.js +3 -7
- package/dist/providers/planning-center/api.js +2 -1
- package/dist/providers/planning-center/lib/constants.d.ts +1 -1
- package/dist/providers/planning-center/lib/json-api.js +1 -9
- package/dist/providers/planning-center/tools.js +2 -1
- package/dist/providers/sheets/tools.js +1 -9
- package/dist/providers/slides/tools.js +4 -13
- package/dist/providers/stripe/index.js +2 -1
- package/dist/providers/stripe/safety.js +2 -2
- package/dist/providers/tithely/api.js +2 -7
- package/dist/providers/tithely/index.js +3 -2
- package/dist/providers/tithely/tools.js +7 -5
- package/dist/providers/vercel/api.js +1 -6
- package/dist/providers/vercel/lib/pin.js +1 -1
- package/dist/providers/vercel/safety.js +1 -1
- package/dist/providers/vercel/tools.js +2 -1
- package/dist/redaction-marker.js +2 -2
- package/dist/registry.d.ts +4 -1
- package/dist/registry.js +35 -22
- package/dist/request-principal.js +15 -2
- package/dist/request-state.js +2 -2
- package/dist/routes/access-tokens.js +1 -1
- package/dist/routes/activity-disclosure.js +1 -1
- package/dist/routes/connect.js +2 -2
- package/dist/routes/credentials.js +1 -1
- package/dist/routes/dispatch.js +10 -0
- package/dist/routes/mcp.js +23 -21
- package/dist/routes/oauth-management.js +1 -1
- package/dist/routes/operator.js +53 -7
- package/dist/routes/shared.d.ts +8 -8
- package/dist/routes/shared.js +22 -15
- package/dist/routes/ui-config.js +6 -6
- package/dist/routes/ui-data.js +2 -2
- package/dist/routes/ui.js +9 -4
- package/dist/runtime/call-admission.js +1 -1
- package/dist/runtime/call.js +1 -1
- package/dist/runtime/settlement.js +1 -1
- package/dist/runtime/shared-read.js +2 -15
- package/dist/sent-secrets.d.ts +14 -6
- package/dist/sent-secrets.js +231 -85
- package/dist/server.js +4 -4
- package/dist/skills.js +8 -35
- package/dist/sqlite.d.ts +0 -19
- package/dist/sqlite.js +2 -83
- package/dist/storage/keys.js +29 -124
- package/dist/storage/sql-native.js +14 -111
- package/dist/storage/sql.d.ts +1 -24
- package/dist/storage/sql.js +1 -12
- package/dist/tool-error.js +4 -0
- package/dist/types.d.ts +4 -3
- package/dist/ui.js +3 -0
- package/dist/url-safety.js +0 -4
- package/dist/usage-guide.js +2 -2
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/worker.js +1 -1
- package/documentation/README.md +6 -42
- package/documentation/architecture.md +190 -507
- package/documentation/auth.md +172 -58
- package/documentation/code-mode.md +98 -66
- package/documentation/deploying.md +19 -40
- package/documentation/integrating.md +8 -19
- package/documentation/meta-tools.md +23 -6
- package/documentation/migration-0.33.md +5 -5
- package/documentation/migration-0.34.md +2 -4
- package/documentation/migration-retired-layouts.md +74 -0
- package/documentation/operator-tests.md +19 -119
- package/documentation/operator-ui.md +46 -8
- package/documentation/provider-auth-migration.md +4 -10
- package/documentation/provider-migration-0.29.md +4 -15
- package/examples/worker/AGENTS.md +4 -6
- package/examples/worker/README.md +20 -115
- package/guides/connecting-agents.md +7 -30
- package/guides/how-it-works.md +2 -2
- package/guides/safety-and-trust.md +4 -1
- package/package.json +19 -19
- package/templates/node/README.md +9 -26
- package/templates/node/package.json +1 -1
- package/dist/auth/oauth-v2-migration.js +0 -135
- package/dist/provider-call-facts.d.ts +0 -115
- package/dist/provider-call.d.ts +0 -112
- package/dist/storage/d1-copy.js +0 -255
- package/dist/storage/sql-schema.d.ts +0 -6
- package/examples/worker/kv-to-d1.wrangler.jsonc +0 -26
- package/examples/worker/scripts/copy-kv-to-d1.mjs +0 -162
|
@@ -8,7 +8,7 @@ type FailureStep = "MCP handshake" | "tools/list" | "tools/call" | "resources/re
|
|
|
8
8
|
*/
|
|
9
9
|
export declare const OAUTH_ERROR_CODES: ReadonlySet<string>;
|
|
10
10
|
/** Inbound denial facts, never identity text or provider diagnostics. */
|
|
11
|
-
export type AuthDenialReason = "authentication_abandoned_saturated" | "authentication_busy" | "authentication_failed" | "authentication_unreachable" | "authorization_header_invalid" | "token_type_mismatch" | "oauth_verification_failed" | "oauth_client_not_allowed" | "oauth_binding_mismatch" | "session_origin_mismatch" | "token_identity_mismatch" | "organization_membership_denied" | "organization_lookup_failed" | "organization_lookup_busy" | "user_missing" | "email_lookup_failed" | "verified_email_invalid" | "email_domain_denied" | "gate_denied" | "gate_failed" | "not_maintainer" | "pool_not_declared" | "not_pool_member";
|
|
11
|
+
export type AuthDenialReason = "authentication_abandoned_saturated" | "authentication_busy" | "authentication_failed" | "authentication_provider_missing" | "authentication_unreachable" | "access_context_missing" | "access_context_unavailable" | "access_audience_invalid" | "access_identity_unavailable" | "access_authorization_header_rejected" | "authorization_header_invalid" | "token_type_mismatch" | "oauth_verification_failed" | "oauth_client_not_allowed" | "oauth_binding_mismatch" | "session_origin_mismatch" | "token_identity_mismatch" | "organization_membership_denied" | "organization_lookup_failed" | "organization_lookup_busy" | "user_missing" | "email_lookup_failed" | "verified_email_invalid" | "email_domain_denied" | "gate_denied" | "gate_failed" | "not_maintainer" | "pool_not_declared" | "not_pool_member";
|
|
12
12
|
/**
|
|
13
13
|
* Name `ctor`'s instances `label` in records and fixed text. Call once, at
|
|
14
14
|
* module scope, beside the class. An error whose prototype chain reaches no
|
|
@@ -25,6 +25,8 @@ export declare function labelErrorClass(ctor: {
|
|
|
25
25
|
export declare function errorLabel(failure: unknown): string | undefined;
|
|
26
26
|
/** Facts connecta derived about a failure where it saw it. */
|
|
27
27
|
export interface FailureFacts {
|
|
28
|
+
/** Inbound refusal classification attached to its Response, never its body. */
|
|
29
|
+
reason?: AuthDenialReason;
|
|
28
30
|
step?: FailureStep;
|
|
29
31
|
/** Scheme, host, and port of the request that failed. */
|
|
30
32
|
origin?: string;
|
|
@@ -40,6 +42,8 @@ export declare function carryFailureFacts<T>(from: unknown, to: T): T;
|
|
|
40
42
|
/** What a failure record may be about. Only these fields are read. */
|
|
41
43
|
export interface FailureSubject {
|
|
42
44
|
reason?: AuthDenialReason;
|
|
45
|
+
accessContext?: boolean;
|
|
46
|
+
authorizationHeader?: "absent" | "bearer" | "invalid";
|
|
43
47
|
/** A registered connector's id. */
|
|
44
48
|
connector?: string;
|
|
45
49
|
/**
|
|
@@ -62,6 +66,8 @@ declare const recordBrand: unique symbol;
|
|
|
62
66
|
export interface FailureRecord {
|
|
63
67
|
readonly [recordBrand]: true;
|
|
64
68
|
readonly reason?: AuthDenialReason;
|
|
69
|
+
readonly accessContext?: boolean;
|
|
70
|
+
readonly authorizationHeader?: "absent" | "bearer" | "invalid";
|
|
65
71
|
readonly connector?: string;
|
|
66
72
|
readonly tool?: string;
|
|
67
73
|
readonly source?: string;
|
|
@@ -104,7 +110,7 @@ export declare function failureRecord(subject: FailureSubject, failure?: unknown
|
|
|
104
110
|
* The events an operator log reports failures as. Closed: a new one is a
|
|
105
111
|
* reviewed line here, never a string assembled at the call site.
|
|
106
112
|
*/
|
|
107
|
-
export type FailureEvent = "Authentication admission refused" | "Authentication released after its pending work became unreachable" | "negotiation cache read failed" | "negotiation cache write failed" | "pool tool grant is unreachable" | "call failed" | "input schema unusable; arguments are not validated" | "catalog read failed" | "catalog persistence failed" | "catalog invalidation failed" | "catalog refresh observation failed" | "catalog refresh failed; serving stale catalog" | "deferred catalog refresh failed" | "deferred catalog refresh could not attach to the runtime" | "catalog drift check failed" | "schema digest check failed; serving digested reviews as writes" | "credential shape read failed" | "credential test failed" | "credential test threw" | "session termination refused or failed; the downstream session may remain until its provider timeout" | "activity record failed" | "catalog drift record failed" | "activity read failed" | "OAuth start failed" | "OAuth disconnect failed" | "OAuth callback verifyState threw; no authorization code was exchanged" | "OAuth callback handoff could not be consumed; no authorization code was exchanged" | "MCP default endpoint request denied" | "MCP pool request denied" | "MCP agent endpoint request denied" | "OAuth error callback consent could not be consumed; no authorization code was exchanged" | "MCP handler error" | "operator status" | "operator agent slots read failed" | "result paging unavailable" | "native catalog unavailable" | "native name collision" | "native tools/list refused a pool over the 1,000-tool native cap" | "request failed" | "Clerk request denied" | "Clerk authentication failed";
|
|
113
|
+
export type FailureEvent = "Authentication admission refused" | "Cloudflare Access verification unavailable" | "operator_refused" | "Authentication released after its pending work became unreachable" | "negotiation cache read failed" | "negotiation cache write failed" | "pool tool grant is unreachable" | "call failed" | "input schema unusable; arguments are not validated" | "catalog read failed" | "catalog persistence failed" | "catalog invalidation failed" | "catalog refresh observation failed" | "catalog refresh failed; serving stale catalog" | "deferred catalog refresh failed" | "deferred catalog refresh could not attach to the runtime" | "catalog drift check failed" | "schema digest check failed; serving digested reviews as writes" | "credential shape read failed" | "credential test failed" | "credential test threw" | "session termination refused or failed; the downstream session may remain until its provider timeout" | "activity record failed" | "catalog drift record failed" | "activity read failed" | "OAuth start failed" | "OAuth disconnect failed" | "OAuth callback verifyState threw; no authorization code was exchanged" | "OAuth callback handoff could not be consumed; no authorization code was exchanged" | "MCP default endpoint request denied" | "MCP pool request denied" | "MCP agent endpoint request denied" | "OAuth error callback consent could not be consumed; no authorization code was exchanged" | "MCP handler error" | "operator status" | "operator agent slots read failed" | "result paging unavailable" | "native catalog unavailable" | "native name collision" | "native tools/list refused a pool over the 1,000-tool native cap" | "request failed" | "Clerk request denied" | "Clerk authentication failed";
|
|
108
114
|
/**
|
|
109
115
|
* Log one failure as `[connecta] <event>` and its record. A record
|
|
110
116
|
* `failureRecord` did not build is replaced, whatever its shape, by a fixed
|
package/dist/operator-record.js
CHANGED
|
@@ -1,52 +1,4 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Web-API only — no node: imports here.
|
|
3
|
-
//
|
|
4
|
-
// Inbound identity-provider text never enters operator logs or status, even
|
|
5
|
-
// when it fits a grammar. Activity retains its separate typed actor fields.
|
|
6
|
-
//
|
|
7
|
-
// Threat model. INV-6 here covers records of calls and failures: logs,
|
|
8
|
-
// activity rows, status and statusFor, health, doctor output, and any native
|
|
9
|
-
// runtime output connecta triggers (workerd's console). Text a downstream
|
|
10
|
-
// server, HTTP API, or client authored, and anything derived from it, never
|
|
11
|
-
// reaches one as arbitrary text. Self-declared client name/version facts in
|
|
12
|
-
// activity use the bounded ASCII grammars in activityClientFact; invalid values are
|
|
13
|
-
// absent at recording, SQL write/read, and operator UI boundaries. Client
|
|
14
|
-
// capabilities and other metadata are never recorded. Every typed field
|
|
15
|
-
// connecta records is checked against a closed set or a grammar. Operator-
|
|
16
|
-
// authored code (custom connectors, plugin `status()`, decorators) is trusted
|
|
17
|
-
// to follow the contract, and connecta still checks
|
|
18
|
-
// the typed fields it records from it; deliberately adversarial operator code
|
|
19
|
-
// is out of scope.
|
|
20
|
-
//
|
|
21
|
-
// Catalog metadata a connector serves is configuration the operator chose to
|
|
22
|
-
// load, and agents already see it: a tool name that fits MCP's tool-name
|
|
23
|
-
// grammar, a description, and input and output schemas may appear in the
|
|
24
|
-
// authenticated operator page's catalog views, and such a name may be
|
|
25
|
-
// logged. A name outside the grammar is withheld everywhere operator-facing,
|
|
26
|
-
// the page included. Names containing C0, DEL, or C1 are dropped at catalog
|
|
27
|
-
// intake; spaces and non-ASCII names remain callable with withheld records.
|
|
28
|
-
//
|
|
29
|
-
// INV-6 says logs carry no arguments, results, code, or raw downstream error
|
|
30
|
-
// text. Filtering errors where they arise kept missing sources: a validator's
|
|
31
|
-
// diagnostic, a stream's TypeError, a JSON-RPC error the agent may see. So the
|
|
32
|
-
// rule is enforced here, at the sink. A failure reaches an operator only as
|
|
33
|
-
// the fields of a `FailureRecord`, which `failureRecord` alone builds: each
|
|
34
|
-
// one copied from an explicit list, checked against a constant table or a
|
|
35
|
-
// grammar, and never taken from an error's message, cause, stack, data,
|
|
36
|
-
// nested errors, or name. `logFailure` writes nothing else, and every status
|
|
37
|
-
// message about a failure comes from `describeFailure`
|
|
38
|
-
// (test/operator-record-sources.node.test.ts holds src/ to that).
|
|
39
|
-
//
|
|
40
|
-
// Provenance is by identity, never by shape. Text that merely looks like
|
|
41
|
-
// connecta's (an error named like one of its classes, a status sentence
|
|
42
|
-
// shaped like a record) carries no weight: a class label comes from the
|
|
43
|
-
// prototype chain, a status message from the status object connecta built.
|
|
44
|
-
//
|
|
45
|
-
// Agent-facing results are a different surface with a different rule: a
|
|
46
|
-
// downstream's own answer to a call may reach the agent that made it (see
|
|
47
|
-
// documentation/architecture.md, "Errors and records"). Core's sent-secrets
|
|
48
|
-
// boundary removes credentials used by the upstream request from those answers, including
|
|
49
|
-
// allowed diagnostics, tool results and nested error causes/data (INV-5).
|
|
1
|
+
// Payload-free operator failure records. See documentation/architecture.md, "Errors and records".
|
|
50
2
|
import { carryProviderFailure } from "./provider-call-facts.js";
|
|
51
3
|
import { followRedactedCopies, keepErrorName } from "./redaction-identity.js";
|
|
52
4
|
import { classificationCode, ConnectorCallError, NETWORK_ERROR_CODES, WithheldTextError, } from "./errors.js";
|
|
@@ -98,14 +50,26 @@ const SOURCES = new Set([
|
|
|
98
50
|
"resume_execution",
|
|
99
51
|
]);
|
|
100
52
|
const MODES = new Set(["continue", "restart"]);
|
|
101
|
-
const STATUS_STATES = new Set([
|
|
53
|
+
const STATUS_STATES = new Set([
|
|
54
|
+
"ok",
|
|
55
|
+
"per_caller",
|
|
56
|
+
"auth_required",
|
|
57
|
+
"credential_required",
|
|
58
|
+
"error",
|
|
59
|
+
]);
|
|
102
60
|
/** A status state, or `failed` for a status that could not be read at all. */
|
|
103
61
|
const STATES = new Set([...STATUS_STATES, "failed"]);
|
|
104
62
|
const AUTH_DENIAL_REASONS = new Set([
|
|
105
63
|
"authentication_abandoned_saturated",
|
|
106
64
|
"authentication_busy",
|
|
107
65
|
"authentication_failed",
|
|
66
|
+
"authentication_provider_missing",
|
|
108
67
|
"authentication_unreachable",
|
|
68
|
+
"access_context_missing",
|
|
69
|
+
"access_context_unavailable",
|
|
70
|
+
"access_audience_invalid",
|
|
71
|
+
"access_identity_unavailable",
|
|
72
|
+
"access_authorization_header_rejected",
|
|
109
73
|
"authorization_header_invalid",
|
|
110
74
|
"token_type_mismatch",
|
|
111
75
|
"oauth_verification_failed",
|
|
@@ -126,6 +90,7 @@ const AUTH_DENIAL_REASONS = new Set([
|
|
|
126
90
|
"pool_not_declared",
|
|
127
91
|
"not_pool_member",
|
|
128
92
|
]);
|
|
93
|
+
const AUTHORIZATION_HEADER_KINDS = new Set(["absent", "bearer", "invalid"]);
|
|
129
94
|
/** The registry's connector id grammar (src/registry.ts). */
|
|
130
95
|
const CONNECTOR_ID_RE = /^[a-z0-9_-]{1,64}$/;
|
|
131
96
|
/** MCP's tool name grammar (SEP-986). */
|
|
@@ -222,6 +187,7 @@ function checkedFacts(facts) {
|
|
|
222
187
|
if (!facts)
|
|
223
188
|
return {};
|
|
224
189
|
return {
|
|
190
|
+
...defined("reason", member(facts.reason, AUTH_DENIAL_REASONS)),
|
|
225
191
|
...defined("step", member(facts.step, STEPS)),
|
|
226
192
|
...defined("origin", origin(facts.origin)),
|
|
227
193
|
...defined("httpStatus", httpStatus(facts.httpStatus)),
|
|
@@ -279,6 +245,8 @@ function checkedSubject(subject) {
|
|
|
279
245
|
const tool = subject.tool;
|
|
280
246
|
return {
|
|
281
247
|
...defined("reason", member(subject.reason, AUTH_DENIAL_REASONS)),
|
|
248
|
+
...defined("accessContext", typeof subject.accessContext === "boolean" ? subject.accessContext : undefined),
|
|
249
|
+
...defined("authorizationHeader", member(subject.authorizationHeader, AUTHORIZATION_HEADER_KINDS)),
|
|
282
250
|
...defined("connector", connectorId(subject.connector)),
|
|
283
251
|
...("tool" in subject
|
|
284
252
|
? { tool: tool === null || typeof tool !== "object" ? UNLISTED_TOOL : recordedToolName(tool) }
|
|
@@ -26,7 +26,7 @@ export interface OperatorConnectorOverlay {
|
|
|
26
26
|
/** Latest visible call in the bounded activity window, or null when unknown. */
|
|
27
27
|
lastCall: OperatorLastCall | null;
|
|
28
28
|
}
|
|
29
|
-
/** Whole connector access, or exact tool grants. `requireReadOnly` is always false since guarded grants were removed
|
|
29
|
+
/** Whole connector access, or exact tool grants. `requireReadOnly` is always false since guarded grants were removed. */
|
|
30
30
|
export interface OperatorGrant {
|
|
31
31
|
connectorId: string;
|
|
32
32
|
tools: "all" | Array<{
|
|
@@ -193,7 +193,9 @@ export interface OperatorUiContractV2 {
|
|
|
193
193
|
connectors: OperatorMemberConnector[];
|
|
194
194
|
you: {
|
|
195
195
|
interactive: boolean;
|
|
196
|
+
/** Opaque admitted identity partition; never an authorization credential. */
|
|
197
|
+
viewerKey: string;
|
|
196
198
|
};
|
|
197
199
|
}
|
|
198
|
-
/** The operator contract `GET /ui/api/config` serves; schema version 1 was removed
|
|
200
|
+
/** The operator contract `GET /ui/api/config` serves; schema version 1 was removed. */
|
|
199
201
|
export type OperatorUiContract = OperatorUiContractV2;
|