@xyne/workflow-sdk 3.2.37 → 3.2.39
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/dist/agents/agent-step.d.ts +2 -2
- package/dist/agents/host-agent-step.d.ts +1 -1
- package/dist/builder/index.d.ts +2 -2
- package/dist/builder/index.d.ts.map +1 -1
- package/dist/builder/index.js +1 -1
- package/dist/builder/index.js.map +1 -1
- package/dist/client/types.d.ts +7 -5
- package/dist/client/types.d.ts.map +1 -1
- package/dist/client/workflow-client.d.ts.map +1 -1
- package/dist/client/workflow-client.js +7 -0
- package/dist/client/workflow-client.js.map +1 -1
- package/dist/common/citation-ref.d.ts +4 -4
- package/dist/common/credentials.d.ts +107 -0
- package/dist/common/credentials.d.ts.map +1 -1
- package/dist/common/credentials.js +67 -0
- package/dist/common/credentials.js.map +1 -1
- package/dist/common/index.d.ts +2 -2
- package/dist/common/index.d.ts.map +1 -1
- package/dist/common/index.js +2 -2
- package/dist/common/index.js.map +1 -1
- package/dist/connectors/builtin/builtin-connector.d.ts +33 -0
- package/dist/connectors/builtin/builtin-connector.d.ts.map +1 -0
- package/dist/connectors/builtin/builtin-connector.js +63 -0
- package/dist/connectors/builtin/builtin-connector.js.map +1 -0
- package/dist/connectors/builtin/credentials.d.ts +18 -0
- package/dist/connectors/builtin/credentials.d.ts.map +1 -0
- package/dist/connectors/builtin/credentials.js +50 -0
- package/dist/connectors/builtin/credentials.js.map +1 -0
- package/dist/{steps/builtin → connectors/builtin/steps}/code.step.d.ts +4 -4
- package/dist/connectors/builtin/steps/code.step.d.ts.map +1 -0
- package/dist/{steps/builtin → connectors/builtin/steps}/code.step.js +3 -3
- package/dist/connectors/builtin/steps/code.step.js.map +1 -0
- package/dist/{steps/builtin → connectors/builtin/steps}/conditional.step.d.ts +10 -10
- package/dist/connectors/builtin/steps/conditional.step.d.ts.map +1 -0
- package/dist/{steps/builtin → connectors/builtin/steps}/conditional.step.js +4 -4
- package/dist/connectors/builtin/steps/conditional.step.js.map +1 -0
- package/dist/{steps/builtin → connectors/builtin/steps}/dedup.step.d.ts +4 -4
- package/dist/connectors/builtin/steps/dedup.step.d.ts.map +1 -0
- package/dist/{steps/builtin → connectors/builtin/steps}/dedup.step.js +3 -3
- package/dist/connectors/builtin/steps/dedup.step.js.map +1 -0
- package/dist/{steps/builtin → connectors/builtin/steps}/http-request.step.d.ts +29 -22
- package/dist/connectors/builtin/steps/http-request.step.d.ts.map +1 -0
- package/dist/{steps/builtin → connectors/builtin/steps}/http-request.step.js +15 -9
- package/dist/connectors/builtin/steps/http-request.step.js.map +1 -0
- package/dist/{steps/builtin → connectors/builtin/steps}/loop.step.d.ts +4 -4
- package/dist/connectors/builtin/steps/loop.step.d.ts.map +1 -0
- package/dist/{steps/builtin → connectors/builtin/steps}/loop.step.js +3 -3
- package/dist/connectors/builtin/steps/loop.step.js.map +1 -0
- package/dist/{steps/builtin → connectors/builtin/steps}/map.step.d.ts +4 -4
- package/dist/connectors/builtin/steps/map.step.d.ts.map +1 -0
- package/dist/{steps/builtin → connectors/builtin/steps}/map.step.js +4 -4
- package/dist/connectors/builtin/steps/map.step.js.map +1 -0
- package/dist/{steps/builtin → connectors/builtin/steps}/parallel.step.d.ts +4 -4
- package/dist/connectors/builtin/steps/parallel.step.d.ts.map +1 -0
- package/dist/{steps/builtin → connectors/builtin/steps}/parallel.step.js +3 -3
- package/dist/connectors/builtin/steps/parallel.step.js.map +1 -0
- package/dist/connectors/builtin/steps/ssrf-guard.d.ts.map +1 -0
- package/dist/connectors/builtin/steps/ssrf-guard.js.map +1 -0
- package/dist/{steps/builtin → connectors/builtin/steps}/switch.step.d.ts +14 -14
- package/dist/connectors/builtin/steps/switch.step.d.ts.map +1 -0
- package/dist/{steps/builtin → connectors/builtin/steps}/switch.step.js +4 -4
- package/dist/connectors/builtin/steps/switch.step.js.map +1 -0
- package/dist/{steps/builtin → connectors/builtin/steps}/wait.step.d.ts +4 -4
- package/dist/connectors/builtin/steps/wait.step.d.ts.map +1 -0
- package/dist/{steps/builtin → connectors/builtin/steps}/wait.step.js +4 -4
- package/dist/connectors/builtin/steps/wait.step.js.map +1 -0
- package/dist/{triggers/builtin → connectors/builtin/triggers}/default-cron-trigger.d.ts +4 -4
- package/dist/connectors/builtin/triggers/default-cron-trigger.d.ts.map +1 -0
- package/dist/{triggers/builtin → connectors/builtin/triggers}/default-cron-trigger.js +3 -3
- package/dist/connectors/builtin/triggers/default-cron-trigger.js.map +1 -0
- package/dist/{triggers/builtin → connectors/builtin/triggers}/default-event-trigger.d.ts +3 -3
- package/dist/connectors/builtin/triggers/default-event-trigger.d.ts.map +1 -0
- package/dist/{triggers/builtin → connectors/builtin/triggers}/default-event-trigger.js +3 -3
- package/dist/connectors/builtin/triggers/default-event-trigger.js.map +1 -0
- package/dist/{triggers/builtin → connectors/builtin/triggers}/default-manual-trigger.d.ts +3 -3
- package/dist/connectors/builtin/triggers/default-manual-trigger.d.ts.map +1 -0
- package/dist/{triggers/builtin → connectors/builtin/triggers}/default-manual-trigger.js +3 -3
- package/dist/connectors/builtin/triggers/default-manual-trigger.js.map +1 -0
- package/dist/{triggers/builtin → connectors/builtin/triggers}/default-webhook-v2-trigger.d.ts +10 -8
- package/dist/connectors/builtin/triggers/default-webhook-v2-trigger.d.ts.map +1 -0
- package/dist/{triggers/builtin → connectors/builtin/triggers}/default-webhook-v2-trigger.js +10 -8
- package/dist/connectors/builtin/triggers/default-webhook-v2-trigger.js.map +1 -0
- package/dist/connectors/core/base-connector.d.ts +50 -0
- package/dist/connectors/core/base-connector.d.ts.map +1 -0
- package/dist/connectors/core/base-connector.js +8 -0
- package/dist/connectors/core/base-connector.js.map +1 -0
- package/dist/connectors/core/connector-registry.d.ts +130 -0
- package/dist/connectors/core/connector-registry.d.ts.map +1 -0
- package/dist/connectors/core/connector-registry.js +353 -0
- package/dist/connectors/core/connector-registry.js.map +1 -0
- package/dist/connectors/core/credentials.d.ts +104 -0
- package/dist/connectors/core/credentials.d.ts.map +1 -0
- package/dist/connectors/core/credentials.js +67 -0
- package/dist/connectors/core/credentials.js.map +1 -0
- package/dist/connectors/core/index.d.ts +7 -0
- package/dist/connectors/core/index.d.ts.map +1 -0
- package/dist/connectors/core/index.js +5 -0
- package/dist/connectors/core/index.js.map +1 -0
- package/dist/engine/available-context.d.ts +3 -4
- package/dist/engine/available-context.d.ts.map +1 -1
- package/dist/engine/available-context.js +17 -13
- package/dist/engine/available-context.js.map +1 -1
- package/dist/engine/config-validator.d.ts +13 -5
- package/dist/engine/config-validator.d.ts.map +1 -1
- package/dist/engine/config-validator.js +89 -11
- package/dist/engine/config-validator.js.map +1 -1
- package/dist/engine/credential-resolver.d.ts +42 -0
- package/dist/engine/credential-resolver.d.ts.map +1 -0
- package/dist/engine/credential-resolver.js +63 -0
- package/dist/engine/credential-resolver.js.map +1 -0
- package/dist/engine/workflow-executor.d.ts +4 -5
- package/dist/engine/workflow-executor.d.ts.map +1 -1
- package/dist/engine/workflow-executor.js +16 -38
- package/dist/engine/workflow-executor.js.map +1 -1
- package/dist/index.d.ts +43 -28
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -15
- package/dist/index.js.map +1 -1
- package/dist/ingest/body.d.ts +18 -0
- package/dist/ingest/body.d.ts.map +1 -0
- package/dist/ingest/body.js +47 -0
- package/dist/ingest/body.js.map +1 -0
- package/dist/ingest/filter.d.ts +11 -0
- package/dist/ingest/filter.d.ts.map +1 -0
- package/dist/ingest/filter.js +23 -0
- package/dist/ingest/filter.js.map +1 -0
- package/dist/ingest/headers.d.ts +3 -0
- package/dist/ingest/headers.d.ts.map +1 -0
- package/dist/ingest/headers.js +11 -0
- package/dist/ingest/headers.js.map +1 -0
- package/dist/ingest/types.d.ts +50 -0
- package/dist/ingest/types.d.ts.map +1 -0
- package/dist/ingest/types.js +9 -0
- package/dist/ingest/types.js.map +1 -0
- package/dist/persistence/in-memory-adapter.d.ts +4 -8
- package/dist/persistence/in-memory-adapter.d.ts.map +1 -1
- package/dist/persistence/in-memory-adapter.js +8 -25
- package/dist/persistence/in-memory-adapter.js.map +1 -1
- package/dist/persistence/types.d.ts +5 -19
- package/dist/persistence/types.d.ts.map +1 -1
- package/dist/router/types.d.ts +31 -3
- package/dist/router/types.d.ts.map +1 -1
- package/dist/router/workflow-router.d.ts +4 -3
- package/dist/router/workflow-router.d.ts.map +1 -1
- package/dist/router/workflow-router.js +84 -41
- package/dist/router/workflow-router.js.map +1 -1
- package/dist/runtime/types.d.ts +6 -4
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/workflow-runtime.d.ts +46 -37
- package/dist/runtime/workflow-runtime.d.ts.map +1 -1
- package/dist/runtime/workflow-runtime.js +173 -133
- package/dist/runtime/workflow-runtime.js.map +1 -1
- package/dist/steps/base-step.d.ts +24 -0
- package/dist/steps/base-step.d.ts.map +1 -1
- package/dist/steps/base-step.js +23 -0
- package/dist/steps/base-step.js.map +1 -1
- package/dist/steps/{step-registry.d.ts → step-descriptor.d.ts} +24 -32
- package/dist/steps/step-descriptor.d.ts.map +1 -0
- package/dist/steps/step-descriptor.js +33 -0
- package/dist/steps/step-descriptor.js.map +1 -0
- package/dist/testing/authz-conformance.d.ts.map +1 -1
- package/dist/testing/authz-conformance.js +6 -7
- package/dist/testing/authz-conformance.js.map +1 -1
- package/dist/testing/index.d.ts +1 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +1 -0
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/mock-step-context.d.ts +1 -0
- package/dist/testing/mock-step-context.d.ts.map +1 -1
- package/dist/testing/mock-step-context.js +1 -0
- package/dist/testing/mock-step-context.js.map +1 -1
- package/dist/testing/test-connector.d.ts +40 -0
- package/dist/testing/test-connector.d.ts.map +1 -0
- package/dist/testing/test-connector.js +39 -0
- package/dist/testing/test-connector.js.map +1 -0
- package/dist/triggers/api-trigger.d.ts +15 -0
- package/dist/triggers/api-trigger.d.ts.map +1 -0
- package/dist/triggers/api-trigger.js +14 -0
- package/dist/triggers/api-trigger.js.map +1 -0
- package/dist/triggers/base-trigger.d.ts +30 -0
- package/dist/triggers/base-trigger.d.ts.map +1 -1
- package/dist/triggers/base-trigger.js +17 -0
- package/dist/triggers/base-trigger.js.map +1 -1
- package/dist/triggers/trigger-descriptor.d.ts +44 -0
- package/dist/triggers/trigger-descriptor.d.ts.map +1 -0
- package/dist/triggers/trigger-descriptor.js +30 -0
- package/dist/triggers/trigger-descriptor.js.map +1 -0
- package/dist/triggers/webhook-trigger.d.ts +48 -36
- package/dist/triggers/webhook-trigger.d.ts.map +1 -1
- package/dist/triggers/webhook-trigger.js +40 -6
- package/dist/triggers/webhook-trigger.js.map +1 -1
- package/dist/types/known-types.d.ts +0 -1
- package/dist/types/known-types.d.ts.map +1 -1
- package/dist/types/known-types.js +0 -1
- package/dist/types/known-types.js.map +1 -1
- package/dist/types/validation.d.ts +3 -1
- package/dist/types/validation.d.ts.map +1 -1
- package/dist/types/validation.js +2 -0
- package/dist/types/validation.js.map +1 -1
- package/dist/types/workflow-config.d.ts +23 -0
- package/dist/types/workflow-config.d.ts.map +1 -1
- package/dist/types/workflow-config.js +8 -0
- package/dist/types/workflow-config.js.map +1 -1
- package/dist/util/credential-slot-schema.d.ts +20 -0
- package/dist/util/credential-slot-schema.d.ts.map +1 -0
- package/dist/util/credential-slot-schema.js +30 -0
- package/dist/util/credential-slot-schema.js.map +1 -0
- package/package.json +1 -1
- package/dist/runtime/execution-event-bus.d.ts +0 -38
- package/dist/runtime/execution-event-bus.d.ts.map +0 -1
- package/dist/runtime/execution-event-bus.js +0 -87
- package/dist/runtime/execution-event-bus.js.map +0 -1
- package/dist/steps/builtin/code.step.d.ts.map +0 -1
- package/dist/steps/builtin/code.step.js.map +0 -1
- package/dist/steps/builtin/conditional.step.d.ts.map +0 -1
- package/dist/steps/builtin/conditional.step.js.map +0 -1
- package/dist/steps/builtin/dedup.step.d.ts.map +0 -1
- package/dist/steps/builtin/dedup.step.js.map +0 -1
- package/dist/steps/builtin/http-request.step.d.ts.map +0 -1
- package/dist/steps/builtin/http-request.step.js.map +0 -1
- package/dist/steps/builtin/loop.step.d.ts.map +0 -1
- package/dist/steps/builtin/loop.step.js.map +0 -1
- package/dist/steps/builtin/map.step.d.ts.map +0 -1
- package/dist/steps/builtin/map.step.js.map +0 -1
- package/dist/steps/builtin/parallel.step.d.ts.map +0 -1
- package/dist/steps/builtin/parallel.step.js.map +0 -1
- package/dist/steps/builtin/ssrf-guard.d.ts.map +0 -1
- package/dist/steps/builtin/ssrf-guard.js.map +0 -1
- package/dist/steps/builtin/switch.step.d.ts.map +0 -1
- package/dist/steps/builtin/switch.step.js.map +0 -1
- package/dist/steps/builtin/wait.step.d.ts.map +0 -1
- package/dist/steps/builtin/wait.step.js.map +0 -1
- package/dist/steps/step-registry.d.ts.map +0 -1
- package/dist/steps/step-registry.js +0 -103
- package/dist/steps/step-registry.js.map +0 -1
- package/dist/triggers/builtin/default-cron-trigger.d.ts.map +0 -1
- package/dist/triggers/builtin/default-cron-trigger.js.map +0 -1
- package/dist/triggers/builtin/default-event-trigger.d.ts.map +0 -1
- package/dist/triggers/builtin/default-event-trigger.js.map +0 -1
- package/dist/triggers/builtin/default-manual-trigger.d.ts.map +0 -1
- package/dist/triggers/builtin/default-manual-trigger.js.map +0 -1
- package/dist/triggers/builtin/default-webhook-trigger.d.ts +0 -72
- package/dist/triggers/builtin/default-webhook-trigger.d.ts.map +0 -1
- package/dist/triggers/builtin/default-webhook-trigger.js +0 -91
- package/dist/triggers/builtin/default-webhook-trigger.js.map +0 -1
- package/dist/triggers/builtin/default-webhook-v2-trigger.d.ts.map +0 -1
- package/dist/triggers/builtin/default-webhook-v2-trigger.js.map +0 -1
- package/dist/triggers/trigger-registry.d.ts +0 -48
- package/dist/triggers/trigger-registry.d.ts.map +0 -1
- package/dist/triggers/trigger-registry.js +0 -83
- package/dist/triggers/trigger-registry.js.map +0 -1
- /package/dist/{steps/builtin → connectors/builtin/steps}/ssrf-guard.d.ts +0 -0
- /package/dist/{steps/builtin → connectors/builtin/steps}/ssrf-guard.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-connector.js","sourceRoot":"","sources":["../../../src/connectors/core/base-connector.ts"],"names":[],"mappings":"AAWA,MAAM,OAAgB,aAAa;IAiBjC;;;OAGG;IACM,IAAI,CAAU;CA6BxB"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ConnectorRegistry — the single place components become known to the system.
|
|
3
|
+
*
|
|
4
|
+
* ─── What it replaces ───
|
|
5
|
+
*
|
|
6
|
+
* A host used to assemble four separate things by hand: `StepRegistry`,
|
|
7
|
+
* `TriggerRegistry`, `ServiceRegistry`, and a fixed central credential union.
|
|
8
|
+
* Nothing tied them together, so a step could register while the service it
|
|
9
|
+
* needed did not, and a credential could exist that no component could name —
|
|
10
|
+
* failing mid-execution. Those three registries are gone; this is the one.
|
|
11
|
+
*
|
|
12
|
+
* A host registers ONE complete connector and gets all of it at once:
|
|
13
|
+
*
|
|
14
|
+
* connectors.register(new GmailConnector());
|
|
15
|
+
*
|
|
16
|
+
* There is deliberately no `registerStep`, `registerTrigger`, or
|
|
17
|
+
* `registerCredential`. If those existed, a component could enter the system
|
|
18
|
+
* without an owning connector — and every check below depends on knowing the
|
|
19
|
+
* owner.
|
|
20
|
+
*/
|
|
21
|
+
import type { BaseConnector, AnyStep, AnyTrigger } from './base-connector.js';
|
|
22
|
+
import type { StepSummary, StepDescriptor } from '../../steps/step-descriptor.js';
|
|
23
|
+
import type { TriggerSummary, TriggerDescriptor } from '../../triggers/trigger-descriptor.js';
|
|
24
|
+
import type { CredentialDefinition } from './credentials.js';
|
|
25
|
+
import type { ConnectorCredentialTypes } from '../../common/credentials.js';
|
|
26
|
+
/** A step plus the identity of the connector that provides it. */
|
|
27
|
+
export interface RegisteredStep {
|
|
28
|
+
readonly connectorId: string;
|
|
29
|
+
readonly connectorName: string;
|
|
30
|
+
readonly step: AnyStep;
|
|
31
|
+
}
|
|
32
|
+
/** A trigger plus the identity of the connector that provides it. */
|
|
33
|
+
export interface RegisteredTrigger {
|
|
34
|
+
readonly connectorId: string;
|
|
35
|
+
readonly connectorName: string;
|
|
36
|
+
readonly trigger: AnyTrigger;
|
|
37
|
+
}
|
|
38
|
+
/** A credential definition plus the identity of the connector that declares it. */
|
|
39
|
+
export interface RegisteredCredential {
|
|
40
|
+
readonly connectorId: string;
|
|
41
|
+
readonly connectorName: string;
|
|
42
|
+
readonly definition: CredentialDefinition;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* A connector was rejected at registration.
|
|
46
|
+
*
|
|
47
|
+
* Carries EVERY problem found, not just the first. Registration happens at
|
|
48
|
+
* boot, so a developer fixing a new connector otherwise plays whack-a-mole:
|
|
49
|
+
* restart, see one error, fix, restart. One throw listing all four mistakes
|
|
50
|
+
* turns that into a single edit.
|
|
51
|
+
*/
|
|
52
|
+
export declare class ConnectorRegistrationError extends Error {
|
|
53
|
+
readonly connectorId: string;
|
|
54
|
+
readonly problems: readonly string[];
|
|
55
|
+
constructor(connectorId: string, problems: readonly string[]);
|
|
56
|
+
}
|
|
57
|
+
/** A lookup named something that was never registered. */
|
|
58
|
+
export declare class UnknownComponentError extends Error {
|
|
59
|
+
readonly kind: 'connector' | 'step' | 'trigger' | 'credential';
|
|
60
|
+
readonly id: string;
|
|
61
|
+
constructor(kind: 'connector' | 'step' | 'trigger' | 'credential', id: string);
|
|
62
|
+
}
|
|
63
|
+
export declare class ConnectorRegistry {
|
|
64
|
+
private readonly connectorsById;
|
|
65
|
+
private readonly stepsByType;
|
|
66
|
+
private readonly triggersByType;
|
|
67
|
+
private readonly credentialsByType;
|
|
68
|
+
constructor();
|
|
69
|
+
/**
|
|
70
|
+
* Register a complete connector, or reject it entirely.
|
|
71
|
+
*
|
|
72
|
+
* @throws {ConnectorRegistrationError} listing every problem found.
|
|
73
|
+
*/
|
|
74
|
+
register(connector: BaseConnector): void;
|
|
75
|
+
/** @throws {UnknownComponentError} when no such connector is registered. */
|
|
76
|
+
getConnector(connectorId: string): BaseConnector;
|
|
77
|
+
/** @throws {UnknownComponentError} when no registered connector provides it. */
|
|
78
|
+
getStep(stepType: string): AnyStep;
|
|
79
|
+
/** @throws {UnknownComponentError} when no registered connector provides it. */
|
|
80
|
+
getTrigger(triggerType: string): AnyTrigger;
|
|
81
|
+
/**
|
|
82
|
+
* Non-throwing lookups, for callers deciding IF a component exists rather
|
|
83
|
+
* than assuming it does — validating a saved workflow against the connectors
|
|
84
|
+
* this deployment actually registered, for instance.
|
|
85
|
+
*
|
|
86
|
+
* Without these, "is this step available?" has to be written as try/catch
|
|
87
|
+
* around `getStep()`, which is control flow by exception and swallows real
|
|
88
|
+
* errors as readily as missing ones.
|
|
89
|
+
*/
|
|
90
|
+
findStep(stepType: string): RegisteredStep | undefined;
|
|
91
|
+
findTrigger(triggerType: string): RegisteredTrigger | undefined;
|
|
92
|
+
/** @throws {UnknownComponentError} when no registered connector declares it. */
|
|
93
|
+
getCredentialDefinition(credType: string): CredentialDefinition;
|
|
94
|
+
findCredentialDefinition(credType: string): CredentialDefinition | undefined;
|
|
95
|
+
hasConnector(connectorId: string): boolean;
|
|
96
|
+
hasStep(stepType: string): boolean;
|
|
97
|
+
hasTrigger(triggerType: string): boolean;
|
|
98
|
+
listConnectors(): readonly BaseConnector[];
|
|
99
|
+
/** Every step from every registered connector, each tagged with its owner. */
|
|
100
|
+
listSteps(): readonly RegisteredStep[];
|
|
101
|
+
listTriggers(): readonly RegisteredTrigger[];
|
|
102
|
+
listStepSummaries(): StepSummary[];
|
|
103
|
+
/** @throws {UnknownComponentError} when no registered connector provides it. */
|
|
104
|
+
getStepDescriptor(stepType: string): StepDescriptor;
|
|
105
|
+
listTriggerSummaries(): TriggerSummary[];
|
|
106
|
+
/** @throws {UnknownComponentError} when no registered connector provides it. */
|
|
107
|
+
getTriggerDescriptor(triggerType: string): TriggerDescriptor;
|
|
108
|
+
/**
|
|
109
|
+
* Every credential type, grouped by the connector that declares it, with the
|
|
110
|
+
* form fields its shape needs. What the vault's create flow renders from.
|
|
111
|
+
* Connectors that declare no credentials are omitted.
|
|
112
|
+
*/
|
|
113
|
+
listCredentialTypes(): ConnectorCredentialTypes[];
|
|
114
|
+
/**
|
|
115
|
+
* Every reason this connector cannot be registered. Empty means valid.
|
|
116
|
+
*
|
|
117
|
+
* Pure: reads state, writes none. That is what makes atomic registration
|
|
118
|
+
* possible — the caller can know the verdict before touching a map.
|
|
119
|
+
*/
|
|
120
|
+
private findProblems;
|
|
121
|
+
/**
|
|
122
|
+
* Validate the connector's credential declarations.
|
|
123
|
+
*
|
|
124
|
+
* @returns the types it declares — the authority for the component checks below.
|
|
125
|
+
*/
|
|
126
|
+
private checkCredentials;
|
|
127
|
+
private checkSteps;
|
|
128
|
+
private checkTriggers;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=connector-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connector-registry.d.ts","sourceRoot":"","sources":["../../../src/connectors/core/connector-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ConnectorRegistry — the single place components become known to the system.
|
|
3
|
+
*
|
|
4
|
+
* ─── What it replaces ───
|
|
5
|
+
*
|
|
6
|
+
* A host used to assemble four separate things by hand: `StepRegistry`,
|
|
7
|
+
* `TriggerRegistry`, `ServiceRegistry`, and a fixed central credential union.
|
|
8
|
+
* Nothing tied them together, so a step could register while the service it
|
|
9
|
+
* needed did not, and a credential could exist that no component could name —
|
|
10
|
+
* failing mid-execution. Those three registries are gone; this is the one.
|
|
11
|
+
*
|
|
12
|
+
* A host registers ONE complete connector and gets all of it at once:
|
|
13
|
+
*
|
|
14
|
+
* connectors.register(new GmailConnector());
|
|
15
|
+
*
|
|
16
|
+
* There is deliberately no `registerStep`, `registerTrigger`, or
|
|
17
|
+
* `registerCredential`. If those existed, a component could enter the system
|
|
18
|
+
* without an owning connector — and every check below depends on knowing the
|
|
19
|
+
* owner.
|
|
20
|
+
*/
|
|
21
|
+
import { BuiltinConnector } from '../builtin/builtin-connector.js';
|
|
22
|
+
import { buildStepSummary, buildStepDescriptor } from '../../steps/step-descriptor.js';
|
|
23
|
+
import { buildTriggerSummary, buildTriggerDescriptor } from '../../triggers/trigger-descriptor.js';
|
|
24
|
+
import { CREDENTIAL_TYPE_PATTERN } from './credentials.js';
|
|
25
|
+
import { CREDENTIAL_AUTH_REGISTRY } from '../../common/credentials.js';
|
|
26
|
+
// ─── Errors ───
|
|
27
|
+
/**
|
|
28
|
+
* A connector was rejected at registration.
|
|
29
|
+
*
|
|
30
|
+
* Carries EVERY problem found, not just the first. Registration happens at
|
|
31
|
+
* boot, so a developer fixing a new connector otherwise plays whack-a-mole:
|
|
32
|
+
* restart, see one error, fix, restart. One throw listing all four mistakes
|
|
33
|
+
* turns that into a single edit.
|
|
34
|
+
*/
|
|
35
|
+
export class ConnectorRegistrationError extends Error {
|
|
36
|
+
connectorId;
|
|
37
|
+
problems;
|
|
38
|
+
constructor(connectorId, problems) {
|
|
39
|
+
super(`ConnectorRegistry: cannot register connector "${connectorId}":\n` +
|
|
40
|
+
problems.map((problem) => ` - ${problem}`).join('\n'));
|
|
41
|
+
this.name = 'ConnectorRegistrationError';
|
|
42
|
+
this.connectorId = connectorId;
|
|
43
|
+
this.problems = problems;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** A lookup named something that was never registered. */
|
|
47
|
+
export class UnknownComponentError extends Error {
|
|
48
|
+
kind;
|
|
49
|
+
id;
|
|
50
|
+
constructor(kind, id) {
|
|
51
|
+
super(`ConnectorRegistry: unknown ${kind} "${id}". ` +
|
|
52
|
+
`Is its connector registered at boot?`);
|
|
53
|
+
this.name = 'UnknownComponentError';
|
|
54
|
+
this.kind = kind;
|
|
55
|
+
this.id = id;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// ─── Registry ───
|
|
59
|
+
export class ConnectorRegistry {
|
|
60
|
+
connectorsById = new Map();
|
|
61
|
+
stepsByType = new Map();
|
|
62
|
+
triggersByType = new Map();
|
|
63
|
+
credentialsByType = new Map();
|
|
64
|
+
constructor() {
|
|
65
|
+
this.register(new BuiltinConnector());
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Register a complete connector, or reject it entirely.
|
|
69
|
+
*
|
|
70
|
+
* @throws {ConnectorRegistrationError} listing every problem found.
|
|
71
|
+
*/
|
|
72
|
+
register(connector) {
|
|
73
|
+
const problems = this.findProblems(connector);
|
|
74
|
+
if (problems.length > 0) {
|
|
75
|
+
throw new ConnectorRegistrationError(connector.id, problems);
|
|
76
|
+
}
|
|
77
|
+
// Commit. Only reached when the connector is wholly valid, so no partial
|
|
78
|
+
// write is possible — this is the atomicity guarantee, and it is why
|
|
79
|
+
// validation cannot be interleaved with insertion.
|
|
80
|
+
this.connectorsById.set(connector.id, connector);
|
|
81
|
+
for (const definition of connector.credentials) {
|
|
82
|
+
this.credentialsByType.set(definition.credType, {
|
|
83
|
+
connectorId: connector.id,
|
|
84
|
+
connectorName: connector.name,
|
|
85
|
+
definition,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
for (const step of connector.steps) {
|
|
89
|
+
// Stamp WHO owns it, so the palette can group by connector. The step
|
|
90
|
+
// itself never sets these — its owner does, here, at registration.
|
|
91
|
+
stampOwner(step, connector);
|
|
92
|
+
this.stepsByType.set(step.type, {
|
|
93
|
+
connectorId: connector.id,
|
|
94
|
+
connectorName: connector.name,
|
|
95
|
+
step,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
for (const trigger of connector.triggers) {
|
|
99
|
+
stampOwner(trigger, connector);
|
|
100
|
+
this.triggersByType.set(trigger.type, {
|
|
101
|
+
connectorId: connector.id,
|
|
102
|
+
connectorName: connector.name,
|
|
103
|
+
trigger,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// ─── Lookups ───
|
|
108
|
+
/** @throws {UnknownComponentError} when no such connector is registered. */
|
|
109
|
+
getConnector(connectorId) {
|
|
110
|
+
const connector = this.connectorsById.get(connectorId);
|
|
111
|
+
if (!connector)
|
|
112
|
+
throw new UnknownComponentError('connector', connectorId);
|
|
113
|
+
return connector;
|
|
114
|
+
}
|
|
115
|
+
/** @throws {UnknownComponentError} when no registered connector provides it. */
|
|
116
|
+
getStep(stepType) {
|
|
117
|
+
const registered = this.stepsByType.get(stepType);
|
|
118
|
+
if (!registered)
|
|
119
|
+
throw new UnknownComponentError('step', stepType);
|
|
120
|
+
return registered.step;
|
|
121
|
+
}
|
|
122
|
+
/** @throws {UnknownComponentError} when no registered connector provides it. */
|
|
123
|
+
getTrigger(triggerType) {
|
|
124
|
+
const registered = this.triggersByType.get(triggerType);
|
|
125
|
+
if (!registered)
|
|
126
|
+
throw new UnknownComponentError('trigger', triggerType);
|
|
127
|
+
return registered.trigger;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Non-throwing lookups, for callers deciding IF a component exists rather
|
|
131
|
+
* than assuming it does — validating a saved workflow against the connectors
|
|
132
|
+
* this deployment actually registered, for instance.
|
|
133
|
+
*
|
|
134
|
+
* Without these, "is this step available?" has to be written as try/catch
|
|
135
|
+
* around `getStep()`, which is control flow by exception and swallows real
|
|
136
|
+
* errors as readily as missing ones.
|
|
137
|
+
*/
|
|
138
|
+
findStep(stepType) {
|
|
139
|
+
return this.stepsByType.get(stepType);
|
|
140
|
+
}
|
|
141
|
+
findTrigger(triggerType) {
|
|
142
|
+
return this.triggersByType.get(triggerType);
|
|
143
|
+
}
|
|
144
|
+
/** @throws {UnknownComponentError} when no registered connector declares it. */
|
|
145
|
+
getCredentialDefinition(credType) {
|
|
146
|
+
const registered = this.credentialsByType.get(credType);
|
|
147
|
+
if (!registered)
|
|
148
|
+
throw new UnknownComponentError('credential', credType);
|
|
149
|
+
return registered.definition;
|
|
150
|
+
}
|
|
151
|
+
findCredentialDefinition(credType) {
|
|
152
|
+
return this.credentialsByType.get(credType)?.definition;
|
|
153
|
+
}
|
|
154
|
+
hasConnector(connectorId) {
|
|
155
|
+
return this.connectorsById.has(connectorId);
|
|
156
|
+
}
|
|
157
|
+
hasStep(stepType) {
|
|
158
|
+
return this.stepsByType.has(stepType);
|
|
159
|
+
}
|
|
160
|
+
hasTrigger(triggerType) {
|
|
161
|
+
return this.triggersByType.has(triggerType);
|
|
162
|
+
}
|
|
163
|
+
// ─── Listings ───
|
|
164
|
+
listConnectors() {
|
|
165
|
+
return Array.from(this.connectorsById.values());
|
|
166
|
+
}
|
|
167
|
+
/** Every step from every registered connector, each tagged with its owner. */
|
|
168
|
+
listSteps() {
|
|
169
|
+
return Array.from(this.stepsByType.values());
|
|
170
|
+
}
|
|
171
|
+
listTriggers() {
|
|
172
|
+
return Array.from(this.triggersByType.values());
|
|
173
|
+
}
|
|
174
|
+
// ─── Catalogue (what the builder's palette and detail endpoints read) ───
|
|
175
|
+
//
|
|
176
|
+
// These answer the questions `StepRegistry` / `TriggerRegistry` used to. They
|
|
177
|
+
// are here rather than in a fourth registry because a component cannot be
|
|
178
|
+
// described without knowing its owner, and this is the only object that does.
|
|
179
|
+
listStepSummaries() {
|
|
180
|
+
return this.listSteps().map((r) => buildStepSummary(r.step));
|
|
181
|
+
}
|
|
182
|
+
/** @throws {UnknownComponentError} when no registered connector provides it. */
|
|
183
|
+
getStepDescriptor(stepType) {
|
|
184
|
+
return buildStepDescriptor(this.getStep(stepType));
|
|
185
|
+
}
|
|
186
|
+
listTriggerSummaries() {
|
|
187
|
+
return this.listTriggers().map((r) => buildTriggerSummary(r.trigger));
|
|
188
|
+
}
|
|
189
|
+
/** @throws {UnknownComponentError} when no registered connector provides it. */
|
|
190
|
+
getTriggerDescriptor(triggerType) {
|
|
191
|
+
return buildTriggerDescriptor(this.getTrigger(triggerType));
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Every credential type, grouped by the connector that declares it, with the
|
|
195
|
+
* form fields its shape needs. What the vault's create flow renders from.
|
|
196
|
+
* Connectors that declare no credentials are omitted.
|
|
197
|
+
*/
|
|
198
|
+
listCredentialTypes() {
|
|
199
|
+
return this.listConnectors()
|
|
200
|
+
.filter((connector) => connector.credentials.length > 0)
|
|
201
|
+
.map((connector) => ({
|
|
202
|
+
connectorId: connector.id,
|
|
203
|
+
connectorName: connector.name,
|
|
204
|
+
credentials: connector.credentials.map((definition) => ({
|
|
205
|
+
credType: definition.credType,
|
|
206
|
+
label: definition.label,
|
|
207
|
+
...(definition.description !== undefined
|
|
208
|
+
? { description: definition.description }
|
|
209
|
+
: {}),
|
|
210
|
+
authType: definition.authType,
|
|
211
|
+
fields: CREDENTIAL_AUTH_REGISTRY.find((entry) => entry.type === definition.authType)
|
|
212
|
+
?.fields ?? [],
|
|
213
|
+
})),
|
|
214
|
+
}));
|
|
215
|
+
}
|
|
216
|
+
// ─── Validation ───
|
|
217
|
+
/**
|
|
218
|
+
* Every reason this connector cannot be registered. Empty means valid.
|
|
219
|
+
*
|
|
220
|
+
* Pure: reads state, writes none. That is what makes atomic registration
|
|
221
|
+
* possible — the caller can know the verdict before touching a map.
|
|
222
|
+
*/
|
|
223
|
+
findProblems(connector) {
|
|
224
|
+
const problems = [];
|
|
225
|
+
if (!connector.id) {
|
|
226
|
+
problems.push('connector id must not be empty');
|
|
227
|
+
}
|
|
228
|
+
if (this.connectorsById.has(connector.id)) {
|
|
229
|
+
problems.push(`connector id "${connector.id}" is already registered. ` +
|
|
230
|
+
`Registering the same connector twice is usually a duplicated ` +
|
|
231
|
+
`host wiring line.`);
|
|
232
|
+
}
|
|
233
|
+
const declared = this.checkCredentials(connector, problems);
|
|
234
|
+
this.checkSteps(connector, declared, problems);
|
|
235
|
+
this.checkTriggers(connector, declared, problems);
|
|
236
|
+
return problems;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Validate the connector's credential declarations.
|
|
240
|
+
*
|
|
241
|
+
* @returns the types it declares — the authority for the component checks below.
|
|
242
|
+
*/
|
|
243
|
+
checkCredentials(connector, problems) {
|
|
244
|
+
const declared = new Set();
|
|
245
|
+
for (const definition of connector.credentials) {
|
|
246
|
+
if (!CREDENTIAL_TYPE_PATTERN.test(definition.credType)) {
|
|
247
|
+
problems.push(`credential type "${definition.credType}" must be SCREAMING_SNAKE_CASE, ` +
|
|
248
|
+
`e.g. "SLACK_BOT_TOKEN"`);
|
|
249
|
+
}
|
|
250
|
+
// Ownership: a definition borrowed from another connector would let this
|
|
251
|
+
// one claim a type that is not its own.
|
|
252
|
+
if (definition.connectorId !== connector.id) {
|
|
253
|
+
problems.push(`credential type "${definition.credType}" belongs to connector ` +
|
|
254
|
+
`"${definition.connectorId}" but is declared by "${connector.id}"`);
|
|
255
|
+
}
|
|
256
|
+
if (declared.has(definition.credType)) {
|
|
257
|
+
problems.push(`credential type "${definition.credType}" is declared twice`);
|
|
258
|
+
}
|
|
259
|
+
declared.add(definition.credType);
|
|
260
|
+
// Global uniqueness. The type is what stored credentials carry, so two
|
|
261
|
+
// connectors answering to one type would make ownership ambiguous.
|
|
262
|
+
const existing = this.credentialsByType.get(definition.credType);
|
|
263
|
+
if (existing) {
|
|
264
|
+
problems.push(`credential type "${definition.credType}" is already declared by connector ` +
|
|
265
|
+
`"${existing.connectorId}". Prefix types with the connector name.`);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return declared;
|
|
269
|
+
}
|
|
270
|
+
checkSteps(connector, declaredCredentialTypes, problems) {
|
|
271
|
+
const seen = new Set();
|
|
272
|
+
for (const step of connector.steps) {
|
|
273
|
+
if (!step.type) {
|
|
274
|
+
problems.push(`step "${step.name}" has an empty type id`);
|
|
275
|
+
}
|
|
276
|
+
if (seen.has(step.type)) {
|
|
277
|
+
problems.push(`step type "${step.type}" is declared twice`);
|
|
278
|
+
}
|
|
279
|
+
seen.add(step.type);
|
|
280
|
+
// A step may only accept credential types its OWN connector declares.
|
|
281
|
+
// This is what catches a step wired to a definition the connector forgot
|
|
282
|
+
// to list: without it the credential picker would render empty and the
|
|
283
|
+
// run would fail with "no credential configured", pointing at the user
|
|
284
|
+
// rather than at the wiring.
|
|
285
|
+
checkAcceptedCredentials(`step "${step.type}"`, step.credential, connector.id, declaredCredentialTypes, problems);
|
|
286
|
+
checkCredentialSlots(`step "${step.type}"`, step.credentialSlots, problems);
|
|
287
|
+
// Global uniqueness. Step type IDs are the key saved workflows store, so
|
|
288
|
+
// two implementations answering to one ID means dispatch silently picks
|
|
289
|
+
// whichever registered last. A boot failure is the only safe outcome.
|
|
290
|
+
const existing = this.stepsByType.get(step.type);
|
|
291
|
+
if (existing) {
|
|
292
|
+
problems.push(`step type "${step.type}" is already registered by connector ` +
|
|
293
|
+
`"${existing.connectorId}". Namespace new components as ` +
|
|
294
|
+
`"<connector-id>.<action>".`);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
checkTriggers(connector, declaredCredentialTypes, problems) {
|
|
299
|
+
const seen = new Set();
|
|
300
|
+
for (const trigger of connector.triggers) {
|
|
301
|
+
if (!trigger.type) {
|
|
302
|
+
problems.push(`trigger "${trigger.name}" has an empty type id`);
|
|
303
|
+
}
|
|
304
|
+
if (seen.has(trigger.type)) {
|
|
305
|
+
problems.push(`trigger type "${trigger.type}" is declared twice`);
|
|
306
|
+
}
|
|
307
|
+
seen.add(trigger.type);
|
|
308
|
+
checkAcceptedCredentials(`trigger "${trigger.type}"`, trigger.credential, connector.id, declaredCredentialTypes, problems);
|
|
309
|
+
checkCredentialSlots(`trigger "${trigger.type}"`, trigger.credentialSlots, problems);
|
|
310
|
+
const existing = this.triggersByType.get(trigger.type);
|
|
311
|
+
if (existing) {
|
|
312
|
+
problems.push(`trigger type "${trigger.type}" is already registered by connector ` +
|
|
313
|
+
`"${existing.connectorId}"`);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* A component may only accept credential types its OWN connector declares.
|
|
320
|
+
*
|
|
321
|
+
* Without this, a component wired to a definition its connector forgot to list
|
|
322
|
+
* would render an empty credential picker and fail at run time with "no
|
|
323
|
+
* credential configured", pointing at the user rather than at the wiring.
|
|
324
|
+
*/
|
|
325
|
+
function checkAcceptedCredentials(subject, accepted, connectorId, declared, problems) {
|
|
326
|
+
for (const definition of accepted ?? []) {
|
|
327
|
+
if (declared.has(definition.credType))
|
|
328
|
+
continue;
|
|
329
|
+
problems.push(`${subject} accepts credential type "${definition.credType}", which ` +
|
|
330
|
+
`connector "${connectorId}" does not declare`);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
/** Slot names are the config fields credentials are read from, so they must be unique. */
|
|
334
|
+
function checkCredentialSlots(subject, slots, problems) {
|
|
335
|
+
const seen = new Set();
|
|
336
|
+
for (const slot of slots ?? []) {
|
|
337
|
+
if (!slot.name)
|
|
338
|
+
problems.push(`${subject} has a credential slot with an empty name`);
|
|
339
|
+
if (seen.has(slot.name)) {
|
|
340
|
+
problems.push(`${subject} declares credential slot "${slot.name}" twice`);
|
|
341
|
+
}
|
|
342
|
+
seen.add(slot.name);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
/** Owner facts written onto a registered component, for the palette. */
|
|
346
|
+
function stampOwner(target, connector) {
|
|
347
|
+
const bag = target;
|
|
348
|
+
bag.connectorId = connector.id;
|
|
349
|
+
bag.connectorName = connector.name;
|
|
350
|
+
if (connector.icon !== undefined)
|
|
351
|
+
bag.connectorIcon = connector.icon;
|
|
352
|
+
}
|
|
353
|
+
//# sourceMappingURL=connector-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connector-registry.js","sourceRoot":"","sources":["../../../src/connectors/core/connector-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a connector declares about its credentials, and what a component accepts.
|
|
3
|
+
*
|
|
4
|
+
* ─── Type and shape are different things ───
|
|
5
|
+
*
|
|
6
|
+
* A credential has a TYPE and a SHAPE.
|
|
7
|
+
*
|
|
8
|
+
* - The type, `credType`, is the connector's own enum value — `SLACK_BOT_TOKEN`,
|
|
9
|
+
* `GITHUB_WEBHOOK_SECRET`. It says who owns the credential and what it is for,
|
|
10
|
+
* and it is what compatibility is checked on: a Slack step lists only Slack
|
|
11
|
+
* credentials, even though a Jira token has the same shape.
|
|
12
|
+
* - The shape, `authType`, is one of the framework's small fixed set
|
|
13
|
+
* ({@link CredentialAuthType}). It decides how values are stored, which form
|
|
14
|
+
* the vault renders, and how the value is applied to an outbound request.
|
|
15
|
+
*
|
|
16
|
+
* A definition binds one type to one shape, and a stored credential carries both.
|
|
17
|
+
*
|
|
18
|
+
* ─── Definitions are referenced, not retyped ───
|
|
19
|
+
*
|
|
20
|
+
* Components refer to the DEFINITION OBJECT rather than repeating the type as
|
|
21
|
+
* text, so a typo is a compile error rather than a boot error:
|
|
22
|
+
*
|
|
23
|
+
* export const SLACK_BOT_TOKEN = defineCredential({
|
|
24
|
+
* connectorId: 'slack', credType: 'SLACK_BOT_TOKEN',
|
|
25
|
+
* label: 'Bot token', authType: CredentialAuthType.Bearer,
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* override readonly credential = [SLACK_BOT_TOKEN]; // not ['SLACK_BOT_TOKEN']
|
|
29
|
+
*/
|
|
30
|
+
import type { CredentialAuthType } from '../../common/credentials.js';
|
|
31
|
+
import type { AnyStep } from './base-connector.js';
|
|
32
|
+
/**
|
|
33
|
+
* The format a `credType` must follow: SCREAMING_SNAKE_CASE, the way the
|
|
34
|
+
* framework's other enums read. Checked by the registry at boot.
|
|
35
|
+
*/
|
|
36
|
+
export declare const CREDENTIAL_TYPE_PATTERN: RegExp;
|
|
37
|
+
/**
|
|
38
|
+
* One credential type a connector offers. Build with {@link defineCredential}.
|
|
39
|
+
*
|
|
40
|
+
* Generic over the OWNING CONNECTOR'S ID so the owner survives in the type:
|
|
41
|
+
* a definition owned by `acme` and one owned by `other` are different types,
|
|
42
|
+
* which is what lets {@link declareSteps} reject a step reaching for another
|
|
43
|
+
* connector's credential without running anything.
|
|
44
|
+
*/
|
|
45
|
+
export interface CredentialDefinition<TConnector extends string = string> {
|
|
46
|
+
/** The connector's enum value, e.g. `'SLACK_BOT_TOKEN'`. Globally unique. */
|
|
47
|
+
readonly credType: string;
|
|
48
|
+
/** The connector that owns it, for the registry's ownership check. */
|
|
49
|
+
readonly connectorId: TConnector;
|
|
50
|
+
/** Human label for the vault, e.g. `"Bot token"`. */
|
|
51
|
+
readonly label: string;
|
|
52
|
+
/** Where to find or how to choose the value. Shown when creating one. */
|
|
53
|
+
readonly description?: string;
|
|
54
|
+
/** The stored shape. Drives the vault's form and outbound application. */
|
|
55
|
+
readonly authType: CredentialAuthType;
|
|
56
|
+
}
|
|
57
|
+
/** Declare a credential type. Frozen, so every component holds the same object. */
|
|
58
|
+
export declare function defineCredential<TConnector extends string>(input: {
|
|
59
|
+
connectorId: TConnector;
|
|
60
|
+
credType: string;
|
|
61
|
+
label: string;
|
|
62
|
+
description?: string;
|
|
63
|
+
authType: CredentialAuthType;
|
|
64
|
+
}): CredentialDefinition<TConnector>;
|
|
65
|
+
/**
|
|
66
|
+
* The credential types a component accepts — the definitions themselves.
|
|
67
|
+
*
|
|
68
|
+
* Empty means "authenticates nothing", which is most components. This says
|
|
69
|
+
* WHICH types are acceptable, not WHETHER one is needed: that stays with
|
|
70
|
+
* `credentialSlots`, because HTTP_REQUEST accepts several types while needing
|
|
71
|
+
* none.
|
|
72
|
+
*/
|
|
73
|
+
export type CredentialRequirement = readonly CredentialDefinition[];
|
|
74
|
+
/** A component that authenticates nothing — a CODE step, a LOOP step. */
|
|
75
|
+
export declare const NO_CREDENTIAL: CredentialRequirement;
|
|
76
|
+
/** Can a stored credential of this type satisfy the requirement? */
|
|
77
|
+
export declare function acceptsCredential(requirement: CredentialRequirement, credType: string): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* A step, narrowed to the credential types one connector offers.
|
|
80
|
+
*
|
|
81
|
+
* `AnyStep` erases each step's credential types, which is what lets a registry
|
|
82
|
+
* hold steps from every connector in one map — and also what stops the compiler
|
|
83
|
+
* from noticing a step reaching for a credential its connector never declared.
|
|
84
|
+
* This type puts that information back for the one moment it matters: when a
|
|
85
|
+
* connector lists the steps it owns.
|
|
86
|
+
*/
|
|
87
|
+
export type StepAccepting<TCredential extends CredentialDefinition> = Omit<AnyStep, 'credential'> & {
|
|
88
|
+
readonly credential?: readonly TCredential[];
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Declare a connector's steps, checked against its credentials AT COMPILE TIME.
|
|
92
|
+
*
|
|
93
|
+
* override readonly credentials = BUILTIN_CREDENTIALS;
|
|
94
|
+
* override readonly steps = declareSteps(BUILTIN_CREDENTIALS, [
|
|
95
|
+
* new HttpRequestStep(), // accepts builtin types — fine
|
|
96
|
+
* new ForeignStep(), // accepts another connector's type — red squiggle
|
|
97
|
+
* ]);
|
|
98
|
+
*
|
|
99
|
+
* The registry makes the same check at boot, because a step whose `credential`
|
|
100
|
+
* is typed as the wide `CredentialDefinition[]` has no literal types left to
|
|
101
|
+
* compare.
|
|
102
|
+
*/
|
|
103
|
+
export declare function declareSteps<TCredential extends CredentialDefinition>(_credentials: readonly TCredential[], steps: readonly StepAccepting<TCredential>[]): readonly AnyStep[];
|
|
104
|
+
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../src/connectors/core/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,QAAoC,CAAC;AAEzE;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAoB,CAAC,UAAU,SAAS,MAAM,GAAG,MAAM;IACtE,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,sEAAsE;IACtE,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;IACjC,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;CACvC;AAED,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,UAAU,SAAS,MAAM,EAAE,KAAK,EAAE;IACjE,WAAW,EAAE,UAAU,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,kBAAkB,CAAC;CAC9B,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAQnC;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,qBAAqB,GAAG,SAAS,oBAAoB,EAAE,CAAC;AAEpE,yEAAyE;AACzE,eAAO,MAAM,aAAa,EAAE,qBAA0B,CAAC;AAEvD,oEAAoE;AACpE,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,qBAAqB,EAClC,QAAQ,EAAE,MAAM,GACf,OAAO,CAET;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,CAAC,WAAW,SAAS,oBAAoB,IAChE,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CAC9C,CAAC;AAEJ;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,WAAW,SAAS,oBAAoB,EACnE,YAAY,EAAE,SAAS,WAAW,EAAE,EACpC,KAAK,EAAE,SAAS,aAAa,CAAC,WAAW,CAAC,EAAE,GAC3C,SAAS,OAAO,EAAE,CAEpB"}
|