@versori/run 0.2.8 → 0.2.10
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/Context.d.ts +4 -4
- package/esm/src/context/Context.d.ts.map +1 -1
- package/esm/src/context/ContextProvider.d.ts +3 -3
- package/esm/src/context/ContextProvider.d.ts.map +1 -1
- package/esm/src/dsl/http/default.d.ts +4 -4
- package/esm/src/dsl/http/default.d.ts.map +1 -1
- package/esm/src/dsl/http/default.js +3 -3
- package/esm/src/dsl/http/types.d.ts +8 -2
- package/esm/src/dsl/http/types.d.ts.map +1 -1
- package/esm/src/dsl/http/versori/configloader.d.ts +10 -1
- package/esm/src/dsl/http/versori/configloader.d.ts.map +1 -1
- package/esm/src/dsl/http/versori/configloader.js +37 -0
- package/esm/src/dsl/http/versori/constants.d.ts +1 -0
- package/esm/src/dsl/http/versori/constants.d.ts.map +1 -1
- package/esm/src/dsl/http/versori/constants.js +2 -0
- package/esm/src/dsl/http/versori/contextcredentials.d.ts +0 -4
- package/esm/src/dsl/http/versori/contextcredentials.d.ts.map +1 -1
- package/esm/src/dsl/http/versori/cronapi.d.ts.map +1 -1
- package/esm/src/dsl/http/versori/cronapi.js +2 -2
- package/esm/src/dsl/http/versori/proxyroundtripper.d.ts +5 -7
- package/esm/src/dsl/http/versori/proxyroundtripper.d.ts.map +1 -1
- package/esm/src/dsl/http/versori/proxyroundtripper.js +10 -24
- package/esm/src/dsl/http/versori/roundtripper.d.ts +6 -7
- package/esm/src/dsl/http/versori/roundtripper.d.ts.map +1 -1
- package/esm/src/dsl/http/versori/roundtripper.js +32 -28
- package/esm/src/dsl/http/versori/webhookmiddleware.d.ts +16 -0
- package/esm/src/dsl/http/versori/webhookmiddleware.d.ts.map +1 -0
- package/esm/src/dsl/http/versori/webhookmiddleware.js +197 -0
- package/esm/src/dsl/tasks/HttpTask.d.ts +3 -3
- package/esm/src/dsl/tasks/HttpTask.d.ts.map +1 -1
- package/esm/src/dsl/tasks/HttpTask.js +1 -1
- package/esm/src/dsl/triggers/WebhookTrigger.d.ts +1 -0
- package/esm/src/dsl/triggers/WebhookTrigger.d.ts.map +1 -1
- package/esm/src/interpreter/memory/MemoryInterpreter.d.ts +7 -4
- package/esm/src/interpreter/memory/MemoryInterpreter.d.ts.map +1 -1
- package/esm/src/interpreter/memory/MemoryInterpreter.js +70 -20
- package/esm/src/interpreter/memory/ObservableCompiler.d.ts +4 -2
- package/esm/src/interpreter/memory/ObservableCompiler.d.ts.map +1 -1
- package/esm/src/interpreter/memory/compilers/schedule.js +2 -2
- package/esm/src/interpreter/memory/compilers/webhook.d.ts.map +1 -1
- package/esm/src/interpreter/memory/compilers/webhook.js +38 -12
- package/esm/src/observability/logging/ConsoleLogger.d.ts +1 -0
- package/esm/src/observability/logging/ConsoleLogger.d.ts.map +1 -1
- package/esm/src/observability/logging/ConsoleLogger.js +7 -0
- package/esm/src/observability/logging/Logger.d.ts +2 -1
- package/esm/src/observability/logging/Logger.d.ts.map +1 -1
- package/package.json +1 -1
- package/script/src/context/Context.d.ts +4 -4
- package/script/src/context/Context.d.ts.map +1 -1
- package/script/src/context/ContextProvider.d.ts +3 -3
- package/script/src/context/ContextProvider.d.ts.map +1 -1
- package/script/src/dsl/http/default.d.ts +4 -4
- package/script/src/dsl/http/default.d.ts.map +1 -1
- package/script/src/dsl/http/default.js +3 -3
- package/script/src/dsl/http/types.d.ts +8 -2
- package/script/src/dsl/http/types.d.ts.map +1 -1
- package/script/src/dsl/http/versori/configloader.d.ts +10 -1
- package/script/src/dsl/http/versori/configloader.d.ts.map +1 -1
- package/script/src/dsl/http/versori/configloader.js +39 -0
- package/script/src/dsl/http/versori/constants.d.ts +1 -0
- package/script/src/dsl/http/versori/constants.d.ts.map +1 -1
- package/script/src/dsl/http/versori/constants.js +3 -1
- package/script/src/dsl/http/versori/contextcredentials.d.ts +0 -4
- package/script/src/dsl/http/versori/contextcredentials.d.ts.map +1 -1
- package/script/src/dsl/http/versori/cronapi.d.ts.map +1 -1
- package/script/src/dsl/http/versori/cronapi.js +1 -1
- package/script/src/dsl/http/versori/proxyroundtripper.d.ts +5 -7
- package/script/src/dsl/http/versori/proxyroundtripper.d.ts.map +1 -1
- package/script/src/dsl/http/versori/proxyroundtripper.js +9 -23
- package/script/src/dsl/http/versori/roundtripper.d.ts +6 -7
- package/script/src/dsl/http/versori/roundtripper.d.ts.map +1 -1
- package/script/src/dsl/http/versori/roundtripper.js +31 -27
- package/script/src/dsl/http/versori/webhookmiddleware.d.ts +16 -0
- package/script/src/dsl/http/versori/webhookmiddleware.d.ts.map +1 -0
- package/script/src/dsl/http/versori/webhookmiddleware.js +202 -0
- package/script/src/dsl/tasks/HttpTask.d.ts +3 -3
- package/script/src/dsl/tasks/HttpTask.d.ts.map +1 -1
- package/script/src/dsl/tasks/HttpTask.js +1 -1
- package/script/src/dsl/triggers/WebhookTrigger.d.ts +1 -0
- package/script/src/dsl/triggers/WebhookTrigger.d.ts.map +1 -1
- package/script/src/interpreter/memory/MemoryInterpreter.d.ts +7 -4
- package/script/src/interpreter/memory/MemoryInterpreter.d.ts.map +1 -1
- package/script/src/interpreter/memory/MemoryInterpreter.js +70 -20
- package/script/src/interpreter/memory/ObservableCompiler.d.ts +4 -2
- package/script/src/interpreter/memory/ObservableCompiler.d.ts.map +1 -1
- package/script/src/interpreter/memory/compilers/schedule.js +2 -2
- package/script/src/interpreter/memory/compilers/webhook.d.ts.map +1 -1
- package/script/src/interpreter/memory/compilers/webhook.js +38 -12
- package/script/src/observability/logging/ConsoleLogger.d.ts +1 -0
- package/script/src/observability/logging/ConsoleLogger.d.ts.map +1 -1
- package/script/src/observability/logging/ConsoleLogger.js +7 -0
- package/script/src/observability/logging/Logger.d.ts +2 -1
- package/script/src/observability/logging/Logger.d.ts.map +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VersoriConfigReader = void 0;
|
|
3
4
|
exports.LoadConfigFromFile = LoadConfigFromFile;
|
|
4
5
|
const constants_js_1 = require("./constants.js");
|
|
5
6
|
/**
|
|
@@ -20,3 +21,41 @@ function LoadConfigFromFile() {
|
|
|
20
21
|
const cfg = JSON.parse(Deno.readTextFileSync(configFileName));
|
|
21
22
|
return cfg;
|
|
22
23
|
}
|
|
24
|
+
class VersoriConfigReader {
|
|
25
|
+
constructor(cfg) {
|
|
26
|
+
Object.defineProperty(this, "versoriCfg", {
|
|
27
|
+
enumerable: true,
|
|
28
|
+
configurable: true,
|
|
29
|
+
writable: true,
|
|
30
|
+
value: void 0
|
|
31
|
+
});
|
|
32
|
+
this.versoriCfg = cfg;
|
|
33
|
+
}
|
|
34
|
+
static fromEnv(log) {
|
|
35
|
+
const versoriCfg = LoadConfigFromFile();
|
|
36
|
+
if (!versoriCfg) {
|
|
37
|
+
log.error('Failed to load Versori SDK configuration');
|
|
38
|
+
throw new Error('Failed to load Versori SDK configuration');
|
|
39
|
+
}
|
|
40
|
+
return new VersoriConfigReader(versoriCfg);
|
|
41
|
+
}
|
|
42
|
+
getCnxMapping(name) {
|
|
43
|
+
return this.versoriCfg.mappings.find((c) => c.name.toLowerCase() === name.toLowerCase());
|
|
44
|
+
}
|
|
45
|
+
getConnectionID(connName) {
|
|
46
|
+
const conn = this.versoriCfg.mappings.find((c) => (c.dynamic === undefined || c.dynamic === false) &&
|
|
47
|
+
c.name.toLowerCase() === connName.toLowerCase());
|
|
48
|
+
if (!conn || !conn.connId) {
|
|
49
|
+
return '';
|
|
50
|
+
}
|
|
51
|
+
return conn.connId;
|
|
52
|
+
}
|
|
53
|
+
getTemplateID(templateName) {
|
|
54
|
+
const template = this.versoriCfg.mappings.find((c) => c.dynamic && c.name.toLowerCase() === templateName.toLowerCase());
|
|
55
|
+
if (!template || !template.templateId) {
|
|
56
|
+
return '';
|
|
57
|
+
}
|
|
58
|
+
return template.templateId;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
exports.VersoriConfigReader = VersoriConfigReader;
|
|
@@ -15,4 +15,5 @@ export declare const envVarClientSecret = "RUN_CLIENT_SECRET";
|
|
|
15
15
|
export declare const envVarTokenEndpoint = "RUN_TOKEN_ENDPOINT";
|
|
16
16
|
export declare const envVarInternalToken = "RUN_INTERNAL_TOKEN";
|
|
17
17
|
export declare const envVarLocalRun = "RUN_LOCAL";
|
|
18
|
+
export declare const cronPort = 3001;
|
|
18
19
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../src/src/dsl/http/versori/constants.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,WAAW,wBAAwB,CAAC;AACjD,eAAO,MAAM,WAAW,uBAAuB,CAAC;AAChD,eAAO,MAAM,qBAAqB,oBAAoB,CAAC;AACvD,eAAO,MAAM,eAAe,mBAAmB,CAAC;AAChD,eAAO,MAAM,aAAa,0BAA0B,CAAC;AACrD,eAAO,MAAM,wBAAwB,kCAAkC,CAAC;AACxE,eAAO,MAAM,oBAAoB,8BAA8B,CAAC;AAChE,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AACnD,eAAO,MAAM,kBAAkB,yCAAyC,CAAC;AACzE,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AACzD,eAAO,MAAM,aAAa,wBAAwB,CAAC;AAEnD,eAAO,MAAM,gBAAgB,oBAAoB,CAAC;AAGlD,eAAO,MAAM,cAAc,kBAAkB,CAAC;AAC9C,eAAO,MAAM,kBAAkB,sBAAsB,CAAC;AACtD,eAAO,MAAM,mBAAmB,uBAAuB,CAAC;AACxD,eAAO,MAAM,mBAAmB,uBAAuB,CAAC;AAGxD,eAAO,MAAM,cAAc,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../src/src/dsl/http/versori/constants.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,WAAW,wBAAwB,CAAC;AACjD,eAAO,MAAM,WAAW,uBAAuB,CAAC;AAChD,eAAO,MAAM,qBAAqB,oBAAoB,CAAC;AACvD,eAAO,MAAM,eAAe,mBAAmB,CAAC;AAChD,eAAO,MAAM,aAAa,0BAA0B,CAAC;AACrD,eAAO,MAAM,wBAAwB,kCAAkC,CAAC;AACxE,eAAO,MAAM,oBAAoB,8BAA8B,CAAC;AAChE,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AACnD,eAAO,MAAM,kBAAkB,yCAAyC,CAAC;AACzE,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AACzD,eAAO,MAAM,aAAa,wBAAwB,CAAC;AAEnD,eAAO,MAAM,gBAAgB,oBAAoB,CAAC;AAGlD,eAAO,MAAM,cAAc,kBAAkB,CAAC;AAC9C,eAAO,MAAM,kBAAkB,sBAAsB,CAAC;AACtD,eAAO,MAAM,mBAAmB,uBAAuB,CAAC;AACxD,eAAO,MAAM,mBAAmB,uBAAuB,CAAC;AAGxD,eAAO,MAAM,cAAc,cAAc,CAAC;AAI1C,eAAO,MAAM,QAAQ,OAAO,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.envVarLocalRun = exports.envVarInternalToken = exports.envVarTokenEndpoint = exports.envVarClientSecret = exports.envVarClientId = exports.envVarConfigFile = exports.envVarVersion = exports.envVarOtelTracesURL = exports.envVarCredsBaseURL = exports.envVarSelfRefURL = exports.envVarCronApiBaseURL = exports.envVarPlatformApiBaseURL = exports.envVarOrgSlug = exports.envVarProjectId = exports.envVarEnvironmentName = exports.envVarEnvId = exports.envVarOrgId = void 0;
|
|
3
|
+
exports.cronPort = exports.envVarLocalRun = exports.envVarInternalToken = exports.envVarTokenEndpoint = exports.envVarClientSecret = exports.envVarClientId = exports.envVarConfigFile = exports.envVarVersion = exports.envVarOtelTracesURL = exports.envVarCredsBaseURL = exports.envVarSelfRefURL = exports.envVarCronApiBaseURL = exports.envVarPlatformApiBaseURL = exports.envVarOrgSlug = exports.envVarProjectId = exports.envVarEnvironmentName = exports.envVarEnvId = exports.envVarOrgId = void 0;
|
|
4
4
|
// This file contains constants used in the Versori DSL HTTP client.
|
|
5
5
|
exports.envVarOrgId = 'RUN_ORGANISATION_ID';
|
|
6
6
|
exports.envVarEnvId = 'RUN_ENVIRONMENT_ID';
|
|
@@ -22,3 +22,5 @@ exports.envVarTokenEndpoint = 'RUN_TOKEN_ENDPOINT';
|
|
|
22
22
|
exports.envVarInternalToken = 'RUN_INTERNAL_TOKEN';
|
|
23
23
|
// The following are for running locally
|
|
24
24
|
exports.envVarLocalRun = 'RUN_LOCAL';
|
|
25
|
+
// please no changerino
|
|
26
|
+
exports.cronPort = 3001; // The port on which the cron API communicates with the service
|
|
@@ -3,10 +3,6 @@ export type Token = {
|
|
|
3
3
|
tokenType: string;
|
|
4
4
|
expiry?: Date;
|
|
5
5
|
};
|
|
6
|
-
export interface Credentials {
|
|
7
|
-
getRaw(name: string): Promise<Uint8Array>;
|
|
8
|
-
getAccessToken(name: string, forceRefresh?: boolean): Promise<Token>;
|
|
9
|
-
}
|
|
10
6
|
export interface CredentialsProvider {
|
|
11
7
|
getRaw(name: string, activationId?: string): Promise<Uint8Array>;
|
|
12
8
|
getAccessToken(name: string, forceRefresh?: boolean, activationId?: string): Promise<Token>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contextcredentials.d.ts","sourceRoot":"","sources":["../../../../../src/src/dsl/http/versori/contextcredentials.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,IAAI,CAAC;CACjB,CAAC;AAEF,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"contextcredentials.d.ts","sourceRoot":"","sources":["../../../../../src/src/dsl/http/versori/contextcredentials.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,IAAI,CAAC;CACjB,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAChC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEjE,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;CAC/F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cronapi.d.ts","sourceRoot":"","sources":["../../../../../src/src/dsl/http/versori/cronapi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"cronapi.d.ts","sourceRoot":"","sources":["../../../../../src/src/dsl/http/versori/cronapi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAY3C,KAAK,IAAI,GAAG;IACR,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,qBAAa,aAAc,YAAW,YAAY;IAC9C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAU;gBAEd,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;IAOlE,MAAM,CAAC,OAAO,IAAI,aAAa;IAmBzB,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB5D,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE;CAoB3B"}
|
|
@@ -43,7 +43,7 @@ class CronAPIClient {
|
|
|
43
43
|
throw new Error('Missing required environment variables');
|
|
44
44
|
}
|
|
45
45
|
const integrationUrl = Deno.env.get(constants_js_1.envVarSelfRefURL) ||
|
|
46
|
-
`http://svc-${projectId.toLowerCase()}-${envName.toLowerCase()}.sb-${orgSlug.toLowerCase()}.svc.cluster.local`;
|
|
46
|
+
`http://svc-${projectId.toLowerCase()}-${envName.toLowerCase()}.sb-${orgSlug.toLowerCase()}.svc.cluster.local:${constants_js_1.cronPort}`;
|
|
47
47
|
return new CronAPIClient(baseUrl, envId, integrationUrl);
|
|
48
48
|
}
|
|
49
49
|
async updateCrons(crons) {
|
|
@@ -1,22 +1,20 @@
|
|
|
1
|
-
import { DynamicFetcher, RoundTripperFactory } from '../types.js';
|
|
1
|
+
import { ConfigReader, DynamicFetcher, RoundTripperFactory } from '../types.js';
|
|
2
2
|
import { PlatformAPIClient } from './platformapi.js';
|
|
3
3
|
import { Logger } from '../../../observability/mod.js';
|
|
4
|
-
import {
|
|
4
|
+
import { CredentialsProvider } from './contextcredentials.js';
|
|
5
5
|
export declare class ProxyRoundTripper implements RoundTripperFactory {
|
|
6
6
|
private platformApiBaseUrl;
|
|
7
|
-
private
|
|
7
|
+
private cfgReader;
|
|
8
8
|
private platformApiClient;
|
|
9
9
|
private internalAuth;
|
|
10
10
|
private log;
|
|
11
|
-
constructor(log: Logger, platformApiBaseUrl: string, platformApiClient: PlatformAPIClient);
|
|
11
|
+
constructor(log: Logger, platformApiBaseUrl: string, platformApiClient: PlatformAPIClient, cfgReader: ConfigReader);
|
|
12
12
|
static fromEnv(log: Logger): ProxyRoundTripper;
|
|
13
|
-
private getConnectionID;
|
|
14
|
-
private getTemplateID;
|
|
15
13
|
private makeProxyUrlString;
|
|
16
14
|
private makeProxyInput;
|
|
17
15
|
private makeProxyInit;
|
|
18
16
|
create(connName: string): Promise<typeof fetch | undefined>;
|
|
19
17
|
createDynamic(templateName: string): Promise<DynamicFetcher | undefined>;
|
|
20
|
-
credentials():
|
|
18
|
+
credentials(): CredentialsProvider;
|
|
21
19
|
}
|
|
22
20
|
//# sourceMappingURL=proxyroundtripper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxyroundtripper.d.ts","sourceRoot":"","sources":["../../../../../src/src/dsl/http/versori/proxyroundtripper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,cAAc,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"proxyroundtripper.d.ts","sourceRoot":"","sources":["../../../../../src/src/dsl/http/versori/proxyroundtripper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAGvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAK9D,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;CAcrC"}
|
|
@@ -9,14 +9,14 @@ const internalauth_js_1 = require("./internalauth.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 {
|
|
12
|
-
constructor(log, platformApiBaseUrl, platformApiClient) {
|
|
12
|
+
constructor(log, platformApiBaseUrl, platformApiClient, cfgReader) {
|
|
13
13
|
Object.defineProperty(this, "platformApiBaseUrl", {
|
|
14
14
|
enumerable: true,
|
|
15
15
|
configurable: true,
|
|
16
16
|
writable: true,
|
|
17
17
|
value: void 0
|
|
18
18
|
});
|
|
19
|
-
Object.defineProperty(this, "
|
|
19
|
+
Object.defineProperty(this, "cfgReader", {
|
|
20
20
|
enumerable: true,
|
|
21
21
|
configurable: true,
|
|
22
22
|
writable: true,
|
|
@@ -40,7 +40,7 @@ class ProxyRoundTripper {
|
|
|
40
40
|
writable: true,
|
|
41
41
|
value: void 0
|
|
42
42
|
});
|
|
43
|
-
this.
|
|
43
|
+
this.cfgReader = cfgReader;
|
|
44
44
|
this.log = log;
|
|
45
45
|
this.platformApiBaseUrl = platformApiBaseUrl;
|
|
46
46
|
this.platformApiClient = platformApiClient;
|
|
@@ -50,6 +50,7 @@ class ProxyRoundTripper {
|
|
|
50
50
|
const baseUrl = Deno.env.get(constants_js_1.envVarPlatformApiBaseURL);
|
|
51
51
|
const orgId = Deno.env.get(constants_js_1.envVarOrgId);
|
|
52
52
|
const envId = Deno.env.get(constants_js_1.envVarEnvId);
|
|
53
|
+
const cfgReader = configloader_js_1.VersoriConfigReader.fromEnv(log);
|
|
53
54
|
if (!baseUrl || !orgId || !envId) {
|
|
54
55
|
const missingVars = [];
|
|
55
56
|
if (!baseUrl)
|
|
@@ -61,22 +62,7 @@ class ProxyRoundTripper {
|
|
|
61
62
|
log.error(`Missing required environment variables: ${missingVars.join(', ')}`);
|
|
62
63
|
throw new Error('Missing required environment variables: ' + missingVars.join(', '));
|
|
63
64
|
}
|
|
64
|
-
return new ProxyRoundTripper(log, baseUrl, new platformapi_js_1.PlatformAPIClient(baseUrl, orgId, envId, log));
|
|
65
|
-
}
|
|
66
|
-
getConnectionID(connName) {
|
|
67
|
-
const conn = this.versoriCfg.mappings.find((c) => (c.dynamic === undefined || c.dynamic === false) &&
|
|
68
|
-
c.name.toLowerCase() === connName.toLowerCase());
|
|
69
|
-
if (!conn || !conn.connId) {
|
|
70
|
-
return '';
|
|
71
|
-
}
|
|
72
|
-
return conn.connId;
|
|
73
|
-
}
|
|
74
|
-
getTemplateID(templateName) {
|
|
75
|
-
const template = this.versoriCfg.mappings.find((c) => c.dynamic && c.name.toLowerCase() === templateName.toLowerCase());
|
|
76
|
-
if (!template || !template.templateId) {
|
|
77
|
-
return '';
|
|
78
|
-
}
|
|
79
|
-
return template.templateId;
|
|
65
|
+
return new ProxyRoundTripper(log, baseUrl, new platformapi_js_1.PlatformAPIClient(baseUrl, orgId, envId, log), cfgReader);
|
|
80
66
|
}
|
|
81
67
|
makeProxyUrlString(url, cnxId) {
|
|
82
68
|
if ((0, helpers_js_1.isValidURL)(url)) {
|
|
@@ -137,7 +123,7 @@ class ProxyRoundTripper {
|
|
|
137
123
|
return init;
|
|
138
124
|
}
|
|
139
125
|
create(connName) {
|
|
140
|
-
const cnxId = this.getConnectionID(connName);
|
|
126
|
+
const cnxId = this.cfgReader.getConnectionID(connName);
|
|
141
127
|
if (!cnxId) {
|
|
142
128
|
this.log.error(`Connection ${connName} not found in configuration`);
|
|
143
129
|
return Promise.resolve(undefined);
|
|
@@ -151,7 +137,7 @@ class ProxyRoundTripper {
|
|
|
151
137
|
return Promise.resolve(_fn);
|
|
152
138
|
}
|
|
153
139
|
createDynamic(templateName) {
|
|
154
|
-
const template = this.getTemplateID(templateName);
|
|
140
|
+
const template = this.cfgReader.getTemplateID(templateName);
|
|
155
141
|
if (!template) {
|
|
156
142
|
this.log.error(`Template ${templateName} not found in configuration, could be a static connection`);
|
|
157
143
|
return Promise.resolve(undefined);
|
|
@@ -171,10 +157,10 @@ class ProxyRoundTripper {
|
|
|
171
157
|
}
|
|
172
158
|
credentials() {
|
|
173
159
|
return {
|
|
174
|
-
getRaw: (_name) => {
|
|
160
|
+
getRaw: (_name, _actId) => {
|
|
175
161
|
return Promise.reject(new Error('Not implemented, getRaw is not supported in proxy mode'));
|
|
176
162
|
},
|
|
177
|
-
getAccessToken: (_name, _forceRefresh) => {
|
|
163
|
+
getAccessToken: (_name, _forceRefresh, _actId) => {
|
|
178
164
|
return Promise.reject(new Error('Not implemented, getAccessToken is not supported in proxy mode'));
|
|
179
165
|
},
|
|
180
166
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Tracer } from '@opentelemetry/api';
|
|
2
2
|
import { Logger } from '../../../observability/logging/Logger.js';
|
|
3
|
-
import { DynamicFetcher, RoundTripperFactory } from '../types.js';
|
|
4
|
-
import {
|
|
3
|
+
import { ConfigReader, DynamicFetcher, RoundTripperFactory } from '../types.js';
|
|
4
|
+
import { CredentialsProvider, Token } from './contextcredentials.js';
|
|
5
5
|
import { VersoriCredentialClient } from './credentials/mod.js';
|
|
6
6
|
import { PlatformAPIClient } from './platformapi.js';
|
|
7
7
|
/**
|
|
@@ -19,27 +19,26 @@ export declare class VersoriCredentialsFactory implements RoundTripperFactory {
|
|
|
19
19
|
private tokenClient;
|
|
20
20
|
private credsBaseURL;
|
|
21
21
|
private platformAPIClient;
|
|
22
|
-
private
|
|
22
|
+
private cfgReader;
|
|
23
23
|
private log;
|
|
24
24
|
private tracer;
|
|
25
25
|
private readonly defaultDynamic;
|
|
26
|
-
constructor(credsClient: VersoriCredentialClient, credsBaseURL: string, platformAPIClient: PlatformAPIClient, logger: Logger, tracer: Tracer);
|
|
26
|
+
constructor(credsClient: VersoriCredentialClient, credsBaseURL: string, platformAPIClient: PlatformAPIClient, logger: Logger, tracer: Tracer, cfgReader: ConfigReader);
|
|
27
27
|
static fromEnv(logger: Logger, tracer: Tracer): VersoriCredentialsFactory;
|
|
28
28
|
private changeRequestInit;
|
|
29
29
|
private changeBaseUrl;
|
|
30
30
|
create(connName: string): Promise<typeof fetch | undefined>;
|
|
31
31
|
createDynamic(templateName: string): Promise<DynamicFetcher | undefined>;
|
|
32
32
|
private traceFetch;
|
|
33
|
-
credentials():
|
|
33
|
+
credentials(): CredentialsProvider;
|
|
34
34
|
getTokenByName(name: string, forceRefresh?: boolean, activationId?: string): Promise<Token>;
|
|
35
35
|
getRawByName(name: string, activationId?: string): Promise<Uint8Array>;
|
|
36
36
|
private getCredentialIDFromName;
|
|
37
|
-
private getConnectionID;
|
|
38
|
-
private getTemplateID;
|
|
39
37
|
private apiKeyFetcher;
|
|
40
38
|
private basicAuthFetcher;
|
|
41
39
|
private bearerTokenFetcher;
|
|
42
40
|
private oauth2Fetcher;
|
|
43
41
|
private getToken;
|
|
42
|
+
private getRaw;
|
|
44
43
|
}
|
|
45
44
|
//# sourceMappingURL=roundtripper.d.ts.map
|
|
@@ -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,EAEH,YAAY,EAEZ,cAAc,EACd,mBAAmB,EACtB,MAAM,aAAa,CAAC;AAQrB,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAM/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD;;;;;;;;;;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,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;IAe3B,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,yBAAyB;IAoCzE,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,aAAa;IAwBrB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,KAAK,GAAG,SAAS,CAAC;IAqC3D,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAgDxE,OAAO,CAAC,UAAU;IAqClB,WAAW,IAAI,mBAAmB;IAO5B,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;YAoDP,gBAAgB;YAmChB,kBAAkB;YAiClB,aAAa;YAwEb,QAAQ;YA2BR,MAAM;CAyBvB"}
|
|
@@ -6,8 +6,8 @@ const mod_js_1 = require("../../../observability/mod.js");
|
|
|
6
6
|
const configloader_js_1 = require("./configloader.js");
|
|
7
7
|
const constants_js_1 = require("./constants.js");
|
|
8
8
|
const mod_js_2 = require("./credentials/mod.js");
|
|
9
|
-
const platformapi_js_1 = require("./platformapi.js");
|
|
10
9
|
const helpers_js_1 = require("./helpers.js");
|
|
10
|
+
const platformapi_js_1 = require("./platformapi.js");
|
|
11
11
|
/**
|
|
12
12
|
* VersoriRoundTripper is an implementation of the RoundTripperFactory interface for Versori connections.
|
|
13
13
|
* This is the intended implementation for when projects/services are hosted on Versori infrastructure.
|
|
@@ -20,7 +20,7 @@ const helpers_js_1 = require("./helpers.js");
|
|
|
20
20
|
* ```
|
|
21
21
|
*/
|
|
22
22
|
class VersoriCredentialsFactory {
|
|
23
|
-
constructor(credsClient, credsBaseURL, platformAPIClient, logger, tracer) {
|
|
23
|
+
constructor(credsClient, credsBaseURL, platformAPIClient, logger, tracer, cfgReader) {
|
|
24
24
|
Object.defineProperty(this, "tokenClient", {
|
|
25
25
|
enumerable: true,
|
|
26
26
|
configurable: true,
|
|
@@ -39,7 +39,7 @@ class VersoriCredentialsFactory {
|
|
|
39
39
|
writable: true,
|
|
40
40
|
value: void 0
|
|
41
41
|
});
|
|
42
|
-
Object.defineProperty(this, "
|
|
42
|
+
Object.defineProperty(this, "cfgReader", {
|
|
43
43
|
enumerable: true,
|
|
44
44
|
configurable: true,
|
|
45
45
|
writable: true,
|
|
@@ -71,7 +71,7 @@ class VersoriCredentialsFactory {
|
|
|
71
71
|
this.tokenClient = credsClient;
|
|
72
72
|
this.credsBaseURL = credsBaseURL;
|
|
73
73
|
this.platformAPIClient = platformAPIClient;
|
|
74
|
-
this.
|
|
74
|
+
this.cfgReader = cfgReader;
|
|
75
75
|
this.log = logger;
|
|
76
76
|
this.tracer = tracer;
|
|
77
77
|
// lost 15 minutes because of this one
|
|
@@ -83,6 +83,7 @@ class VersoriCredentialsFactory {
|
|
|
83
83
|
const platformApiBaseURL = Deno.env.get(constants_js_1.envVarPlatformApiBaseURL);
|
|
84
84
|
const orgId = Deno.env.get(constants_js_1.envVarOrgId);
|
|
85
85
|
const envId = Deno.env.get(constants_js_1.envVarEnvId);
|
|
86
|
+
const cfgReader = configloader_js_1.VersoriConfigReader.fromEnv(logger);
|
|
86
87
|
if (!orgId || !envId || !platformApiBaseURL || !credsBaseURL) {
|
|
87
88
|
const missingVars = [];
|
|
88
89
|
if (!orgId)
|
|
@@ -98,7 +99,7 @@ class VersoriCredentialsFactory {
|
|
|
98
99
|
const log = logger || new mod_js_1.ConsoleLogger('debug');
|
|
99
100
|
const pAPIClient = new platformapi_js_1.PlatformAPIClient(platformApiBaseURL, orgId, envId, log);
|
|
100
101
|
const tokenClient = new mod_js_2.VersoriCredentialClient(credsBaseURL);
|
|
101
|
-
return new VersoriCredentialsFactory(tokenClient, credsBaseURL, pAPIClient, log, tracer);
|
|
102
|
+
return new VersoriCredentialsFactory(tokenClient, credsBaseURL, pAPIClient, log, tracer, cfgReader);
|
|
102
103
|
}
|
|
103
104
|
// takes the info and modifies the url using changeBaseUrl if necessary
|
|
104
105
|
// if a full valid URL is passed as a string, it will be returned as is
|
|
@@ -137,7 +138,7 @@ class VersoriCredentialsFactory {
|
|
|
137
138
|
return newURL.toString();
|
|
138
139
|
}
|
|
139
140
|
create(connName) {
|
|
140
|
-
const cnxId = this.getConnectionID(connName);
|
|
141
|
+
const cnxId = this.cfgReader.getConnectionID(connName);
|
|
141
142
|
if (!cnxId) {
|
|
142
143
|
this.log.debug('Connection not found in config, could be a dynamic connection', {
|
|
143
144
|
connectionName: connName,
|
|
@@ -169,7 +170,7 @@ class VersoriCredentialsFactory {
|
|
|
169
170
|
return Promise.resolve(_fn);
|
|
170
171
|
}
|
|
171
172
|
createDynamic(templateName) {
|
|
172
|
-
const template = this.getTemplateID(templateName);
|
|
173
|
+
const template = this.cfgReader.getTemplateID(templateName);
|
|
173
174
|
if (!template) {
|
|
174
175
|
this.log.debug('Template not found in config, could be a static connection', {
|
|
175
176
|
templateName: templateName,
|
|
@@ -239,7 +240,7 @@ class VersoriCredentialsFactory {
|
|
|
239
240
|
}
|
|
240
241
|
async getTokenByName(name, forceRefresh = false, activationId) {
|
|
241
242
|
const credId = await this.getCredentialIDFromName(name, activationId);
|
|
242
|
-
const token = await this.
|
|
243
|
+
const token = await this.getToken(credId, forceRefresh);
|
|
243
244
|
if (!token?.token) {
|
|
244
245
|
throw new Error(`Token not found for connection ${name} with credential ID ${credId}`);
|
|
245
246
|
}
|
|
@@ -253,7 +254,7 @@ class VersoriCredentialsFactory {
|
|
|
253
254
|
}
|
|
254
255
|
async getRawByName(name, activationId) {
|
|
255
256
|
const credId = await this.getCredentialIDFromName(name, activationId);
|
|
256
|
-
const raw = await this.
|
|
257
|
+
const raw = await this.getRaw(credId);
|
|
257
258
|
if (!raw) {
|
|
258
259
|
throw new Error(`Raw data not found for connection ${name} with credential ID ${credId}`);
|
|
259
260
|
}
|
|
@@ -265,7 +266,7 @@ class VersoriCredentialsFactory {
|
|
|
265
266
|
}
|
|
266
267
|
async getCredentialIDFromName(name, activationId) {
|
|
267
268
|
// fin connection config from versori file
|
|
268
|
-
const conn = this.
|
|
269
|
+
const conn = this.cfgReader.getCnxMapping(name);
|
|
269
270
|
if (!conn) {
|
|
270
271
|
return '';
|
|
271
272
|
}
|
|
@@ -296,21 +297,6 @@ class VersoriCredentialsFactory {
|
|
|
296
297
|
}
|
|
297
298
|
return staticConn.credentials[0].credential.id;
|
|
298
299
|
}
|
|
299
|
-
getConnectionID(connName) {
|
|
300
|
-
const conn = this.versoriCfg.mappings.find((c) => (c.dynamic === undefined || c.dynamic === false) &&
|
|
301
|
-
c.name.toLowerCase() === connName.toLowerCase());
|
|
302
|
-
if (!conn || !conn.connId) {
|
|
303
|
-
return '';
|
|
304
|
-
}
|
|
305
|
-
return conn.connId;
|
|
306
|
-
}
|
|
307
|
-
getTemplateID(templateName) {
|
|
308
|
-
const template = this.versoriCfg.mappings.find((c) => c.dynamic && c.name.toLowerCase() === templateName.toLowerCase());
|
|
309
|
-
if (!template || !template.templateId) {
|
|
310
|
-
return '';
|
|
311
|
-
}
|
|
312
|
-
return template.templateId;
|
|
313
|
-
}
|
|
314
300
|
apiKeyFetcher(conn, fn) {
|
|
315
301
|
const _fn = async (input, init) => {
|
|
316
302
|
const tokenResponse = await this.getToken(conn.credentials[0].credential.id);
|
|
@@ -478,9 +464,10 @@ class VersoriCredentialsFactory {
|
|
|
478
464
|
return await this.tokenClient.getToken(id, forceRefresh);
|
|
479
465
|
}
|
|
480
466
|
catch (error) {
|
|
481
|
-
this.log.error('unable to get credential', { error });
|
|
467
|
+
this.log.error('unable to get token credential', { error });
|
|
482
468
|
if (error instanceof connect_1.ConnectError) {
|
|
483
|
-
if (error.rawMessage.includes('connection error received: not a result of an error') &&
|
|
469
|
+
if (error.rawMessage.includes('connection error received: not a result of an error') &&
|
|
470
|
+
error.code === connect_1.Code.Internal) {
|
|
484
471
|
this.log.info('Connection error received, attempting to reconnect');
|
|
485
472
|
this.tokenClient = new mod_js_2.VersoriCredentialClient(this.credsBaseURL);
|
|
486
473
|
return await this.tokenClient.getToken(id);
|
|
@@ -490,5 +477,22 @@ class VersoriCredentialsFactory {
|
|
|
490
477
|
throw error;
|
|
491
478
|
}
|
|
492
479
|
}
|
|
480
|
+
async getRaw(id) {
|
|
481
|
+
try {
|
|
482
|
+
return await this.tokenClient.getRaw(id);
|
|
483
|
+
}
|
|
484
|
+
catch (error) {
|
|
485
|
+
this.log.error('unable to get raw credential', { error });
|
|
486
|
+
if (error instanceof connect_1.ConnectError) {
|
|
487
|
+
if (error.rawMessage.includes('connection error received: not a result of an error') && error.code === connect_1.Code.Internal) {
|
|
488
|
+
this.log.info('Connection error received, attempting to reconnect');
|
|
489
|
+
this.tokenClient = new mod_js_2.VersoriCredentialClient(this.credsBaseURL);
|
|
490
|
+
return await this.tokenClient.getRaw(id);
|
|
491
|
+
}
|
|
492
|
+
throw error;
|
|
493
|
+
}
|
|
494
|
+
throw error;
|
|
495
|
+
}
|
|
496
|
+
}
|
|
493
497
|
}
|
|
494
498
|
exports.VersoriCredentialsFactory = VersoriCredentialsFactory;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { NextFunction, Response, Request } from 'express';
|
|
2
|
+
import { CredentialsProvider } from './contextcredentials.js';
|
|
3
|
+
import { ConfigReader, ConnectionProvider } from '../types.js';
|
|
4
|
+
import { Logger } from '../../../observability/mod.js';
|
|
5
|
+
export type CreateWebhookMiddleWareOpts = {
|
|
6
|
+
id: string;
|
|
7
|
+
connName?: string;
|
|
8
|
+
credentials: CredentialsProvider;
|
|
9
|
+
cnxProvider: ConnectionProvider;
|
|
10
|
+
cfgReader: ConfigReader;
|
|
11
|
+
log: Logger;
|
|
12
|
+
};
|
|
13
|
+
export declare function createStaticWebhookMiddleware(opts: CreateWebhookMiddleWareOpts): (req: Request, res: Response, next: NextFunction) => Promise<void>;
|
|
14
|
+
export declare function createActIdDynamicWebhookMiddleware(opts: CreateWebhookMiddleWareOpts): (req: Request, res: Response, next: NextFunction) => Promise<void>;
|
|
15
|
+
export declare function createUserIdDynamicWebhookMiddleware(opts: CreateWebhookMiddleWareOpts): (req: Request, res: Response, next: NextFunction) => Promise<void>;
|
|
16
|
+
//# sourceMappingURL=webhookmiddleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhookmiddleware.d.ts","sourceRoot":"","sources":["../../../../../src/src/dsl/http/versori/webhookmiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAwB,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAErF,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAGvD,MAAM,MAAM,2BAA2B,GAAG;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,mBAAmB,CAAC;IACjC,WAAW,EAAE,kBAAkB,CAAC;IAChC,SAAS,EAAE,YAAY,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;CACf,CAAC;AAIF,wBAAgB,6BAA6B,CACzC,IAAI,EAAE,2BAA2B,GAClC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CA8DpE;AAED,wBAAgB,mCAAmC,CAC/C,IAAI,EAAE,2BAA2B,GAClC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAiEpE;AAED,wBAAgB,oCAAoC,CAChD,IAAI,EAAE,2BAA2B,GAClC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAkFpE"}
|