@brightchain/brightchain-api-lib 0.14.0 → 0.15.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 (242) hide show
  1. package/package.json +5 -5
  2. package/src/index.d.ts +3 -0
  3. package/src/index.d.ts.map +1 -1
  4. package/src/index.js +5 -0
  5. package/src/index.js.map +1 -1
  6. package/src/lib/application.d.ts +1 -0
  7. package/src/lib/application.d.ts.map +1 -1
  8. package/src/lib/application.js +23 -0
  9. package/src/lib/application.js.map +1 -1
  10. package/src/lib/auth/aclEnforcedAvailability.d.ts +57 -0
  11. package/src/lib/auth/aclEnforcedAvailability.d.ts.map +1 -0
  12. package/src/lib/auth/aclEnforcedAvailability.js +87 -0
  13. package/src/lib/auth/aclEnforcedAvailability.js.map +1 -0
  14. package/src/lib/auth/aclEnforcedBlockStore.d.ts +66 -0
  15. package/src/lib/auth/aclEnforcedBlockStore.d.ts.map +1 -0
  16. package/src/lib/auth/aclEnforcedBlockStore.js +83 -0
  17. package/src/lib/auth/aclEnforcedBlockStore.js.map +1 -0
  18. package/src/lib/auth/ecdsaNodeAuthenticator.d.ts +46 -0
  19. package/src/lib/auth/ecdsaNodeAuthenticator.d.ts.map +1 -0
  20. package/src/lib/auth/ecdsaNodeAuthenticator.js +110 -0
  21. package/src/lib/auth/ecdsaNodeAuthenticator.js.map +1 -0
  22. package/src/lib/auth/index.d.ts +7 -0
  23. package/src/lib/auth/index.d.ts.map +1 -0
  24. package/src/lib/auth/index.js +13 -0
  25. package/src/lib/auth/index.js.map +1 -0
  26. package/src/lib/auth/poolAclBootstrap.d.ts +36 -0
  27. package/src/lib/auth/poolAclBootstrap.d.ts.map +1 -0
  28. package/src/lib/auth/poolAclBootstrap.js +64 -0
  29. package/src/lib/auth/poolAclBootstrap.js.map +1 -0
  30. package/src/lib/auth/poolAclStore.d.ts +77 -0
  31. package/src/lib/auth/poolAclStore.d.ts.map +1 -0
  32. package/src/lib/auth/poolAclStore.js +189 -0
  33. package/src/lib/auth/poolAclStore.js.map +1 -0
  34. package/src/lib/auth/poolAclUpdater.d.ts +79 -0
  35. package/src/lib/auth/poolAclUpdater.d.ts.map +1 -0
  36. package/src/lib/auth/poolAclUpdater.js +144 -0
  37. package/src/lib/auth/poolAclUpdater.js.map +1 -0
  38. package/src/lib/availability/availabilityService.d.ts +2 -2
  39. package/src/lib/availability/availabilityService.d.ts.map +1 -1
  40. package/src/lib/availability/availabilityService.js +12 -5
  41. package/src/lib/availability/availabilityService.js.map +1 -1
  42. package/src/lib/availability/blockRegistry.d.ts +45 -3
  43. package/src/lib/availability/blockRegistry.d.ts.map +1 -1
  44. package/src/lib/availability/blockRegistry.js +123 -5
  45. package/src/lib/availability/blockRegistry.js.map +1 -1
  46. package/src/lib/availability/discoveryProtocol.d.ts +30 -1
  47. package/src/lib/availability/discoveryProtocol.d.ts.map +1 -1
  48. package/src/lib/availability/discoveryProtocol.js +76 -0
  49. package/src/lib/availability/discoveryProtocol.js.map +1 -1
  50. package/src/lib/availability/gossipService.d.ts +45 -6
  51. package/src/lib/availability/gossipService.d.ts.map +1 -1
  52. package/src/lib/availability/gossipService.js +177 -5
  53. package/src/lib/availability/gossipService.js.map +1 -1
  54. package/src/lib/availability/reconciliationService.d.ts +88 -1
  55. package/src/lib/availability/reconciliationService.d.ts.map +1 -1
  56. package/src/lib/availability/reconciliationService.js +246 -48
  57. package/src/lib/availability/reconciliationService.js.map +1 -1
  58. package/src/lib/blockFetch/blockFetcher.d.ts +100 -0
  59. package/src/lib/blockFetch/blockFetcher.d.ts.map +1 -0
  60. package/src/lib/blockFetch/blockFetcher.js +279 -0
  61. package/src/lib/blockFetch/blockFetcher.js.map +1 -0
  62. package/src/lib/blockFetch/fetchQueue.d.ts +88 -0
  63. package/src/lib/blockFetch/fetchQueue.d.ts.map +1 -0
  64. package/src/lib/blockFetch/fetchQueue.js +204 -0
  65. package/src/lib/blockFetch/fetchQueue.js.map +1 -0
  66. package/src/lib/blockFetch/httpBlockFetchTransport.d.ts +65 -0
  67. package/src/lib/blockFetch/httpBlockFetchTransport.d.ts.map +1 -0
  68. package/src/lib/blockFetch/httpBlockFetchTransport.js +104 -0
  69. package/src/lib/blockFetch/httpBlockFetchTransport.js.map +1 -0
  70. package/src/lib/blockFetch/index.d.ts +10 -0
  71. package/src/lib/blockFetch/index.d.ts.map +1 -0
  72. package/src/lib/blockFetch/index.js +13 -0
  73. package/src/lib/blockFetch/index.js.map +1 -0
  74. package/src/lib/controllers/api/brightpass.d.ts +72 -0
  75. package/src/lib/controllers/api/brightpass.d.ts.map +1 -0
  76. package/src/lib/controllers/api/brightpass.js +577 -0
  77. package/src/lib/controllers/api/brightpass.js.map +1 -0
  78. package/src/lib/controllers/api/channels.d.ts +122 -0
  79. package/src/lib/controllers/api/channels.d.ts.map +1 -0
  80. package/src/lib/controllers/api/channels.js +701 -0
  81. package/src/lib/controllers/api/channels.js.map +1 -0
  82. package/src/lib/controllers/api/conversations.d.ts +89 -0
  83. package/src/lib/controllers/api/conversations.d.ts.map +1 -0
  84. package/src/lib/controllers/api/conversations.js +259 -0
  85. package/src/lib/controllers/api/conversations.js.map +1 -0
  86. package/src/lib/controllers/api/emails.d.ts +122 -0
  87. package/src/lib/controllers/api/emails.d.ts.map +1 -0
  88. package/src/lib/controllers/api/emails.js +494 -0
  89. package/src/lib/controllers/api/emails.js.map +1 -0
  90. package/src/lib/controllers/api/explodingMessages.d.ts +79 -0
  91. package/src/lib/controllers/api/explodingMessages.d.ts.map +1 -0
  92. package/src/lib/controllers/api/explodingMessages.js +378 -0
  93. package/src/lib/controllers/api/explodingMessages.js.map +1 -0
  94. package/src/lib/controllers/api/groups.d.ts +94 -0
  95. package/src/lib/controllers/api/groups.d.ts.map +1 -0
  96. package/src/lib/controllers/api/groups.js +484 -0
  97. package/src/lib/controllers/api/groups.js.map +1 -0
  98. package/src/lib/controllers/api/index.d.ts +6 -0
  99. package/src/lib/controllers/api/index.d.ts.map +1 -1
  100. package/src/lib/controllers/api/index.js +6 -0
  101. package/src/lib/controllers/api/index.js.map +1 -1
  102. package/src/lib/controllers/api/messages.d.ts.map +1 -1
  103. package/src/lib/controllers/api/messages.js +2 -1
  104. package/src/lib/controllers/api/messages.js.map +1 -1
  105. package/src/lib/controllers/api/sync.d.ts +38 -2
  106. package/src/lib/controllers/api/sync.d.ts.map +1 -1
  107. package/src/lib/controllers/api/sync.js +89 -0
  108. package/src/lib/controllers/api/sync.js.map +1 -1
  109. package/src/lib/controllers/crypto/gitController.d.ts +70 -0
  110. package/src/lib/controllers/crypto/gitController.d.ts.map +1 -0
  111. package/src/lib/controllers/crypto/gitController.js +306 -0
  112. package/src/lib/controllers/crypto/gitController.js.map +1 -0
  113. package/src/lib/controllers/crypto/index.d.ts +3 -0
  114. package/src/lib/controllers/crypto/index.d.ts.map +1 -0
  115. package/src/lib/controllers/crypto/index.js +6 -0
  116. package/src/lib/controllers/crypto/index.js.map +1 -0
  117. package/src/lib/controllers/crypto/walletController.d.ts +64 -0
  118. package/src/lib/controllers/crypto/walletController.d.ts.map +1 -0
  119. package/src/lib/controllers/crypto/walletController.js +260 -0
  120. package/src/lib/controllers/crypto/walletController.js.map +1 -0
  121. package/src/lib/controllers/identity/deviceController.d.ts +96 -0
  122. package/src/lib/controllers/identity/deviceController.d.ts.map +1 -0
  123. package/src/lib/controllers/identity/deviceController.js +355 -0
  124. package/src/lib/controllers/identity/deviceController.js.map +1 -0
  125. package/src/lib/controllers/identity/directoryController.d.ts +75 -0
  126. package/src/lib/controllers/identity/directoryController.d.ts.map +1 -0
  127. package/src/lib/controllers/identity/directoryController.js +288 -0
  128. package/src/lib/controllers/identity/directoryController.js.map +1 -0
  129. package/src/lib/controllers/identity/identityProofController.d.ts +94 -0
  130. package/src/lib/controllers/identity/identityProofController.d.ts.map +1 -0
  131. package/src/lib/controllers/identity/identityProofController.js +454 -0
  132. package/src/lib/controllers/identity/identityProofController.js.map +1 -0
  133. package/src/lib/controllers/identity/index.d.ts +4 -0
  134. package/src/lib/controllers/identity/index.d.ts.map +1 -0
  135. package/src/lib/controllers/identity/index.js +7 -0
  136. package/src/lib/controllers/identity/index.js.map +1 -0
  137. package/src/lib/controllers/index.d.ts +2 -0
  138. package/src/lib/controllers/index.d.ts.map +1 -1
  139. package/src/lib/controllers/index.js +2 -0
  140. package/src/lib/controllers/index.js.map +1 -1
  141. package/src/lib/encryption/encryptedMetadataService.d.ts +87 -0
  142. package/src/lib/encryption/encryptedMetadataService.d.ts.map +1 -0
  143. package/src/lib/encryption/encryptedMetadataService.js +224 -0
  144. package/src/lib/encryption/encryptedMetadataService.js.map +1 -0
  145. package/src/lib/encryption/encryptionAwareReplication.d.ts +76 -0
  146. package/src/lib/encryption/encryptionAwareReplication.d.ts.map +1 -0
  147. package/src/lib/encryption/encryptionAwareReplication.js +116 -0
  148. package/src/lib/encryption/encryptionAwareReplication.js.map +1 -0
  149. package/src/lib/encryption/errors.d.ts +49 -0
  150. package/src/lib/encryption/errors.d.ts.map +1 -0
  151. package/src/lib/encryption/errors.js +80 -0
  152. package/src/lib/encryption/errors.js.map +1 -0
  153. package/src/lib/encryption/index.d.ts +6 -0
  154. package/src/lib/encryption/index.d.ts.map +1 -0
  155. package/src/lib/encryption/index.js +9 -0
  156. package/src/lib/encryption/index.js.map +1 -0
  157. package/src/lib/encryption/poolEncryptionService.d.ts +94 -0
  158. package/src/lib/encryption/poolEncryptionService.d.ts.map +1 -0
  159. package/src/lib/encryption/poolEncryptionService.js +252 -0
  160. package/src/lib/encryption/poolEncryptionService.js.map +1 -0
  161. package/src/lib/encryption/poolKeyManager.d.ts +82 -0
  162. package/src/lib/encryption/poolKeyManager.d.ts.map +1 -0
  163. package/src/lib/encryption/poolKeyManager.js +156 -0
  164. package/src/lib/encryption/poolKeyManager.js.map +1 -0
  165. package/src/lib/environment.d.ts +3 -0
  166. package/src/lib/environment.d.ts.map +1 -1
  167. package/src/lib/environment.js +5 -0
  168. package/src/lib/environment.js.map +1 -1
  169. package/src/lib/interfaces/environment.d.ts +7 -1
  170. package/src/lib/interfaces/environment.d.ts.map +1 -1
  171. package/src/lib/interfaces/index.d.ts +0 -1
  172. package/src/lib/interfaces/index.d.ts.map +1 -1
  173. package/src/lib/interfaces/requests/getBlockDataRequest.d.ts +12 -0
  174. package/src/lib/interfaces/requests/getBlockDataRequest.d.ts.map +1 -0
  175. package/src/lib/interfaces/{blockStore.js → requests/getBlockDataRequest.js} +1 -1
  176. package/src/lib/interfaces/requests/getBlockDataRequest.js.map +1 -0
  177. package/src/lib/interfaces/requests/index.d.ts +1 -0
  178. package/src/lib/interfaces/requests/index.d.ts.map +1 -1
  179. package/src/lib/routers/api.d.ts +54 -1
  180. package/src/lib/routers/api.d.ts.map +1 -1
  181. package/src/lib/routers/api.js +77 -0
  182. package/src/lib/routers/api.js.map +1 -1
  183. package/src/lib/services/blockStore.d.ts +5 -2
  184. package/src/lib/services/blockStore.d.ts.map +1 -1
  185. package/src/lib/services/blockStore.js +4 -0
  186. package/src/lib/services/blockStore.js.map +1 -1
  187. package/src/lib/services/brightpass/auditLogger.d.ts +77 -0
  188. package/src/lib/services/brightpass/auditLogger.d.ts.map +1 -0
  189. package/src/lib/services/brightpass/auditLogger.js +184 -0
  190. package/src/lib/services/brightpass/auditLogger.js.map +1 -0
  191. package/src/lib/services/brightpass/vaultEncryption.d.ts +82 -0
  192. package/src/lib/services/brightpass/vaultEncryption.d.ts.map +1 -0
  193. package/src/lib/services/brightpass/vaultEncryption.js +144 -0
  194. package/src/lib/services/brightpass/vaultEncryption.js.map +1 -0
  195. package/src/lib/services/brightpass.d.ts +294 -0
  196. package/src/lib/services/brightpass.d.ts.map +1 -0
  197. package/src/lib/services/brightpass.js +1260 -0
  198. package/src/lib/services/brightpass.js.map +1 -0
  199. package/src/lib/services/eventNotificationSystem.d.ts +69 -3
  200. package/src/lib/services/eventNotificationSystem.d.ts.map +1 -1
  201. package/src/lib/services/eventNotificationSystem.js +200 -0
  202. package/src/lib/services/eventNotificationSystem.js.map +1 -1
  203. package/src/lib/services/expirationScheduler.d.ts +90 -0
  204. package/src/lib/services/expirationScheduler.d.ts.map +1 -0
  205. package/src/lib/services/expirationScheduler.js +131 -0
  206. package/src/lib/services/expirationScheduler.js.map +1 -0
  207. package/src/lib/services/fecUsageExample.d.ts +2 -2
  208. package/src/lib/services/index.d.ts +2 -0
  209. package/src/lib/services/index.d.ts.map +1 -1
  210. package/src/lib/services/index.js +2 -0
  211. package/src/lib/services/index.js.map +1 -1
  212. package/src/lib/services/paginationService.d.ts +18 -0
  213. package/src/lib/services/paginationService.d.ts.map +1 -0
  214. package/src/lib/services/paginationService.js +32 -0
  215. package/src/lib/services/paginationService.js.map +1 -0
  216. package/src/lib/services/presenceService.d.ts +76 -0
  217. package/src/lib/services/presenceService.d.ts.map +1 -0
  218. package/src/lib/services/presenceService.js +143 -0
  219. package/src/lib/services/presenceService.js.map +1 -0
  220. package/src/lib/services/wireConversationPromotion.d.ts +23 -0
  221. package/src/lib/services/wireConversationPromotion.d.ts.map +1 -0
  222. package/src/lib/services/wireConversationPromotion.js +26 -0
  223. package/src/lib/services/wireConversationPromotion.js.map +1 -0
  224. package/src/lib/stores/availabilityAwareBlockStore.d.ts +115 -10
  225. package/src/lib/stores/availabilityAwareBlockStore.d.ts.map +1 -1
  226. package/src/lib/stores/availabilityAwareBlockStore.js +267 -23
  227. package/src/lib/stores/availabilityAwareBlockStore.js.map +1 -1
  228. package/src/lib/stores/diskBlockAsyncStore.d.ts +81 -2
  229. package/src/lib/stores/diskBlockAsyncStore.d.ts.map +1 -1
  230. package/src/lib/stores/diskBlockAsyncStore.js +297 -10
  231. package/src/lib/stores/diskBlockAsyncStore.js.map +1 -1
  232. package/src/lib/utils/communicationValidation.d.ts +44 -0
  233. package/src/lib/utils/communicationValidation.d.ts.map +1 -0
  234. package/src/lib/utils/communicationValidation.js +291 -0
  235. package/src/lib/utils/communicationValidation.js.map +1 -0
  236. package/src/lib/utils/emailValidation.d.ts +19 -0
  237. package/src/lib/utils/emailValidation.d.ts.map +1 -0
  238. package/src/lib/utils/emailValidation.js +232 -0
  239. package/src/lib/utils/emailValidation.js.map +1 -0
  240. package/src/lib/interfaces/blockStore.d.ts +0 -7
  241. package/src/lib/interfaces/blockStore.d.ts.map +0 -1
  242. package/src/lib/interfaces/blockStore.js.map +0 -1
