@brightchain/brightchain-api-lib 0.18.2 → 0.21.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 (160) hide show
  1. package/package.json +8 -3
  2. package/src/index.d.ts +0 -1
  3. package/src/index.d.ts.map +1 -1
  4. package/src/index.js +0 -1
  5. package/src/index.js.map +1 -1
  6. package/src/lib/application.d.ts +12 -3
  7. package/src/lib/application.d.ts.map +1 -1
  8. package/src/lib/application.js +153 -7
  9. package/src/lib/application.js.map +1 -1
  10. package/src/lib/availability/gossipService.d.ts +59 -1
  11. package/src/lib/availability/gossipService.d.ts.map +1 -1
  12. package/src/lib/availability/gossipService.js +125 -1
  13. package/src/lib/availability/gossipService.js.map +1 -1
  14. package/src/lib/availability/index.d.ts +1 -0
  15. package/src/lib/availability/index.d.ts.map +1 -1
  16. package/src/lib/availability/index.js +1 -0
  17. package/src/lib/availability/index.js.map +1 -1
  18. package/src/lib/availability/quorumGossipHandler.d.ts +126 -0
  19. package/src/lib/availability/quorumGossipHandler.d.ts.map +1 -0
  20. package/src/lib/availability/quorumGossipHandler.js +246 -0
  21. package/src/lib/availability/quorumGossipHandler.js.map +1 -0
  22. package/src/lib/constants.d.ts.map +1 -1
  23. package/src/lib/constants.js +4 -0
  24. package/src/lib/constants.js.map +1 -1
  25. package/src/lib/controllers/api/quorum.d.ts +110 -2
  26. package/src/lib/controllers/api/quorum.d.ts.map +1 -1
  27. package/src/lib/controllers/api/quorum.js +389 -0
  28. package/src/lib/controllers/api/quorum.js.map +1 -1
  29. package/src/lib/controllers/api/user.d.ts +12 -15
  30. package/src/lib/controllers/api/user.d.ts.map +1 -1
  31. package/src/lib/controllers/api/user.js +312 -94
  32. package/src/lib/controllers/api/user.js.map +1 -1
  33. package/src/lib/databaseInit.d.ts +3 -2
  34. package/src/lib/databaseInit.d.ts.map +1 -1
  35. package/src/lib/databaseInit.js +24 -12
  36. package/src/lib/databaseInit.js.map +1 -1
  37. package/src/lib/datastore/index.d.ts +0 -1
  38. package/src/lib/datastore/index.d.ts.map +1 -1
  39. package/src/lib/datastore/index.js +0 -1
  40. package/src/lib/datastore/index.js.map +1 -1
  41. package/src/lib/environment.d.ts +6 -0
  42. package/src/lib/environment.d.ts.map +1 -1
  43. package/src/lib/environment.js +14 -0
  44. package/src/lib/environment.js.map +1 -1
  45. package/src/lib/hydration/energyAccountHydration.d.ts +17 -0
  46. package/src/lib/hydration/energyAccountHydration.d.ts.map +1 -0
  47. package/src/lib/hydration/energyAccountHydration.js +24 -0
  48. package/src/lib/hydration/energyAccountHydration.js.map +1 -0
  49. package/src/lib/hydration/index.d.ts +13 -0
  50. package/src/lib/hydration/index.d.ts.map +1 -0
  51. package/src/lib/hydration/index.js +21 -0
  52. package/src/lib/hydration/index.js.map +1 -0
  53. package/src/lib/hydration/rbacHydration.d.ts +28 -0
  54. package/src/lib/hydration/rbacHydration.d.ts.map +1 -0
  55. package/src/lib/hydration/rbacHydration.js +56 -0
  56. package/src/lib/hydration/rbacHydration.js.map +1 -0
  57. package/src/lib/interfaces/environment.d.ts +7 -1
  58. package/src/lib/interfaces/environment.d.ts.map +1 -1
  59. package/src/lib/interfaces/responses/api-backup-codes-response.d.ts +1 -1
  60. package/src/lib/interfaces/responses/api-code-count-response.d.ts +1 -1
  61. package/src/lib/interfaces/responses/api-password-change-response.d.ts +9 -0
  62. package/src/lib/interfaces/responses/api-password-change-response.d.ts.map +1 -0
  63. package/src/lib/interfaces/responses/api-password-change-response.js +3 -0
  64. package/src/lib/interfaces/responses/api-password-change-response.js.map +1 -0
  65. package/src/lib/interfaces/responses/api-recovery-response.d.ts +9 -0
  66. package/src/lib/interfaces/responses/api-recovery-response.d.ts.map +1 -0
  67. package/src/lib/interfaces/responses/api-recovery-response.js +3 -0
  68. package/src/lib/interfaces/responses/api-recovery-response.js.map +1 -0
  69. package/src/lib/interfaces/responses/index.d.ts +2 -0
  70. package/src/lib/interfaces/responses/index.d.ts.map +1 -1
  71. package/src/lib/interfaces/storage/client-session.d.ts +1 -1
  72. package/src/lib/interfaces/storage/client-session.d.ts.map +1 -1
  73. package/src/lib/interfaces/storage/collection.d.ts +1 -1
  74. package/src/lib/interfaces/storage/collection.d.ts.map +1 -1
  75. package/src/lib/interfaces/storage/database-lifecycle-hooks.d.ts +1 -1
  76. package/src/lib/interfaces/storage/database-lifecycle-hooks.d.ts.map +1 -1
  77. package/src/lib/interfaces/storage/database.d.ts +1 -1
  78. package/src/lib/interfaces/storage/database.d.ts.map +1 -1
  79. package/src/lib/interfaces/storage/document-types.d.ts +1 -1
  80. package/src/lib/interfaces/storage/document-types.d.ts.map +1 -1
  81. package/src/lib/interfaces/storage/index.d.ts +1 -0
  82. package/src/lib/interfaces/storage/index.d.ts.map +1 -1
  83. package/src/lib/interfaces/storage/index.js.map +1 -1
  84. package/src/lib/interfaces/storage/storedDocumentTypes.d.ts +73 -0
  85. package/src/lib/interfaces/storage/storedDocumentTypes.d.ts.map +1 -0
  86. package/src/lib/interfaces/storage/storedDocumentTypes.js +15 -0
  87. package/src/lib/interfaces/storage/storedDocumentTypes.js.map +1 -0
  88. package/src/lib/plugins/brightchain-database-plugin.d.ts +31 -21
  89. package/src/lib/plugins/brightchain-database-plugin.d.ts.map +1 -1
  90. package/src/lib/plugins/brightchain-database-plugin.js +103 -53
  91. package/src/lib/plugins/brightchain-database-plugin.js.map +1 -1
  92. package/src/lib/plugins/configure-brightchain-app.d.ts.map +1 -1
  93. package/src/lib/plugins/configure-brightchain-app.js +5 -0
  94. package/src/lib/plugins/configure-brightchain-app.js.map +1 -1
  95. package/src/lib/services/auth.d.ts +6 -2
  96. package/src/lib/services/auth.d.ts.map +1 -1
  97. package/src/lib/services/auth.js +43 -7
  98. package/src/lib/services/auth.js.map +1 -1
  99. package/src/lib/services/backupCodeService.d.ts +35 -0
  100. package/src/lib/services/backupCodeService.d.ts.map +1 -0
  101. package/src/lib/services/backupCodeService.js +109 -0
  102. package/src/lib/services/backupCodeService.js.map +1 -0
  103. package/src/lib/services/brightchain-authentication-provider.d.ts.map +1 -1
  104. package/src/lib/services/brightchain-authentication-provider.js +28 -9
  105. package/src/lib/services/brightchain-authentication-provider.js.map +1 -1
  106. package/src/lib/services/brightchain-member-init.service.d.ts +39 -20
  107. package/src/lib/services/brightchain-member-init.service.d.ts.map +1 -1
  108. package/src/lib/services/brightchain-member-init.service.js +139 -53
  109. package/src/lib/services/brightchain-member-init.service.js.map +1 -1
  110. package/src/lib/services/cliOperatorPrompt.d.ts +81 -0
  111. package/src/lib/services/cliOperatorPrompt.d.ts.map +1 -0
  112. package/src/lib/services/cliOperatorPrompt.js +177 -0
  113. package/src/lib/services/cliOperatorPrompt.js.map +1 -0
  114. package/src/lib/services/contentAwareBlocksService.d.ts +92 -0
  115. package/src/lib/services/contentAwareBlocksService.d.ts.map +1 -0
  116. package/src/lib/services/contentAwareBlocksService.js +102 -0
  117. package/src/lib/services/contentAwareBlocksService.js.map +1 -0
  118. package/src/lib/services/contentIngestionService.d.ts +68 -0
  119. package/src/lib/services/contentIngestionService.d.ts.map +1 -0
  120. package/src/lib/services/contentIngestionService.js +139 -0
  121. package/src/lib/services/contentIngestionService.js.map +1 -0
  122. package/src/lib/services/identityExpirationScheduler.d.ts +77 -0
  123. package/src/lib/services/identityExpirationScheduler.d.ts.map +1 -0
  124. package/src/lib/services/identityExpirationScheduler.js +157 -0
  125. package/src/lib/services/identityExpirationScheduler.js.map +1 -0
  126. package/src/lib/services/index.d.ts +7 -0
  127. package/src/lib/services/index.d.ts.map +1 -1
  128. package/src/lib/services/index.js +7 -0
  129. package/src/lib/services/index.js.map +1 -1
  130. package/src/lib/services/quorumDatabaseAdapter.d.ts +60 -0
  131. package/src/lib/services/quorumDatabaseAdapter.d.ts.map +1 -0
  132. package/src/lib/services/quorumDatabaseAdapter.js +652 -0
  133. package/src/lib/services/quorumDatabaseAdapter.js.map +1 -0
  134. package/src/lib/services/secureKeyStorage.js +3 -3
  135. package/src/lib/services/secureKeyStorage.js.map +1 -1
  136. package/src/lib/services/sessionAdapter.d.ts +62 -0
  137. package/src/lib/services/sessionAdapter.d.ts.map +1 -0
  138. package/src/lib/services/sessionAdapter.js +105 -0
  139. package/src/lib/services/sessionAdapter.js.map +1 -0
  140. package/src/lib/utils/rehydration.d.ts +31 -0
  141. package/src/lib/utils/rehydration.d.ts.map +1 -0
  142. package/src/lib/utils/rehydration.js +111 -0
  143. package/src/lib/utils/rehydration.js.map +1 -0
  144. package/src/lib/utils/serialization.d.ts +21 -0
  145. package/src/lib/utils/serialization.d.ts.map +1 -0
  146. package/src/lib/utils/serialization.js +41 -0
  147. package/src/lib/utils/serialization.js.map +1 -0
  148. package/src/lib/validation/userValidation.d.ts +17 -0
  149. package/src/lib/validation/userValidation.d.ts.map +1 -1
  150. package/src/lib/validation/userValidation.js +77 -0
  151. package/src/lib/validation/userValidation.js.map +1 -1
  152. package/src/lib/adapters/brightChainDbDocumentStoreAdapter.d.ts +0 -24
  153. package/src/lib/adapters/brightChainDbDocumentStoreAdapter.d.ts.map +0 -1
  154. package/src/lib/adapters/brightChainDbDocumentStoreAdapter.js +0 -53
  155. package/src/lib/adapters/brightChainDbDocumentStoreAdapter.js.map +0 -1
  156. package/src/lib/datastore/document-model-adapter.d.ts +0 -48
  157. package/src/lib/datastore/document-model-adapter.d.ts.map +0 -1
  158. package/src/lib/datastore/document-model-adapter.js +0 -178
  159. package/src/lib/datastore/document-model-adapter.js.map +0 -1
  160. /package/{brightchain-api-lib/README.md → README.md} +0 -0
