@etohq/connector-engine 1.5.1-alpha.4

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.
Files changed (77) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/CHANGELOG.md +1 -0
  3. package/LICENSE +21 -0
  4. package/README.md +253 -0
  5. package/dist/engine/clean-connector-engine.d.ts +81 -0
  6. package/dist/engine/clean-connector-engine.d.ts.map +1 -0
  7. package/dist/engine/clean-connector-engine.js +350 -0
  8. package/dist/engine/clean-connector-engine.js.map +1 -0
  9. package/dist/engine/connector-engine-impl.d.ts +73 -0
  10. package/dist/engine/connector-engine-impl.d.ts.map +1 -0
  11. package/dist/engine/connector-engine-impl.js +332 -0
  12. package/dist/engine/connector-engine-impl.js.map +1 -0
  13. package/dist/engine/connector-engine.d.ts +54 -0
  14. package/dist/engine/connector-engine.d.ts.map +1 -0
  15. package/dist/engine/connector-engine.js +694 -0
  16. package/dist/engine/connector-engine.js.map +1 -0
  17. package/dist/engine/index.d.ts +7 -0
  18. package/dist/engine/index.d.ts.map +1 -0
  19. package/dist/engine/index.js +10 -0
  20. package/dist/engine/index.js.map +1 -0
  21. package/dist/engine/routing-engine.d.ts +26 -0
  22. package/dist/engine/routing-engine.d.ts.map +1 -0
  23. package/dist/engine/routing-engine.js +329 -0
  24. package/dist/engine/routing-engine.js.map +1 -0
  25. package/dist/examples/booking-connector-example.d.ts +7 -0
  26. package/dist/examples/booking-connector-example.d.ts.map +1 -0
  27. package/dist/examples/booking-connector-example.js +221 -0
  28. package/dist/examples/booking-connector-example.js.map +1 -0
  29. package/dist/examples/dynamic-methods-example.d.ts +7 -0
  30. package/dist/examples/dynamic-methods-example.d.ts.map +1 -0
  31. package/dist/examples/dynamic-methods-example.js +163 -0
  32. package/dist/examples/dynamic-methods-example.js.map +1 -0
  33. package/dist/index.d.ts +9 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +14 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/types/base-plugin.d.ts +170 -0
  38. package/dist/types/base-plugin.d.ts.map +1 -0
  39. package/dist/types/base-plugin.js +68 -0
  40. package/dist/types/base-plugin.js.map +1 -0
  41. package/dist/types/connector-plugin.d.ts +22 -0
  42. package/dist/types/connector-plugin.d.ts.map +1 -0
  43. package/dist/types/connector-plugin.js +11 -0
  44. package/dist/types/connector-plugin.js.map +1 -0
  45. package/dist/types/engine.d.ts +223 -0
  46. package/dist/types/engine.d.ts.map +1 -0
  47. package/dist/types/engine.js +7 -0
  48. package/dist/types/engine.js.map +1 -0
  49. package/dist/types/index.d.ts +5 -0
  50. package/dist/types/index.d.ts.map +1 -0
  51. package/dist/types/index.js +9 -0
  52. package/dist/types/index.js.map +1 -0
  53. package/dist/types/operation-groups.d.ts +78 -0
  54. package/dist/types/operation-groups.d.ts.map +1 -0
  55. package/dist/types/operation-groups.js +60 -0
  56. package/dist/types/operation-groups.js.map +1 -0
  57. package/dist/types/routing-config.d.ts +116 -0
  58. package/dist/types/routing-config.d.ts.map +1 -0
  59. package/dist/types/routing-config.js +6 -0
  60. package/dist/types/routing-config.js.map +1 -0
  61. package/dist/utils/create-connector-engine.d.ts +31 -0
  62. package/dist/utils/create-connector-engine.d.ts.map +1 -0
  63. package/dist/utils/create-connector-engine.js +30 -0
  64. package/dist/utils/create-connector-engine.js.map +1 -0
  65. package/examples/booking-example.ts +168 -0
  66. package/examples/booking-test.ts +231 -0
  67. package/hyperswitch-example.ts +263 -0
  68. package/jest.config.js +2 -0
  69. package/package.json +54 -0
  70. package/src/engine/clean-connector-engine.ts +726 -0
  71. package/src/engine/index.ts +13 -0
  72. package/src/engine/routing-engine.ts +394 -0
  73. package/src/index.ts +32 -0
  74. package/src/types/connector-plugin.ts +34 -0
  75. package/src/types/index.ts +5 -0
  76. package/src/types/routing-config.ts +196 -0
  77. package/tsconfig.json +3 -0
