@brightchain/node-express-suite 0.25.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 (127) hide show
  1. package/MIGRATION.md +131 -0
  2. package/README.md +11 -0
  3. package/package.json +18 -0
  4. package/src/index.d.ts +46 -0
  5. package/src/index.d.ts.map +1 -0
  6. package/src/index.js +73 -0
  7. package/src/index.js.map +1 -0
  8. package/src/lib/application.d.ts +35 -0
  9. package/src/lib/application.d.ts.map +1 -0
  10. package/src/lib/application.js +38 -0
  11. package/src/lib/application.js.map +1 -0
  12. package/src/lib/bright-db-model-registry.d.ts +56 -0
  13. package/src/lib/bright-db-model-registry.d.ts.map +1 -0
  14. package/src/lib/bright-db-model-registry.js +71 -0
  15. package/src/lib/bright-db-model-registry.js.map +1 -0
  16. package/src/lib/brightchain-lib.d.ts +7 -0
  17. package/src/lib/brightchain-lib.d.ts.map +1 -0
  18. package/src/lib/brightchain-lib.js +12 -0
  19. package/src/lib/brightchain-lib.js.map +1 -0
  20. package/src/lib/brightdb.d.ts +7 -0
  21. package/src/lib/brightdb.d.ts.map +1 -0
  22. package/src/lib/brightdb.js +11 -0
  23. package/src/lib/brightdb.js.map +1 -0
  24. package/src/lib/constants.d.ts +6 -0
  25. package/src/lib/constants.d.ts.map +1 -0
  26. package/src/lib/constants.js +12 -0
  27. package/src/lib/constants.js.map +1 -0
  28. package/src/lib/create-test-app.d.ts +22 -0
  29. package/src/lib/create-test-app.d.ts.map +1 -0
  30. package/src/lib/create-test-app.js +49 -0
  31. package/src/lib/create-test-app.js.map +1 -0
  32. package/src/lib/databaseInit.d.ts +53 -0
  33. package/src/lib/databaseInit.d.ts.map +1 -0
  34. package/src/lib/databaseInit.js +114 -0
  35. package/src/lib/databaseInit.js.map +1 -0
  36. package/src/lib/datastore/block-document-store-factory.d.ts +31 -0
  37. package/src/lib/datastore/block-document-store-factory.d.ts.map +1 -0
  38. package/src/lib/datastore/block-document-store-factory.js +35 -0
  39. package/src/lib/datastore/block-document-store-factory.js.map +1 -0
  40. package/src/lib/datastore/block-document-store.d.ts +201 -0
  41. package/src/lib/datastore/block-document-store.d.ts.map +1 -0
  42. package/src/lib/datastore/block-document-store.js +649 -0
  43. package/src/lib/datastore/block-document-store.js.map +1 -0
  44. package/src/lib/datastore/document-store.d.ts +83 -0
  45. package/src/lib/datastore/document-store.d.ts.map +1 -0
  46. package/src/lib/datastore/document-store.js +3 -0
  47. package/src/lib/datastore/document-store.js.map +1 -0
  48. package/src/lib/datastore/index.d.ts +6 -0
  49. package/src/lib/datastore/index.d.ts.map +1 -0
  50. package/src/lib/datastore/index.js +11 -0
  51. package/src/lib/datastore/index.js.map +1 -0
  52. package/src/lib/datastore/memory-document-store.d.ts +9 -0
  53. package/src/lib/datastore/memory-document-store.d.ts.map +1 -0
  54. package/src/lib/datastore/memory-document-store.js +218 -0
  55. package/src/lib/datastore/memory-document-store.js.map +1 -0
  56. package/src/lib/environment.d.ts +64 -0
  57. package/src/lib/environment.d.ts.map +1 -0
  58. package/src/lib/environment.js +165 -0
  59. package/src/lib/environment.js.map +1 -0
  60. package/src/lib/factories/blockStoreFactory.d.ts +10 -0
  61. package/src/lib/factories/blockStoreFactory.d.ts.map +1 -0
  62. package/src/lib/factories/blockStoreFactory.js +14 -0
  63. package/src/lib/factories/blockStoreFactory.js.map +1 -0
  64. package/src/lib/interfaces/bright-db-application.d.ts +34 -0
  65. package/src/lib/interfaces/bright-db-application.d.ts.map +1 -0
  66. package/src/lib/interfaces/bright-db-application.js +13 -0
  67. package/src/lib/interfaces/bright-db-application.js.map +1 -0
  68. package/src/lib/interfaces/environment.d.ts +34 -0
  69. package/src/lib/interfaces/environment.d.ts.map +1 -0
  70. package/src/lib/interfaces/environment.js +11 -0
  71. package/src/lib/interfaces/environment.js.map +1 -0
  72. package/src/lib/middleware/index.d.ts +2 -0
  73. package/src/lib/middleware/index.d.ts.map +1 -0
  74. package/src/lib/middleware/index.js +6 -0
  75. package/src/lib/middleware/index.js.map +1 -0
  76. package/src/lib/middleware/validateBody.d.ts +13 -0
  77. package/src/lib/middleware/validateBody.d.ts.map +1 -0
  78. package/src/lib/middleware/validateBody.js +35 -0
  79. package/src/lib/middleware/validateBody.js.map +1 -0
  80. package/src/lib/middlewares.d.ts +9 -0
  81. package/src/lib/middlewares.d.ts.map +1 -0
  82. package/src/lib/middlewares.js +21 -0
  83. package/src/lib/middlewares.js.map +1 -0
  84. package/src/lib/plugins/bright-db-database-plugin.d.ts +95 -0
  85. package/src/lib/plugins/bright-db-database-plugin.d.ts.map +1 -0
  86. package/src/lib/plugins/bright-db-database-plugin.js +143 -0
  87. package/src/lib/plugins/bright-db-database-plugin.js.map +1 -0
  88. package/src/lib/plugins/configure-bright-db-app.d.ts +25 -0
  89. package/src/lib/plugins/configure-bright-db-app.d.ts.map +1 -0
  90. package/src/lib/plugins/configure-bright-db-app.js +31 -0
  91. package/src/lib/plugins/configure-bright-db-app.js.map +1 -0
  92. package/src/lib/services/bright-db-authentication-provider.d.ts +31 -0
  93. package/src/lib/services/bright-db-authentication-provider.d.ts.map +1 -0
  94. package/src/lib/services/bright-db-authentication-provider.js +91 -0
  95. package/src/lib/services/bright-db-authentication-provider.js.map +1 -0
  96. package/src/lib/services/bright-db-base-service.d.ts +26 -0
  97. package/src/lib/services/bright-db-base-service.d.ts.map +1 -0
  98. package/src/lib/services/bright-db-base-service.js +30 -0
  99. package/src/lib/services/bright-db-base-service.js.map +1 -0
  100. package/src/lib/services/bright-db-collection.d.ts +50 -0
  101. package/src/lib/services/bright-db-collection.d.ts.map +1 -0
  102. package/src/lib/services/bright-db-collection.js +116 -0
  103. package/src/lib/services/bright-db-collection.js.map +1 -0
  104. package/src/lib/services/sessionAdapter.d.ts +62 -0
  105. package/src/lib/services/sessionAdapter.d.ts.map +1 -0
  106. package/src/lib/services/sessionAdapter.js +106 -0
  107. package/src/lib/services/sessionAdapter.js.map +1 -0
  108. package/src/lib/shared-types.d.ts +41 -0
  109. package/src/lib/shared-types.d.ts.map +1 -0
  110. package/src/lib/shared-types.js +3 -0
  111. package/src/lib/shared-types.js.map +1 -0
  112. package/src/lib/transactions/bright-db-transaction-manager.d.ts +46 -0
  113. package/src/lib/transactions/bright-db-transaction-manager.d.ts.map +1 -0
  114. package/src/lib/transactions/bright-db-transaction-manager.js +81 -0
  115. package/src/lib/transactions/bright-db-transaction-manager.js.map +1 -0
  116. package/src/lib/types/backend-id.d.ts +3 -0
  117. package/src/lib/types/backend-id.d.ts.map +1 -0
  118. package/src/lib/types/backend-id.js +3 -0
  119. package/src/lib/types/backend-id.js.map +1 -0
  120. package/src/lib/upstream.d.ts +8 -0
  121. package/src/lib/upstream.d.ts.map +1 -0
  122. package/src/lib/upstream.js +13 -0
  123. package/src/lib/upstream.js.map +1 -0
  124. package/src/lib/validation/userValidation.d.ts +44 -0
  125. package/src/lib/validation/userValidation.d.ts.map +1 -0
  126. package/src/lib/validation/userValidation.js +147 -0
  127. package/src/lib/validation/userValidation.js.map +1 -0
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BrightDbAuthenticationProvider = void 0;
4
+ const jsonwebtoken_1 = require("jsonwebtoken");
5
+ /**
6
+ * Generic BrightDB-backed authentication provider.
7
+ *
8
+ * Provides basic user lookup from BrightDB `users` collection and JWT
9
+ * token verification. Domain-specific auth (MemberStore, mnemonic auth,
10
+ * password auth) is added by subclasses.
11
+ */
12
+ class BrightDbAuthenticationProvider {
13
+ db;
14
+ jwtSecret;
15
+ constructor(db, jwtSecret) {
16
+ this.db = db;
17
+ this.jwtSecret = jwtSecret;
18
+ }
19
+ /**
20
+ * Find a user by ID from the `users` collection.
21
+ * Subclasses override to try MemberStore first.
22
+ */
23
+ async findUserById(userId) {
24
+ try {
25
+ const usersCol = this.db.collection('users');
26
+ const userDoc = await usersCol.findOne({ _id: userId });
27
+ if (!userDoc)
28
+ return null;
29
+ return {
30
+ id: userId,
31
+ accountStatus: userDoc.accountStatus ?? 'Active',
32
+ email: userDoc.email ?? '',
33
+ siteLanguage: userDoc.siteLanguage,
34
+ timezone: userDoc.timezone ?? 'UTC',
35
+ lastLogin: userDoc.lastLogin,
36
+ };
37
+ }
38
+ catch {
39
+ return null;
40
+ }
41
+ }
42
+ /**
43
+ * Build a request user DTO from the `users` collection.
44
+ * Subclasses override to try MemberStore first.
45
+ */
46
+ async buildRequestUserDTO(userId) {
47
+ try {
48
+ const usersCol = this.db.collection('users');
49
+ const userDoc = await usersCol.findOne({ _id: userId });
50
+ if (!userDoc)
51
+ return null;
52
+ if (userDoc.accountStatus && userDoc.accountStatus !== 'Active') {
53
+ return null;
54
+ }
55
+ return {
56
+ id: userId,
57
+ email: userDoc.email ?? '',
58
+ username: userDoc.username ?? '',
59
+ roles: [],
60
+ rolePrivileges: { admin: false, member: true, child: false, system: false },
61
+ emailVerified: userDoc.emailVerified ?? true,
62
+ timezone: userDoc.timezone ?? 'UTC',
63
+ siteLanguage: userDoc.siteLanguage ?? 'en',
64
+ darkMode: userDoc.darkMode ?? false,
65
+ currency: userDoc.currency ?? 'USD',
66
+ directChallenge: userDoc.directChallenge ?? false,
67
+ lastLogin: userDoc.lastLogin,
68
+ };
69
+ }
70
+ catch {
71
+ return null;
72
+ }
73
+ }
74
+ /**
75
+ * Verify a JWT token and return the decoded user.
76
+ */
77
+ async verifyToken(token) {
78
+ try {
79
+ const decoded = (0, jsonwebtoken_1.verify)(token, this.jwtSecret);
80
+ return {
81
+ userId: (decoded['memberId'] ?? decoded['userId'] ?? decoded['sub']),
82
+ roles: (decoded['roles'] ?? []),
83
+ };
84
+ }
85
+ catch {
86
+ return null;
87
+ }
88
+ }
89
+ }
90
+ exports.BrightDbAuthenticationProvider = BrightDbAuthenticationProvider;
91
+ //# sourceMappingURL=bright-db-authentication-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bright-db-authentication-provider.js","sourceRoot":"","sources":["../../../../../brightchain-node-express-suite/src/lib/services/bright-db-authentication-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @fileoverview BrightDB-specific base service extending the database-agnostic
3
+ * BaseService. Constrains TApplication to IBrightDbApplication so subclasses
4
+ * get type-safe access to .db, .getModel(), and .environment.
5
+ * Parallel to upstream's MongoBaseService.
6
+ *
7
+ * @module services/bright-db-base-service
8
+ */
9
+ import type { PlatformID } from '@digitaldefiance/node-ecies-lib';
10
+ import { BaseService } from '@digitaldefiance/node-express-suite';
11
+ import type { IBrightDbApplication } from '../interfaces/bright-db-application';
12
+ /**
13
+ * BrightDB-specific base service.
14
+ * Extends BaseService with TApplication constrained to IBrightDbApplication.
15
+ *
16
+ * Use this for services that need BrightDB-specific access (application.db,
17
+ * application.getModel, application.environment). Services that are
18
+ * database-agnostic should extend BaseService directly.
19
+ *
20
+ * @template TID - Platform ID type (defaults to Buffer)
21
+ * @template TApplication - Must extend IBrightDbApplication
22
+ */
23
+ export declare class BrightDbBaseService<TID extends PlatformID = Buffer, TApplication extends IBrightDbApplication<TID> = IBrightDbApplication<TID>> extends BaseService<TID, TApplication> {
24
+ constructor(application: TApplication);
25
+ }
26
+ //# sourceMappingURL=bright-db-base-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bright-db-base-service.d.ts","sourceRoot":"","sources":["../../../../../brightchain-node-express-suite/src/lib/services/bright-db-base-service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAClE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAEhF;;;;;;;;;;GAUG;AACH,qBAAa,mBAAmB,CAC9B,GAAG,SAAS,UAAU,GAAG,MAAM,EAC/B,YAAY,SAAS,oBAAoB,CAAC,GAAG,CAAC,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAC1E,SAAQ,WAAW,CAAC,GAAG,EAAE,YAAY,CAAC;gBAC1B,WAAW,EAAE,YAAY;CAGtC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview BrightDB-specific base service extending the database-agnostic
4
+ * BaseService. Constrains TApplication to IBrightDbApplication so subclasses
5
+ * get type-safe access to .db, .getModel(), and .environment.
6
+ * Parallel to upstream's MongoBaseService.
7
+ *
8
+ * @module services/bright-db-base-service
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.BrightDbBaseService = void 0;
12
+ const node_express_suite_1 = require("@digitaldefiance/node-express-suite");
13
+ /**
14
+ * BrightDB-specific base service.
15
+ * Extends BaseService with TApplication constrained to IBrightDbApplication.
16
+ *
17
+ * Use this for services that need BrightDB-specific access (application.db,
18
+ * application.getModel, application.environment). Services that are
19
+ * database-agnostic should extend BaseService directly.
20
+ *
21
+ * @template TID - Platform ID type (defaults to Buffer)
22
+ * @template TApplication - Must extend IBrightDbApplication
23
+ */
24
+ class BrightDbBaseService extends node_express_suite_1.BaseService {
25
+ constructor(application) {
26
+ super(application);
27
+ }
28
+ }
29
+ exports.BrightDbBaseService = BrightDbBaseService;
30
+ //# sourceMappingURL=bright-db-base-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bright-db-base-service.js","sourceRoot":"","sources":["../../../../../brightchain-node-express-suite/src/lib/services/bright-db-base-service.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAGH,4EAAkE;AAGlE;;;;;;;;;;GAUG;AACH,MAAa,mBAGX,SAAQ,gCAA8B;IACtC,YAAY,WAAyB;QACnC,KAAK,CAAC,WAAW,CAAC,CAAC;IACrB,CAAC;CACF;AAPD,kDAOC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @fileoverview BrightDB collection adapter implementing ICollection.
3
+ * Wraps a @brightchain/db Collection to conform to the shared ICollection
4
+ * interface from @digitaldefiance/suite-core-lib.
5
+ * Parallel to upstream's MongooseCollection.
6
+ *
7
+ * @module services/bright-db-collection
8
+ */
9
+ import type { Collection } from '@brightchain/db';
10
+ import type { AggregationStage, BsonDocument, BulkWriteOperation, BulkWriteOptions, BulkWriteResult, ChangeListener, CollectionSchema, DeleteResult, DocumentId, FilterQuery, FindOptions, ICollection, IndexOptions, IndexSpec, InsertManyResult, InsertOneResult, ReadPreference, ReplaceResult, TextIndexOptions, UpdateOptions, UpdateQuery, UpdateResult, ValidationFieldError, WriteConcern, WriteOptions } from '@digitaldefiance/suite-core-lib';
11
+ /**
12
+ * Adapts a @brightchain/db Collection to the ICollection<T> interface.
13
+ * Delegates all operations to the underlying BrightDB collection.
14
+ */
15
+ export declare class BrightDbCollection<T extends BsonDocument = BsonDocument> implements ICollection<T> {
16
+ private readonly _collection;
17
+ constructor(_collection: Collection<T>);
18
+ insertOne(doc: T, options?: WriteOptions): Promise<InsertOneResult>;
19
+ insertMany(docs: T[], options?: WriteOptions): Promise<InsertManyResult>;
20
+ findOne(filter?: FilterQuery<T>, options?: FindOptions<T>): Promise<T | null>;
21
+ find(filter?: FilterQuery<T>, options?: FindOptions<T>): T[] | PromiseLike<T[]>;
22
+ findById(id: DocumentId): Promise<T | null>;
23
+ updateOne(filter: FilterQuery<T>, update: UpdateQuery<T>, options?: UpdateOptions): Promise<UpdateResult>;
24
+ updateMany(filter: FilterQuery<T>, update: UpdateQuery<T>, options?: UpdateOptions): Promise<UpdateResult>;
25
+ deleteOne(filter: FilterQuery<T>, options?: WriteOptions): Promise<DeleteResult>;
26
+ deleteMany(filter: FilterQuery<T>, options?: WriteOptions): Promise<DeleteResult>;
27
+ replaceOne(filter: FilterQuery<T>, doc: T, options?: UpdateOptions): Promise<ReplaceResult>;
28
+ countDocuments(filter?: FilterQuery<T>): Promise<number>;
29
+ estimatedDocumentCount(): Promise<number>;
30
+ distinct<K extends keyof T>(field: K, filter?: FilterQuery<T>): Promise<Array<T[K]>>;
31
+ aggregate(pipeline: AggregationStage[]): Promise<BsonDocument[]>;
32
+ createIndex(spec: IndexSpec, options?: IndexOptions): Promise<string>;
33
+ dropIndex(name: string): Promise<void>;
34
+ listIndexes(): string[];
35
+ bulkWrite(operations: BulkWriteOperation<T>[], options?: BulkWriteOptions): Promise<BulkWriteResult>;
36
+ watch(listener: ChangeListener<T>): () => void;
37
+ setSchema(schema: CollectionSchema): void;
38
+ getSchema(): CollectionSchema | undefined;
39
+ removeSchema(): void;
40
+ validateDoc(doc: T): ValidationFieldError[];
41
+ getWriteConcern(): WriteConcern;
42
+ setWriteConcern(wc: WriteConcern): void;
43
+ getReadPreference(): ReadPreference;
44
+ setReadPreference(rp: ReadPreference): void;
45
+ createTextIndex(options: TextIndexOptions): string;
46
+ dropTextIndex(): void;
47
+ hasTextIndex(): boolean;
48
+ drop(): Promise<void>;
49
+ }
50
+ //# sourceMappingURL=bright-db-collection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bright-db-collection.d.ts","sourceRoot":"","sources":["../../../../../brightchain-node-express-suite/src/lib/services/bright-db-collection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview BrightDB collection adapter implementing ICollection.
4
+ * Wraps a @brightchain/db Collection to conform to the shared ICollection
5
+ * interface from @digitaldefiance/suite-core-lib.
6
+ * Parallel to upstream's MongooseCollection.
7
+ *
8
+ * @module services/bright-db-collection
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.BrightDbCollection = void 0;
12
+ /**
13
+ * Adapts a @brightchain/db Collection to the ICollection<T> interface.
14
+ * Delegates all operations to the underlying BrightDB collection.
15
+ */
16
+ class BrightDbCollection {
17
+ _collection;
18
+ constructor(_collection) {
19
+ this._collection = _collection;
20
+ }
21
+ async insertOne(doc, options) {
22
+ return this._collection.insertOne(doc, options);
23
+ }
24
+ async insertMany(docs, options) {
25
+ return this._collection.insertMany(docs, options);
26
+ }
27
+ async findOne(filter, options) {
28
+ return this._collection.findOne(filter, options);
29
+ }
30
+ find(filter, options) {
31
+ return this._collection.find(filter, options);
32
+ }
33
+ async findById(id) {
34
+ return this._collection.findById(id);
35
+ }
36
+ async updateOne(filter, update, options) {
37
+ return this._collection.updateOne(filter, update, options);
38
+ }
39
+ async updateMany(filter, update, options) {
40
+ return this._collection.updateMany(filter, update, options);
41
+ }
42
+ async deleteOne(filter, options) {
43
+ return this._collection.deleteOne(filter, options);
44
+ }
45
+ async deleteMany(filter, options) {
46
+ return this._collection.deleteMany(filter, options);
47
+ }
48
+ async replaceOne(filter, doc, options) {
49
+ return this._collection.replaceOne(filter, doc, options);
50
+ }
51
+ async countDocuments(filter) {
52
+ return this._collection.countDocuments(filter);
53
+ }
54
+ async estimatedDocumentCount() {
55
+ return this._collection.estimatedDocumentCount();
56
+ }
57
+ async distinct(field, filter) {
58
+ return this._collection.distinct(field, filter);
59
+ }
60
+ async aggregate(pipeline) {
61
+ return this._collection.aggregate(pipeline);
62
+ }
63
+ async createIndex(spec, options) {
64
+ return this._collection.createIndex(spec, options);
65
+ }
66
+ async dropIndex(name) {
67
+ return this._collection.dropIndex(name);
68
+ }
69
+ listIndexes() {
70
+ return this._collection.listIndexes();
71
+ }
72
+ async bulkWrite(operations, options) {
73
+ return this._collection.bulkWrite(operations, options);
74
+ }
75
+ watch(listener) {
76
+ return this._collection.watch(listener);
77
+ }
78
+ setSchema(schema) {
79
+ this._collection.setSchema(schema);
80
+ }
81
+ getSchema() {
82
+ return this._collection.getSchema();
83
+ }
84
+ removeSchema() {
85
+ this._collection.removeSchema();
86
+ }
87
+ validateDoc(doc) {
88
+ return this._collection.validateDoc(doc);
89
+ }
90
+ getWriteConcern() {
91
+ return this._collection.getWriteConcern();
92
+ }
93
+ setWriteConcern(wc) {
94
+ this._collection.setWriteConcern(wc);
95
+ }
96
+ getReadPreference() {
97
+ return this._collection.getReadPreference();
98
+ }
99
+ setReadPreference(rp) {
100
+ this._collection.setReadPreference(rp);
101
+ }
102
+ createTextIndex(options) {
103
+ return this._collection.createTextIndex(options);
104
+ }
105
+ dropTextIndex() {
106
+ this._collection.dropTextIndex();
107
+ }
108
+ hasTextIndex() {
109
+ return this._collection.hasTextIndex();
110
+ }
111
+ async drop() {
112
+ return this._collection.drop();
113
+ }
114
+ }
115
+ exports.BrightDbCollection = BrightDbCollection;
116
+ //# sourceMappingURL=bright-db-collection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bright-db-collection.js","sourceRoot":"","sources":["../../../../../brightchain-node-express-suite/src/lib/services/bright-db-collection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import type { BrightDb } from '@brightchain/db';
2
+ /**
3
+ * Shape of a session document stored in BrightDB.
4
+ * Exported so consumers (tests, controllers) can reference the type.
5
+ */
6
+ export interface ISessionDocument {
7
+ /** UUID v4 identifying this session. */
8
+ sessionId: string;
9
+ /** Hex-encoded member ID. */
10
+ memberId: string;
11
+ /** SHA-256 hex digest of the JWT token. */
12
+ tokenHash: string;
13
+ /** Epoch-ms when the session was created. */
14
+ createdAt: number;
15
+ /** Epoch-ms when the session expires. */
16
+ expiresAt: number;
17
+ }
18
+ /**
19
+ * Manages user sessions backed by a BrightDB `sessions` collection.
20
+ *
21
+ * Token hashes use SHA-256 (not bcrypt) so that `validateToken` can
22
+ * query by hash without a per-row compare.
23
+ */
24
+ export declare class BrightChainSessionAdapter {
25
+ private readonly db;
26
+ constructor(db: BrightDb);
27
+ /**
28
+ * Create a new session for the given member.
29
+ *
30
+ * @param memberId Hex string of the member's ID.
31
+ * @param token The raw JWT token (will be SHA-256 hashed for storage).
32
+ * @param ttlMs Time-to-live in milliseconds.
33
+ * @returns The generated UUID session ID.
34
+ */
35
+ createSession(memberId: string, token: string, ttlMs: number): Promise<string>;
36
+ /**
37
+ * Retrieve a session by its ID.
38
+ *
39
+ * @returns The session document, or `null` if not found or expired.
40
+ */
41
+ getSession(sessionId: string): Promise<ISessionDocument | null>;
42
+ /**
43
+ * Validate a raw JWT token against stored sessions.
44
+ *
45
+ * Hashes the token with SHA-256, looks up the matching session,
46
+ * and checks expiration.
47
+ *
48
+ * @returns The session document, or `null` if invalid / expired / missing.
49
+ */
50
+ validateToken(token: string): Promise<ISessionDocument | null>;
51
+ /**
52
+ * Delete a session by its ID.
53
+ */
54
+ deleteSession(sessionId: string): Promise<void>;
55
+ /**
56
+ * Remove all expired sessions.
57
+ *
58
+ * @returns The number of sessions removed.
59
+ */
60
+ cleanExpired(): Promise<number>;
61
+ }
62
+ //# sourceMappingURL=sessionAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionAdapter.d.ts","sourceRoot":"","sources":["../../../../../brightchain-node-express-suite/src/lib/services/sessionAdapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,iBAAiB,CAAC;AAI9D;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;CACnB;AAmBD;;;;;GAKG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAW;gBAElB,EAAE,EAAE,QAAQ;IAIxB;;;;;;;OAOG;IACG,aAAa,CACjB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC;IAkBlB;;;;OAIG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAQrE;;;;;;;OAOG;IACG,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IASpE;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrD;;;;OAIG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;CAQtC"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BrightChainSessionAdapter = void 0;
4
+ const crypto_1 = require("crypto");
5
+ const COLLECTION_SESSIONS = 'sessions';
6
+ /** Compute the SHA-256 hex digest of a string. */
7
+ function sha256Hex(value) {
8
+ return (0, crypto_1.createHash)('sha256').update(value).digest('hex');
9
+ }
10
+ /**
11
+ * Manages user sessions backed by a BrightDB `sessions` collection.
12
+ *
13
+ * Token hashes use SHA-256 (not bcrypt) so that `validateToken` can
14
+ * query by hash without a per-row compare.
15
+ */
16
+ class BrightChainSessionAdapter {
17
+ db;
18
+ constructor(db) {
19
+ this.db = db;
20
+ }
21
+ /**
22
+ * Create a new session for the given member.
23
+ *
24
+ * @param memberId Hex string of the member's ID.
25
+ * @param token The raw JWT token (will be SHA-256 hashed for storage).
26
+ * @param ttlMs Time-to-live in milliseconds.
27
+ * @returns The generated UUID session ID.
28
+ */
29
+ async createSession(memberId, token, ttlMs) {
30
+ const sessionId = (0, crypto_1.randomUUID)();
31
+ const now = Date.now();
32
+ const doc = {
33
+ sessionId,
34
+ memberId,
35
+ tokenHash: sha256Hex(token),
36
+ createdAt: now,
37
+ expiresAt: now + ttlMs,
38
+ };
39
+ const col = this.db.collection(COLLECTION_SESSIONS);
40
+ await col.insertOne(doc);
41
+ return sessionId;
42
+ }
43
+ /**
44
+ * Retrieve a session by its ID.
45
+ *
46
+ * @returns The session document, or `null` if not found or expired.
47
+ */
48
+ async getSession(sessionId) {
49
+ const col = this.db.collection(COLLECTION_SESSIONS);
50
+ const doc = await col.findOne({ sessionId });
51
+ if (!doc)
52
+ return null;
53
+ if (doc.expiresAt < Date.now())
54
+ return null;
55
+ return toSessionDocument(doc);
56
+ }
57
+ /**
58
+ * Validate a raw JWT token against stored sessions.
59
+ *
60
+ * Hashes the token with SHA-256, looks up the matching session,
61
+ * and checks expiration.
62
+ *
63
+ * @returns The session document, or `null` if invalid / expired / missing.
64
+ */
65
+ async validateToken(token) {
66
+ const tokenHash = sha256Hex(token);
67
+ const col = this.db.collection(COLLECTION_SESSIONS);
68
+ const doc = await col.findOne({ tokenHash });
69
+ if (!doc)
70
+ return null;
71
+ if (doc.expiresAt < Date.now())
72
+ return null;
73
+ return toSessionDocument(doc);
74
+ }
75
+ /**
76
+ * Delete a session by its ID.
77
+ */
78
+ async deleteSession(sessionId) {
79
+ const col = this.db.collection(COLLECTION_SESSIONS);
80
+ await col.deleteOne({ sessionId });
81
+ }
82
+ /**
83
+ * Remove all expired sessions.
84
+ *
85
+ * @returns The number of sessions removed.
86
+ */
87
+ async cleanExpired() {
88
+ const col = this.db.collection(COLLECTION_SESSIONS);
89
+ const now = Date.now();
90
+ // BrightDB's filter engine supports $lt on numeric fields.
91
+ const result = await col.deleteMany({ expiresAt: { $lt: now } });
92
+ return result.deletedCount;
93
+ }
94
+ }
95
+ exports.BrightChainSessionAdapter = BrightChainSessionAdapter;
96
+ /** Map a stored SessionDoc to the public ISessionDocument shape. */
97
+ function toSessionDocument(doc) {
98
+ return {
99
+ sessionId: doc.sessionId,
100
+ memberId: doc.memberId,
101
+ tokenHash: doc.tokenHash,
102
+ createdAt: doc.createdAt,
103
+ expiresAt: doc.expiresAt,
104
+ };
105
+ }
106
+ //# sourceMappingURL=sessionAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionAdapter.js","sourceRoot":"","sources":["../../../../../brightchain-node-express-suite/src/lib/services/sessionAdapter.ts"],"names":[],"mappings":";;;AAAA,mCAAgD;AAIhD,MAAM,mBAAmB,GAAG,UAAU,CAAC;AA+BvC,kDAAkD;AAClD,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;GAKG;AACH,MAAa,yBAAyB;IACnB,EAAE,CAAW;IAE9B,YAAY,EAAY;QACtB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,aAAa,CACjB,QAAgB,EAChB,KAAa,EACb,KAAa;QAEb,MAAM,SAAS,GAAG,IAAA,mBAAU,GAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,MAAM,GAAG,GAA4B;YACnC,SAAS;YACT,QAAQ;YACR,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC;YAC3B,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG,GAAG,KAAK;SACvB,CAAC;QAEF,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAa,mBAAmB,CAAC,CAAC;QAChE,MAAM,GAAG,CAAC,SAAS,CAAC,GAAiB,CAAC,CAAC;QAEvC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,UAAU,CAAC,SAAiB;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAa,mBAAmB,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,IAAI,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;YAAE,OAAO,IAAI,CAAC;QAC5C,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,aAAa,CAAC,KAAa;QAC/B,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAa,mBAAmB,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,IAAI,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;YAAE,OAAO,IAAI,CAAC;QAC5C,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,SAAiB;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAa,mBAAmB,CAAC,CAAC;QAChE,MAAM,GAAG,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IACrC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,YAAY;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAa,mBAAmB,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,2DAA2D;QAC3D,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACjE,OAAO,MAAM,CAAC,YAAY,CAAC;IAC7B,CAAC;CACF;AAxFD,8DAwFC;AAED,oEAAoE;AACpE,SAAS,iBAAiB,CAAC,GAAe;IACxC,OAAO;QACL,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,SAAS,EAAE,GAAG,CAAC,SAAS;KACzB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,41 @@
1
+ export type { GuidV4Buffer, SignatureBuffer, } from '@digitaldefiance/node-ecies-lib';
2
+ export type ClientSession = any;
3
+ import type { DefaultBackendIdType as DefaultBackendIdType_ } from './types/backend-id';
4
+ export type DefaultBackendIdType = DefaultBackendIdType_;
5
+ /**
6
+ * Block storage schema definition (replaces Mongoose Schema)
7
+ * Uses generic string for model name to avoid domain-specific enum dependency.
8
+ * Consumers can narrow the type with their own enum (e.g., ModelName from api-lib).
9
+ */
10
+ export interface IBlockStorageSchema<T> {
11
+ name: string;
12
+ fields: Record<string, unknown>;
13
+ indexes?: Array<{
14
+ fields: Record<string, number | undefined>;
15
+ options?: Record<string, unknown>;
16
+ }>;
17
+ validate?: (doc: Partial<T>) => void;
18
+ }
19
+ /**
20
+ * Block storage model definition (replaces Mongoose Model)
21
+ * Uses generic string for model name to avoid domain-specific enum dependency.
22
+ */
23
+ export interface IBlockStorageModel<T> {
24
+ readonly modelName: string;
25
+ readonly schema: IBlockStorageSchema<T>;
26
+ }
27
+ /**
28
+ * Block storage schema entry (replaces ISchema from node-express-suite)
29
+ * Uses generic strings for collection and model name to avoid domain-specific enum dependencies.
30
+ */
31
+ export interface IBlockStorageSchemaEntry<T> {
32
+ collection: string;
33
+ model: IBlockStorageModel<T>;
34
+ modelName: string;
35
+ schema: IBlockStorageSchema<T>;
36
+ }
37
+ /**
38
+ * Schema map type for validation schemas
39
+ */
40
+ export type SchemaMap = Record<string, IBlockStorageSchemaEntry<any>>;
41
+ //# sourceMappingURL=shared-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-types.d.ts","sourceRoot":"","sources":["../../../../brightchain-node-express-suite/src/lib/shared-types.ts"],"names":[],"mappings":"AACA,YAAY,EACV,YAAY,EACZ,eAAe,GAChB,MAAM,iCAAiC,CAAC;AAIzC,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC;AAKhC,OAAO,KAAK,EAAE,oBAAoB,IAAI,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACxF,MAAM,MAAM,oBAAoB,GAAG,qBAAqB,CAAC;AAEzD;;;;GAIG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;QAC3C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,CAAC,CAAC;IACH,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CACtC;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;CACzC;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB,CAAC,CAAC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;CAChC;AAED;;GAEG;AAEH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=shared-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-types.js","sourceRoot":"","sources":["../../../../brightchain-node-express-suite/src/lib/shared-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @fileoverview BrightDB transaction manager.
3
+ * Manages transaction lifecycle with retry logic and timeout support.
4
+ * Parallel to upstream's TransactionManager (which wraps Mongoose sessions).
5
+ *
6
+ * @module transactions/bright-db-transaction-manager
7
+ */
8
+ import type { BrightDb } from '@brightchain/db';
9
+ import type { IClientSession } from '@digitaldefiance/suite-core-lib';
10
+ /**
11
+ * Options for transaction execution.
12
+ */
13
+ export interface BrightDbTransactionOptions {
14
+ /** Transaction timeout in milliseconds */
15
+ timeoutMs?: number;
16
+ /** Maximum number of retry attempts (default: 0 = no retries) */
17
+ maxRetries?: number;
18
+ }
19
+ /**
20
+ * Manager for BrightDB transactions.
21
+ * Wraps @brightchain/db's session-based transaction support.
22
+ *
23
+ * When `useTransactions` is false, the callback is executed directly
24
+ * without a session (passthrough mode).
25
+ */
26
+ export declare class BrightDbTransactionManager {
27
+ private readonly db;
28
+ private readonly useTransactions;
29
+ constructor(db: BrightDb, useTransactions: boolean);
30
+ /**
31
+ * Executes a callback within a transaction.
32
+ *
33
+ * When transactions are enabled, creates a session, starts a transaction,
34
+ * and commits on success or aborts on failure. Supports retry logic.
35
+ *
36
+ * When transactions are disabled, runs the callback directly with
37
+ * `undefined` as the session parameter.
38
+ *
39
+ * @template T - Return type
40
+ * @param callback - Function to execute, receives session or undefined
41
+ * @param options - Transaction options (timeout, retries)
42
+ * @returns Result of callback execution
43
+ */
44
+ execute<T>(callback: (session: IClientSession | undefined) => Promise<T>, options?: BrightDbTransactionOptions): Promise<T>;
45
+ }
46
+ //# sourceMappingURL=bright-db-transaction-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bright-db-transaction-manager.d.ts","sourceRoot":"","sources":["../../../../../brightchain-node-express-suite/src/lib/transactions/bright-db-transaction-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,qBAAa,0BAA0B;IAEnC,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,eAAe;gBADf,EAAE,EAAE,QAAQ,EACZ,eAAe,EAAE,OAAO;IAG3C;;;;;;;;;;;;;OAaG;IACG,OAAO,CAAC,CAAC,EACb,QAAQ,EAAE,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,EAC7D,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAAC,CAAC,CAAC;CAgDd"}