@@ -0,0 +1,77 @@
1
+ /**
2
+ * IdentityExpirationScheduler — Periodic background task that purges expired
3
+ * IdentityRecoveryRecord entries, implementing the digital statute of limitations.
4
+ *
5
+ * Runs in brightchain-api-lib as a Node.js-specific service.
6
+ *
7
+ * @see Requirements 17
8
+ * @see Design: Expiration Scheduler Design
9
+ */
10
+ import { AuditLogService, ExpirationResult, ExpirationSchedulerConfig, IExpirationScheduler, IQuorumDatabase, StatuteOfLimitationsConfig } from '@brightchain/brightchain-lib';
11
+ import { PlatformID } from '@digitaldefiance/ecies-lib';
12
+ /**
13
+ * IdentityExpirationScheduler periodically purges expired IdentityRecoveryRecord
14
+ * entries from the quorum database.
15
+ *
16
+ * For each expired record:
17
+ * 1. Deletes the identity recovery shards from the database
18
+ * 2. Appends a chained audit log entry (identity_shards_expired)
19
+ * 3. Does NOT modify the associated content in the block store
20
+ *
21
+ * @template TID - Platform ID type for frontend/backend DTO compatibility
22
+ */
23
+ export declare class IdentityExpirationScheduler<TID extends PlatformID = Uint8Array> implements IExpirationScheduler {
24
+ private readonly db;
25
+ private readonly auditLogService?;
26
+ private readonly intervalMs;
27
+ private readonly batchSize;
28
+ private timer;
29
+ private running;
30
+ constructor(db: IQuorumDatabase<TID>, auditLogService?: AuditLogService<TID> | undefined, config?: Partial<ExpirationSchedulerConfig>);
31
+ /**
32
+ * Start the periodic expiration check.
33
+ * Uses the configured interval from ExpirationSchedulerConfig.
34
+ */
35
+ start(): void;
36
+ /**
37
+ * Stop the periodic expiration check.
38
+ */
39
+ stop(): void;
40
+ /**
41
+ * Whether the scheduler is currently running.
42
+ */
43
+ get isRunning(): boolean;
44
+ /**
45
+ * Run a single expiration check immediately.
46
+ *
47
+ * 1. Query expired records via listExpiredIdentityRecords(now, page=0, batchSize)
48
+ * 2. For each expired record:
49
+ * a. Delete the identity recovery shards from the database
50
+ * b. Append a chained audit log entry (identity_shards_expired)
51
+ * c. Do NOT modify the associated content in the block store
52
+ * 3. If the batch was full (count === batchSize), set nextBatchAvailable = true
53
+ * 4. Return { deletedCount, failedIds, nextBatchAvailable }
54
+ */
55
+ runOnce(): Promise<ExpirationResult>;
56
+ /**
57
+ * Load the statute of limitations configuration from the database.
58
+ * Returns the stored config, or a default config with the 7-year fallback.
59
+ */
60
+ loadStatuteConfig(): Promise<StatuteOfLimitationsConfig>;
61
+ /**
62
+ * Compute the expiration date for a new IdentityRecoveryRecord.
63
+ *
64
+ * Uses the statute of limitations configuration to determine the duration
65
+ * based on content type, falling back to the default duration.
66
+ *
67
+ * @param contentType - The content type (e.g., 'post', 'message', 'financial_record')
68
+ * @param createdAt - The creation timestamp of the record
69
+ * @returns The computed expiration date
70
+ */
71
+ computeExpirationDate(contentType: string, createdAt: Date): Promise<Date>;
72
+ /**
73
+ * Emit an audit log entry via the AuditLogService or directly to the database.
74
+ */
75
+ private emitAuditEntry;
76
+ }
77
+ //# sourceMappingURL=identityExpirationScheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identityExpirationScheduler.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/identityExpirationScheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAEL,eAAe,EAEf,gBAAgB,EAChB,yBAAyB,EACzB,oBAAoB,EACpB,eAAe,EAEf,0BAA0B,EAC3B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,UAAU,EAAgB,MAAM,4BAA4B,CAAC;AAStE;;;;;;;;;;GAUG;AACH,qBAAa,2BAA2B,CACtC,GAAG,SAAS,UAAU,GAAG,UAAU,CACnC,YAAW,oBAAoB;IAO7B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IAPnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,OAAO,CAAS;gBAGL,EAAE,EAAE,eAAe,CAAC,GAAG,CAAC,EACxB,eAAe,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,YAAA,EACvD,MAAM,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC;IAM7C;;;OAGG;IACH,KAAK,IAAI,IAAI;IAUb;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;OAEG;IACH,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;;;;;;;;;OAUG;IACG,OAAO,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAwC1C;;;OAGG;IACG,iBAAiB,IAAI,OAAO,CAAC,0BAA0B,CAAC;IAW9D;;;;;;;;;OASG;IACG,qBAAqB,CACzB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,IAAI,GACd,OAAO,CAAC,IAAI,CAAC;IAOhB;;OAEG;YACW,cAAc;CAiB7B"}
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ /**
3
+ * IdentityExpirationScheduler — Periodic background task that purges expired
4
+ * IdentityRecoveryRecord entries, implementing the digital statute of limitations.
5
+ *
6
+ * Runs in brightchain-api-lib as a Node.js-specific service.
7
+ *
8
+ * @see Requirements 17
9
+ * @see Design: Expiration Scheduler Design
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.IdentityExpirationScheduler = void 0;
13
+ const brightchain_lib_1 = require("@brightchain/brightchain-lib");
14
+ const uuid_1 = require("uuid");
15
+ /** Default interval: 24 hours in milliseconds */
16
+ const DEFAULT_INTERVAL_MS = 86400000;
17
+ /** Default batch size for processing expired records */
18
+ const DEFAULT_BATCH_SIZE = 100;
19
+ /**
20
+ * IdentityExpirationScheduler periodically purges expired IdentityRecoveryRecord
21
+ * entries from the quorum database.
22
+ *
23
+ * For each expired record:
24
+ * 1. Deletes the identity recovery shards from the database
25
+ * 2. Appends a chained audit log entry (identity_shards_expired)
26
+ * 3. Does NOT modify the associated content in the block store
27
+ *
28
+ * @template TID - Platform ID type for frontend/backend DTO compatibility
29
+ */
30
+ class IdentityExpirationScheduler {
31
+ constructor(db, auditLogService, config) {
32
+ this.db = db;
33
+ this.auditLogService = auditLogService;
34
+ this.timer = null;
35
+ this.running = false;
36
+ this.intervalMs = config?.intervalMs ?? DEFAULT_INTERVAL_MS;
37
+ this.batchSize = config?.batchSize ?? DEFAULT_BATCH_SIZE;
38
+ }
39
+ /**
40
+ * Start the periodic expiration check.
41
+ * Uses the configured interval from ExpirationSchedulerConfig.
42
+ */
43
+ start() {
44
+ if (this.running) {
45
+ return;
46
+ }
47
+ this.running = true;
48
+ this.timer = setInterval(() => {
49
+ void this.runOnce();
50
+ }, this.intervalMs);
51
+ }
52
+ /**
53
+ * Stop the periodic expiration check.
54
+ */
55
+ stop() {
56
+ if (this.timer) {
57
+ clearInterval(this.timer);
58
+ this.timer = null;
59
+ }
60
+ this.running = false;
61
+ }
62
+ /**
63
+ * Whether the scheduler is currently running.
64
+ */
65
+ get isRunning() {
66
+ return this.running;
67
+ }
68
+ /**
69
+ * Run a single expiration check immediately.
70
+ *
71
+ * 1. Query expired records via listExpiredIdentityRecords(now, page=0, batchSize)
72
+ * 2. For each expired record:
73
+ * a. Delete the identity recovery shards from the database
74
+ * b. Append a chained audit log entry (identity_shards_expired)
75
+ * c. Do NOT modify the associated content in the block store
76
+ * 3. If the batch was full (count === batchSize), set nextBatchAvailable = true
77
+ * 4. Return { deletedCount, failedIds, nextBatchAvailable }
78
+ */
79
+ async runOnce() {
80
+ const now = new Date();
81
+ const expiredRecords = await this.db.listExpiredIdentityRecords(now, 0, this.batchSize);
82
+ let deletedCount = 0;
83
+ const failedIds = [];
84
+ for (const record of expiredRecords) {
85
+ try {
86
+ // Delete the identity recovery shards
87
+ await this.db.deleteIdentityRecord(record.id);
88
+ // Append chained audit log entry
89
+ await this.emitAuditEntry('identity_shards_expired', {
90
+ identityRecordId: record.id,
91
+ contentId: record.contentId,
92
+ contentType: record.contentType,
93
+ expiresAt: record.expiresAt.toISOString(),
94
+ epochNumber: record.epochNumber,
95
+ });
96
+ deletedCount++;
97
+ }
98
+ catch {
99
+ failedIds.push(record.id);
100
+ }
101
+ }
102
+ const nextBatchAvailable = expiredRecords.length === this.batchSize;
103
+ return {
104
+ deletedCount,
105
+ failedIds,
106
+ nextBatchAvailable,
107
+ };
108
+ }
109
+ /**
110
+ * Load the statute of limitations configuration from the database.
111
+ * Returns the stored config, or a default config with the 7-year fallback.
112
+ */
113
+ async loadStatuteConfig() {
114
+ const config = await this.db.getStatuteConfig();
115
+ if (config) {
116
+ return config;
117
+ }
118
+ return {
119
+ defaultDurations: new Map(),
120
+ fallbackDurationMs: brightchain_lib_1.DEFAULT_STATUTE_FALLBACK_DURATION_MS,
121
+ };
122
+ }
123
+ /**
124
+ * Compute the expiration date for a new IdentityRecoveryRecord.
125
+ *
126
+ * Uses the statute of limitations configuration to determine the duration
127
+ * based on content type, falling back to the default duration.
128
+ *
129
+ * @param contentType - The content type (e.g., 'post', 'message', 'financial_record')
130
+ * @param createdAt - The creation timestamp of the record
131
+ * @returns The computed expiration date
132
+ */
133
+ async computeExpirationDate(contentType, createdAt) {
134
+ const config = await this.loadStatuteConfig();
135
+ const durationMs = config.defaultDurations.get(contentType) ?? config.fallbackDurationMs;
136
+ return new Date(createdAt.getTime() + durationMs);
137
+ }
138
+ /**
139
+ * Emit an audit log entry via the AuditLogService or directly to the database.
140
+ */
141
+ async emitAuditEntry(eventType, details) {
142
+ const entry = {
143
+ id: (0, uuid_1.v4)(),
144
+ eventType,
145
+ details,
146
+ timestamp: new Date(),
147
+ };
148
+ if (this.auditLogService) {
149
+ await this.auditLogService.appendEntry(entry);
150
+ }
151
+ else {
152
+ await this.db.appendAuditEntry(entry);
153
+ }
154
+ }
155
+ }
156
+ exports.IdentityExpirationScheduler = IdentityExpirationScheduler;
157
+ //# sourceMappingURL=identityExpirationScheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identityExpirationScheduler.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/identityExpirationScheduler.ts"],"names":[],"mappings":"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"}
@@ -1,24 +1,31 @@
1
1
  export * from './auth';