@@ -0,0 +1,350 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Clean Connector Engine - First Principles Implementation
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ConnectorEngine = ConnectorEngine;
7
+ const routing_engine_1 = require("./routing-engine");
8
+ const workflows_sdk_1 = require("@etohq/framework/workflows-sdk");
9
+ // ===== ENGINE IMPLEMENTATION =====
10
+ class ConnectorEngineImpl {
11
+ constructor(connectors, groups, config) {
12
+ this.connectors = connectors;
13
+ this.groups = groups;
14
+ this.configLoader = config.configLoader;
15
+ this.routingConfigLoader = config.routingConfigLoader;
16
+ this.routingEngine = new routing_engine_1.RoutingEngine();
17
+ this.generateDynamicMethods();
18
+ }
19
+ // ===== DYNAMIC METHOD GENERATION =====
20
+ generateDynamicMethods() {
21
+ this.generateConnectorMethods();
22
+ this.generateGroupMethods();
23
+ }
24
+ generateConnectorMethods() {
25
+ for (const [connectorId, plugin] of Object.entries(this.connectors)) {
26
+ for (const operationName of Object.keys(plugin.operations)) {
27
+ const methodName = `execute${this.capitalize(connectorId)}${this.capitalize(operationName)}`;
28
+ this[methodName] = () => {
29
+ return this.createConnectorWorkflow(connectorId, operationName);
30
+ };
31
+ }
32
+ }
33
+ }
34
+ generateGroupMethods() {
35
+ // Auto-generate group methods even without explicit groups
36
+ this.generateAutoGroups();
37
+ // Generate methods for explicit groups
38
+ for (const [groupName, groupConfig] of Object.entries(this.groups)) {
39
+ for (const operationName of groupConfig.operations) {
40
+ const methodName = `execute${this.capitalize(groupName)}${this.capitalize(operationName)}`;
41
+ this[methodName] = (input, context) => {
42
+ return this.createSmartGroupWorkflow(groupName, operationName, input, context);
43
+ };
44
+ }
45
+ }
46
+ }
47
+ // Auto-generate groups for gradual adoption with type safety
48
+ generateAutoGroups() {
49
+ const domainGroups = {};
50
+ // Group connectors by domain (plugin type)
51
+ for (const [connectorId, plugin] of Object.entries(this.connectors)) {
52
+ const domain = plugin.getName(); // Use plugin name as domain
53
+ if (!domainGroups[domain]) {
54
+ domainGroups[domain] = { connectors: [], operations: new Set() };
55
+ }
56
+ domainGroups[domain].connectors.push(connectorId);
57
+ // Add all operations from this plugin
58
+ for (const op of Array.from(Object.keys(plugin.operations))) {
59
+ domainGroups[domain].operations.add(op);
60
+ }
61
+ }
62
+ // Generate group methods for each domain
63
+ for (const [domain, { connectors, operations }] of Object.entries(domainGroups)) {
64
+ for (const operationName of operations) {
65
+ const methodName = `execute${this.capitalize(domain)}${this.capitalize(operationName)}`;
66
+ // Only generate if not already exists (explicit groups take precedence)
67
+ if (!this[methodName]) {
68
+ ;
69
+ this[methodName] = (input, context) => {
70
+ return this.createAutoGroupWorkflow(domain, operationName, input, context, connectors);
71
+ };
72
+ }
73
+ }
74
+ }
75
+ }
76
+ // Create workflow for auto-generated groups
77
+ createAutoGroupWorkflow(domain, operationName, input, context, availableConnectors) {
78
+ return (0, workflows_sdk_1.createWorkflow)(`${domain}-${operationName}-auto`, (workflowInput) => {
79
+ const step = (0, workflows_sdk_1.createStep)(`${domain}-${operationName}-auto-step`, async (stepInput, { container }) => {
80
+ // Get connectors for this domain
81
+ const domainConnectors = availableConnectors ||
82
+ Object.keys(this.connectors).filter((id) => this.connectors[id].getName() === domain);
83
+ if (domainConnectors.length === 0) {
84
+ throw new Error(`No connectors available for domain: ${domain}`);
85
+ }
86
+ // Simple routing: try routing if available, otherwise use first connector
87
+ let selectedConnector;
88
+ if (this.routingConfigLoader) {
89
+ try {
90
+ const routingConfig = await this.routingConfigLoader(domain);
91
+ const routingContext = this.extractRoutingContext(stepInput, context, operationName, domain);
92
+ const routingDecision = await this.routingEngine.route(routingContext, routingConfig);
93
+ selectedConnector = routingDecision.selected_connector;
94
+ }
95
+ catch {
96
+ // Fallback to simple selection if routing fails
97
+ selectedConnector = domainConnectors[0];
98
+ }
99
+ }
100
+ else {
101
+ // No routing - use round robin or first available
102
+ selectedConnector = domainConnectors[0];
103
+ }
104
+ // Execute on selected connector
105
+ const config = await this.configLoader(selectedConnector);
106
+ const plugin = this.connectors[selectedConnector];
107
+ const operation = plugin.operations[operationName];
108
+ if (!operation) {
109
+ throw new Error(`Operation ${operationName} not found on connector ${selectedConnector}`);
110
+ }
111
+ const startTime = Date.now();
112
+ const result = await operation(stepInput, config);
113
+ return new workflows_sdk_1.StepResponse({
114
+ groupName: domain,
115
+ executedConnectors: [selectedConnector],
116
+ results: { [selectedConnector]: result },
117
+ metadata: {
118
+ behavior: "auto_group",
119
+ executionTime: Date.now() - startTime,
120
+ routingDecision: { selected_connector: selectedConnector, algorithm_used: 'auto', rule_applied: undefined },
121
+ algorithm: 'auto',
122
+ ruleApplied: undefined
123
+ },
124
+ }, result);
125
+ });
126
+ const result = step(workflowInput);
127
+ return new workflows_sdk_1.WorkflowResponse(result);
128
+ });
129
+ }
130
+ capitalize(str) {
131
+ return str.charAt(0).toUpperCase() + str.slice(1);
132
+ }
133
+ // ===== WORKFLOW CREATION =====
134
+ createConnectorWorkflow(connectorId, operationName) {
135
+ return (0, workflows_sdk_1.createWorkflow)(`${connectorId}-${operationName}`, (workflowInput) => {
136
+ const step = (0, workflows_sdk_1.createStep)(`${connectorId}-${operationName}-step`, async (stepInput, { container }) => {
137
+ const config = await this.configLoader(connectorId);
138
+ const plugin = this.connectors[connectorId];
139
+ const operation = plugin.operations[operationName];
140
+ if (!operation) {
141
+ throw new Error(`Operation ${operationName} not found on connector ${connectorId}`);
142
+ }
143
+ const result = await operation(stepInput, config);
144
+ return new workflows_sdk_1.StepResponse(result, result);
145
+ });
146
+ const result = step(workflowInput);
147
+ return new workflows_sdk_1.WorkflowResponse(result);
148
+ });
149
+ }
150
+ createSmartGroupWorkflow(groupName, operationName, input, context) {
151
+ return (0, workflows_sdk_1.createWorkflow)(`${groupName}-${operationName}-smart`, (workflowInput) => {
152
+ const step = (0, workflows_sdk_1.createStep)(`${groupName}-${operationName}-smart-step`, async (stepInput, { container }) => {
153
+ // Load routing config from DB
154
+ const routingConfig = this.routingConfigLoader
155
+ ? await this.routingConfigLoader(groupName)
156
+ : {
157
+ profile_id: 'default',
158
+ name: 'default',
159
+ algorithm: 'priority',
160
+ connectors: [],
161
+ rules: [],
162
+ created_at: new Date().toISOString(),
163
+ updated_at: new Date().toISOString(),
164
+ modified_at: new Date().toISOString(),
165
+ version: 1
166
+ };
167
+ // Create dynamic routing context from plugin input
168
+ const routingContext = this.extractRoutingContext(stepInput, context, operationName, groupName);
169
+ // Use smart routing to select connector
170
+ const routingDecision = await this.routingEngine.route(routingContext, routingConfig);
171
+ // Execute on selected connector
172
+ const selectedConnector = routingDecision.selected_connector;
173
+ const config = await this.configLoader(selectedConnector);
174
+ const plugin = this.connectors[selectedConnector];
175
+ const operation = plugin.operations[operationName];
176
+ if (!operation) {
177
+ throw new Error(`Operation ${operationName} not found on connector ${selectedConnector}`);
178
+ }
179
+ const startTime = Date.now();
180
+ try {
181
+ const result = await operation(stepInput, config);
182
+ // Update metrics for successful execution
183
+ await this.routingEngine.updateMetrics(selectedConnector, true, Date.now() - startTime);
184
+ return new workflows_sdk_1.StepResponse({
185
+ groupName,
186
+ executedConnectors: [selectedConnector],
187
+ results: { [selectedConnector]: result },
188
+ metadata: {
189
+ behavior: "smart_routing",
190
+ executionTime: Date.now() - startTime,
191
+ routingDecision,
192
+ algorithm: routingDecision.algorithm_used,
193
+ ruleApplied: routingDecision.rule_applied,
194
+ },
195
+ }, result);
196
+ }
197
+ catch (error) {
198
+ // Update metrics for failed execution
199
+ await this.routingEngine.updateMetrics(selectedConnector, false, Date.now() - startTime);
200
+ // Try fallback connectors if available
201
+ if (routingDecision.alternative_connectors.length > 0) {
202
+ return await this.tryFallbackConnectors(routingDecision.alternative_connectors, operationName, stepInput, groupName, startTime, routingContext);
203
+ }
204
+ throw error;
205
+ }
206
+ });
207
+ const result = step(workflowInput);
208
+ return new workflows_sdk_1.WorkflowResponse(result);
209
+ });
210
+ }
211
+ // ===== DYNAMIC CONTEXT EXTRACTION =====
212
+ extractRoutingContext(input, providedContext, operationName, groupName) {
213
+ const inputObj = input;
214
+ // Start with provided context or defaults
215
+ const baseContext = {
216
+ operation: operationName,
217
+ domain: groupName,
218
+ ...providedContext,
219
+ };
220
+ // Extract common fields from input (works for any domain)
221
+ if (inputObj.region !== undefined)
222
+ baseContext.region = inputObj.region;
223
+ if (inputObj.country !== undefined)
224
+ baseContext.country = inputObj.country;
225
+ if (inputObj.userId !== undefined)
226
+ baseContext.userId = inputObj.userId;
227
+ if (inputObj.user_id !== undefined)
228
+ baseContext.userId = inputObj.user_id;
229
+ if (inputObj.tenantId !== undefined)
230
+ baseContext.tenantId = inputObj.tenantId;
231
+ if (inputObj.tenant_id !== undefined)
232
+ baseContext.tenantId = inputObj.tenant_id;
233
+ if (inputObj.priority !== undefined)
234
+ baseContext.priority = inputObj.priority;
235
+ if (inputObj.resourceType !== undefined)
236
+ baseContext.resourceType = inputObj.resourceType;
237
+ if (inputObj.resource_type !== undefined)
238
+ baseContext.resourceType = inputObj.resource_type;
239
+ // Extract size/amount fields (could be file size, payment amount, etc.)
240
+ if (inputObj.size !== undefined)
241
+ baseContext.resourceSize = inputObj.size;
242
+ if (inputObj.amount !== undefined)
243
+ baseContext.resourceSize = inputObj.amount;
244
+ if (inputObj.fileSize !== undefined)
245
+ baseContext.resourceSize = inputObj.fileSize;
246
+ if (inputObj.file_size !== undefined)
247
+ baseContext.resourceSize = inputObj.file_size;
248
+ // Include all custom fields for rule evaluation
249
+ baseContext.metadata = {
250
+ ...baseContext.metadata,
251
+ operation: operationName,
252
+ domain: groupName,
253
+ inputFields: Object.keys(inputObj),
254
+ // Include any custom fields from input for rule evaluation
255
+ customFields: this.extractCustomFields(inputObj),
256
+ };
257
+ return baseContext;
258
+ }
259
+ extractCustomFields(input) {
260
+ const customFields = {};
261
+ const standardFields = [
262
+ "region",
263
+ "country",
264
+ "userId",
265
+ "user_id",
266
+ "tenantId",
267
+ "tenant_id",
268
+ "priority",
269
+ "resourceType",
270
+ "resource_type",
271
+ "size",
272
+ "amount",
273
+ "fileSize",
274
+ "file_size",
275
+ ];
276
+ for (const [key, value] of Object.entries(input)) {
277
+ if (!standardFields.includes(key)) {
278
+ customFields[key] = value;
279
+ }
280
+ }
281
+ return customFields;
282
+ }
283
+ async tryFallbackConnectors(fallbackConnectors, operationName, input, groupName, originalStartTime, context) {
284
+ const errors = {};
285
+ for (const connectorId of fallbackConnectors) {
286
+ try {
287
+ const config = await this.configLoader(connectorId);
288
+ const plugin = this.connectors[connectorId];
289
+ const operation = plugin.operations[operationName];
290
+ if (!operation)
291
+ continue;
292
+ const startTime = Date.now();
293
+ const result = await operation(input, config);
294
+ // Update metrics for successful fallback
295
+ await this.routingEngine.updateMetrics(connectorId, true, Date.now() - startTime);
296
+ return new workflows_sdk_1.StepResponse({
297
+ groupName,
298
+ executedConnectors: [connectorId],
299
+ results: { [connectorId]: result },
300
+ metadata: {
301
+ behavior: "fallback_routing",
302
+ executionTime: Date.now() - originalStartTime,
303
+ routingDecision: { selected_connector: connectorId, algorithm_used: 'fallback', rule_applied: undefined },
304
+ algorithm: 'fallback',
305
+ ruleApplied: undefined
306
+ },
307
+ }, result);
308
+ }
309
+ catch (error) {
310
+ errors[connectorId] =
311
+ error instanceof Error ? error : new Error(String(error));
312
+ // Update metrics for failed fallback
313
+ await this.routingEngine.updateMetrics(connectorId, false, Date.now() - originalStartTime);
314
+ }
315
+ }
316
+ throw new Error(`All connectors failed for ${groupName}.${operationName}. Errors: ${JSON.stringify(errors)}`);
317
+ }
318
+ // ===== PUBLIC API =====
319
+ async execute(connectorId, operation, input) {
320
+ const config = await this.configLoader(connectorId);
321
+ const plugin = this.connectors[connectorId];
322
+ const operationFn = plugin.operations[operation];
323
+ if (!operationFn) {
324
+ throw new Error(`Operation ${String(operation)} not found on connector ${String(connectorId)}`);
325
+ }
326
+ return await operationFn(input, config);
327
+ }
328
+ async executeGroup(groupName, operation, input) {
329
+ // Use smart routing workflow and extract result
330
+ const workflow = this.createSmartGroupWorkflow(groupName, operation, input);
331
+ const result = await workflow.run({ input });
332
+ return result.result;
333
+ }
334
+ }
335
+ // ===== ENGINE FACTORY =====
336
+ function ConnectorEngine(connectors, groups, config) {
337
+ const engineConfig = config || {
338
+ configLoader: async () => ({}), // Default empty config
339
+ routingConfigLoader: async () => ({
340
+ profile_id: "default",
341
+ name: "default",
342
+ algorithm: { type: "priority", data: [] },
343
+ created_at: new Date().toISOString(),
344
+ modified_at: new Date().toISOString(),
345
+ version: 1,
346
+ }),
347
+ };
348
+ return new ConnectorEngineImpl(connectors, groups || {}, engineConfig);
349
+ }
350
+ //# sourceMappingURL=clean-connector-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean-connector-engine.js","sourceRoot":"","sources":["../../src/engine/clean-connector-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * @fileoverview Type-Safe Connector Engine
3
+ * @description ETO Framework core connector engine with compile-time type safety
4
+ */
5
+ import { ConnectorID, ConnectorConfig, ExecutionOptions, ConnectorSelectionCriteria, ConnectorSelectionStrategy, PluginHealthStatus } from "../types/engine";
6
+ import { BaseConnectorPlugin } from "../types/base-plugin";
7
+ import { ReturnWorkflow } from "@etohq/framework/workflows-sdk";
8
+ export interface ConnectorTypesConfig {
9
+ [connectorType: string]: {
10
+ [operation: string]: {
11
+ input: any;
12
+ output: any;
13
+ };
14
+ };
15
+ }
16
+ type ConnectorEngineMethods<TConnectorTypes extends ConnectorTypesConfig> = {
17
+ [K in keyof TConnectorTypes]: {
18
+ [Op in keyof TConnectorTypes[K] as `execute${Capitalize<K & string>}${Capitalize<Op & string>}`]: (input: TConnectorTypes[K][Op] extends {
19
+ input: infer I;
20
+ } ? I : never, options?: ExecutionOptions) => ReturnWorkflow<TConnectorTypes[K][Op] extends {
21
+ input: infer I;
22
+ } ? I : never, TConnectorTypes[K][Op] extends {
23
+ output: infer O;
24
+ } ? O : never, [
25
+ ]>;
26
+ };
27
+ }[keyof TConnectorTypes];
28
+ interface BaseEngineMethods {
29
+ installConnector(provider: string, config: ConnectorConfig): Promise<ConnectorID>;
30
+ registerPlugin(provider: string, plugin: BaseConnectorPlugin): void;
31
+ uninstallConnector(connectorId: ConnectorID): Promise<void>;
32
+ selectConnector(connectorType: string, operation: string, criteria?: ConnectorSelectionCriteria): ConnectorID;
33
+ getWorkflow(connectorType: string, operation: string, connectorId?: ConnectorID): any;
34
+ getSystemHealth(): Promise<{
35
+ overall: "healthy" | "degraded" | "unhealthy";
36
+ connectors: Record<ConnectorID, PluginHealthStatus>;
37
+ }>;
38
+ setSelectionStrategy(strategy: ConnectorSelectionStrategy): void;
39
+ getConnectors(): ConnectorConfig[];
40
+ getConnector(connectorId: ConnectorID): ConnectorConfig | null;
41
+ }
42
+ declare class ConnectorEngineImpl<TConnectorTypes extends ConnectorTypesConfig> implements BaseEngineMethods {
43
+ private connectorTypes;
44
+ private connectors;
45
+ private plugins;
46
+ private pluginRegistry;
47
+ private generatedWorkflows;
48
+ private selectionStrategy;
49
+ constructor(connectorTypes: TConnectorTypes);
50
+ setSelectionStrategy(strategy: ConnectorSelectionStrategy): void;
51
+ getConnectors(): ConnectorConfig[];
52
+ getConnector(connectorId: ConnectorID): ConnectorConfig | null;
53
+ private generateDynamicMethods;
54
+ private capitalize;
55
+ installConnector(provider: string, config: ConnectorConfig): Promise<ConnectorID>;
56
+ registerPlugin(provider: string, plugin: BaseConnectorPlugin): void;
57
+ uninstallConnector(connectorId: ConnectorID): Promise<void>;
58
+ selectConnector(connectorType: string, operation: string, criteria?: ConnectorSelectionCriteria): ConnectorID;
59
+ private generateWorkflowsForConnector;
60
+ private createWorkflowForOperation;
61
+ getWorkflow(connectorType: string, operation: string, connectorId?: ConnectorID): ReturnWorkflow<any, any, []>;
62
+ getSystemHealth(): Promise<{
63
+ overall: "healthy" | "degraded" | "unhealthy";
64
+ connectors: Record<ConnectorID, PluginHealthStatus>;
65
+ }>;
66
+ private isTypedPlugin;
67
+ private pluginSupportsOperation;
68
+ private createPluginRegistry;
69
+ }
70
+ declare function ConnectorEngine<TConnectorTypes extends ConnectorTypesConfig>(connectorTypes: TConnectorTypes): ConnectorEngineImpl<TConnectorTypes> & ConnectorEngineMethods<TConnectorTypes>;
71
+ export type ConnectorEngineType<T extends ConnectorTypesConfig> = ReturnType<typeof ConnectorEngine<T>>;
72
+ export { ConnectorEngine };
73
+ //# sourceMappingURL=connector-engine-impl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connector-engine-impl.d.ts","sourceRoot":"","sources":["../../src/engine/connector-engine-impl.ts"],"names":[],"mappings":"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"}