@digitaldefiance/ecies-lib 2.1.16 → 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
@@ -643,6 +643,8 @@ const passwordLogin = new PasswordLoginService(ecies, pbkdf2);
643
643
 
644
644
  ## ChangeLog
645
645
 
646
+ ## v2.1.17 - Add frontend member mock
647
+
646
648
  ## v2.1.16 - upgrade i18n
647
649
 
648
650
  ## v2.1.15 - upgrade i18n
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digitaldefiance/ecies-lib",
3
- "version": "2.1.16",
3
+ "version": "2.1.17",
4
4
  "description": "Digital Defiance ECIES Library",
5
5
  "main": "src/index.js",
6
6
  "types": "src/index.d.ts",
@@ -0,0 +1,2 @@
1
+ export * from './mock-frontend-member';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/test-mocks/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,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-frontend-member"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/test-mocks/index.ts"],"names":[],"mappings":";;;AAAA,iEAAuC"}
@@ -0,0 +1,70 @@
1
+ import { EmailString, MemberType, SecureBuffer, SecureString } from '@digitaldefiance/ecies-lib';
2
+ import { Wallet } from '@ethereumjs/wallet';
3
+ import { ObjectId } from 'bson';
4
+ import { IMemberOperational } from '../interfaces';
5
+ import { SignatureUint8Array } from '../types';
6
+ export declare class MockFrontendMember implements IMemberOperational<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: ObjectId;
20
+ type: MemberType;
21
+ name: string;
22
+ email: EmailString;
23
+ publicKey: Uint8Array;
24
+ privateKey: SecureBuffer;
25
+ wallet: Wallet;
26
+ creatorId: ObjectId;
27
+ dateCreated: Date;
28
+ dateUpdated: Date;
29
+ hasPrivateKey: boolean;
30
+ }>);
31
+ get id(): ObjectId;
32
+ get type(): MemberType;
33
+ get name(): string;
34
+ get email(): EmailString;
35
+ get publicKey(): Uint8Array;
36
+ get creatorId(): 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: Uint8Array): SignatureUint8Array;
48
+ verify(signature: SignatureUint8Array, data: Uint8Array): boolean;
49
+ encryptData(data: string | Uint8Array): Promise<Uint8Array>;
50
+ decryptData(encryptedData: Uint8Array): Promise<Uint8Array>;
51
+ toJson(): string;
52
+ dispose(): void;
53
+ static create(overrides?: Partial<{
54
+ id: ObjectId;
55
+ type: MemberType;
56
+ name: string;
57
+ email: EmailString;
58
+ publicKey: Uint8Array;
59
+ privateKey: SecureBuffer;
60
+ wallet: Wallet;
61
+ creatorId: ObjectId;
62
+ dateCreated: Date;
63
+ dateUpdated: Date;
64
+ hasPrivateKey: boolean;
65
+ }>): MockFrontendMember;
66
+ static createMultiple(count: number): MockFrontendMember[];
67
+ static createWithPrivateKey(): MockFrontendMember;
68
+ static createWithoutPrivateKey(): MockFrontendMember;
69
+ }
70
+ //# sourceMappingURL=mock-frontend-member.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-frontend-member.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/test-mocks/mock-frontend-member.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockFrontendMember = void 0;
4
+ const ecies_lib_1 = require("@digitaldefiance/ecies-lib");
5
+ const faker_1 = require("@faker-js/faker");
6
+ const bson_1 = require("bson");
7
+ const hexToUint8Array = (hex) => {
8
+ const clean = hex.replace(/^0x/, '');
9
+ const bytes = new Uint8Array(clean.length / 2);
10
+ for (let i = 0; i < clean.length; i += 2) {
11
+ bytes[i / 2] = parseInt(clean.slice(i, i + 2), 16);
12
+ }
13
+ return bytes;
14
+ };
15
+ const createMockWallet = () => ({
16
+ getPrivateKey: () => hexToUint8Array(faker_1.faker.string.hexadecimal({ length: 64 })),
17
+ getPublicKey: () => hexToUint8Array(faker_1.faker.string.hexadecimal({ length: 128 })),
18
+ getAddress: () => hexToUint8Array(faker_1.faker.string.hexadecimal({ length: 40 })),
19
+ sign: () => hexToUint8Array(faker_1.faker.string.hexadecimal({ length: 128 })),
20
+ });
21
+ class MockFrontendMember {
22
+ _id;
23
+ _type;
24
+ _name;
25
+ _email;
26
+ _publicKey;
27
+ _creatorId;
28
+ _dateCreated;
29
+ _dateUpdated;
30
+ _privateKey;
31
+ _wallet;
32
+ _hasPrivateKey;
33
+ constructor(data = {}) {
34
+ this._id = data.id || new bson_1.ObjectId();
35
+ this._type = data.type || faker_1.faker.helpers.enumValue(ecies_lib_1.MemberType);
36
+ this._name = data.name || faker_1.faker.person.fullName();
37
+ this._email = data.email || new ecies_lib_1.EmailString(faker_1.faker.internet.email());
38
+ this._publicKey =
39
+ data.publicKey ||
40
+ hexToUint8Array(faker_1.faker.string.hexadecimal({ length: 130 }));
41
+ this._creatorId = data.creatorId || this._id;
42
+ this._dateCreated = data.dateCreated || faker_1.faker.date.past();
43
+ this._dateUpdated =
44
+ data.dateUpdated ||
45
+ faker_1.faker.date.between({ from: this._dateCreated, to: new Date() });
46
+ this._privateKey = data.privateKey;
47
+ this._wallet =
48
+ data.wallet ||
49
+ (data.hasPrivateKey !== false ? createMockWallet() : undefined);
50
+ this._hasPrivateKey = data.hasPrivateKey ?? !!this._privateKey;
51
+ }
52
+ get id() {
53
+ return this._id;
54
+ }
55
+ get type() {
56
+ return this._type;
57
+ }
58
+ get name() {
59
+ return this._name;
60
+ }
61
+ get email() {
62
+ return this._email;
63
+ }
64
+ get publicKey() {
65
+ return this._publicKey;
66
+ }
67
+ get creatorId() {
68
+ return this._creatorId;
69
+ }
70
+ get dateCreated() {
71
+ return this._dateCreated;
72
+ }
73
+ get dateUpdated() {
74
+ return this._dateUpdated;
75
+ }
76
+ get privateKey() {
77
+ return this._privateKey;
78
+ }
79
+ get wallet() {
80
+ return this._wallet;
81
+ }
82
+ get hasPrivateKey() {
83
+ return this._hasPrivateKey;
84
+ }
85
+ unloadPrivateKey() { }
86
+ unloadWallet() { }
87
+ unloadWalletAndPrivateKey() { }
88
+ loadWallet(mnemonic) { }
89
+ loadPrivateKey(privateKey) { }
90
+ sign(data) {
91
+ return hexToUint8Array(faker_1.faker.string.hexadecimal({ length: 128 }));
92
+ }
93
+ verify(signature, data) {
94
+ return true;
95
+ }
96
+ async encryptData(data) {
97
+ return hexToUint8Array(faker_1.faker.string.hexadecimal({ length: 256 }));
98
+ }
99
+ async decryptData(encryptedData) {
100
+ const text = faker_1.faker.lorem.paragraph();
101
+ return new TextEncoder().encode(text);
102
+ }
103
+ toJson() {
104
+ return JSON.stringify({
105
+ id: this._id.toString(),
106
+ type: this._type,
107
+ name: this._name,
108
+ email: this._email.toString(),
109
+ publicKey: btoa(String.fromCharCode(...this._publicKey)),
110
+ creatorId: this._creatorId.toString(),
111
+ dateCreated: this._dateCreated.toISOString(),
112
+ dateUpdated: this._dateUpdated.toISOString(),
113
+ });
114
+ }
115
+ dispose() { }
116
+ static create(overrides = {}) {
117
+ return new MockFrontendMember(overrides);
118
+ }
119
+ static createMultiple(count) {
120
+ return Array.from({ length: count }, () => this.create());
121
+ }
122
+ static createWithPrivateKey() {
123
+ return new MockFrontendMember({
124
+ privateKey: new ecies_lib_1.SecureBuffer(hexToUint8Array(faker_1.faker.string.hexadecimal({ length: 64 }))),
125
+ hasPrivateKey: true,
126
+ });
127
+ }
128
+ static createWithoutPrivateKey() {
129
+ return new MockFrontendMember({
130
+ privateKey: undefined,
131
+ hasPrivateKey: false,
132
+ });
133
+ }
134
+ }
135
+ exports.MockFrontendMember = MockFrontendMember;
136
+ //# sourceMappingURL=mock-frontend-member.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-frontend-member.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/test-mocks/mock-frontend-member.ts"],"names":[],"mappings":"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"}