@@ -0,0 +1,288 @@
1
+ "use strict";
2
+ /**
3
+ * DirectoryController — REST API for the public key directory.
4
+ *
5
+ * Routes:
6
+ * GET /search — Search the public key directory
7
+ * GET /profile/:memberId — Get a member's public profile
8
+ * PUT /profile — Create or update a public profile
9
+ * POST /profile/:memberId/privacy — Toggle privacy mode
10
+ *
11
+ * Requirements: 5.1-5.10
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.DirectoryController = void 0;
15
+ const proofPlatform_1 = require("@brightchain/brightchain-lib/lib/enumerations/proofPlatform");
16
+ const identity_1 = require("@brightchain/brightchain-lib/lib/services/identity");
17
+ const node_express_suite_1 = require("@digitaldefiance/node-express-suite");
18
+ const errorResponse_1 = require("../../utils/errorResponse");
19
+ const base_1 = require("../base");
20
+ // ─── Controller ─────────────────────────────────────────────────────────────
21
+ /**
22
+ * Controller for the public key directory.
23
+ *
24
+ * Delegates to {@link PublicKeyDirectoryService} in brightchain-lib for
25
+ * search, profile management, and privacy mode toggling.
26
+ *
27
+ * @requirements 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 5.10
28
+ */
29
+ class DirectoryController extends base_1.BaseController {
30
+ constructor(application) {
31
+ super(application);
32
+ this.directoryService = null;
33
+ }
34
+ /**
35
+ * Inject the directory service instance.
36
+ * Must be called during application initialisation before handling requests.
37
+ */
38
+ setDirectoryService(service) {
39
+ this.directoryService = service;
40
+ }
41
+ getDirectoryService() {
42
+ if (!this.directoryService) {
43
+ throw new Error('PublicKeyDirectoryService not initialized');
44
+ }
45
+ return this.directoryService;
46
+ }
47
+ // ─── Route definitions ──────────────────────────────────────────────────
48
+ initRouteDefinitions() {
49
+ const noAuth = {
50
+ useAuthentication: false,
51
+ useCryptoAuthentication: false,
52
+ };
53
+ this.routeDefinitions = [
54
+ (0, node_express_suite_1.routeConfig)('get', '/search', {
55
+ ...noAuth,
56
+ handlerKey: 'searchDirectory',
57
+ openapi: {
58
+ summary: 'Search the public key directory',
59
+ description: 'Searches profiles by display name, social username, or member ID with relevance ranking and pagination.',
60
+ tags: ['Directory'],
61
+ responses: {
62
+ 200: {
63
+ schema: 'SearchDirectoryResponse',
64
+ description: 'Search results',
65
+ },
66
+ 400: {
67
+ schema: 'ApiErrorResponse',
68
+ description: 'Missing search query',
69
+ },
70
+ },
71
+ },
72
+ }),
73
+ (0, node_express_suite_1.routeConfig)('get', '/profile/:memberId', {
74
+ ...noAuth,
75
+ handlerKey: 'getProfile',
76
+ openapi: {
77
+ summary: 'Get a member public profile',
78
+ description: 'Returns the public profile for a member by ID, regardless of privacy mode.',
79
+ tags: ['Directory'],
80
+ responses: {
81
+ 200: {
82
+ schema: 'GetProfileResponse',
83
+ description: 'Profile found',
84
+ },
85
+ 404: {
86
+ schema: 'ApiErrorResponse',
87
+ description: 'Profile not found',
88
+ },
89
+ },
90
+ },
91
+ }),
92
+ (0, node_express_suite_1.routeConfig)('put', '/profile', {
93
+ ...noAuth,
94
+ handlerKey: 'updateProfile',
95
+ openapi: {
96
+ summary: 'Create or update a public profile',
97
+ description: 'Adds a new profile or updates an existing one in the directory.',
98
+ tags: ['Directory'],
99
+ responses: {
100
+ 200: {
101
+ schema: 'UpdateProfileResponse',
102
+ description: 'Profile updated',
103
+ },
104
+ 400: {
105
+ schema: 'ApiErrorResponse',
106
+ description: 'Invalid profile data',
107
+ },
108
+ },
109
+ },
110
+ }),
111
+ (0, node_express_suite_1.routeConfig)('post', '/profile/:memberId/privacy', {
112
+ ...noAuth,
113
+ handlerKey: 'togglePrivacy',
114
+ openapi: {
115
+ summary: 'Toggle privacy mode for a profile',
116
+ description: 'Toggles whether a profile appears in directory search results.',
117
+ tags: ['Directory'],
118
+ responses: {
119
+ 200: {
120
+ schema: 'TogglePrivacyResponse',
121
+ description: 'Privacy mode toggled',
122
+ },
123
+ 404: {
124
+ schema: 'ApiErrorResponse',
125
+ description: 'Profile not found',
126
+ },
127
+ },
128
+ },
129
+ }),
130
+ ];
131
+ this.handlers = {
132
+ searchDirectory: this.handleSearch.bind(this),
133
+ getProfile: this.handleGetProfile.bind(this),
134
+ updateProfile: this.handleUpdateProfile.bind(this),
135
+ togglePrivacy: this.handleTogglePrivacy.bind(this),
136
+ };
137
+ }
138
+ // ─── Handlers ─────────────────────────────────────────────────────────
139
+ /**
140
+ * GET /search — Search the public key directory.
141
+ *
142
+ * Query params: q (required), limit, offset, platformFilter
143
+ *
144
+ * @requirements 5.2, 5.3, 5.5, 5.9, 5.10
145
+ */
146
+ async handleSearch(req) {
147
+ try {
148
+ const { q, limit, offset, platformFilter } = req.query;
149
+ if (!q || typeof q !== 'string' || q.trim().length === 0) {
150
+ return (0, errorResponse_1.validationError)('Missing required query parameter: q');
151
+ }
152
+ // Validate platformFilter if provided
153
+ if (platformFilter &&
154
+ !Object.values(proofPlatform_1.ProofPlatform).includes(platformFilter)) {
155
+ return (0, errorResponse_1.validationError)(`Invalid platformFilter: ${platformFilter} (expected one of ${Object.values(proofPlatform_1.ProofPlatform).join(', ')})`);
156
+ }
157
+ const directory = this.getDirectoryService();
158
+ const searchResult = directory.search(q, {
159
+ limit: limit ? parseInt(limit, 10) : undefined,
160
+ offset: offset ? parseInt(offset, 10) : undefined,
161
+ platformFilter: platformFilter
162
+ ? platformFilter
163
+ : undefined,
164
+ });
165
+ return {
166
+ statusCode: 200,
167
+ response: {
168
+ status: 'success',
169
+ data: {
170
+ results: searchResult.results,
171
+ totalCount: searchResult.totalCount,
172
+ hasMore: searchResult.hasMore,
173
+ },
174
+ message: `Found ${searchResult.totalCount} result(s)`,
175
+ },
176
+ };
177
+ }
178
+ catch (error) {
179
+ return (0, errorResponse_1.handleError)(error);
180
+ }
181
+ }
182
+ /**
183
+ * GET /profile/:memberId — Get a member's public profile.
184
+ *
185
+ * Returns the profile regardless of privacy mode (direct lookup).
186
+ *
187
+ * @requirements 5.1, 5.9
188
+ */
189
+ async handleGetProfile(req) {
190
+ try {
191
+ const { memberId } = req.params;
192
+ if (!memberId) {
193
+ return (0, errorResponse_1.validationError)('Missing required parameter: memberId');
194
+ }
195
+ const directory = this.getDirectoryService();
196
+ const profile = directory.getProfile(memberId);
197
+ return {
198
+ statusCode: 200,
199
+ response: {
200
+ status: 'success',
201
+ data: profile,
202
+ message: 'Profile found',
203
+ },
204
+ };
205
+ }
206
+ catch (error) {
207
+ if (error instanceof identity_1.ProfileNotFoundError) {
208
+ const { memberId } = req.params;
209
+ return (0, errorResponse_1.notFoundError)('Profile', memberId);
210
+ }
211
+ return (0, errorResponse_1.handleError)(error);
212
+ }
213
+ }
214
+ /**
215
+ * PUT /profile — Create or update a public profile.
216
+ *
217
+ * @requirements 5.1, 5.7, 5.8
218
+ */
219
+ async handleUpdateProfile(req) {
220
+ try {
221
+ const profile = req.body;
222
+ if (!profile || typeof profile !== 'object') {
223
+ return (0, errorResponse_1.validationError)('Missing request body');
224
+ }
225
+ if (!profile.memberId || typeof profile.memberId !== 'string') {
226
+ return (0, errorResponse_1.validationError)('Missing required field: memberId');
227
+ }
228
+ if (!profile.displayName || typeof profile.displayName !== 'string') {
229
+ return (0, errorResponse_1.validationError)('Missing required field: displayName');
230
+ }
231
+ if (!profile.publicKey || typeof profile.publicKey !== 'string') {
232
+ return (0, errorResponse_1.validationError)('Missing required field: publicKey');
233
+ }
234
+ const directory = this.getDirectoryService();
235
+ directory.updateProfile(profile);
236
+ // Retrieve the stored profile (may have updated timestamps)
237
+ const stored = directory.getProfile(profile.memberId);
238
+ return {
239
+ statusCode: 200,
240
+ response: {
241
+ status: 'success',
242
+ data: stored,
243
+ message: 'Profile updated',
244
+ },
245
+ };
246
+ }
247
+ catch (error) {
248
+ if (error instanceof identity_1.InvalidProfileError) {
249
+ return (0, errorResponse_1.validationError)(error.message);
250
+ }
251
+ return (0, errorResponse_1.handleError)(error);
252
+ }
253
+ }
254
+ /**
255
+ * POST /profile/:memberId/privacy — Toggle privacy mode.
256
+ *
257
+ * @requirements 5.6, 5.9
258
+ */
259
+ async handleTogglePrivacy(req) {
260
+ try {
261
+ const { memberId } = req.params;
262
+ if (!memberId) {
263
+ return (0, errorResponse_1.validationError)('Missing required parameter: memberId');
264
+ }
265
+ const directory = this.getDirectoryService();
266
+ const privacyMode = directory.togglePrivacyMode(memberId);
267
+ return {
268
+ statusCode: 200,
269
+ response: {
270
+ status: 'success',
271
+ data: { privacyMode },
272
+ message: privacyMode
273
+ ? 'Privacy mode enabled — profile hidden from search'
274
+ : 'Privacy mode disabled — profile visible in search',
275
+ },
276
+ };
277
+ }
278
+ catch (error) {
279
+ if (error instanceof identity_1.ProfileNotFoundError) {
280
+ const { memberId } = req.params;
281
+ return (0, errorResponse_1.notFoundError)('Profile', memberId);
282
+ }
283
+ return (0, errorResponse_1.handleError)(error);
284
+ }
285
+ }
286
+ }
287
+ exports.DirectoryController = DirectoryController;
288
+ //# sourceMappingURL=directoryController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directoryController.js","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/controllers/identity/directoryController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * IdentityProofController — REST API for identity proof management.
3
+ *
4
+ * Routes:
5
+ * POST /create — Create a new identity proof
6
+ * POST /verify — Verify a proof's signature
7
+ * POST /check-url — Check if a proof URL contains the signed statement
8
+ * POST /:id/revoke — Revoke an identity proof
9
+ * GET /instructions/:platform — Get platform-specific posting instructions
10
+ * GET /list — List proofs for a member
11
+ *
12
+ * Requirements: 4.1-4.10
13
+ */
14
+ import type { ICheckProofUrlResponse, ICreateProofResponse, IGetInstructionsResponse, IListProofsResponse, IRevokeProofResponse, IVerifyProofResponse } from '@brightchain/brightchain-lib/lib/interfaces/responses/identityProofResponses';
15
+ import { ECIESService, Member, PlatformID } from '@digitaldefiance/ecies-lib';
16
+ import { CoreLanguageCode } from '@digitaldefiance/i18n-lib';
17
+ import { ApiErrorResponse, ApiRequestHandler, TypedHandlers } from '@digitaldefiance/node-express-suite';
18
+ import { IBrightChainApplication } from '../../interfaces/application';
19
+ import { DefaultBackendIdType } from '../../shared-types';
20
+ import { BaseController } from '../base';
21
+ type IdentityProofApiResponse = ICreateProofResponse | IVerifyProofResponse | ICheckProofUrlResponse | IRevokeProofResponse | IGetInstructionsResponse | IListProofsResponse | ApiErrorResponse;
22
+ interface IdentityProofHandlers extends TypedHandlers {
23
+ createProof: ApiRequestHandler<ICreateProofResponse | ApiErrorResponse>;
24
+ verifyProof: ApiRequestHandler<IVerifyProofResponse | ApiErrorResponse>;
25
+ checkProofUrl: ApiRequestHandler<ICheckProofUrlResponse | ApiErrorResponse>;
26
+ revokeProof: ApiRequestHandler<IRevokeProofResponse | ApiErrorResponse>;
27
+ getInstructions: ApiRequestHandler<IGetInstructionsResponse | ApiErrorResponse>;
28
+ listProofs: ApiRequestHandler<IListProofsResponse | ApiErrorResponse>;
29
+ }
30
+ /**
31
+ * Controller for identity proof creation, verification, and management.
32
+ *
33
+ * Delegates to {@link IdentityProofService} in brightchain-lib for
34
+ * core cryptographic operations.
35
+ *
36
+ * @requirements 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 4.10
37
+ */
38
+ export declare class IdentityProofController<TID extends PlatformID = DefaultBackendIdType> extends BaseController<TID, IdentityProofApiResponse, IdentityProofHandlers, CoreLanguageCode> {
39
+ private eciesService;
40
+ private memberResolver;
41
+ private readonly proofStore;
42
+ constructor(application: IBrightChainApplication<TID>);
43
+ /**
44
+ * Inject the ECIES service for cryptographic operations.
45
+ */
46
+ setEciesService(service: ECIESService<TID>): void;
47
+ /**
48
+ * Inject a member resolver function that looks up a Member by ID.
49
+ * Required for the create endpoint which needs the member's private key.
50
+ */
51
+ setMemberResolver(resolver: (memberId: string) => Member<TID> | undefined): void;
52
+ private getEciesService;
53
+ private resolveMember;
54
+ protected initRouteDefinitions(): void;
55
+ /**
56
+ * POST /create — Create a new identity proof.
57
+ *
58
+ * @requirements 4.1, 4.2, 4.3, 4.8
59
+ */
60
+ private handleCreateProof;
61
+ /**
62
+ * POST /verify — Verify an identity proof's signature.
63
+ *
64
+ * @requirements 4.4
65
+ */
66
+ private handleVerifyProof;
67
+ /**
68
+ * POST /check-url — Check if a proof URL contains the signed statement.
69
+ *
70
+ * @requirements 4.6, 4.10
71
+ */
72
+ private handleCheckProofUrl;
73
+ /**
74
+ * POST /:id/revoke — Revoke an identity proof.
75
+ *
76
+ * @requirements 4.7
77
+ */
78
+ private handleRevokeProof;
79
+ /**
80
+ * GET /instructions/:platform — Get platform-specific posting instructions.
81
+ *
82
+ * @requirements 4.9
83
+ */
84
+ private handleGetInstructions;
85
+ /**
86
+ * GET /list — List identity proofs for a member.
87
+ *
88
+ * @requirements 4.5
89
+ */
90
+ private handleListProofs;
91
+ private mapProofError;
92
+ }
93
+ export {};
94
+ //# sourceMappingURL=identityProofController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identityProofController.d.ts","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/controllers/identity/identityProofController.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,8EAA8E,CAAC;AAOtF,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EAEd,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAM1D,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAIzC,KAAK,wBAAwB,GACzB,oBAAoB,GACpB,oBAAoB,GACpB,sBAAsB,GACtB,oBAAoB,GACpB,wBAAwB,GACxB,mBAAmB,GACnB,gBAAgB,CAAC;AAIrB,UAAU,qBAAsB,SAAQ,aAAa;IACnD,WAAW,EAAE,iBAAiB,CAAC,oBAAoB,GAAG,gBAAgB,CAAC,CAAC;IACxE,WAAW,EAAE,iBAAiB,CAAC,oBAAoB,GAAG,gBAAgB,CAAC,CAAC;IACxE,aAAa,EAAE,iBAAiB,CAAC,sBAAsB,GAAG,gBAAgB,CAAC,CAAC;IAC5E,WAAW,EAAE,iBAAiB,CAAC,oBAAoB,GAAG,gBAAgB,CAAC,CAAC;IACxE,eAAe,EAAE,iBAAiB,CAChC,wBAAwB,GAAG,gBAAgB,CAC5C,CAAC;IACF,UAAU,EAAE,iBAAiB,CAAC,mBAAmB,GAAG,gBAAgB,CAAC,CAAC;CACvE;AA8ED;;;;;;;GAOG;AACH,qBAAa,uBAAuB,CAClC,GAAG,SAAS,UAAU,GAAG,oBAAoB,CAC7C,SAAQ,cAAc,CACtB,GAAG,EACH,wBAAwB,EACxB,qBAAqB,EACrB,gBAAgB,CACjB;IACC,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,cAAc,CAEN;IAChB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;gBAEnC,WAAW,EAAE,uBAAuB,CAAC,GAAG,CAAC;IAIrD;;OAEG;IACI,eAAe,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI;IAIxD;;;OAGG;IACI,iBAAiB,CACtB,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,GACtD,IAAI;IAIP,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,aAAa;IAarB,SAAS,CAAC,oBAAoB,IAAI,IAAI;IAqItC;;;;OAIG;YACW,iBAAiB;IAiD/B;;;;OAIG;YACW,iBAAiB;IAqC/B;;;;OAIG;YACW,mBAAmB;IA0CjC;;;;OAIG;YACW,iBAAiB;IAsC/B;;;;OAIG;YACW,qBAAqB;IAyBnC;;;;OAIG;YACW,gBAAgB;IA2B9B,OAAO,CAAC,aAAa;CAiCtB"}