2
+ export * from './backupCodeService';
2
3
  export * from './base';
3
4
  export * from './blocks';
4
5
  export * from './blockServiceFactory';
5
6
  export * from './blockStore';
6
7
  export * from './brightchain-member-init.service';
7
8
  export * from './clientWebSocketServer';
9
+ export * from './cliOperatorPrompt';
10
+ export * from './contentAwareBlocksService';
11
+ export * from './contentIngestionService';
8
12
  export * from './diskQuorumService';
9
13
  export * from './email';
10
14
  export * from './eventNotificationSystem';
11
15
  export { WasmFecService } from './fec';
12
16
  export * from './fecServiceFactory';
13
17
  export * from './fecUsageExample';
18
+ export * from './identityExpirationScheduler';
14
19
  export * from './messageEventsWebSocketHandler';
15
20
  export * from './messagePassingService';
16
21
  export * from './nativeRsFecService';
17
22
  export * from './presenceService';
18
23
  export * from './quorum';
24
+ export * from './quorumDatabaseAdapter';
19
25
  export * from './requestUser';
20
26
  export * from './role';
21
27
  export * from './secureKeyStorage';
28
+ export * from './sessionAdapter';
22
29
  export * from './websocketHandler';
23
30
  export * from './webSocketMessageServer';
