@budibase/backend-core 3.2.0 → 3.2.2

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 (47) hide show
  1. package/dist/index.js +2181 -1429
  2. package/dist/index.js.map +4 -4
  3. package/dist/index.js.meta.json +1 -1
  4. package/dist/package.json +4 -4
  5. package/dist/plugins.js.meta.json +1 -1
  6. package/dist/src/environment.d.ts +2 -0
  7. package/dist/src/environment.js +3 -1
  8. package/dist/src/environment.js.map +1 -1
  9. package/dist/src/middleware/contentSecurityPolicy.d.ts +2 -0
  10. package/dist/src/middleware/contentSecurityPolicy.js +128 -0
  11. package/dist/src/middleware/contentSecurityPolicy.js.map +1 -0
  12. package/dist/src/middleware/index.d.ts +1 -0
  13. package/dist/src/middleware/index.js +3 -1
  14. package/dist/src/middleware/index.js.map +1 -1
  15. package/dist/src/queue/inMemoryQueue.d.ts +0 -2
  16. package/dist/src/queue/inMemoryQueue.js +1 -11
  17. package/dist/src/queue/inMemoryQueue.js.map +1 -1
  18. package/dist/src/queue/queue.js +6 -0
  19. package/dist/src/queue/queue.js.map +1 -1
  20. package/dist/tests/core/utilities/index.d.ts +1 -0
  21. package/dist/tests/core/utilities/index.js +2 -1
  22. package/dist/tests/core/utilities/index.js.map +1 -1
  23. package/dist/tests/core/utilities/queue.d.ts +2 -0
  24. package/dist/tests/core/utilities/queue.js +21 -0
  25. package/dist/tests/core/utilities/queue.js.map +1 -0
  26. package/dist/tests/core/utilities/testContainerUtils.d.ts +2 -0
  27. package/dist/tests/core/utilities/testContainerUtils.js +63 -0
  28. package/dist/tests/core/utilities/testContainerUtils.js.map +1 -1
  29. package/dist/tests/core/utilities/utils/index.d.ts +1 -0
  30. package/dist/tests/core/utilities/utils/index.js +2 -1
  31. package/dist/tests/core/utilities/utils/index.js.map +1 -1
  32. package/dist/tests/core/utilities/utils/queue.d.ts +3 -0
  33. package/dist/tests/core/utilities/utils/queue.js +37 -0
  34. package/dist/tests/core/utilities/utils/queue.js.map +1 -0
  35. package/package.json +4 -4
  36. package/src/cache/tests/docWritethrough.spec.ts +26 -24
  37. package/src/environment.ts +4 -0
  38. package/src/middleware/contentSecurityPolicy.ts +118 -0
  39. package/src/middleware/index.ts +1 -0
  40. package/src/middleware/tests/contentSecurityPolicy.spec.ts +75 -0
  41. package/src/queue/inMemoryQueue.ts +2 -12
  42. package/src/queue/queue.ts +10 -3
  43. package/tests/core/utilities/index.ts +1 -0
  44. package/tests/core/utilities/queue.ts +9 -0
  45. package/tests/core/utilities/testContainerUtils.ts +57 -0
  46. package/tests/core/utilities/utils/index.ts +1 -0
  47. package/tests/core/utilities/utils/queue.ts +27 -0
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.ip = exports.joiValidator = exports.querystringToBody = exports.errorHandling = exports.correlation = exports.pino = exports.builderOnly = exports.builderOrAdmin = exports.adminOnly = exports.csrf = exports.internalApi = exports.tenancy = exports.auditLog = exports.authenticated = exports.ssoCallbackUrl = exports.authError = exports.datasource = exports.oidc = exports.google = exports.local = void 0;
29
+ exports.ip = exports.joiValidator = exports.csp = exports.querystringToBody = exports.errorHandling = exports.correlation = exports.pino = exports.builderOnly = exports.builderOrAdmin = exports.adminOnly = exports.csrf = exports.internalApi = exports.tenancy = exports.auditLog = exports.authenticated = exports.ssoCallbackUrl = exports.authError = exports.datasource = exports.oidc = exports.google = exports.local = void 0;
30
30
  exports.local = __importStar(require("./passport/local"));
31
31
  exports.google = __importStar(require("./passport/sso/google"));
32
32
  exports.oidc = __importStar(require("./passport/sso/oidc"));
