@brightchain/node-express-suite 0.29.2 → 0.29.5
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/package.json +1 -1
- package/src/lib/plugins/bright-db-database-plugin.d.ts +4 -0
- package/src/lib/plugins/bright-db-database-plugin.d.ts.map +1 -1
- package/src/lib/plugins/bright-db-database-plugin.js +17 -0
- package/src/lib/plugins/bright-db-database-plugin.js.map +1 -1
- package/src/lib/services/dev-store-seeder.d.ts +1 -0
- package/src/lib/services/dev-store-seeder.d.ts.map +1 -1
- package/src/lib/services/dev-store-seeder.js +17 -0
- package/src/lib/services/dev-store-seeder.js.map +1 -1
package/package.json
CHANGED
|
@@ -90,6 +90,10 @@ export declare class BrightDbDatabasePlugin<TID extends PlatformID> implements I
|
|
|
90
90
|
* Creates three members (system, admin, member) using MemberStore and
|
|
91
91
|
* prints their credentials to the console so the user can log in.
|
|
92
92
|
*
|
|
93
|
+
* After seeding, updates the environment's systemMnemonic so that
|
|
94
|
+
* SystemUserService.getSystemUser() can reconstruct the system member
|
|
95
|
+
* for request signing (e.g. requestDirectLogin challenge generation).
|
|
96
|
+
*
|
|
93
97
|
* Subclasses override with domain-specific seeding (e.g. full RBAC).
|
|
94
98
|
*/
|
|
95
99
|
initializeDevStore(): Promise<unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bright-db-database-plugin.d.ts","sourceRoot":"","sources":["../../../../../brightchain-node-express-suite/src/lib/plugins/bright-db-database-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"bright-db-database-plugin.d.ts","sourceRoot":"","sources":["../../../../../brightchain-node-express-suite/src/lib/plugins/bright-db-database-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EACV,YAAY,EACZ,uBAAuB,EACvB,eAAe,EAChB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAO1D,MAAM,WAAW,8BAA8B;IAC7C,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,qBAAa,sBAAsB,CAAC,GAAG,SAAS,UAAU,CACxD,YAAW,eAAe,CAAC,GAAG,CAAC;IAE/B,SAAgB,IAAI,EAAE,MAAM,CAAc;IAC1C,SAAgB,OAAO,EAAE,MAAM,CAAW;IAE1C,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAC1D,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAC1C,SAAS,CAAC,UAAU,UAAS;IAC7B,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAQ;IACjD,SAAS,CAAC,SAAS,EAAE,QAAQ,GAAG,IAAI,CAAQ;IAC5C,SAAS,CAAC,aAAa,EAAE,uBAAuB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAQ;gBAGlE,WAAW,EAAE,mBAAmB,CAAC,GAAG,CAAC,EACrC,OAAO,GAAE,8BAAmC;IAQ9C;;;;OAIG;IACH,IAAI,QAAQ,IAAI,SAAS,CAOxB;IAED;;;OAGG;IACH,IAAI,sBAAsB,IAAI,uBAAuB,CAAC,GAAG,CAAC,GAAG,SAAS,CAErE;IAED;;;;;;;;OAQG;IACG,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY3C;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;;;;;;;;;;OAWG;IACG,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAKtC;;;OAGG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvC;;;;;;;;;;;OAWG;IACG,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;IA4C5C;;;OAGG;IACH,IAAI,UAAU,IAAI,WAAW,CAO5B;IAED;;;OAGG;IACH,IAAI,QAAQ,IAAI,QAAQ,CAOvB;CACF"}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
exports.BrightDbDatabasePlugin = void 0;
|
|
14
|
+
const ecies_lib_1 = require("@digitaldefiance/ecies-lib");
|
|
14
15
|
const databaseInit_1 = require("../databaseInit");
|
|
15
16
|
const dev_store_seeder_1 = require("../services/dev-store-seeder");
|
|
16
17
|
class BrightDbDatabasePlugin {
|
|
@@ -127,6 +128,10 @@ class BrightDbDatabasePlugin {
|
|
|
127
128
|
* Creates three members (system, admin, member) using MemberStore and
|
|
128
129
|
* prints their credentials to the console so the user can log in.
|
|
129
130
|
*
|
|
131
|
+
* After seeding, updates the environment's systemMnemonic so that
|
|
132
|
+
* SystemUserService.getSystemUser() can reconstruct the system member
|
|
133
|
+
* for request signing (e.g. requestDirectLogin challenge generation).
|
|
134
|
+
*
|
|
130
135
|
* Subclasses override with domain-specific seeding (e.g. full RBAC).
|
|
131
136
|
*/
|
|
132
137
|
async initializeDevStore() {
|
|
@@ -138,6 +143,18 @@ class BrightDbDatabasePlugin {
|
|
|
138
143
|
this._environment.memberPoolName;
|
|
139
144
|
const result = await (0, dev_store_seeder_1.seedDevStore)(this._blockStore, this._brightDb, poolName, this._environment.emailDomain);
|
|
140
145
|
(0, dev_store_seeder_1.printDevStoreResults)(result);
|
|
146
|
+
// Update the environment with the generated system credentials so that
|
|
147
|
+
// SystemUserService.getSystemUser() can reconstruct the system member
|
|
148
|
+
// from the mnemonic. Without this, the env still holds the original
|
|
149
|
+
// (possibly empty) SYSTEM_MNEMONIC from the .env file, causing
|
|
150
|
+
// "Invalid mnemonic" errors on requestDirectLogin.
|
|
151
|
+
const systemMember = result.members.find((m) => m.name === 'system');
|
|
152
|
+
if (systemMember?.mnemonic) {
|
|
153
|
+
this._environment.setEnvironment('systemMnemonic', new ecies_lib_1.SecureString(systemMember.mnemonic));
|
|
154
|
+
}
|
|
155
|
+
if (systemMember?.publicKeyHex) {
|
|
156
|
+
this._environment.setEnvironment('systemPublicKeyHex', systemMember.publicKeyHex);
|
|
157
|
+
}
|
|
141
158
|
return result;
|
|
142
159
|
}
|
|
143
160
|
// ── Typed accessors ───────────────────────────────────────────────
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bright-db-database-plugin.js","sourceRoot":"","sources":["../../../../../brightchain-node-express-suite/src/lib/plugins/bright-db-database-plugin.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;
|
|
1
|
+
{"version":3,"file":"bright-db-database-plugin.js","sourceRoot":"","sources":["../../../../../brightchain-node-express-suite/src/lib/plugins/bright-db-database-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-store-seeder.d.ts","sourceRoot":"","sources":["../../../../../brightchain-node-express-suite/src/lib/services/dev-store-seeder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"dev-store-seeder.d.ts","sourceRoot":"","sources":["../../../../../brightchain-node-express-suite/src/lib/services/dev-store-seeder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAOhE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAe,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAIlE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB;AA4BD;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,GAAG,SAAS,UAAU,EACvD,UAAU,EAAE,WAAW,EACvB,EAAE,EAAE,QAAQ,EACZ,QAAQ,EAAE,MAAM,EAChB,WAAW,SAAgB,GAC1B,OAAO,CAAC,qBAAqB,CAAC,CA+ChC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAoBxE"}
|
|
@@ -52,6 +52,11 @@ async function seedDevStore(blockStore, db, poolName, emailDomain = 'example.com
|
|
|
52
52
|
(0, brightchain_lib_1.initializeBrightChain)();
|
|
53
53
|
const memberStore = new brightchain_lib_1.MemberStore(blockStore, db);
|
|
54
54
|
const results = [];
|
|
55
|
+
// Get the ECIES service for deriving public keys from mnemonics.
|
|
56
|
+
// ServiceProvider stores the base ecies-lib ECIESService; cast to the
|
|
57
|
+
// node-ecies-lib ECIESService which adds walletToSimpleKeyPairBuffer.
|
|
58
|
+
const eciesService = brightchain_lib_1.ServiceProvider.getInstance()
|
|
59
|
+
.eciesService;
|
|
55
60
|
for (const def of DEFAULT_DEV_MEMBERS) {
|
|
56
61
|
const email = `${def.name}@${emailDomain}`;
|
|
57
62
|
const memberData = {
|
|
@@ -60,11 +65,23 @@ async function seedDevStore(blockStore, db, poolName, emailDomain = 'example.com
|
|
|
60
65
|
contactEmail: new ecies_lib_1.EmailString(email),
|
|
61
66
|
};
|
|
62
67
|
const { reference, mnemonic } = await memberStore.createMember(memberData);
|
|
68
|
+
// Derive the public key hex from the mnemonic so callers can update
|
|
69
|
+
// the environment (e.g. SYSTEM_PUBLIC_KEY) without a second round-trip.
|
|
70
|
+
let publicKeyHex = '';
|
|
71
|
+
try {
|
|
72
|
+
const { wallet } = eciesService.walletAndSeedFromMnemonic(mnemonic);
|
|
73
|
+
const keyPair = eciesService.walletToSimpleKeyPairBuffer(wallet);
|
|
74
|
+
publicKeyHex = keyPair.publicKey.toString('hex');
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// Non-fatal — the public key is only used for an advisory warning
|
|
78
|
+
}
|
|
63
79
|
results.push({
|
|
64
80
|
label: def.label,
|
|
65
81
|
name: def.name,
|
|
66
82
|
email,
|
|
67
83
|
mnemonic: mnemonic.value ?? '',
|
|
84
|
+
publicKeyHex,
|
|
68
85
|
id: String(reference.id),
|
|
69
86
|
type: def.type,
|
|
70
87
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-store-seeder.js","sourceRoot":"","sources":["../../../../../brightchain-node-express-suite/src/lib/services/dev-store-seeder.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;
|
|
1
|
+
{"version":3,"file":"dev-store-seeder.js","sourceRoot":"","sources":["../../../../../brightchain-node-express-suite/src/lib/services/dev-store-seeder.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;AAuEH,oCAoDC;AAKD,oDAoBC;AAjJD,kEAKsC;AAEtC,0DAAqE;AA0BrE;;;GAGG;AACH,MAAM,mBAAmB,GAIpB;IACH;QACE,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,sBAAU,CAAC,MAAM;QACvB,IAAI,EAAE,QAAQ;KACf;IACD;QACE,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,sBAAU,CAAC,IAAI;QACrB,IAAI,EAAE,OAAO;KACd;IACD;QACE,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,sBAAU,CAAC,IAAI;QACrB,IAAI,EAAE,QAAQ;KACf;CACF,CAAC;AAEF;;;;;;;;GAQG;AACI,KAAK,UAAU,YAAY,CAChC,UAAuB,EACvB,EAAY,EACZ,QAAgB,EAChB,WAAW,GAAG,aAAa;IAE3B,oFAAoF;IACpF,oFAAoF;IACpF,IAAA,uCAAqB,GAAE,CAAC;IAExB,MAAM,WAAW,GAAG,IAAI,6BAAW,CAAM,UAAU,EAAE,EAAE,CAAC,CAAC;IACzD,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,iEAAiE;IACjE,sEAAsE;IACtE,sEAAsE;IACtE,MAAM,YAAY,GAAG,iCAAe,CAAC,WAAW,EAAO;SACpD,YAA4C,CAAC;IAEhD,KAAK,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;QAC3C,MAAM,UAAU,GAAmB;YACjC,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,YAAY,EAAE,IAAI,uBAAW,CAAC,KAAK,CAAC;SACrC,CAAC;QAEF,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAE3E,oEAAoE;QACpE,wEAAwE;QACxE,IAAI,YAAY,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;YACpE,MAAM,OAAO,GAAG,YAAY,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;YACjE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,kEAAkE;QACpE,CAAC;QAED,OAAO,CAAC,IAAI,CAAC;YACX,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,KAAK;YACL,QAAQ,EAAG,QAAyB,CAAC,KAAK,IAAI,EAAE;YAChD,YAAY;YACZ,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACxB,IAAI,EAAE,GAAG,CAAC,IAAI;SACf,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,MAA6B;IAChE,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAE9C,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,GAAG,CAAC,6CAA6C,CAAC,CAAC;IACnD,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,GAAG,CAAC,mBAAmB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC1C,GAAG,CAAC,uCAAuC,CAAC,CAAC;IAC7C,GAAG,CAAC,EAAE,CAAC,CAAC;IAER,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpC,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,cAAc,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAChD,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,cAAc,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAClD,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,cAAc,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACnD,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,cAAc,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtD,GAAG,CAAC,EAAE,CAAC,CAAC;IACV,CAAC;IAED,GAAG,CAAC,iDAAiD,CAAC,CAAC;IACvD,GAAG,CAAC,EAAE,CAAC,CAAC;AACV,CAAC"}
|