@versori/run 0.0.1-alpha.6 → 0.1.0-alpha.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/{script/deps/jsr.io/@std/fmt/1.0.5 → esm/deps/jsr.io/@std/fmt/1.0.6}/colors.d.ts.map +1 -1
  2. package/esm/deps/jsr.io/@std/fs/{1.0.13 → 1.0.15}/exists.d.ts.map +1 -1
  3. package/esm/deps/jsr.io/@std/log/0.224.14/console_handler.js +1 -1
  4. package/esm/deps/jsr.io/@std/log/0.224.14/rotating_file_handler.js +1 -1
  5. package/esm/src/context/Context.d.ts +6 -1
  6. package/esm/src/context/Context.d.ts.map +1 -1
  7. package/esm/src/context/Context.js +17 -3
  8. package/esm/src/context/ContextProvider.d.ts +3 -2
  9. package/esm/src/context/ContextProvider.d.ts.map +1 -1
  10. package/esm/src/context/ContextProvider.js +2 -2
  11. package/esm/src/dsl/http/default.d.ts.map +1 -1
  12. package/esm/src/dsl/http/default.js +3 -1
  13. package/esm/src/dsl/http/types.d.ts +122 -16
  14. package/esm/src/dsl/http/types.d.ts.map +1 -1
  15. package/esm/src/dsl/http/types.js +6 -2
  16. package/esm/src/dsl/http/versori/configloader.d.ts +2 -2
  17. package/esm/src/dsl/http/versori/configloader.d.ts.map +1 -1
  18. package/esm/src/dsl/http/versori/configloader.js +9 -3
  19. package/esm/src/dsl/http/versori/constants.d.ts +10 -0
  20. package/esm/src/dsl/http/versori/constants.d.ts.map +1 -0
  21. package/esm/src/dsl/http/versori/constants.js +12 -0
  22. package/esm/src/dsl/http/versori/internalauth.d.ts.map +1 -1
  23. package/esm/src/dsl/http/versori/internalauth.js +10 -9
  24. package/esm/src/dsl/http/versori/platformapi.d.ts +14 -0
  25. package/esm/src/dsl/http/versori/platformapi.d.ts.map +1 -0
  26. package/esm/src/dsl/http/versori/platformapi.js +91 -0
  27. package/esm/src/dsl/http/versori/roundtripper.d.ts +13 -6
  28. package/esm/src/dsl/http/versori/roundtripper.d.ts.map +1 -1
  29. package/esm/src/dsl/http/versori/roundtripper.js +171 -53
  30. package/esm/src/dsl/tasks/HttpTask.d.ts +18 -2
  31. package/esm/src/dsl/tasks/HttpTask.d.ts.map +1 -1
  32. package/esm/src/dsl/tasks/HttpTask.js +82 -0
  33. package/esm/src/dsl/triggers/ScheduleTrigger.d.ts +6 -2
  34. package/esm/src/dsl/triggers/ScheduleTrigger.d.ts.map +1 -1
  35. package/esm/src/dsl/triggers/ScheduleTrigger.js +10 -3
  36. package/esm/src/interpreter/memory/MemoryInterpreter.d.ts +1 -0
  37. package/esm/src/interpreter/memory/MemoryInterpreter.d.ts.map +1 -1
  38. package/esm/src/interpreter/memory/MemoryInterpreter.js +12 -3
  39. package/esm/src/interpreter/memory/ObservableCompiler.d.ts +2 -1
  40. package/esm/src/interpreter/memory/ObservableCompiler.d.ts.map +1 -1
  41. package/esm/src/interpreter/memory/compilers/background.d.ts.map +1 -1
  42. package/esm/src/interpreter/memory/compilers/background.js +4 -2
  43. package/esm/src/interpreter/memory/compilers/http.d.ts.map +1 -1
  44. package/esm/src/interpreter/memory/compilers/http.js +6 -12
  45. package/esm/src/interpreter/memory/compilers/schedule.d.ts.map +1 -1
  46. package/esm/src/interpreter/memory/compilers/schedule.js +32 -6
  47. package/esm/src/interpreter/memory/compilers/serial.js +1 -1
  48. package/esm/src/interpreter/memory/compilers/webhook.d.ts.map +1 -1
  49. package/esm/src/interpreter/memory/compilers/webhook.js +20 -4
  50. package/package.json +2 -1
  51. package/{esm/deps/jsr.io/@std/fmt/1.0.5 → script/deps/jsr.io/@std/fmt/1.0.6}/colors.d.ts.map +1 -1
  52. package/script/deps/jsr.io/@std/fs/{1.0.13 → 1.0.15}/exists.d.ts.map +1 -1
  53. package/script/deps/jsr.io/@std/log/0.224.14/console_handler.js +1 -1
  54. package/script/deps/jsr.io/@std/log/0.224.14/rotating_file_handler.js +1 -1
  55. package/script/src/context/Context.d.ts +6 -1
  56. package/script/src/context/Context.d.ts.map +1 -1
  57. package/script/src/context/Context.js +17 -3
  58. package/script/src/context/ContextProvider.d.ts +3 -2
  59. package/script/src/context/ContextProvider.d.ts.map +1 -1
  60. package/script/src/context/ContextProvider.js +2 -2
  61. package/script/src/dsl/http/default.d.ts.map +1 -1
  62. package/script/src/dsl/http/default.js +3 -1
  63. package/script/src/dsl/http/types.d.ts +122 -16
  64. package/script/src/dsl/http/types.d.ts.map +1 -1
  65. package/script/src/dsl/http/types.js +7 -1
  66. package/script/src/dsl/http/versori/configloader.d.ts +2 -2
  67. package/script/src/dsl/http/versori/configloader.d.ts.map +1 -1
  68. package/script/src/dsl/http/versori/configloader.js +10 -4
  69. package/script/src/dsl/http/versori/constants.d.ts +10 -0
  70. package/script/src/dsl/http/versori/constants.d.ts.map +1 -0
  71. package/script/src/dsl/http/versori/constants.js +15 -0
  72. package/script/src/dsl/http/versori/internalauth.d.ts.map +1 -1
  73. package/script/src/dsl/http/versori/internalauth.js +10 -9
  74. package/script/src/dsl/http/versori/platformapi.d.ts +14 -0
  75. package/script/src/dsl/http/versori/platformapi.d.ts.map +1 -0
  76. package/script/src/dsl/http/versori/platformapi.js +118 -0
  77. package/script/src/dsl/http/versori/roundtripper.d.ts +13 -6
  78. package/script/src/dsl/http/versori/roundtripper.d.ts.map +1 -1
  79. package/script/src/dsl/http/versori/roundtripper.js +170 -53
  80. package/script/src/dsl/tasks/HttpTask.d.ts +18 -2
  81. package/script/src/dsl/tasks/HttpTask.d.ts.map +1 -1
  82. package/script/src/dsl/tasks/HttpTask.js +84 -1
  83. package/script/src/dsl/triggers/ScheduleTrigger.d.ts +6 -2
  84. package/script/src/dsl/triggers/ScheduleTrigger.d.ts.map +1 -1
  85. package/script/src/dsl/triggers/ScheduleTrigger.js +10 -3
  86. package/script/src/interpreter/memory/MemoryInterpreter.d.ts +1 -0
  87. package/script/src/interpreter/memory/MemoryInterpreter.d.ts.map +1 -1
  88. package/script/src/interpreter/memory/MemoryInterpreter.js +12 -3
  89. package/script/src/interpreter/memory/ObservableCompiler.d.ts +2 -1
  90. package/script/src/interpreter/memory/ObservableCompiler.d.ts.map +1 -1
  91. package/script/src/interpreter/memory/compilers/background.d.ts.map +1 -1
  92. package/script/src/interpreter/memory/compilers/background.js +3 -1
  93. package/script/src/interpreter/memory/compilers/http.d.ts.map +1 -1
  94. package/script/src/interpreter/memory/compilers/http.js +5 -11
  95. package/script/src/interpreter/memory/compilers/schedule.d.ts.map +1 -1
  96. package/script/src/interpreter/memory/compilers/schedule.js +32 -6
  97. package/script/src/interpreter/memory/compilers/serial.js +1 -1
  98. package/script/src/interpreter/memory/compilers/webhook.d.ts.map +1 -1
  99. package/script/src/interpreter/memory/compilers/webhook.js +20 -4
  100. package/esm/src/dsl/http/versori/connectapi.d.ts +0 -11
  101. package/esm/src/dsl/http/versori/connectapi.d.ts.map +0 -1
  102. package/esm/src/dsl/http/versori/connectapi.js +0 -57
  103. package/script/src/dsl/http/versori/connectapi.d.ts +0 -11
  104. package/script/src/dsl/http/versori/connectapi.d.ts.map +0 -1
  105. package/script/src/dsl/http/versori/connectapi.js +0 -61
  106. /package/esm/deps/jsr.io/@std/fmt/{1.0.5 → 1.0.6}/colors.d.ts +0 -0
  107. /package/esm/deps/jsr.io/@std/fmt/{1.0.5 → 1.0.6}/colors.js +0 -0
  108. /package/esm/deps/jsr.io/@std/fs/{1.0.13 → 1.0.15}/exists.d.ts +0 -0
  109. /package/esm/deps/jsr.io/@std/fs/{1.0.13 → 1.0.15}/exists.js +0 -0
  110. /package/script/deps/jsr.io/@std/fmt/{1.0.5 → 1.0.6}/colors.d.ts +0 -0
  111. /package/script/deps/jsr.io/@std/fmt/{1.0.5 → 1.0.6}/colors.js +0 -0
  112. /package/script/deps/jsr.io/@std/fs/{1.0.13 → 1.0.15}/exists.d.ts +0 -0
  113. /package/script/deps/jsr.io/@std/fs/{1.0.13 → 1.0.15}/exists.js +0 -0