24
31
  export * from './webSocketPeerProvider';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,mCAAmC,CAAC;AAClD,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,SAAS,CAAC;AACxB,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,qBAAqB,CAAC;AACpC,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,mCAAmC,CAAC;AAClD,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,SAAS,CAAC;AACxB,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC"}
@@ -3,12 +3,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WasmFecService = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  tslib_1.__exportStar(require("./auth"), exports);
6
+ tslib_1.__exportStar(require("./backupCodeService"), exports);
6
7
  tslib_1.__exportStar(require("./base"), exports);
7
8
  tslib_1.__exportStar(require("./blocks"), exports);
8
9
  tslib_1.__exportStar(require("./blockServiceFactory"), exports);
9
10
  tslib_1.__exportStar(require("./blockStore"), exports);
10
11
  tslib_1.__exportStar(require("./brightchain-member-init.service"), exports);
11
12
  tslib_1.__exportStar(require("./clientWebSocketServer"), exports);
13
+ tslib_1.__exportStar(require("./cliOperatorPrompt"), exports);
14
+ tslib_1.__exportStar(require("./contentAwareBlocksService"), exports);
15
+ tslib_1.__exportStar(require("./contentIngestionService"), exports);
12
16
  tslib_1.__exportStar(require("./diskQuorumService"), exports);
