arc-1 0.9.25 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -12
- package/dist/adt/abapgit.d.ts +19 -6
- package/dist/adt/abapgit.d.ts.map +1 -1
- package/dist/adt/abapgit.js +141 -36
- package/dist/adt/abapgit.js.map +1 -1
- package/dist/adt/authorization-trace.d.ts +23 -0
- package/dist/adt/authorization-trace.d.ts.map +1 -0
- package/dist/adt/authorization-trace.js +196 -0
- package/dist/adt/authorization-trace.js.map +1 -0
- package/dist/adt/client.d.ts +21 -8
- package/dist/adt/client.d.ts.map +1 -1
- package/dist/adt/client.js +47 -7
- package/dist/adt/client.js.map +1 -1
- package/dist/adt/config.d.ts +15 -0
- package/dist/adt/config.d.ts.map +1 -1
- package/dist/adt/config.js.map +1 -1
- package/dist/adt/crud.d.ts +7 -2
- package/dist/adt/crud.d.ts.map +1 -1
- package/dist/adt/crud.js +12 -4
- package/dist/adt/crud.js.map +1 -1
- package/dist/adt/ddic-xml.d.ts +27 -17
- package/dist/adt/ddic-xml.d.ts.map +1 -1
- package/dist/adt/ddic-xml.js +45 -34
- package/dist/adt/ddic-xml.js.map +1 -1
- package/dist/adt/devtools.d.ts +13 -0
- package/dist/adt/devtools.d.ts.map +1 -1
- package/dist/adt/devtools.js +120 -50
- package/dist/adt/devtools.js.map +1 -1
- package/dist/adt/diagnostics.d.ts +1 -1
- package/dist/adt/diagnostics.d.ts.map +1 -1
- package/dist/adt/diagnostics.js +1 -0
- package/dist/adt/diagnostics.js.map +1 -1
- package/dist/adt/errors.d.ts +8 -8
- package/dist/adt/errors.d.ts.map +1 -1
- package/dist/adt/errors.js +30 -11
- package/dist/adt/errors.js.map +1 -1
- package/dist/adt/http.d.ts +17 -1
- package/dist/adt/http.d.ts.map +1 -1
- package/dist/adt/http.js +102 -19
- package/dist/adt/http.js.map +1 -1
- package/dist/adt/oauth.d.ts +2 -2
- package/dist/adt/oauth.d.ts.map +1 -1
- package/dist/adt/oauth.js +5 -3
- package/dist/adt/oauth.js.map +1 -1
- package/dist/adt/package-hierarchy.d.ts.map +1 -1
- package/dist/adt/package-hierarchy.js.map +1 -1
- package/dist/adt/rap-generate.js.map +1 -1
- package/dist/adt/rap-handlers.js.map +1 -1
- package/dist/adt/rap-preflight.js.map +1 -1
- package/dist/adt/safety.d.ts +13 -13
- package/dist/adt/safety.d.ts.map +1 -1
- package/dist/adt/semaphore.d.ts.map +1 -1
- package/dist/adt/server-driven.d.ts +154 -34
- package/dist/adt/server-driven.d.ts.map +1 -1
- package/dist/adt/server-driven.js +178 -53
- package/dist/adt/server-driven.js.map +1 -1
- package/dist/adt/structure-hierarchy.js.map +1 -1
- package/dist/adt/transport.d.ts +6 -6
- package/dist/adt/transport.d.ts.map +1 -1
- package/dist/adt/transport.js +23 -34
- package/dist/adt/transport.js.map +1 -1
- package/dist/adt/types.d.ts +94 -6
- package/dist/adt/types.d.ts.map +1 -1
- package/dist/adt/version-diff.js.map +1 -1
- package/dist/adt/xml-parser.d.ts +52 -12
- package/dist/adt/xml-parser.d.ts.map +1 -1
- package/dist/adt/xml-parser.js +120 -10
- package/dist/adt/xml-parser.js.map +1 -1
- package/dist/aff/validator.js.map +1 -1
- package/dist/authz/policy.d.ts +8 -0
- package/dist/authz/policy.d.ts.map +1 -1
- package/dist/authz/policy.js +24 -0
- package/dist/authz/policy.js.map +1 -1
- package/dist/cache/cache.d.ts +4 -36
- package/dist/cache/cache.d.ts.map +1 -1
- package/dist/cache/cache.js +4 -5
- package/dist/cache/cache.js.map +1 -1
- package/dist/cache/caching-layer.d.ts +6 -22
- package/dist/cache/caching-layer.d.ts.map +1 -1
- package/dist/cache/caching-layer.js +5 -29
- package/dist/cache/caching-layer.js.map +1 -1
- package/dist/cache/inactive-list-cache.d.ts.map +1 -1
- package/dist/cache/memory.d.ts +2 -13
- package/dist/cache/memory.d.ts.map +1 -1
- package/dist/cache/memory.js +1 -70
- package/dist/cache/memory.js.map +1 -1
- package/dist/cache/sqlite.d.ts +3 -10
- package/dist/cache/sqlite.d.ts.map +1 -1
- package/dist/cache/sqlite.js +9 -85
- package/dist/cache/sqlite.js.map +1 -1
- package/dist/cli.js +6 -3
- package/dist/cli.js.map +1 -1
- package/dist/context/compressor.js.map +1 -1
- package/dist/context/grep.js.map +1 -1
- package/dist/context/unit-surgery.d.ts +28 -0
- package/dist/context/unit-surgery.d.ts.map +1 -0
- package/dist/context/unit-surgery.js +150 -0
- package/dist/context/unit-surgery.js.map +1 -0
- package/dist/extract-sap-cookies.js.map +1 -1
- package/dist/handlers/activate.d.ts.map +1 -1
- package/dist/handlers/activate.js +44 -6
- package/dist/handlers/activate.js.map +1 -1
- package/dist/handlers/context.d.ts +1 -1
- package/dist/handlers/context.d.ts.map +1 -1
- package/dist/handlers/context.js +98 -28
- package/dist/handlers/context.js.map +1 -1
- package/dist/handlers/diagnose.d.ts.map +1 -1
- package/dist/handlers/diagnose.js +74 -31
- package/dist/handlers/diagnose.js.map +1 -1
- package/dist/handlers/dispatch.d.ts +12 -1
- package/dist/handlers/dispatch.d.ts.map +1 -1
- package/dist/handlers/dispatch.js +160 -25
- package/dist/handlers/dispatch.js.map +1 -1
- package/dist/handlers/feature-cache.d.ts +27 -14
- package/dist/handlers/feature-cache.d.ts.map +1 -1
- package/dist/handlers/feature-cache.js +63 -25
- package/dist/handlers/feature-cache.js.map +1 -1
- package/dist/handlers/function-processing.d.ts +61 -0
- package/dist/handlers/function-processing.d.ts.map +1 -0
- package/dist/handlers/function-processing.js +45 -0
- package/dist/handlers/function-processing.js.map +1 -0
- package/dist/handlers/git.d.ts.map +1 -1
- package/dist/handlers/git.js +44 -19
- package/dist/handlers/git.js.map +1 -1
- package/dist/handlers/hyperfocused.d.ts.map +1 -1
- package/dist/handlers/hyperfocused.js +2 -3
- package/dist/handlers/hyperfocused.js.map +1 -1
- package/dist/handlers/lint.d.ts.map +1 -1
- package/dist/handlers/lint.js +7 -7
- package/dist/handlers/lint.js.map +1 -1
- package/dist/handlers/manage.d.ts.map +1 -1
- package/dist/handlers/manage.js +47 -28
- package/dist/handlers/manage.js.map +1 -1
- package/dist/handlers/navigate.d.ts.map +1 -1
- package/dist/handlers/navigate.js +27 -90
- package/dist/handlers/navigate.js.map +1 -1
- package/dist/handlers/object-types.d.ts +2 -0
- package/dist/handlers/object-types.d.ts.map +1 -1
- package/dist/handlers/object-types.js +10 -0
- package/dist/handlers/object-types.js.map +1 -1
- package/dist/handlers/query-errors.d.ts +11 -0
- package/dist/handlers/query-errors.d.ts.map +1 -0
- package/dist/handlers/query-errors.js +216 -0
- package/dist/handlers/query-errors.js.map +1 -0
- package/dist/handlers/query.d.ts.map +1 -1
- package/dist/handlers/query.js +62 -67
- package/dist/handlers/query.js.map +1 -1
- package/dist/handlers/read.d.ts.map +1 -1
- package/dist/handlers/read.js +64 -41
- package/dist/handlers/read.js.map +1 -1
- package/dist/handlers/schemas.d.ts +285 -234
- package/dist/handlers/schemas.d.ts.map +1 -1
- package/dist/handlers/schemas.js +126 -32
- package/dist/handlers/schemas.js.map +1 -1
- package/dist/handlers/search.d.ts.map +1 -1
- package/dist/handlers/search.js +8 -7
- package/dist/handlers/search.js.map +1 -1
- package/dist/handlers/shared.d.ts +13 -0
- package/dist/handlers/shared.d.ts.map +1 -1
- package/dist/handlers/shared.js +15 -0
- package/dist/handlers/shared.js.map +1 -1
- package/dist/handlers/tool-descriptions.d.ts +4 -0
- package/dist/handlers/tool-descriptions.d.ts.map +1 -0
- package/dist/handlers/tool-descriptions.js +52 -0
- package/dist/handlers/tool-descriptions.js.map +1 -0
- package/dist/handlers/tool-registry.d.ts +20 -6
- package/dist/handlers/tool-registry.d.ts.map +1 -1
- package/dist/handlers/tool-registry.js +18 -0
- package/dist/handlers/tool-registry.js.map +1 -1
- package/dist/handlers/tools.d.ts.map +1 -1
- package/dist/handlers/tools.js +124 -92
- package/dist/handlers/tools.js.map +1 -1
- package/dist/handlers/transport.d.ts +1 -1
- package/dist/handlers/transport.d.ts.map +1 -1
- package/dist/handlers/transport.js +37 -10
- package/dist/handlers/transport.js.map +1 -1
- package/dist/handlers/where-used.d.ts +25 -0
- package/dist/handlers/where-used.d.ts.map +1 -0
- package/dist/handlers/where-used.js +94 -0
- package/dist/handlers/where-used.js.map +1 -0
- package/dist/handlers/write/class-surgery.d.ts.map +1 -1
- package/dist/handlers/write/class-surgery.js +11 -12
- package/dist/handlers/write/class-surgery.js.map +1 -1
- package/dist/handlers/write/create.d.ts.map +1 -1
- package/dist/handlers/write/create.js +194 -84
- package/dist/handlers/write/create.js.map +1 -1
- package/dist/handlers/write/rap.d.ts.map +1 -1
- package/dist/handlers/write/rap.js +9 -9
- package/dist/handlers/write/rap.js.map +1 -1
- package/dist/handlers/write/unit-surgery.d.ts +5 -0
- package/dist/handlers/write/unit-surgery.d.ts.map +1 -0
- package/dist/handlers/write/unit-surgery.js +47 -0
- package/dist/handlers/write/unit-surgery.js.map +1 -0
- package/dist/handlers/write/update-delete.js +8 -8
- package/dist/handlers/write/update-delete.js.map +1 -1
- package/dist/handlers/write-helpers.d.ts +7 -4
- package/dist/handlers/write-helpers.d.ts.map +1 -1
- package/dist/handlers/write-helpers.js +118 -63
- package/dist/handlers/write-helpers.js.map +1 -1
- package/dist/handlers/write.d.ts.map +1 -1
- package/dist/handlers/write.js +35 -13
- package/dist/handlers/write.js.map +1 -1
- package/dist/lint/config-builder.js.map +1 -1
- package/dist/lint/lint.d.ts.map +1 -1
- package/dist/lint/lint.js +4 -2
- package/dist/lint/lint.js.map +1 -1
- package/dist/probe/catalog.js +1 -1
- package/dist/probe/catalog.js.map +1 -1
- package/dist/public/testing.js.map +1 -1
- package/dist/public/ui/app.js +1 -14
- package/dist/registry/tool-registry.d.ts.map +1 -1
- package/dist/server/audit.d.ts +27 -15
- package/dist/server/audit.d.ts.map +1 -1
- package/dist/server/audit.js.map +1 -1
- package/dist/server/auth-rate-limit.d.ts +18 -9
- package/dist/server/auth-rate-limit.d.ts.map +1 -1
- package/dist/server/auth-rate-limit.js +31 -6
- package/dist/server/auth-rate-limit.js.map +1 -1
- package/dist/server/auth-summary.d.ts +4 -0
- package/dist/server/auth-summary.d.ts.map +1 -0
- package/dist/server/auth-summary.js +67 -0
- package/dist/server/auth-summary.js.map +1 -0
- package/dist/server/config.d.ts.map +1 -1
- package/dist/server/config.js +110 -7
- package/dist/server/config.js.map +1 -1
- package/dist/server/context.d.ts +12 -0
- package/dist/server/context.d.ts.map +1 -1
- package/dist/server/context.js.map +1 -1
- package/dist/server/destination-discovery.d.ts +36 -0
- package/dist/server/destination-discovery.d.ts.map +1 -0
- package/dist/server/destination-discovery.js +130 -0
- package/dist/server/destination-discovery.js.map +1 -0
- package/dist/server/destination-registry.d.ts +111 -0
- package/dist/server/destination-registry.d.ts.map +1 -0
- package/dist/server/destination-registry.js +449 -0
- package/dist/server/destination-registry.js.map +1 -0
- package/dist/server/http.d.ts +43 -1
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +283 -73
- package/dist/server/http.js.map +1 -1
- package/dist/server/logger.d.ts.map +1 -1
- package/dist/server/logger.js +58 -13
- package/dist/server/logger.js.map +1 -1
- package/dist/server/mcp-rate-limit.d.ts +6 -4
- package/dist/server/mcp-rate-limit.d.ts.map +1 -1
- package/dist/server/mcp-rate-limit.js +6 -4
- package/dist/server/mcp-rate-limit.js.map +1 -1
- package/dist/server/multi-target-basic-auth.d.ts +49 -0
- package/dist/server/multi-target-basic-auth.d.ts.map +1 -0
- package/dist/server/multi-target-basic-auth.js +246 -0
- package/dist/server/multi-target-basic-auth.js.map +1 -0
- package/dist/server/multi-target-catalog.d.ts +33 -0
- package/dist/server/multi-target-catalog.d.ts.map +1 -0
- package/dist/server/multi-target-catalog.js +130 -0
- package/dist/server/multi-target-catalog.js.map +1 -0
- package/dist/server/multi-target-destination-config.d.ts +12 -0
- package/dist/server/multi-target-destination-config.d.ts.map +1 -0
- package/dist/server/multi-target-destination-config.js +37 -0
- package/dist/server/multi-target-destination-config.js.map +1 -0
- package/dist/server/multi-target-destination-runtime.d.ts +20 -0
- package/dist/server/multi-target-destination-runtime.d.ts.map +1 -0
- package/dist/server/multi-target-destination-runtime.js +191 -0
- package/dist/server/multi-target-destination-runtime.js.map +1 -0
- package/dist/server/multi-target-feature-state.d.ts +6 -0
- package/dist/server/multi-target-feature-state.d.ts.map +1 -0
- package/dist/server/multi-target-feature-state.js +41 -0
- package/dist/server/multi-target-feature-state.js.map +1 -0
- package/dist/server/multi-target-identity.d.ts +10 -0
- package/dist/server/multi-target-identity.d.ts.map +1 -0
- package/dist/server/multi-target-identity.js +18 -0
- package/dist/server/multi-target-identity.js.map +1 -0
- package/dist/server/multi-target-runtime.d.ts +27 -0
- package/dist/server/multi-target-runtime.d.ts.map +1 -0
- package/dist/server/multi-target-runtime.js +110 -0
- package/dist/server/multi-target-runtime.js.map +1 -0
- package/dist/server/multi-target-server.d.ts +53 -0
- package/dist/server/multi-target-server.d.ts.map +1 -0
- package/dist/server/multi-target-server.js +434 -0
- package/dist/server/multi-target-server.js.map +1 -0
- package/dist/server/multi-target-shared-auth-state.d.ts +82 -0
- package/dist/server/multi-target-shared-auth-state.d.ts.map +1 -0
- package/dist/server/multi-target-shared-auth-state.js +226 -0
- package/dist/server/multi-target-shared-auth-state.js.map +1 -0
- package/dist/server/multi-target-tools.d.ts +20 -0
- package/dist/server/multi-target-tools.d.ts.map +1 -0
- package/dist/server/multi-target-tools.js +191 -0
- package/dist/server/multi-target-tools.js.map +1 -0
- package/dist/server/oauth-session-recovery.d.ts +22 -0
- package/dist/server/oauth-session-recovery.d.ts.map +1 -0
- package/dist/server/oauth-session-recovery.js +69 -0
- package/dist/server/oauth-session-recovery.js.map +1 -0
- package/dist/server/server.d.ts +47 -25
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +490 -301
- package/dist/server/server.js.map +1 -1
- package/dist/server/sinks/btp-auditlog.d.ts.map +1 -1
- package/dist/server/sinks/btp-auditlog.js +83 -11
- package/dist/server/sinks/btp-auditlog.js.map +1 -1
- package/dist/server/sinks/file.d.ts.map +1 -1
- package/dist/server/sinks/file.js.map +1 -1
- package/dist/server/sinks/stderr.d.ts.map +1 -1
- package/dist/server/sinks/stderr.js.map +1 -1
- package/dist/server/tool-auth.d.ts +10 -0
- package/dist/server/tool-auth.d.ts.map +1 -0
- package/dist/server/tool-auth.js +75 -0
- package/dist/server/tool-auth.js.map +1 -0
- package/dist/server/trace-context.d.ts +51 -0
- package/dist/server/trace-context.d.ts.map +1 -0
- package/dist/server/trace-context.js +100 -0
- package/dist/server/trace-context.js.map +1 -0
- package/dist/server/types.d.ts +28 -7
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js +5 -2
- package/dist/server/types.js.map +1 -1
- package/dist/server/ui-log-buffer.d.ts.map +1 -1
- package/dist/server/ui-log-buffer.js.map +1 -1
- package/dist/server/ui-state.d.ts +0 -2
- package/dist/server/ui-state.d.ts.map +1 -1
- package/dist/server/ui-state.js +2 -6
- package/dist/server/ui-state.js.map +1 -1
- package/dist/server/ui.d.ts.map +1 -1
- package/dist/server/ui.js +8 -9
- package/dist/server/ui.js.map +1 -1
- package/package.json +21 -18
- package/dist/cache/warmup.d.ts +0 -41
- package/dist/cache/warmup.d.ts.map +0 -1
- package/dist/cache/warmup.js +0 -337
- package/dist/cache/warmup.js.map +0 -1
- package/dist/server/elicit.d.ts +0 -43
- package/dist/server/elicit.d.ts.map +0 -1
- package/dist/server/elicit.js +0 -183
- package/dist/server/elicit.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"destination-discovery.js","sourceRoot":"","sources":["../../src/server/destination-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/** Immutable validation registry for destination-discovered multi-target mode. */
|
|
2
|
+
import type { SafetyConfig } from '../adt/safety.js';
|
|
3
|
+
import type { DestinationDiscoveryResult, DiscoveredDestination } from './destination-discovery.js';
|
|
4
|
+
import type { ServerConfig } from './types.js';
|
|
5
|
+
export { TARGET_ID_PATTERN } from './multi-target-identity.js';
|
|
6
|
+
export declare const MULTI_TARGET_MAX = 256;
|
|
7
|
+
export type TargetExclusionCode = 'ACTIVE' | 'ARC1_ENABLED_MISSING' | 'ARC1_DISABLED' | 'ARC1_ENABLED_INVALID' | 'MISSING_NAME' | 'INVALID_NAME' | 'MISSING_URL' | 'INVALID_URL' | 'MISSING_SYSID' | 'INVALID_SYSID' | 'INVALID_TARGET_ALIAS' | 'MISSING_CLIENT' | 'INVALID_CLIENT' | 'UNSUPPORTED_TYPE' | 'UNSUPPORTED_PROXY' | 'UNSUPPORTED_AUTH' | 'BASIC_AUTH_DISABLED' | 'BASIC_PREEMPTIVE_DISABLED' | 'MISSING_DESCRIPTION' | 'INVALID_LANGUAGE' | 'UNKNOWN_ARC1_PROPERTY' | 'INVALID_POLICY' | 'UNSUPPORTED_V1_WRITE_CONFIG' | 'DUPLICATE_DESTINATION_NAME' | 'DUPLICATE_TARGET' | 'DUPLICATE_BASIC_CONNECTION' | 'SHADOWED_BY_INSTANCE' | 'TARGET_LIMIT_EXCEEDED';
|
|
8
|
+
export interface TargetPolicy {
|
|
9
|
+
readonly allowDataPreview: boolean;
|
|
10
|
+
readonly allowFreeSQL: boolean;
|
|
11
|
+
}
|
|
12
|
+
export type TargetAuthentication = 'PrincipalPropagation' | 'BasicAuthentication';
|
|
13
|
+
export type TargetIdentity = 'per-user' | 'shared';
|
|
14
|
+
export interface TargetDescriptor {
|
|
15
|
+
readonly target: string;
|
|
16
|
+
readonly sid: string;
|
|
17
|
+
readonly client: string;
|
|
18
|
+
readonly description: string;
|
|
19
|
+
readonly language: string;
|
|
20
|
+
readonly destinationName: string;
|
|
21
|
+
readonly authentication: TargetAuthentication;
|
|
22
|
+
/** Effective SAP identity mode, derived exclusively from authentication. */
|
|
23
|
+
readonly identity: TargetIdentity;
|
|
24
|
+
readonly proxyType: 'OnPremise';
|
|
25
|
+
readonly hasCloudConnectorLocationId: boolean;
|
|
26
|
+
readonly requestedPolicy: TargetPolicy;
|
|
27
|
+
readonly effectivePolicy: TargetPolicy;
|
|
28
|
+
readonly connectionFingerprint: string;
|
|
29
|
+
readonly fingerprint: string;
|
|
30
|
+
}
|
|
31
|
+
export interface TargetDiagnostic {
|
|
32
|
+
readonly destinationName: string;
|
|
33
|
+
readonly target?: string;
|
|
34
|
+
readonly status: 'active' | 'disabled' | 'ignored' | 'quarantined';
|
|
35
|
+
readonly code: TargetExclusionCode;
|
|
36
|
+
readonly message: string;
|
|
37
|
+
readonly description?: string;
|
|
38
|
+
readonly type?: string;
|
|
39
|
+
readonly authentication?: string;
|
|
40
|
+
readonly proxyType?: string;
|
|
41
|
+
readonly sid?: string;
|
|
42
|
+
readonly client?: string;
|
|
43
|
+
readonly language?: string;
|
|
44
|
+
readonly hasCloudConnectorLocationId: boolean;
|
|
45
|
+
readonly requestedPolicy?: TargetPolicy;
|
|
46
|
+
readonly effectivePolicy?: TargetPolicy;
|
|
47
|
+
readonly limitedByInstance?: boolean;
|
|
48
|
+
readonly warnings: readonly TargetExclusionCode[];
|
|
49
|
+
/** Canonical supported ARC-1 settings only. Unknown property values are never retained. */
|
|
50
|
+
readonly arcConfig: Readonly<{
|
|
51
|
+
enabled?: boolean;
|
|
52
|
+
allowDataPreview?: boolean;
|
|
53
|
+
allowFreeSQL?: boolean;
|
|
54
|
+
targetAlias?: string;
|
|
55
|
+
unknownProperties?: readonly string[];
|
|
56
|
+
}>;
|
|
57
|
+
}
|
|
58
|
+
export interface RegistryFailure {
|
|
59
|
+
readonly code: 'TARGET_LIMIT_EXCEEDED' | 'REGISTRY_DISCOVERY_ERROR';
|
|
60
|
+
readonly message: string;
|
|
61
|
+
}
|
|
62
|
+
export interface RegistryCounts {
|
|
63
|
+
readonly scanned: number;
|
|
64
|
+
readonly unrelated: number;
|
|
65
|
+
readonly arcAdjacent: number;
|
|
66
|
+
readonly arcRelated: number;
|
|
67
|
+
readonly enabled: number;
|
|
68
|
+
readonly active: number;
|
|
69
|
+
readonly disabled: number;
|
|
70
|
+
readonly ignored: number;
|
|
71
|
+
readonly quarantined: number;
|
|
72
|
+
}
|
|
73
|
+
export declare function sanitizeTargetDescription(value: string | undefined, fallback: string): string;
|
|
74
|
+
interface FingerprintInput extends Omit<TargetDescriptor, 'fingerprint' | 'connectionFingerprint'> {
|
|
75
|
+
readonly urlFingerprint: string;
|
|
76
|
+
readonly cloudConnectorLocationIdFingerprint?: string;
|
|
77
|
+
}
|
|
78
|
+
export declare function targetConnectionFingerprint(value: {
|
|
79
|
+
urlFingerprint: string;
|
|
80
|
+
client: string;
|
|
81
|
+
cloudConnectorLocationIdFingerprint?: string;
|
|
82
|
+
}): string;
|
|
83
|
+
export declare function targetFingerprint(value: FingerprintInput): string;
|
|
84
|
+
/**
|
|
85
|
+
* Validate one destination candidate for a runtime drift check.
|
|
86
|
+
*
|
|
87
|
+
* Registry-wide duplicate, shadow, and 256-target checks remain startup-only.
|
|
88
|
+
*/
|
|
89
|
+
export declare function evaluateStandaloneTargetDescriptor(source: DiscoveredDestination, base: ServerConfig): TargetDescriptor | undefined;
|
|
90
|
+
export declare class DestinationRegistry {
|
|
91
|
+
readonly targets: readonly TargetDescriptor[];
|
|
92
|
+
readonly diagnostics: readonly TargetDiagnostic[];
|
|
93
|
+
readonly revision: string;
|
|
94
|
+
readonly failure?: RegistryFailure;
|
|
95
|
+
readonly loadedAt: string;
|
|
96
|
+
readonly counts: RegistryCounts;
|
|
97
|
+
readonly arcAdjacentWithoutMarkerCount: number;
|
|
98
|
+
private readonly byTarget;
|
|
99
|
+
private constructor();
|
|
100
|
+
static unavailable(failure: RegistryFailure): DestinationRegistry;
|
|
101
|
+
static fromDiscovery(discovery: DestinationDiscoveryResult, base: ServerConfig): DestinationRegistry;
|
|
102
|
+
get(target: string): TargetDescriptor | undefined;
|
|
103
|
+
get available(): boolean;
|
|
104
|
+
}
|
|
105
|
+
/** Find deliberate-or-accidental overlap between bare /mcp and discovered routes. */
|
|
106
|
+
export declare function duplicateSingleTargetIds(registry: DestinationRegistry, destinationNames: readonly (string | undefined)[], connectionFingerprint?: string): string[];
|
|
107
|
+
/** Basic v1 must not expose one shared SAP credential path through guarded and unguarded routes. */
|
|
108
|
+
export declare function sharedBasicSingleTargetConflicts(registry: DestinationRegistry, sharedBasicDestinationName: string | undefined, connectionFingerprint: string | undefined, singleTargetUsesSharedBasic: boolean): string[];
|
|
109
|
+
export declare function multiTargetSafety(policy: TargetPolicy): SafetyConfig;
|
|
110
|
+
export declare function targetSafety(target: TargetDescriptor): SafetyConfig;
|
|
111
|
+
//# sourceMappingURL=destination-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"destination-registry.d.ts","sourceRoot":"","sources":["../../src/server/destination-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,449 @@
|
|
|
1
|
+
/** Immutable validation registry for destination-discovered multi-target mode. */
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
3
|
+
import { isSupportedMultiTargetArcProperty, isWriteRelatedArcProperty, parseDestinationBoolean, } from './multi-target-destination-config.js';
|
|
4
|
+
import { buildTargetId, SAP_SYSID_PATTERN, TARGET_SYSTEM_ALIAS_PATTERN } from './multi-target-identity.js';
|
|
5
|
+
export { TARGET_ID_PATTERN } from './multi-target-identity.js';
|
|
6
|
+
export const MULTI_TARGET_MAX = 256;
|
|
7
|
+
export function sanitizeTargetDescription(value, fallback) {
|
|
8
|
+
if (!value)
|
|
9
|
+
return fallback;
|
|
10
|
+
const withoutControls = Array.from(value.normalize('NFKC'), (character) => {
|
|
11
|
+
const codePoint = character.codePointAt(0) ?? 0;
|
|
12
|
+
return codePoint <= 0x1f || (codePoint >= 0x7f && codePoint <= 0x9f) ? ' ' : character;
|
|
13
|
+
}).join('');
|
|
14
|
+
const normalized = withoutControls.replace(/\s+/g, ' ').trim();
|
|
15
|
+
return normalized.length > 0 && normalized.length <= 160 ? normalized : fallback;
|
|
16
|
+
}
|
|
17
|
+
export function targetConnectionFingerprint(value) {
|
|
18
|
+
return createHash('sha256')
|
|
19
|
+
.update(JSON.stringify({
|
|
20
|
+
urlFingerprint: value.urlFingerprint,
|
|
21
|
+
client: value.client,
|
|
22
|
+
cloudConnectorLocationIdFingerprint: value.cloudConnectorLocationIdFingerprint ?? '',
|
|
23
|
+
}))
|
|
24
|
+
.digest('hex');
|
|
25
|
+
}
|
|
26
|
+
export function targetFingerprint(value) {
|
|
27
|
+
const canonical = JSON.stringify({
|
|
28
|
+
destinationName: value.destinationName,
|
|
29
|
+
description: value.description,
|
|
30
|
+
urlFingerprint: value.urlFingerprint,
|
|
31
|
+
authentication: value.authentication,
|
|
32
|
+
identity: value.identity,
|
|
33
|
+
proxyType: value.proxyType,
|
|
34
|
+
client: value.client,
|
|
35
|
+
cloudConnectorLocationIdFingerprint: value.cloudConnectorLocationIdFingerprint ?? '',
|
|
36
|
+
sid: value.sid,
|
|
37
|
+
target: value.target,
|
|
38
|
+
language: value.language,
|
|
39
|
+
allowDataPreview: value.requestedPolicy.allowDataPreview,
|
|
40
|
+
allowFreeSQL: value.requestedPolicy.allowFreeSQL,
|
|
41
|
+
});
|
|
42
|
+
return createHash('sha256').update(canonical).digest('hex');
|
|
43
|
+
}
|
|
44
|
+
function immutableArcConfig(properties) {
|
|
45
|
+
const unknownProperties = Object.keys(properties)
|
|
46
|
+
.filter((key) => !isSupportedMultiTargetArcProperty(key))
|
|
47
|
+
.sort();
|
|
48
|
+
return Object.freeze({
|
|
49
|
+
enabled: parseDestinationBoolean(properties['arc1.enabled']),
|
|
50
|
+
allowDataPreview: parseDestinationBoolean(properties['arc1.allow_data_preview']),
|
|
51
|
+
allowFreeSQL: parseDestinationBoolean(properties['arc1.allow_free_sql']),
|
|
52
|
+
...(TARGET_SYSTEM_ALIAS_PATTERN.test(properties['arc1.target_alias'] ?? '')
|
|
53
|
+
? { targetAlias: properties['arc1.target_alias'] }
|
|
54
|
+
: {}),
|
|
55
|
+
...(unknownProperties.length > 0 ? { unknownProperties: Object.freeze(unknownProperties) } : {}),
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/** Finish one failed validation step while keeping evaluate() a linear checklist. */
|
|
59
|
+
function excludedCandidate(source, diagnosticBase, enabled, status, code, message) {
|
|
60
|
+
return {
|
|
61
|
+
source,
|
|
62
|
+
enabled,
|
|
63
|
+
diagnostic: { ...diagnosticBase, status, code, message },
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function evaluate(source, base) {
|
|
67
|
+
const arcConfig = immutableArcConfig(source.arcProperties);
|
|
68
|
+
const diagnosticBase = {
|
|
69
|
+
destinationName: source.name,
|
|
70
|
+
type: source.type,
|
|
71
|
+
authentication: source.authentication,
|
|
72
|
+
proxyType: source.proxyType,
|
|
73
|
+
hasCloudConnectorLocationId: source.hasCloudConnectorLocationId,
|
|
74
|
+
arcConfig,
|
|
75
|
+
warnings: Object.freeze([]),
|
|
76
|
+
};
|
|
77
|
+
const enabledRaw = source.arcProperties['arc1.enabled'];
|
|
78
|
+
const enabled = parseDestinationBoolean(enabledRaw);
|
|
79
|
+
if (enabledRaw === undefined) {
|
|
80
|
+
return excludedCandidate(source, diagnosticBase, false, 'ignored', 'ARC1_ENABLED_MISSING', 'ARC-1 marker arc1.enabled is missing.');
|
|
81
|
+
}
|
|
82
|
+
if (enabled === undefined) {
|
|
83
|
+
return excludedCandidate(source, diagnosticBase, false, 'quarantined', 'ARC1_ENABLED_INVALID', 'arc1.enabled must be true or false.');
|
|
84
|
+
}
|
|
85
|
+
if (!enabled) {
|
|
86
|
+
return excludedCandidate(source, diagnosticBase, false, 'disabled', 'ARC1_DISABLED', 'ARC-1 target is explicitly disabled.');
|
|
87
|
+
}
|
|
88
|
+
for (const key of Object.keys(source.arcProperties)) {
|
|
89
|
+
if (isWriteRelatedArcProperty(key)) {
|
|
90
|
+
return excludedCandidate(source, diagnosticBase, true, 'quarantined', 'UNSUPPORTED_V1_WRITE_CONFIG', 'Write-related destination configuration is not supported in multi-target v1.');
|
|
91
|
+
}
|
|
92
|
+
if (!isSupportedMultiTargetArcProperty(key)) {
|
|
93
|
+
return excludedCandidate(source, diagnosticBase, true, 'quarantined', 'UNKNOWN_ARC1_PROPERTY', `Unsupported ARC-1 destination property: ${key}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const dataRequested = parseDestinationBoolean(source.arcProperties['arc1.allow_data_preview']);
|
|
97
|
+
const sqlRequested = parseDestinationBoolean(source.arcProperties['arc1.allow_free_sql']);
|
|
98
|
+
if ((source.arcProperties['arc1.allow_data_preview'] !== undefined && dataRequested === undefined) ||
|
|
99
|
+
(source.arcProperties['arc1.allow_free_sql'] !== undefined && sqlRequested === undefined)) {
|
|
100
|
+
return excludedCandidate(source, diagnosticBase, true, 'quarantined', 'INVALID_POLICY', 'ARC-1 data and SQL policy values must be true or false.');
|
|
101
|
+
}
|
|
102
|
+
if (!source.name) {
|
|
103
|
+
return excludedCandidate(source, diagnosticBase, true, 'quarantined', 'MISSING_NAME', 'Destination name is required.');
|
|
104
|
+
}
|
|
105
|
+
if (!/^[A-Za-z0-9_.-]{1,200}$/.test(source.name)) {
|
|
106
|
+
return excludedCandidate(source, diagnosticBase, true, 'quarantined', 'INVALID_NAME', 'Destination name contains unsupported characters or is too long.');
|
|
107
|
+
}
|
|
108
|
+
if (source.type !== 'HTTP') {
|
|
109
|
+
return excludedCandidate(source, diagnosticBase, true, 'quarantined', 'UNSUPPORTED_TYPE', 'Destination Type must be HTTP.');
|
|
110
|
+
}
|
|
111
|
+
if (source.urlState === 'missing') {
|
|
112
|
+
return excludedCandidate(source, diagnosticBase, true, 'quarantined', 'MISSING_URL', 'Destination URL is required.');
|
|
113
|
+
}
|
|
114
|
+
if (source.urlState !== 'valid' || !source.urlFingerprint) {
|
|
115
|
+
return excludedCandidate(source, diagnosticBase, true, 'quarantined', 'INVALID_URL', 'Destination URL must be a valid HTTP or HTTPS URL.');
|
|
116
|
+
}
|
|
117
|
+
let authentication;
|
|
118
|
+
let identity;
|
|
119
|
+
if (source.authentication === 'PrincipalPropagation') {
|
|
120
|
+
authentication = 'PrincipalPropagation';
|
|
121
|
+
identity = 'per-user';
|
|
122
|
+
}
|
|
123
|
+
else if (source.authentication === 'BasicAuthentication') {
|
|
124
|
+
if (!base.multiTargetAllowBasicAuth) {
|
|
125
|
+
return excludedCandidate(source, diagnosticBase, true, 'quarantined', 'BASIC_AUTH_DISABLED', 'BasicAuthentication targets require ARC1_MULTI_TARGET_ALLOW_BASIC_AUTH=true.');
|
|
126
|
+
}
|
|
127
|
+
if (source.preemptive !== undefined && parseDestinationBoolean(source.preemptive) !== true) {
|
|
128
|
+
return excludedCandidate(source, diagnosticBase, true, 'quarantined', 'BASIC_PREEMPTIVE_DISABLED', 'BasicAuthentication destination Preemptive must be absent or true.');
|
|
129
|
+
}
|
|
130
|
+
authentication = 'BasicAuthentication';
|
|
131
|
+
identity = 'shared';
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
return excludedCandidate(source, diagnosticBase, true, 'quarantined', 'UNSUPPORTED_AUTH', 'Destination Authentication must be PrincipalPropagation or an explicitly enabled BasicAuthentication.');
|
|
135
|
+
}
|
|
136
|
+
if (source.proxyType !== 'OnPremise') {
|
|
137
|
+
return excludedCandidate(source, diagnosticBase, true, 'quarantined', 'UNSUPPORTED_PROXY', 'Destination ProxyType must be OnPremise.');
|
|
138
|
+
}
|
|
139
|
+
if (!source.sapSysId) {
|
|
140
|
+
return excludedCandidate(source, diagnosticBase, true, 'quarantined', 'MISSING_SYSID', 'Destination property sap-sysid is required.');
|
|
141
|
+
}
|
|
142
|
+
if (!SAP_SYSID_PATTERN.test(source.sapSysId)) {
|
|
143
|
+
return excludedCandidate(source, diagnosticBase, true, 'quarantined', 'INVALID_SYSID', 'sap-sysid must match three uppercase alphanumeric characters and start with a letter.');
|
|
144
|
+
}
|
|
145
|
+
if (!source.sapClient) {
|
|
146
|
+
return excludedCandidate(source, diagnosticBase, true, 'quarantined', 'MISSING_CLIENT', 'Destination property sap-client is required.');
|
|
147
|
+
}
|
|
148
|
+
if (!/^\d{3}$/.test(source.sapClient)) {
|
|
149
|
+
return excludedCandidate(source, diagnosticBase, true, 'quarantined', 'INVALID_CLIENT', 'sap-client must contain exactly three digits.');
|
|
150
|
+
}
|
|
151
|
+
const targetAlias = source.arcProperties['arc1.target_alias'];
|
|
152
|
+
if (targetAlias !== undefined && !TARGET_SYSTEM_ALIAS_PATTERN.test(targetAlias)) {
|
|
153
|
+
return excludedCandidate(source, diagnosticBase, true, 'quarantined', 'INVALID_TARGET_ALIAS', 'arc1.target_alias must start with an uppercase letter and contain 3-32 uppercase letters, digits, or internal hyphens.');
|
|
154
|
+
}
|
|
155
|
+
const language = source.sapLanguage?.trim().toUpperCase() || base.language;
|
|
156
|
+
if (!/^[A-Z]{2}$/.test(language)) {
|
|
157
|
+
return excludedCandidate(source, diagnosticBase, true, 'quarantined', 'INVALID_LANGUAGE', 'sap-language must contain exactly two letters.');
|
|
158
|
+
}
|
|
159
|
+
const targetId = buildTargetId(source.sapSysId, source.sapClient, targetAlias);
|
|
160
|
+
const description = sanitizeTargetDescription(source.description, targetId);
|
|
161
|
+
const descriptionFallback = description === targetId && source.description !== targetId;
|
|
162
|
+
const requestedPolicy = Object.freeze({
|
|
163
|
+
allowDataPreview: dataRequested ?? false,
|
|
164
|
+
allowFreeSQL: sqlRequested ?? false,
|
|
165
|
+
});
|
|
166
|
+
const effectivePolicy = Object.freeze({
|
|
167
|
+
allowDataPreview: base.allowDataPreview && requestedPolicy.allowDataPreview,
|
|
168
|
+
allowFreeSQL: base.allowFreeSQL && requestedPolicy.allowFreeSQL,
|
|
169
|
+
});
|
|
170
|
+
const withoutFingerprints = {
|
|
171
|
+
target: targetId,
|
|
172
|
+
sid: source.sapSysId,
|
|
173
|
+
client: source.sapClient,
|
|
174
|
+
description,
|
|
175
|
+
language,
|
|
176
|
+
destinationName: source.name,
|
|
177
|
+
authentication,
|
|
178
|
+
identity,
|
|
179
|
+
proxyType: 'OnPremise',
|
|
180
|
+
hasCloudConnectorLocationId: source.hasCloudConnectorLocationId,
|
|
181
|
+
requestedPolicy,
|
|
182
|
+
effectivePolicy,
|
|
183
|
+
};
|
|
184
|
+
const connectionFingerprint = targetConnectionFingerprint({
|
|
185
|
+
urlFingerprint: source.urlFingerprint,
|
|
186
|
+
client: source.sapClient,
|
|
187
|
+
cloudConnectorLocationIdFingerprint: source.cloudConnectorLocationIdFingerprint,
|
|
188
|
+
});
|
|
189
|
+
const target = Object.freeze({
|
|
190
|
+
...withoutFingerprints,
|
|
191
|
+
connectionFingerprint,
|
|
192
|
+
fingerprint: targetFingerprint({
|
|
193
|
+
...withoutFingerprints,
|
|
194
|
+
urlFingerprint: source.urlFingerprint,
|
|
195
|
+
cloudConnectorLocationIdFingerprint: source.cloudConnectorLocationIdFingerprint,
|
|
196
|
+
}),
|
|
197
|
+
});
|
|
198
|
+
return {
|
|
199
|
+
source,
|
|
200
|
+
enabled: true,
|
|
201
|
+
target,
|
|
202
|
+
diagnostic: {
|
|
203
|
+
...diagnosticBase,
|
|
204
|
+
target: targetId,
|
|
205
|
+
description,
|
|
206
|
+
sid: source.sapSysId,
|
|
207
|
+
client: source.sapClient,
|
|
208
|
+
language,
|
|
209
|
+
status: 'active',
|
|
210
|
+
code: 'ACTIVE',
|
|
211
|
+
message: 'Destination is active on pinned and aggregate multi-target routes.',
|
|
212
|
+
requestedPolicy,
|
|
213
|
+
effectivePolicy,
|
|
214
|
+
limitedByInstance: requestedPolicy.allowDataPreview !== effectivePolicy.allowDataPreview ||
|
|
215
|
+
requestedPolicy.allowFreeSQL !== effectivePolicy.allowFreeSQL,
|
|
216
|
+
warnings: Object.freeze(descriptionFallback ? ['MISSING_DESCRIPTION'] : []),
|
|
217
|
+
},
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Validate one destination candidate for a runtime drift check.
|
|
222
|
+
*
|
|
223
|
+
* Registry-wide duplicate, shadow, and 256-target checks remain startup-only.
|
|
224
|
+
*/
|
|
225
|
+
export function evaluateStandaloneTargetDescriptor(source, base) {
|
|
226
|
+
return evaluate(source, base).target;
|
|
227
|
+
}
|
|
228
|
+
function registryRevision(diagnostics, targets = []) {
|
|
229
|
+
const targetFingerprints = new Map(targets.map((target) => [target.destinationName, target.fingerprint]));
|
|
230
|
+
const canonical = diagnostics
|
|
231
|
+
.map((entry) => ({
|
|
232
|
+
destinationName: entry.destinationName,
|
|
233
|
+
target: entry.target ?? '',
|
|
234
|
+
status: entry.status,
|
|
235
|
+
code: entry.code ?? '',
|
|
236
|
+
message: entry.message,
|
|
237
|
+
description: entry.description ?? '',
|
|
238
|
+
type: entry.type ?? '',
|
|
239
|
+
authentication: entry.authentication ?? '',
|
|
240
|
+
proxyType: entry.proxyType ?? '',
|
|
241
|
+
hasCloudConnectorLocationId: entry.hasCloudConnectorLocationId,
|
|
242
|
+
arcConfig: entry.arcConfig,
|
|
243
|
+
requestedPolicy: entry.requestedPolicy,
|
|
244
|
+
effectivePolicy: entry.effectivePolicy,
|
|
245
|
+
warnings: entry.warnings,
|
|
246
|
+
targetFingerprint: targetFingerprints.get(entry.destinationName) ?? '',
|
|
247
|
+
}))
|
|
248
|
+
.map((entry) => ({ entry, sortKey: JSON.stringify(entry) }))
|
|
249
|
+
.sort((a, b) => a.sortKey.localeCompare(b.sortKey))
|
|
250
|
+
.map(({ entry }) => entry);
|
|
251
|
+
return createHash('sha256').update(JSON.stringify(canonical)).digest('hex');
|
|
252
|
+
}
|
|
253
|
+
function diagnosticSortKey(entry) {
|
|
254
|
+
return JSON.stringify([
|
|
255
|
+
entry.destinationName,
|
|
256
|
+
entry.target ?? '',
|
|
257
|
+
entry.status,
|
|
258
|
+
entry.code ?? '',
|
|
259
|
+
entry.message,
|
|
260
|
+
entry.description ?? '',
|
|
261
|
+
entry.type ?? '',
|
|
262
|
+
entry.authentication ?? '',
|
|
263
|
+
entry.proxyType ?? '',
|
|
264
|
+
entry.hasCloudConnectorLocationId,
|
|
265
|
+
entry.arcConfig,
|
|
266
|
+
entry.requestedPolicy,
|
|
267
|
+
entry.effectivePolicy,
|
|
268
|
+
entry.warnings,
|
|
269
|
+
]);
|
|
270
|
+
}
|
|
271
|
+
function conflictMessage(code) {
|
|
272
|
+
switch (code) {
|
|
273
|
+
case 'DUPLICATE_DESTINATION_NAME':
|
|
274
|
+
return 'More than one subaccount destination uses this destination name; every claimant is quarantined.';
|
|
275
|
+
case 'DUPLICATE_TARGET':
|
|
276
|
+
return 'More than one destination claims this public target ID; every claimant is quarantined.';
|
|
277
|
+
case 'DUPLICATE_BASIC_CONNECTION':
|
|
278
|
+
return 'More than one shared Basic destination claims the same physical SAP client; every claimant is quarantined to preserve the credential lockout guard.';
|
|
279
|
+
case 'SHADOWED_BY_INSTANCE':
|
|
280
|
+
return 'A service-instance destination has the same name and could shadow this subaccount destination.';
|
|
281
|
+
default:
|
|
282
|
+
return 'Destination configuration conflict.';
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
function countsFor(discovery, diagnostics, enabled, active) {
|
|
286
|
+
return {
|
|
287
|
+
scanned: discovery.scannedCount,
|
|
288
|
+
unrelated: discovery.unrelatedCount,
|
|
289
|
+
arcAdjacent: discovery.arcAdjacentWithoutMarkerCount,
|
|
290
|
+
arcRelated: discovery.subaccount.length,
|
|
291
|
+
enabled,
|
|
292
|
+
active,
|
|
293
|
+
disabled: diagnostics.filter((entry) => entry.status === 'disabled').length,
|
|
294
|
+
ignored: diagnostics.filter((entry) => entry.status === 'ignored').length,
|
|
295
|
+
quarantined: diagnostics.filter((entry) => entry.status === 'quarantined').length,
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
export class DestinationRegistry {
|
|
299
|
+
targets;
|
|
300
|
+
diagnostics;
|
|
301
|
+
revision;
|
|
302
|
+
failure;
|
|
303
|
+
loadedAt;
|
|
304
|
+
counts;
|
|
305
|
+
arcAdjacentWithoutMarkerCount;
|
|
306
|
+
byTarget;
|
|
307
|
+
constructor(args) {
|
|
308
|
+
this.targets = Object.freeze([...args.targets]);
|
|
309
|
+
this.diagnostics = Object.freeze([...args.diagnostics]);
|
|
310
|
+
this.revision = args.revision;
|
|
311
|
+
this.failure = args.failure;
|
|
312
|
+
this.loadedAt = args.loadedAt ?? new Date().toISOString();
|
|
313
|
+
this.counts = Object.freeze({ ...args.counts });
|
|
314
|
+
this.arcAdjacentWithoutMarkerCount = args.arcAdjacentWithoutMarkerCount;
|
|
315
|
+
this.byTarget = new Map(this.targets.map((target) => [target.target, target]));
|
|
316
|
+
Object.freeze(this);
|
|
317
|
+
}
|
|
318
|
+
static unavailable(failure) {
|
|
319
|
+
return new DestinationRegistry({
|
|
320
|
+
targets: [],
|
|
321
|
+
diagnostics: [],
|
|
322
|
+
revision: createHash('sha256').update(`${failure.code}:${failure.message}`).digest('hex'),
|
|
323
|
+
failure: Object.freeze({ ...failure }),
|
|
324
|
+
counts: {
|
|
325
|
+
scanned: 0,
|
|
326
|
+
unrelated: 0,
|
|
327
|
+
arcAdjacent: 0,
|
|
328
|
+
arcRelated: 0,
|
|
329
|
+
enabled: 0,
|
|
330
|
+
active: 0,
|
|
331
|
+
disabled: 0,
|
|
332
|
+
ignored: 0,
|
|
333
|
+
quarantined: 0,
|
|
334
|
+
},
|
|
335
|
+
arcAdjacentWithoutMarkerCount: 0,
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
static fromDiscovery(discovery, base) {
|
|
339
|
+
const evaluated = discovery.subaccount.map((source) => evaluate(source, base));
|
|
340
|
+
const enabledCount = evaluated.filter((entry) => entry.enabled).length;
|
|
341
|
+
if (enabledCount > MULTI_TARGET_MAX) {
|
|
342
|
+
const diagnostics = evaluated.map((entry) => entry.enabled
|
|
343
|
+
? Object.freeze({
|
|
344
|
+
...entry.diagnostic,
|
|
345
|
+
status: 'quarantined',
|
|
346
|
+
code: 'TARGET_LIMIT_EXCEEDED',
|
|
347
|
+
message: `Enabled target count exceeds the limit of ${MULTI_TARGET_MAX}; no discovered target is active.`,
|
|
348
|
+
})
|
|
349
|
+
: entry.diagnostic);
|
|
350
|
+
diagnostics.sort((a, b) => diagnosticSortKey(a).localeCompare(diagnosticSortKey(b)));
|
|
351
|
+
return new DestinationRegistry({
|
|
352
|
+
targets: [],
|
|
353
|
+
diagnostics,
|
|
354
|
+
revision: registryRevision(diagnostics),
|
|
355
|
+
failure: Object.freeze({
|
|
356
|
+
code: 'TARGET_LIMIT_EXCEEDED',
|
|
357
|
+
message: `${enabledCount} enabled multi-target destinations exceed the limit of ${MULTI_TARGET_MAX}.`,
|
|
358
|
+
}),
|
|
359
|
+
counts: countsFor(discovery, diagnostics, enabledCount, 0),
|
|
360
|
+
arcAdjacentWithoutMarkerCount: discovery.arcAdjacentWithoutMarkerCount,
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
const destinationCounts = new Map();
|
|
364
|
+
const targetCounts = new Map();
|
|
365
|
+
const basicConnectionCounts = new Map();
|
|
366
|
+
const instanceNames = new Set(discovery.instanceNames);
|
|
367
|
+
for (const entry of evaluated) {
|
|
368
|
+
destinationCounts.set(entry.source.name, (destinationCounts.get(entry.source.name) ?? 0) + 1);
|
|
369
|
+
if (entry.target)
|
|
370
|
+
targetCounts.set(entry.target.target, (targetCounts.get(entry.target.target) ?? 0) + 1);
|
|
371
|
+
if (entry.target?.authentication === 'BasicAuthentication') {
|
|
372
|
+
basicConnectionCounts.set(entry.target.connectionFingerprint, (basicConnectionCounts.get(entry.target.connectionFingerprint) ?? 0) + 1);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
const diagnostics = [];
|
|
376
|
+
const targets = [];
|
|
377
|
+
for (const entry of evaluated) {
|
|
378
|
+
let conflict;
|
|
379
|
+
if ((destinationCounts.get(entry.source.name) ?? 0) > 1)
|
|
380
|
+
conflict = 'DUPLICATE_DESTINATION_NAME';
|
|
381
|
+
else if (instanceNames.has(entry.source.name))
|
|
382
|
+
conflict = 'SHADOWED_BY_INSTANCE';
|
|
383
|
+
else if (entry.target && (targetCounts.get(entry.target.target) ?? 0) > 1)
|
|
384
|
+
conflict = 'DUPLICATE_TARGET';
|
|
385
|
+
else if (entry.target?.authentication === 'BasicAuthentication' &&
|
|
386
|
+
(basicConnectionCounts.get(entry.target.connectionFingerprint) ?? 0) > 1) {
|
|
387
|
+
conflict = 'DUPLICATE_BASIC_CONNECTION';
|
|
388
|
+
}
|
|
389
|
+
if (conflict && entry.enabled) {
|
|
390
|
+
diagnostics.push(Object.freeze({
|
|
391
|
+
...entry.diagnostic,
|
|
392
|
+
status: 'quarantined',
|
|
393
|
+
code: conflict,
|
|
394
|
+
message: conflictMessage(conflict),
|
|
395
|
+
}));
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
diagnostics.push(Object.freeze(entry.diagnostic));
|
|
399
|
+
if (entry.target && entry.diagnostic.status === 'active')
|
|
400
|
+
targets.push(entry.target);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
targets.sort((a, b) => a.target.localeCompare(b.target));
|
|
404
|
+
diagnostics.sort((a, b) => diagnosticSortKey(a).localeCompare(diagnosticSortKey(b)));
|
|
405
|
+
return new DestinationRegistry({
|
|
406
|
+
targets,
|
|
407
|
+
diagnostics,
|
|
408
|
+
revision: registryRevision(diagnostics, targets),
|
|
409
|
+
counts: countsFor(discovery, diagnostics, enabledCount, targets.length),
|
|
410
|
+
arcAdjacentWithoutMarkerCount: discovery.arcAdjacentWithoutMarkerCount,
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
get(target) {
|
|
414
|
+
return this.byTarget.get(target);
|
|
415
|
+
}
|
|
416
|
+
get available() {
|
|
417
|
+
return !this.failure;
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
/** Find deliberate-or-accidental overlap between bare /mcp and discovered routes. */
|
|
421
|
+
export function duplicateSingleTargetIds(registry, destinationNames, connectionFingerprint) {
|
|
422
|
+
const configuredNames = new Set(destinationNames.filter((name) => !!name));
|
|
423
|
+
return registry.targets
|
|
424
|
+
.filter((target) => configuredNames.has(target.destinationName) ||
|
|
425
|
+
(!!connectionFingerprint && target.connectionFingerprint === connectionFingerprint))
|
|
426
|
+
.map((target) => target.target);
|
|
427
|
+
}
|
|
428
|
+
/** Basic v1 must not expose one shared SAP credential path through guarded and unguarded routes. */
|
|
429
|
+
export function sharedBasicSingleTargetConflicts(registry, sharedBasicDestinationName, connectionFingerprint, singleTargetUsesSharedBasic) {
|
|
430
|
+
if (!singleTargetUsesSharedBasic)
|
|
431
|
+
return [];
|
|
432
|
+
return duplicateSingleTargetIds(registry, [sharedBasicDestinationName], connectionFingerprint).filter((targetId) => registry.get(targetId)?.identity === 'shared');
|
|
433
|
+
}
|
|
434
|
+
export function multiTargetSafety(policy) {
|
|
435
|
+
return {
|
|
436
|
+
allowWrites: false,
|
|
437
|
+
allowDataPreview: policy.allowDataPreview,
|
|
438
|
+
allowFreeSQL: policy.allowFreeSQL,
|
|
439
|
+
allowTransportWrites: false,
|
|
440
|
+
allowGitWrites: false,
|
|
441
|
+
allowedPackages: ['$TMP'],
|
|
442
|
+
allowedTransports: [],
|
|
443
|
+
denyActions: [],
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
export function targetSafety(target) {
|
|
447
|
+
return multiTargetSafety(target.effectivePolicy);
|
|
448
|
+
}
|
|
449
|
+
//# sourceMappingURL=destination-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"destination-registry.js","sourceRoot":"","sources":["../../src/server/destination-registry.ts"],"names":[],"mappings":"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"}
|