@@ -23,18 +23,24 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.LoadConfigFromJSON = LoadConfigFromJSON;
26
+ exports.LoadConfigFromFile = LoadConfigFromFile;
27
27
  const dntShim = __importStar(require("../../../../_dnt.shims.js"));
28
+ const constants_js_1 = require("./constants.js");
28
29
  /**
29
30
  * Loads the Versori SDK configuration from a JSON file.
30
31
  *
31
- * This function reads the 'versori.json' file synchronously and parses its content
32
+ * This function reads the config file synchronously and parses its content
32
33
  * into a `VersoriSDKConfig` object. This assumes the config file is in the root where
33
34
  * the application is run.
34
35
  *
35
36
  * @returns {VersoriSDKConfig} The parsed configuration object.
36
37
  */
37
- function LoadConfigFromJSON() {
38
- const cfg = JSON.parse(dntShim.Deno.readTextFileSync('versori.json'));
38
+ function LoadConfigFromFile() {
39
+ // Get the config file name from the environment variable
40
+ const configFileName = dntShim.Deno.env.get(constants_js_1.envVarConfigFile);
41
+ if (!configFileName) {
42
+ throw new Error(`Environment variable ${constants_js_1.envVarConfigFile} is not set`);
43
+ }
44
+ const cfg = JSON.parse(dntShim.Deno.readTextFileSync(configFileName));
39
45
  return cfg;
40
46
  }
@@ -0,0 +1,10 @@
1
+ export declare const envVarOrgId = "RUN_ORGANISATION_ID";
2
+ export declare const envVarEnvId = "RUN_ENVIRONMENT_ID";
3
+ export declare const envVarPlatformApiBaseURL = "RUN_PLATFORM_API_INTERNAL_URL";
4
+ export declare const envVarCredsBaseURL = "RUN_CREDENTIALS_SERVICE_INTERNAL_URL";
5
+ export declare const envVarConfigFile = "RUN_CONFIG_FILE";
6
+ export declare const envVarClientId = "RUN_CLIENT_ID";
7
+ export declare const envVarClientSecret = "RUN_CLIENT_SECRET";
8
+ export declare const envVarTokenEndpoint = "RUN_TOKEN_ENDPOINT";
9
+ export declare const envVarInternalToken = "RUN_INTERNAL_TOKEN";
10
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +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,wBAAwB,kCAAkC,CAAC;AACxE,eAAO,MAAM,kBAAkB,yCAAyC,CAAC;AAGzE,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"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.envVarInternalToken = exports.envVarTokenEndpoint = exports.envVarClientSecret = exports.envVarClientId = exports.envVarConfigFile = exports.envVarCredsBaseURL = exports.envVarPlatformApiBaseURL = exports.envVarEnvId = exports.envVarOrgId = void 0;
4
+ // This file contains constants used in the Versori DSL HTTP client.
5
+ exports.envVarOrgId = 'RUN_ORGANISATION_ID';
6
+ exports.envVarEnvId = 'RUN_ENVIRONMENT_ID';
7
+ exports.envVarPlatformApiBaseURL = 'RUN_PLATFORM_API_INTERNAL_URL';
8
+ exports.envVarCredsBaseURL = 'RUN_CREDENTIALS_SERVICE_INTERNAL_URL';
9
+ // The following environment variables are used for the config file
10
+ exports.envVarConfigFile = 'RUN_CONFIG_FILE';
11
+ // The following environment variables are used for internal authentication
12
+ exports.envVarClientId = 'RUN_CLIENT_ID';
13
+ exports.envVarClientSecret = 'RUN_CLIENT_SECRET';
14
+ exports.envVarTokenEndpoint = 'RUN_TOKEN_ENDPOINT';
15
+ exports.envVarInternalToken = 'RUN_INTERNAL_TOKEN';
@@ -1 +1 @@
1
- {"version":3,"file":"internalauth.d.ts","sourceRoot":"","sources":["../../../../../src/src/dsl/http/versori/internalauth.ts"],"names":[],"mappings":"AACA,qBAAa,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;;IA2BpB,QAAQ;CAsBjB"}
1
+ {"version":3,"file":"internalauth.d.ts","sourceRoot":"","sources":["../../../../../src/src/dsl/http/versori/internalauth.ts"],"names":[],"mappings":"AAGA,qBAAa,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;;IA2BpB,QAAQ;CAsBjB"}
@@ -25,6 +25,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.InternalAuth = void 0;
27
27
  const dntShim = __importStar(require("../../../../_dnt.shims.js"));
28
+ const constants_js_1 = require("./constants.js");
28
29
  class InternalAuth {
29
30
  constructor() {
30
31
  Object.defineProperty(this, "clientId", {
@@ -57,25 +58,25 @@ class InternalAuth {
57
58
  writable: true,
58
59
  value: void 0
59
60
  });
60
- this.clientId = dntShim.Deno.env.get('RUN_CLIENT_ID') || '';
61
- this.clientSecret = dntShim.Deno.env.get('RUN_CLIENT_SECRET') || '';
62
- this.tokenEndpoint = dntShim.Deno.env.get('RUN_TOKEN_ENDPOINT') || '';
61
+ this.clientId = dntShim.Deno.env.get(constants_js_1.envVarClientId) || '';
62
+ this.clientSecret = dntShim.Deno.env.get(constants_js_1.envVarClientSecret) || '';
63
+ this.tokenEndpoint = dntShim.Deno.env.get(constants_js_1.envVarTokenEndpoint) || '';
63
64
  this.accessToken = '';
64
65
  this.expiresAt = 0;
65
- if (dntShim.Deno.env.get('RUN_INTERNAL_TOKEN')) {
66
- this.accessToken = dntShim.Deno.env.get('RUN_INTERNAL_TOKEN') || '';
66
+ if (dntShim.Deno.env.get(constants_js_1.envVarInternalToken)) {
67
+ this.accessToken = dntShim.Deno.env.get(constants_js_1.envVarInternalToken) || '';
67
68
  this.expiresAt = Date.now() + 365 * 24 * 60 * 60 * 1000; // expires in 1 year
68
- console.log('Using static token provided by RUN_INTERNAL_TOKEN');
69
+ console.log(`Using static token provided by ${constants_js_1.envVarInternalToken}`);
69
70
  return;
70
71
  }
71
72
  if (!this.clientId || !this.clientSecret || !this.tokenEndpoint) {
72
73
  const missingVars = [];
73
74
  if (!this.clientId)
74
- missingVars.push('RUN_CLIENT_ID');
75
+ missingVars.push(constants_js_1.envVarClientId);
75
76
  if (!this.clientSecret)
76
- missingVars.push('RUN_CLIENT_SECRET');
77
+ missingVars.push(constants_js_1.envVarClientSecret);
77
78
  if (!this.tokenEndpoint)
78
- missingVars.push('RUN_TOKEN_ENDPOINT');
79
+ missingVars.push(constants_js_1.envVarTokenEndpoint);
79
80
  throw new Error(`Missing environment variables: ${missingVars.join(', ')}`);
80
81
  }
81
82
  }
@@ -0,0 +1,14 @@
1
+ import { Activation, Connection, ConnectionProvider } from '../types.js';
2
+ export declare class PlatformAPIClient implements ConnectionProvider {
3
+ private baseUrl;
4
+ private orgId;
5
+ private envId;
6
+ private internalAuth;
7
+ private cache;
8
+ constructor(baseUrl: string, orgId: string, envId: string, cache?: Record<string, Connection>);
9
+ static fromEnv(): PlatformAPIClient;
10
+ getStaticConnection(cnxId: string): Promise<Connection | undefined>;
11
+ getEndUserConnection(templateId: string, userId: string): Promise<Connection | undefined>;
12
+ listActivations(): Promise<Activation[]>;
13
+ }
14
+ //# sourceMappingURL=platformapi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platformapi.d.ts","sourceRoot":"","sources":["../../../../../src/src/dsl/http/versori/platformapi.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAIzE,qBAAa,iBAAkB,YAAW,kBAAkB;IACxD,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,KAAK,CAAS;IAEtB,OAAO,CAAC,KAAK,CAAS;IAEtB,OAAO,CAAC,YAAY,CAAe;IAEnC,OAAO,CAAC,KAAK,CAA6B;gBAGtC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAM;IAS1C,MAAM,CAAC,OAAO,IAAI,iBAAiB;IAY7B,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IA2BnE,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAmBzF,eAAe,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;CAkBjD"}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.PlatformAPIClient = void 0;
27
+ const dntShim = __importStar(require("../../../../_dnt.shims.js"));
28
+ const constants_js_1 = require("./constants.js");
29
+ const internalauth_js_1 = require("./internalauth.js");
30
+ class PlatformAPIClient {
31
+ constructor(baseUrl, orgId, envId, cache = {}) {
32
+ Object.defineProperty(this, "baseUrl", {
33
+ enumerable: true,
34
+ configurable: true,
35
+ writable: true,
36
+ value: void 0
37
+ });
38
+ Object.defineProperty(this, "orgId", {
39
+ enumerable: true,
40
+ configurable: true,
41
+ writable: true,
42
+ value: void 0
43
+ });
44
+ Object.defineProperty(this, "envId", {
45
+ enumerable: true,
46
+ configurable: true,
47
+ writable: true,
48
+ value: void 0
49
+ });
50
+ Object.defineProperty(this, "internalAuth", {
51
+ enumerable: true,
52
+ configurable: true,
53
+ writable: true,
54
+ value: void 0
55
+ });
56
+ Object.defineProperty(this, "cache", {
57
+ enumerable: true,
58
+ configurable: true,
59
+ writable: true,
60
+ value: void 0
61
+ });
62
+ this.baseUrl = baseUrl;
63
+ this.orgId = orgId;
64
+ this.cache = cache;
65
+ this.envId = envId;
66
+ this.internalAuth = new internalauth_js_1.InternalAuth();
67
+ }
68
+ static fromEnv() {
69
+ const baseUrl = dntShim.Deno.env.get(constants_js_1.envVarPlatformApiBaseURL);
70
+ const orgId = dntShim.Deno.env.get(constants_js_1.envVarOrgId);
71
+ const envId = dntShim.Deno.env.get(constants_js_1.envVarEnvId);
72
+ if (!baseUrl || !orgId || !envId) {
73
+ throw new Error('Missing required environment variables');
74
+ }
75
+ return new PlatformAPIClient(baseUrl, orgId, envId);
76
+ }
77
+ async getStaticConnection(cnxId) {
78
+ if (this.cache[cnxId]) {
79
+ return this.cache[cnxId];
80
+ }
81
+ const resp = await fetch(`${this.baseUrl}/o/${this.orgId}/connections/${cnxId}`, {
82
+ headers: {
83
+ 'x-versori-internal-token': await this.internalAuth.getToken(),
84
+ },
85
+ });
86
+ if (!resp.ok) {
87
+ return undefined;
88
+ }
89
+ const result = (await resp.json());
90
+ this.cache[cnxId] = result;
91
+ return result;
92
+ }
93
+ async getEndUserConnection(templateId, userId) {
94
+ const resp = await fetch(`${this.baseUrl}/o/${this.orgId}/environment-systems/${templateId}/users/${userId}`, {
95
+ headers: {
96
+ 'x-versori-internal-token': await this.internalAuth.getToken(),
97
+ },
98
+ });
99
+ if (!resp.ok) {
100
+ return undefined;
101
+ }
102
+ const result = (await resp.json());
103
+ return result;
104
+ }
105
+ async listActivations() {
106
+ const resp = await fetch(`${this.baseUrl}/o/${this.orgId}/environments/${this.envId}/activations`, {
107
+ headers: {
108
+ 'x-versori-internal-token': await this.internalAuth.getToken(),
109
+ },
110
+ });
111
+ if (!resp.ok) {
112
+ return [];
113
+ }
114
+ const result = (await resp.json());
115
+ return result;
116
+ }
117
+ }
118
+ exports.PlatformAPIClient = PlatformAPIClient;
@@ -1,8 +1,8 @@
1
- import { ConnectAPIClient } from './connectapi.js';
2
- import { DynamicFetcher, RoundTripperFactory } from "../types.js";
1
+ import { DynamicFetcher, RoundTripperFactory } from '../types.js';
3
2
  import { VersoriCredentialClient } from './credentials/mod.js';
3
+ import { PlatformAPIClient } from './platformapi.js';
4
+ import { Logger } from '../../../observability/logging/Logger.js';
4
5
  export type RunningEnvironment = 'local' | 'versori' | 'staging';
5
- export declare function CreateFromEnv(): VersoriRoundTripperFactory;
6
6
  /**
7
7
  * VersoriRoundTripper is an implementation of the RoundTripperFactory interface for Versori connections.
8
8
  * This is the intended implementation for when projects/services are hosted on Versori infrastructure.
@@ -16,13 +16,20 @@ export declare function CreateFromEnv(): VersoriRoundTripperFactory;
16
16
  * ```
17
17
  */
18
18
  export declare class VersoriRoundTripperFactory implements RoundTripperFactory {
19
- private cAPIClient;
20
19
  private tokenClient;
20
+ private platformAPIClient;
21
21
  private versoriCfg;
22
- constructor(cAPIClient: ConnectAPIClient, credsClient: VersoriCredentialClient);
22
+ private log;
23
+ private readonly defaultStatic;
24
+ private readonly defaultDynamic;
25
+ constructor(credsClient: VersoriCredentialClient, platformAPIClient: PlatformAPIClient, logger: Logger);
26
+ static fromEnv(logger?: Logger): VersoriRoundTripperFactory;
27
+ private changeRequestInit;
28
+ private changeBaseUrl;
23
29
  create(connName: string, fn?: typeof fetch): Promise<typeof fetch>;
24
- createDynamic(templateName: string, fn: typeof fetch): Promise<DynamicFetcher>;
30
+ createDynamic(templateName: string, fn?: typeof fetch): Promise<DynamicFetcher>;
25
31
  private getConnectionID;
32
+ private getTemplateID;
26
33
  private apiKeyFetcher;
27
34
  private basicAuthFetcher;
28
35
  private bearerTokenFetcher;
@@ -1 +1 @@
1
- {"version":3,"file":"roundtripper.d.ts","sourceRoot":"","sources":["../../../../../src/src/dsl/http/versori/roundtripper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAc,cAAc,EAAE,mBAAmB,EAAoB,MAAM,aAAa,CAAC;AAEhG,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;AAEjE,wBAAgB,aAAa,IAAI,0BAA0B,CAuB1D;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,0BAA2B,YAAW,mBAAmB;IAClE,OAAO,CAAC,UAAU,CAAmB;IAErC,OAAO,CAAC,WAAW,CAA0B;IAE7C,OAAO,CAAC,UAAU,CAAmB;gBAEzB,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,uBAAuB;IAMxE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAE,OAAO,KAAa,GAAG,OAAO,CAAC,OAAO,KAAK,CAAC;IAsBzE,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC;IAIpF,OAAO,CAAC,eAAe;YAWT,aAAa;YA+Cb,gBAAgB;YA0BhB,kBAAkB;YAkClB,aAAa;CAgD9B"}
1
+ {"version":3,"file":"roundtripper.d.ts","sourceRoot":"","sources":["../../../../../src/src/dsl/http/versori/roundtripper.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,cAAc,EAAE,mBAAmB,EAAoB,MAAM,aAAa,CAAC;AAEhG,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,0CAA0C,CAAC;AASlE,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;AAEjE;;;;;;;;;;;GAWG;AACH,qBAAa,0BAA2B,YAAW,mBAAmB;IAClE,OAAO,CAAC,WAAW,CAA0B;IAE7C,OAAO,CAAC,iBAAiB,CAAoB;IAE7C,OAAO,CAAC,UAAU,CAAmB;IAErC,OAAO,CAAC,GAAG,CAAS;IAEpB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAK5B;IAEF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAM7B;gBAGE,WAAW,EAAE,uBAAuB,EACpC,iBAAiB,EAAE,iBAAiB,EACpC,MAAM,EAAE,MAAM;IAQlB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,0BAA0B;IA0B3D,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,aAAa;IAmBf,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAE,OAAO,KAAwB,GAAG,OAAO,CAAC,OAAO,KAAK,CAAC;IAyBpF,aAAa,CACf,YAAY,EAAE,MAAM,EACpB,EAAE,GAAE,OAAO,KAAwB,GACpC,OAAO,CAAC,cAAc,CAAC;IA0D1B,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,aAAa;YAYP,aAAa;YAoDb,gBAAgB;YA0BhB,kBAAkB;YAiClB,aAAa;CAkD9B"}
@@ -24,32 +24,13 @@ var __importStar = (this && this.__importStar) || function (mod) {
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.VersoriRoundTripperFactory = void 0;
27
- exports.CreateFromEnv = CreateFromEnv;
28
27
  const dntShim = __importStar(require("../../../../_dnt.shims.js"));
29
- const connectapi_js_1 = require("./connectapi.js");
30
28
  const configloader_js_1 = require("./configloader.js");
31
29
  const mod_js_1 = require("./credentials/mod.js");
32
- function CreateFromEnv() {
33
- const connAPIBaseURL = dntShim.Deno.env.get('RUN_CONNECT_API_INTERNAL_URL');
34
- const credsBaseURL = dntShim.Deno.env.get('RUN_CREDENTIALS_SERVICE_INTERNAL_URL');
35
- const orgId = dntShim.Deno.env.get('RUN_ORGANISATION_ID');
36
- const serviceConnId = dntShim.Deno.env.get('RUN_CONNECTOR_ID');
37
- if (!orgId || !serviceConnId || !connAPIBaseURL || !credsBaseURL) {
38
- const missingVars = [];
39
- if (!orgId)
40
- missingVars.push('RUN_ORGANISATION_ID');
41
- if (!serviceConnId)
42
- missingVars.push('RUN_CONNECTOR_ID');
43
- if (!connAPIBaseURL)
44
- missingVars.push('RUN_CONNECT_API_INTERNAL_URL');
45
- if (!credsBaseURL)
46
- missingVars.push('RUN_CREDENTIALS_SERVICE_INTERNAL_URL');
47
- throw new Error(`Missing environment variables: ${missingVars.join(', ')}`);
48
- }
49
- const cAPIClient = new connectapi_js_1.ConnectAPIClient(connAPIBaseURL, orgId, serviceConnId, {});
50
- const tokenClient = new mod_js_1.VersoriCredentialClient(credsBaseURL);
51
- return new VersoriRoundTripperFactory(cAPIClient, tokenClient);
52
- }
30
+ const lru_cache_1 = require("lru-cache");
31
+ const platformapi_js_1 = require("./platformapi.js");
32
+ const mod_js_2 = require("../../../observability/mod.js");
33
+ const constants_js_1 = require("./constants.js");
53
34
  /**
54
35
  * VersoriRoundTripper is an implementation of the RoundTripperFactory interface for Versori connections.
55
36
  * This is the intended implementation for when projects/services are hosted on Versori infrastructure.
@@ -63,14 +44,14 @@ function CreateFromEnv() {
63
44
  * ```
64
45
  */
65
46
  class VersoriRoundTripperFactory {
66
- constructor(cAPIClient, credsClient) {
67
- Object.defineProperty(this, "cAPIClient", {
47
+ constructor(credsClient, platformAPIClient, logger) {
48
+ Object.defineProperty(this, "tokenClient", {
68
49
  enumerable: true,
69
50
  configurable: true,
70
51
  writable: true,
71
52
  value: void 0
72
53
  });
73
- Object.defineProperty(this, "tokenClient", {
54
+ Object.defineProperty(this, "platformAPIClient", {
74
55
  enumerable: true,
75
56
  configurable: true,
76
57
  writable: true,
@@ -82,17 +63,99 @@ class VersoriRoundTripperFactory {
82
63
  writable: true,
83
64
  value: void 0
84
65
  });
85
- this.cAPIClient = cAPIClient;
66
+ Object.defineProperty(this, "log", {
67
+ enumerable: true,
68
+ configurable: true,
69
+ writable: true,
70
+ value: void 0
71
+ });
72
+ Object.defineProperty(this, "defaultStatic", {
73
+ enumerable: true,
74
+ configurable: true,
75
+ writable: true,
76
+ value: (msg, values) => {
77
+ return (input, init) => {
78
+ this.log.error(msg, values);
79
+ return globalThis.fetch(input, init);
80
+ };
81
+ }
82
+ });
83
+ Object.defineProperty(this, "defaultDynamic", {
84
+ enumerable: true,
85
+ configurable: true,
86
+ writable: true,
87
+ value: (msg, values) => {
88
+ return (userId, input, init) => {
89
+ values['userId'] = userId;
90
+ this.log.error(msg, values);
91
+ return globalThis.fetch(input, init);
92
+ };
93
+ }
94
+ });
86
95
  this.tokenClient = credsClient;
87
- this.versoriCfg = (0, configloader_js_1.LoadConfigFromJSON)(); // for now?
96
+ this.platformAPIClient = platformAPIClient;
97
+ this.versoriCfg = (0, configloader_js_1.LoadConfigFromFile)();
98
+ this.log = logger;
99
+ }
100
+ static fromEnv(logger) {
101
+ const credsBaseURL = dntShim.Deno.env.get(constants_js_1.envVarCredsBaseURL);
102
+ const platformApiBaseURL = dntShim.Deno.env.get(constants_js_1.envVarPlatformApiBaseURL);
103
+ const orgId = dntShim.Deno.env.get(constants_js_1.envVarOrgId);
104
+ const envId = dntShim.Deno.env.get(constants_js_1.envVarEnvId);
105
+ if (!orgId || !envId || !platformApiBaseURL || !credsBaseURL) {
106
+ const missingVars = [];
107
+ if (!orgId)
108
+ missingVars.push(constants_js_1.envVarOrgId);
109
+ if (!envId)
110
+ missingVars.push(constants_js_1.envVarEnvId);
111
+ if (!platformApiBaseURL)
112
+ missingVars.push(constants_js_1.envVarPlatformApiBaseURL);
113
+ if (!credsBaseURL)
114
+ missingVars.push(constants_js_1.envVarCredsBaseURL);
115
+ throw new Error(`Missing environment variables: ${missingVars.join(', ')}`);
116
+ }
117
+ const pAPIClient = new platformapi_js_1.PlatformAPIClient(platformApiBaseURL, orgId, envId, {});
118
+ const tokenClient = new mod_js_1.VersoriCredentialClient(credsBaseURL);
119
+ const log = logger || new mod_js_2.ConsoleLogger('debug');
120
+ return new VersoriRoundTripperFactory(tokenClient, pAPIClient, log);
121
+ }
122
+ // takes the info and modifies the url using changeBaseUrl if necessary
123
+ changeRequestInit(info, conn) {
124
+ if (typeof info === 'string') {
125
+ return this.changeBaseUrl(info, conn);
126
+ }
127
+ else if (info instanceof URL) {
128
+ return this.changeBaseUrl(info.toString(), conn);
129
+ }
130
+ else if (info instanceof Request) {
131
+ const url = this.changeBaseUrl(info.url, conn);
132
+ return new Request(url, info);
133
+ }
134
+ return info;
88
135
  }
89
- async create(connName, fn = fetch) {
136
+ changeBaseUrl(url, conn) {
137
+ const baseUrl = conn.baseUrl;
138
+ if (!baseUrl) {
139
+ return url;
140
+ }
141
+ const urlObj = new URL(url);
142
+ const baseUrlObj = new URL(baseUrl);
143
+ urlObj.hostname = baseUrlObj.hostname;
144
+ this.log.debug('Changing base URL', {
145
+ originalUrl: url,
146
+ newUrl: urlObj.toString(),
147
+ });
148
+ return url.toString();
149
+ }
150
+ async create(connName, fn = globalThis.fetch) {
90
151
  const cnxId = this.getConnectionID(connName);
91
- const conn = await this.cAPIClient.getConnection(cnxId);
152
+ const conn = await this.platformAPIClient.getStaticConnection(cnxId);
92
153
  if (!conn) {
93
- throw new Error(`Connection ${connName} not found`);
154
+ return this.defaultStatic('Connection not found for static, using default fetch', {
155
+ connName: connName,
156
+ });
94
157
  }
95
- switch (conn.credentials.action[0].authSchemeConfig.schemeType) {
158
+ switch (conn.credentials[0].authSchemeConfig.type) {
96
159
  case 'api-key':
97
160
  return this.apiKeyFetcher(conn, fn);
98
161
  case 'basic-auth':
@@ -105,54 +168,108 @@ class VersoriRoundTripperFactory {
105
168
  return fn;
106
169
  }
107
170
  }
108
- async createDynamic(templateName, fn) {
109
- throw new Error('Method not implemented.');
171
+ async createDynamic(templateName, fn = globalThis.fetch) {
172
+ const lruCacheOptions = {
173
+ max: 100,
174
+ };
175
+ const cache = new lru_cache_1.LRUCache(lruCacheOptions);
176
+ const template = this.getTemplateID(templateName);
177
+ if (!template) {
178
+ return this.defaultDynamic('Template not found for dynamic, using default fetch', {
179
+ templateName: templateName,
180
+ });
181
+ }
182
+ const _fn = async (userId, input, init) => {
183
+ let conn = undefined;
184
+ if (cache.has(userId)) {
185
+ conn = cache.get(userId);
186
+ }
187
+ else {
188
+ conn = await this.platformAPIClient.getEndUserConnection(template, userId);
189
+ if (conn) {
190
+ cache.set(userId, conn);
191
+ }
192
+ }
193
+ if (!conn) {
194
+ return this.defaultDynamic('Connection not found for user, using default fetch', {
195
+ templateName: templateName,
196
+ userId: userId,
197
+ })(userId, input, init);
198
+ }
199
+ const _input = this.changeRequestInit(input, conn);
200
+ switch (conn.credentials[0].authSchemeConfig.type) {
201
+ case 'api-key':
202
+ return (await this.apiKeyFetcher(conn, fn))(_input, init);
203
+ case 'basic-auth':
204
+ return (await this.basicAuthFetcher(conn, fn))(_input, init);
205
+ case 'jwt-bearer':
206
+ return (await this.bearerTokenFetcher(conn, fn))(_input, init);
207
+ case 'oauth2':
208
+ return (await this.oauth2Fetcher(conn, fn))(_input, init);
209
+ default:
210
+ return fn(_input, init);
211
+ }
212
+ };
213
+ return _fn;
110
214
  }
111
215
  getConnectionID(connName) {
112
216
  // Note that this is till very up in the air whether we are going to store the connection ID in the config
113
- const conn = this.versoriCfg.connections.find(c => c.name === connName);
114
- if (!conn) {
115
- throw new Error(`Connection ${connName} not found`);
217
+ const conn = this.versoriCfg.mappings.find((c) => (c.dynamic === undefined || c.dynamic === false) && c.name === connName);
218
+ if (!conn || !conn.connId) {
219
+ return '';
116
220
  }
117
- return conn.id;
221
+ return conn.connId;
222
+ }
223
+ getTemplateID(templateName) {
224
+ // see above, also I'm assuming for now that the template id is simply the same as the connection id
225
+ // but there is another flag that denotes it as dynamic??
226
+ const template = this.versoriCfg.mappings.find((c) => c.dynamic && c.name === templateName);
227
+ if (!template || !template.templateId) {
228
+ return '';
229
+ }
230
+ return template.templateId;
118
231
  }
119
232
  async apiKeyFetcher(conn, fn) {
120
- const tokenResponse = await this.tokenClient.getToken(conn.credentials.action[0].credential.id);
233
+ const tokenResponse = await this.tokenClient.getToken(conn.credentials[0].credential.id);
121
234
  const token = tokenResponse.token?.accessToken;
235
+ const asc = conn.credentials[0].authSchemeConfig.apiKey;
122
236
  if (!token) {
123
237
  throw new Error('Token not found');
124
238
  }
239
+ if (!asc) {
240
+ throw new Error('API Key configuration not found');
241
+ }
125
242
  const _fn = (input, init) => {
126
243
  if (!init) {
127
244
  init = {};
128
245
  }
129
- switch (conn.credentials.action[0].authSchemeConfig.in) {
246
+ switch (asc.in) {
130
247
  case 'header':
131
248
  if (!init.headers) {
132
249
  init.headers = new Headers();
133
250
  }
134
251
  if (init.headers instanceof Headers) {
135
- init.headers.set('Authorization', token);
252
+ init.headers.set(asc.name, token);
136
253
  }
137
254
  else if (init.headers instanceof Array) {
138
- init.headers.push(['Authorization', token]);
255
+ init.headers.push([asc.name, token]);
139
256
  }
140
257
  else {
141
258
  init.headers = {
142
259
  ...init.headers,
143
- ['Authorization']: token
260
+ [asc.name]: token,
144
261
  };
145
262
  }
146
263
  break;
147
264
  case 'query':
148
265
  if (typeof input === 'string') {
149
- input += `?${'Authorization'}=${token}`;
266
+ input += `?${asc.name}=${token}`;
150
267
  }
151
268
  else if (input instanceof Request) {
152
- input = new Request(input.url + `?${'Authorization'}=${token}`, init);
269
+ input = new Request(input.url + `?${asc.name}=${token}`, init);
153
270
  }
154
271
  else if (input instanceof URL) {
155
- input.searchParams.append('Authorization', token);
272
+ input.searchParams.append(asc.name, token);
156
273
  }
157
274
  break;
158
275
  }
@@ -161,7 +278,7 @@ class VersoriRoundTripperFactory {
161
278
  return _fn;
162
279
  }
163
280
  async basicAuthFetcher(conn, fn) {
164
- const tokenResponse = await this.tokenClient.getToken(conn.credentials.action[0].credential.id);
281
+ const tokenResponse = await this.tokenClient.getToken(conn.credentials[0].credential.id);
165
282
  const token = tokenResponse.token?.accessToken;
166
283
  if (!token) {
167
284
  throw new Error('Token not found');
@@ -173,14 +290,14 @@ class VersoriRoundTripperFactory {
173
290
  if (!init.headers) {
174
291
  init.headers = new Headers();
175
292
  }
176
- init.headers.set('Authorization', token);
293
+ init.headers.set('Authorization', `Basic ${token}`);
177
294
  return fn(input, init);
178
295
  };
179
296
  return _fn;
180
297
  }
181
- // TODO: need to make the prefix and header name configuratble from authschemeconfig
298
+ // TODO: need to make the prefix and header name configurable from authschemeconfig
182
299
  async bearerTokenFetcher(conn, fn) {
183
- const tokenResponse = await this.tokenClient.getToken(conn.credentials.action[0].credential.id);
300
+ const tokenResponse = await this.tokenClient.getToken(conn.credentials[0].credential.id);
184
301
  const token = tokenResponse.token?.accessToken;
185
302
  if (!token) {
186
303
  throw new Error('Token not found');
@@ -201,7 +318,7 @@ class VersoriRoundTripperFactory {
201
318
  else {
202
319
  init.headers = {
203
320
  ...init.headers,
204
- ['Authorization']: `Bearer ${token}`
321
+ ['Authorization']: `Bearer ${token}`,
205
322
  };
206
323
  }
207
324
  return fn(input, init);
@@ -209,7 +326,7 @@ class VersoriRoundTripperFactory {
209
326
  return _fn;
210
327
  }
211
328
  async oauth2Fetcher(conn, fn) {
212
- const tokenResponse = await this.tokenClient.getOAuth2Token(conn.credentials.action[0].credential.id);
329
+ const tokenResponse = await this.tokenClient.getOAuth2Token(conn.credentials[0].credential.id);
213
330
  const token = tokenResponse.token?.accessToken;
214
331
  const tokenType = tokenResponse.token?.tokenType;
215
332
  if (!token) {
@@ -244,7 +361,7 @@ class VersoriRoundTripperFactory {
244
361
  else {
245
362
  init.headers = {
246
363
  ...init.headers,
247
- ['Authorization']: `${_tokenType()} ${token}`
364
+ ['Authorization']: `${_tokenType()} ${token}`,
248
365
  };
249
366
  }
250
367
  return fn(input, init);