13
17
  tslib_1.__exportStar(require("./email"), exports);
14
18
  tslib_1.__exportStar(require("./eventNotificationSystem"), exports);
@@ -16,14 +20,17 @@ var fec_1 = require("./fec");
16
20
  Object.defineProperty(exports, "WasmFecService", { enumerable: true, get: function () { return fec_1.WasmFecService; } });
17
21
  tslib_1.__exportStar(require("./fecServiceFactory"), exports);
18
22
  tslib_1.__exportStar(require("./fecUsageExample"), exports);
23
+ tslib_1.__exportStar(require("./identityExpirationScheduler"), exports);
19
24
  tslib_1.__exportStar(require("./messageEventsWebSocketHandler"), exports);
20
25
  tslib_1.__exportStar(require("./messagePassingService"), exports);
21
26
  tslib_1.__exportStar(require("./nativeRsFecService"), exports);
22
27
  tslib_1.__exportStar(require("./presenceService"), exports);
23
28
  tslib_1.__exportStar(require("./quorum"), exports);
29
+ tslib_1.__exportStar(require("./quorumDatabaseAdapter"), exports);
24
30
  tslib_1.__exportStar(require("./requestUser"), exports);
25
31
  tslib_1.__exportStar(require("./role"), exports);
26
32
  tslib_1.__exportStar(require("./secureKeyStorage"), exports);
