@digitaldefiance/node-express-suite 2.1.23 → 2.1.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1083,7 +1083,12 @@ The following v1.x patterns still work in v2.0:
1083
1083
 
1084
1084
  ## ChangeLog
1085
1085
 
1086
- ### Version 2.1.23
1086
+ ### Version 2.1.25
1087
+
1088
+ - Upgrade underlying libraries
1089
+ - Improve test coverage
1090
+
1091
+ ### Version 2.1.24
1087
1092
 
1088
1093
  - Provide mocks/fixtures for use in testing
1089
1094
  - Provide concrete/runnable ApplicationConcrete class
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digitaldefiance/node-express-suite",
3
- "version": "2.1.23",
3
+ "version": "2.1.25",
4
4
  "description": "Generic express application and routing library with decorator support",
5
5
  "main": "src/index.js",
6
6
  "types": "src/index.d.ts",
@@ -11,6 +11,7 @@
11
11
  "test": "npx nx test digitaldefiance-node-express-suite",
12
12
  "test:stream": "npx nx test --outputStyle=stream digitaldefiance-node-express-suite",
13
13
  "test:logged": "npx nx test --outputStyle=stream digitaldefiance-node-express-suite 2>&1 | ansifilter -o test.log",
14
+ "test:coverage": "npx jest --coverage --testPathPattern=digitaldefiance-node-express-suite --coverageReporters=text",
14
15
  "lint": "npx nx lint digitaldefiance-node-express-suite",
15
16
  "lint:fix": "npx nx lint digitaldefiance-node-express-suite --fix",
16
17
  "prettier:check": "prettier --check 'src/**/*.{ts,tsx}' 'tests/**/*.{ts,tsx}'",
@@ -21,10 +22,10 @@
21
22
  "publish:public": "npm publish --access public"
22
23
  },
23
24
  "dependencies": {
24
- "@digitaldefiance/ecies-lib": "2.1.16",
25
- "@digitaldefiance/i18n-lib": "2.1.16",
26
- "@digitaldefiance/node-ecies-lib": "2.1.16",
27
- "@digitaldefiance/suite-core-lib": "2.1.22",
25
+ "@digitaldefiance/ecies-lib": "2.1.25",
26
+ "@digitaldefiance/i18n-lib": "2.1.25",
27
+ "@digitaldefiance/node-ecies-lib": "2.1.25",
28
+ "@digitaldefiance/suite-core-lib": "2.1.25",
28
29
  "@subspace/reed-solomon-erasure.wasm": "^0.2.5",
29
30
  "argon2": "^0.40.1",
30
31
  "cors": "^2.8.5",
@@ -1,3 +1,2 @@
1
- export * from './mock-backend-member';
2
1
  export * from './model-mocks.mock';
3
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-node-express-suite/src/__tests__/fixtures/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-node-express-suite/src/__tests__/fixtures/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./mock-backend-member"), exports);
5
4
  tslib_1.__exportStar(require("./model-mocks.mock"), exports);
6
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-node-express-suite/src/__tests__/fixtures/index.ts"],"names":[],"mappings":";;;AAAA,gEAAsC;AACtC,6DAAmC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-node-express-suite/src/__tests__/fixtures/index.ts"],"names":[],"mappings":";;;AAAA,6DAAmC"}
@@ -1 +1 @@
1
- {"version":3,"file":"csp-config.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/csp-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAkB,MAAM,kBAAkB,CAAC;AAEjE,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,GAAG,EAAE,aAAa,CAAC;CACpB;AAED,eAAO,MAAM,WAAW,GAAI,KAAK,GAAG,KAAG,GAAG,IAAI,UAO7C,CAAA"}
1
+ {"version":3,"file":"csp-config.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/csp-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAkB,MAAM,kBAAkB,CAAC;AAEjE,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,GAAG,EAAE,aAAa,CAAC;CACpB;AAED,eAAO,MAAM,WAAW,GAAI,KAAK,GAAG,KAAG,GAAG,IAAI,UAQ7C,CAAA"}
@@ -3,9 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isCSPConfig = void 0;
4
4
  const csp_definition_1 = require("./csp-definition");
5
5
  const isCSPConfig = (obj) => {
6
- return (obj &&
6
+ return (!!obj &&
7
7
  typeof obj === 'object' &&
8
8
  'corsWhitelist' in obj &&
9
+ 'csp' in obj &&
9
10
  (0, csp_definition_1.isSimpleCSPDef)(obj.csp));
10
11
  };
11
12
  exports.isCSPConfig = isCSPConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"csp-config.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/csp-config.ts"],"names":[],"mappings":";;;AAAA,qDAAiE;AAO1D,MAAM,WAAW,GAAG,CAAC,GAAQ,EAAqB,EAAE;IACzD,OAAO,CACL,GAAG;QACH,OAAO,GAAG,KAAK,QAAQ;QACvB,eAAe,IAAI,GAAG;QACtB,IAAA,+BAAc,EAAC,GAAG,CAAC,GAAG,CAAC,CACxB,CAAC;AACJ,CAAC,CAAA;AAPY,QAAA,WAAW,eAOvB"}
