@versori/run 0.2.26 → 0.2.28
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/context/ContextProvider.d.ts +1 -1
- package/esm/src/context/ContextProvider.d.ts.map +1 -1
- package/esm/src/context/ContextProvider.js +2 -5
- package/esm/src/dsl/http/default.d.ts.map +1 -1
- package/esm/src/dsl/http/default.js +1 -0
- package/esm/src/dsl/http/versori/proxyroundtripper.d.ts +2 -2
- package/esm/src/dsl/http/versori/proxyroundtripper.d.ts.map +1 -1
- package/esm/src/dsl/http/versori/proxyroundtripper.js +4 -1
- package/esm/src/dsl/http/versori/roundtripper.d.ts +1 -0
- package/esm/src/dsl/http/versori/roundtripper.d.ts.map +1 -1
- package/esm/src/dsl/http/versori/roundtripper.js +37 -9
- package/esm/src/dsl/triggers/WebhookTrigger.d.ts +10 -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 +27 -4
- 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 +27 -4
- package/package.json +2 -1
- package/script/src/context/ContextProvider.d.ts +1 -1
- package/script/src/context/ContextProvider.d.ts.map +1 -1
- package/script/src/context/ContextProvider.js +2 -5
- package/script/src/dsl/http/default.d.ts.map +1 -1
- package/script/src/dsl/http/default.js +1 -0
- package/script/src/dsl/http/versori/proxyroundtripper.d.ts +2 -2
- package/script/src/dsl/http/versori/proxyroundtripper.d.ts.map +1 -1
- package/script/src/dsl/http/versori/proxyroundtripper.js +4 -1
- package/script/src/dsl/http/versori/roundtripper.d.ts +1 -0
- package/script/src/dsl/http/versori/roundtripper.d.ts.map +1 -1
- package/script/src/dsl/http/versori/roundtripper.js +37 -9
- package/script/src/dsl/triggers/WebhookTrigger.d.ts +10 -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 +27 -4
- 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 +27 -4
|
@@ -16,6 +16,6 @@ export declare class ContextProviderImpl implements ContextProvider {
|
|
|
16
16
|
queue?: QueueAPI;
|
|
17
17
|
constructor(log: Logger, kvp: KeyValueProvider, creds: CredentialsProvider, issues: IssueAPI, queue?: QueueAPI | undefined);
|
|
18
18
|
create<D>(data: D, options?: ContextOptions): ContextImpl<D>;
|
|
19
|
-
destroy(
|
|
19
|
+
destroy(_: Context<any>): Promise<void>;
|
|
20
20
|
}
|
|
21
21
|
//# sourceMappingURL=ContextProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContextProvider.d.ts","sourceRoot":"","sources":["../../../src/src/context/ContextProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC5B,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAED,qBAAa,mBAAoB,YAAW,eAAe;IACvD,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,gBAAgB,CAAC;IACtB,KAAK,EAAE,mBAAmB,CAAC;IAC3B,MAAM,EAAE,QAAQ,CAAC;IACjB,KAAK,CAAC,EAAE,QAAQ,CAAC;gBAGb,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,gBAAgB,EACrB,KAAK,EAAE,mBAAmB,EAC1B,MAAM,EAAE,QAAQ,EAChB,KAAK,GAAE,QAAQ,GAAG,SAAqB;IAS3C,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,GAAE,cAAmB,GAAG,WAAW,CAAC,CAAC,CAAC;IAyBhE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"ContextProvider.d.ts","sourceRoot":"","sources":["../../../src/src/context/ContextProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC5B,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAED,qBAAa,mBAAoB,YAAW,eAAe;IACvD,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,gBAAgB,CAAC;IACtB,KAAK,EAAE,mBAAmB,CAAC;IAC3B,MAAM,EAAE,QAAQ,CAAC;IACjB,KAAK,CAAC,EAAE,QAAQ,CAAC;gBAGb,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,gBAAgB,EACrB,KAAK,EAAE,mBAAmB,EAC1B,MAAM,EAAE,QAAQ,EAChB,KAAK,GAAE,QAAQ,GAAG,SAAqB;IAS3C,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,GAAE,cAAmB,GAAG,WAAW,CAAC,CAAC,CAAC;IAyBhE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAG1C"}
|
|
@@ -49,10 +49,7 @@ export class ContextProviderImpl {
|
|
|
49
49
|
}
|
|
50
50
|
return new ContextImpl(logger, this.kvp, this.creds, executionId, new Date(), data, this.issues, this.queue, options);
|
|
51
51
|
}
|
|
52
|
-
destroy(
|
|
53
|
-
return
|
|
54
|
-
scope: ':execution:',
|
|
55
|
-
executionId: ctx.executionId,
|
|
56
|
-
});
|
|
52
|
+
destroy(_) {
|
|
53
|
+
return Promise.resolve();
|
|
57
54
|
}
|
|
58
55
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../../../src/src/dsl/http/default.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../../../src/src/dsl/http/default.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAOtE;;;;GAIG;AACH,qBAAa,0BAA2B,YAAW,mBAAmB;IAClE;;OAEG;;IAIH;;;;;;;OAOG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,KAAK,CAAC;IAIhD,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAMnE,WAAW,IAAI,mBAAmB;IAalC,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC;CAK/E"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { BaseUrlFetcher, ConfigReader, DynamicFetcher, RoundTripperFactory } from '../types.js';
|
|
2
|
-
import { PlatformAPIClient } from './platformapi.js';
|
|
3
1
|
import { Logger } from '../../../observability/mod.js';
|
|
2
|
+
import { BaseUrlFetcher, ConfigReader, DynamicFetcher, RoundTripperFactory } from '../types.js';
|
|
4
3
|
import { CredentialsProvider } from './contextcredentials.js';
|
|
4
|
+
import { PlatformAPIClient } from './platformapi.js';
|
|
5
5
|
export declare class ProxyRoundTripper implements RoundTripperFactory {
|
|
6
6
|
private platformApiBaseUrl;
|
|
7
7
|
private cfgReader;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxyroundtripper.d.ts","sourceRoot":"","sources":["../../../../../src/src/dsl/http/versori/proxyroundtripper.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"proxyroundtripper.d.ts","sourceRoot":"","sources":["../../../../../src/src/dsl/http/versori/proxyroundtripper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAEH,cAAc,EACd,YAAY,EACZ,cAAc,EACd,mBAAmB,EACtB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAO9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAIrD,qBAAa,iBAAkB,YAAW,mBAAmB;IACzD,OAAO,CAAC,kBAAkB,CAAS;IAEnC,OAAO,CAAC,SAAS,CAAe;IAEhC,OAAO,CAAC,iBAAiB,CAAoB;IAE7C,OAAO,CAAC,YAAY,CAAe;IAEnC,OAAO,CAAC,GAAG,CAAS;gBAGhB,GAAG,EAAE,MAAM,EACX,kBAAkB,EAAE,MAAM,EAC1B,iBAAiB,EAAE,iBAAiB,EACpC,SAAS,EAAE,YAAY;IAS3B,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB;IA0B9C,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,cAAc;YA6BR,aAAa;IA4B3B,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,KAAK,GAAG,SAAS,CAAC;IAoB3D,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAqCxE,WAAW,IAAI,mBAAmB;IAoBlC,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,cAAc;CAKxD"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { VersoriConfigReader } from './configloader.js';
|
|
2
|
-
import { PlatformAPIClient } from './platformapi.js';
|
|
3
2
|
import { envVarEnvId, envVarOrgId, envVarPlatformApiBaseURL } from './constants.js';
|
|
4
3
|
import { isValidURL } from './helpers.js';
|
|
5
4
|
import { InternalAuth } from './internalauth.js';
|
|
5
|
+
import { PlatformAPIClient } from './platformapi.js';
|
|
6
6
|
// ProxyRoundTripper is a factory for creating roundtrippers that use the Versori Platform API proxy endpoints.
|
|
7
7
|
// this should allow code from the platform to be run locally.
|
|
8
8
|
export class ProxyRoundTripper {
|
|
@@ -160,6 +160,9 @@ export class ProxyRoundTripper {
|
|
|
160
160
|
getAccessToken: (_name, _forceRefresh, _actId) => {
|
|
161
161
|
return Promise.reject(new Error('Not implemented, getAccessToken is not supported in proxy mode'));
|
|
162
162
|
},
|
|
163
|
+
getOAuth1Metadata(_credId) {
|
|
164
|
+
return Promise.reject(new Error('Not implemented, getOAuth1Metadata is not supported in proxy mode'));
|
|
165
|
+
}
|
|
163
166
|
};
|
|
164
167
|
}
|
|
165
168
|
baseUrlFetcher(_templateName) {
|
|
@@ -36,6 +36,7 @@ export declare class VersoriCredentialsFactory implements RoundTripperFactory {
|
|
|
36
36
|
private basicAuthFetcherStatic;
|
|
37
37
|
private bearerTokenFetcherStatic;
|
|
38
38
|
private getOAuth2Token;
|
|
39
|
+
private checkExpiry;
|
|
39
40
|
private oauth2FetcherStatic;
|
|
40
41
|
private oauth1FetcherStatic;
|
|
41
42
|
private mtlsFetcherStatic;
|
|
@@ -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"}
|
|
@@ -7,6 +7,8 @@ import { isValidURL } from './helpers.js';
|
|
|
7
7
|
import { PlatformAPIClient } from './platformapi.js';
|
|
8
8
|
import { URLSearchParams } from 'node:url';
|
|
9
9
|
import { createHmac } from 'node:crypto';
|
|
10
|
+
import { LRUCache } from 'lru-cache';
|
|
11
|
+
import { timestampMs } from '@bufbuild/protobuf/wkt';
|
|
10
12
|
import OAuth from 'oauth-1.0a'; // Importing the OAuth class as default export
|
|
11
13
|
/**
|
|
12
14
|
* VersoriRoundTripper is an implementation of the RoundTripperFactory interface for Versori connections.
|
|
@@ -61,7 +63,7 @@ export class VersoriCredentialsFactory {
|
|
|
61
63
|
enumerable: true,
|
|
62
64
|
configurable: true,
|
|
63
65
|
writable: true,
|
|
64
|
-
value:
|
|
66
|
+
value: void 0
|
|
65
67
|
});
|
|
66
68
|
Object.defineProperty(this, "defaultDynamic", {
|
|
67
69
|
enumerable: true,
|
|
@@ -80,6 +82,10 @@ export class VersoriCredentialsFactory {
|
|
|
80
82
|
this.cfgReader = cfgReader;
|
|
81
83
|
this.log = logger;
|
|
82
84
|
this.tracer = tracer;
|
|
85
|
+
this.oauth2Cache = new LRUCache({
|
|
86
|
+
max: 1000,
|
|
87
|
+
ttl: 2000 * 60 * 5,
|
|
88
|
+
});
|
|
83
89
|
// lost 15 minutes because of this one
|
|
84
90
|
this.traceFetch = this.traceFetch.bind(this);
|
|
85
91
|
this.credentials = this.credentials.bind(this);
|
|
@@ -339,16 +345,38 @@ export class VersoriCredentialsFactory {
|
|
|
339
345
|
// getOauth2Token fetches an OAuth2 token, stores the result in a cache, and returns the token.
|
|
340
346
|
// If forceRefresh is true, it will bypass the cache and fetch a new token then update the cache.
|
|
341
347
|
async getOAuth2Token(credId, forceRefresh = false) {
|
|
342
|
-
if (
|
|
343
|
-
|
|
348
|
+
if (!forceRefresh && this.oauth2Cache.has(credId)) {
|
|
349
|
+
// we do cache.has so it will be there, hence the ! operator
|
|
350
|
+
const cached = this.oauth2Cache.get(credId);
|
|
351
|
+
// check the expiry: if the oauth2 token has an expiry and it is going to expire
|
|
352
|
+
// after the next 10 minutes, then simply return. Otherswise set forceRefresh to true,
|
|
353
|
+
// get a new token and update the cache
|
|
354
|
+
if (cached.expiry) {
|
|
355
|
+
if (this.checkExpiry(cached.expiry)) {
|
|
356
|
+
return Promise.resolve(cached);
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
forceRefresh = true;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
344
362
|
}
|
|
345
|
-
|
|
346
|
-
this
|
|
363
|
+
let tokenResponse = await this.getToken(credId, forceRefresh);
|
|
364
|
+
// we need to check the expiry of this new token in case it is going to expire soon.
|
|
365
|
+
if (tokenResponse?.token?.expiry && !this.checkExpiry(tokenResponse.token.expiry)) {
|
|
366
|
+
tokenResponse = await this.getToken(credId, true);
|
|
367
|
+
}
|
|
368
|
+
const newOauthTokenData = {
|
|
347
369
|
token: tokenResponse.token?.accessToken || '',
|
|
348
370
|
tokenType: tokenResponse.token?.tokenType,
|
|
371
|
+
expiry: tokenResponse.token?.expiry,
|
|
349
372
|
};
|
|
350
|
-
this.
|
|
351
|
-
return
|
|
373
|
+
this.oauth2Cache.set(credId, newOauthTokenData);
|
|
374
|
+
return Promise.resolve(newOauthTokenData);
|
|
375
|
+
}
|
|
376
|
+
// Check if the given timestamp is expiring in the next 10 minutes.
|
|
377
|
+
// Returns true if not expiring, false otherwise
|
|
378
|
+
checkExpiry(ts) {
|
|
379
|
+
return timestampMs(ts) > (Date.now() + 10 * 60 * 1000);
|
|
352
380
|
}
|
|
353
381
|
oauth2FetcherStatic(credId, fn) {
|
|
354
382
|
const refreshFn = async (input, init, forceRefresh = false) => {
|
|
@@ -389,8 +417,8 @@ export class VersoriCredentialsFactory {
|
|
|
389
417
|
};
|
|
390
418
|
const _fn = async (input, init) => {
|
|
391
419
|
const resp = await refreshFn(input, init);
|
|
392
|
-
if (resp.status === 401) {
|
|
393
|
-
this.log.debug('Received
|
|
420
|
+
if (resp.status === 401 || resp.status === 403) {
|
|
421
|
+
this.log.debug('Received unauthorized response, attempting to refresh token', {
|
|
394
422
|
url: input,
|
|
395
423
|
status: resp.status,
|
|
396
424
|
});
|
|
@@ -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,8 @@ export type WebhookOptions = {
|
|
|
44
52
|
cors?: WebhookCorsOptions;
|
|
45
53
|
response?: WebhookResponseOptions;
|
|
46
54
|
connection?: string;
|
|
55
|
+
method?: "all" | "get" | "post" | "put" | "delete" | "patch" | "options" | "head";
|
|
56
|
+
request?: WebhookRequestOptions;
|
|
47
57
|
};
|
|
48
58
|
export declare class WebhookTrigger implements Trigger<WebhookData> {
|
|
49
59
|
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,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IAClF,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":"AAAA,OAAsB,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG3D,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAgB,EAAqB,MAAM,EAAE,MAAM,SAAS,CAAC;AAG7D,OAAO,EAA+B,UAAU,EAAM,YAAY,EAAO,MAAM,MAAM,CAAC;AACtF,OAAO,EAAE,eAAe,EAAuB,MAAM,kCAAkC,CAAC;AAExF,OAAO,EACH,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACtB,MAAM,yBAAyB,CAAC;AAiBjC,OAAO,EAAE,QAAQ,EAAgB,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAa,MAAM,wBAAwB,CAAC;AAG7D,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAoB,MAAM,cAAc,CAAC;AAEtF,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAC/D,OAAO,EAA0B,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAa,MAAM,YAAY,CAAC;AAEjD,MAAM,MAAM,yBAAyB,GAAG;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CACpC,CAAC;AAEF,KAAK,YAAY,GAAG;IAChB,QAAQ,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7C,KAAK,EAAE,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9C,oBAAoB,EAAE,eAAe,CAAC;IACtC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,YAAY,CAAC;CAC/B,CAAC;AAwCF,qBAAa,kBAAkB;IAQvB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IApB7B,OAAO,CAAC,mBAAmB,CAA2B;IACtD,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,cAAc,CAAC,CAAa;IACpC,OAAO,CAAC,cAAc,CAAS;gBAGV,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,kBAAkB,EAC5B,eAAe,EAAE,eAAe,EAChC,mBAAmB,EAAE,mBAAmB,EACxC,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAC3B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACxB,kBAAkB,EAAE,kBAAkB,EACtC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,YAAY,EACvB,aAAa,EAAE,QAAQ,EACvB,OAAO,CAAC,EAAE,OAAO,YAAA;WAWzB,WAAW,CAAC,OAAO,GAAE,yBAA8B,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAqG9F,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,yBAAyB;IAmDhE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA4MtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAO9B"}
|
|
@@ -3,7 +3,6 @@ import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';
|
|
|
3
3
|
import { resourceFromAttributes } from '@opentelemetry/resources';
|
|
4
4
|
import { NodeSDK } from '@opentelemetry/sdk-node';
|
|
5
5
|
import express from 'express';
|
|
6
|
-
import xmlparser from 'express-xml-bodyparser';
|
|
7
6
|
import { catchError, EMPTY, mergeMap, of, tap } from 'rxjs';
|
|
8
7
|
import { ContextProviderImpl } from '../../context/ContextProvider.js';
|
|
9
8
|
import { DefaultRoundTripperFactory } from '../../dsl/http/default.js';
|
|
@@ -251,16 +250,8 @@ export class DurableInterpreter {
|
|
|
251
250
|
const port = Deno.env.get('PORT') || 3000;
|
|
252
251
|
const cronPort = Deno.env.get('CRON_PORT') || 3001;
|
|
253
252
|
const webhookApp = express();
|
|
254
|
-
webhookApp.use(express.json({ limit: '50mb' })); // Add JSON body parser middleware
|
|
255
253
|
const cronApp = express();
|
|
256
254
|
cronApp.use(express.json());
|
|
257
|
-
const xml2jsDefaults = {
|
|
258
|
-
explicitArray: false,
|
|
259
|
-
normalize: false,
|
|
260
|
-
normalizeTags: false,
|
|
261
|
-
trim: true,
|
|
262
|
-
};
|
|
263
|
-
webhookApp.use(xmlparser(xml2jsDefaults));
|
|
264
255
|
// Add health check route
|
|
265
256
|
this.webhookRouter.get('/health', (_req, res) => {
|
|
266
257
|
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,CA2SxE,CAAC"}
|
|
@@ -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,12 +48,20 @@ 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) {
|
|
47
55
|
throw new Error('Invalid response mode, must be either "sync" or "async"');
|
|
48
56
|
}
|
|
57
|
+
const method = trigger.options.method || 'post';
|
|
58
|
+
const validMethods = ['get', 'post', 'put', 'delete', 'patch', 'options', 'head'];
|
|
59
|
+
if (method !== method.toLowerCase()) {
|
|
60
|
+
throw new Error(`HTTP method must be in lowercase: ${method} on webhook ${trigger.id}`);
|
|
61
|
+
}
|
|
62
|
+
if (!validMethods.includes(method)) {
|
|
63
|
+
throw new Error(`Unsupported HTTP method: ${method} on webhook ${trigger.id}. Must be one of: ${validMethods.join(', ')}`);
|
|
64
|
+
}
|
|
49
65
|
let onSuccess = isSync ? DEFAULT_SYNC_ON_SUCCESS : DEFAULT_ASYNC_ON_SUCCESS;
|
|
50
66
|
let onError = isSync ? DEFAULT_SYNC_ON_ERROR : DEFAULT_ASYNC_ON_ERROR;
|
|
51
67
|
if (trigger.options.response?.onSuccess) {
|
|
@@ -67,6 +83,13 @@ export const webhookCompiler = {
|
|
|
67
83
|
},
|
|
68
84
|
request: req,
|
|
69
85
|
});
|
|
86
|
+
if (!trigger.options.request?.rawBody) {
|
|
87
|
+
ctx.webhookRouter.use(express.json({ limit: '50mb' }));
|
|
88
|
+
ctx.webhookRouter.use(xmlparser(xml2jsDefaults));
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
ctx.webhookRouter.use(express.raw({ type: '*/*', limit: '50mb' }));
|
|
92
|
+
}
|
|
70
93
|
return new Observable((subscriber) => {
|
|
71
94
|
if (!ctx.webhookRouter) {
|
|
72
95
|
throw new Error('Router not available in compiler context');
|
|
@@ -82,7 +105,7 @@ export const webhookCompiler = {
|
|
|
82
105
|
}
|
|
83
106
|
}
|
|
84
107
|
// endpoint for sans user because I'm not quite sure how the dynamic routing works
|
|
85
|
-
ctx.webhookRouter
|
|
108
|
+
ctx.webhookRouter[method](`/${trigger.id}`, createStaticWebhookMiddleware({
|
|
86
109
|
id: trigger.id,
|
|
87
110
|
connName: trigger.options.connection,
|
|
88
111
|
credentials: ctx.roundTripperFactory.credentials(),
|
|
@@ -119,7 +142,7 @@ export const webhookCompiler = {
|
|
|
119
142
|
});
|
|
120
143
|
});
|
|
121
144
|
// this endpoint will trigger the workflow for each activation given by the external user ID
|
|
122
|
-
ctx.webhookRouter
|
|
145
|
+
ctx.webhookRouter[method](`/${trigger.id}/users/:userId`, createUserIdDynamicWebhookMiddleware({
|
|
123
146
|
id: trigger.id,
|
|
124
147
|
connName: trigger.options.connection,
|
|
125
148
|
credentials: ctx.roundTripperFactory.credentials(),
|
|
@@ -177,7 +200,7 @@ export const webhookCompiler = {
|
|
|
177
200
|
});
|
|
178
201
|
});
|
|
179
202
|
// this endpoint will trigger the workflow only for the activation given by its ID
|
|
180
|
-
ctx.webhookRouter
|
|
203
|
+
ctx.webhookRouter[method](`/${trigger.id}/activations/:activationId`, createActIdDynamicWebhookMiddleware({
|
|
181
204
|
id: trigger.id,
|
|
182
205
|
connName: trigger.options.connection,
|
|
183
206
|
credentials: ctx.roundTripperFactory.credentials(),
|
|
@@ -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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"}
|
|
@@ -3,7 +3,6 @@ import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';
|
|
|
3
3
|
import { resourceFromAttributes } from '@opentelemetry/resources';
|
|
4
4
|
import { NodeSDK } from '@opentelemetry/sdk-node';
|
|
5
5
|
import express from 'express';
|
|
6
|
-
import xmlparser from 'express-xml-bodyparser';
|
|
7
6
|
import { catchError, EMPTY, mergeMap, of, tap } from 'rxjs';
|
|
8
7
|
import { ContextProviderImpl } from '../../context/ContextProvider.js';
|
|
9
8
|
import { DefaultRoundTripperFactory } from '../../dsl/http/default.js';
|
|
@@ -240,16 +239,8 @@ export class MemoryInterpreter {
|
|
|
240
239
|
const port = Deno.env.get('PORT') || 3000;
|
|
241
240
|
const cronPort = Deno.env.get('CRON_PORT') || 3001;
|
|
242
241
|
const webhookApp = express();
|
|
243
|
-
webhookApp.use(express.json({ limit: '50mb' })); // Add JSON body parser middleware
|
|
244
242
|
const cronApp = express();
|
|
245
243
|
cronApp.use(express.json());
|
|
246
|
-
const xml2jsDefaults = {
|
|
247
|
-
explicitArray: false,
|
|
248
|
-
normalize: false,
|
|
249
|
-
normalizeTags: false,
|
|
250
|
-
trim: true,
|
|
251
|
-
};
|
|
252
|
-
webhookApp.use(xmlparser(xml2jsDefaults));
|
|
253
244
|
// Add health check route
|
|
254
245
|
this.webhookRouter.get('/health', (_req, res) => {
|
|
255
246
|
res.json({ status: 'healthy' });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../../../../src/src/interpreter/memory/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/memory/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,CA2SxE,CAAC"}
|
|
@@ -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,12 +48,20 @@ 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) {
|
|
47
55
|
throw new Error('Invalid response mode, must be either "sync" or "async"');
|
|
48
56
|
}
|
|
57
|
+
const method = trigger.options.method || 'post';
|
|
58
|
+
const validMethods = ['get', 'post', 'put', 'delete', 'patch', 'options', 'head'];
|
|
59
|
+
if (method !== method.toLowerCase()) {
|
|
60
|
+
throw new Error(`HTTP method must be in lowercase: ${method} on webhook ${trigger.id}`);
|
|
61
|
+
}
|
|
62
|
+
if (!validMethods.includes(method)) {
|
|
63
|
+
throw new Error(`Unsupported HTTP method: ${method} on webhook ${trigger.id}. Must be one of: ${validMethods.join(', ')}`);
|
|
64
|
+
}
|
|
49
65
|
let onSuccess = isSync ? DEFAULT_SYNC_ON_SUCCESS : DEFAULT_ASYNC_ON_SUCCESS;
|
|
50
66
|
let onError = isSync ? DEFAULT_SYNC_ON_ERROR : DEFAULT_ASYNC_ON_ERROR;
|
|
51
67
|
if (trigger.options.response?.onSuccess) {
|
|
@@ -67,6 +83,13 @@ export const webhookCompiler = {
|
|
|
67
83
|
},
|
|
68
84
|
request: req,
|
|
69
85
|
});
|
|
86
|
+
if (!trigger.options.request?.rawBody) {
|
|
87
|
+
ctx.webhookRouter.use(express.json({ limit: '50mb' }));
|
|
88
|
+
ctx.webhookRouter.use(xmlparser(xml2jsDefaults));
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
ctx.webhookRouter.use(express.raw({ type: '*/*', limit: '50mb' }));
|
|
92
|
+
}
|
|
70
93
|
return new Observable((subscriber) => {
|
|
71
94
|
if (!ctx.webhookRouter) {
|
|
72
95
|
throw new Error('Router not available in compiler context');
|
|
@@ -82,7 +105,7 @@ export const webhookCompiler = {
|
|
|
82
105
|
}
|
|
83
106
|
}
|
|
84
107
|
// endpoint for sans user because I'm not quite sure how the dynamic routing works
|
|
85
|
-
ctx.webhookRouter
|
|
108
|
+
ctx.webhookRouter[method](`/${trigger.id}`, createStaticWebhookMiddleware({
|
|
86
109
|
id: trigger.id,
|
|
87
110
|
connName: trigger.options.connection,
|
|
88
111
|
credentials: ctx.roundTripperFactory.credentials(),
|
|
@@ -119,7 +142,7 @@ export const webhookCompiler = {
|
|
|
119
142
|
});
|
|
120
143
|
});
|
|
121
144
|
// this endpoint will trigger the workflow for each activation given by the external user ID
|
|
122
|
-
ctx.webhookRouter
|
|
145
|
+
ctx.webhookRouter[method](`/${trigger.id}/users/:userId`, createUserIdDynamicWebhookMiddleware({
|
|
123
146
|
id: trigger.id,
|
|
124
147
|
connName: trigger.options.connection,
|
|
125
148
|
credentials: ctx.roundTripperFactory.credentials(),
|
|
@@ -177,7 +200,7 @@ export const webhookCompiler = {
|
|
|
177
200
|
});
|
|
178
201
|
});
|
|
179
202
|
// this endpoint will trigger the workflow only for the activation given by its ID
|
|
180
|
-
ctx.webhookRouter
|
|
203
|
+
ctx.webhookRouter[method](`/${trigger.id}/activations/:activationId`, createActIdDynamicWebhookMiddleware({
|
|
181
204
|
id: trigger.id,
|
|
182
205
|
connName: trigger.options.connection,
|
|
183
206
|
credentials: ctx.roundTripperFactory.credentials(),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@versori/run",
|
|
3
|
-
"version": "v0.2.
|
|
3
|
+
"version": "v0.2.28",
|
|
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"
|
|
@@ -16,6 +16,6 @@ export declare class ContextProviderImpl implements ContextProvider {
|
|
|
16
16
|
queue?: QueueAPI;
|
|
17
17
|
constructor(log: Logger, kvp: KeyValueProvider, creds: CredentialsProvider, issues: IssueAPI, queue?: QueueAPI | undefined);
|
|
18
18
|
create<D>(data: D, options?: ContextOptions): ContextImpl<D>;
|
|
19
|
-
destroy(
|
|
19
|
+
destroy(_: Context<any>): Promise<void>;
|
|
20
20
|
}
|
|
21
21
|
//# sourceMappingURL=ContextProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContextProvider.d.ts","sourceRoot":"","sources":["../../../src/src/context/ContextProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC5B,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAED,qBAAa,mBAAoB,YAAW,eAAe;IACvD,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,gBAAgB,CAAC;IACtB,KAAK,EAAE,mBAAmB,CAAC;IAC3B,MAAM,EAAE,QAAQ,CAAC;IACjB,KAAK,CAAC,EAAE,QAAQ,CAAC;gBAGb,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,gBAAgB,EACrB,KAAK,EAAE,mBAAmB,EAC1B,MAAM,EAAE,QAAQ,EAChB,KAAK,GAAE,QAAQ,GAAG,SAAqB;IAS3C,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,GAAE,cAAmB,GAAG,WAAW,CAAC,CAAC,CAAC;IAyBhE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"ContextProvider.d.ts","sourceRoot":"","sources":["../../../src/src/context/ContextProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC5B,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAED,qBAAa,mBAAoB,YAAW,eAAe;IACvD,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,gBAAgB,CAAC;IACtB,KAAK,EAAE,mBAAmB,CAAC;IAC3B,MAAM,EAAE,QAAQ,CAAC;IACjB,KAAK,CAAC,EAAE,QAAQ,CAAC;gBAGb,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,gBAAgB,EACrB,KAAK,EAAE,mBAAmB,EAC1B,MAAM,EAAE,QAAQ,EAChB,KAAK,GAAE,QAAQ,GAAG,SAAqB;IAS3C,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,GAAE,cAAmB,GAAG,WAAW,CAAC,CAAC,CAAC;IAyBhE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAG1C"}
|
|
@@ -52,11 +52,8 @@ class ContextProviderImpl {
|
|
|
52
52
|
}
|
|
53
53
|
return new Context_js_1.ContextImpl(logger, this.kvp, this.creds, executionId, new Date(), data, this.issues, this.queue, options);
|
|
54
54
|
}
|
|
55
|
-
destroy(
|
|
56
|
-
return
|
|
57
|
-
scope: ':execution:',
|
|
58
|
-
executionId: ctx.executionId,
|
|
59
|
-
});
|
|
55
|
+
destroy(_) {
|
|
56
|
+
return Promise.resolve();
|
|
60
57
|
}
|
|
61
58
|
}
|
|
62
59
|
exports.ContextProviderImpl = ContextProviderImpl;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../../../src/src/dsl/http/default.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../../../src/src/dsl/http/default.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAOtE;;;;GAIG;AACH,qBAAa,0BAA2B,YAAW,mBAAmB;IAClE;;OAEG;;IAIH;;;;;;;OAOG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,KAAK,CAAC;IAIhD,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAMnE,WAAW,IAAI,mBAAmB;IAalC,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC;CAK/E"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { BaseUrlFetcher, ConfigReader, DynamicFetcher, RoundTripperFactory } from '../types.js';
|
|
2
|
-
import { PlatformAPIClient } from './platformapi.js';
|
|
3
1
|
import { Logger } from '../../../observability/mod.js';
|
|
2
|
+
import { BaseUrlFetcher, ConfigReader, DynamicFetcher, RoundTripperFactory } from '../types.js';
|
|
4
3
|
import { CredentialsProvider } from './contextcredentials.js';
|
|
4
|
+
import { PlatformAPIClient } from './platformapi.js';
|
|
5
5
|
export declare class ProxyRoundTripper implements RoundTripperFactory {
|
|
6
6
|
private platformApiBaseUrl;
|
|
7
7
|
private cfgReader;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxyroundtripper.d.ts","sourceRoot":"","sources":["../../../../../src/src/dsl/http/versori/proxyroundtripper.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"proxyroundtripper.d.ts","sourceRoot":"","sources":["../../../../../src/src/dsl/http/versori/proxyroundtripper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAEH,cAAc,EACd,YAAY,EACZ,cAAc,EACd,mBAAmB,EACtB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAO9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAIrD,qBAAa,iBAAkB,YAAW,mBAAmB;IACzD,OAAO,CAAC,kBAAkB,CAAS;IAEnC,OAAO,CAAC,SAAS,CAAe;IAEhC,OAAO,CAAC,iBAAiB,CAAoB;IAE7C,OAAO,CAAC,YAAY,CAAe;IAEnC,OAAO,CAAC,GAAG,CAAS;gBAGhB,GAAG,EAAE,MAAM,EACX,kBAAkB,EAAE,MAAM,EAC1B,iBAAiB,EAAE,iBAAiB,EACpC,SAAS,EAAE,YAAY;IAS3B,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB;IA0B9C,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,cAAc;YA6BR,aAAa;IA4B3B,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,KAAK,GAAG,SAAS,CAAC;IAoB3D,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAqCxE,WAAW,IAAI,mBAAmB;IAoBlC,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,cAAc;CAKxD"}
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ProxyRoundTripper = void 0;
|
|
4
4
|
const configloader_js_1 = require("./configloader.js");
|
|
5
|
-
const platformapi_js_1 = require("./platformapi.js");
|
|
6
5
|
const constants_js_1 = require("./constants.js");
|
|
7
6
|
const helpers_js_1 = require("./helpers.js");
|
|
8
7
|
const internalauth_js_1 = require("./internalauth.js");
|
|
8
|
+
const platformapi_js_1 = require("./platformapi.js");
|
|
9
9
|
// ProxyRoundTripper is a factory for creating roundtrippers that use the Versori Platform API proxy endpoints.
|
|
10
10
|
// this should allow code from the platform to be run locally.
|
|
11
11
|
class ProxyRoundTripper {
|
|
@@ -163,6 +163,9 @@ class ProxyRoundTripper {
|
|
|
163
163
|
getAccessToken: (_name, _forceRefresh, _actId) => {
|
|
164
164
|
return Promise.reject(new Error('Not implemented, getAccessToken is not supported in proxy mode'));
|
|
165
165
|
},
|
|
166
|
+
getOAuth1Metadata(_credId) {
|
|
167
|
+
return Promise.reject(new Error('Not implemented, getOAuth1Metadata is not supported in proxy mode'));
|
|
168
|
+
}
|
|
166
169
|
};
|
|
167
170
|
}
|
|
168
171
|
baseUrlFetcher(_templateName) {
|
|
@@ -36,6 +36,7 @@ export declare class VersoriCredentialsFactory implements RoundTripperFactory {
|
|
|
36
36
|
private basicAuthFetcherStatic;
|
|
37
37
|
private bearerTokenFetcherStatic;
|
|
38
38
|
private getOAuth2Token;
|
|
39
|
+
private checkExpiry;
|
|
39
40
|
private oauth2FetcherStatic;
|
|
40
41
|
private oauth1FetcherStatic;
|
|
41
42
|
private mtlsFetcherStatic;
|
|
@@ -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.
|
|
@@ -67,7 +69,7 @@ class VersoriCredentialsFactory {
|
|
|
67
69
|
enumerable: true,
|
|
68
70
|
configurable: true,
|
|
69
71
|
writable: true,
|
|
70
|
-
value:
|
|
72
|
+
value: void 0
|
|
71
73
|
});
|
|
72
74
|
Object.defineProperty(this, "defaultDynamic", {
|
|
73
75
|
enumerable: true,
|
|
@@ -86,6 +88,10 @@ class VersoriCredentialsFactory {
|
|
|
86
88
|
this.cfgReader = cfgReader;
|
|
87
89
|
this.log = logger;
|
|
88
90
|
this.tracer = tracer;
|
|
91
|
+
this.oauth2Cache = new lru_cache_1.LRUCache({
|
|
92
|
+
max: 1000,
|
|
93
|
+
ttl: 2000 * 60 * 5,
|
|
94
|
+
});
|
|
89
95
|
// lost 15 minutes because of this one
|
|
90
96
|
this.traceFetch = this.traceFetch.bind(this);
|
|
91
97
|
this.credentials = this.credentials.bind(this);
|
|
@@ -345,16 +351,38 @@ class VersoriCredentialsFactory {
|
|
|
345
351
|
// getOauth2Token fetches an OAuth2 token, stores the result in a cache, and returns the token.
|
|
346
352
|
// If forceRefresh is true, it will bypass the cache and fetch a new token then update the cache.
|
|
347
353
|
async getOAuth2Token(credId, forceRefresh = false) {
|
|
348
|
-
if (
|
|
349
|
-
|
|
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
|
+
}
|
|
350
368
|
}
|
|
351
|
-
|
|
352
|
-
this
|
|
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 = {
|
|
353
375
|
token: tokenResponse.token?.accessToken || '',
|
|
354
376
|
tokenType: tokenResponse.token?.tokenType,
|
|
377
|
+
expiry: tokenResponse.token?.expiry,
|
|
355
378
|
};
|
|
356
|
-
this.
|
|
357
|
-
return
|
|
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);
|
|
358
386
|
}
|
|
359
387
|
oauth2FetcherStatic(credId, fn) {
|
|
360
388
|
const refreshFn = async (input, init, forceRefresh = false) => {
|
|
@@ -395,8 +423,8 @@ class VersoriCredentialsFactory {
|
|
|
395
423
|
};
|
|
396
424
|
const _fn = async (input, init) => {
|
|
397
425
|
const resp = await refreshFn(input, init);
|
|
398
|
-
if (resp.status === 401) {
|
|
399
|
-
this.log.debug('Received
|
|
426
|
+
if (resp.status === 401 || resp.status === 403) {
|
|
427
|
+
this.log.debug('Received unauthorized response, attempting to refresh token', {
|
|
400
428
|
url: input,
|
|
401
429
|
status: resp.status,
|
|
402
430
|
});
|
|
@@ -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,8 @@ export type WebhookOptions = {
|
|
|
44
52
|
cors?: WebhookCorsOptions;
|
|
45
53
|
response?: WebhookResponseOptions;
|
|
46
54
|
connection?: string;
|
|
55
|
+
method?: "all" | "get" | "post" | "put" | "delete" | "patch" | "options" | "head";
|
|
56
|
+
request?: WebhookRequestOptions;
|
|
47
57
|
};
|
|
48
58
|
export declare class WebhookTrigger implements Trigger<WebhookData> {
|
|
49
59
|
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,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IAClF,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":"AAAA,OAAsB,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG3D,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAgB,EAAqB,MAAM,EAAE,MAAM,SAAS,CAAC;AAG7D,OAAO,EAA+B,UAAU,EAAM,YAAY,EAAO,MAAM,MAAM,CAAC;AACtF,OAAO,EAAE,eAAe,EAAuB,MAAM,kCAAkC,CAAC;AAExF,OAAO,EACH,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACtB,MAAM,yBAAyB,CAAC;AAiBjC,OAAO,EAAE,QAAQ,EAAgB,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAa,MAAM,wBAAwB,CAAC;AAG7D,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAoB,MAAM,cAAc,CAAC;AAEtF,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAC/D,OAAO,EAA0B,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAa,MAAM,YAAY,CAAC;AAEjD,MAAM,MAAM,yBAAyB,GAAG;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CACpC,CAAC;AAEF,KAAK,YAAY,GAAG;IAChB,QAAQ,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7C,KAAK,EAAE,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9C,oBAAoB,EAAE,eAAe,CAAC;IACtC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,YAAY,CAAC;CAC/B,CAAC;AAwCF,qBAAa,kBAAkB;IAQvB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IApB7B,OAAO,CAAC,mBAAmB,CAA2B;IACtD,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,cAAc,CAAC,CAAa;IACpC,OAAO,CAAC,cAAc,CAAS;gBAGV,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,kBAAkB,EAC5B,eAAe,EAAE,eAAe,EAChC,mBAAmB,EAAE,mBAAmB,EACxC,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAC3B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACxB,kBAAkB,EAAE,kBAAkB,EACtC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,YAAY,EACvB,aAAa,EAAE,QAAQ,EACvB,OAAO,CAAC,EAAE,OAAO,YAAA;WAWzB,WAAW,CAAC,OAAO,GAAE,yBAA8B,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAqG9F,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,yBAAyB;IAmDhE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
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,CA2SxE,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,12 +54,20 @@ 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) {
|
|
53
61
|
throw new Error('Invalid response mode, must be either "sync" or "async"');
|
|
54
62
|
}
|
|
63
|
+
const method = trigger.options.method || 'post';
|
|
64
|
+
const validMethods = ['get', 'post', 'put', 'delete', 'patch', 'options', 'head'];
|
|
65
|
+
if (method !== method.toLowerCase()) {
|
|
66
|
+
throw new Error(`HTTP method must be in lowercase: ${method} on webhook ${trigger.id}`);
|
|
67
|
+
}
|
|
68
|
+
if (!validMethods.includes(method)) {
|
|
69
|
+
throw new Error(`Unsupported HTTP method: ${method} on webhook ${trigger.id}. Must be one of: ${validMethods.join(', ')}`);
|
|
70
|
+
}
|
|
55
71
|
let onSuccess = isSync ? DEFAULT_SYNC_ON_SUCCESS : DEFAULT_ASYNC_ON_SUCCESS;
|
|
56
72
|
let onError = isSync ? DEFAULT_SYNC_ON_ERROR : DEFAULT_ASYNC_ON_ERROR;
|
|
57
73
|
if (trigger.options.response?.onSuccess) {
|
|
@@ -73,6 +89,13 @@ exports.webhookCompiler = {
|
|
|
73
89
|
},
|
|
74
90
|
request: req,
|
|
75
91
|
});
|
|
92
|
+
if (!trigger.options.request?.rawBody) {
|
|
93
|
+
ctx.webhookRouter.use(express_1.default.json({ limit: '50mb' }));
|
|
94
|
+
ctx.webhookRouter.use((0, express_xml_bodyparser_1.default)(xml2jsDefaults));
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
ctx.webhookRouter.use(express_1.default.raw({ type: '*/*', limit: '50mb' }));
|
|
98
|
+
}
|
|
76
99
|
return new rxjs_1.Observable((subscriber) => {
|
|
77
100
|
if (!ctx.webhookRouter) {
|
|
78
101
|
throw new Error('Router not available in compiler context');
|
|
@@ -88,7 +111,7 @@ exports.webhookCompiler = {
|
|
|
88
111
|
}
|
|
89
112
|
}
|
|
90
113
|
// endpoint for sans user because I'm not quite sure how the dynamic routing works
|
|
91
|
-
ctx.webhookRouter
|
|
114
|
+
ctx.webhookRouter[method](`/${trigger.id}`, (0, webhookmiddleware_js_1.createStaticWebhookMiddleware)({
|
|
92
115
|
id: trigger.id,
|
|
93
116
|
connName: trigger.options.connection,
|
|
94
117
|
credentials: ctx.roundTripperFactory.credentials(),
|
|
@@ -125,7 +148,7 @@ exports.webhookCompiler = {
|
|
|
125
148
|
});
|
|
126
149
|
});
|
|
127
150
|
// this endpoint will trigger the workflow for each activation given by the external user ID
|
|
128
|
-
ctx.webhookRouter
|
|
151
|
+
ctx.webhookRouter[method](`/${trigger.id}/users/:userId`, (0, webhookmiddleware_js_1.createUserIdDynamicWebhookMiddleware)({
|
|
129
152
|
id: trigger.id,
|
|
130
153
|
connName: trigger.options.connection,
|
|
131
154
|
credentials: ctx.roundTripperFactory.credentials(),
|
|
@@ -183,7 +206,7 @@ exports.webhookCompiler = {
|
|
|
183
206
|
});
|
|
184
207
|
});
|
|
185
208
|
// this endpoint will trigger the workflow only for the activation given by its ID
|
|
186
|
-
ctx.webhookRouter
|
|
209
|
+
ctx.webhookRouter[method](`/${trigger.id}/activations/:activationId`, (0, webhookmiddleware_js_1.createActIdDynamicWebhookMiddleware)({
|
|
187
210
|
id: trigger.id,
|
|
188
211
|
connName: trigger.options.connection,
|
|
189
212
|
credentials: ctx.roundTripperFactory.credentials(),
|
|
@@ -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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"}
|
|
@@ -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");
|
|
@@ -246,16 +245,8 @@ class MemoryInterpreter {
|
|
|
246
245
|
const port = Deno.env.get('PORT') || 3000;
|
|
247
246
|
const cronPort = Deno.env.get('CRON_PORT') || 3001;
|
|
248
247
|
const webhookApp = (0, express_1.default)();
|
|
249
|
-
webhookApp.use(express_1.default.json({ limit: '50mb' })); // Add JSON body parser middleware
|
|
250
248
|
const cronApp = (0, express_1.default)();
|
|
251
249
|
cronApp.use(express_1.default.json());
|
|
252
|
-
const xml2jsDefaults = {
|
|
253
|
-
explicitArray: false,
|
|
254
|
-
normalize: false,
|
|
255
|
-
normalizeTags: false,
|
|
256
|
-
trim: true,
|
|
257
|
-
};
|
|
258
|
-
webhookApp.use((0, express_xml_bodyparser_1.default)(xml2jsDefaults));
|
|
259
250
|
// Add health check route
|
|
260
251
|
this.webhookRouter.get('/health', (_req, res) => {
|
|
261
252
|
res.json({ status: 'healthy' });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../../../../src/src/interpreter/memory/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/memory/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,CA2SxE,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,12 +54,20 @@ 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) {
|
|
53
61
|
throw new Error('Invalid response mode, must be either "sync" or "async"');
|
|
54
62
|
}
|
|
63
|
+
const method = trigger.options.method || 'post';
|
|
64
|
+
const validMethods = ['get', 'post', 'put', 'delete', 'patch', 'options', 'head'];
|
|
65
|
+
if (method !== method.toLowerCase()) {
|
|
66
|
+
throw new Error(`HTTP method must be in lowercase: ${method} on webhook ${trigger.id}`);
|
|
67
|
+
}
|
|
68
|
+
if (!validMethods.includes(method)) {
|
|
69
|
+
throw new Error(`Unsupported HTTP method: ${method} on webhook ${trigger.id}. Must be one of: ${validMethods.join(', ')}`);
|
|
70
|
+
}
|
|
55
71
|
let onSuccess = isSync ? DEFAULT_SYNC_ON_SUCCESS : DEFAULT_ASYNC_ON_SUCCESS;
|
|
56
72
|
let onError = isSync ? DEFAULT_SYNC_ON_ERROR : DEFAULT_ASYNC_ON_ERROR;
|
|
57
73
|
if (trigger.options.response?.onSuccess) {
|
|
@@ -73,6 +89,13 @@ exports.webhookCompiler = {
|
|
|
73
89
|
},
|
|
74
90
|
request: req,
|
|
75
91
|
});
|
|
92
|
+
if (!trigger.options.request?.rawBody) {
|
|
93
|
+
ctx.webhookRouter.use(express_1.default.json({ limit: '50mb' }));
|
|
94
|
+
ctx.webhookRouter.use((0, express_xml_bodyparser_1.default)(xml2jsDefaults));
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
ctx.webhookRouter.use(express_1.default.raw({ type: '*/*', limit: '50mb' }));
|
|
98
|
+
}
|
|
76
99
|
return new rxjs_1.Observable((subscriber) => {
|
|
77
100
|
if (!ctx.webhookRouter) {
|
|
78
101
|
throw new Error('Router not available in compiler context');
|
|
@@ -88,7 +111,7 @@ exports.webhookCompiler = {
|
|
|
88
111
|
}
|
|
89
112
|
}
|
|
90
113
|
// endpoint for sans user because I'm not quite sure how the dynamic routing works
|
|
91
|
-
ctx.webhookRouter
|
|
114
|
+
ctx.webhookRouter[method](`/${trigger.id}`, (0, webhookmiddleware_js_1.createStaticWebhookMiddleware)({
|
|
92
115
|
id: trigger.id,
|
|
93
116
|
connName: trigger.options.connection,
|
|
94
117
|
credentials: ctx.roundTripperFactory.credentials(),
|
|
@@ -125,7 +148,7 @@ exports.webhookCompiler = {
|
|
|
125
148
|
});
|
|
126
149
|
});
|
|
127
150
|
// this endpoint will trigger the workflow for each activation given by the external user ID
|
|
128
|
-
ctx.webhookRouter
|
|
151
|
+
ctx.webhookRouter[method](`/${trigger.id}/users/:userId`, (0, webhookmiddleware_js_1.createUserIdDynamicWebhookMiddleware)({
|
|
129
152
|
id: trigger.id,
|
|
130
153
|
connName: trigger.options.connection,
|
|
131
154
|
credentials: ctx.roundTripperFactory.credentials(),
|
|
@@ -183,7 +206,7 @@ exports.webhookCompiler = {
|
|
|
183
206
|
});
|
|
184
207
|
});
|
|
185
208
|
// this endpoint will trigger the workflow only for the activation given by its ID
|
|
186
|
-
ctx.webhookRouter
|
|
209
|
+
ctx.webhookRouter[method](`/${trigger.id}/activations/:activationId`, (0, webhookmiddleware_js_1.createActIdDynamicWebhookMiddleware)({
|
|
187
210
|
id: trigger.id,
|
|
188
211
|
connName: trigger.options.connection,
|
|
189
212
|
credentials: ctx.roundTripperFactory.credentials(),
|