@prismatic-io/spectral 9.0.6 → 9.1.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/dist/generators/componentManifest/getInputs.d.ts +1 -0
- package/dist/generators/componentManifest/getInputs.js +10 -0
- package/dist/generators/componentManifest/templates/partials/inputs.ejs +4 -2
- package/dist/serverTypes/convertComponent.js +1 -1
- package/dist/serverTypes/convertIntegration.js +19 -8
- package/dist/types/ComponentManifest.d.ts +4 -4
- package/dist/types/ComponentRegistry.d.ts +3 -15
- package/dist/types/ConfigVars.d.ts +29 -11
- package/dist/types/ConnectionDefinition.d.ts +6 -1
- package/dist/types/IntegrationDefinition.d.ts +17 -12
- package/package.json +1 -1
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.INPUT_TYPE_MAP = exports.getInputs = void 0;
|
|
4
4
|
const docBlock_1 = require("./docBlock");
|
|
5
|
+
const getDefaultValue = (value) => {
|
|
6
|
+
if (value === undefined || value === "") {
|
|
7
|
+
return value;
|
|
8
|
+
}
|
|
9
|
+
if (typeof value === "string") {
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
return JSON.stringify(value);
|
|
13
|
+
};
|
|
5
14
|
const getInputs = ({ inputs, docBlock = docBlock_1.DOC_BLOCK_DEFAULT }) => {
|
|
6
15
|
return inputs.reduce((acc, input) => {
|
|
7
16
|
if ((typeof input.shown === "boolean" && input.shown === false) ||
|
|
@@ -20,6 +29,7 @@ const getInputs = ({ inputs, docBlock = docBlock_1.DOC_BLOCK_DEFAULT }) => {
|
|
|
20
29
|
collection: input.collection,
|
|
21
30
|
onPremControlled: input.onPremiseControlled || input.onPremControlled,
|
|
22
31
|
docBlock: docBlock(input),
|
|
32
|
+
default: getDefaultValue(input.default),
|
|
23
33
|
},
|
|
24
34
|
];
|
|
25
35
|
}, []);
|
|
@@ -6,8 +6,10 @@
|
|
|
6
6
|
<%_ } else { -%>
|
|
7
7
|
collection: undefined,
|
|
8
8
|
<%_ } -%>
|
|
9
|
-
<%_ if (input.default) { -%>
|
|
10
|
-
default:
|
|
9
|
+
<%_ if (typeof input.default !== 'undefined') { -%>
|
|
10
|
+
default: `<%- input.default %>`,
|
|
11
|
+
<%_ } else { -%>
|
|
12
|
+
default: undefined,
|
|
11
13
|
<%_ } -%>
|
|
12
14
|
<%_ if (input.required) { -%>
|
|
13
15
|
required: <%= input.required %>,
|
|
@@ -18,7 +18,7 @@ const lodash_1 = require("lodash");
|
|
|
18
18
|
const convertInput = (key, _a) => {
|
|
19
19
|
var { default: defaultValue, type, label, collection } = _a, rest = __rest(_a, ["default", "type", "label", "collection"]);
|
|
20
20
|
const keyLabel = collection === "keyvaluelist" && typeof label === "object" ? label.key : undefined;
|
|
21
|
-
return Object.assign(Object.assign({}, (0, lodash_1.omit)(rest, ["onPremControlled"])), { key,
|
|
21
|
+
return Object.assign(Object.assign({}, (0, lodash_1.omit)(rest, ["onPremControlled", "permissionAndVisibilityType", "visibleToOrgDeployer"])), { key,
|
|
22
22
|
type, default: defaultValue !== null && defaultValue !== void 0 ? defaultValue : types_1.InputFieldDefaultMap[type], collection, label: typeof label === "string" ? label : label.value, keyLabel, onPremiseControlled: ("onPremControlled" in rest && rest.onPremControlled) || undefined });
|
|
23
23
|
};
|
|
24
24
|
exports.convertInput = convertInput;
|
|
@@ -156,7 +156,7 @@ const convertConfigVarPermissionAndVisibility = ({ permissionAndVisibilityType,
|
|
|
156
156
|
};
|
|
157
157
|
};
|
|
158
158
|
const convertComponentReference = (componentReference, componentRegistry, referenceType) => {
|
|
159
|
-
var _a, _b
|
|
159
|
+
var _a, _b;
|
|
160
160
|
const manifest = componentRegistry[componentReference.component];
|
|
161
161
|
if (!manifest) {
|
|
162
162
|
throw new Error(`Component with key "${componentReference.component}" not found in component registry.`);
|
|
@@ -174,8 +174,12 @@ const convertComponentReference = (componentReference, componentRegistry, refere
|
|
|
174
174
|
// older versions of the manifest did not contain a key so we fall back to the componentReference key
|
|
175
175
|
key: (_b = manifestEntry.key) !== null && _b !== void 0 ? _b : componentReference.key,
|
|
176
176
|
};
|
|
177
|
-
const inputs = Object.entries(
|
|
178
|
-
|
|
177
|
+
const inputs = Object.entries(manifestEntry.inputs).reduce((result, [key, manifestEntryInput]) => {
|
|
178
|
+
var _a, _b, _c;
|
|
179
|
+
// Retrieve the input value or default to the manifest's default value
|
|
180
|
+
const value = (_b = (_a = componentReference.values) === null || _a === void 0 ? void 0 : _a[key]) !== null && _b !== void 0 ? _b : {
|
|
181
|
+
value: (_c = manifestEntryInput.default) !== null && _c !== void 0 ? _c : "",
|
|
182
|
+
};
|
|
179
183
|
const type = manifestEntryInput.collection
|
|
180
184
|
? "complex"
|
|
181
185
|
: "value" in value
|
|
@@ -186,10 +190,12 @@ const convertComponentReference = (componentReference, componentRegistry, refere
|
|
|
186
190
|
? Object.entries(value.value).map(([k, v]) => ({
|
|
187
191
|
name: { type: "value", value: k },
|
|
188
192
|
type: "value",
|
|
189
|
-
value: v,
|
|
193
|
+
value: JSON.stringify(v),
|
|
190
194
|
}))
|
|
191
195
|
: value.value;
|
|
192
|
-
const formattedValue = type === "complex" || typeof valueExpr === "string"
|
|
196
|
+
const formattedValue = type === "complex" || typeof valueExpr === "string"
|
|
197
|
+
? valueExpr
|
|
198
|
+
: JSON.stringify(valueExpr);
|
|
193
199
|
const meta = convertInputPermissionAndVisibility((0, lodash_1.pick)(value, ["permissionAndVisibilityType", "visibleToOrgDeployer"]));
|
|
194
200
|
return Object.assign(Object.assign({}, result), { [key]: { type: type, value: formattedValue, meta } });
|
|
195
201
|
}
|
|
@@ -320,10 +326,12 @@ const convertConfigVar = (key, configVar, referenceKey, componentRegistry) => {
|
|
|
320
326
|
if (input.shown === false) {
|
|
321
327
|
return result;
|
|
322
328
|
}
|
|
329
|
+
const meta = convertInputPermissionAndVisibility((0, lodash_1.pick)(input, ["permissionAndVisibilityType", "visibleToOrgDeployer"]));
|
|
323
330
|
const defaultValue = input.collection ? [] : "";
|
|
324
331
|
return Object.assign(Object.assign({}, result), { [key]: {
|
|
325
332
|
type: input.collection ? "complex" : "value",
|
|
326
333
|
value: input.default || defaultValue,
|
|
334
|
+
meta,
|
|
327
335
|
} });
|
|
328
336
|
}, {}),
|
|
329
337
|
orgOnly,
|
|
@@ -402,12 +410,15 @@ const convertOnExecution = (onExecution, componentRegistry) => (context, params)
|
|
|
402
410
|
// Construct the component methods from the component registry
|
|
403
411
|
const componentMethods = Object.entries(componentRegistry).reduce((accumulator, [registryComponentKey, { key: componentKey, actions, public: isPublic, signature }]) => {
|
|
404
412
|
const componentActions = Object.entries(actions).reduce((actionsAccumulator, [registryActionKey, action]) => {
|
|
413
|
+
const manifestActions = componentRegistry[componentKey].actions[registryActionKey];
|
|
405
414
|
// Define the method to be called for the action
|
|
406
415
|
const invokeAction = (values) => __awaiter(void 0, void 0, void 0, function* () {
|
|
407
416
|
var _a;
|
|
408
|
-
//
|
|
409
|
-
const transformedValues = Object.entries(
|
|
410
|
-
|
|
417
|
+
// Apply defaults directly within the transformation process
|
|
418
|
+
const transformedValues = Object.entries(manifestActions.inputs).reduce((transformedAccumulator, [inputKey, inputValueBase]) => {
|
|
419
|
+
var _a;
|
|
420
|
+
const inputValue = (_a = values[inputKey]) !== null && _a !== void 0 ? _a : inputValueBase.default;
|
|
421
|
+
const { collection } = inputValueBase;
|
|
411
422
|
return Object.assign(Object.assign({}, transformedAccumulator), { [inputKey]: convertInputValue(inputValue, collection) });
|
|
412
423
|
}, {});
|
|
413
424
|
// Invoke the action with the transformed values
|
|
@@ -15,23 +15,23 @@ interface BaseInput {
|
|
|
15
15
|
default?: unknown;
|
|
16
16
|
}
|
|
17
17
|
export interface ComponentManifestAction {
|
|
18
|
-
key
|
|
18
|
+
key?: string;
|
|
19
19
|
perform: (values: any) => Promise<unknown>;
|
|
20
20
|
inputs: Record<string, BaseInput>;
|
|
21
21
|
}
|
|
22
22
|
export interface ComponentManifestTrigger {
|
|
23
|
-
key
|
|
23
|
+
key?: string;
|
|
24
24
|
perform: (values: any) => Promise<unknown>;
|
|
25
25
|
inputs: Record<string, BaseInput>;
|
|
26
26
|
}
|
|
27
27
|
export interface ComponentManifestDataSource {
|
|
28
|
-
key
|
|
28
|
+
key?: string;
|
|
29
29
|
perform: (values: any) => Promise<unknown>;
|
|
30
30
|
dataSourceType: DataSourceType;
|
|
31
31
|
inputs: Record<string, BaseInput>;
|
|
32
32
|
}
|
|
33
33
|
export interface ComponentManifestConnection {
|
|
34
|
-
key
|
|
34
|
+
key?: string;
|
|
35
35
|
perform: (values: any) => Promise<unknown>;
|
|
36
36
|
onPremAvailable?: boolean;
|
|
37
37
|
inputs: Record<string, BaseInput & {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ComponentManifest,
|
|
2
|
-
import { Prettify, UnionToIntersection } from "./utils";
|
|
1
|
+
import type { ComponentManifest, ConfigVarVisibility } from ".";
|
|
2
|
+
import type { Prettify, UnionToIntersection } from "./utils";
|
|
3
3
|
/**
|
|
4
4
|
* Root ComponentRegistry type exposed for augmentation.
|
|
5
5
|
*
|
|
@@ -19,18 +19,6 @@ export type ComponentRegistry = keyof IntegrationDefinitionComponentRegistry ext
|
|
|
19
19
|
} : UnionToIntersection<keyof IntegrationDefinitionComponentRegistry extends infer TComponentKey ? TComponentKey extends keyof IntegrationDefinitionComponentRegistry ? {
|
|
20
20
|
[Key in TComponentKey]: IntegrationDefinitionComponentRegistry[TComponentKey];
|
|
21
21
|
} : never : never>;
|
|
22
|
-
export interface ConnectionInputPermissionAndVisibility {
|
|
23
|
-
/**
|
|
24
|
-
* Optional value that sets the permission and visibility of the Config Var. @default "customer"
|
|
25
|
-
*
|
|
26
|
-
* "customer" - Customers can view and edit the Config Var.
|
|
27
|
-
* "embedded" - Customers cannot view or update the Config Var as the value will be set programmatically.
|
|
28
|
-
* "organization" - Customers cannot view or update the Config Var as it will always have a default value or be set by the organization.
|
|
29
|
-
*/
|
|
30
|
-
permissionAndVisibilityType?: PermissionAndVisibilityType;
|
|
31
|
-
/** Optional value that specifies whether this Config Var is visible to an Organization deployer. @default true */
|
|
32
|
-
visibleToOrgDeployer?: boolean;
|
|
33
|
-
}
|
|
34
22
|
export type ConfigVarExpression = {
|
|
35
23
|
configVar: string;
|
|
36
24
|
};
|
|
@@ -42,7 +30,7 @@ type ComponentReferenceTypeValueMap<TValue, TMap extends Record<ComponentReferen
|
|
|
42
30
|
actions: ValueExpression<TValue>;
|
|
43
31
|
triggers: ValueExpression<TValue> | ConfigVarExpression;
|
|
44
32
|
dataSources: ValueExpression<TValue> | ConfigVarExpression;
|
|
45
|
-
connections: (ValueExpression<TValue> | ConfigVarExpression) &
|
|
33
|
+
connections: (ValueExpression<TValue> | ConfigVarExpression) & ConfigVarVisibility;
|
|
46
34
|
}> = TMap;
|
|
47
35
|
export type ComponentReference<TComponentReference extends {
|
|
48
36
|
component: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DataSourceDefinition, ConnectionDefinition, Inputs, DataSourceType, Connection, JSONForm, ObjectFieldMap, ObjectSelection, ConfigVarResultCollection, Schedule, CollectionDataSourceType, DataSourceReference, ConfigPage, ConfigPages, ConfigPageElement, ComponentRegistryDataSource, ComponentRegistryConnection, UserLevelConfigPages } from ".";
|
|
2
|
-
import { Prettify, UnionToIntersection } from "./utils";
|
|
1
|
+
import { type DataSourceDefinition, type ConnectionDefinition, type Inputs, type DataSourceType, type Connection, type JSONForm, type ObjectFieldMap, type ObjectSelection, type ConfigVarResultCollection, type Schedule, type CollectionDataSourceType, type DataSourceReference, type ConfigPage, type ConfigPages, type ConfigPageElement, type ComponentRegistryDataSource, type ComponentRegistryConnection, type UserLevelConfigPages } from ".";
|
|
2
|
+
import type { Prettify, UnionToIntersection } from "./utils";
|
|
3
3
|
/** Supported data types for Config Vars. */
|
|
4
4
|
export type ConfigVarDataType = "string" | "date" | "timestamp" | "picklist" | "code" | "boolean" | "number" | "schedule" | "objectSelection" | "objectFieldMap" | "jsonForm";
|
|
5
5
|
type ConfigVarDataTypeDefaultValueMap<TMap extends Record<ConfigVarDataType, unknown> = {
|
|
@@ -30,14 +30,9 @@ type ConfigVarDataTypeRuntimeValueMap<TMap extends Record<ConfigVarDataType, unk
|
|
|
30
30
|
}> = TMap;
|
|
31
31
|
/** Choices of collection types for multi-value Config Vars. */
|
|
32
32
|
export type CollectionType = "valuelist" | "keyvaluelist";
|
|
33
|
-
export type PermissionAndVisibilityType = "customer" | "embedded" | "organization";
|
|
34
33
|
type ConfigVarSingleDataType = Extract<ConfigVarDataType, "schedule" | "objectSelection" | "objectFieldMap" | "jsonForm">;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
/** A unique, unchanging value that is used to maintain identity for the Config Var even if the key changes. */
|
|
38
|
-
stableKey: string;
|
|
39
|
-
/** Optional description for this Config Var. */
|
|
40
|
-
description?: string;
|
|
34
|
+
export type PermissionAndVisibilityType = "customer" | "embedded" | "organization";
|
|
35
|
+
export interface ConfigVarVisibility {
|
|
41
36
|
/**
|
|
42
37
|
* Optional value that sets the permission and visibility of the Config Var. @default "customer"
|
|
43
38
|
*
|
|
@@ -48,7 +43,26 @@ type BaseConfigVar = {
|
|
|
48
43
|
permissionAndVisibilityType?: PermissionAndVisibilityType;
|
|
49
44
|
/** Optional value that specifies whether this Config Var is visible to an Organization deployer. @default true */
|
|
50
45
|
visibleToOrgDeployer?: boolean;
|
|
51
|
-
}
|
|
46
|
+
}
|
|
47
|
+
interface ConfigVarInputVisibility {
|
|
48
|
+
/**
|
|
49
|
+
* Optional value that sets the permission and visibility of the Config Var Input. @default "customer"
|
|
50
|
+
*
|
|
51
|
+
* "customer" - Customers can view and edit the Config Var Input.
|
|
52
|
+
* "embedded" - Customers cannot view or update the Config Var Input as the value will be set programmatically.
|
|
53
|
+
* "organization" - Customers cannot view or update the Config Var Input as it will always have a default value or be set by the organization.
|
|
54
|
+
*/
|
|
55
|
+
permissionAndVisibilityType?: PermissionAndVisibilityType;
|
|
56
|
+
/** Optional value that specifies whether this Config Var Input is visible to an Organization deployer. @default true */
|
|
57
|
+
visibleToOrgDeployer?: boolean;
|
|
58
|
+
}
|
|
59
|
+
/** Common attribute shared by all types of Config Vars. */
|
|
60
|
+
type BaseConfigVar = {
|
|
61
|
+
/** A unique, unchanging value that is used to maintain identity for the Config Var even if the key changes. */
|
|
62
|
+
stableKey: string;
|
|
63
|
+
/** Optional description for this Config Var. */
|
|
64
|
+
description?: string;
|
|
65
|
+
} & ConfigVarVisibility;
|
|
52
66
|
type GetDynamicProperties<TValue, TCollectionType extends CollectionType | undefined> = TCollectionType extends undefined ? {
|
|
53
67
|
defaultValue?: TValue;
|
|
54
68
|
/** Optional value to specify the type of collection if the Config Var is multi-value. */
|
|
@@ -115,7 +129,11 @@ export type DataSourceConfigVar = DataSourceDefinitionConfigVar | DataSourceRefe
|
|
|
115
129
|
type BaseConnectionConfigVar = BaseConfigVar & {
|
|
116
130
|
dataType: "connection";
|
|
117
131
|
};
|
|
118
|
-
type ConnectionDefinitionConfigVar = BaseConnectionConfigVar & Omit<
|
|
132
|
+
type ConnectionDefinitionConfigVar = ConnectionDefinition extends infer TConnectionDefinitionType extends ConnectionDefinition ? TConnectionDefinitionType extends infer TConnectionDefinition extends ConnectionDefinition ? BaseConnectionConfigVar & Omit<TConnectionDefinition, "inputs" | "label" | "comments" | "key"> & {
|
|
133
|
+
inputs: {
|
|
134
|
+
[Key in keyof TConnectionDefinition["inputs"]]: TConnectionDefinition["inputs"][Key] & ConfigVarInputVisibility;
|
|
135
|
+
};
|
|
136
|
+
} : never : never;
|
|
119
137
|
type OnPremiseConnectionConfigTypeEnum = "allowed" | "disallowed" | "required";
|
|
120
138
|
type ConnectionReferenceConfigVar = ComponentRegistryConnection extends infer TConnectionReference ? TConnectionReference extends ComponentRegistryConnection ? BaseConnectionConfigVar & {
|
|
121
139
|
connection: TConnectionReference["reference"] & ("onPremAvailable" extends keyof TConnectionReference ? TConnectionReference["onPremAvailable"] extends true ? {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ConnectionInput, OnPremConnectionInput } from ".";
|
|
1
|
+
import type { ConnectionInput, OnPremConnectionInput } from ".";
|
|
2
2
|
export declare enum OAuth2Type {
|
|
3
3
|
ClientCredentials = "client_credentials",
|
|
4
4
|
AuthorizationCode = "authorization_code"
|
|
@@ -26,8 +26,13 @@ export interface OnPremConnectionDefinition extends BaseConnectionDefinition {
|
|
|
26
26
|
[key: string]: ConnectionInput;
|
|
27
27
|
};
|
|
28
28
|
}
|
|
29
|
+
interface OAuth2Config {
|
|
30
|
+
overrideGrantType?: string;
|
|
31
|
+
allowedTokenParams?: string[];
|
|
32
|
+
}
|
|
29
33
|
interface OAuth2AuthorizationCodeConnectionDefinition extends BaseConnectionDefinition {
|
|
30
34
|
oauth2Type: OAuth2Type.AuthorizationCode;
|
|
35
|
+
oauth2Config?: OAuth2Config;
|
|
31
36
|
/** The PKCE method (S256 or plain) that this OAuth 2.0 connection uses (if any) */
|
|
32
37
|
oauth2PkceMethod?: OAuth2PkceMethod;
|
|
33
38
|
inputs: {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ActionPerformFunction, ActionPerformReturn, TriggerEventFunction, TriggerPerformFunction, Inputs, TriggerResult, TriggerPayload, ComponentRegistry, TriggerReference, ConfigVars, ConfigPages, UserLevelConfigPages, ValueExpression, ConfigVarExpression } from ".";
|
|
1
|
+
import { ActionPerformFunction, ActionPerformReturn, TriggerEventFunction, TriggerPerformFunction, Inputs, TriggerResult, TriggerPayload, ComponentRegistry, TriggerReference, ConfigVars, ConfigPages, UserLevelConfigPages, ValueExpression, ConfigVarExpression, ActionContext } from ".";
|
|
2
2
|
/** Defines attributes of a Code-Native Integration. */
|
|
3
3
|
export type IntegrationDefinition = {
|
|
4
4
|
/** The unique name for this Integration. */
|
|
@@ -30,6 +30,21 @@ export type IntegrationDefinition = {
|
|
|
30
30
|
userLevelConfigPages?: UserLevelConfigPages;
|
|
31
31
|
componentRegistry?: ComponentRegistry;
|
|
32
32
|
};
|
|
33
|
+
export type FlowOnExecution<TTriggerPayload extends TriggerPayload> = ActionPerformFunction<{
|
|
34
|
+
onTrigger: {
|
|
35
|
+
type: "data";
|
|
36
|
+
label: string;
|
|
37
|
+
clean: (value: unknown) => {
|
|
38
|
+
results: TTriggerPayload;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
}, ConfigVars, {
|
|
42
|
+
[Key in keyof ComponentRegistry]: ComponentRegistry[Key]["actions"];
|
|
43
|
+
}, false, ActionPerformReturn<false, unknown>>;
|
|
44
|
+
export type FlowExecutionContext = ActionContext<ConfigVars, {
|
|
45
|
+
[Key in keyof ComponentRegistry]: ComponentRegistry[Key]["actions"];
|
|
46
|
+
}>;
|
|
47
|
+
export type FlowExecutionContextActions = FlowExecutionContext["components"];
|
|
33
48
|
/** Defines attributes of a Flow of a Code-Native Integration. */
|
|
34
49
|
export interface Flow<TTriggerPayload extends TriggerPayload = TriggerPayload> {
|
|
35
50
|
/** The unique name for this Flow. */
|
|
@@ -61,17 +76,7 @@ export interface Flow<TTriggerPayload extends TriggerPayload = TriggerPayload> {
|
|
|
61
76
|
/** Specifies the function to execute when an Instance of an Integration is deleted. */
|
|
62
77
|
onInstanceDelete?: TriggerEventFunction<Inputs, ConfigVars>;
|
|
63
78
|
/** Specifies the main function for this Flow */
|
|
64
|
-
onExecution:
|
|
65
|
-
onTrigger: {
|
|
66
|
-
type: "data";
|
|
67
|
-
label: string;
|
|
68
|
-
clean: (value: unknown) => {
|
|
69
|
-
results: TTriggerPayload;
|
|
70
|
-
};
|
|
71
|
-
};
|
|
72
|
-
}, ConfigVars, {
|
|
73
|
-
[Key in keyof ComponentRegistry]: ComponentRegistry[Key]["actions"];
|
|
74
|
-
}, false, ActionPerformReturn<false, unknown>>;
|
|
79
|
+
onExecution: FlowOnExecution<TTriggerPayload>;
|
|
75
80
|
}
|
|
76
81
|
/** Defines attributes of a Preprocess Flow Configuration used by a Flow of an Integration. */
|
|
77
82
|
export type PreprocessFlowConfig = {
|