1
+ {"version":3,"file":"csp-config.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/csp-config.ts"],"names":[],"mappings":";;;AAAA,qDAAiE;AAO1D,MAAM,WAAW,GAAG,CAAC,GAAQ,EAAqB,EAAE;IACzD,OAAO,CACL,CAAC,CAAC,GAAG;QACL,OAAO,GAAG,KAAK,QAAQ;QACvB,eAAe,IAAI,GAAG;QACtB,KAAK,IAAI,GAAG;QACZ,IAAA,+BAAc,EAAC,GAAG,CAAC,GAAG,CAAC,CACxB,CAAC;AACJ,CAAC,CAAA;AARY,QAAA,WAAW,eAQvB"}
@@ -4,11 +4,11 @@ exports.isFlexibleCSP = void 0;
4
4
  const middlewares_1 = require("../middlewares");
5
5
  const csp_definition_1 = require("./csp-definition");
6
6
  const isFlexibleCSP = (obj) => {
7
- return (obj &&
7
+ return (!!obj &&
8
8
  typeof obj === 'object' &&
9
9
  'corsWhitelist' in obj &&
10
10
  'csp' in obj &&
11
- (0, csp_definition_1.isSimpleCSPDef)(obj.csp) || (0, middlewares_1.isHelmetOptions)(obj.csp));
11
+ ((0, csp_definition_1.isSimpleCSPDef)(obj.csp) || (0, middlewares_1.isHelmetOptions)(obj.csp)));
12
12
  };
13
13
  exports.isFlexibleCSP = isFlexibleCSP;
14
14
  //# sourceMappingURL=flexible-csp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"flexible-csp.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/flexible-csp.ts"],"names":[],"mappings":";;;AACA,gDAAiD;AACjD,qDAAiE;AAO1D,MAAM,aAAa,GAAG,CAAC,GAAQ,EAAuB,EAAE;IAC7D,OAAO,CACL,GAAG;QACH,OAAO,GAAG,KAAK,QAAQ;QACvB,eAAe,IAAI,GAAG;QACtB,KAAK,IAAI,GAAG;QACZ,IAAA,+BAAc,EAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAA,6BAAe,EAAC,GAAG,CAAC,GAAG,CAAC,CACpD,CAAC;AACJ,CAAC,CAAA;AARY,QAAA,aAAa,iBAQzB"}
