@usebruno/js 0.26.0 → 0.28.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@usebruno/js",
3
- "version": "0.26.0",
3
+ "version": "0.28.0",
4
4
  "license": "MIT",
5
5
  "main": "src/index.js",
6
6
  "files": [
package/src/bru.js CHANGED
@@ -5,7 +5,7 @@ const { interpolate } = require('@usebruno/common');
5
5
  const variableNameRegex = /^[\w-.]*$/;
6
6
 
7
7
  class Bru {
8
- constructor(envVariables, runtimeVariables, processEnvVars, collectionPath, historyLogger, setVisualizations, secretVariables, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables) {
8
+ constructor(envVariables, runtimeVariables, processEnvVars, collectionPath, historyLogger, setVisualizations, secretVariables, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables) {
9
9
  this.envVariables = envVariables || {};
10
10
  this.runtimeVariables = runtimeVariables || {};
11
11
  this.processEnvVars = cloneDeep(processEnvVars || {});
@@ -14,6 +14,7 @@ class Bru {
14
14
  this.folderVariables = folderVariables || {};
15
15
  this.requestVariables = requestVariables || {};
16
16
  this.globalEnvironmentVariables = globalEnvironmentVariables || {};
17
+ this.oauth2CredentialVariables = oauth2CredentialVariables || {};
17
18
  this.collectionPath = collectionPath;
18
19
  this.historyLogger = historyLogger;
19
20
  this.setVisualizations = setVisualizations;
@@ -41,6 +42,7 @@ class Bru {
41
42
  ...this.envVariables,
42
43
  ...this.folderVariables,
43
44
  ...this.requestVariables,
45
+ ...this.oauth2CredentialVariables,
44
46
  ...this.runtimeVariables,
45
47
  process: {
46
48
  env: {
@@ -105,6 +107,10 @@ class Bru {
105
107
  this.globalEnvironmentVariables[key] = value;
106
108
  }
107
109
 
110
+ getOauth2CredentialVar(key) {
111
+ return this._interpolate(this.oauth2CredentialVariables[key]);
112
+ }
113
+
108
114
  hasVar(key) {
109
115
  return Object.hasOwn(this.runtimeVariables, key);
110
116
  }
@@ -13,6 +13,7 @@ class BrunoRequest {
13
13
  * It must be noted that the user cannot set these properties directly.
14
14
  * They should use the respective setter methods to set these properties.
15
15
  */
16
+ // todo: history logger needs to be properly refactored using the newer timeline implementation
16
17
  constructor(req, historyLogger) {
17
18
  this.req = req;
18
19
  this.url = req.url;
@@ -1,4 +1,5 @@
1
1
  const { get } = require('@usebruno/query');
2
+ const _ = require('lodash');
2
3
 
3
4
  class BrunoResponse {
4
5
  constructor(res) {
@@ -46,8 +47,9 @@ class BrunoResponse {
46
47
  return;
47
48
  }
48
49
 
49
- this.body = data;
50
- this.res.data = data;
50
+ const clonedData = _.cloneDeep(data);
51
+ this.res.data = clonedData;
52
+ this.body = clonedData;
51
53
  }
52
54
  }
53
55
 
@@ -246,6 +246,7 @@ class AssertRuntime {
246
246
 
247
247
  runAssertions(assertions, request, response, envVariables, runtimeVariables, processEnvVars, historyLogger, secretVariables) {
248
248
  const globalEnvironmentVariables = request?.globalEnvironmentVariables || {};
249
+ const oauth2CredentialVariables = request?.oauth2CredentialVariables || {};
249
250
  const collectionVariables = request?.collectionVariables || {};
250
251
  const folderVariables = request?.folderVariables || {};
251
252
  const requestVariables = request?.requestVariables || {};
@@ -265,7 +266,8 @@ class AssertRuntime {
265
266
  collectionVariables,
266
267
  folderVariables,
267
268
  requestVariables,
268
- globalEnvironmentVariables
269
+ globalEnvironmentVariables,
270
+ oauth2CredentialVariables
269
271
  );
270
272
  const req = new BrunoRequest(request, historyLogger);
271
273
  const res = createResponseParser(response);
@@ -282,6 +284,7 @@ class AssertRuntime {
282
284
  ...envVariables,
283
285
  ...folderVariables,
284
286
  ...requestVariables,
287
+ ...oauth2CredentialVariables,
285
288
  ...runtimeVariables,
286
289
  ...processEnvVars,
287
290
  ...bruContext
@@ -57,11 +57,12 @@ class ScriptRuntime {
57
57
  visualizations.push(data);
58
58
  }
59
59
  const globalEnvironmentVariables = request?.globalEnvironmentVariables || {};
60
+ const oauth2CredentialVariables = request?.oauth2CredentialVariables || {};
60
61
  const collectionVariables = request?.collectionVariables || {};
61
62
  const folderVariables = request?.folderVariables || {};
62
63
  const requestVariables = request?.requestVariables || {};
63
- const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, historyLogger, setVisualizations, secretVariables, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables);
64
- const req = new BrunoRequest(request, historyLogger);
64
+ const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, historyLogger, setVisualizations, secretVariables, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables);
65
+ const req = new BrunoRequest(request);
65
66
  const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false);
66
67
  const moduleWhitelist = get(scriptingConfig, 'moduleWhitelist', []);
67
68
  const additionalContextRoots = get(scriptingConfig, 'additionalContextRoots', []);
@@ -129,6 +130,7 @@ class ScriptRuntime {
129
130
  sandbox: context,
130
131
  require: {
131
132
  context: 'sandbox',
133
+ builtin: [ "*" ],
132
134
  external: true,
133
135
  root: [collectionPath, ...additionalContextRootsAbsolute],
134
136
  mock: {
@@ -196,14 +198,20 @@ class ScriptRuntime {
196
198
  visualizations.push(data);
197
199
  }
198
200
  const globalEnvironmentVariables = request?.globalEnvironmentVariables || {};
201
+ const oauth2CredentialVariables = request?.oauth2CredentialVariables || {};
199
202
  const collectionVariables = request?.collectionVariables || {};
200
203
  const folderVariables = request?.folderVariables || {};
201
204
  const requestVariables = request?.requestVariables || {};
202
- const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, historyLogger, setVisualizations, secretVariables, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables);
203
- const req = new BrunoRequest(request, historyLogger);
205
+ const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, historyLogger, setVisualizations, secretVariables, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables);
206
+ const req = new BrunoRequest(request);
204
207
  const res = new BrunoResponse(response);
205
208
  const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false);
206
209
  const moduleWhitelist = get(scriptingConfig, 'moduleWhitelist', []);
210
+ const additionalContextRoots = get(scriptingConfig, 'additionalContextRoots', []);
211
+ const additionalContextRootsAbsolute = lodash
212
+ .chain(additionalContextRoots)
213
+ .map((acr) => (acr.startsWith('/') ? acr : path.join(collectionPath, acr)))
214
+ .value();
207
215
 
208
216
  const whitelistedModules = {};
209
217
 
@@ -265,8 +273,9 @@ class ScriptRuntime {
265
273
  sandbox: context,
266
274
  require: {
267
275
  context: 'sandbox',
276
+ builtin: [ "*" ],
268
277
  external: true,
269
- root: [collectionPath],
278
+ root: [collectionPath, ...additionalContextRootsAbsolute],
270
279
  mock: {
271
280
  // node libs
272
281
  path,
@@ -73,11 +73,12 @@ class TestRuntime {
73
73
  runRequestByItemPathname
74
74
  ) {
75
75
  const globalEnvironmentVariables = request?.globalEnvironmentVariables || {};
76
+ const oauth2CredentialVariables = request?.oauth2CredentialVariables || {};
76
77
  const collectionVariables = request?.collectionVariables || {};
77
78
  const folderVariables = request?.folderVariables || {};
78
79
  const requestVariables = request?.requestVariables || {};
79
80
  const assertionResults = request?.assertionResults || [];
80
- const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, historyLogger, undefined, secretVariables, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables);
81
+ const bru = new Bru(envVariables, runtimeVariables, processEnvVars, collectionPath, historyLogger, undefined, secretVariables, collectionVariables, folderVariables, requestVariables, globalEnvironmentVariables, oauth2CredentialVariables);
81
82
  const req = new BrunoRequest(request, historyLogger);
82
83
  const res = new BrunoResponse(response);
83
84
  const allowScriptFilesystemAccess = get(scriptingConfig, 'filesystemAccess.allow', false);
@@ -53,6 +53,12 @@ const addBruShimToContext = (vm, bru) => {
53
53
  vm.setProp(bruObject, 'getGlobalEnvVar', getGlobalEnvVar);
54
54
  getGlobalEnvVar.dispose();
55
55
 
56
+ let getOauth2CredentialVar = vm.newFunction('getOauth2CredentialVar', function (key) {
57
+ return marshallToVm(bru.getOauth2CredentialVar(vm.dump(key)), vm);
58
+ });
59
+ vm.setProp(bruObject, 'getOauth2CredentialVar', getOauth2CredentialVar);
60
+ getOauth2CredentialVar.dispose();
61
+
56
62
  let setGlobalEnvVar = vm.newFunction('setGlobalEnvVar', function (key, value) {
57
63
  bru.setGlobalEnvVar(vm.dump(key), vm.dump(value));
58
64
  });