@kaleido-io/workflow-engine-sdk 0.0.1 → 0.9.2

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 (140) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +1121 -0
  3. package/bin/init.js +200 -0
  4. package/bin/wesdk.js +57 -0
  5. package/dist/package.json +3 -0
  6. package/dist/src/client/client.d.ts +24 -0
  7. package/dist/src/client/client.d.ts.map +1 -0
  8. package/dist/src/client/client.js +58 -0
  9. package/dist/src/client/client.js.map +1 -0
  10. package/dist/src/client/rest-client.d.ts +222 -0
  11. package/dist/src/client/rest-client.d.ts.map +1 -0
  12. package/dist/src/client/rest-client.js +242 -0
  13. package/dist/src/client/rest-client.js.map +1 -0
  14. package/dist/src/config/config.d.ts +60 -0
  15. package/dist/src/config/config.d.ts.map +1 -0
  16. package/dist/src/config/config.js +117 -0
  17. package/dist/src/config/config.js.map +1 -0
  18. package/dist/src/factories/event_source.d.ts +54 -0
  19. package/dist/src/factories/event_source.d.ts.map +1 -0
  20. package/dist/src/factories/event_source.js +170 -0
  21. package/dist/src/factories/event_source.js.map +1 -0
  22. package/dist/src/factories/transaction_handler.d.ts +27 -0
  23. package/dist/src/factories/transaction_handler.d.ts.map +1 -0
  24. package/dist/src/factories/transaction_handler.js +66 -0
  25. package/dist/src/factories/transaction_handler.js.map +1 -0
  26. package/dist/src/helpers/stage_director.d.ts +42 -0
  27. package/dist/src/helpers/stage_director.d.ts.map +1 -0
  28. package/dist/src/helpers/stage_director.js +304 -0
  29. package/dist/src/helpers/stage_director.js.map +1 -0
  30. package/dist/src/i18n/errors.d.ts +61 -0
  31. package/dist/src/i18n/errors.d.ts.map +1 -0
  32. package/dist/src/i18n/errors.js +90 -0
  33. package/dist/src/i18n/errors.js.map +1 -0
  34. package/dist/src/index.d.ts +20 -0
  35. package/dist/src/index.d.ts.map +1 -0
  36. package/dist/src/index.js +85 -0
  37. package/dist/src/index.js.map +1 -0
  38. package/dist/src/interfaces/handlers.d.ts +112 -0
  39. package/dist/src/interfaces/handlers.d.ts.map +1 -0
  40. package/dist/src/interfaces/handlers.js +18 -0
  41. package/dist/src/interfaces/handlers.js.map +1 -0
  42. package/dist/src/interfaces/messages.d.ts +6 -0
  43. package/dist/src/interfaces/messages.d.ts.map +1 -0
  44. package/dist/src/interfaces/messages.js +18 -0
  45. package/dist/src/interfaces/messages.js.map +1 -0
  46. package/dist/src/log/logger.d.ts +8 -0
  47. package/dist/src/log/logger.d.ts.map +1 -0
  48. package/dist/src/log/logger.js +39 -0
  49. package/dist/src/log/logger.js.map +1 -0
  50. package/dist/src/runtime/engine_client.d.ts +37 -0
  51. package/dist/src/runtime/engine_client.d.ts.map +1 -0
  52. package/dist/src/runtime/engine_client.js +99 -0
  53. package/dist/src/runtime/engine_client.js.map +1 -0
  54. package/dist/src/runtime/handler_runtime.d.ts +124 -0
  55. package/dist/src/runtime/handler_runtime.d.ts.map +1 -0
  56. package/dist/src/runtime/handler_runtime.js +623 -0
  57. package/dist/src/runtime/handler_runtime.js.map +1 -0
  58. package/dist/src/types/core.d.ts +258 -0
  59. package/dist/src/types/core.d.ts.map +1 -0
  60. package/dist/src/types/core.js +71 -0
  61. package/dist/src/types/core.js.map +1 -0
  62. package/dist/src/types/flows.d.ts +144 -0
  63. package/dist/src/types/flows.d.ts.map +1 -0
  64. package/dist/src/types/flows.js +30 -0
  65. package/dist/src/types/flows.js.map +1 -0
  66. package/dist/src/utils/errors.d.ts +2 -0
  67. package/dist/src/utils/errors.d.ts.map +1 -0
  68. package/dist/src/utils/errors.js +23 -0
  69. package/dist/src/utils/errors.js.map +1 -0
  70. package/dist/src/utils/patch.d.ts +9 -0
  71. package/dist/src/utils/patch.d.ts.map +1 -0
  72. package/dist/src/utils/patch.js +99 -0
  73. package/dist/src/utils/patch.js.map +1 -0
  74. package/dist-esm/src/client/client.js +54 -0
  75. package/dist-esm/src/client/client.js.map +1 -0
  76. package/dist-esm/src/client/rest-client.js +238 -0
  77. package/dist-esm/src/client/rest-client.js.map +1 -0
  78. package/dist-esm/src/config/config.js +113 -0
  79. package/dist-esm/src/config/config.js.map +1 -0
  80. package/dist-esm/src/factories/event_source.js +167 -0
  81. package/dist-esm/src/factories/event_source.js.map +1 -0
  82. package/dist-esm/src/factories/transaction_handler.js +63 -0
  83. package/dist-esm/src/factories/transaction_handler.js.map +1 -0
  84. package/dist-esm/src/helpers/stage_director.js +298 -0
  85. package/dist-esm/src/helpers/stage_director.js.map +1 -0
  86. package/dist-esm/src/i18n/errors.js +85 -0
  87. package/dist-esm/src/i18n/errors.js.map +1 -0
  88. package/dist-esm/src/index.js +51 -0
  89. package/dist-esm/src/index.js.map +1 -0
  90. package/dist-esm/src/interfaces/handlers.js +17 -0
  91. package/dist-esm/src/interfaces/handlers.js.map +1 -0
  92. package/dist-esm/src/interfaces/messages.js +17 -0
  93. package/dist-esm/src/interfaces/messages.js.map +1 -0
  94. package/dist-esm/src/log/logger.js +36 -0
  95. package/dist-esm/src/log/logger.js.map +1 -0
  96. package/dist-esm/src/runtime/engine_client.js +95 -0
  97. package/dist-esm/src/runtime/engine_client.js.map +1 -0
  98. package/dist-esm/src/runtime/handler_runtime.js +586 -0
  99. package/dist-esm/src/runtime/handler_runtime.js.map +1 -0
  100. package/dist-esm/src/types/core.js +68 -0
  101. package/dist-esm/src/types/core.js.map +1 -0
  102. package/dist-esm/src/types/flows.js +27 -0
  103. package/dist-esm/src/types/flows.js.map +1 -0
  104. package/dist-esm/src/utils/errors.js +19 -0
  105. package/dist-esm/src/utils/errors.js.map +1 -0
  106. package/dist-esm/src/utils/patch.js +56 -0
  107. package/dist-esm/src/utils/patch.js.map +1 -0
  108. package/package.json +79 -11
  109. package/template/.env.sample +14 -0
  110. package/template/.vscode/launch.json +23 -0
  111. package/template/README.md +37 -0
  112. package/template/package.json +36 -0
  113. package/template/src/connect.ts +58 -0
  114. package/template/src/provider.ts +24 -0
  115. package/template/src/samples/event-source/README.md +50 -0
  116. package/template/src/samples/event-source/echo-handler.ts +65 -0
  117. package/template/src/samples/event-source/event-processor.ts +46 -0
  118. package/template/src/samples/event-source/event-source.ts +70 -0
  119. package/template/src/samples/event-source/stream.ts +34 -0
  120. package/template/src/samples/hello/README.md +52 -0
  121. package/template/src/samples/hello/flow.ts +74 -0
  122. package/template/src/samples/hello/handlers.test.ts +147 -0
  123. package/template/src/samples/hello/handlers.ts +72 -0
  124. package/template/src/samples/hello/transaction.ts +24 -0
  125. package/template/src/samples/http-invoke/README.md +42 -0
  126. package/template/src/samples/http-invoke/flow.ts +63 -0
  127. package/template/src/samples/http-invoke/handlers.ts +66 -0
  128. package/template/src/samples/http-invoke/transaction.ts +22 -0
  129. package/template/src/samples/snap/README.md +98 -0
  130. package/template/src/samples/snap/event-source.ts +104 -0
  131. package/template/src/samples/snap/flow.ts +85 -0
  132. package/template/src/samples/snap/snap-handler.ts +84 -0
  133. package/template/src/samples/snap/stream.ts +26 -0
  134. package/template/src/samples/snap/transaction.ts +26 -0
  135. package/template/src/utils/post-stream.ts +67 -0
  136. package/template/src/utils/post-transaction.ts +64 -0
  137. package/template/src/utils/post-workflow.ts +63 -0
  138. package/template/tsconfig.json +24 -0
  139. package/template/vitest.config.ts +42 -0
  140. package/CODEOWNERS +0 -5
