@abyss-project/main 34.1.1 → 34.2.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.
Files changed (33) hide show
  1. package/dist/constants/enforcement-registry.constants.js.map +1 -1
  2. package/dist/server/archive/archive-seal.util.d.ts +7 -0
  3. package/dist/server/archive/archive-seal.util.js +75 -0
  4. package/dist/server/archive/archive-seal.util.js.map +1 -0
  5. package/dist/server/archive/archive-stream.service.d.ts +31 -0
  6. package/dist/server/archive/archive-stream.service.js +259 -0
  7. package/dist/server/archive/archive-stream.service.js.map +1 -0
  8. package/dist/server/archive/archive-upload-session.d.ts +5 -0
  9. package/dist/server/archive/archive-upload-session.js +3 -0
  10. package/dist/server/archive/archive-upload-session.js.map +1 -0
  11. package/dist/server/archive/index.d.ts +4 -0
  12. package/dist/server/archive/index.js +21 -0
  13. package/dist/server/archive/index.js.map +1 -0
  14. package/dist/server/archive/tests/archive-fixture.spec.d.ts +1 -0
  15. package/dist/server/archive/tests/archive-fixture.spec.js +84 -0
  16. package/dist/server/archive/tests/archive-fixture.spec.js.map +1 -0
  17. package/dist/server/archive/tests/archive-seal.util.spec.d.ts +1 -0
  18. package/dist/server/archive/tests/archive-seal.util.spec.js +98 -0
  19. package/dist/server/archive/tests/archive-seal.util.spec.js.map +1 -0
  20. package/dist/server/archive/tests/archive-stream.service.spec.d.ts +1 -0
  21. package/dist/server/archive/tests/archive-stream.service.spec.js +309 -0
  22. package/dist/server/archive/tests/archive-stream.service.spec.js.map +1 -0
  23. package/dist/server/archive/zstd.util.d.ts +19 -0
  24. package/dist/server/archive/zstd.util.js +43 -0
  25. package/dist/server/archive/zstd.util.js.map +1 -0
  26. package/dist/server/index.d.ts +1 -0
  27. package/dist/server/index.js +1 -0
  28. package/dist/server/index.js.map +1 -1
  29. package/dist/types/enum/email-type.enum.d.ts +1 -0
  30. package/dist/types/enum/email-type.enum.js +1 -0
  31. package/dist/types/enum/email-type.enum.js.map +1 -1
  32. package/dist/types/interface/models/billing-daily-snapshot.model.d.ts +2 -0
  33. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"enforcement-registry.constants.js","sourceRoot":"","sources":["../../src/constants/enforcement-registry.constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"enforcement-registry.constants.js","sourceRoot":"","sources":["../../src/constants/enforcement-registry.constants.ts"],"names":[],"mappings":";;;AAAA,uFAAwE;AAkH3D,QAAA,oBAAoB,GAA4C;IAE3E,CAAC,yCAAa,CAAC,qBAAqB,CAAC,EAAE;QACrC,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,kBAAkB;QAC9B,IAAI,EAAE,iBAAiB;KACxB;IACD,CAAC,yCAAa,CAAC,qBAAqB,CAAC,EAAE;QACrC,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,kBAAkB;QAC9B,IAAI,EAAE,iBAAiB;KACxB;IACD,CAAC,yCAAa,CAAC,oBAAoB,CAAC,EAAE;QACpC,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,kBAAkB;QAC9B,IAAI,EAAE,iBAAiB;KACxB;IACD,CAAC,yCAAa,CAAC,6BAA6B,CAAC,EAAE;QAC7C,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,kBAAkB;QAC9B,IAAI,EAAE,iBAAiB;KACxB;IACD,CAAC,yCAAa,CAAC,UAAU,CAAC,EAAE;QAC1B,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,kBAAkB;QAC9B,IAAI,EAAE,iBAAiB;KACxB;IACD,CAAC,yCAAa,CAAC,UAAU,CAAC,EAAE;QAC1B,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,kBAAkB;QAC9B,IAAI,EAAE,YAAY;KACnB;IACD,CAAC,yCAAa,CAAC,wBAAwB,CAAC,EAAE;QACxC,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,kBAAkB;QAC9B,IAAI,EAAE,eAAe;KACtB;IACD,CAAC,yCAAa,CAAC,qBAAqB,CAAC,EAAE;QACrC,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,uBAAuB;QACnC,IAAI,EAAE,iBAAiB;KACxB;IACD,CAAC,yCAAa,CAAC,iBAAiB,CAAC,EAAE;QACjC,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,kBAAkB;QAC9B,IAAI,EAAE,aAAa;KACpB;IACD,CAAC,yCAAa,CAAC,qBAAqB,CAAC,EAAE;QACrC,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,sBAAsB;QAClC,IAAI,EAAE,gBAAgB;KACvB;IACD,CAAC,yCAAa,CAAC,2BAA2B,CAAC,EAAE;QAC3C,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,mBAAmB;QAC/B,IAAI,EAAE,eAAe;KACtB;IACD,CAAC,yCAAa,CAAC,WAAW,CAAC,EAAE;QAC3B,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,oBAAoB;QAChC,IAAI,EAAE,eAAe;KACtB;IACD,CAAC,yCAAa,CAAC,YAAY,CAAC,EAAE;QAC5B,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,2BAA2B;QACvC,IAAI,EAAE,eAAe;KACtB;IACD,CAAC,yCAAa,CAAC,sBAAsB,CAAC,EAAE;QACtC,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,4BAA4B;QACxC,IAAI,EAAE,eAAe;KACtB;IACD,CAAC,yCAAa,CAAC,gCAAgC,CAAC,EAAE;QAChD,IAAI,EAAE,SAAS;QAIf,UAAU,EAAE,gCAAgC;QAC5C,IAAI,EAAE,eAAe;KACtB;IACD,CAAC,yCAAa,CAAC,mCAAmC,CAAC,EAAE;QACnD,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,4BAA4B;QACxC,IAAI,EAAE,eAAe;KACtB;IACD,CAAC,yCAAa,CAAC,2BAA2B,CAAC,EAAE;QAC3C,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,2BAA2B;QACvC,IAAI,EAAE,eAAe;KACtB;IAID,CAAC,yCAAa,CAAC,2BAA2B,CAAC,EAAE;QAC3C,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,2BAA2B;QACvC,IAAI,EAAE,eAAe;KACtB;IAKD,CAAC,yCAAa,CAAC,wBAAwB,CAAC,EAAE;QACxC,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,8BAA8B;QAC1C,IAAI,EAAE,eAAe;KACtB;IAGD,CAAC,yCAAa,CAAC,cAAc,CAAC,EAAE;QAC9B,IAAI,EAAE,mBAAmB;QACzB,UAAU,EAAE,uBAAuB;QACnC,IAAI,EAAE,YAAY;KACnB;IACD,CAAC,yCAAa,CAAC,cAAc,CAAC,EAAE;QAC9B,IAAI,EAAE,mBAAmB;QACzB,UAAU,EAAE,6BAA6B;QACzC,IAAI,EAAE,YAAY;KACnB;IACD,CAAC,yCAAa,CAAC,UAAU,CAAC,EAAE;QAC1B,IAAI,EAAE,mBAAmB;QACzB,UAAU,EAAE,oBAAoB;QAChC,IAAI,EAAE,YAAY;KACnB;IACD,CAAC,yCAAa,CAAC,aAAa,CAAC,EAAE;QAC7B,IAAI,EAAE,mBAAmB;QACzB,UAAU,EAAE,8CAA8C;QAC1D,IAAI,EAAE,YAAY;KACnB;IAGD,CAAC,yCAAa,CAAC,sBAAsB,CAAC,EAAE;QACtC,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,qBAAqB;QACjC,IAAI,EAAE,YAAY;KACnB;IACD,CAAC,yCAAa,CAAC,uBAAuB,CAAC,EAAE;QACvC,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,mBAAmB;QAC/B,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,uIAAuI;KAC9I;IACD,CAAC,yCAAa,CAAC,cAAc,CAAC,EAAE;QAC9B,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,gBAAgB;QAC5B,IAAI,EAAE,eAAe;KACtB;IACD,CAAC,yCAAa,CAAC,kBAAkB,CAAC,EAAE;QAClC,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,kBAAkB;QAC9B,IAAI,EAAE,eAAe;KACtB;IACD,CAAC,yCAAa,CAAC,uBAAuB,CAAC,EAAE;QACvC,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,kBAAkB;QAC9B,IAAI,EAAE,eAAe;KACtB;IACD,CAAC,yCAAa,CAAC,kBAAkB,CAAC,EAAE;QAClC,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,qBAAqB;QACjC,IAAI,EAAE,YAAY;KACnB;IACD,CAAC,yCAAa,CAAC,qBAAqB,CAAC,EAAE;QACrC,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,eAAe;QAC3B,IAAI,EAAE,aAAa;QAWnB,IAAI,EAAE,0FAA0F;KACjG;IACD,CAAC,yCAAa,CAAC,2BAA2B,CAAC,EAAE;QAC3C,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,sBAAsB;QAClC,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,2PAA2P;KAClQ;IACD,CAAC,yCAAa,CAAC,uBAAuB,CAAC,EAAE;QACvC,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,iCAAiC;QAC7C,IAAI,EAAE,eAAe;KACtB;IACD,CAAC,yCAAa,CAAC,2BAA2B,CAAC,EAAE;QAC3C,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,6BAA6B;QACzC,IAAI,EAAE,eAAe;KACtB;IACD,CAAC,yCAAa,CAAC,8BAA8B,CAAC,EAAE;QAC9C,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,8BAA8B;QAC1C,IAAI,EAAE,eAAe;KACtB;IACD,CAAC,yCAAa,CAAC,mCAAmC,CAAC,EAAE;QAUnD,IAAI,EAAE,iBAAiB;QACvB,UAAU,EAAE,0BAA0B;QACtC,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,uKAAuK;KAC9K;IACD,CAAC,yCAAa,CAAC,4BAA4B,CAAC,EAAE;QAC5C,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,sBAAsB;QAClC,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,8HAA8H;KACrI;IAMD,CAAC,yCAAa,CAAC,kBAAkB,CAAC,EAAE;QAClC,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,0DAA0D;QACtE,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,iKAAiK;KACxK;IAOD,CAAC,yCAAa,CAAC,YAAY,CAAC,EAAE;QAC5B,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,sBAAsB;QAClC,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,0uBAA0uB;KACjvB;IAGD,CAAC,yCAAa,CAAC,kBAAkB,CAAC,EAAE;QAClC,IAAI,EAAE,cAAc;QACpB,UAAU,EAAE,qBAAqB;QACjC,IAAI,EAAE,YAAY;KACnB;IAGD,CAAC,yCAAa,CAAC,0BAA0B,CAAC,EAAE;QAC1C,IAAI,EAAE,iBAAiB;QACvB,UAAU,EAAE,oBAAoB;QAChC,IAAI,EAAE,iBAAiB;KACxB;IACD,CAAC,yCAAa,CAAC,sBAAsB,CAAC,EAAE;QACtC,IAAI,EAAE,iBAAiB;QACvB,UAAU,EAAE,yBAAyB;QACrC,IAAI,EAAE,iBAAiB;KACxB;IACD,CAAC,yCAAa,CAAC,UAAU,CAAC,EAAE;QAC1B,IAAI,EAAE,iBAAiB;QACvB,UAAU,EAAE,8BAA8B;QAC1C,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,gGAAgG;KACvG;IACD,CAAC,yCAAa,CAAC,6BAA6B,CAAC,EAAE;QAC7C,IAAI,EAAE,iBAAiB;QACvB,UAAU,EAAE,wBAAwB;QACpC,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,8LAA8L;KACrM;IACD,CAAC,yCAAa,CAAC,uBAAuB,CAAC,EAAE;QACvC,IAAI,EAAE,iBAAiB;QACvB,UAAU,EAAE,wBAAwB;QACpC,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,wLAAwL;KAC/L;IACD,CAAC,yCAAa,CAAC,oBAAoB,CAAC,EAAE;QACpC,IAAI,EAAE,iBAAiB;QACvB,UAAU,EAAE,mBAAmB;QAC/B,IAAI,EAAE,YAAY;KACnB;IACD,CAAC,yCAAa,CAAC,eAAe,CAAC,EAAE;QAC/B,IAAI,EAAE,iBAAiB;QACvB,UAAU,EAAE,eAAe;QAC3B,IAAI,EAAE,YAAY;KACnB;IACD,CAAC,yCAAa,CAAC,gCAAgC,CAAC,EAAE;QAChD,IAAI,EAAE,iBAAiB;QAKvB,UAAU,EAAE,+BAA+B;QAC3C,IAAI,EAAE,eAAe;KACtB;IACD,CAAC,yCAAa,CAAC,oBAAoB,CAAC,EAAE;QACpC,IAAI,EAAE,iBAAiB;QACvB,UAAU,EAAE,+BAA+B;QAC3C,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,2GAA2G;KAClH;IACD,CAAC,yCAAa,CAAC,kBAAkB,CAAC,EAAE;QAClC,IAAI,EAAE,iBAAiB;QACvB,UAAU,EAAE,4BAA4B;QACxC,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,mGAAmG;KAC1G;IAGD,CAAC,yCAAa,CAAC,sBAAsB,CAAC,EAAE;QACtC,IAAI,EAAE,eAAe;QACrB,UAAU,EAAE,UAAU;QACtB,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,qGAAqG;KAC5G;IACD,CAAC,yCAAa,CAAC,oBAAoB,CAAC,EAAE;QACpC,IAAI,EAAE,eAAe;QACrB,UAAU,EAAE,6BAA6B;QACzC,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,oHAAoH;KAC3H;IACD,CAAC,yCAAa,CAAC,cAAc,CAAC,EAAE;QAC9B,IAAI,EAAE,eAAe;QACrB,UAAU,EAAE,yBAAyB;QACrC,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,05BAA05B;KACj6B;IAOD,CAAC,yCAAa,CAAC,4BAA4B,CAAC,EAAE;QAC5C,IAAI,EAAE,eAAe;QACrB,UAAU,EAAE,sCAAsC;QAClD,IAAI,EAAE,YAAY;KACnB;IACD,CAAC,yCAAa,CAAC,oBAAoB,CAAC,EAAE;QACpC,IAAI,EAAE,eAAe;QACrB,UAAU,EAAE,0BAA0B;QACtC,IAAI,EAAE,YAAY;KACnB;IACD,CAAC,yCAAa,CAAC,4BAA4B,CAAC,EAAE;QAC5C,IAAI,EAAE,eAAe;QACrB,UAAU,EAAE,mDAAmD;QAC/D,IAAI,EAAE,eAAe;QAIrB,IAAI,EAAE,wHAAwH;KAC/H;IAID,CAAC,yCAAa,CAAC,2BAA2B,CAAC,EAAE;QAC3C,IAAI,EAAE,eAAe;QACrB,UAAU,EAAE,6BAA6B;QACzC,IAAI,EAAE,eAAe;KACtB;IACD,CAAC,yCAAa,CAAC,qBAAqB,CAAC,EAAE;QACrC,IAAI,EAAE,eAAe;QACrB,UAAU,EAAE,6BAA6B;QACzC,IAAI,EAAE,eAAe;KACtB;IACD,CAAC,yCAAa,CAAC,wBAAwB,CAAC,EAAE;QACxC,IAAI,EAAE,eAAe;QACrB,UAAU,EAAE,8BAA8B;QAC1C,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,wHAAwH;KAC/H;CAOF,CAAC;AAuBW,QAAA,2BAA2B,GAAsB;IAC5D,kBAAkB;IAClB,kBAAkB;IAClB,uBAAuB;IACvB,kBAAkB;IAClB,sBAAsB;IACtB,oBAAoB;IACpB,2BAA2B;IAC3B,4BAA4B;IAC5B,qCAAqC;IACrC,mCAAmC;IACnC,gCAAgC;IAChC,gCAAgC;IAChC,8BAA8B;CAC/B,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare const ARCHIVE_KEY_BYTES = 32;
2
+ export declare const seal: (plaintext: Buffer, key: Buffer) => Buffer;
3
+ export declare const unseal: (payload: Buffer, key: Buffer) => Buffer;
4
+ export declare const generateArchiveKey: () => Buffer;
5
+ export declare const parseMasterKey: (raw: string, variableName: string) => Buffer;
6
+ export declare const wrapKey: (organizationKey: Buffer, masterKey: Buffer) => string;
7
+ export declare const unwrapKey: (wrappedKey: string, masterKey: Buffer) => Buffer;
@@ -0,0 +1,75 @@
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 () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.unwrapKey = exports.wrapKey = exports.parseMasterKey = exports.generateArchiveKey = exports.unseal = exports.seal = exports.ARCHIVE_KEY_BYTES = void 0;
37
+ const crypto = __importStar(require("crypto"));
38
+ const ALGORITHM = 'aes-256-gcm';
39
+ exports.ARCHIVE_KEY_BYTES = 32;
40
+ const IV_BYTES = 12;
41
+ const AUTH_TAG_BYTES = 16;
42
+ const seal = (plaintext, key) => {
43
+ const iv = crypto.randomBytes(IV_BYTES);
44
+ const cipher = crypto.createCipheriv(ALGORITHM, key, iv);
45
+ const ciphertext = Buffer.concat([cipher.update(plaintext), cipher.final()]);
46
+ return Buffer.concat([iv, cipher.getAuthTag(), ciphertext]);
47
+ };
48
+ exports.seal = seal;
49
+ const unseal = (payload, key) => {
50
+ if (payload.length < IV_BYTES + AUTH_TAG_BYTES) {
51
+ throw new Error('Malformed sealed payload');
52
+ }
53
+ const iv = payload.subarray(0, IV_BYTES);
54
+ const authTag = payload.subarray(IV_BYTES, IV_BYTES + AUTH_TAG_BYTES);
55
+ const ciphertext = payload.subarray(IV_BYTES + AUTH_TAG_BYTES);
56
+ const decipher = crypto.createDecipheriv(ALGORITHM, key, iv);
57
+ decipher.setAuthTag(authTag);
58
+ return Buffer.concat([decipher.update(ciphertext), decipher.final()]);
59
+ };
60
+ exports.unseal = unseal;
61
+ const generateArchiveKey = () => crypto.randomBytes(exports.ARCHIVE_KEY_BYTES);
62
+ exports.generateArchiveKey = generateArchiveKey;
63
+ const parseMasterKey = (raw, variableName) => {
64
+ const key = Buffer.from(raw, 'hex');
65
+ if (key.length !== exports.ARCHIVE_KEY_BYTES) {
66
+ throw new Error(`${variableName} must be ${exports.ARCHIVE_KEY_BYTES} bytes of hex (${exports.ARCHIVE_KEY_BYTES * 2} characters), got ${key.length} bytes`);
67
+ }
68
+ return key;
69
+ };
70
+ exports.parseMasterKey = parseMasterKey;
71
+ const wrapKey = (organizationKey, masterKey) => (0, exports.seal)(organizationKey, masterKey).toString('base64');
72
+ exports.wrapKey = wrapKey;
73
+ const unwrapKey = (wrappedKey, masterKey) => (0, exports.unseal)(Buffer.from(wrappedKey, 'base64'), masterKey);
74
+ exports.unwrapKey = unwrapKey;
75
+ //# sourceMappingURL=archive-seal.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-seal.util.js","sourceRoot":"","sources":["../../../src/server/archive/archive-seal.util.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AAUjC,MAAM,SAAS,GAAG,aAAa,CAAC;AACnB,QAAA,iBAAiB,GAAG,EAAE,CAAC;AACpC,MAAM,QAAQ,GAAG,EAAE,CAAC;AACpB,MAAM,cAAc,GAAG,EAAE,CAAC;AAGnB,MAAM,IAAI,GAAG,CAAC,SAAiB,EAAE,GAAW,EAAU,EAAE;IAC7D,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAE7E,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;AAC9D,CAAC,CAAC;AANW,QAAA,IAAI,QAMf;AAEK,MAAM,MAAM,GAAG,CAAC,OAAe,EAAE,GAAW,EAAU,EAAE;IAC7D,IAAI,OAAO,CAAC,MAAM,GAAG,QAAQ,GAAG,cAAc,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,cAAc,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,GAAG,cAAc,CAAC,CAAC;IAE/D,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAC7D,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAK7B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACxE,CAAC,CAAC;AAhBW,QAAA,MAAM,UAgBjB;AAGK,MAAM,kBAAkB,GAAG,GAAW,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,yBAAiB,CAAC,CAAC;AAAzE,QAAA,kBAAkB,sBAAuD;AAM/E,MAAM,cAAc,GAAG,CAAC,GAAW,EAAE,YAAoB,EAAU,EAAE;IAC1E,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAEpC,IAAI,GAAG,CAAC,MAAM,KAAK,yBAAiB,EAAE,CAAC;QAGrC,MAAM,IAAI,KAAK,CACb,GAAG,YAAY,YAAY,yBAAiB,kBAC1C,yBAAiB,GAAG,CACtB,qBAAqB,GAAG,CAAC,MAAM,QAAQ,CACxC,CAAC;IACJ,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAdW,QAAA,cAAc,kBAczB;AAGK,MAAM,OAAO,GAAG,CAAC,eAAuB,EAAE,SAAiB,EAAU,EAAE,CAC5E,IAAA,YAAI,EAAC,eAAe,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AADzC,QAAA,OAAO,WACkC;AAE/C,MAAM,SAAS,GAAG,CAAC,UAAkB,EAAE,SAAiB,EAAU,EAAE,CACzE,IAAA,cAAM,EAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;AAD1C,QAAA,SAAS,aACiC"}
@@ -0,0 +1,31 @@
1
+ import type { ArchiveUploadSession } from './archive-upload-session';
2
+ export type ArchiveRow = Record<string, unknown>;
3
+ export interface ArchivePart {
4
+ partNumber: number;
5
+ bytes: number;
6
+ rowCount: number;
7
+ firstTimestamp: string;
8
+ }
9
+ export interface ArchiveWriteResult {
10
+ parts: ArchivePart[];
11
+ totalRows: number;
12
+ totalBytes: number;
13
+ sha256: string;
14
+ }
15
+ export interface ArchiveWriteOptions {
16
+ key: Buffer;
17
+ session: Pick<ArchiveUploadSession, 'putPart'>;
18
+ timeColumn: string;
19
+ compressionLevel: number;
20
+ partMaxBytes: number;
21
+ }
22
+ export declare const ARCHIVE_PART_MAX_BYTES: number;
23
+ export declare const ARCHIVE_MAX_PARTS = 10000;
24
+ export declare const ARCHIVE_ROW_BATCH_SIZE = 1000;
25
+ export declare const SEAL_OVERHEAD_BYTES: number;
26
+ export declare const writeArchiveStream: (batches: AsyncIterable<ArchiveRow[]>, options: ArchiveWriteOptions) => Promise<ArchiveWriteResult>;
27
+ export declare function decodeArchiveFrame(sealedFrame: Buffer, key: Buffer): AsyncGenerator<ArchiveRow>;
28
+ export declare function splitArchiveFrames(source: AsyncIterable<Buffer>, parts: ArchivePart[]): AsyncGenerator<{
29
+ part: ArchivePart;
30
+ sealed: Buffer;
31
+ }>;
@@ -0,0 +1,259 @@
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 () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.writeArchiveStream = exports.SEAL_OVERHEAD_BYTES = exports.ARCHIVE_ROW_BATCH_SIZE = exports.ARCHIVE_MAX_PARTS = exports.ARCHIVE_PART_MAX_BYTES = void 0;
37
+ exports.decodeArchiveFrame = decodeArchiveFrame;
38
+ exports.splitArchiveFrames = splitArchiveFrames;
39
+ const crypto = __importStar(require("crypto"));
40
+ const events_1 = require("events");
41
+ const promises_1 = require("stream/promises");
42
+ const zstd_util_1 = require("./zstd.util");
43
+ const archive_seal_util_1 = require("./archive-seal.util");
44
+ exports.ARCHIVE_PART_MAX_BYTES = 16 * 1024 * 1024;
45
+ exports.ARCHIVE_MAX_PARTS = 10_000;
46
+ exports.ARCHIVE_ROW_BATCH_SIZE = 1000;
47
+ exports.SEAL_OVERHEAD_BYTES = 12 + 16;
48
+ const NDJSON_SEPARATOR = '\n';
49
+ const NDJSON_SEPARATOR_BYTE = 0x0a;
50
+ const COMPRESSOR_WRITE_BYTES = 64 * 1024;
51
+ const ZSTD_BLOCK_SIZE_MAX = 128 * 1024;
52
+ const ZSTD_FRAME_EPILOGUE_BYTES = 3 + 4;
53
+ const zstdCompressBound = (size) => size +
54
+ Math.floor(size / 256) +
55
+ (size < ZSTD_BLOCK_SIZE_MAX ? Math.floor((ZSTD_BLOCK_SIZE_MAX - size) / 2048) : 0);
56
+ const timestampOf = (row, timeColumn) => {
57
+ const value = row[timeColumn];
58
+ const date = value instanceof Date ? value : typeof value === 'string' ? new Date(value) : undefined;
59
+ if (!date || Number.isNaN(date.getTime())) {
60
+ throw new Error(`Archive row has no usable ${timeColumn} (got ${String(value)})`);
61
+ }
62
+ return date;
63
+ };
64
+ class ZstdFrame {
65
+ constructor(compressionLevel, firstTimestamp) {
66
+ this.firstTimestamp = firstTimestamp;
67
+ this.rowCount = 0;
68
+ this.output = [];
69
+ this.emittedBytes = 0;
70
+ this.unflushedRawBytes = 0;
71
+ this.pendingLines = [];
72
+ this.pendingBytes = 0;
73
+ this.failure = null;
74
+ this.compressor = zstd_util_1.zstd.createZstdCompress((0, zstd_util_1.zstdCompressionOptions)(compressionLevel));
75
+ this.compressor.on('data', (chunk) => {
76
+ this.output.push(chunk);
77
+ this.emittedBytes += chunk.length;
78
+ });
79
+ this.compressor.on('error', (error) => {
80
+ this.failure = error;
81
+ });
82
+ }
83
+ async fits(lineBytes, budget) {
84
+ if (this.upperBound(lineBytes) <= budget) {
85
+ return true;
86
+ }
87
+ await this.flush();
88
+ return this.upperBound(lineBytes) <= budget;
89
+ }
90
+ async append(line, lineBytes) {
91
+ this.throwIfFailed();
92
+ this.pendingLines.push(line);
93
+ this.pendingBytes += lineBytes;
94
+ this.unflushedRawBytes += lineBytes;
95
+ this.rowCount += 1;
96
+ if (this.pendingBytes >= COMPRESSOR_WRITE_BYTES) {
97
+ await this.writePending();
98
+ }
99
+ }
100
+ async finish() {
101
+ await this.writePending();
102
+ this.compressor.end();
103
+ await (0, promises_1.finished)(this.compressor);
104
+ this.throwIfFailed();
105
+ return Buffer.concat(this.output);
106
+ }
107
+ destroy() {
108
+ this.compressor.destroy();
109
+ }
110
+ upperBound(extraRawBytes) {
111
+ return (this.emittedBytes +
112
+ zstdCompressBound(this.unflushedRawBytes + extraRawBytes) +
113
+ ZSTD_FRAME_EPILOGUE_BYTES);
114
+ }
115
+ async writePending() {
116
+ this.throwIfFailed();
117
+ if (this.pendingBytes === 0) {
118
+ return;
119
+ }
120
+ const chunk = Buffer.from(this.pendingLines.join(''), 'utf8');
121
+ this.pendingLines = [];
122
+ this.pendingBytes = 0;
123
+ if (!this.compressor.write(chunk)) {
124
+ await (0, events_1.once)(this.compressor, 'drain');
125
+ }
126
+ }
127
+ async flush() {
128
+ await this.writePending();
129
+ await new Promise((resolve, reject) => {
130
+ this.compressor.flush((error) => (error ? reject(error) : resolve()));
131
+ });
132
+ while (this.compressor.readableLength > 0) {
133
+ await (0, events_1.once)(this.compressor, 'data');
134
+ }
135
+ this.throwIfFailed();
136
+ this.unflushedRawBytes = 0;
137
+ }
138
+ throwIfFailed() {
139
+ if (this.failure) {
140
+ throw this.failure;
141
+ }
142
+ }
143
+ }
144
+ const writeArchiveStream = async (batches, options) => {
145
+ const { key, session, timeColumn, compressionLevel, partMaxBytes } = options;
146
+ const frameBudget = partMaxBytes - exports.SEAL_OVERHEAD_BYTES;
147
+ if (frameBudget <= 0) {
148
+ throw new Error(`Archive part size ${partMaxBytes} leaves no room for a frame after the ${exports.SEAL_OVERHEAD_BYTES}-byte seal`);
149
+ }
150
+ const digest = crypto.createHash('sha256');
151
+ const parts = [];
152
+ let frame = null;
153
+ let previousDateMs = Number.NEGATIVE_INFINITY;
154
+ const closeFrame = async (current) => {
155
+ const sealed = (0, archive_seal_util_1.seal)(await current.finish(), key);
156
+ const partNumber = parts.length + 1;
157
+ if (sealed.length > partMaxBytes) {
158
+ throw new Error(`Archive part ${partNumber} seals to ${sealed.length} bytes, above the ${partMaxBytes}-byte part size: a single row larger than a part cannot be archived`);
159
+ }
160
+ if (partNumber > exports.ARCHIVE_MAX_PARTS) {
161
+ throw new Error(`Archive object needs more than ${exports.ARCHIVE_MAX_PARTS} parts, the most one AbyssStorage upload session accepts`);
162
+ }
163
+ await session.putPart(partNumber, sealed);
164
+ digest.update(sealed);
165
+ parts.push({
166
+ partNumber,
167
+ bytes: sealed.length,
168
+ rowCount: current.rowCount,
169
+ firstTimestamp: current.firstTimestamp,
170
+ });
171
+ };
172
+ try {
173
+ for await (const batch of batches) {
174
+ for (const row of batch) {
175
+ const date = timestampOf(row, timeColumn);
176
+ if (date.getTime() < previousDateMs) {
177
+ throw new Error(`Archive rows must arrive ordered by ${timeColumn}: ${date.toISOString()} came after ${new Date(previousDateMs).toISOString()}`);
178
+ }
179
+ previousDateMs = date.getTime();
180
+ const line = `${JSON.stringify(row)}${NDJSON_SEPARATOR}`;
181
+ const lineBytes = Buffer.byteLength(line, 'utf8');
182
+ if (frame && !(await frame.fits(lineBytes, frameBudget))) {
183
+ await closeFrame(frame);
184
+ frame = null;
185
+ }
186
+ if (!frame) {
187
+ frame = new ZstdFrame(compressionLevel, date.toISOString());
188
+ }
189
+ await frame.append(line, lineBytes);
190
+ }
191
+ }
192
+ if (frame) {
193
+ await closeFrame(frame);
194
+ frame = null;
195
+ }
196
+ }
197
+ catch (error) {
198
+ frame?.destroy();
199
+ throw error;
200
+ }
201
+ return {
202
+ parts,
203
+ totalRows: parts.reduce((total, part) => total + part.rowCount, 0),
204
+ totalBytes: parts.reduce((total, part) => total + part.bytes, 0),
205
+ sha256: digest.digest('hex'),
206
+ };
207
+ };
208
+ exports.writeArchiveStream = writeArchiveStream;
209
+ async function* decodeArchiveFrame(sealedFrame, key) {
210
+ const decompressor = zstd_util_1.zstd.createZstdDecompress();
211
+ decompressor.end((0, archive_seal_util_1.unseal)(sealedFrame, key));
212
+ let carry = [];
213
+ for await (const chunk of decompressor) {
214
+ let start = 0;
215
+ let separator = chunk.indexOf(NDJSON_SEPARATOR_BYTE, start);
216
+ while (separator !== -1) {
217
+ const tail = chunk.subarray(start, separator);
218
+ const line = carry.length === 0 ? tail : Buffer.concat([...carry, tail]);
219
+ carry = [];
220
+ yield JSON.parse(line.toString('utf8'));
221
+ start = separator + 1;
222
+ separator = chunk.indexOf(NDJSON_SEPARATOR_BYTE, start);
223
+ }
224
+ if (start < chunk.length) {
225
+ carry.push(chunk.subarray(start));
226
+ }
227
+ }
228
+ if (carry.length > 0) {
229
+ throw new Error('Archive frame ends inside a row');
230
+ }
231
+ }
232
+ async function* splitArchiveFrames(source, parts) {
233
+ let index = 0;
234
+ let held = [];
235
+ let heldBytes = 0;
236
+ for await (const chunk of source) {
237
+ let offset = 0;
238
+ while (offset < chunk.length) {
239
+ const part = parts[index];
240
+ if (!part) {
241
+ throw new Error(`Archive object is longer than its ${parts.length}-part index`);
242
+ }
243
+ const take = Math.min(part.bytes - heldBytes, chunk.length - offset);
244
+ held.push(chunk.subarray(offset, offset + take));
245
+ heldBytes += take;
246
+ offset += take;
247
+ if (heldBytes === part.bytes) {
248
+ yield { part, sealed: Buffer.concat(held) };
249
+ held = [];
250
+ heldBytes = 0;
251
+ index += 1;
252
+ }
253
+ }
254
+ }
255
+ if (index !== parts.length) {
256
+ throw new Error(`Archive object ends inside part ${parts[index].partNumber}: ${heldBytes} of its ${parts[index].bytes} indexed bytes arrived`);
257
+ }
258
+ }
259
+ //# sourceMappingURL=archive-stream.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-stream.service.js","sourceRoot":"","sources":["../../../src/server/archive/archive-stream.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface ArchiveUploadSession {
2
+ putPart(partNumber: number, payload: Buffer): Promise<void>;
3
+ complete(): Promise<string>;
4
+ abort(): Promise<void>;
5
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=archive-upload-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-upload-session.js","sourceRoot":"","sources":["../../../src/server/archive/archive-upload-session.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export * from './archive-seal.util';
2
+ export * from './archive-stream.service';
3
+ export * from './archive-upload-session';
4
+ export * from './zstd.util';
@@ -0,0 +1,21 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./archive-seal.util"), exports);
18
+ __exportStar(require("./archive-stream.service"), exports);
19
+ __exportStar(require("./archive-upload-session"), exports);
20
+ __exportStar(require("./zstd.util"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/archive/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,2DAAyC;AACzC,2DAAyC;AACzC,8CAA4B"}
@@ -0,0 +1,84 @@
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 () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const crypto = __importStar(require("crypto"));
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const stream_1 = require("stream");
40
+ const archive_seal_util_1 = require("../archive-seal.util");
41
+ const archive_stream_service_1 = require("../archive-stream.service");
42
+ const FIXTURES = path.join(__dirname, 'fixtures');
43
+ const object = fs.readFileSync(path.join(FIXTURES, 'archive-object.bin'));
44
+ const expected = JSON.parse(fs.readFileSync(path.join(FIXTURES, 'archive-object.expected.json'), 'utf8'));
45
+ const key = Buffer.from(expected.keyHex, 'hex');
46
+ const decodeAll = async (source) => {
47
+ const rows = [];
48
+ for await (const { part, sealed } of (0, archive_stream_service_1.splitArchiveFrames)(source, expected.parts)) {
49
+ const decoded = [];
50
+ for await (const row of (0, archive_stream_service_1.decodeArchiveFrame)(sealed, key)) {
51
+ decoded.push(row);
52
+ }
53
+ expect(decoded).toHaveLength(part.rowCount);
54
+ expect(decoded[0].dateValue).toBe(part.firstTimestamp);
55
+ rows.push(...decoded);
56
+ }
57
+ return rows;
58
+ };
59
+ describe('archive object written by Monitor before the move', () => {
60
+ it('has the shape the fixture claims', () => {
61
+ expect(expected.parts.length).toBeGreaterThanOrEqual(2);
62
+ expect(object.length).toBe(expected.totalBytes);
63
+ expect(expected.parts.reduce((total, part) => total + part.bytes, 0)).toBe(object.length);
64
+ });
65
+ it('has the sha256 the writer recorded', () => {
66
+ expect(crypto.createHash('sha256').update(object).digest('hex')).toBe(expected.sha256);
67
+ });
68
+ it('unwraps the stored organization key with the master key', () => {
69
+ expect((0, archive_seal_util_1.unwrapKey)(expected.wrappedKey, Buffer.from(expected.masterKey, 'hex')).toString('hex')).toBe(expected.keyHex);
70
+ });
71
+ it('reads back to the exact rows, part by part', async () => {
72
+ const rows = await decodeAll(stream_1.Readable.from([object]));
73
+ expect(rows).toEqual(expected.rows);
74
+ expect(rows).toHaveLength(expected.totalRows);
75
+ });
76
+ it('is read the same when the stream arrives in arbitrary chunks', async () => {
77
+ const chunks = [];
78
+ for (let offset = 0; offset < object.length; offset += 97) {
79
+ chunks.push(object.subarray(offset, offset + 97));
80
+ }
81
+ expect(await decodeAll(stream_1.Readable.from(chunks))).toEqual(expected.rows);
82
+ });
83
+ });
84
+ //# sourceMappingURL=archive-fixture.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-fixture.spec.js","sourceRoot":"","sources":["../../../../src/server/archive/tests/archive-fixture.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
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 () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const crypto = __importStar(require("crypto"));
37
+ const archive_seal_util_1 = require("../archive-seal.util");
38
+ describe('seal / unseal', () => {
39
+ it('round-trips', () => {
40
+ const key = crypto.randomBytes(32);
41
+ const plaintext = Buffer.from('a log line with an Authorization header in it');
42
+ expect((0, archive_seal_util_1.unseal)((0, archive_seal_util_1.seal)(plaintext, key), key)).toEqual(plaintext);
43
+ });
44
+ it('produces an exact frame length: iv (12 o) + authTag (16 o) + ciphertext', () => {
45
+ const key = crypto.randomBytes(32);
46
+ const plaintext = crypto.randomBytes(1024 * 1024);
47
+ const sealed = (0, archive_seal_util_1.seal)(plaintext, key);
48
+ expect(sealed.length).toBe(12 + 16 + plaintext.length);
49
+ expect((0, archive_seal_util_1.unseal)(sealed, key)).toEqual(plaintext);
50
+ });
51
+ it('produces a different payload every time, so identical inputs do not look identical', () => {
52
+ const key = crypto.randomBytes(32);
53
+ const plaintext = Buffer.from('same input');
54
+ expect((0, archive_seal_util_1.seal)(plaintext, key)).not.toEqual((0, archive_seal_util_1.seal)(plaintext, key));
55
+ });
56
+ it('refuses a tampered payload instead of returning garbage', () => {
57
+ const key = crypto.randomBytes(32);
58
+ const sealed = (0, archive_seal_util_1.seal)(Buffer.from('trustworthy'), key);
59
+ const tampered = Buffer.from(sealed);
60
+ tampered[tampered.length - 1] ^= 0xff;
61
+ expect(() => (0, archive_seal_util_1.unseal)(tampered, key)).toThrow();
62
+ });
63
+ it('refuses the wrong key', () => {
64
+ const sealed = (0, archive_seal_util_1.seal)(Buffer.from('secret'), crypto.randomBytes(32));
65
+ expect(() => (0, archive_seal_util_1.unseal)(sealed, crypto.randomBytes(32))).toThrow();
66
+ });
67
+ it('refuses a payload shorter than its iv and tag', () => {
68
+ expect(() => (0, archive_seal_util_1.unseal)(Buffer.alloc(27), crypto.randomBytes(32))).toThrow('Malformed sealed payload');
69
+ });
70
+ });
71
+ describe('organization key wrapping', () => {
72
+ it('generates 32-byte keys, different every time', () => {
73
+ const a = (0, archive_seal_util_1.generateArchiveKey)();
74
+ expect(a.length).toBe(32);
75
+ expect((0, archive_seal_util_1.generateArchiveKey)()).not.toEqual(a);
76
+ });
77
+ it('wraps to base64 and unwraps to the same key, without storing it in the clear', () => {
78
+ const master = crypto.randomBytes(32);
79
+ const key = (0, archive_seal_util_1.generateArchiveKey)();
80
+ const wrapped = (0, archive_seal_util_1.wrapKey)(key, master);
81
+ const raw = Buffer.from(wrapped, 'base64');
82
+ expect((0, archive_seal_util_1.unwrapKey)(wrapped, master)).toEqual(key);
83
+ expect(raw.includes(key)).toBe(false);
84
+ expect(raw.length).toBe(12 + 16 + key.length);
85
+ });
86
+ it('does not unwrap with another master key', () => {
87
+ const wrapped = (0, archive_seal_util_1.wrapKey)((0, archive_seal_util_1.generateArchiveKey)(), crypto.randomBytes(32));
88
+ expect(() => (0, archive_seal_util_1.unwrapKey)(wrapped, crypto.randomBytes(32))).toThrow();
89
+ });
90
+ it('parses a 32-byte hex master key', () => {
91
+ const master = crypto.randomBytes(32);
92
+ expect((0, archive_seal_util_1.parseMasterKey)(master.toString('hex'), 'SOME_MASTER_KEY')).toEqual(master);
93
+ });
94
+ it('refuses a short master key and names the variable', () => {
95
+ expect(() => (0, archive_seal_util_1.parseMasterKey)('abcd', 'SOME_MASTER_KEY')).toThrow('SOME_MASTER_KEY must be 32 bytes of hex (64 characters), got 2 bytes');
96
+ });
97
+ });
98
+ //# sourceMappingURL=archive-seal.util.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-seal.util.spec.js","sourceRoot":"","sources":["../../../../src/server/archive/tests/archive-seal.util.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,309 @@
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 () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const crypto = __importStar(require("crypto"));
37
+ const stream_1 = require("stream");
38
+ const archive_seal_util_1 = require("../archive-seal.util");
39
+ const archive_stream_service_1 = require("../archive-stream.service");
40
+ const COMPRESSION_LEVEL = 1;
41
+ const TIME_COLUMN = 'dateValue';
42
+ const DAY_START = Date.UTC(2026, 0, 10);
43
+ const newKey = () => crypto.randomBytes(32);
44
+ const recordingSession = () => {
45
+ const payloads = new Map();
46
+ return {
47
+ payloads,
48
+ putPart: jest.fn(async (partNumber, payload) => {
49
+ payloads.set(partNumber, Buffer.from(payload));
50
+ }),
51
+ };
52
+ };
53
+ const noise = (seed, length) => {
54
+ let text = '';
55
+ for (let counter = 0; text.length < length; counter += 1) {
56
+ text += crypto.createHash('sha256').update(`${seed}:${counter}`).digest('base64');
57
+ }
58
+ return text.slice(0, length);
59
+ };
60
+ const makeRows = (count, messageLength = () => 24) => Array.from({ length: count }, (_, index) => ({
61
+ id: `row-${index}`,
62
+ applicationId: 'application-under-test',
63
+ level: index % 6,
64
+ message: `message ${index} ${noise(index, messageLength(index))}`,
65
+ dateValue: new Date(DAY_START + index * 1000),
66
+ }));
67
+ async function* inBatches(rows, size) {
68
+ for (let start = 0; start < rows.length; start += size) {
69
+ yield rows.slice(start, start + size);
70
+ }
71
+ }
72
+ const asArchived = (rows) => JSON.parse(JSON.stringify(rows));
73
+ const decodeAll = async (sealed, key) => {
74
+ const rows = [];
75
+ for await (const row of (0, archive_stream_service_1.decodeArchiveFrame)(sealed, key)) {
76
+ rows.push(row);
77
+ }
78
+ return rows;
79
+ };
80
+ const sha256Of = (buffers) => crypto.createHash('sha256').update(Buffer.concat(buffers)).digest('hex');
81
+ const payloadsInOrder = (session, parts) => parts.map((part) => session.payloads.get(part.partNumber));
82
+ describe('archive-stream.service', () => {
83
+ describe('writeArchiveStream', () => {
84
+ it('cuts a day bigger than a part into parts that each decode alone and give the day back in order', async () => {
85
+ const key = newKey();
86
+ const session = recordingSession();
87
+ const rows = makeRows(50_000);
88
+ const partMaxBytes = 16 * 1024;
89
+ const result = await (0, archive_stream_service_1.writeArchiveStream)(inBatches(rows, 1000), {
90
+ key,
91
+ session,
92
+ timeColumn: TIME_COLUMN,
93
+ compressionLevel: COMPRESSION_LEVEL,
94
+ partMaxBytes,
95
+ });
96
+ expect(result.parts.length).toBeGreaterThanOrEqual(3);
97
+ expect(result.parts.map((part) => part.partNumber)).toEqual(result.parts.map((_, index) => index + 1));
98
+ expect([...session.payloads.keys()]).toEqual(result.parts.map((part) => part.partNumber));
99
+ const decoded = [];
100
+ for (const part of result.parts) {
101
+ const sealed = session.payloads.get(part.partNumber);
102
+ const partRows = await decodeAll(sealed, key);
103
+ expect(sealed.length).toBeLessThanOrEqual(partMaxBytes);
104
+ expect(part.bytes).toBe(sealed.length);
105
+ expect(part.rowCount).toBe(partRows.length);
106
+ expect(part.firstTimestamp).toBe(partRows[0].dateValue);
107
+ decoded.push(...partRows);
108
+ }
109
+ expect(decoded).toEqual(asArchived(rows));
110
+ expect(result.totalRows).toBe(rows.length);
111
+ const stored = payloadsInOrder(session, result.parts);
112
+ expect(result.totalBytes).toBe(stored.reduce((total, sealed) => total + sealed.length, 0));
113
+ expect(result.sha256).toBe(sha256Of(stored));
114
+ });
115
+ it('never holds more rows at once than one batch', async () => {
116
+ const batchSize = 250;
117
+ let handedOut = 0;
118
+ let encoded = 0;
119
+ let mostAlive = 0;
120
+ const observe = () => {
121
+ mostAlive = Math.max(mostAlive, handedOut - encoded);
122
+ };
123
+ const rows = makeRows(20_000).map((row) => ({
124
+ ...row,
125
+ toJSON: () => {
126
+ encoded += 1;
127
+ observe();
128
+ return row;
129
+ },
130
+ }));
131
+ async function* spiedBatches() {
132
+ for (let start = 0; start < rows.length; start += batchSize) {
133
+ const batch = rows.slice(start, start + batchSize);
134
+ handedOut += batch.length;
135
+ observe();
136
+ yield batch;
137
+ }
138
+ }
139
+ const result = await (0, archive_stream_service_1.writeArchiveStream)(spiedBatches(), {
140
+ key: newKey(),
141
+ session: recordingSession(),
142
+ timeColumn: TIME_COLUMN,
143
+ compressionLevel: COMPRESSION_LEVEL,
144
+ partMaxBytes: 16 * 1024,
145
+ });
146
+ expect(result.totalRows).toBe(rows.length);
147
+ expect(encoded).toBe(rows.length);
148
+ expect(mostAlive).toBe(batchSize);
149
+ });
150
+ it('cuts on the bytes written, never on a number of rows', async () => {
151
+ const session = recordingSession();
152
+ const partMaxBytes = 16 * 1024;
153
+ const rows = makeRows(3_000, (index) => 50 + ((index * 7919) % 1500));
154
+ const result = await (0, archive_stream_service_1.writeArchiveStream)(inBatches(rows, 500), {
155
+ key: newKey(),
156
+ session,
157
+ timeColumn: TIME_COLUMN,
158
+ compressionLevel: COMPRESSION_LEVEL,
159
+ partMaxBytes,
160
+ });
161
+ const sizes = payloadsInOrder(session, result.parts).map((sealed) => sealed.length);
162
+ for (const size of sizes) {
163
+ expect(size).toBeLessThanOrEqual(partMaxBytes);
164
+ }
165
+ for (const size of sizes.slice(0, -1)) {
166
+ expect(size).toBeGreaterThan(partMaxBytes * 0.75);
167
+ }
168
+ expect(new Set(result.parts.map((part) => part.rowCount)).size).toBeGreaterThan(1);
169
+ });
170
+ it('refuses a single row larger than a part rather than sending an oversized part', async () => {
171
+ const session = recordingSession();
172
+ await expect((0, archive_stream_service_1.writeArchiveStream)(inBatches(makeRows(1, () => 8_000), 1), {
173
+ key: newKey(),
174
+ session,
175
+ timeColumn: TIME_COLUMN,
176
+ compressionLevel: COMPRESSION_LEVEL,
177
+ partMaxBytes: 2048,
178
+ })).rejects.toThrow(/above the 2048-byte part size/);
179
+ expect(session.putPart).not.toHaveBeenCalled();
180
+ });
181
+ it('refuses rows that go back in time, rather than writing an index that lies', async () => {
182
+ const [first, second, ...rest] = makeRows(10);
183
+ await expect((0, archive_stream_service_1.writeArchiveStream)(inBatches([second, first, ...rest], 10), {
184
+ key: newKey(),
185
+ session: recordingSession(),
186
+ timeColumn: TIME_COLUMN,
187
+ compressionLevel: COMPRESSION_LEVEL,
188
+ partMaxBytes: 16 * 1024,
189
+ })).rejects.toThrow(/ordered by dateValue/);
190
+ });
191
+ it("orders and indexes on the table's own time column, which is not always dateValue", async () => {
192
+ const key = newKey();
193
+ const session = recordingSession();
194
+ const rows = Array.from({ length: 3_000 }, (_, index) => ({
195
+ id: `history-${index}`,
196
+ applicationCronTaskId: 'cron-task-under-test',
197
+ startDate: new Date(DAY_START + index * 1000),
198
+ responseBody: noise(index, 40),
199
+ }));
200
+ const result = await (0, archive_stream_service_1.writeArchiveStream)(inBatches(rows, 500), {
201
+ key,
202
+ session,
203
+ timeColumn: 'startDate',
204
+ compressionLevel: COMPRESSION_LEVEL,
205
+ partMaxBytes: 8 * 1024,
206
+ });
207
+ expect(result.parts.length).toBeGreaterThanOrEqual(3);
208
+ for (const part of result.parts) {
209
+ const partRows = await decodeAll(session.payloads.get(part.partNumber), key);
210
+ expect(part.firstTimestamp).toBe(partRows[0].startDate);
211
+ }
212
+ const [first, second, ...rest] = rows;
213
+ await expect((0, archive_stream_service_1.writeArchiveStream)(inBatches([second, first, ...rest], 500), {
214
+ key,
215
+ session: recordingSession(),
216
+ timeColumn: 'startDate',
217
+ compressionLevel: COMPRESSION_LEVEL,
218
+ partMaxBytes: 8 * 1024,
219
+ })).rejects.toThrow(/ordered by startDate/);
220
+ });
221
+ it('refuses a row without a usable dateValue, which the index could not place', async () => {
222
+ await expect((0, archive_stream_service_1.writeArchiveStream)(inBatches([{ id: 'no-date', message: 'orphan' }], 1), {
223
+ key: newKey(),
224
+ session: recordingSession(),
225
+ timeColumn: TIME_COLUMN,
226
+ compressionLevel: COMPRESSION_LEVEL,
227
+ partMaxBytes: 16 * 1024,
228
+ })).rejects.toThrow(/no usable dateValue/);
229
+ });
230
+ it('writes no part for a day without rows', async () => {
231
+ const session = recordingSession();
232
+ const result = await (0, archive_stream_service_1.writeArchiveStream)(inBatches([], 10), {
233
+ key: newKey(),
234
+ session,
235
+ timeColumn: TIME_COLUMN,
236
+ compressionLevel: COMPRESSION_LEVEL,
237
+ partMaxBytes: 16 * 1024,
238
+ });
239
+ expect(result).toEqual({ parts: [], totalRows: 0, totalBytes: 0, sha256: sha256Of([]) });
240
+ expect(session.putPart).not.toHaveBeenCalled();
241
+ });
242
+ it('accounts for exactly what seal adds to a frame', () => {
243
+ expect((0, archive_seal_util_1.seal)(Buffer.alloc(1234), newKey()).length).toBe(1234 + archive_stream_service_1.SEAL_OVERHEAD_BYTES);
244
+ });
245
+ });
246
+ describe('decodeArchiveFrame', () => {
247
+ it('refuses a tampered part instead of returning rows from it', async () => {
248
+ const key = newKey();
249
+ const session = recordingSession();
250
+ await (0, archive_stream_service_1.writeArchiveStream)(inBatches(makeRows(100), 100), {
251
+ key,
252
+ session,
253
+ timeColumn: TIME_COLUMN,
254
+ compressionLevel: COMPRESSION_LEVEL,
255
+ partMaxBytes: 16 * 1024,
256
+ });
257
+ const tampered = Buffer.from(session.payloads.get(1));
258
+ tampered[tampered.length - 1] ^= 0xff;
259
+ await expect(decodeAll(tampered, key)).rejects.toThrow();
260
+ });
261
+ });
262
+ describe('splitArchiveFrames', () => {
263
+ const writeObject = async () => {
264
+ const key = newKey();
265
+ const session = recordingSession();
266
+ const result = await (0, archive_stream_service_1.writeArchiveStream)(inBatches(makeRows(5_000), 1000), {
267
+ key,
268
+ session,
269
+ timeColumn: TIME_COLUMN,
270
+ compressionLevel: COMPRESSION_LEVEL,
271
+ partMaxBytes: 4 * 1024,
272
+ });
273
+ return { key, parts: result.parts, stored: payloadsInOrder(session, result.parts) };
274
+ };
275
+ const streamed = (bytes, chunkBytes = 333) => {
276
+ const chunks = [];
277
+ for (let offset = 0; offset < bytes.length; offset += chunkBytes) {
278
+ chunks.push(bytes.subarray(offset, offset + chunkBytes));
279
+ }
280
+ return stream_1.Readable.from(chunks);
281
+ };
282
+ const drain = async (source, parts) => {
283
+ const frames = [];
284
+ for await (const frame of (0, archive_stream_service_1.splitArchiveFrames)(source, parts)) {
285
+ frames.push(frame.sealed);
286
+ }
287
+ return frames;
288
+ };
289
+ it('cuts an object streamed in arbitrary chunks back into its parts', async () => {
290
+ const { key, parts, stored } = await writeObject();
291
+ expect(parts.length).toBeGreaterThanOrEqual(3);
292
+ const frames = await drain(streamed(Buffer.concat(stored)), parts);
293
+ expect(frames).toEqual(stored);
294
+ const decoded = (await Promise.all(frames.map((frame) => decodeAll(frame, key)))).flat();
295
+ expect(decoded).toHaveLength(5_000);
296
+ });
297
+ it('refuses an object shorter than its index', async () => {
298
+ const { parts, stored } = await writeObject();
299
+ const truncated = Buffer.concat(stored).subarray(0, -10);
300
+ await expect(drain(streamed(truncated), parts)).rejects.toThrow(/ends inside part/);
301
+ });
302
+ it('refuses an object longer than its index', async () => {
303
+ const { parts, stored } = await writeObject();
304
+ const extended = Buffer.concat([...stored, Buffer.from('trailing bytes')]);
305
+ await expect(drain(streamed(extended), parts)).rejects.toThrow(/longer than its/);
306
+ });
307
+ });
308
+ });
309
+ //# sourceMappingURL=archive-stream.service.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-stream.service.spec.js","sourceRoot":"","sources":["../../../../src/server/archive/tests/archive-stream.service.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { Transform } from 'stream';
2
+ export interface ZstdOptions {
3
+ params: Record<number, number>;
4
+ }
5
+ export interface ZstdCompressStream extends Transform {
6
+ flush(callback: (error?: Error | null) => void): void;
7
+ }
8
+ interface ZstdBindings {
9
+ createZstdCompress(options: ZstdOptions): ZstdCompressStream;
10
+ createZstdDecompress(): Transform;
11
+ zstdCompressSync(buffer: Buffer, options: ZstdOptions): Buffer;
12
+ zstdDecompressSync(buffer: Buffer): Buffer;
13
+ constants: {
14
+ ZSTD_c_compressionLevel: number;
15
+ };
16
+ }
17
+ export declare const zstd: ZstdBindings;
18
+ export declare const zstdCompressionOptions: (compressionLevel: number) => ZstdOptions;
19
+ export {};
@@ -0,0 +1,43 @@
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 () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.zstdCompressionOptions = exports.zstd = void 0;
37
+ const zlib = __importStar(require("zlib"));
38
+ exports.zstd = zlib;
39
+ const zstdCompressionOptions = (compressionLevel) => ({
40
+ params: { [exports.zstd.constants.ZSTD_c_compressionLevel]: compressionLevel },
41
+ });
42
+ exports.zstdCompressionOptions = zstdCompressionOptions;
43
+ //# sourceMappingURL=zstd.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zstd.util.js","sourceRoot":"","sources":["../../../src/server/archive/zstd.util.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,2CAA6B;AAiChB,QAAA,IAAI,GAAG,IAA+B,CAAC;AAG7C,MAAM,sBAAsB,GAAG,CAAC,gBAAwB,EAAe,EAAE,CAAC,CAAC;IAChF,MAAM,EAAE,EAAE,CAAC,YAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,EAAE,gBAAgB,EAAE;CACvE,CAAC,CAAC;AAFU,QAAA,sBAAsB,0BAEhC"}
@@ -6,3 +6,4 @@ export * from './explore/field-catalog.types';
6
6
  export * from './explore/sql-translator';
7
7
  export * from './explore/like-escape';
8
8
  export * from './abyss-signature.util';
9
+ export * from './archive';
@@ -22,4 +22,5 @@ __exportStar(require("./explore/field-catalog.types"), exports);
22
22
  __exportStar(require("./explore/sql-translator"), exports);
23
23
  __exportStar(require("./explore/like-escape"), exports);
24
24
  __exportStar(require("./abyss-signature.util"), exports);
25
+ __exportStar(require("./archive"), exports);
25
26
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAgBA,kDAAgC;AAGhC,2DAAyC;AAKzC,wDAAsC;AAGtC,yCAAuB;AAIvB,gEAA8C;AAC9C,2DAAyC;AACzC,wDAAsC;AAGtC,yDAAuC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAgBA,kDAAgC;AAGhC,2DAAyC;AAKzC,wDAAsC;AAGtC,yCAAuB;AAIvB,gEAA8C;AAC9C,2DAAyC;AACzC,wDAAsC;AAGtC,yDAAuC;AAKvC,4CAA0B"}
@@ -25,6 +25,7 @@ export declare enum EmailType {
25
25
  LEAVE_CLOUD_SHARE = "LEAVE_CLOUD_SHARE",
26
26
  FLOW_WEBHOOK_UNDELIVERABLE_DISABLE = "FLOW_WEBHOOK_UNDELIVERABLE_DISABLE",
27
27
  MONITOR_REHYDRATION_READY = "MONITOR_REHYDRATION_READY",
28
+ MONITOR_EXPERIMENT_GUARDRAIL_DEGRADED = "MONITOR_EXPERIMENT_GUARDRAIL_DEGRADED",
28
29
  MONITOR_INCIDENT_OPENED = "MONITOR_INCIDENT_OPENED",
29
30
  MONITOR_INCIDENT_ESCALATED = "MONITOR_INCIDENT_ESCALATED",
30
31
  MONITOR_INCIDENT_SUMMARY = "MONITOR_INCIDENT_SUMMARY",
@@ -29,6 +29,7 @@ var EmailType;
29
29
  EmailType["LEAVE_CLOUD_SHARE"] = "LEAVE_CLOUD_SHARE";
30
30
  EmailType["FLOW_WEBHOOK_UNDELIVERABLE_DISABLE"] = "FLOW_WEBHOOK_UNDELIVERABLE_DISABLE";
31
31
  EmailType["MONITOR_REHYDRATION_READY"] = "MONITOR_REHYDRATION_READY";
32
+ EmailType["MONITOR_EXPERIMENT_GUARDRAIL_DEGRADED"] = "MONITOR_EXPERIMENT_GUARDRAIL_DEGRADED";
32
33
  EmailType["MONITOR_INCIDENT_OPENED"] = "MONITOR_INCIDENT_OPENED";
33
34
  EmailType["MONITOR_INCIDENT_ESCALATED"] = "MONITOR_INCIDENT_ESCALATED";
34
35
  EmailType["MONITOR_INCIDENT_SUMMARY"] = "MONITOR_INCIDENT_SUMMARY";
@@ -1 +1 @@
1
- {"version":3,"file":"email-type.enum.js","sourceRoot":"","sources":["../../../src/types/enum/email-type.enum.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"email-type.enum.js","sourceRoot":"","sources":["../../../src/types/enum/email-type.enum.ts"],"names":[],"mappings":";;;AAMA,IAAY,SA2MX;AA3MD,WAAY,SAAS;IACnB,0CAA6B,CAAA;IAE7B,gDAAmC,CAAA;IACnC,8CAAiC,CAAA;IACjC,oEAAuD,CAAA;IAEvD,0DAA6C,CAAA;IAE7C,kDAAqC,CAAA;IAErC,oDAAuC,CAAA;IAMvC,oEAAuD,CAAA;IACvD,4DAA+C,CAAA;IAC/C,gEAAmD,CAAA;IACnD,4DAA+C,CAAA;IAC/C,8DAAiD,CAAA;IAEjD,wEAA2D,CAAA;IAE3D,4EAA+D,CAAA;IAE/D,gDAAmC,CAAA;IACnC,kEAAqD,CAAA;IACrD,8DAAiD,CAAA;IACjD,gFAAmE,CAAA;IACnE,wDAA2C,CAAA;IAG3C,8CAAiC,CAAA;IAGjC,gDAAmC,CAAA;IACnC,kDAAqC,CAAA;IACrC,wDAA2C,CAAA;IAC3C,oDAAuC,CAAA;IAKvC,sFAAyE,CAAA;IAIzE,oEAAuD,CAAA;IAEvD,4FAA+E,CAAA;IAE/E,gEAAmD,CAAA;IACnD,sEAAyD,CAAA;IACzD,kEAAqD,CAAA;IACrD,oEAAuD,CAAA;IAGvD,4FAA+E,CAAA;IAG/E,0CAA6B,CAAA;IAC7B,sDAAyC,CAAA;IACzC,kEAAqD,CAAA;IACrD,4EAA+D,CAAA;IAC/D,wFAA2E,CAAA;IAC3E,wEAA2D,CAAA;IAC3D,0EAA6D,CAAA;IAC7D,8EAAiE,CAAA;IACjE,oEAAuD,CAAA;IACvD,gEAAmD,CAAA;IAGnD,gEAAmD,CAAA;IACnD,8DAAiD,CAAA;IACjD,0EAA6D,CAAA;IAG7D,0FAA6E,CAAA;IAC7E,oFAAuE,CAAA;IAGvE,sEAAyD,CAAA;IAGzD,oEAAuD,CAAA;IACvD,wFAA2E,CAAA;IAC3E,4EAA+D,CAAA;IAC/D,sFAAyE,CAAA;IAGzE,0DAA6C,CAAA;IAG7C,4CAA+B,CAAA;IAG/B,8FAAiF,CAAA;IACjF,kGAAqF,CAAA;IACrF,wFAA2E,CAAA;IAG3E,wDAA2C,CAAA;IAC3C,oDAAuC,CAAA;IAIvC,sEAAyD,CAAA;IAIzD,kDAAqC,CAAA;IAGrC,sEAAyD,CAAA;IACzD,oEAAuD,CAAA;IACvD,sEAAyD,CAAA;IAGzD,sEAAyD,CAAA;IACzD,0DAA6C,CAAA;IAC7C,sEAAyD,CAAA;IACzD,wDAA2C,CAAA;IAC3C,gEAAmD,CAAA;IAEnD,wDAA2C,CAAA;IAC3C,8EAAiE,CAAA;IACjE,4EAA+D,CAAA;IAC/D,0EAA6D,CAAA;IAM7D,sFAAyE,CAAA;IACzE,sEAAyD,CAAA;IACzD,4EAA+D,CAAA;IAC/D,wEAA2D,CAAA;IAG3D,0DAA6C,CAAA;IAC7C,0DAA6C,CAAA;IAC7C,wEAA2D,CAAA;IAC3D,8DAAiD,CAAA;IACjD,oEAAuD,CAAA;IACvD,oEAAuD,CAAA;IACvD,kEAAqD,CAAA;IAErD,sEAAyD,CAAA;IACzD,wEAA2D,CAAA;IAE3D,0DAA6C,CAAA;IAE7C,4EAA+D,CAAA;IAC/D,0EAA6D,CAAA;IAC7D,0EAA6D,CAAA;IAC7D,0DAA6C,CAAA;IAC7C,sEAAyD,CAAA;IACzD,4DAA+C,CAAA;IAC/C,4DAA+C,CAAA;IAG/C,gEAAmD,CAAA;IACnD,sEAAyD,CAAA;IAGzD,8EAAiE,CAAA;IACjE,8EAAiE,CAAA;IAEjE,sFAAyE,CAAA;IAKzE,kDAAqC,CAAA;IACrC,sDAAyC,CAAA;IACzC,8DAAiD,CAAA;IACjD,oDAAuC,CAAA;IACvC,kEAAqD,CAAA;IACrD,oEAAuD,CAAA;IACvD,gDAAmC,CAAA;IACnC,oDAAuC,CAAA;IACvC,gDAAmC,CAAA;IACnC,8CAAiC,CAAA;IACjC,wDAA2C,CAAA;IAC3C,gDAAmC,CAAA;IACnC,wEAA2D,CAAA;IAC3D,sEAAyD,CAAA;IACzD,wFAA2E,CAAA;IAC3E,0DAA6C,CAAA;IAK7C,gDAAmC,CAAA;IACnC,0DAA6C,CAAA;IAC7C,sDAAyC,CAAA;IAGzC,gEAAmD,CAAA;IACnD,0DAA6C,CAAA;IAC7C,8DAAiD,CAAA;AACnD,CAAC,EA3MW,SAAS,yBAAT,SAAS,QA2MpB"}
@@ -12,6 +12,8 @@ export interface IBillingDailySnapshotMetric {
12
12
  pricePerUnitNanoCents: number;
13
13
  overageAmountEur: number;
14
14
  dailyUsageCostEur: number;
15
+ includedLimit?: number;
16
+ overageRateNanocents?: number | null;
15
17
  }
16
18
  export interface IBillingDailySnapshotThreshold {
17
19
  service: BillingService;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abyss-project/main",
3
- "version": "34.1.1",
3
+ "version": "34.2.0",
4
4
  "description": "Core package to interact with Abyss-Project",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",