@versori/run 0.2.25 → 0.2.27
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/esm/src/dsl/http/versori/roundtripper.d.ts +9 -0
- package/esm/src/dsl/http/versori/roundtripper.d.ts.map +1 -1
- package/esm/src/dsl/http/versori/roundtripper.js +355 -38
- package/esm/src/dsl/triggers/WebhookTrigger.d.ts +9 -0
- package/esm/src/dsl/triggers/WebhookTrigger.d.ts.map +1 -1
- package/esm/src/interpreter/durable/DurableInterpreter.d.ts.map +1 -1
- package/esm/src/interpreter/durable/DurableInterpreter.js +0 -9
- package/esm/src/interpreter/durable/compilers/webhook.d.ts.map +1 -1
- package/esm/src/interpreter/durable/compilers/webhook.js +16 -1
- package/esm/src/interpreter/memory/MemoryInterpreter.d.ts.map +1 -1
- package/esm/src/interpreter/memory/MemoryInterpreter.js +0 -9
- package/esm/src/interpreter/memory/compilers/webhook.d.ts.map +1 -1
- package/esm/src/interpreter/memory/compilers/webhook.js +16 -1
- package/package.json +2 -1
- package/script/src/dsl/http/versori/roundtripper.d.ts +9 -0
- package/script/src/dsl/http/versori/roundtripper.d.ts.map +1 -1
- package/script/src/dsl/http/versori/roundtripper.js +355 -38
- package/script/src/dsl/triggers/WebhookTrigger.d.ts +9 -0
- package/script/src/dsl/triggers/WebhookTrigger.d.ts.map +1 -1
- package/script/src/interpreter/durable/DurableInterpreter.d.ts.map +1 -1
- package/script/src/interpreter/durable/DurableInterpreter.js +0 -9
- package/script/src/interpreter/durable/compilers/webhook.d.ts.map +1 -1
- package/script/src/interpreter/durable/compilers/webhook.js +16 -1
- package/script/src/interpreter/memory/MemoryInterpreter.d.ts.map +1 -1
- package/script/src/interpreter/memory/MemoryInterpreter.js +0 -9
- package/script/src/interpreter/memory/compilers/webhook.d.ts.map +1 -1
- package/script/src/interpreter/memory/compilers/webhook.js +16 -1
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import cors from 'cors';
|
|
2
|
+
import express from 'express';
|
|
2
3
|
import { pipeline } from 'node:stream/promises';
|
|
3
4
|
import { Observable } from 'rxjs';
|
|
4
5
|
import { createActIdDynamicWebhookMiddleware, createStaticWebhookMiddleware, createUserIdDynamicWebhookMiddleware, } from '../../../dsl/http/versori/webhookmiddleware.js';
|
|
5
6
|
import { WebhookTrigger } from '../../../dsl/triggers/WebhookTrigger.js';
|
|
7
|
+
import xmlparser from 'express-xml-bodyparser';
|
|
8
|
+
const xml2jsDefaults = {
|
|
9
|
+
explicitArray: false,
|
|
10
|
+
normalize: false,
|
|
11
|
+
normalizeTags: false,
|
|
12
|
+
trim: true,
|
|
13
|
+
};
|
|
6
14
|
const DEFAULT_SYNC_ON_SUCCESS = (ctx) => new Response(JSON.stringify(ctx.data), {
|
|
7
15
|
status: 200,
|
|
8
16
|
headers: {
|
|
@@ -40,7 +48,7 @@ const DEFAULT_ASYNC_ON_ERROR = (ctx) => new Response(JSON.stringify({
|
|
|
40
48
|
export const webhookCompiler = {
|
|
41
49
|
ctor: WebhookTrigger,
|
|
42
50
|
compile: (ctx, trigger, signal) => {
|
|
43
|
-
const { response: { mode = 'async'
|
|
51
|
+
const { response: { mode = 'async' } = {}, cors: corsOptions } = trigger.options;
|
|
44
52
|
const isSync = mode === 'sync';
|
|
45
53
|
const isAsync = mode === 'async';
|
|
46
54
|
if (!isSync && !isAsync) {
|
|
@@ -67,6 +75,13 @@ export const webhookCompiler = {
|
|
|
67
75
|
},
|
|
68
76
|
request: req,
|
|
69
77
|
});
|
|
78
|
+
if (!trigger.options.request?.rawBody) {
|
|
79
|
+
ctx.webhookRouter.use(express.json({ limit: '50mb' }));
|
|
80
|
+
ctx.webhookRouter.use(xmlparser(xml2jsDefaults));
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
ctx.webhookRouter.use(express.raw({ type: '*/*', limit: '50mb' }));
|
|
84
|
+
}
|
|
70
85
|
return new Observable((subscriber) => {
|
|
71
86
|
if (!ctx.webhookRouter) {
|
|
72
87
|
throw new Error('Router not available in compiler context');
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@versori/run",
|
|
3
|
-
"version": "v0.2.
|
|
3
|
+
"version": "v0.2.27",
|
|
4
4
|
"description": "Versori Run",
|
|
5
5
|
"homepage": "https://github.com/versori/versori-run#readme",
|
|
6
6
|
"repository": {
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"cors": "^2.8.5",
|
|
35
35
|
"express": "^4.18.3",
|
|
36
36
|
"express-xml-bodyparser": "^0.3.0",
|
|
37
|
+
"lru-cache": "^11.1.0",
|
|
37
38
|
"oauth-1.0a": "^2.2.6",
|
|
38
39
|
"rxjs": "^7.8.1",
|
|
39
40
|
"tweetnacl": "1.0.3"
|
|
@@ -25,12 +25,21 @@ export declare class VersoriCredentialsFactory implements RoundTripperFactory {
|
|
|
25
25
|
private cfgReader;
|
|
26
26
|
private log;
|
|
27
27
|
private tracer;
|
|
28
|
+
private oauth2Cache;
|
|
28
29
|
private readonly defaultDynamic;
|
|
29
30
|
constructor(credsClient: VersoriCredentialClient, credsBaseURL: string, platformAPIClient: PlatformAPIClient, logger: Logger, tracer: Tracer, cfgReader: ConfigReader);
|
|
30
31
|
static fromEnv(logger: Logger, tracer: Tracer): VersoriCredentialsFactory;
|
|
31
32
|
private changeRequestInit;
|
|
32
33
|
private changeBaseUrl;
|
|
33
34
|
create(connName: string): Promise<denoFetch | undefined>;
|
|
35
|
+
private apiKeyFetcherStatic;
|
|
36
|
+
private basicAuthFetcherStatic;
|
|
37
|
+
private bearerTokenFetcherStatic;
|
|
38
|
+
private getOAuth2Token;
|
|
39
|
+
private checkExpiry;
|
|
40
|
+
private oauth2FetcherStatic;
|
|
41
|
+
private oauth1FetcherStatic;
|
|
42
|
+
private mtlsFetcherStatic;
|
|
34
43
|
createDynamic(templateName: string): Promise<DynamicFetcher | undefined>;
|
|
35
44
|
private traceFetch;
|
|
36
45
|
credentials(): CredentialsProvider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roundtripper.d.ts","sourceRoot":"","sources":["../../../../../src/src/dsl/http/versori/roundtripper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,0CAA0C,CAAC;AAElE,OAAO,
|
|
1
|
+
{"version":3,"file":"roundtripper.d.ts","sourceRoot":"","sources":["../../../../../src/src/dsl/http/versori/roundtripper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,0CAA0C,CAAC;AAElE,OAAO,EAGH,cAAc,EACd,YAAY,EAGZ,cAAc,EACd,mBAAmB,EACtB,MAAM,aAAa,CAAC;AAQrB,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAQ9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AASrD,KAAK,SAAS,GAAG,CACb,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,GAAG;IAAE,MAAM,CAAC,EAAE,IAAI,CAAC,UAAU,CAAA;CAAE,KAChD,OAAO,CAAC,QAAQ,CAAC,CAAC;AAcvB;;;;;;;;;;GAUG;AACH,qBAAa,yBAA0B,YAAW,mBAAmB;IACjE,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO,CAAC,iBAAiB,CAAoB;IAE7C,OAAO,CAAC,SAAS,CAAe;IAEhC,OAAO,CAAC,GAAG,CAAS;IAEpB,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,WAAW,CAAoC;IAEvD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAK7B;gBAGE,WAAW,EAAE,uBAAuB,EACpC,YAAY,EAAE,MAAM,EACpB,iBAAiB,EAAE,iBAAiB,EACpC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,YAAY;IAoB3B,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,yBAAyB;IAoCzE,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,aAAa;IAwBf,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAuG9D,OAAO,CAAC,mBAAmB;IAoD3B,OAAO,CAAC,sBAAsB;IA2B9B,OAAO,CAAC,wBAAwB;YA6BlB,cAAc;IAqC5B,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,mBAAmB;IA+D3B,OAAO,CAAC,mBAAmB;IAuE3B,OAAO,CAAC,iBAAiB;IAqBzB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAyDxE,OAAO,CAAC,UAAU;IAqClB,WAAW,IAAI,mBAAmB;IAQlC,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc;IAyC9C,cAAc,CAChB,IAAI,EAAE,MAAM,EACZ,YAAY,UAAQ,EACpB,YAAY,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,KAAK,CAAC;IAiBX,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;YAqB9D,uBAAuB;IAoDrC,OAAO,CAAC,aAAa;IAoDrB,OAAO,CAAC,gBAAgB;IAmCxB,OAAO,CAAC,kBAAkB;IAiC1B,OAAO,CAAC,aAAa;IAqErB,OAAO,CAAC,aAAa;IAyErB,OAAO,CAAC,WAAW;YA6BL,QAAQ;YA2BR,MAAM;YA2BN,iBAAiB;CA0BlC"}
|
|
@@ -13,6 +13,8 @@ const helpers_js_1 = require("./helpers.js");
|
|
|
13
13
|
const platformapi_js_1 = require("./platformapi.js");
|
|
14
14
|
const node_url_1 = require("node:url");
|
|
15
15
|
const node_crypto_1 = require("node:crypto");
|
|
16
|
+
const lru_cache_1 = require("lru-cache");
|
|
17
|
+
const wkt_1 = require("@bufbuild/protobuf/wkt");
|
|
16
18
|
const oauth_1_0a_1 = __importDefault(require("oauth-1.0a")); // Importing the OAuth class as default export
|
|
17
19
|
/**
|
|
18
20
|
* VersoriRoundTripper is an implementation of the RoundTripperFactory interface for Versori connections.
|
|
@@ -63,6 +65,12 @@ class VersoriCredentialsFactory {
|
|
|
63
65
|
writable: true,
|
|
64
66
|
value: void 0
|
|
65
67
|
});
|
|
68
|
+
Object.defineProperty(this, "oauth2Cache", {
|
|
69
|
+
enumerable: true,
|
|
70
|
+
configurable: true,
|
|
71
|
+
writable: true,
|
|
72
|
+
value: void 0
|
|
73
|
+
});
|
|
66
74
|
Object.defineProperty(this, "defaultDynamic", {
|
|
67
75
|
enumerable: true,
|
|
68
76
|
configurable: true,
|
|
@@ -80,6 +88,10 @@ class VersoriCredentialsFactory {
|
|
|
80
88
|
this.cfgReader = cfgReader;
|
|
81
89
|
this.log = logger;
|
|
82
90
|
this.tracer = tracer;
|
|
91
|
+
this.oauth2Cache = new lru_cache_1.LRUCache({
|
|
92
|
+
max: 1000,
|
|
93
|
+
ttl: 2000 * 60 * 5,
|
|
94
|
+
});
|
|
83
95
|
// lost 15 minutes because of this one
|
|
84
96
|
this.traceFetch = this.traceFetch.bind(this);
|
|
85
97
|
this.credentials = this.credentials.bind(this);
|
|
@@ -143,58 +155,363 @@ class VersoriCredentialsFactory {
|
|
|
143
155
|
this.log.debug('Using baseURL from connection', { url: newURL.toString() });
|
|
144
156
|
return newURL.toString();
|
|
145
157
|
}
|
|
146
|
-
create(connName) {
|
|
158
|
+
async create(connName) {
|
|
147
159
|
const cnxId = this.cfgReader.getConnectionID(connName);
|
|
148
160
|
if (!cnxId) {
|
|
149
|
-
this.log.debug('Connection not found in config, could be a dynamic connection', {
|
|
150
|
-
connectionName: connName,
|
|
151
|
-
});
|
|
152
161
|
return Promise.resolve(undefined);
|
|
153
162
|
}
|
|
154
|
-
const
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
163
|
+
const conn = await this.platformAPIClient.getStaticConnection(cnxId);
|
|
164
|
+
let _fetch = this.traceFetch;
|
|
165
|
+
if (!conn) {
|
|
166
|
+
this.log.error('Connection not found - using default fetch', { 'connectionName': connName, 'connectionID': cnxId });
|
|
167
|
+
return _fetch;
|
|
168
|
+
}
|
|
169
|
+
for (const cred of conn?.credentials ?? []) {
|
|
170
|
+
switch (cred.authSchemeConfig.type) {
|
|
171
|
+
case 'api-key': {
|
|
172
|
+
const apiTokenResponse = await this.getToken(cred.credential.id);
|
|
173
|
+
if (!apiTokenResponse?.token?.accessToken || !cred.authSchemeConfig.apiKey) {
|
|
174
|
+
this.log.error('API Key credential is missing token or configuration', {
|
|
175
|
+
connectionName: connName,
|
|
176
|
+
credentialId: cred.credential.id,
|
|
177
|
+
});
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
_fetch = this.apiKeyFetcherStatic(apiTokenResponse.token.accessToken, cred.authSchemeConfig.apiKey, _fetch);
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
case 'basic-auth': {
|
|
184
|
+
const basicTokenResponse = await this.getToken(cred.credential.id);
|
|
185
|
+
if (!basicTokenResponse?.token?.accessToken) {
|
|
186
|
+
this.log.error('Basic Auth credential is missing token', {
|
|
187
|
+
connectionName: connName,
|
|
188
|
+
credentialId: cred.credential.id,
|
|
189
|
+
});
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
_fetch = this.basicAuthFetcherStatic(basicTokenResponse.token.accessToken, _fetch);
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
case 'jwt-bearer': {
|
|
196
|
+
const bearerTokenResponse = await this.getToken(cred.credential.id);
|
|
197
|
+
if (!bearerTokenResponse?.token?.accessToken) {
|
|
198
|
+
this.log.error('Bearer Token credential is missing token', {
|
|
199
|
+
connectionName: connName,
|
|
200
|
+
credentialId: cred.credential.id,
|
|
201
|
+
});
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
_fetch = this.bearerTokenFetcherStatic(bearerTokenResponse.token.accessToken, _fetch);
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
case 'oauth2': {
|
|
208
|
+
if (!cred.credential?.id) {
|
|
209
|
+
this.log.error('OAuth2 credential is missing credential ID', {
|
|
210
|
+
connectionName: connName,
|
|
211
|
+
credentialId: cred.credential.id,
|
|
212
|
+
});
|
|
213
|
+
continue;
|
|
214
|
+
}
|
|
215
|
+
_fetch = this.oauth2FetcherStatic(cred.credential.id, _fetch);
|
|
216
|
+
break;
|
|
217
|
+
}
|
|
218
|
+
case 'oauth1': {
|
|
219
|
+
const oauth1Metadata = await this.getOAuth1Metadata(cred.credential.id);
|
|
220
|
+
if (!oauth1Metadata?.authorizationMetadata) {
|
|
221
|
+
this.log.error('OAuth1 credential is missing metadata', {
|
|
222
|
+
connectionName: connName,
|
|
223
|
+
credentialId: cred.credential.id,
|
|
224
|
+
});
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
_fetch = this.oauth1FetcherStatic(oauth1Metadata, _fetch);
|
|
228
|
+
break;
|
|
229
|
+
}
|
|
230
|
+
case 'certificate': {
|
|
231
|
+
const mtlsData = await this.getRaw(cred.credential.id);
|
|
232
|
+
if (!mtlsData?.credential?.data['cert'] || !mtlsData?.credential?.data['key']) {
|
|
233
|
+
this.log.error('mTLS credential is missing cert or key data', {
|
|
234
|
+
connectionName: connName,
|
|
235
|
+
credentialId: cred.credential.id,
|
|
236
|
+
});
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
_fetch = this.mtlsFetcherStatic({
|
|
240
|
+
cert: mtlsData.credential.data['cert'],
|
|
241
|
+
key: mtlsData.credential.data['key'],
|
|
242
|
+
ca: mtlsData.credential.data['ca'],
|
|
243
|
+
}, _fetch);
|
|
244
|
+
break;
|
|
245
|
+
}
|
|
161
246
|
}
|
|
247
|
+
}
|
|
248
|
+
const _fn = async (input, init) => {
|
|
162
249
|
const _input = this.changeRequestInit(input, conn);
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
250
|
+
return _fetch(_input, init);
|
|
251
|
+
};
|
|
252
|
+
return _fn;
|
|
253
|
+
}
|
|
254
|
+
apiKeyFetcherStatic(token, asc, fn) {
|
|
255
|
+
const _fn = async (input, init) => {
|
|
256
|
+
if (!token) {
|
|
257
|
+
throw new Error('Token not found');
|
|
258
|
+
}
|
|
259
|
+
if (!asc) {
|
|
260
|
+
throw new Error('API Key configuration not found');
|
|
261
|
+
}
|
|
262
|
+
if (!init) {
|
|
263
|
+
init = {};
|
|
264
|
+
}
|
|
265
|
+
switch (asc.in) {
|
|
266
|
+
case 'header':
|
|
267
|
+
if (!init.headers) {
|
|
268
|
+
init.headers = new Headers();
|
|
269
|
+
}
|
|
270
|
+
if (init.headers instanceof Headers) {
|
|
271
|
+
init.headers.set(asc.name, token);
|
|
272
|
+
}
|
|
273
|
+
else if (init.headers instanceof Array) {
|
|
274
|
+
init.headers.push([asc.name, token]);
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
init.headers = {
|
|
278
|
+
...init.headers,
|
|
279
|
+
[asc.name]: token,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
break;
|
|
283
|
+
case 'query':
|
|
284
|
+
if (typeof input === 'string') {
|
|
285
|
+
const _input = new URL(input);
|
|
286
|
+
_input.searchParams.append(asc.name, token);
|
|
287
|
+
input = _input.toString();
|
|
288
|
+
}
|
|
289
|
+
else if (input instanceof Request) {
|
|
290
|
+
const _input = new URL(input.url);
|
|
291
|
+
_input.searchParams.append(asc.name, token);
|
|
292
|
+
input = new Request(_input.toString(), init);
|
|
293
|
+
}
|
|
294
|
+
else if (input instanceof URL) {
|
|
295
|
+
input.searchParams.append(asc.name, token);
|
|
296
|
+
}
|
|
297
|
+
break;
|
|
298
|
+
}
|
|
299
|
+
return fn(input, init);
|
|
300
|
+
};
|
|
301
|
+
return _fn;
|
|
302
|
+
}
|
|
303
|
+
basicAuthFetcherStatic(token, fn) {
|
|
304
|
+
const _fn = async (input, init) => {
|
|
305
|
+
if (!init) {
|
|
306
|
+
init = {};
|
|
307
|
+
}
|
|
308
|
+
if (!init.headers) {
|
|
309
|
+
init.headers = new Headers();
|
|
310
|
+
}
|
|
311
|
+
if (init.headers instanceof Headers) {
|
|
312
|
+
init.headers.set('Authorization', `Basic ${token}`);
|
|
313
|
+
}
|
|
314
|
+
else if (init.headers instanceof Array) {
|
|
315
|
+
init.headers.push(['Authorization', `Basic ${token}`]);
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
init.headers = {
|
|
319
|
+
...init.headers,
|
|
320
|
+
['Authorization']: `Basic ${token}`,
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
return fn(input, init);
|
|
324
|
+
};
|
|
325
|
+
return _fn;
|
|
326
|
+
}
|
|
327
|
+
bearerTokenFetcherStatic(token, fn) {
|
|
328
|
+
const _fn = async (input, init) => {
|
|
329
|
+
if (!init) {
|
|
330
|
+
init = {};
|
|
331
|
+
}
|
|
332
|
+
if (!init.headers) {
|
|
333
|
+
init.headers = new Headers();
|
|
334
|
+
}
|
|
335
|
+
if (init.headers instanceof Headers) {
|
|
336
|
+
init.headers.set('Authorization', `Bearer ${token}`);
|
|
337
|
+
}
|
|
338
|
+
else if (init.headers instanceof Array) {
|
|
339
|
+
init.headers.push(['Authorization', `Bearer ${token}`]);
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
init.headers = {
|
|
343
|
+
...init.headers,
|
|
344
|
+
['Authorization']: `Bearer ${token}`,
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
return fn(input, init);
|
|
348
|
+
};
|
|
349
|
+
return _fn;
|
|
350
|
+
}
|
|
351
|
+
// getOauth2Token fetches an OAuth2 token, stores the result in a cache, and returns the token.
|
|
352
|
+
// If forceRefresh is true, it will bypass the cache and fetch a new token then update the cache.
|
|
353
|
+
async getOAuth2Token(credId, forceRefresh = false) {
|
|
354
|
+
if (!forceRefresh && this.oauth2Cache.has(credId)) {
|
|
355
|
+
// we do cache.has so it will be there, hence the ! operator
|
|
356
|
+
const cached = this.oauth2Cache.get(credId);
|
|
357
|
+
// check the expiry: if the oauth2 token has an expiry and it is going to expire
|
|
358
|
+
// after the next 10 minutes, then simply return. Otherswise set forceRefresh to true,
|
|
359
|
+
// get a new token and update the cache
|
|
360
|
+
if (cached.expiry) {
|
|
361
|
+
if (this.checkExpiry(cached.expiry)) {
|
|
362
|
+
return Promise.resolve(cached);
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
forceRefresh = true;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
let tokenResponse = await this.getToken(credId, forceRefresh);
|
|
370
|
+
// we need to check the expiry of this new token in case it is going to expire soon.
|
|
371
|
+
if (tokenResponse?.token?.expiry && !this.checkExpiry(tokenResponse.token.expiry)) {
|
|
372
|
+
tokenResponse = await this.getToken(credId, true);
|
|
373
|
+
}
|
|
374
|
+
const newOauthTokenData = {
|
|
375
|
+
token: tokenResponse.token?.accessToken || '',
|
|
376
|
+
tokenType: tokenResponse.token?.tokenType,
|
|
377
|
+
expiry: tokenResponse.token?.expiry,
|
|
378
|
+
};
|
|
379
|
+
this.oauth2Cache.set(credId, newOauthTokenData);
|
|
380
|
+
return Promise.resolve(newOauthTokenData);
|
|
381
|
+
}
|
|
382
|
+
// Check if the given timestamp is expiring in the next 10 minutes.
|
|
383
|
+
// Returns true if not expiring, false otherwise
|
|
384
|
+
checkExpiry(ts) {
|
|
385
|
+
return (0, wkt_1.timestampMs)(ts) > (Date.now() + 10 * 60 * 1000);
|
|
386
|
+
}
|
|
387
|
+
oauth2FetcherStatic(credId, fn) {
|
|
388
|
+
const refreshFn = async (input, init, forceRefresh = false) => {
|
|
389
|
+
const tokenResponse = await this.getOAuth2Token(credId, forceRefresh);
|
|
390
|
+
const token = tokenResponse.token;
|
|
391
|
+
const _tokenType = () => {
|
|
392
|
+
const _tt = tokenResponse.tokenType?.toLowerCase();
|
|
393
|
+
switch (_tt) {
|
|
394
|
+
case 'bearer':
|
|
395
|
+
return 'Bearer';
|
|
396
|
+
case 'mac':
|
|
397
|
+
return 'MAC';
|
|
398
|
+
case 'basic':
|
|
399
|
+
return 'Basic';
|
|
184
400
|
default:
|
|
185
|
-
|
|
401
|
+
return 'Bearer';
|
|
186
402
|
}
|
|
403
|
+
};
|
|
404
|
+
if (!init) {
|
|
405
|
+
init = {};
|
|
406
|
+
}
|
|
407
|
+
if (!init.headers) {
|
|
408
|
+
init.headers = new Headers();
|
|
409
|
+
}
|
|
410
|
+
if (init.headers instanceof Headers) {
|
|
411
|
+
init.headers.set('Authorization', `${_tokenType()} ${token}`);
|
|
412
|
+
}
|
|
413
|
+
else if (init.headers instanceof Array) {
|
|
414
|
+
init.headers.push(['Authorization', `${_tokenType()} ${token}`]);
|
|
415
|
+
}
|
|
416
|
+
else {
|
|
417
|
+
init.headers = {
|
|
418
|
+
...init.headers,
|
|
419
|
+
['Authorization']: `${_tokenType()} ${token}`,
|
|
420
|
+
};
|
|
421
|
+
}
|
|
422
|
+
return fn(input, init);
|
|
423
|
+
};
|
|
424
|
+
const _fn = async (input, init) => {
|
|
425
|
+
const resp = await refreshFn(input, init);
|
|
426
|
+
if (resp.status === 401 || resp.status === 403) {
|
|
427
|
+
this.log.debug('Received unauthorized response, attempting to refresh token', {
|
|
428
|
+
url: input,
|
|
429
|
+
status: resp.status,
|
|
430
|
+
});
|
|
431
|
+
return refreshFn(input, init, true);
|
|
432
|
+
}
|
|
433
|
+
return resp;
|
|
434
|
+
};
|
|
435
|
+
return _fn;
|
|
436
|
+
}
|
|
437
|
+
oauth1FetcherStatic(metadata, fn) {
|
|
438
|
+
const _fn = async (input, init) => {
|
|
439
|
+
const authParams = new node_url_1.URLSearchParams(metadata.authorizationMetadata?.authorizationParams);
|
|
440
|
+
if (!metadata.authorizationMetadata) {
|
|
441
|
+
throw new Error('OAuth1 metadata not found');
|
|
442
|
+
}
|
|
443
|
+
const oauth = new oauth_1_0a_1.default({
|
|
444
|
+
consumer: {
|
|
445
|
+
key: metadata.authorizationMetadata.consumerKey,
|
|
446
|
+
secret: metadata.authorizationMetadata.consumerSecret,
|
|
447
|
+
},
|
|
448
|
+
signature_method: 'HMAC-SHA256',
|
|
449
|
+
hash_function: (baseString, key) => (0, node_crypto_1.createHmac)('sha256', key).update(baseString).digest('base64'),
|
|
450
|
+
realm: authParams.get('realm') || undefined,
|
|
187
451
|
});
|
|
188
|
-
|
|
452
|
+
let url;
|
|
453
|
+
if (input instanceof Request) {
|
|
454
|
+
url = input.url;
|
|
455
|
+
}
|
|
456
|
+
else if (input instanceof URL) {
|
|
457
|
+
url = input.toString();
|
|
458
|
+
}
|
|
459
|
+
else if (typeof input === 'string') {
|
|
460
|
+
url = input;
|
|
461
|
+
}
|
|
462
|
+
else {
|
|
463
|
+
throw new Error('Invalid input type for OAuth1 fetcher');
|
|
464
|
+
}
|
|
465
|
+
const header = oauth.toHeader(oauth.authorize({
|
|
466
|
+
url: url,
|
|
467
|
+
method: init?.method || 'GET',
|
|
468
|
+
}, {
|
|
469
|
+
key: metadata.authorizationMetadata?.oauthToken,
|
|
470
|
+
secret: metadata.authorizationMetadata?.oauthTokenSecret,
|
|
471
|
+
}));
|
|
472
|
+
const authHeader = header.Authorization;
|
|
473
|
+
if (!init) {
|
|
474
|
+
init = {};
|
|
475
|
+
}
|
|
476
|
+
if (!init.headers) {
|
|
477
|
+
init.headers = new Headers();
|
|
478
|
+
}
|
|
479
|
+
if (init.headers instanceof Headers) {
|
|
480
|
+
init.headers.set('Authorization', authHeader);
|
|
481
|
+
}
|
|
482
|
+
else if (init.headers instanceof Array) {
|
|
483
|
+
init.headers.push(['Authorization', authHeader]);
|
|
484
|
+
}
|
|
485
|
+
else {
|
|
486
|
+
init.headers = {
|
|
487
|
+
...init.headers,
|
|
488
|
+
['Authorization']: authHeader,
|
|
489
|
+
};
|
|
490
|
+
}
|
|
491
|
+
return fn(input, init);
|
|
189
492
|
};
|
|
190
|
-
return
|
|
493
|
+
return _fn;
|
|
494
|
+
}
|
|
495
|
+
mtlsFetcherStatic(mtlsdata, fn) {
|
|
496
|
+
const _fn = async (input, init) => {
|
|
497
|
+
const cert = new TextDecoder().decode(mtlsdata.cert);
|
|
498
|
+
const key = new TextDecoder().decode(mtlsdata.key);
|
|
499
|
+
const caCerts = new TextDecoder().decode(mtlsdata.ca ?? new Uint8Array());
|
|
500
|
+
const httpClient = Deno.createHttpClient({
|
|
501
|
+
cert,
|
|
502
|
+
key,
|
|
503
|
+
caCerts: caCerts ? [caCerts] : [],
|
|
504
|
+
});
|
|
505
|
+
return fn(input, {
|
|
506
|
+
...init,
|
|
507
|
+
client: httpClient,
|
|
508
|
+
});
|
|
509
|
+
};
|
|
510
|
+
return _fn;
|
|
191
511
|
}
|
|
192
512
|
createDynamic(templateName) {
|
|
193
513
|
const template = this.cfgReader.getTemplateID(templateName);
|
|
194
514
|
if (!template) {
|
|
195
|
-
this.log.debug('Template not found in config, could be a static connection', {
|
|
196
|
-
templateName: templateName,
|
|
197
|
-
});
|
|
198
515
|
return Promise.resolve(undefined);
|
|
199
516
|
}
|
|
200
517
|
const _fn = async (activation, input, init) => {
|
|
@@ -10,6 +10,14 @@ export type WebhookCorsOptions = boolean | {
|
|
|
10
10
|
exposedHeaders: string[];
|
|
11
11
|
credentials: boolean;
|
|
12
12
|
};
|
|
13
|
+
export type WebhookRequestOptions = {
|
|
14
|
+
/**
|
|
15
|
+
* If true, the raw body of the request will be passed to the context. Users will need to
|
|
16
|
+
* handle the parsing of the body themselves, and `data` in context will be undefined. Instead,
|
|
17
|
+
* you should call `const req = await ctx.request()` to retrieve the raw request.
|
|
18
|
+
*/
|
|
19
|
+
rawBody?: boolean;
|
|
20
|
+
};
|
|
13
21
|
export type WebhookResponseOptions = {
|
|
14
22
|
/**
|
|
15
23
|
* Mode determines how the response is sent to the client. The response can be customized by
|
|
@@ -44,6 +52,7 @@ export type WebhookOptions = {
|
|
|
44
52
|
cors?: WebhookCorsOptions;
|
|
45
53
|
response?: WebhookResponseOptions;
|
|
46
54
|
connection?: string;
|
|
55
|
+
request?: WebhookRequestOptions;
|
|
47
56
|
};
|
|
48
57
|
export declare class WebhookTrigger implements Trigger<WebhookData> {
|
|
49
58
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebhookTrigger.d.ts","sourceRoot":"","sources":["../../../../src/src/dsl/triggers/WebhookTrigger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAgB,MAAM,gBAAgB,CAAC;AAExD,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAEhD,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;CACxB,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACjC;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAExB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;IAE7C;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;CAC9C,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IACzB,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"WebhookTrigger.d.ts","sourceRoot":"","sources":["../../../../src/src/dsl/triggers/WebhookTrigger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAgB,MAAM,gBAAgB,CAAC;AAExD,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAEhD,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;CACxB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAChC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACjC;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAExB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;IAE7C;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;CAC9C,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IACzB,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,qBAAqB,CAAC;CACnC,CAAA;AAED,qBAAa,cAAe,YAAW,OAAO,CAAC,WAAW,CAAC;IACvD,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,cAAc,CAAC;IAExB,CAAC,WAAW,CAAC,EAAE,MAAM,CAAa;gBAEtB,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB;IAKpD,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;CAG1D;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAElF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DurableInterpreter.d.ts","sourceRoot":"","sources":["../../../../src/src/interpreter/durable/DurableInterpreter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"DurableInterpreter.d.ts","sourceRoot":"","sources":["../../../../src/src/interpreter/durable/DurableInterpreter.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,6 @@ const exporter_trace_otlp_proto_1 = require("@opentelemetry/exporter-trace-otlp-
|
|
|
9
9
|
const resources_1 = require("@opentelemetry/resources");
|
|
10
10
|
const sdk_node_1 = require("@opentelemetry/sdk-node");
|
|
11
11
|
const express_1 = __importDefault(require("express"));
|
|
12
|
-
const express_xml_bodyparser_1 = __importDefault(require("express-xml-bodyparser"));
|
|
13
12
|
const rxjs_1 = require("rxjs");
|
|
14
13
|
const ContextProvider_js_1 = require("../../context/ContextProvider.js");
|
|
15
14
|
const default_js_1 = require("../../dsl/http/default.js");
|
|
@@ -257,16 +256,8 @@ class DurableInterpreter {
|
|
|
257
256
|
const port = Deno.env.get('PORT') || 3000;
|
|
258
257
|
const cronPort = Deno.env.get('CRON_PORT') || 3001;
|
|
259
258
|
const webhookApp = (0, express_1.default)();
|
|
260
|
-
webhookApp.use(express_1.default.json({ limit: '50mb' })); // Add JSON body parser middleware
|
|
261
259
|
const cronApp = (0, express_1.default)();
|
|
262
260
|
cronApp.use(express_1.default.json());
|
|
263
|
-
const xml2jsDefaults = {
|
|
264
|
-
explicitArray: false,
|
|
265
|
-
normalize: false,
|
|
266
|
-
normalizeTags: false,
|
|
267
|
-
trim: true,
|
|
268
|
-
};
|
|
269
|
-
webhookApp.use((0, express_xml_bodyparser_1.default)(xml2jsDefaults));
|
|
270
261
|
// Add health check route
|
|
271
262
|
this.webhookRouter.get('/health', (_req, res) => {
|
|
272
263
|
res.json({ status: 'healthy' });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../../../../src/src/interpreter/durable/compilers/webhook.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAEtF,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../../../../src/src/interpreter/durable/compilers/webhook.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAEtF,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAwD7C,eAAO,MAAM,eAAe,EAAE,eAAe,CAAC,WAAW,EAAE,cAAc,CAgSxE,CAAC"}
|
|
@@ -5,10 +5,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.webhookCompiler = void 0;
|
|
7
7
|
const cors_1 = __importDefault(require("cors"));
|
|
8
|
+
const express_1 = __importDefault(require("express"));
|
|
8
9
|
const promises_1 = require("node:stream/promises");
|
|
9
10
|
const rxjs_1 = require("rxjs");
|
|
10
11
|
const webhookmiddleware_js_1 = require("../../../dsl/http/versori/webhookmiddleware.js");
|
|
11
12
|
const WebhookTrigger_js_1 = require("../../../dsl/triggers/WebhookTrigger.js");
|
|
13
|
+
const express_xml_bodyparser_1 = __importDefault(require("express-xml-bodyparser"));
|
|
14
|
+
const xml2jsDefaults = {
|
|
15
|
+
explicitArray: false,
|
|
16
|
+
normalize: false,
|
|
17
|
+
normalizeTags: false,
|
|
18
|
+
trim: true,
|
|
19
|
+
};
|
|
12
20
|
const DEFAULT_SYNC_ON_SUCCESS = (ctx) => new Response(JSON.stringify(ctx.data), {
|
|
13
21
|
status: 200,
|
|
14
22
|
headers: {
|
|
@@ -46,7 +54,7 @@ const DEFAULT_ASYNC_ON_ERROR = (ctx) => new Response(JSON.stringify({
|
|
|
46
54
|
exports.webhookCompiler = {
|
|
47
55
|
ctor: WebhookTrigger_js_1.WebhookTrigger,
|
|
48
56
|
compile: (ctx, trigger, signal) => {
|
|
49
|
-
const { response: { mode = 'async'
|
|
57
|
+
const { response: { mode = 'async' } = {}, cors: corsOptions } = trigger.options;
|
|
50
58
|
const isSync = mode === 'sync';
|
|
51
59
|
const isAsync = mode === 'async';
|
|
52
60
|
if (!isSync && !isAsync) {
|
|
@@ -73,6 +81,13 @@ exports.webhookCompiler = {
|
|
|
73
81
|
},
|
|
74
82
|
request: req,
|
|
75
83
|
});
|
|
84
|
+
if (!trigger.options.request?.rawBody) {
|
|
85
|
+
ctx.webhookRouter.use(express_1.default.json({ limit: '50mb' }));
|
|
86
|
+
ctx.webhookRouter.use((0, express_xml_bodyparser_1.default)(xml2jsDefaults));
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
ctx.webhookRouter.use(express_1.default.raw({ type: '*/*', limit: '50mb' }));
|
|
90
|
+
}
|
|
76
91
|
return new rxjs_1.Observable((subscriber) => {
|
|
77
92
|
if (!ctx.webhookRouter) {
|
|
78
93
|
throw new Error('Router not available in compiler context');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryInterpreter.d.ts","sourceRoot":"","sources":["../../../../src/src/interpreter/memory/MemoryInterpreter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"MemoryInterpreter.d.ts","sourceRoot":"","sources":["../../../../src/src/interpreter/memory/MemoryInterpreter.ts"],"names":[],"mappings":"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"}
|