@@ -0,0 +1,242 @@
1
+ "use strict";
2
+ // Copyright © 2026 Kaleido, Inc.
3
+ //
4
+ // SPDX-License-Identifier: Apache-2.0
5
+ //
6
+ // Licensed under the Apache License, Version 2.0 (the "License");
7
+ // you may not use this file except in compliance with the License.
8
+ // You may obtain a copy of the License at
9
+ //
10
+ // http://www.apache.org/licenses/LICENSE-2.0
11
+ //
12
+ // Unless required by applicable law or agreed to in writing, software
13
+ // distributed under the License is distributed on an "AS IS" BASIS,
14
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ // See the License for the specific language governing permissions and
16
+ // limitations under the License.
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.WorkflowEngineRestClient = void 0;
19
+ /**
20
+ * REST Client for Workflow Engine API
21
+ *
22
+ * Provides methods to interact with the workflow engine REST API including:
23
+ * - Workflow management (create, delete)
24
+ * - Transaction management (create, delete)
25
+ * - Stream management (create, delete, start, stop)
26
+ */
27
+ const errors_1 = require("../i18n/errors");
28
+ /**
29
+ * REST Client for Workflow Engine API
30
+ */
31
+ class WorkflowEngineRestClient {
32
+ constructor(config) {
33
+ // Build base URL from environment variables if not provided
34
+ if (!config?.url) {
35
+ if (!process.env.ACCOUNT) {
36
+ throw (0, errors_1.newError)(errors_1.SDKErrors.MsgSDKAccountNotSet);
37
+ }
38
+ if (!process.env.ENVIRONMENT) {
39
+ throw (0, errors_1.newError)(errors_1.SDKErrors.MsgSDKEnvironmentNotSet);
40
+ }
41
+ if (!process.env.WORKFLOW_ENGINE) {
42
+ throw (0, errors_1.newError)(errors_1.SDKErrors.MsgSDKWorkflowEngineNotSet);
43
+ }
44
+ this.baseUrl = `https://${process.env.ACCOUNT}/endpoint/${process.env.ENVIRONMENT}/${process.env.WORKFLOW_ENGINE}/rest`;
45
+ }
46
+ else {
47
+ let restUrl = config.url.replace(/\/ws$/, '');
48
+ if (!restUrl.endsWith('/rest')) {
49
+ restUrl += '/rest';
50
+ }
51
+ if (restUrl.startsWith('ws://')) {
52
+ restUrl = restUrl.replace('ws://', 'http://');
53
+ }
54
+ else if (config.url.startsWith('wss://')) {
55
+ restUrl = restUrl.replace('wss://', 'https://');
56
+ }
57
+ this.baseUrl = restUrl;
58
+ }
59
+ if (!config?.authToken) {
60
+ if (process.env.KEY_NAME && process.env.KEY_VALUE) {
61
+ this.authToken = `basic ${Buffer.from(`${process.env.KEY_NAME}:${process.env.KEY_VALUE}`).toString('base64')}`;
62
+ }
63
+ }
64
+ else {
65
+ this.authToken = config?.authToken;
66
+ }
67
+ this.authHeaderName = config?.authHeaderName || 'Authorization';
68
+ this.headers = config?.headers;
69
+ }
70
+ /**
71
+ * Gets the full REST API endpoint URL for workflows
72
+ */
73
+ getWorkflowsEndpoint() {
74
+ return `${this.baseUrl}/api/v1/workflows`;
75
+ }
76
+ /**
77
+ * Gets the full REST API endpoint URL for a specific workflow
78
+ */
79
+ getWorkflowEndpoint(workflowNameOrId) {
80
+ return `${this.baseUrl}/api/v1/workflows/${encodeURIComponent(workflowNameOrId)}`;
81
+ }
82
+ /**
83
+ * Gets the full REST API endpoint URL for transactions
84
+ */
85
+ getTransactionsEndpoint() {
86
+ return `${this.baseUrl}/api/v1/transactions`;
87
+ }
88
+ /**
89
+ * Gets the full REST API endpoint URL for a specific transaction
90
+ */
91
+ getTransactionEndpoint(idempotencyKeyOrId) {
92
+ return `${this.baseUrl}/api/v1/transactions/${encodeURIComponent(idempotencyKeyOrId)}`;
93
+ }
94
+ /**
95
+ * Gets the full REST API endpoint URL for streams
96
+ */
97
+ getStreamsEndpoint() {
98
+ return `${this.baseUrl}/api/v1/streams`;
99
+ }
100
+ /**
101
+ * Gets the full REST API endpoint URL for a specific stream
102
+ */
103
+ getStreamEndpoint(streamNameOrId) {
104
+ return `${this.baseUrl}/api/v1/streams/${encodeURIComponent(streamNameOrId)}`;
105
+ }
106
+ /**
107
+ * Makes an HTTP request with proper error handling
108
+ */
109
+ async makeRequest(url, method, body, timeout) {
110
+ const headers = {
111
+ 'accept': 'application/json',
112
+ 'Content-Type': 'application/json',
113
+ ...this.headers,
114
+ };
115
+ if (timeout) {
116
+ headers['Request-Timeout'] = `${timeout}m0s`;
117
+ }
118
+ // Add authorization if credentials are available
119
+ if (this.authToken) {
120
+ headers[this.authHeaderName] = this.authToken;
121
+ }
122
+ const response = await fetch(url, {
123
+ method,
124
+ headers,
125
+ body: body ? JSON.stringify(body) : undefined,
126
+ });
127
+ if (!response.ok) {
128
+ const errorText = await response.text();
129
+ throw new Error(`Failed to ${method} ${url}: ${response.status} ${response.statusText}\n${errorText}`);
130
+ }
131
+ // Handle 204 No Content responses
132
+ if (response.status === 204) {
133
+ return undefined;
134
+ }
135
+ return (await response.json());
136
+ }
137
+ // ============================================================================
138
+ // Workflow Methods
139
+ // ============================================================================
140
+ /**
141
+ * Creates a new workflow
142
+ *
143
+ * @param workflow - The workflow definition
144
+ * @param timeout - Optional timeout in seconds (default: 120)
145
+ * @returns Promise resolving to the created workflow
146
+ */
147
+ async createWorkflow(workflow, timeout) {
148
+ const endpoint = this.getWorkflowsEndpoint();
149
+ return this.makeRequest(endpoint, 'POST', workflow, timeout);
150
+ }
151
+ /**
152
+ * Deletes a workflow by name or ID
153
+ *
154
+ * @param workflowNameOrId - The name or ID of the workflow to delete
155
+ * @param timeout - Optional timeout in seconds (default: 120)
156
+ * @returns Promise that resolves when the workflow is deleted
157
+ */
158
+ async deleteWorkflow(workflowNameOrId, timeout) {
159
+ const endpoint = this.getWorkflowEndpoint(workflowNameOrId);
160
+ return this.makeRequest(endpoint, 'DELETE', undefined, timeout);
161
+ }
162
+ // ============================================================================
163
+ // Transaction Methods
164
+ // ============================================================================
165
+ /**
166
+ * Creates a new transaction
167
+ *
168
+ * @param transaction - The transaction request
169
+ * @param timeout - Optional timeout in seconds (default: 120)
170
+ * @returns Promise resolving to the transaction response
171
+ */
172
+ async createTransaction(transaction, timeout) {
173
+ const endpoint = this.getTransactionsEndpoint();
174
+ return this.makeRequest(endpoint, 'POST', transaction, timeout);
175
+ }
176
+ /**
177
+ * Deletes a transaction by idempotency key or ID
178
+ *
179
+ * @param idempotencyKeyOrId - The idempotency key or ID of the transaction to delete
180
+ * @param timeout - Optional timeout in seconds (default: 120)
181
+ * @returns Promise that resolves when the transaction is deleted
182
+ */
183
+ async deleteTransaction(idempotencyKeyOrId, timeout) {
184
+ const endpoint = this.getTransactionEndpoint(idempotencyKeyOrId);
185
+ return this.makeRequest(endpoint, 'DELETE', undefined, timeout);
186
+ }
187
+ // ============================================================================
188
+ // Stream Methods
189
+ // ============================================================================
190
+ /**
191
+ * Creates a new stream
192
+ *
193
+ * @param stream - The stream definition
194
+ * @param timeout - Optional timeout in seconds (default: 120)
195
+ * @returns Promise resolving to the created stream
196
+ */
197
+ async createStream(stream, timeout) {
198
+ const endpoint = this.getStreamsEndpoint();
199
+ return this.makeRequest(endpoint, 'POST', stream, timeout);
200
+ }
201
+ /**
202
+ * Deletes a stream by name or ID
203
+ *
204
+ * @param streamNameOrId - The name or ID of the stream to delete
205
+ * @param force - Optional flag to force delete without waiting for handler cleanup
206
+ * @param timeout - Optional timeout in seconds (default: 120)
207
+ * @returns Promise that resolves when the stream is deleted
208
+ */
209
+ async deleteStream(streamNameOrId, force, timeout) {
210
+ let endpoint = this.getStreamEndpoint(streamNameOrId);
211
+ if (force) {
212
+ endpoint += '?force=true';
213
+ }
214
+ return this.makeRequest(endpoint, 'DELETE', undefined, timeout);
215
+ }
216
+ /**
217
+ * Starts a stream by updating its started status to true
218
+ *
219
+ * @param streamNameOrId - The name or ID of the stream to start
220
+ * @param timeout - Optional timeout in seconds (default: 120)
221
+ * @returns Promise resolving to the updated stream
222
+ */
223
+ async startStream(streamNameOrId, timeout) {
224
+ const endpoint = this.getStreamEndpoint(streamNameOrId);
225
+ const update = { started: true };
226
+ return this.makeRequest(endpoint, 'PATCH', update, timeout);
227
+ }
228
+ /**
229
+ * Stops a stream by updating its started status to false
230
+ *
231
+ * @param streamNameOrId - The name or ID of the stream to stop
232
+ * @param timeout - Optional timeout in seconds (default: 120)
233
+ * @returns Promise resolving to the updated stream
234
+ */
235
+ async stopStream(streamNameOrId, timeout) {
236
+ const endpoint = this.getStreamEndpoint(streamNameOrId);
237
+ const update = { started: false };
238
+ return this.makeRequest(endpoint, 'PATCH', update, timeout);
239
+ }
240
+ }
241
+ exports.WorkflowEngineRestClient = WorkflowEngineRestClient;
242
+ //# sourceMappingURL=rest-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest-client.js","sourceRoot":"","sources":["../../../src/client/rest-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import { WorkflowEngineClientConfig } from '../client/client';
2
+ /**
3
+ * Authentication type enum
4
+ */
5
+ export declare enum AuthType {
6
+ BASIC = "basic",
7
+ TOKEN = "token"
8
+ }
9
+ /**
10
+ * Basic authentication using username and password
11
+ */
12
+ export interface BasicAuth {
13
+ type: AuthType.BASIC;
14
+ username: string;
15
+ password: string;
16
+ }
17
+ /**
18
+ * Token-based authentication
19
+ */
20
+ export interface TokenAuth {
21
+ type: AuthType.TOKEN;
22
+ token: string;
23
+ header?: string;
24
+ scheme?: string;
25
+ }
26
+ /**
27
+ * Authentication configuration (discriminated union)
28
+ */
29
+ export type AuthConfig = BasicAuth | TokenAuth;
30
+ /**
31
+ * Standard configuration structure for workflow engine connectors
32
+ *
33
+ * This configuration should be provided by the application using the SDK.
34
+ * The SDK does not load configuration from files - it receives it from the caller.
35
+ */
36
+ export interface WorkflowEngineConfig {
37
+ workflowEngine: {
38
+ url: string;
39
+ auth: AuthConfig;
40
+ maxRetries?: number;
41
+ retryDelay?: string;
42
+ };
43
+ }
44
+ /**
45
+ * Configuration utility for transforming WorkflowEngineConfig into client config
46
+ *
47
+ * The SDK receives configuration objects - it does not load from files.
48
+ * Applications using this SDK should load configuration themselves and pass it in.
49
+ */
50
+ export declare class ConfigLoader {
51
+ /**
52
+ * Create WorkflowEngineClientConfig from WorkflowEngineConfig
53
+ */
54
+ static createClientConfig(config: WorkflowEngineConfig, providerName: string): WorkflowEngineClientConfig;
55
+ /**
56
+ * Log configuration summary (without sensitive data)
57
+ */
58
+ static logConfigSummary(config: WorkflowEngineConfig): void;
59
+ }
60
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/config/config.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAM9D;;GAEG;AACH,oBAAY,QAAQ;IAClB,KAAK,UAAU;IACf,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAE/C;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,UAAU,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED;;;;;GAKG;AACH,qBAAa,YAAY;IAEvB;;OAEG;IACH,MAAM,CAAC,kBAAkB,CACvB,MAAM,EAAE,oBAAoB,EAC5B,YAAY,EAAE,MAAM,GACnB,0BAA0B;IAqD7B;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI;CA2B5D"}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ // Copyright © 2026 Kaleido, Inc.
3
+ //
4
+ // SPDX-License-Identifier: Apache-2.0
5
+ //
6
+ // Licensed under the Apache License, Version 2.0 (the "License");
7
+ // you may not use this file except in compliance with the License.
8
+ // You may obtain a copy of the License at
9
+ //
10
+ // http://www.apache.org/licenses/LICENSE-2.0
11
+ //
12
+ // Unless required by applicable law or agreed to in writing, software
13
+ // distributed under the License is distributed on an "AS IS" BASIS,
14
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ // See the License for the specific language governing permissions and
16
+ // limitations under the License.
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.ConfigLoader = exports.AuthType = void 0;
19
+ const logger_1 = require("../log/logger");
20
+ const errors_1 = require("../i18n/errors");
21
+ const log = (0, logger_1.newLogger)('config');
22
+ /**
23
+ * Authentication type enum
24
+ */
25
+ var AuthType;
26
+ (function (AuthType) {
27
+ AuthType["BASIC"] = "basic";
28
+ AuthType["TOKEN"] = "token";
29
+ })(AuthType || (exports.AuthType = AuthType = {}));
30
+ /**
31
+ * Configuration utility for transforming WorkflowEngineConfig into client config
32
+ *
33
+ * The SDK receives configuration objects - it does not load from files.
34
+ * Applications using this SDK should load configuration themselves and pass it in.
35
+ */
36
+ class ConfigLoader {
37
+ /**
38
+ * Create WorkflowEngineClientConfig from WorkflowEngineConfig
39
+ */
40
+ static createClientConfig(config, providerName) {
41
+ const auth = config.workflowEngine.auth;
42
+ let headerName;
43
+ let authValue;
44
+ // Use discriminated union to handle different auth types
45
+ switch (auth.type) {
46
+ case AuthType.BASIC: {
47
+ headerName = 'Authorization';
48
+ const credentials = Buffer.from(`${auth.username}:${auth.password}`).toString('base64');
49
+ authValue = `Basic ${credentials}`;
50
+ break;
51
+ }
52
+ case AuthType.TOKEN: {
53
+ headerName = auth.header || 'Authorization';
54
+ const scheme = auth.scheme || '';
55
+ authValue = scheme ? `${scheme} ${auth.token}` : auth.token;
56
+ break;
57
+ }
58
+ default: {
59
+ // TypeScript ensures this is unreachable if all cases are handled
60
+ const _exhaustive = auth;
61
+ throw (0, errors_1.newError)(errors_1.SDKErrors.MsgSDKConfigUnknownAuthType, _exhaustive.type);
62
+ }
63
+ }
64
+ // Convert HTTP(S) URL to WebSocket URL with /ws path
65
+ let wsUrl = config.workflowEngine.url;
66
+ if (wsUrl.startsWith('http://')) {
67
+ wsUrl = 'ws://' + wsUrl.substring(7);
68
+ }
69
+ else if (wsUrl.startsWith('https://')) {
70
+ wsUrl = 'wss://' + wsUrl.substring(8);
71
+ }
72
+ // Add /ws path if not already present
73
+ if (!wsUrl.endsWith('/ws')) {
74
+ wsUrl = wsUrl.replace(/\/$/, '') + '/ws';
75
+ }
76
+ return {
77
+ url: wsUrl,
78
+ providerName,
79
+ options: {
80
+ headers: {
81
+ [headerName]: authValue
82
+ }
83
+ },
84
+ maxAttempts: config.workflowEngine.maxRetries, // undefined = infinite retries
85
+ reconnectDelay: config.workflowEngine.retryDelay ? parseInt(config.workflowEngine.retryDelay.replace('s', '')) * 1000 : 2000
86
+ };
87
+ }
88
+ /**
89
+ * Log configuration summary (without sensitive data)
90
+ */
91
+ static logConfigSummary(config) {
92
+ log.info('Configuration loaded:');
93
+ log.info(` Workflow Engine: ${config.workflowEngine.url}`);
94
+ const auth = config.workflowEngine.auth;
95
+ switch (auth.type) {
96
+ case AuthType.BASIC:
97
+ log.info(` Auth Type: ${AuthType.BASIC}`);
98
+ log.info(` Username: ${auth.username}`);
99
+ break;
100
+ case AuthType.TOKEN:
101
+ log.info(` Auth Type: ${AuthType.TOKEN}`);
102
+ log.info(` Auth Header: ${auth.header || 'Authorization'}`);
103
+ if (auth.scheme) {
104
+ log.info(` Auth Scheme: ${auth.scheme}`);
105
+ }
106
+ break;
107
+ }
108
+ if (config.workflowEngine.maxRetries) {
109
+ log.info(` Max Retries: ${config.workflowEngine.maxRetries}`);
110
+ }
111
+ if (config.workflowEngine.retryDelay) {
112
+ log.info(` Retry Delay: ${config.workflowEngine.retryDelay}`);
113
+ }
114
+ }
115
+ }
116
+ exports.ConfigLoader = ConfigLoader;
117
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/config/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import { EventSource, EngineAPI } from '../interfaces/handlers';
2
+ import { WSEventStreamInfo } from '../types/core';
3
+ /**
4
+ * Configuration for an event source with parsed config.
5
+ */
6
+ export interface EventSourceConf<CF> extends WSEventStreamInfo {
7
+ config: CF;
8
+ }
9
+ /**
10
+ * Event data structure returned by poll function.
11
+ */
12
+ export interface EventSourceEvent<DT> {
13
+ idempotencyKey: string;
14
+ topic: string;
15
+ data: DT;
16
+ }
17
+ /**
18
+ * Poll function signature for event sources: (config, checkpointIn) => checkpointOut, events.
19
+ */
20
+ export type EventSourcePollFn<CP, CF, DT> = (config: EventSourceConf<CF>, checkpointIn: CP | null) => Promise<{
21
+ checkpointOut: CP;
22
+ events: EventSourceEvent<DT>[];
23
+ }>;
24
+ /**
25
+ * Build initial checkpoint from configuration.
26
+ */
27
+ export type EventSourceBuildInitialCheckpointFn<CP, CF> = (config: CF) => Promise<CP>;
28
+ /**
29
+ * Delete function for cleanup when event source is removed.
30
+ */
31
+ export type EventSourceDeleteFn = (info: WSEventStreamInfo) => Promise<void>;
32
+ /**
33
+ * Custom config parser function.
34
+ */
35
+ export type EventSourceConfigParserFn<CF> = (info: WSEventStreamInfo, config: any) => Promise<CF>;
36
+ /**
37
+ * Factory interface for building event sources with optional configuration.
38
+ */
39
+ export interface EventSourceFactory<CP, CF, DT> extends EventSource {
40
+ withDeleteFn(deleteFn: EventSourceDeleteFn): EventSourceFactory<CP, CF, DT>;
41
+ withConfigParser(parserFn: EventSourceConfigParserFn<CF>): EventSourceFactory<CP, CF, DT>;
42
+ withInitialCheckpoint(buildFn: EventSourceBuildInitialCheckpointFn<CP, CF>): EventSourceFactory<CP, CF, DT>;
43
+ withInitFn(initFn: (engAPI: EngineAPI) => Promise<void>): EventSourceFactory<CP, CF, DT>;
44
+ withCloseFn(closeFn: () => void): EventSourceFactory<CP, CF, DT>;
45
+ }
46
+ /**
47
+ * Create a new event source with a poll function.
48
+ *
49
+ * @param name - Handler name to register with the workflow engine
50
+ * @param pollFn - Function that polls for new events
51
+ * @returns EventSourceFactory for chaining configuration
52
+ */
53
+ export declare function newEventSource<CP, CF, DT>(name: string, pollFn: EventSourcePollFn<CP, CF, DT>): EventSourceFactory<CP, CF, DT>;
54
+ //# sourceMappingURL=event_source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event_source.d.ts","sourceRoot":"","sources":["../../../src/factories/event_source.ts"],"names":[],"mappings":"AAiBA,OAAO,EACL,WAAW,EACX,SAAS,EACV,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAML,iBAAiB,EAClB,MAAM,eAAe,CAAC;AAMvB;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,EAAE,CAAE,SAAQ,iBAAiB;IAC5D,MAAM,EAAE,EAAE,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB,CAAC,EAAE;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,EAAE,CAAC;CACV;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAC1C,MAAM,EAAE,eAAe,CAAC,EAAE,CAAC,EAC3B,YAAY,EAAE,EAAE,GAAG,IAAI,KACpB,OAAO,CAAC;IAAE,aAAa,EAAE,EAAE,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAA;CAAE,CAAC,CAAC;AAEpE;;GAEG;AACH,MAAM,MAAM,mCAAmC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;AAEtF;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE7E;;GAEG;AACH,MAAM,MAAM,yBAAyB,CAAC,EAAE,IAAI,CAC1C,IAAI,EAAE,iBAAiB,EACvB,MAAM,EAAE,GAAG,KACR,OAAO,CAAC,EAAE,CAAC,CAAC;AAEjB;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,SAAQ,WAAW;IACjE,YAAY,CAAC,QAAQ,EAAE,mBAAmB,GAAG,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5E,gBAAgB,CAAC,QAAQ,EAAE,yBAAyB,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1F,qBAAqB,CAAC,OAAO,EAAE,mCAAmC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5G,UAAU,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACzF,WAAW,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;CAClE;AAoLD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EACvC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GACpC,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAEhC"}
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ // Copyright © 2026 Kaleido, Inc.
3
+ //
4
+ // SPDX-License-Identifier: Apache-2.0
5
+ //
6
+ // Licensed under the Apache License, Version 2.0 (the "License");
7
+ // you may not use this file except in compliance with the License.
8
+ // You may obtain a copy of the License at
9
+ //
10
+ // http://www.apache.org/licenses/LICENSE-2.0
11
+ //
12
+ // Unless required by applicable law or agreed to in writing, software
13
+ // distributed under the License is distributed on an "AS IS" BASIS,
14
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ // See the License for the specific language governing permissions and
16
+ // limitations under the License.
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.newEventSource = newEventSource;
19
+ const logger_1 = require("../log/logger");
20
+ const errors_1 = require("../utils/errors");
21
+ const log = (0, logger_1.newLogger)('event_source_factory');
22
+ /**
23
+ * Internal event source implementation.
24
+ */
25
+ class EventSourceBase {
26
+ constructor(name, pollFn) {
27
+ this.confs = new Map();
28
+ this._name = name;
29
+ this.pollFn = pollFn;
30
+ }
31
+ name() {
32
+ return this._name;
33
+ }
34
+ withDeleteFn(deleteFn) {
35
+ this.deleteFn = deleteFn;
36
+ return this;
37
+ }
38
+ withConfigParser(parserFn) {
39
+ this.configParserFn = parserFn;
40
+ return this;
41
+ }
42
+ withInitialCheckpoint(buildFn) {
43
+ this.buildInitialCheckpointFn = buildFn;
44
+ return this;
45
+ }
46
+ withInitFn(initFn) {
47
+ this.initFn = initFn;
48
+ return this;
49
+ }
50
+ withCloseFn(closeFn) {
51
+ this.closeFn = closeFn;
52
+ return this;
53
+ }
54
+ async init(engAPI) {
55
+ if (this.initFn) {
56
+ await this.initFn(engAPI);
57
+ }
58
+ }
59
+ close() {
60
+ if (this.closeFn) {
61
+ this.closeFn();
62
+ }
63
+ this.confs.clear();
64
+ }
65
+ /**
66
+ * Build and parse config for a stream.
67
+ */
68
+ async buildConf(info, configData) {
69
+ if (this.configParserFn) {
70
+ return await this.configParserFn(info, configData);
71
+ }
72
+ else {
73
+ // Simple JSON parsing (default)
74
+ return configData;
75
+ }
76
+ }
77
+ /**
78
+ * Build and cache config for a stream.
79
+ */
80
+ async buildAndCacheConf(config, request) {
81
+ const info = {
82
+ streamId: request.streamId,
83
+ streamName: request.streamName,
84
+ };
85
+ const parsedConfig = await this.buildConf(info, config.config);
86
+ const esConf = {
87
+ ...info,
88
+ config: parsedConfig,
89
+ };
90
+ this.confs.set(request.streamId, esConf);
91
+ return esConf;
92
+ }
93
+ /**
94
+ * Validate config and optionally set initial checkpoint.
95
+ */
96
+ async eventSourceValidateConfig(result, request) {
97
+ try {
98
+ const parsedConfig = await this.buildConf({
99
+ streamId: request.streamId,
100
+ streamName: request.streamName,
101
+ }, request.config);
102
+ if (this.buildInitialCheckpointFn) {
103
+ const initialCheckpoint = await this.buildInitialCheckpointFn(parsedConfig);
104
+ result.initialCheckpoint = initialCheckpoint;
105
+ }
106
+ }
107
+ catch (error) {
108
+ log.error('Failed to validate config', { error });
109
+ result.error = (0, errors_1.getErrorMessage)(error);
110
+ }
111
+ }
112
+ /**
113
+ * Poll for events.
114
+ * Mutates the `result` parameter to match the engine's output-by-reference API.
115
+ */
116
+ async eventSourcePoll(config, result, request) {
117
+ try {
118
+ // Get or build cached config
119
+ let esConf = this.confs.get(request.streamId);
120
+ if (!esConf) {
121
+ esConf = await this.buildAndCacheConf(config, request);
122
+ }
123
+ // Get checkpoint from request, normalize undefined to null for poll function
124
+ const checkpointIn = request.checkpoint ?? null;
125
+ // Call user's poll function
126
+ const pollResult = await this.pollFn(esConf, checkpointIn);
127
+ // Map events to ListenerEvent format
128
+ result.events = pollResult.events.map((evt) => ({
129
+ idempotencyKey: evt.idempotencyKey,
130
+ topic: evt.topic,
131
+ data: evt.data,
132
+ }));
133
+ // Set checkpoint
134
+ result.checkpoint = pollResult.checkpointOut;
135
+ }
136
+ catch (error) {
137
+ log.error('Poll failed', { error });
138
+ result.error = (0, errors_1.getErrorMessage)(error);
139
+ }
140
+ }
141
+ /**
142
+ * Delete event source and clear cached config.
143
+ */
144
+ async eventSourceDelete(result, request) {
145
+ try {
146
+ if (this.deleteFn) {
147
+ await this.deleteFn({
148
+ streamId: request.streamId,
149
+ streamName: request.streamName,
150
+ });
151
+ }
152
+ this.confs.delete(request.streamId);
153
+ }
154
+ catch (error) {
155
+ log.error('Delete failed', { error });
156
+ result.error = (0, errors_1.getErrorMessage)(error);
157
+ }
158
+ }
159
+ }
160
+ /**
161
+ * Create a new event source with a poll function.
162
+ *
163
+ * @param name - Handler name to register with the workflow engine
164
+ * @param pollFn - Function that polls for new events
165
+ * @returns EventSourceFactory for chaining configuration
166
+ */
167
+ function newEventSource(name, pollFn) {
168
+ return new EventSourceBase(name, pollFn);
169
+ }
170
+ //# sourceMappingURL=event_source.js.map