@@ -61,6 +61,8 @@ var errorHandling_1 = require("./errorHandling");
61
61
  Object.defineProperty(exports, "errorHandling", { enumerable: true, get: function () { return __importDefault(errorHandling_1).default; } });
62
62
  var querystringToBody_1 = require("./querystringToBody");
63
63
  Object.defineProperty(exports, "querystringToBody", { enumerable: true, get: function () { return __importDefault(querystringToBody_1).default; } });
64
+ var contentSecurityPolicy_1 = require("./contentSecurityPolicy");
65
+ Object.defineProperty(exports, "csp", { enumerable: true, get: function () { return __importDefault(contentSecurityPolicy_1).default; } });
64
66
  exports.joiValidator = __importStar(require("./joi-validator"));
65
67
  var ip_1 = require("./ip");
66
68
  Object.defineProperty(exports, "ip", { enumerable: true, get: function () { return __importDefault(ip_1).default; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/middleware/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAAyC;AACzC,gEAA+C;AAC/C,4DAA2C;AAC3C,+EAAgE;AAEnD,QAAA,UAAU,GAAG;IACxB,MAAM,EAAE,gBAAgB;CACzB,CAAA;AACD,0CAA4D;AAAnD,kGAAA,SAAS,OAAA;AAAE,uGAAA,cAAc,OAAA;AAClC,iDAA0D;AAAjD,+HAAA,OAAO,OAAiB;AACjC,uCAAgD;AAAvC,qHAAA,OAAO,OAAY;AAC5B,qCAA8C;AAArC,mHAAA,OAAO,OAAW;AAC3B,6CAAsD;AAA7C,2HAAA,OAAO,OAAe;AAC/B,+BAAwC;AAA/B,6GAAA,OAAO,OAAQ;AACxB,yCAAkD;AAAzC,uHAAA,OAAO,OAAa;AAC7B,mDAA4D;AAAnD,iIAAA,OAAO,OAAkB;AAClC,6CAAsD;AAA7C,2HAAA,OAAO,OAAe;AAC/B,yDAA4D;AAAnD,mHAAA,OAAO,OAAQ;AACxB,gEAA0E;AAAjE,0HAAA,OAAO,OAAe;AAC/B,iDAA0D;AAAjD,+HAAA,OAAO,OAAiB;AACjC,yDAAkE;AAAzD,uIAAA,OAAO,OAAqB;AACrC,gEAA+C;AAC/C,2BAAoC;AAA3B,yGAAA,OAAO,OAAM"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/middleware/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAAyC;AACzC,gEAA+C;AAC/C,4DAA2C;AAC3C,+EAAgE;AAEnD,QAAA,UAAU,GAAG;IACxB,MAAM,EAAE,gBAAgB;CACzB,CAAA;AACD,0CAA4D;AAAnD,kGAAA,SAAS,OAAA;AAAE,uGAAA,cAAc,OAAA;AAClC,iDAA0D;AAAjD,+HAAA,OAAO,OAAiB;AACjC,uCAAgD;AAAvC,qHAAA,OAAO,OAAY;AAC5B,qCAA8C;AAArC,mHAAA,OAAO,OAAW;AAC3B,6CAAsD;AAA7C,2HAAA,OAAO,OAAe;AAC/B,+BAAwC;AAA/B,6GAAA,OAAO,OAAQ;AACxB,yCAAkD;AAAzC,uHAAA,OAAO,OAAa;AAC7B,mDAA4D;AAAnD,iIAAA,OAAO,OAAkB;AAClC,6CAAsD;AAA7C,2HAAA,OAAO,OAAe;AAC/B,yDAA4D;AAAnD,mHAAA,OAAO,OAAQ;AACxB,gEAA0E;AAAjE,0HAAA,OAAO,OAAe;AAC/B,iDAA0D;AAAjD,+HAAA,OAAO,OAAiB;AACjC,yDAAkE;AAAzD,uIAAA,OAAO,OAAqB;AACrC,iEAAwD;AAA/C,6HAAA,OAAO,OAAO;AACvB,gEAA+C;AAC/C,2BAAoC;AAA3B,yGAAA,OAAO,OAAM"}
@@ -65,7 +65,5 @@ declare class InMemoryQueue implements Partial<Queue> {
65
65
  clean(): Promise<never[]>;
66
66
  getJob(): Promise<null>;
67
67
  on(): any;
68
- waitForCompletion(): Promise<void>;
69
- hasRunningJobs(): boolean;
70
68
  }
71
69
  export default InMemoryQueue;
@@ -138,7 +138,7 @@ class InMemoryQueue {
138
138
  else {
139
139
  pushMessage();
140
140
  }
141
- return {};
141
+ return { id: jobId };
142
142
  });
143
143
  }