1
+ {"version":3,"file":"flexible-csp.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/flexible-csp.ts"],"names":[],"mappings":";;;AACA,gDAAiD;AACjD,qDAAiE;AAO1D,MAAM,aAAa,GAAG,CAAC,GAAQ,EAAuB,EAAE;IAC7D,OAAO,CACL,CAAC,CAAC,GAAG;QACL,OAAO,GAAG,KAAK,QAAQ;QACvB,eAAe,IAAI,GAAG;QACtB,KAAK,IAAI,GAAG;QACZ,CAAC,IAAA,+BAAc,EAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAA,6BAAe,EAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CACtD,CAAC;AACJ,CAAC,CAAA;AARY,QAAA,aAAa,iBAQzB"}
@@ -1,69 +0,0 @@
1
- import { EmailString, MemberType, SecureBuffer, SecureString } from '@digitaldefiance/ecies-lib';
2
- import { Wallet } from '@ethereumjs/wallet';
3
- import { IMemberOperational, SignatureBuffer } from '@digitaldefiance/node-ecies-lib';
4
- import { Types } from 'mongoose';
5
- export declare class MockBackendMember implements IMemberOperational<Types.ObjectId> {
6
- private _id;
7
- private _type;
8
- private _name;
9
- private _email;
10
- private _publicKey;
11
- private _creatorId;
12
- private _dateCreated;
13
- private _dateUpdated;
14
- private _privateKey?;
15
- private _wallet?;
16
- private _hasPrivateKey;
17
- constructor(data?: Partial<{
18
- id: Types.ObjectId;
19
- type: MemberType;
20
- name: string;
21
- email: EmailString;
22
- publicKey: Buffer;
23
- privateKey: SecureBuffer;
24
- wallet: Wallet;
25
- creatorId: Types.ObjectId;
26
- dateCreated: Date;
27
- dateUpdated: Date;
28
- hasPrivateKey: boolean;
29
- }>);
30
- get id(): Types.ObjectId;
31
- get type(): MemberType;
32
- get name(): string;
33
- get email(): EmailString;
34
- get publicKey(): Uint8Array;
35
- get creatorId(): Types.ObjectId;
36
- get dateCreated(): Date;
37
- get dateUpdated(): Date;
38
- get privateKey(): SecureBuffer | undefined;
39
- get wallet(): Wallet | undefined;
40
- get hasPrivateKey(): boolean;
41
- unloadPrivateKey(): void;
42
- unloadWallet(): void;
43
- unloadWalletAndPrivateKey(): void;
44
- loadWallet(mnemonic: SecureString): void;
45
- loadPrivateKey(privateKey: SecureBuffer): void;
46
- sign(data: Buffer): SignatureBuffer;
47
- verify(signature: SignatureBuffer, data: Buffer): boolean;
48
- encryptData(data: string | Buffer): Uint8Array;
49
- decryptData(encryptedData: Buffer): Uint8Array;
50
- toJson(): string;
51
- dispose(): void;
52
- static create(overrides?: Partial<{
53
- id: Types.ObjectId;
54
- type: MemberType;
55
- name: string;
56
- email: EmailString;
57
- publicKey: Buffer;
58
- privateKey: SecureBuffer;
59
- wallet: Wallet;
60
- creatorId: Types.ObjectId;
61
- dateCreated: Date;
62
- dateUpdated: Date;
63
- hasPrivateKey: boolean;
64
- }>): MockBackendMember;
65
- static createMultiple(count: number): MockBackendMember[];
66
- static createWithPrivateKey(): MockBackendMember;
67
- static createWithoutPrivateKey(): MockBackendMember;
68
- }
69
- //# sourceMappingURL=mock-backend-member.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mock-backend-member.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-node-express-suite/src/__tests__/fixtures/mock-backend-member.ts"],"names":[],"mappings":"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"}
@@ -1,127 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MockBackendMember = void 0;
4
- const ecies_lib_1 = require("@digitaldefiance/ecies-lib");
5
- const faker_1 = require("@faker-js/faker");
6
- const mongodb_1 = require("mongodb");
7
- const createMockWallet = () => ({
8
- getPrivateKey: () => Buffer.from(faker_1.faker.string.hexadecimal({ length: 64 }), 'hex'),
9
- getPublicKey: () => Buffer.from(faker_1.faker.string.hexadecimal({ length: 128 }), 'hex'),
10
- getAddress: () => Buffer.from(faker_1.faker.string.hexadecimal({ length: 40 }), 'hex'),
11
- sign: () => Buffer.from(faker_1.faker.string.hexadecimal({ length: 128 }), 'hex'),
12
- });
13
- class MockBackendMember {
14
- _id;
15
- _type;
16
- _name;
17
- _email;
18
- _publicKey;
19
- _creatorId;
20
- _dateCreated;
21
- _dateUpdated;
22
- _privateKey;
23
- _wallet;
24
- _hasPrivateKey;
25
- constructor(data = {}) {
26
- this._id = data.id || new mongodb_1.ObjectId();
27
- this._type = data.type || faker_1.faker.helpers.enumValue(ecies_lib_1.MemberType);
28
- this._name = data.name || faker_1.faker.person.fullName();
29
- this._email = data.email || new ecies_lib_1.EmailString(faker_1.faker.internet.email());
30
- this._publicKey =
31
- data.publicKey ||
32
- Buffer.from(faker_1.faker.string.hexadecimal({ length: 130 }), 'hex');
33
- this._creatorId = data.creatorId || this._id;
34
- this._dateCreated = data.dateCreated || faker_1.faker.date.past();
35
- this._dateUpdated =
36
- data.dateUpdated ||
37
- faker_1.faker.date.between({ from: this._dateCreated, to: new Date() });
38
- this._privateKey = data.privateKey;
39
- this._wallet =
40
- data.wallet ||
41
- (data.hasPrivateKey !== false ? createMockWallet() : undefined);
42
- this._hasPrivateKey = data.hasPrivateKey ?? !!this._privateKey;
43
- }
44
- get id() {
45
- return this._id;
46
- }
47
- get type() {
48
- return this._type;
49
- }
50
- get name() {
51
- return this._name;
52
- }
53
- get email() {
54
- return this._email;
55
- }
56
- get publicKey() {
57
- return this._publicKey;
58
- }
59
- get creatorId() {
60
- return this._creatorId;
61
- }
62
- get dateCreated() {
63
- return this._dateCreated;
64
- }
65
- get dateUpdated() {
66
- return this._dateUpdated;
67
- }
68
- get privateKey() {
69
- return this._privateKey;
70
- }
71
- get wallet() {
72
- return this._wallet;
73
- }
74
- get hasPrivateKey() {
75
- return this._hasPrivateKey;
76
- }
77
- unloadPrivateKey() { }
78
- unloadWallet() { }
79
- unloadWalletAndPrivateKey() { }
80
- loadWallet(mnemonic) { }
81
- loadPrivateKey(privateKey) { }
82
- sign(data) {
83
- return Buffer.from(faker_1.faker.string.hexadecimal({ length: 128 }), 'hex');
84
- }
85
- verify(signature, data) {
86
- return true;
87
- }
88
- encryptData(data) {
89
- return Buffer.from(faker_1.faker.string.hexadecimal({ length: 256 }), 'hex');
90
- }
91
- decryptData(encryptedData) {
92
- return Buffer.from(faker_1.faker.lorem.paragraph());
93
- }
94
- toJson() {
95
- return JSON.stringify({
96
- id: this._id.toString(),
97
- type: this._type,
98
- name: this._name,
99
- email: this._email.toString(),
100
- publicKey: this._publicKey.toString('base64'),
101
- creatorId: this._creatorId.toString(),
102
- dateCreated: this._dateCreated.toISOString(),
103
- dateUpdated: this._dateUpdated.toISOString(),
104
- });
105
- }
106
- dispose() { }
107
- static create(overrides = {}) {
108
- return new MockBackendMember(overrides);
109
- }
110
- static createMultiple(count) {
111
- return Array.from({ length: count }, () => this.create());
112
- }
113
- static createWithPrivateKey() {
114
- return new MockBackendMember({
115
- privateKey: new ecies_lib_1.SecureBuffer(Buffer.from(faker_1.faker.string.hexadecimal({ length: 64 }), 'hex')),
116
- hasPrivateKey: true,
117
- });
118
- }
119
- static createWithoutPrivateKey() {
120
- return new MockBackendMember({
121
- privateKey: undefined,
122
- hasPrivateKey: false,
123
- });
124
- }
125
- }
126
- exports.MockBackendMember = MockBackendMember;
127
- //# sourceMappingURL=mock-backend-member.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mock-backend-member.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-node-express-suite/src/__tests__/fixtures/mock-backend-member.ts"],"names":[],"mappings":"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"}