@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.
- package/package.json +5 -5
- package/src/index.d.ts +3 -0
- package/src/index.d.ts.map +1 -1
- package/src/index.js +5 -0
- package/src/index.js.map +1 -1
- package/src/lib/application.d.ts +1 -0
- package/src/lib/application.d.ts.map +1 -1
- package/src/lib/application.js +23 -0
- package/src/lib/application.js.map +1 -1
- package/src/lib/auth/aclEnforcedAvailability.d.ts +57 -0
- package/src/lib/auth/aclEnforcedAvailability.d.ts.map +1 -0
- package/src/lib/auth/aclEnforcedAvailability.js +87 -0
- package/src/lib/auth/aclEnforcedAvailability.js.map +1 -0
- package/src/lib/auth/aclEnforcedBlockStore.d.ts +66 -0
- package/src/lib/auth/aclEnforcedBlockStore.d.ts.map +1 -0
- package/src/lib/auth/aclEnforcedBlockStore.js +83 -0
- package/src/lib/auth/aclEnforcedBlockStore.js.map +1 -0
- package/src/lib/auth/ecdsaNodeAuthenticator.d.ts +46 -0
- package/src/lib/auth/ecdsaNodeAuthenticator.d.ts.map +1 -0
- package/src/lib/auth/ecdsaNodeAuthenticator.js +110 -0
- package/src/lib/auth/ecdsaNodeAuthenticator.js.map +1 -0
- package/src/lib/auth/index.d.ts +7 -0
- package/src/lib/auth/index.d.ts.map +1 -0
- package/src/lib/auth/index.js +13 -0
- package/src/lib/auth/index.js.map +1 -0
- package/src/lib/auth/poolAclBootstrap.d.ts +36 -0
- package/src/lib/auth/poolAclBootstrap.d.ts.map +1 -0
- package/src/lib/auth/poolAclBootstrap.js +64 -0
- package/src/lib/auth/poolAclBootstrap.js.map +1 -0
- package/src/lib/auth/poolAclStore.d.ts +77 -0
- package/src/lib/auth/poolAclStore.d.ts.map +1 -0
- package/src/lib/auth/poolAclStore.js +189 -0
- package/src/lib/auth/poolAclStore.js.map +1 -0
- package/src/lib/auth/poolAclUpdater.d.ts +79 -0
- package/src/lib/auth/poolAclUpdater.d.ts.map +1 -0
- package/src/lib/auth/poolAclUpdater.js +144 -0
- package/src/lib/auth/poolAclUpdater.js.map +1 -0
- package/src/lib/availability/availabilityService.d.ts +2 -2
- package/src/lib/availability/availabilityService.d.ts.map +1 -1
- package/src/lib/availability/availabilityService.js +12 -5
- package/src/lib/availability/availabilityService.js.map +1 -1
- package/src/lib/availability/blockRegistry.d.ts +45 -3
- package/src/lib/availability/blockRegistry.d.ts.map +1 -1
- package/src/lib/availability/blockRegistry.js +123 -5
- package/src/lib/availability/blockRegistry.js.map +1 -1
- package/src/lib/availability/discoveryProtocol.d.ts +30 -1
- package/src/lib/availability/discoveryProtocol.d.ts.map +1 -1
- package/src/lib/availability/discoveryProtocol.js +76 -0
- package/src/lib/availability/discoveryProtocol.js.map +1 -1
- package/src/lib/availability/gossipService.d.ts +45 -6
- package/src/lib/availability/gossipService.d.ts.map +1 -1
- package/src/lib/availability/gossipService.js +177 -5
- package/src/lib/availability/gossipService.js.map +1 -1
- package/src/lib/availability/reconciliationService.d.ts +88 -1
- package/src/lib/availability/reconciliationService.d.ts.map +1 -1
- package/src/lib/availability/reconciliationService.js +246 -48
- package/src/lib/availability/reconciliationService.js.map +1 -1
- package/src/lib/blockFetch/blockFetcher.d.ts +100 -0
- package/src/lib/blockFetch/blockFetcher.d.ts.map +1 -0
- package/src/lib/blockFetch/blockFetcher.js +279 -0
- package/src/lib/blockFetch/blockFetcher.js.map +1 -0
- package/src/lib/blockFetch/fetchQueue.d.ts +88 -0
- package/src/lib/blockFetch/fetchQueue.d.ts.map +1 -0
- package/src/lib/blockFetch/fetchQueue.js +204 -0
- package/src/lib/blockFetch/fetchQueue.js.map +1 -0
- package/src/lib/blockFetch/httpBlockFetchTransport.d.ts +65 -0
- package/src/lib/blockFetch/httpBlockFetchTransport.d.ts.map +1 -0
- package/src/lib/blockFetch/httpBlockFetchTransport.js +104 -0
- package/src/lib/blockFetch/httpBlockFetchTransport.js.map +1 -0
- package/src/lib/blockFetch/index.d.ts +10 -0
- package/src/lib/blockFetch/index.d.ts.map +1 -0
- package/src/lib/blockFetch/index.js +13 -0
- package/src/lib/blockFetch/index.js.map +1 -0
- package/src/lib/controllers/api/brightpass.d.ts +72 -0
- package/src/lib/controllers/api/brightpass.d.ts.map +1 -0
- package/src/lib/controllers/api/brightpass.js +577 -0
- package/src/lib/controllers/api/brightpass.js.map +1 -0
- package/src/lib/controllers/api/channels.d.ts +122 -0
- package/src/lib/controllers/api/channels.d.ts.map +1 -0
- package/src/lib/controllers/api/channels.js +701 -0
- package/src/lib/controllers/api/channels.js.map +1 -0
- package/src/lib/controllers/api/conversations.d.ts +89 -0
- package/src/lib/controllers/api/conversations.d.ts.map +1 -0
- package/src/lib/controllers/api/conversations.js +259 -0
- package/src/lib/controllers/api/conversations.js.map +1 -0
- package/src/lib/controllers/api/emails.d.ts +122 -0
- package/src/lib/controllers/api/emails.d.ts.map +1 -0
- package/src/lib/controllers/api/emails.js +494 -0
- package/src/lib/controllers/api/emails.js.map +1 -0
- package/src/lib/controllers/api/explodingMessages.d.ts +79 -0
- package/src/lib/controllers/api/explodingMessages.d.ts.map +1 -0
- package/src/lib/controllers/api/explodingMessages.js +378 -0
- package/src/lib/controllers/api/explodingMessages.js.map +1 -0
- package/src/lib/controllers/api/groups.d.ts +94 -0
- package/src/lib/controllers/api/groups.d.ts.map +1 -0
- package/src/lib/controllers/api/groups.js +484 -0
- package/src/lib/controllers/api/groups.js.map +1 -0
- package/src/lib/controllers/api/index.d.ts +6 -0
- package/src/lib/controllers/api/index.d.ts.map +1 -1
- package/src/lib/controllers/api/index.js +6 -0
- package/src/lib/controllers/api/index.js.map +1 -1
- package/src/lib/controllers/api/messages.d.ts.map +1 -1
- package/src/lib/controllers/api/messages.js +2 -1
- package/src/lib/controllers/api/messages.js.map +1 -1
- package/src/lib/controllers/api/sync.d.ts +38 -2
- package/src/lib/controllers/api/sync.d.ts.map +1 -1
- package/src/lib/controllers/api/sync.js +89 -0
- package/src/lib/controllers/api/sync.js.map +1 -1
- package/src/lib/controllers/crypto/gitController.d.ts +70 -0
- package/src/lib/controllers/crypto/gitController.d.ts.map +1 -0
- package/src/lib/controllers/crypto/gitController.js +306 -0
- package/src/lib/controllers/crypto/gitController.js.map +1 -0
- package/src/lib/controllers/crypto/index.d.ts +3 -0
- package/src/lib/controllers/crypto/index.d.ts.map +1 -0
- package/src/lib/controllers/crypto/index.js +6 -0
- package/src/lib/controllers/crypto/index.js.map +1 -0
- package/src/lib/controllers/crypto/walletController.d.ts +64 -0
- package/src/lib/controllers/crypto/walletController.d.ts.map +1 -0
- package/src/lib/controllers/crypto/walletController.js +260 -0
- package/src/lib/controllers/crypto/walletController.js.map +1 -0
- package/src/lib/controllers/identity/deviceController.d.ts +96 -0
- package/src/lib/controllers/identity/deviceController.d.ts.map +1 -0
- package/src/lib/controllers/identity/deviceController.js +355 -0
- package/src/lib/controllers/identity/deviceController.js.map +1 -0
- package/src/lib/controllers/identity/directoryController.d.ts +75 -0
- package/src/lib/controllers/identity/directoryController.d.ts.map +1 -0
- package/src/lib/controllers/identity/directoryController.js +288 -0
- package/src/lib/controllers/identity/directoryController.js.map +1 -0
- package/src/lib/controllers/identity/identityProofController.d.ts +94 -0
- package/src/lib/controllers/identity/identityProofController.d.ts.map +1 -0
- package/src/lib/controllers/identity/identityProofController.js +454 -0
- package/src/lib/controllers/identity/identityProofController.js.map +1 -0
- package/src/lib/controllers/identity/index.d.ts +4 -0
- package/src/lib/controllers/identity/index.d.ts.map +1 -0
- package/src/lib/controllers/identity/index.js +7 -0
- package/src/lib/controllers/identity/index.js.map +1 -0
- package/src/lib/controllers/index.d.ts +2 -0
- package/src/lib/controllers/index.d.ts.map +1 -1
- package/src/lib/controllers/index.js +2 -0
- package/src/lib/controllers/index.js.map +1 -1
- package/src/lib/encryption/encryptedMetadataService.d.ts +87 -0
- package/src/lib/encryption/encryptedMetadataService.d.ts.map +1 -0
- package/src/lib/encryption/encryptedMetadataService.js +224 -0
- package/src/lib/encryption/encryptedMetadataService.js.map +1 -0
- package/src/lib/encryption/encryptionAwareReplication.d.ts +76 -0
- package/src/lib/encryption/encryptionAwareReplication.d.ts.map +1 -0
- package/src/lib/encryption/encryptionAwareReplication.js +116 -0
- package/src/lib/encryption/encryptionAwareReplication.js.map +1 -0
- package/src/lib/encryption/errors.d.ts +49 -0
- package/src/lib/encryption/errors.d.ts.map +1 -0
- package/src/lib/encryption/errors.js +80 -0
- package/src/lib/encryption/errors.js.map +1 -0
- package/src/lib/encryption/index.d.ts +6 -0
- package/src/lib/encryption/index.d.ts.map +1 -0
- package/src/lib/encryption/index.js +9 -0
- package/src/lib/encryption/index.js.map +1 -0
- package/src/lib/encryption/poolEncryptionService.d.ts +94 -0
- package/src/lib/encryption/poolEncryptionService.d.ts.map +1 -0
- package/src/lib/encryption/poolEncryptionService.js +252 -0
- package/src/lib/encryption/poolEncryptionService.js.map +1 -0
- package/src/lib/encryption/poolKeyManager.d.ts +82 -0
- package/src/lib/encryption/poolKeyManager.d.ts.map +1 -0
- package/src/lib/encryption/poolKeyManager.js +156 -0
- package/src/lib/encryption/poolKeyManager.js.map +1 -0
- package/src/lib/environment.d.ts +3 -0
- package/src/lib/environment.d.ts.map +1 -1
- package/src/lib/environment.js +5 -0
- package/src/lib/environment.js.map +1 -1
- package/src/lib/interfaces/environment.d.ts +7 -1
- package/src/lib/interfaces/environment.d.ts.map +1 -1
- package/src/lib/interfaces/index.d.ts +0 -1
- package/src/lib/interfaces/index.d.ts.map +1 -1
- package/src/lib/interfaces/requests/getBlockDataRequest.d.ts +12 -0
- package/src/lib/interfaces/requests/getBlockDataRequest.d.ts.map +1 -0
- package/src/lib/interfaces/{blockStore.js → requests/getBlockDataRequest.js} +1 -1
- package/src/lib/interfaces/requests/getBlockDataRequest.js.map +1 -0
- package/src/lib/interfaces/requests/index.d.ts +1 -0
- package/src/lib/interfaces/requests/index.d.ts.map +1 -1
- package/src/lib/routers/api.d.ts +54 -1
- package/src/lib/routers/api.d.ts.map +1 -1
- package/src/lib/routers/api.js +77 -0
- package/src/lib/routers/api.js.map +1 -1
- package/src/lib/services/blockStore.d.ts +5 -2
- package/src/lib/services/blockStore.d.ts.map +1 -1
- package/src/lib/services/blockStore.js +4 -0
- package/src/lib/services/blockStore.js.map +1 -1
- package/src/lib/services/brightpass/auditLogger.d.ts +77 -0
- package/src/lib/services/brightpass/auditLogger.d.ts.map +1 -0
- package/src/lib/services/brightpass/auditLogger.js +184 -0
- package/src/lib/services/brightpass/auditLogger.js.map +1 -0
- package/src/lib/services/brightpass/vaultEncryption.d.ts +82 -0
- package/src/lib/services/brightpass/vaultEncryption.d.ts.map +1 -0
- package/src/lib/services/brightpass/vaultEncryption.js +144 -0
- package/src/lib/services/brightpass/vaultEncryption.js.map +1 -0
- package/src/lib/services/brightpass.d.ts +294 -0
- package/src/lib/services/brightpass.d.ts.map +1 -0
- package/src/lib/services/brightpass.js +1260 -0
- package/src/lib/services/brightpass.js.map +1 -0
- package/src/lib/services/eventNotificationSystem.d.ts +69 -3
- package/src/lib/services/eventNotificationSystem.d.ts.map +1 -1
- package/src/lib/services/eventNotificationSystem.js +200 -0
- package/src/lib/services/eventNotificationSystem.js.map +1 -1
- package/src/lib/services/expirationScheduler.d.ts +90 -0
- package/src/lib/services/expirationScheduler.d.ts.map +1 -0
- package/src/lib/services/expirationScheduler.js +131 -0
- package/src/lib/services/expirationScheduler.js.map +1 -0
- package/src/lib/services/fecUsageExample.d.ts +2 -2
- package/src/lib/services/index.d.ts +2 -0
- package/src/lib/services/index.d.ts.map +1 -1
- package/src/lib/services/index.js +2 -0
- package/src/lib/services/index.js.map +1 -1
- package/src/lib/services/paginationService.d.ts +18 -0
- package/src/lib/services/paginationService.d.ts.map +1 -0
- package/src/lib/services/paginationService.js +32 -0
- package/src/lib/services/paginationService.js.map +1 -0
- package/src/lib/services/presenceService.d.ts +76 -0
- package/src/lib/services/presenceService.d.ts.map +1 -0
- package/src/lib/services/presenceService.js +143 -0
- package/src/lib/services/presenceService.js.map +1 -0
- package/src/lib/services/wireConversationPromotion.d.ts +23 -0
- package/src/lib/services/wireConversationPromotion.d.ts.map +1 -0
- package/src/lib/services/wireConversationPromotion.js +26 -0
- package/src/lib/services/wireConversationPromotion.js.map +1 -0
- package/src/lib/stores/availabilityAwareBlockStore.d.ts +115 -10
- package/src/lib/stores/availabilityAwareBlockStore.d.ts.map +1 -1
- package/src/lib/stores/availabilityAwareBlockStore.js +267 -23
- package/src/lib/stores/availabilityAwareBlockStore.js.map +1 -1
- package/src/lib/stores/diskBlockAsyncStore.d.ts +81 -2
- package/src/lib/stores/diskBlockAsyncStore.d.ts.map +1 -1
- package/src/lib/stores/diskBlockAsyncStore.js +297 -10
- package/src/lib/stores/diskBlockAsyncStore.js.map +1 -1
- package/src/lib/utils/communicationValidation.d.ts +44 -0
- package/src/lib/utils/communicationValidation.d.ts.map +1 -0
- package/src/lib/utils/communicationValidation.js +291 -0
- package/src/lib/utils/communicationValidation.js.map +1 -0
- package/src/lib/utils/emailValidation.d.ts +19 -0
- package/src/lib/utils/emailValidation.d.ts.map +1 -0
- package/src/lib/utils/emailValidation.js +232 -0
- package/src/lib/utils/emailValidation.js.map +1 -0
- package/src/lib/interfaces/blockStore.d.ts +0 -7
- package/src/lib/interfaces/blockStore.d.ts.map +0 -1
- package/src/lib/interfaces/blockStore.js.map +0 -1
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DeviceController — REST API for device provisioning and management.
|
|
4
|
+
*
|
|
5
|
+
* Routes:
|
|
6
|
+
* POST /provision — Provision a new device via paper key
|
|
7
|
+
* GET /list — List devices for the authenticated member
|
|
8
|
+
* POST /:id/revoke — Revoke a provisioned device
|
|
9
|
+
* PUT /:id/rename — Rename a provisioned device
|
|
10
|
+
*
|
|
11
|
+
* Requirements: 3.1-3.8
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.DeviceController = void 0;
|
|
15
|
+
const deviceType_1 = require("@brightchain/brightchain-lib/lib/enumerations/deviceType");
|
|
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 device provisioning and management.
|
|
23
|
+
*
|
|
24
|
+
* Delegates to {@link DeviceProvisioningService} in brightchain-lib for
|
|
25
|
+
* core provisioning logic and uses an {@link IDeviceKeyStorage} implementation
|
|
26
|
+
* for persistence.
|
|
27
|
+
*
|
|
28
|
+
* @requirements 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8
|
|
29
|
+
*/
|
|
30
|
+
class DeviceController extends base_1.BaseController {
|
|
31
|
+
constructor(application) {
|
|
32
|
+
super(application);
|
|
33
|
+
this.deviceStorage = null;
|
|
34
|
+
this.eciesService = null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Inject the device key storage implementation.
|
|
38
|
+
* Must be called during application initialisation before handling requests.
|
|
39
|
+
*/
|
|
40
|
+
setDeviceStorage(storage) {
|
|
41
|
+
this.deviceStorage = storage;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Inject the ECIES service for cryptographic operations.
|
|
45
|
+
* Must be called during application initialisation before handling requests.
|
|
46
|
+
*/
|
|
47
|
+
setEciesService(service) {
|
|
48
|
+
this.eciesService = service;
|
|
49
|
+
}
|
|
50
|
+
getDeviceStorage() {
|
|
51
|
+
if (!this.deviceStorage) {
|
|
52
|
+
throw new Error('DeviceKeyStorage not initialized');
|
|
53
|
+
}
|
|
54
|
+
return this.deviceStorage;
|
|
55
|
+
}
|
|
56
|
+
getEciesService() {
|
|
57
|
+
if (!this.eciesService) {
|
|
58
|
+
throw new Error('ECIESService not initialized');
|
|
59
|
+
}
|
|
60
|
+
return this.eciesService;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Extract the authenticated member ID from the request.
|
|
64
|
+
* Falls back to body/query memberId for testing.
|
|
65
|
+
*/
|
|
66
|
+
getMemberId(req) {
|
|
67
|
+
const body = req.body;
|
|
68
|
+
if (body && typeof body === 'object') {
|
|
69
|
+
const rec = body;
|
|
70
|
+
if (typeof rec['memberId'] === 'string')
|
|
71
|
+
return rec['memberId'];
|
|
72
|
+
}
|
|
73
|
+
const query = req.query;
|
|
74
|
+
if (query && typeof query.memberId === 'string')
|
|
75
|
+
return query.memberId;
|
|
76
|
+
throw new Error('No authenticated user');
|
|
77
|
+
}
|
|
78
|
+
// ─── Route definitions ──────────────────────────────────────────────────
|
|
79
|
+
initRouteDefinitions() {
|
|
80
|
+
const noAuth = {
|
|
81
|
+
useAuthentication: false,
|
|
82
|
+
useCryptoAuthentication: false,
|
|
83
|
+
};
|
|
84
|
+
this.routeDefinitions = [
|
|
85
|
+
(0, node_express_suite_1.routeConfig)('post', '/provision', {
|
|
86
|
+
...noAuth,
|
|
87
|
+
handlerKey: 'provisionDevice',
|
|
88
|
+
openapi: {
|
|
89
|
+
summary: 'Provision a new device',
|
|
90
|
+
description: 'Validates a paper key, recovers the member identity, generates device-specific keys, and stores device metadata.',
|
|
91
|
+
tags: ['Devices'],
|
|
92
|
+
responses: {
|
|
93
|
+
201: {
|
|
94
|
+
schema: 'ProvisionDeviceResponse',
|
|
95
|
+
description: 'Device provisioned successfully',
|
|
96
|
+
},
|
|
97
|
+
400: {
|
|
98
|
+
schema: 'ApiErrorResponse',
|
|
99
|
+
description: 'Invalid paper key or missing fields',
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
}),
|
|
104
|
+
(0, node_express_suite_1.routeConfig)('get', '/list', {
|
|
105
|
+
...noAuth,
|
|
106
|
+
handlerKey: 'listDevices',
|
|
107
|
+
openapi: {
|
|
108
|
+
summary: 'List devices for a member',
|
|
109
|
+
description: 'Returns all provisioned devices for the authenticated member.',
|
|
110
|
+
tags: ['Devices'],
|
|
111
|
+
responses: {
|
|
112
|
+
200: {
|
|
113
|
+
schema: 'ListDevicesResponse',
|
|
114
|
+
description: 'List of devices',
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
}),
|
|
119
|
+
(0, node_express_suite_1.routeConfig)('post', '/:id/revoke', {
|
|
120
|
+
...noAuth,
|
|
121
|
+
handlerKey: 'revokeDevice',
|
|
122
|
+
openapi: {
|
|
123
|
+
summary: 'Revoke a device',
|
|
124
|
+
description: 'Marks a provisioned device as revoked so its keys are no longer trusted.',
|
|
125
|
+
tags: ['Devices'],
|
|
126
|
+
responses: {
|
|
127
|
+
200: {
|
|
128
|
+
schema: 'RevokeDeviceResponse',
|
|
129
|
+
description: 'Device revoked',
|
|
130
|
+
},
|
|
131
|
+
404: {
|
|
132
|
+
schema: 'ApiErrorResponse',
|
|
133
|
+
description: 'Device not found',
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
}),
|
|
138
|
+
(0, node_express_suite_1.routeConfig)('put', '/:id/rename', {
|
|
139
|
+
...noAuth,
|
|
140
|
+
handlerKey: 'renameDevice',
|
|
141
|
+
openapi: {
|
|
142
|
+
summary: 'Rename a device',
|
|
143
|
+
description: 'Updates the human-readable name of a provisioned device.',
|
|
144
|
+
tags: ['Devices'],
|
|
145
|
+
responses: {
|
|
146
|
+
200: {
|
|
147
|
+
schema: 'RenameDeviceResponse',
|
|
148
|
+
description: 'Device renamed',
|
|
149
|
+
},
|
|
150
|
+
404: {
|
|
151
|
+
schema: 'ApiErrorResponse',
|
|
152
|
+
description: 'Device not found',
|
|
153
|
+
},
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
}),
|
|
157
|
+
];
|
|
158
|
+
this.handlers = {
|
|
159
|
+
provisionDevice: this.handleProvisionDevice.bind(this),
|
|
160
|
+
listDevices: this.handleListDevices.bind(this),
|
|
161
|
+
revokeDevice: this.handleRevokeDevice.bind(this),
|
|
162
|
+
renameDevice: this.handleRenameDevice.bind(this),
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
// ─── Handlers ─────────────────────────────────────────────────────────
|
|
166
|
+
/**
|
|
167
|
+
* POST /provision — Provision a new device via paper key.
|
|
168
|
+
*
|
|
169
|
+
* Validates the paper key, recovers the member identity, generates
|
|
170
|
+
* device-specific keys, and stores device metadata.
|
|
171
|
+
*
|
|
172
|
+
* @requirements 3.1, 3.2, 3.3, 3.4, 3.5, 3.8
|
|
173
|
+
*/
|
|
174
|
+
async handleProvisionDevice(req) {
|
|
175
|
+
try {
|
|
176
|
+
const { paperKey, deviceName, deviceType, deviceIndex } = req.body;
|
|
177
|
+
if (!paperKey || typeof paperKey !== 'string') {
|
|
178
|
+
return (0, errorResponse_1.validationError)('Missing required field: paperKey');
|
|
179
|
+
}
|
|
180
|
+
if (!deviceName || typeof deviceName !== 'string') {
|
|
181
|
+
return (0, errorResponse_1.validationError)('Missing required field: deviceName');
|
|
182
|
+
}
|
|
183
|
+
if (!deviceType || !Object.values(deviceType_1.DeviceType).includes(deviceType)) {
|
|
184
|
+
return (0, errorResponse_1.validationError)(`Missing or invalid field: deviceType (expected one of ${Object.values(deviceType_1.DeviceType).join(', ')})`);
|
|
185
|
+
}
|
|
186
|
+
if (deviceIndex === undefined || typeof deviceIndex !== 'number') {
|
|
187
|
+
return (0, errorResponse_1.validationError)('Missing required field: deviceIndex (non-negative integer)');
|
|
188
|
+
}
|
|
189
|
+
const eciesService = this.getEciesService();
|
|
190
|
+
const storage = this.getDeviceStorage();
|
|
191
|
+
const result = await identity_1.DeviceProvisioningService.provisionDevice(paperKey, deviceName, deviceType, eciesService, storage, deviceIndex);
|
|
192
|
+
// Requirement 3.5: paper key is marked as used inside provisionDevice
|
|
193
|
+
// Requirement 3.8: if provisioning throws, paper key is NOT marked
|
|
194
|
+
return {
|
|
195
|
+
statusCode: 201,
|
|
196
|
+
response: {
|
|
197
|
+
status: 'success',
|
|
198
|
+
data: {
|
|
199
|
+
device: result.deviceMetadata,
|
|
200
|
+
publicKeyHex: result.deviceKeys.publicKeyHex,
|
|
201
|
+
derivationPath: result.deviceKeys.derivationPath,
|
|
202
|
+
},
|
|
203
|
+
message: 'Device provisioned successfully',
|
|
204
|
+
},
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
return this.mapDeviceError(error);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* GET /list — List all devices for the authenticated member.
|
|
213
|
+
*
|
|
214
|
+
* @requirements 3.7
|
|
215
|
+
*/
|
|
216
|
+
async handleListDevices(req) {
|
|
217
|
+
try {
|
|
218
|
+
const memberId = this.getMemberId(req);
|
|
219
|
+
const storage = this.getDeviceStorage();
|
|
220
|
+
const devices = await storage.list(memberId);
|
|
221
|
+
return {
|
|
222
|
+
statusCode: 200,
|
|
223
|
+
response: {
|
|
224
|
+
status: 'success',
|
|
225
|
+
data: devices,
|
|
226
|
+
message: `Found ${devices.length} device(s)`,
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
catch (error) {
|
|
231
|
+
return (0, errorResponse_1.handleError)(error);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* POST /:id/revoke — Revoke a provisioned device.
|
|
236
|
+
*
|
|
237
|
+
* Marks the device as revoked so its keys are no longer trusted.
|
|
238
|
+
* The device metadata is updated in storage with a revokedAt timestamp.
|
|
239
|
+
*
|
|
240
|
+
* @requirements 3.7
|
|
241
|
+
*/
|
|
242
|
+
async handleRevokeDevice(req) {
|
|
243
|
+
try {
|
|
244
|
+
const { id } = req.params;
|
|
245
|
+
if (!id) {
|
|
246
|
+
return (0, errorResponse_1.validationError)('Missing required parameter: id');
|
|
247
|
+
}
|
|
248
|
+
const storage = this.getDeviceStorage();
|
|
249
|
+
const device = await storage.retrieve(id);
|
|
250
|
+
if (!device) {
|
|
251
|
+
return (0, errorResponse_1.notFoundError)('Device', id);
|
|
252
|
+
}
|
|
253
|
+
if (device.revokedAt) {
|
|
254
|
+
return (0, errorResponse_1.validationError)('Device is already revoked');
|
|
255
|
+
}
|
|
256
|
+
const revokedAt = new Date();
|
|
257
|
+
const updatedDevice = { ...device, revokedAt };
|
|
258
|
+
// Remove then re-store to update the record
|
|
259
|
+
await storage.remove(id);
|
|
260
|
+
await storage.store(updatedDevice);
|
|
261
|
+
return {
|
|
262
|
+
statusCode: 200,
|
|
263
|
+
response: {
|
|
264
|
+
status: 'success',
|
|
265
|
+
data: {
|
|
266
|
+
revoked: true,
|
|
267
|
+
revokedAt: revokedAt.toISOString(),
|
|
268
|
+
},
|
|
269
|
+
message: 'Device revoked',
|
|
270
|
+
},
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
catch (error) {
|
|
274
|
+
return (0, errorResponse_1.handleError)(error);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* PUT /:id/rename — Rename a provisioned device.
|
|
279
|
+
*
|
|
280
|
+
* Updates the human-readable name of a provisioned device.
|
|
281
|
+
*
|
|
282
|
+
* @requirements 3.7
|
|
283
|
+
*/
|
|
284
|
+
async handleRenameDevice(req) {
|
|
285
|
+
try {
|
|
286
|
+
const { id } = req.params;
|
|
287
|
+
const { deviceName } = req.body;
|
|
288
|
+
if (!id) {
|
|
289
|
+
return (0, errorResponse_1.validationError)('Missing required parameter: id');
|
|
290
|
+
}
|
|
291
|
+
if (!deviceName || typeof deviceName !== 'string') {
|
|
292
|
+
return (0, errorResponse_1.validationError)('Missing required field: deviceName');
|
|
293
|
+
}
|
|
294
|
+
const storage = this.getDeviceStorage();
|
|
295
|
+
const device = await storage.retrieve(id);
|
|
296
|
+
if (!device) {
|
|
297
|
+
return (0, errorResponse_1.notFoundError)('Device', id);
|
|
298
|
+
}
|
|
299
|
+
if (device.revokedAt) {
|
|
300
|
+
return (0, errorResponse_1.validationError)('Cannot rename a revoked device');
|
|
301
|
+
}
|
|
302
|
+
const updatedDevice = { ...device, deviceName };
|
|
303
|
+
// Remove then re-store to update the record
|
|
304
|
+
await storage.remove(id);
|
|
305
|
+
await storage.store(updatedDevice);
|
|
306
|
+
return {
|
|
307
|
+
statusCode: 200,
|
|
308
|
+
response: {
|
|
309
|
+
status: 'success',
|
|
310
|
+
data: updatedDevice,
|
|
311
|
+
message: 'Device renamed',
|
|
312
|
+
},
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
catch (error) {
|
|
316
|
+
return (0, errorResponse_1.handleError)(error);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
// ─── Error mapping ──────────────────────────────────────────────────
|
|
320
|
+
/**
|
|
321
|
+
* Map device-specific errors to appropriate HTTP responses.
|
|
322
|
+
*/
|
|
323
|
+
mapDeviceError(error) {
|
|
324
|
+
if (error instanceof identity_1.InvalidPaperKeyError) {
|
|
325
|
+
return {
|
|
326
|
+
statusCode: 400,
|
|
327
|
+
response: {
|
|
328
|
+
message: error.message,
|
|
329
|
+
error: 'INVALID_PAPER_KEY',
|
|
330
|
+
},
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
if (error instanceof identity_1.DeviceKeyGenerationError) {
|
|
334
|
+
return {
|
|
335
|
+
statusCode: 500,
|
|
336
|
+
response: {
|
|
337
|
+
message: error.message,
|
|
338
|
+
error: 'DEVICE_KEY_GENERATION_FAILED',
|
|
339
|
+
},
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
if (error instanceof identity_1.DeviceKeyStorageError) {
|
|
343
|
+
return {
|
|
344
|
+
statusCode: 500,
|
|
345
|
+
response: {
|
|
346
|
+
message: error.message,
|
|
347
|
+
error: 'DEVICE_KEY_STORAGE_FAILED',
|
|
348
|
+
},
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
return (0, errorResponse_1.handleError)(error);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
exports.DeviceController = DeviceController;
|
|
355
|
+
//# sourceMappingURL=deviceController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deviceController.js","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/controllers/identity/deviceController.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DirectoryController — REST API for the public key directory.
|
|
3
|
+
*
|
|
4
|
+
* Routes:
|
|
5
|
+
* GET /search — Search the public key directory
|
|
6
|
+
* GET /profile/:memberId — Get a member's public profile
|
|
7
|
+
* PUT /profile — Create or update a public profile
|
|
8
|
+
* POST /profile/:memberId/privacy — Toggle privacy mode
|
|
9
|
+
*
|
|
10
|
+
* Requirements: 5.1-5.10
|
|
11
|
+
*/
|
|
12
|
+
import type { IGetProfileResponse, ISearchDirectoryResponse, ITogglePrivacyResponse, IUpdateProfileResponse } from '@brightchain/brightchain-lib/lib/interfaces/responses/directoryResponses';
|
|
13
|
+
import { PublicKeyDirectoryService } from '@brightchain/brightchain-lib/lib/services/identity';
|
|
14
|
+
import { PlatformID } from '@digitaldefiance/ecies-lib';
|
|
15
|
+
import { CoreLanguageCode } from '@digitaldefiance/i18n-lib';
|
|
16
|
+
import { ApiErrorResponse, ApiRequestHandler, TypedHandlers } from '@digitaldefiance/node-express-suite';
|
|
17
|
+
import { IBrightChainApplication } from '../../interfaces/application';
|
|
18
|
+
import { DefaultBackendIdType } from '../../shared-types';
|
|
19
|
+
import { BaseController } from '../base';
|
|
20
|
+
type DirectoryApiResponse = ISearchDirectoryResponse | IGetProfileResponse | IUpdateProfileResponse | ITogglePrivacyResponse | ApiErrorResponse;
|
|
21
|
+
interface DirectoryHandlers extends TypedHandlers {
|
|
22
|
+
searchDirectory: ApiRequestHandler<ISearchDirectoryResponse | ApiErrorResponse>;
|
|
23
|
+
getProfile: ApiRequestHandler<IGetProfileResponse | ApiErrorResponse>;
|
|
24
|
+
updateProfile: ApiRequestHandler<IUpdateProfileResponse | ApiErrorResponse>;
|
|
25
|
+
togglePrivacy: ApiRequestHandler<ITogglePrivacyResponse | ApiErrorResponse>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Controller for the public key directory.
|
|
29
|
+
*
|
|
30
|
+
* Delegates to {@link PublicKeyDirectoryService} in brightchain-lib for
|
|
31
|
+
* search, profile management, and privacy mode toggling.
|
|
32
|
+
*
|
|
33
|
+
* @requirements 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 5.10
|
|
34
|
+
*/
|
|
35
|
+
export declare class DirectoryController<TID extends PlatformID = DefaultBackendIdType> extends BaseController<TID, DirectoryApiResponse, DirectoryHandlers, CoreLanguageCode> {
|
|
36
|
+
private directoryService;
|
|
37
|
+
constructor(application: IBrightChainApplication<TID>);
|
|
38
|
+
/**
|
|
39
|
+
* Inject the directory service instance.
|
|
40
|
+
* Must be called during application initialisation before handling requests.
|
|
41
|
+
*/
|
|
42
|
+
setDirectoryService(service: PublicKeyDirectoryService): void;
|
|
43
|
+
private getDirectoryService;
|
|
44
|
+
protected initRouteDefinitions(): void;
|
|
45
|
+
/**
|
|
46
|
+
* GET /search — Search the public key directory.
|
|
47
|
+
*
|
|
48
|
+
* Query params: q (required), limit, offset, platformFilter
|
|
49
|
+
*
|
|
50
|
+
* @requirements 5.2, 5.3, 5.5, 5.9, 5.10
|
|
51
|
+
*/
|
|
52
|
+
private handleSearch;
|
|
53
|
+
/**
|
|
54
|
+
* GET /profile/:memberId — Get a member's public profile.
|
|
55
|
+
*
|
|
56
|
+
* Returns the profile regardless of privacy mode (direct lookup).
|
|
57
|
+
*
|
|
58
|
+
* @requirements 5.1, 5.9
|
|
59
|
+
*/
|
|
60
|
+
private handleGetProfile;
|
|
61
|
+
/**
|
|
62
|
+
* PUT /profile — Create or update a public profile.
|
|
63
|
+
*
|
|
64
|
+
* @requirements 5.1, 5.7, 5.8
|
|
65
|
+
*/
|
|
66
|
+
private handleUpdateProfile;
|
|
67
|
+
/**
|
|
68
|
+
* POST /profile/:memberId/privacy — Toggle privacy mode.
|
|
69
|
+
*
|
|
70
|
+
* @requirements 5.6, 5.9
|
|
71
|
+
*/
|
|
72
|
+
private handleTogglePrivacy;
|
|
73
|
+
}
|
|
74
|
+
export {};
|
|
75
|
+
//# sourceMappingURL=directoryController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directoryController.d.ts","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/controllers/identity/directoryController.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EACV,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACvB,MAAM,0EAA0E,CAAC;AAClF,OAAO,EAGL,yBAAyB,EAC1B,MAAM,oDAAoD,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,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,oBAAoB,GACrB,wBAAwB,GACxB,mBAAmB,GACnB,sBAAsB,GACtB,sBAAsB,GACtB,gBAAgB,CAAC;AAIrB,UAAU,iBAAkB,SAAQ,aAAa;IAC/C,eAAe,EAAE,iBAAiB,CAChC,wBAAwB,GAAG,gBAAgB,CAC5C,CAAC;IACF,UAAU,EAAE,iBAAiB,CAAC,mBAAmB,GAAG,gBAAgB,CAAC,CAAC;IACtE,aAAa,EAAE,iBAAiB,CAAC,sBAAsB,GAAG,gBAAgB,CAAC,CAAC;IAC5E,aAAa,EAAE,iBAAiB,CAAC,sBAAsB,GAAG,gBAAgB,CAAC,CAAC;CAC7E;AAuBD;;;;;;;GAOG;AACH,qBAAa,mBAAmB,CAC9B,GAAG,SAAS,UAAU,GAAG,oBAAoB,CAC7C,SAAQ,cAAc,CACtB,GAAG,EACH,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,CACjB;IACC,OAAO,CAAC,gBAAgB,CAA0C;gBAEtD,WAAW,EAAE,uBAAuB,CAAC,GAAG,CAAC;IAIrD;;;OAGG;IACI,mBAAmB,CAAC,OAAO,EAAE,yBAAyB,GAAG,IAAI;IAIpE,OAAO,CAAC,mBAAmB;IAS3B,SAAS,CAAC,oBAAoB,IAAI,IAAI;IAmGtC;;;;;;OAMG;YACW,YAAY;IA+C1B;;;;;;OAMG;YACW,gBAAgB;IA8B9B;;;;OAIG;YACW,mBAAmB;IA0CjC;;;;OAIG;YACW,mBAAmB;CA+BlC"}
|