144
144
  /**
@@ -187,16 +187,6 @@ class InMemoryQueue {
187
187
  // do nothing
188
188
  return this;
189
189
  }
190
- waitForCompletion() {
191
- return __awaiter(this, void 0, void 0, function* () {
192
- do {
193
- yield (0, utils_1.timeout)(50);
194
- } while (this.hasRunningJobs());
195
- });
196
- }
197
- hasRunningJobs() {
198
- return this._addCount > this._runCount;
199
- }
200
190
  }
201
191
  exports.default = InMemoryQueue;
202
192
  //# sourceMappingURL=inMemoryQueue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inMemoryQueue.js","sourceRoot":"","sources":["../../../src/queue/inMemoryQueue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inMemoryQueue.js","sourceRoot":"","sources":["../../../src/queue/inMemoryQueue.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,oDAA2B;AAC3B,oCAAgC;AAWhC;;;;;;;;GAQG;AACH,SAAS,MAAM,CAAC,KAAa,EAAE,OAAY,EAAE,IAAiB;IAC5D,OAAO;QACL,EAAE,EAAE,IAAA,aAAK,GAAE;QACX,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,OAAO;QACb,IAAI;KACL,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,aAAa;IASjB;;;;;OAKG;IACH,YAAY,IAAY,EAAE,IAAmB;QAC3C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QACjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QACjB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;QACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAM,CAAC,YAAY,EAAE,CAAA;QACzC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAA;QAClB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAA;QAClB,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAU,CAAA;IACxC,CAAC;IAED;;;;;;;OAOG;IACG,OAAO,CAAC,iBAA+B,EAAE,IAAU;;YACvD,IAAI,GAAG,OAAO,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAA;YACvE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,GAAS,EAAE;;gBACrC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;oBAC/B,OAAM;gBACR,CAAC;gBACD,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;gBAEhC,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;gBAEpB,SAAe,SAAS,CAAC,GAAQ;;wBAC/B,IAAI,CAAC;4BACH,MAAM,GAAG,CAAA;wBACX,CAAC;wBAAC,OAAO,CAAM,EAAE,CAAC;4BAChB,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;4BAEvD,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;wBAC5B,CAAC;oBACH,CAAC;iBAAA;gBAED,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;oBACtB,IAAI,CAAC;wBACH,MAAM,SAAS,CAAC,IAAI,CAAC,CAAA;oBACvB,CAAC;oBAAC,OAAO,CAAM,EAAE,CAAC;wBAChB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;oBAClB,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,SAAS,EAAE,CAAA;gBAChB,MAAM,KAAK,GAAG,MAAA,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,0CAAE,KAAK,0CAAE,QAAQ,EAAE,CAAA;gBAC1C,IAAI,KAAK,KAAI,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,0CAAE,gBAAgB,CAAA,EAAE,CAAC;oBACzC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBAClC,CAAC;YACH,CAAC,CAAA,CAAC,CAAA;QACJ,CAAC;KAAA;IAEK,OAAO;;YACX,OAAO,IAAW,CAAA;QACpB,CAAC;KAAA;IAED,2EAA2E;IAC3E;;;;;;;OAOG;IACG,GAAG,CAAC,IAAS,EAAE,IAAiB;;;YACpC,MAAM,KAAK,GAAG,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,0CAAE,QAAQ,EAAE,CAAA;YACrC,IAAI,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3C,OAAO,CAAC,GAAG,CAAC,+BAA+B,KAAK,EAAE,CAAC,CAAA;gBACnD,OAAM;YACR,CAAC;YAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,MAAM,oCAAoC,CAAA;YAC5C,CAAC;YACD,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAC/B,CAAC;YAED,MAAM,WAAW,GAAG,GAAG,EAAE;gBACvB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;gBACnD,IAAI,CAAC,SAAS,EAAE,CAAA;gBAChB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAC/B,CAAC,CAAA;YAED,MAAM,KAAK,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,CAAA;YACzB,IAAI,KAAK,EAAE,CAAC;gBACV,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;YAChC,CAAC;iBAAM,CAAC;gBACN,WAAW,EAAE,CAAA;YACf,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAS,CAAA;QAC7B,CAAC;KAAA;IAED;;OAEG;IACG,KAAK;8DAAI,CAAC;KAAA;IAEhB;;;OAGG;IACG,qBAAqB,CAAC,SAAiB;;YAC3C,8BAA8B;YAC9B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACxB,CAAC;KAAA;IAED;;OAEG;IACG,iBAAiB;;YACrB,OAAO,EAAE,CAAA;QACX,CAAC;KAAA;IAEK,UAAU,CAAC,QAAgB;;YAC/B,QAAQ;QACV,CAAC;KAAA;IAED;;OAEG;IACG,KAAK;;YACT,OAAO,EAAE,CAAA;QACX,CAAC;KAAA;IAEK,MAAM;;YACV,OAAO,IAAI,CAAA;QACb,CAAC;KAAA;IAED,EAAE;QACA,aAAa;QACb,OAAO,IAAW,CAAA;IACpB,CAAC;CACF;AAED,kBAAe,aAAa,CAAA"}
@@ -77,6 +77,12 @@ function createQueue(jobQueue, opts = {}) {
77
77
  if (!environment_1.default.isTest()) {
78
78
  queue = new bull_1.default(jobQueue, queueConfig);
79
79
  }
80
+ else if (process.env.BULL_TEST_REDIS_PORT &&
81
+ !isNaN(+process.env.BULL_TEST_REDIS_PORT)) {
82
+ queue = new bull_1.default(jobQueue, {
83
+ redis: { host: "localhost", port: +process.env.BULL_TEST_REDIS_PORT },
84
+ });
85
+ }
80
86
  else {
81
87
  queue = new inMemoryQueue_1.default(jobQueue, queueConfig);
82
88
  }
@@ -1 +1 @@
1
- {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../src/queue/queue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../src/queue/queue.ts"],"names":[],"mappings":"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"}
@@ -4,3 +4,4 @@ export { generator } from "./structures";
4
4
  export * as testContainerUtils from "./testContainerUtils";
5
5
  export * as utils from "./utils";
6
6
  export * from "./jestUtils";
7
+ export * as queue from "./queue";
@@ -26,7 +26,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
26
26
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.utils = exports.testContainerUtils = exports.generator = exports.structures = exports.mocks = void 0;
29
+ exports.queue = exports.utils = exports.testContainerUtils = exports.generator = exports.structures = exports.mocks = void 0;
30
30
  exports.mocks = __importStar(require("./mocks"));
31
31
  exports.structures = __importStar(require("./structures"));
32
32
  var structures_1 = require("./structures");
@@ -34,4 +34,5 @@ Object.defineProperty(exports, "generator", { enumerable: true, get: function ()
34
34
  exports.testContainerUtils = __importStar(require("./testContainerUtils"));
35
35
  exports.utils = __importStar(require("./utils"));
36
36
  __exportStar(require("./jestUtils"), exports);
37
+ exports.queue = __importStar(require("./queue"));
37
38
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../tests/core/utilities/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAgC;AAChC,2DAA0C;AAC1C,2CAAwC;AAA/B,uGAAA,SAAS,OAAA;AAClB,2EAA0D;AAC1D,iDAAgC;AAChC,8CAA2B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../tests/core/utilities/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAgC;AAChC,2DAA0C;AAC1C,2CAAwC;AAA/B,uGAAA,SAAS,OAAA;AAClB,2EAA0D;AAC1D,iDAAgC;AAChC,8CAA2B;AAC3B,iDAAgC"}
@@ -0,0 +1,2 @@
1
+ import { Queue } from "bull";
2
+ export declare function processMessages(queue: Queue): Promise<void>;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.processMessages = processMessages;
13
+ function processMessages(queue) {
14
+ return __awaiter(this, void 0, void 0, function* () {
15
+ do {
16
+ yield queue.whenCurrentJobsFinished();
17
+ } while (yield queue.count());
18
+ yield queue.whenCurrentJobsFinished();
19
+ });
20
+ }
21
+ //# sourceMappingURL=queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../../tests/core/utilities/queue.ts"],"names":[],"mappings":";;;;;;;;;;;AAEA,0CAMC;AAND,SAAsB,eAAe,CAAC,KAAY;;QAChD,GAAG,CAAC;YACF,MAAM,KAAK,CAAC,uBAAuB,EAAE,CAAA;QACvC,CAAC,QAAQ,MAAM,KAAK,CAAC,KAAK,EAAE,EAAC;QAE7B,MAAM,KAAK,CAAC,uBAAuB,EAAE,CAAA;IACvC,CAAC;CAAA"}
@@ -1,3 +1,4 @@
1
+ import { GenericContainer } from "testcontainers";
1
2
  interface ContainerInfo {
2
3
  Command: string;
3
4
  CreatedAt: string;
@@ -23,4 +24,5 @@ export interface Port {
23
24
  export declare function getExposedV4Ports(container: ContainerInfo): Port[];
24
25
  export declare function getExposedV4Port(container: ContainerInfo, port: number): number | undefined;
25
26
  export declare function setupEnv(...envs: any[]): void;
27
+ export declare function startContainer(container: GenericContainer): Promise<Port[]>;
26
28
  export {};
@@ -1,11 +1,22 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
12
  exports.getContainerByImage = getContainerByImage;
4
13
  exports.getContainerById = getContainerById;
5
14
  exports.getExposedV4Ports = getExposedV4Ports;
6
15
  exports.getExposedV4Port = getExposedV4Port;
7
16
  exports.setupEnv = setupEnv;
17
+ exports.startContainer = startContainer;
8
18
  const child_process_1 = require("child_process");
19
+ const lodash_1 = require("lodash");
9
20
  const IPV4_PORT_REGEX = new RegExp(`0\\.0\\.0\\.0:(\\d+)->(\\d+)/tcp`, "g");
10
21
  function getTestcontainers() {
11
22
  // We use --format json to make sure the output is nice and machine-readable,
@@ -76,4 +87,56 @@ function setupEnv(...envs) {
76
87
  }
77
88
  }
78
89
  }
90
+ function startContainer(container) {
91
+ return __awaiter(this, void 0, void 0, function* () {
92
+ const imageName = container.imageName.string;
93
+ let key = imageName;
94
+ if (imageName.includes("@sha256")) {
95
+ key = imageName.split("@")[0];
96
+ }
97
+ key = key.replace(/\//g, "-").replace(/:/g, "-");
98
+ container = container
99
+ .withReuse()
100
+ .withLabels({ "com.budibase": "true" })
101
+ .withName(`${key}_testcontainer`);
102
+ let startedContainer = undefined;
103
+ let lastError = undefined;
104
+ for (let i = 0; i < 10; i++) {
105
+ try {
106
+ // container.start() is not an idempotent operation, calling `start`
107
+ // modifies the internal state of a GenericContainer instance such that
108
+ // the hash it uses to determine reuse changes. We need to clone the
109
+ // container before calling start to ensure that we're using the same
110
+ // reuse hash every time.
111
+ const containerCopy = (0, lodash_1.cloneDeep)(container);
112
+ startedContainer = yield containerCopy.start();
113
+ lastError = undefined;
114
+ break;
115
+ }
116
+ catch (e) {
117
+ lastError = e;
118
+ yield new Promise(resolve => setTimeout(resolve, 1000));
119
+ }
120
+ }
121
+ if (!startedContainer) {
122
+ if (lastError) {
123
+ throw lastError;
124
+ }
125
+ throw new Error(`failed to start container: ${imageName}`);
126
+ }
127
+ const info = getContainerById(startedContainer.getId());
128
+ if (!info) {
129
+ throw new Error("Container not found");
130
+ }
131
+ // Some Docker runtimes, when you expose a port, will bind it to both
132
+ // 127.0.0.1 and ::1, so ipv4 and ipv6. The port spaces of ipv4 and ipv6
133
+ // addresses are not shared, and testcontainers will sometimes give you back
134
+ // the ipv6 port. There's no way to know that this has happened, and if you
135
+ // try to then connect to `localhost:port` you may attempt to bind to the v4
136
+ // address which could be unbound or even an entirely different container. For
137
+ // that reason, we don't use testcontainers' `getExposedPort` function,
138
+ // preferring instead our own method that guaranteed v4 ports.
139
+ return getExposedV4Ports(info);
140
+ });
141
+ }
79
142
  //# sourceMappingURL=testContainerUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"testContainerUtils.js","sourceRoot":"","sources":["../../../../tests/core/utilities/testContainerUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"testContainerUtils.js","sourceRoot":"","sources":["../../../../tests/core/utilities/testContainerUtils.ts"],"names":[],"mappings":"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"}
@@ -1 +1,2 @@
1
1
  export * as time from "./time";
2
+ export * as queue from "./queue";
@@ -23,6 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.time = void 0;
26
+ exports.queue = exports.time = void 0;
27
27
  exports.time = __importStar(require("./time"));
28
+ exports.queue = __importStar(require("./queue"));
28
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../tests/core/utilities/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAA8B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../tests/core/utilities/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAA8B;AAC9B,iDAAgC"}
@@ -0,0 +1,3 @@
1
+ import { Queue } from "bull";
2
+ export declare function useRealQueues(): Promise<void>;
3
+ export declare function processMessages(queue: Queue): Promise<void>;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.useRealQueues = useRealQueues;
13
+ exports.processMessages = processMessages;
14
+ const testcontainers_1 = require("testcontainers");
15
+ const testContainerUtils_1 = require("../testContainerUtils");
16
+ function useRealQueues() {
17
+ return __awaiter(this, void 0, void 0, function* () {
18
+ var _a;
19
+ const ports = yield (0, testContainerUtils_1.startContainer)(new testcontainers_1.GenericContainer("redis")
20
+ .withExposedPorts(6379)
21
+ .withWaitStrategy(testcontainers_1.Wait.forSuccessfulCommand(`redis-cli`).withStartupTimeout(10000)));
22
+ const port = (_a = ports.find(x => x.container === 6379)) === null || _a === void 0 ? void 0 : _a.host;
23
+ if (!port) {
24
+ throw new Error("Redis port not found");
25
+ }
26
+ process.env.BULL_TEST_REDIS_PORT = port.toString();
27
+ });
28
+ }
29
+ function processMessages(queue) {
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ do {
32
+ yield queue.whenCurrentJobsFinished();
33
+ } while (yield queue.count());
34
+ yield queue.whenCurrentJobsFinished();
35
+ });
36
+ }
37
+ //# sourceMappingURL=queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../../../tests/core/utilities/utils/queue.ts"],"names":[],"mappings":";;;;;;;;;;;AAIA,sCAcC;AAED,0CAMC;AAzBD,mDAAuD;AACvD,8DAAsD;AAEtD,SAAsB,aAAa;;;QACjC,MAAM,KAAK,GAAG,MAAM,IAAA,mCAAc,EAChC,IAAI,iCAAgB,CAAC,OAAO,CAAC;aAC1B,gBAAgB,CAAC,IAAI,CAAC;aACtB,gBAAgB,CACf,qBAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CACjE,CACJ,CAAA;QAED,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,0CAAE,IAAI,CAAA;QACxD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;QACzC,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;IACpD,CAAC;CAAA;AAED,SAAsB,eAAe,CAAC,KAAY;;QAChD,GAAG,CAAC;YACF,MAAM,KAAK,CAAC,uBAAuB,EAAE,CAAA;QACvC,CAAC,QAAQ,MAAM,KAAK,CAAC,KAAK,EAAE,EAAC;QAE7B,MAAM,KAAK,CAAC,uBAAuB,EAAE,CAAA;IACvC,CAAC;CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@budibase/backend-core",
3
- "version": "3.2.0",
3
+ "version": "3.2.2",
4
4
  "description": "Budibase backend core libraries used in server and worker",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/src/index.d.ts",
@@ -23,8 +23,8 @@
23
23
  "dependencies": {
24
24
  "@budibase/nano": "10.1.5",
25
25
  "@budibase/pouchdb-replication-stream": "1.2.11",
26
- "@budibase/shared-core": "3.2.0",
27
- "@budibase/types": "3.2.0",
26
+ "@budibase/shared-core": "3.2.2",
27
+ "@budibase/types": "3.2.2",
28
28
  "aws-cloudfront-sign": "3.0.2",
29
29
  "aws-sdk": "2.1030.0",
30
30
  "bcrypt": "5.1.0",
@@ -95,5 +95,5 @@
95
95
  }
96
96
  }
97
97
  },
98
- "gitHead": "03c8ffc9fe27435014a76bb4becd81278ad1ed9c"
98
+ "gitHead": "5199ae5347a0fddc03ea87db35583e4b9d5f5593"
99
99
  }
@@ -1,7 +1,12 @@
1
1
  import tk from "timekeeper"
2
2
 
3
3
  import _ from "lodash"
4
- import { DBTestConfiguration, generator, structures } from "../../../tests"
4
+ import {
5
+ DBTestConfiguration,
6
+ generator,
7
+ structures,
8
+ utils,
9
+ } from "../../../tests"
5
10
  import { getDB } from "../../db"
6
11
 
7
12
  import {
@@ -10,15 +15,14 @@ import {
10
15
  init,
11
16
  } from "../docWritethrough"
12
17
 
13
- import InMemoryQueue from "../../queue/inMemoryQueue"
14
-
15
18
  const initialTime = Date.now()
16
19
 
17
20
  async function waitForQueueCompletion() {
18
- const queue: InMemoryQueue = DocWritethroughProcessor.queue as never
19
- await queue.waitForCompletion()
21
+ await utils.queue.processMessages(DocWritethroughProcessor.queue)
20
22
  }
21
23
 
24
+ beforeAll(() => utils.queue.useRealQueues())
25
+
22
26
  describe("docWritethrough", () => {
23
27
  beforeAll(() => {
24
28
  init()
@@ -67,7 +71,7 @@ describe("docWritethrough", () => {
67
71
  const patch3 = generatePatchObject(3)
68
72
  await docWritethrough.patch(patch3)
69
73
 
70
- expect(await db.get(documentId)).toEqual({
74
+ expect(await db.tryGet(documentId)).toEqual({
71
75
  _id: documentId,
72
76
  ...patch1,
73
77
  ...patch2,
@@ -92,7 +96,7 @@ describe("docWritethrough", () => {
92
96
 
93
97
  await waitForQueueCompletion()
94
98
 
95
- expect(await db.get(documentId)).toEqual(
99
+ expect(await db.tryGet(documentId)).toEqual(
96
100
  expect.objectContaining({
97
101
  _id: documentId,
98
102
  ...patch1,
@@ -117,7 +121,7 @@ describe("docWritethrough", () => {
117
121
  await waitForQueueCompletion()
118
122
 
119
123
  expect(date1).not.toEqual(date2)
120
- expect(await db.get(documentId)).toEqual(
124
+ expect(await db.tryGet(documentId)).toEqual(
121
125
  expect.objectContaining({
122
126
  createdAt: date1.toISOString(),
123
127
  updatedAt: date2.toISOString(),
@@ -135,7 +139,7 @@ describe("docWritethrough", () => {
135
139
  await docWritethrough.patch(patch2)
136
140
 
137
141
  const keyToOverride = _.sample(Object.keys(patch1))!
138
- expect(await db.get(documentId)).toEqual(
142
+ expect(await db.tryGet(documentId)).toEqual(
139
143
  expect.objectContaining({
140
144
  [keyToOverride]: patch1[keyToOverride],
141
145
  })
@@ -150,7 +154,7 @@ describe("docWritethrough", () => {
150
154
  await docWritethrough.patch(patch3)
151
155
  await waitForQueueCompletion()
152
156
 
153
- expect(await db.get(documentId)).toEqual(
157
+ expect(await db.tryGet(documentId)).toEqual(
154
158
  expect.objectContaining({
155
159
  ...patch1,
156
160
  ...patch2,
@@ -180,14 +184,14 @@ describe("docWritethrough", () => {
180
184
  await secondDocWritethrough.patch(doc2Patch2)
181
185
  await waitForQueueCompletion()
182
186
 
183
- expect(await db.get(docWritethrough.docId)).toEqual(
187
+ expect(await db.tryGet(docWritethrough.docId)).toEqual(
184
188
  expect.objectContaining({
185
189
  ...doc1Patch,
186
190
  ...doc1Patch2,
187
191
  })
188
192
  )
189
193
 
190
- expect(await db.get(secondDocWritethrough.docId)).toEqual(
194
+ expect(await db.tryGet(secondDocWritethrough.docId)).toEqual(
191
195
  expect.objectContaining({
192
196
  ...doc2Patch,
193
197
  ...doc2Patch2,
@@ -203,7 +207,7 @@ describe("docWritethrough", () => {
203
207
  await docWritethrough.patch(initialPatch)
204
208
  await waitForQueueCompletion()
205
209
 
206
- expect(await db.get(documentId)).toEqual(
210
+ expect(await db.tryGet(documentId)).toEqual(
207
211
  expect.objectContaining(initialPatch)
208
212
  )
209
213
 
@@ -214,10 +218,10 @@ describe("docWritethrough", () => {
214
218
  await docWritethrough.patch(extraPatch)
215
219
  await waitForQueueCompletion()
216
220
 
217
- expect(await db.get(documentId)).toEqual(
221
+ expect(await db.tryGet(documentId)).toEqual(
218
222
  expect.objectContaining(extraPatch)
219
223
  )
220
- expect(await db.get(documentId)).not.toEqual(
224
+ expect(await db.tryGet(documentId)).not.toEqual(
221
225
  expect.objectContaining(initialPatch)
222
226
  )
223
227
  })
@@ -242,7 +246,7 @@ describe("docWritethrough", () => {
242
246
  expect(queueMessageSpy).toHaveBeenCalledTimes(5)
243
247
 
244
248
  await waitForQueueCompletion()
245
- expect(await db.get(documentId)).toEqual(
249
+ expect(await db.tryGet(documentId)).toEqual(
246
250
  expect.objectContaining(patches)
247
251
  )
248
252
 
@@ -250,7 +254,7 @@ describe("docWritethrough", () => {
250
254
  expect(queueMessageSpy).toHaveBeenCalledTimes(45)
251
255
 
252
256
  await waitForQueueCompletion()
253
- expect(await db.get(documentId)).toEqual(
257
+ expect(await db.tryGet(documentId)).toEqual(
254
258
  expect.objectContaining(patches)
255
259
  )
256
260
 
@@ -258,20 +262,18 @@ describe("docWritethrough", () => {
258
262
  expect(queueMessageSpy).toHaveBeenCalledTimes(55)
259
263
 
260
264
  await waitForQueueCompletion()
261
- expect(await db.get(documentId)).toEqual(
265
+ expect(await db.tryGet(documentId)).toEqual(
262
266
  expect.objectContaining(patches)
263
267
  )
264
268
  })
265
269
  })
266
270
 
267
- // This is not yet supported
268
- // eslint-disable-next-line jest/no-disabled-tests
269
- it.skip("patches will execute in order", async () => {
271
+ it("patches will execute in order", async () => {
270
272
  let incrementalValue = 0
271
273
  const keyToOverride = generator.word()
272
274
  async function incrementalPatches(count: number) {
273
275
  for (let i = 0; i < count; i++) {
274
- await docWritethrough.patch({ [keyToOverride]: incrementalValue++ })
276
+ await docWritethrough.patch({ [keyToOverride]: ++incrementalValue })
275
277
  }
276
278
  }
277
279
 
@@ -279,13 +281,13 @@ describe("docWritethrough", () => {
279
281
  await incrementalPatches(5)
280
282
 
281
283
  await waitForQueueCompletion()
282
- expect(await db.get(documentId)).toEqual(
284
+ expect(await db.tryGet(documentId)).toEqual(
283
285
  expect.objectContaining({ [keyToOverride]: 5 })
284
286
  )
285
287
 
286
288
  await incrementalPatches(40)
287
289
  await waitForQueueCompletion()
288
- expect(await db.get(documentId)).toEqual(
290
+ expect(await db.tryGet(documentId)).toEqual(
289
291
  expect.objectContaining({ [keyToOverride]: 45 })
290
292
  )
291
293
  })
@@ -225,6 +225,10 @@ const environment = {
225
225
  OPENAI_API_KEY: process.env.OPENAI_API_KEY,
226
226
  MIN_VERSION_WITHOUT_POWER_ROLE:
227
227
  process.env.MIN_VERSION_WITHOUT_POWER_ROLE || "3.0.0",
228
+ DISABLE_CONTENT_SECURITY_POLICY: process.env.DISABLE_CONTENT_SECURITY_POLICY,
229
+ // stopgap migration strategy until we can ensure backwards compat without unsafe-inline in CSP
230
+ DISABLE_CSP_UNSAFE_INLINE_SCRIPTS:
231
+ process.env.DISABLE_CSP_UNSAFE_INLINE_SCRIPTS,
228
232
  }
229
233
 
230
234
  export function setEnv(newEnvVars: Partial<typeof environment>): () => void {