@digitaldefiance/node-ecies-lib 2.1.15 → 2.1.17

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
@@ -414,6 +414,14 @@ No performance regression in v2.0:
414
414
 
415
415
  ## ChangeLog
416
416
 
417
+ ## Version 2.1.17
418
+
419
+ - Add backend member mock
420
+
421
+ ## Version 2.1.16
422
+
423
+ - Upgrade i18n
424
+
417
425
  ## Version 2.1.15
418
426
 
419
427
  - Upgrade i18n/ecies
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digitaldefiance/node-ecies-lib",
3
- "version": "2.1.15",
3
+ "version": "2.1.17",
4
4
  "description": "Digital Defiance Node ECIES Library",
5
5
  "main": "src/index.js",
6
6
  "types": "src/index.d.ts",
@@ -34,8 +34,8 @@
34
34
  "license": "MIT",
35
35
  "packageManager": "yarn@4.10.3",
36
36
  "dependencies": {
37
- "@digitaldefiance/ecies-lib": "2.1.15",
38
- "@digitaldefiance/i18n-lib": "2.1.15",
37
+ "@digitaldefiance/ecies-lib": "2.1.17",
38
+ "@digitaldefiance/i18n-lib": "2.1.16",
39
39
  "@ethereumjs/wallet": "^10.0.0",
40
40
  "@noble/curves": "^2.0.1",
41
41
  "@noble/hashes": "^2.0.1",
package/src/index.d.ts CHANGED
@@ -8,4 +8,5 @@ export * from './interfaces';
8
8
  export * from './member';
9
9
  export * from './services';
10
10
  export * from './types';
11
+ export * from './test-mocks';
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/digitaldefiance-node-ecies-lib/src/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AAGtB,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/digitaldefiance-node-ecies-lib/src/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AAGtB,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AAGxB,cAAc,cAAc,CAAC"}
package/src/index.js CHANGED
@@ -13,4 +13,6 @@ tslib_1.__exportStar(require("./interfaces"), exports);
13
13
  tslib_1.__exportStar(require("./member"), exports);
14
14
  tslib_1.__exportStar(require("./services"), exports);
15
15
  tslib_1.__exportStar(require("./types"), exports);
16
+ // test helpers for consumers
17
+ tslib_1.__exportStar(require("./test-mocks"), exports);
16
18
  //# sourceMappingURL=index.js.map
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/digitaldefiance-node-ecies-lib/src/index.ts"],"names":[],"mappings":";;;AAAA,0BAA0B;AAC1B,qDAA2B;AAC3B,iDAAuB;AACvB,gDAAsB;AAEtB,4CAA4C;AAC5C,sDAA4B;AAC5B,yDAA+B;AAC/B,iDAAuB;AACvB,uDAA6B;AAC7B,mDAAyB;AACzB,qDAA2B;AAC3B,kDAAwB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/digitaldefiance-node-ecies-lib/src/index.ts"],"names":[],"mappings":";;;AAAA,0BAA0B;AAC1B,qDAA2B;AAC3B,iDAAuB;AACvB,gDAAsB;AAEtB,4CAA4C;AAC5C,sDAA4B;AAC5B,yDAA+B;AAC/B,iDAAuB;AACvB,uDAA6B;AAC7B,mDAAyB;AACzB,qDAA2B;AAC3B,kDAAwB;AAExB,6BAA6B;AAC7B,uDAA6B"}
@@ -0,0 +1,2 @@
1
+ export * from './mock-backend-member';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-ecies-lib/src/test-mocks/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./mock-backend-member"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-ecies-lib/src/test-mocks/index.ts"],"names":[],"mappings":";;;AAAA,gEAAsC"}
@@ -0,0 +1,70 @@
1
+ import { EmailString, MemberType, SecureBuffer, SecureString } from '@digitaldefiance/ecies-lib';
2
+ import { Wallet } from '@ethereumjs/wallet';
3
+ import { Types } from 'mongoose';
4
+ import { IMemberOperational } from '../interfaces';
5
+ import { SignatureBuffer } from '../types';
6
+ export declare class MockBackendMember implements IMemberOperational<Types.ObjectId> {
7
+ private _id;
8
+ private _type;
9
+ private _name;
10
+ private _email;
11
+ private _publicKey;
12
+ private _creatorId;
13
+ private _dateCreated;
14
+ private _dateUpdated;
15
+ private _privateKey?;
16
+ private _wallet?;
17
+ private _hasPrivateKey;
18
+ constructor(data?: Partial<{
19
+ id: Types.ObjectId;
20
+ type: MemberType;
21
+ name: string;
22
+ email: EmailString;
23
+ publicKey: Buffer;
24
+ privateKey: SecureBuffer;
25
+ wallet: Wallet;
26
+ creatorId: Types.ObjectId;
27
+ dateCreated: Date;
28
+ dateUpdated: Date;
29
+ hasPrivateKey: boolean;
30
+ }>);
31
+ get id(): Types.ObjectId;
32
+ get type(): MemberType;
33
+ get name(): string;
34
+ get email(): EmailString;
35
+ get publicKey(): Uint8Array;
36
+ get creatorId(): Types.ObjectId;
37
+ get dateCreated(): Date;
38
+ get dateUpdated(): Date;
39
+ get privateKey(): SecureBuffer | undefined;
40
+ get wallet(): Wallet | undefined;
41
+ get hasPrivateKey(): boolean;
42
+ unloadPrivateKey(): void;
43
+ unloadWallet(): void;
44
+ unloadWalletAndPrivateKey(): void;
45
+ loadWallet(mnemonic: SecureString): void;
46
+ loadPrivateKey(privateKey: SecureBuffer): void;
47
+ sign(data: Buffer): SignatureBuffer;
48
+ verify(signature: SignatureBuffer, data: Buffer): boolean;
49
+ encryptData(data: string | Buffer): Uint8Array;
50
+ decryptData(encryptedData: Buffer): Uint8Array;
51
+ toJson(): string;
52
+ dispose(): void;
53
+ static create(overrides?: Partial<{
54
+ id: Types.ObjectId;
55
+ type: MemberType;
56
+ name: string;
57
+ email: EmailString;
58
+ publicKey: Buffer;
59
+ privateKey: SecureBuffer;
60
+ wallet: Wallet;
61
+ creatorId: Types.ObjectId;
62
+ dateCreated: Date;
63
+ dateUpdated: Date;
64
+ hasPrivateKey: boolean;
65
+ }>): MockBackendMember;
66
+ static createMultiple(count: number): MockBackendMember[];
67
+ static createWithPrivateKey(): MockBackendMember;
68
+ static createWithoutPrivateKey(): MockBackendMember;
69
+ }
70
+ //# sourceMappingURL=mock-backend-member.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-backend-member.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-ecies-lib/src/test-mocks/mock-backend-member.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-backend-member.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-ecies-lib/src/test-mocks/mock-backend-member.ts"],"names":[],"mappings":"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"}