33
+ tslib_1.__exportStar(require("./sessionAdapter"), exports);
27
34
  tslib_1.__exportStar(require("./websocketHandler"), exports);
28
35
  tslib_1.__exportStar(require("./webSocketMessageServer"), exports);
29
36
  tslib_1.__exportStar(require("./webSocketPeerProvider"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/index.ts"],"names":[],"mappings":";;;;AAAA,iDAAuB;AACvB,iDAAuB;AACvB,mDAAyB;AACzB,gEAAsC;AACtC,uDAA6B;AAC7B,4EAAkD;AAClD,kEAAwC;AACxC,8DAAoC;AACpC,kDAAwB;AACxB,oEAA0C;AAC1C,6BAAuC;AAA9B,qGAAA,cAAc,OAAA;AACvB,8DAAoC;AACpC,4DAAkC;AAClC,0EAAgD;AAChD,kEAAwC;AACxC,+DAAqC;AACrC,4DAAkC;AAClC,mDAAyB;AACzB,wDAA8B;AAC9B,iDAAuB;AACvB,6DAAmC;AACnC,6DAAmC;AACnC,mEAAyC;AACzC,kEAAwC;AACxC,sEAA4C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/index.ts"],"names":[],"mappings":";;;;AAAA,iDAAuB;AACvB,8DAAoC;AACpC,iDAAuB;AACvB,mDAAyB;AACzB,gEAAsC;AACtC,uDAA6B;AAC7B,4EAAkD;AAClD,kEAAwC;AACxC,8DAAoC;AACpC,sEAA4C;AAC5C,oEAA0C;AAC1C,8DAAoC;AACpC,kDAAwB;AACxB,oEAA0C;AAC1C,6BAAuC;AAA9B,qGAAA,cAAc,OAAA;AACvB,8DAAoC;AACpC,4DAAkC;AAClC,wEAA8C;AAC9C,0EAAgD;AAChD,kEAAwC;AACxC,+DAAqC;AACrC,4DAAkC;AAClC,mDAAyB;AACzB,kEAAwC;AACxC,wDAA8B;AAC9B,iDAAuB;AACvB,6DAAmC;AACnC,2DAAiC;AACjC,6DAAmC;AACnC,mEAAyC;AACzC,kEAAwC;AACxC,sEAA4C"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * QuorumDatabaseAdapter — BrightChainDb-backed implementation of IQuorumDatabase.
3
+ *
4
+ * Uses a dedicated BrightChainDb instance with pool ID "quorum-system" for
5
+ * isolated storage of all quorum-related data. Each data type is stored in
6
+ * a separate collection.
7
+ *
8
+ * This is a Node.js-specific service that lives in brightchain-api-lib.
9
+ *
10
+ * @see Requirements 9, 10
11
+ */
12
+ import { AliasRecord, ChainedAuditLogEntry, IdentityRecoveryRecord, IQuorumDatabase, IQuorumMember, OperationalState, Proposal, QuorumAuditLogEntry, QuorumDataRecord, QuorumEpoch, RedistributionJournalEntry, StatuteOfLimitationsConfig, Vote } from '@brightchain/brightchain-lib';
13
+ import type { BrightChainDb } from '@brightchain/db';
14
+ import { PlatformID, ShortHexGuid } from '@digitaldefiance/ecies-lib';
15
+ /** Dedicated pool ID for quorum data isolation */
16
+ export declare const QUORUM_SYSTEM_POOL_ID = "quorum-system";
17
+ /**
18
+ * BrightChainDb-backed implementation of IQuorumDatabase.
19
+ *
20
+ * Uses a dedicated pool ID ("quorum-system") for isolated storage.
21
+ * Each data type is stored in a separate collection.
22
+ *
23
+ * @template TID - Platform ID type for frontend/backend DTO compatibility
24
+ */
25
+ export declare class QuorumDatabaseAdapter<TID extends PlatformID = Uint8Array> implements IQuorumDatabase<TID> {
26
+ private readonly db;
27
+ constructor(db: BrightChainDb);
28
+ saveEpoch(epoch: QuorumEpoch<TID>): Promise<void>;
29
+ getEpoch(epochNumber: number): Promise<QuorumEpoch<TID> | null>;
30
+ getCurrentEpoch(): Promise<QuorumEpoch<TID>>;
31
+ saveMember(member: IQuorumMember<TID>): Promise<void>;
32
+ getMember(memberId: ShortHexGuid): Promise<IQuorumMember<TID> | null>;
33
+ listActiveMembers(): Promise<IQuorumMember<TID>[]>;
34
+ saveDocument(doc: QuorumDataRecord<TID>): Promise<void>;
35
+ getDocument(docId: ShortHexGuid): Promise<QuorumDataRecord<TID> | null>;
36
+ listDocumentsByEpoch(epochNumber: number, page: number, pageSize: number): Promise<QuorumDataRecord<TID>[]>;
37
+ saveProposal(proposal: Proposal<TID>): Promise<void>;
38
+ getProposal(proposalId: ShortHexGuid): Promise<Proposal<TID> | null>;
39
+ saveVote(vote: Vote<TID>): Promise<void>;
40
+ getVotesForProposal(proposalId: ShortHexGuid): Promise<Vote<TID>[]>;
41
+ saveIdentityRecord(record: IdentityRecoveryRecord<TID>): Promise<void>;
42
+ getIdentityRecord(recordId: ShortHexGuid): Promise<IdentityRecoveryRecord<TID> | null>;
43
+ deleteIdentityRecord(recordId: ShortHexGuid): Promise<void>;
44
+ listExpiredIdentityRecords(before: Date, page: number, pageSize: number): Promise<IdentityRecoveryRecord<TID>[]>;
45
+ saveAlias(alias: AliasRecord<TID>): Promise<void>;
46
+ getAlias(aliasName: string): Promise<AliasRecord<TID> | null>;
47
+ isAliasAvailable(aliasName: string): Promise<boolean>;
48
+ appendAuditEntry(entry: QuorumAuditLogEntry): Promise<void>;
49
+ getLatestAuditEntry(): Promise<ChainedAuditLogEntry | null>;
50
+ saveJournalEntry(entry: RedistributionJournalEntry): Promise<void>;
51
+ getJournalEntries(epochNumber: number): Promise<RedistributionJournalEntry[]>;
52
+ deleteJournalEntries(epochNumber: number): Promise<void>;
53
+ saveStatuteConfig(config: StatuteOfLimitationsConfig): Promise<void>;
54
+ getStatuteConfig(): Promise<StatuteOfLimitationsConfig | null>;
55
+ saveOperationalState(state: OperationalState): Promise<void>;
56
+ getOperationalState(): Promise<OperationalState | null>;
57
+ withTransaction<R>(fn: () => Promise<R>): Promise<R>;
58
+ isAvailable(): Promise<boolean>;
59
+ }
60
+ //# sourceMappingURL=quorumDatabaseAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quorumDatabaseAdapter.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/quorumDatabaseAdapter.ts"],"names":[],"mappings":"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"}