@brightchain/brightchain-api-lib 0.14.0 → 0.16.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/browser.d.ts +13 -0
- package/src/browser.d.ts.map +1 -0
- package/src/browser.js +16 -0
- package/src/browser.js.map +1 -0
- package/src/index.d.ts +4 -1
- package/src/index.d.ts.map +1 -1
- package/src/index.js +6 -1
- package/src/index.js.map +1 -1
- package/src/lib/application-base.d.ts +8 -37
- package/src/lib/application-base.d.ts.map +1 -1
- package/src/lib/application-base.js +8 -80
- package/src/lib/application-base.js.map +1 -1
- package/src/lib/application.d.ts +37 -7
- package/src/lib/application.d.ts.map +1 -1
- package/src/lib/application.js +130 -118
- 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/constants.js +2 -2
- package/src/lib/constants.js.map +1 -1
- package/src/lib/controllers/api/blocks.d.ts.map +1 -1
- package/src/lib/controllers/api/blocks.js +290 -290
- package/src/lib/controllers/api/blocks.js.map +1 -1
- 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/energy.d.ts.map +1 -1
- package/src/lib/controllers/api/energy.js +93 -93
- package/src/lib/controllers/api/energy.js.map +1 -1
- 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/i18n.d.ts.map +1 -1
- package/src/lib/controllers/api/i18n.js +8 -8
- package/src/lib/controllers/api/i18n.js.map +1 -1
- 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/quorum.d.ts.map +1 -1
- package/src/lib/controllers/api/quorum.js +483 -483
- package/src/lib/controllers/api/quorum.js.map +1 -1
- package/src/lib/controllers/api/sessions.d.ts.map +1 -1
- package/src/lib/controllers/api/sessions.js +8 -8
- package/src/lib/controllers/api/sessions.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/api/user.d.ts.map +1 -1
- package/src/lib/controllers/api/user.js +180 -180
- package/src/lib/controllers/api/user.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/application.d.ts +7 -1
- package/src/lib/interfaces/application.d.ts.map +1 -1
- package/src/lib/interfaces/brightchain-init-result.d.ts +17 -0
- package/src/lib/interfaces/brightchain-init-result.d.ts.map +1 -0
- package/src/lib/interfaces/brightchain-init-result.js +9 -0
- package/src/lib/interfaces/brightchain-init-result.js.map +1 -0
- 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 +1 -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/routers/app.d.ts +22 -14
- package/src/lib/routers/app.d.ts.map +1 -1
- package/src/lib/routers/app.js +28 -116
- package/src/lib/routers/app.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/brightpass.property.helpers.d.ts +23 -0
- package/src/lib/services/brightpass.property.helpers.d.ts.map +1 -0
- package/src/lib/services/brightpass.property.helpers.js +113 -0
- package/src/lib/services/brightpass.property.helpers.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/upstream-stubs.d.ts +36 -0
- package/src/lib/upstream-stubs.d.ts.map +1 -0
- package/src/lib/upstream-stubs.js +43 -0
- package/src/lib/upstream-stubs.js.map +1 -0
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application.js","sourceRoot":"","sources":["../../../../brightchain-api-lib/src/lib/application.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"application.js","sourceRoot":"","sources":["../../../../brightchain-api-lib/src/lib/application.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACL-enforced wrappers for availability services (gossip, reconciliation, discovery).
|
|
3
|
+
*
|
|
4
|
+
* These lightweight wrappers use the same ACLProvider interface and PermissionDeniedError
|
|
5
|
+
* from the ACLEnforcedBlockStore, applying permission checks to gossip announcements,
|
|
6
|
+
* reconciliation exchanges, and discovery queries.
|
|
7
|
+
*
|
|
8
|
+
* @see Requirements 11.5, 11.6, 11.7
|
|
9
|
+
*/
|
|
10
|
+
import { ACLProvider } from './aclEnforcedBlockStore';
|
|
11
|
+
/**
|
|
12
|
+
* Filters incoming gossip announcements by checking the announcing node's
|
|
13
|
+
* Write or Replicate permission in the target pool's ACL.
|
|
14
|
+
*
|
|
15
|
+
* @see Requirement 11.5
|
|
16
|
+
*/
|
|
17
|
+
export declare class ACLEnforcedGossipFilter {
|
|
18
|
+
private readonly aclProvider;
|
|
19
|
+
constructor(aclProvider: ACLProvider);
|
|
20
|
+
/**
|
|
21
|
+
* Check whether a gossip announcement from the given node should be accepted
|
|
22
|
+
* for the given pool. The announcing node must have Write or Replicate permission.
|
|
23
|
+
*/
|
|
24
|
+
shouldAcceptAnnouncement(poolId: string, announcingNodeId: string): Promise<boolean>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Wraps reconciliation to verify both the current node and the peer node
|
|
28
|
+
* have Replicate permission in the target pool's ACL.
|
|
29
|
+
*
|
|
30
|
+
* @see Requirement 11.6
|
|
31
|
+
*/
|
|
32
|
+
export declare class ACLEnforcedReconciliation {
|
|
33
|
+
private readonly aclProvider;
|
|
34
|
+
private readonly currentNodeId;
|
|
35
|
+
constructor(aclProvider: ACLProvider, currentNodeId: string);
|
|
36
|
+
/**
|
|
37
|
+
* Verify that both the current node and the peer have Replicate permission
|
|
38
|
+
* for the given pool. Throws PermissionDeniedError if either lacks permission.
|
|
39
|
+
*/
|
|
40
|
+
verifyReconciliationPermission(poolId: string, peerNodeId: string): Promise<void>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Wraps discovery to verify the querying node has Read permission
|
|
44
|
+
* in the target pool's ACL.
|
|
45
|
+
*
|
|
46
|
+
* @see Requirement 11.7
|
|
47
|
+
*/
|
|
48
|
+
export declare class ACLEnforcedDiscovery {
|
|
49
|
+
private readonly aclProvider;
|
|
50
|
+
constructor(aclProvider: ACLProvider);
|
|
51
|
+
/**
|
|
52
|
+
* Verify that the querying node has Read permission for the given pool.
|
|
53
|
+
* Throws PermissionDeniedError if the node lacks permission.
|
|
54
|
+
*/
|
|
55
|
+
verifyDiscoveryPermission(poolId: string, queryingNodeId: string): Promise<void>;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=aclEnforcedAvailability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aclEnforcedAvailability.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/auth/aclEnforcedAvailability.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,WAAW,EAAyB,MAAM,yBAAyB,CAAC;AAE7E;;;;;GAKG;AACH,qBAAa,uBAAuB;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAErD;;;OAGG;IACG,wBAAwB,CAC5B,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,OAAO,CAAC;CAOpB;AAED;;;;;GAKG;AACH,qBAAa,yBAAyB;IAElC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,aAAa;gBADb,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,MAAM;IAGxC;;;OAGG;IACG,8BAA8B,CAClC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;CAuBjB;AAED;;;;;GAKG;AACH,qBAAa,oBAAoB;IACnB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAErD;;;OAGG;IACG,yBAAyB,CAC7B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC;CAYjB"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ACL-enforced wrappers for availability services (gossip, reconciliation, discovery).
|
|
4
|
+
*
|
|
5
|
+
* These lightweight wrappers use the same ACLProvider interface and PermissionDeniedError
|
|
6
|
+
* from the ACLEnforcedBlockStore, applying permission checks to gossip announcements,
|
|
7
|
+
* reconciliation exchanges, and discovery queries.
|
|
8
|
+
*
|
|
9
|
+
* @see Requirements 11.5, 11.6, 11.7
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ACLEnforcedDiscovery = exports.ACLEnforcedReconciliation = exports.ACLEnforcedGossipFilter = void 0;
|
|
13
|
+
const brightchain_lib_1 = require("@brightchain/brightchain-lib");
|
|
14
|
+
const aclEnforcedBlockStore_1 = require("./aclEnforcedBlockStore");
|
|
15
|
+
/**
|
|
16
|
+
* Filters incoming gossip announcements by checking the announcing node's
|
|
17
|
+
* Write or Replicate permission in the target pool's ACL.
|
|
18
|
+
*
|
|
19
|
+
* @see Requirement 11.5
|
|
20
|
+
*/
|
|
21
|
+
class ACLEnforcedGossipFilter {
|
|
22
|
+
constructor(aclProvider) {
|
|
23
|
+
this.aclProvider = aclProvider;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Check whether a gossip announcement from the given node should be accepted
|
|
27
|
+
* for the given pool. The announcing node must have Write or Replicate permission.
|
|
28
|
+
*/
|
|
29
|
+
async shouldAcceptAnnouncement(poolId, announcingNodeId) {
|
|
30
|
+
const acl = await this.aclProvider.getACL(poolId);
|
|
31
|
+
return ((0, brightchain_lib_1.hasPermission)(acl, announcingNodeId, brightchain_lib_1.PoolPermission.Write) ||
|
|
32
|
+
(0, brightchain_lib_1.hasPermission)(acl, announcingNodeId, brightchain_lib_1.PoolPermission.Replicate));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.ACLEnforcedGossipFilter = ACLEnforcedGossipFilter;
|
|
36
|
+
/**
|
|
37
|
+
* Wraps reconciliation to verify both the current node and the peer node
|
|
38
|
+
* have Replicate permission in the target pool's ACL.
|
|
39
|
+
*
|
|
40
|
+
* @see Requirement 11.6
|
|
41
|
+
*/
|
|
42
|
+
class ACLEnforcedReconciliation {
|
|
43
|
+
constructor(aclProvider, currentNodeId) {
|
|
44
|
+
this.aclProvider = aclProvider;
|
|
45
|
+
this.currentNodeId = currentNodeId;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Verify that both the current node and the peer have Replicate permission
|
|
49
|
+
* for the given pool. Throws PermissionDeniedError if either lacks permission.
|
|
50
|
+
*/
|
|
51
|
+
async verifyReconciliationPermission(poolId, peerNodeId) {
|
|
52
|
+
const acl = await this.aclProvider.getACL(poolId);
|
|
53
|
+
if (!(0, brightchain_lib_1.hasPermission)(acl, this.currentNodeId, brightchain_lib_1.PoolPermission.Replicate)) {
|
|
54
|
+
const member = acl.members.find((m) => m.nodeId === this.currentNodeId);
|
|
55
|
+
throw new aclEnforcedBlockStore_1.PermissionDeniedError(poolId, this.currentNodeId, brightchain_lib_1.PoolPermission.Replicate, member ? member.permissions : []);
|
|
56
|
+
}
|
|
57
|
+
if (!(0, brightchain_lib_1.hasPermission)(acl, peerNodeId, brightchain_lib_1.PoolPermission.Replicate)) {
|
|
58
|
+
const member = acl.members.find((m) => m.nodeId === peerNodeId);
|
|
59
|
+
throw new aclEnforcedBlockStore_1.PermissionDeniedError(poolId, peerNodeId, brightchain_lib_1.PoolPermission.Replicate, member ? member.permissions : []);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.ACLEnforcedReconciliation = ACLEnforcedReconciliation;
|
|
64
|
+
/**
|
|
65
|
+
* Wraps discovery to verify the querying node has Read permission
|
|
66
|
+
* in the target pool's ACL.
|
|
67
|
+
*
|
|
68
|
+
* @see Requirement 11.7
|
|
69
|
+
*/
|
|
70
|
+
class ACLEnforcedDiscovery {
|
|
71
|
+
constructor(aclProvider) {
|
|
72
|
+
this.aclProvider = aclProvider;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Verify that the querying node has Read permission for the given pool.
|
|
76
|
+
* Throws PermissionDeniedError if the node lacks permission.
|
|
77
|
+
*/
|
|
78
|
+
async verifyDiscoveryPermission(poolId, queryingNodeId) {
|
|
79
|
+
const acl = await this.aclProvider.getACL(poolId);
|
|
80
|
+
if (!(0, brightchain_lib_1.hasPermission)(acl, queryingNodeId, brightchain_lib_1.PoolPermission.Read)) {
|
|
81
|
+
const member = acl.members.find((m) => m.nodeId === queryingNodeId);
|
|
82
|
+
throw new aclEnforcedBlockStore_1.PermissionDeniedError(poolId, queryingNodeId, brightchain_lib_1.PoolPermission.Read, member ? member.permissions : []);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.ACLEnforcedDiscovery = ACLEnforcedDiscovery;
|
|
87
|
+
//# sourceMappingURL=aclEnforcedAvailability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aclEnforcedAvailability.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/auth/aclEnforcedAvailability.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACL-enforced block store wrapper.
|
|
3
|
+
*
|
|
4
|
+
* Wraps an IPooledBlockStore and checks ACL permissions before delegating
|
|
5
|
+
* pool-scoped operations (get, put, delete). This is a lightweight middleware
|
|
6
|
+
* pattern — it only wraps the key operations that need ACL checks.
|
|
7
|
+
*
|
|
8
|
+
* @see Requirements 11.4, 10.3, 10.4
|
|
9
|
+
*/
|
|
10
|
+
import type { BlockStoreOptions, IPoolACL, IPooledBlockStore, PoolId } from '@brightchain/brightchain-lib';
|
|
11
|
+
import { PoolPermission } from '@brightchain/brightchain-lib';
|
|
12
|
+
/**
|
|
13
|
+
* Error thrown when a node lacks the required permission for a pool operation.
|
|
14
|
+
* Includes the required permission, actual permissions, pool ID, and node ID
|
|
15
|
+
* for diagnostic purposes.
|
|
16
|
+
*
|
|
17
|
+
* @see Requirement 10.6
|
|
18
|
+
*/
|
|
19
|
+
export declare class PermissionDeniedError extends Error {
|
|
20
|
+
readonly poolId: string;
|
|
21
|
+
readonly nodeId: string;
|
|
22
|
+
readonly requiredPermission: PoolPermission;
|
|
23
|
+
readonly actualPermissions: PoolPermission[];
|
|
24
|
+
constructor(poolId: string, nodeId: string, requiredPermission: PoolPermission, actualPermissions: PoolPermission[]);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Provider interface for retrieving the ACL for a given pool.
|
|
28
|
+
* Implementations may load ACLs from the block store, cache, or any other source.
|
|
29
|
+
*/
|
|
30
|
+
export interface ACLProvider {
|
|
31
|
+
getACL(poolId: string): Promise<IPoolACL<string>>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Lightweight wrapper around an IPooledBlockStore that enforces ACL permissions
|
|
35
|
+
* before delegating pool-scoped operations.
|
|
36
|
+
*
|
|
37
|
+
* - getFromPool: requires Read permission
|
|
38
|
+
* - putInPool: requires Write permission
|
|
39
|
+
* - deleteFromPool: requires Write permission
|
|
40
|
+
*
|
|
41
|
+
* @see Requirements 11.4, 10.3, 10.4
|
|
42
|
+
*/
|
|
43
|
+
export declare class ACLEnforcedBlockStore {
|
|
44
|
+
private readonly inner;
|
|
45
|
+
private readonly aclProvider;
|
|
46
|
+
private readonly currentNodeId;
|
|
47
|
+
constructor(inner: IPooledBlockStore, aclProvider: ACLProvider, currentNodeId: string);
|
|
48
|
+
/**
|
|
49
|
+
* Retrieve a block from a pool after verifying Read permission.
|
|
50
|
+
*/
|
|
51
|
+
getFromPool(pool: PoolId, hash: string): Promise<Uint8Array>;
|
|
52
|
+
/**
|
|
53
|
+
* Store a block in a pool after verifying Write permission.
|
|
54
|
+
*/
|
|
55
|
+
putInPool(pool: PoolId, data: Uint8Array, options?: BlockStoreOptions): Promise<string>;
|
|
56
|
+
/**
|
|
57
|
+
* Delete a block from a pool after verifying Write permission.
|
|
58
|
+
*/
|
|
59
|
+
deleteFromPool(pool: PoolId, hash: string): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Check that the current node has the required permission for the given pool.
|
|
62
|
+
* Throws PermissionDeniedError if the permission check fails.
|
|
63
|
+
*/
|
|
64
|
+
private checkPermission;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=aclEnforcedBlockStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aclEnforcedBlockStore.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/auth/aclEnforcedBlockStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,QAAQ,EACR,iBAAiB,EACjB,MAAM,EACP,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAiB,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE7E;;;;;;GAMG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;aAE5B,MAAM,EAAE,MAAM;aACd,MAAM,EAAE,MAAM;aACd,kBAAkB,EAAE,cAAc;aAClC,iBAAiB,EAAE,cAAc,EAAE;gBAHnC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,cAAc,EAClC,iBAAiB,EAAE,cAAc,EAAE;CAOtD;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;CACnD;AAED;;;;;;;;;GASG;AACH,qBAAa,qBAAqB;IAE9B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAFb,KAAK,EAAE,iBAAiB,EACxB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,MAAM;IAGxC;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAKlE;;OAEG;IACG,SAAS,CACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,UAAU,EAChB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,MAAM,CAAC;IAKlB;;OAEG;IACG,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/D;;;OAGG;YACW,eAAe;CAgB9B"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ACL-enforced block store wrapper.
|
|
4
|
+
*
|
|
5
|
+
* Wraps an IPooledBlockStore and checks ACL permissions before delegating
|
|
6
|
+
* pool-scoped operations (get, put, delete). This is a lightweight middleware
|
|
7
|
+
* pattern — it only wraps the key operations that need ACL checks.
|
|
8
|
+
*
|
|
9
|
+
* @see Requirements 11.4, 10.3, 10.4
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ACLEnforcedBlockStore = exports.PermissionDeniedError = void 0;
|
|
13
|
+
const brightchain_lib_1 = require("@brightchain/brightchain-lib");
|
|
14
|
+
/**
|
|
15
|
+
* Error thrown when a node lacks the required permission for a pool operation.
|
|
16
|
+
* Includes the required permission, actual permissions, pool ID, and node ID
|
|
17
|
+
* for diagnostic purposes.
|
|
18
|
+
*
|
|
19
|
+
* @see Requirement 10.6
|
|
20
|
+
*/
|
|
21
|
+
class PermissionDeniedError extends Error {
|
|
22
|
+
constructor(poolId, nodeId, requiredPermission, actualPermissions) {
|
|
23
|
+
super(`Permission denied: ${requiredPermission} required for pool ${poolId}, node ${nodeId} has [${actualPermissions.join(', ')}]`);
|
|
24
|
+
this.poolId = poolId;
|
|
25
|
+
this.nodeId = nodeId;
|
|
26
|
+
this.requiredPermission = requiredPermission;
|
|
27
|
+
this.actualPermissions = actualPermissions;
|
|
28
|
+
this.name = 'PermissionDeniedError';
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.PermissionDeniedError = PermissionDeniedError;
|
|
32
|
+
/**
|
|
33
|
+
* Lightweight wrapper around an IPooledBlockStore that enforces ACL permissions
|
|
34
|
+
* before delegating pool-scoped operations.
|
|
35
|
+
*
|
|
36
|
+
* - getFromPool: requires Read permission
|
|
37
|
+
* - putInPool: requires Write permission
|
|
38
|
+
* - deleteFromPool: requires Write permission
|
|
39
|
+
*
|
|
40
|
+
* @see Requirements 11.4, 10.3, 10.4
|
|
41
|
+
*/
|
|
42
|
+
class ACLEnforcedBlockStore {
|
|
43
|
+
constructor(inner, aclProvider, currentNodeId) {
|
|
44
|
+
this.inner = inner;
|
|
45
|
+
this.aclProvider = aclProvider;
|
|
46
|
+
this.currentNodeId = currentNodeId;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Retrieve a block from a pool after verifying Read permission.
|
|
50
|
+
*/
|
|
51
|
+
async getFromPool(pool, hash) {
|
|
52
|
+
await this.checkPermission(pool, brightchain_lib_1.PoolPermission.Read);
|
|
53
|
+
return this.inner.getFromPool(pool, hash);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Store a block in a pool after verifying Write permission.
|
|
57
|
+
*/
|
|
58
|
+
async putInPool(pool, data, options) {
|
|
59
|
+
await this.checkPermission(pool, brightchain_lib_1.PoolPermission.Write);
|
|
60
|
+
return this.inner.putInPool(pool, data, options);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Delete a block from a pool after verifying Write permission.
|
|
64
|
+
*/
|
|
65
|
+
async deleteFromPool(pool, hash) {
|
|
66
|
+
await this.checkPermission(pool, brightchain_lib_1.PoolPermission.Write);
|
|
67
|
+
return this.inner.deleteFromPool(pool, hash);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Check that the current node has the required permission for the given pool.
|
|
71
|
+
* Throws PermissionDeniedError if the permission check fails.
|
|
72
|
+
*/
|
|
73
|
+
async checkPermission(poolId, required) {
|
|
74
|
+
const acl = await this.aclProvider.getACL(poolId);
|
|
75
|
+
if (!(0, brightchain_lib_1.hasPermission)(acl, this.currentNodeId, required)) {
|
|
76
|
+
const member = acl.members.find((m) => m.nodeId === this.currentNodeId);
|
|
77
|
+
const actual = member ? member.permissions : [];
|
|
78
|
+
throw new PermissionDeniedError(poolId, this.currentNodeId, required, actual);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.ACLEnforcedBlockStore = ACLEnforcedBlockStore;
|
|
83
|
+
//# sourceMappingURL=aclEnforcedBlockStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aclEnforcedBlockStore.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/auth/aclEnforcedBlockStore.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAQH,kEAA6E;AAE7E;;;;;;GAMG;AACH,MAAa,qBAAsB,SAAQ,KAAK;IAC9C,YACkB,MAAc,EACd,MAAc,EACd,kBAAkC,EAClC,iBAAmC;QAEnD,KAAK,CACH,sBAAsB,kBAAkB,sBAAsB,MAAM,UAAU,MAAM,SAAS,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC7H,CAAC;QAPc,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAQ;QACd,uBAAkB,GAAlB,kBAAkB,CAAgB;QAClC,sBAAiB,GAAjB,iBAAiB,CAAkB;QAKnD,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAZD,sDAYC;AAUD;;;;;;;;;GASG;AACH,MAAa,qBAAqB;IAChC,YACmB,KAAwB,EACxB,WAAwB,EACxB,aAAqB;QAFrB,UAAK,GAAL,KAAK,CAAmB;QACxB,gBAAW,GAAX,WAAW,CAAa;QACxB,kBAAa,GAAb,aAAa,CAAQ;IACrC,CAAC;IAEJ;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,IAAY;QAC1C,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,gCAAc,CAAC,IAAI,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CACb,IAAY,EACZ,IAAgB,EAChB,OAA2B;QAE3B,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,gCAAc,CAAC,KAAK,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,IAAY,EAAE,IAAY;QAC7C,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,gCAAc,CAAC,KAAK,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,eAAe,CAC3B,MAAc,EACd,QAAwB;QAExB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,IAAA,+BAAa,EAAC,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE,CAAC;YACtD,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,CAAC,CAAC;YACxE,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,qBAAqB,CAC7B,MAAM,EACN,IAAI,CAAC,aAAa,EAClB,QAAQ,EACR,MAAM,CACP,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAvDD,sDAuDC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ECDSA Node Authenticator - Node.js implementation of INodeAuthenticator.
|
|
3
|
+
*
|
|
4
|
+
* Uses Node.js `crypto` module for all cryptographic operations:
|
|
5
|
+
* - Challenge: 32 random bytes via crypto.randomBytes
|
|
6
|
+
* - Sign/verify: ECDSA with secp256k1 curve (via JWK key import)
|
|
7
|
+
* - Node ID derivation: SHA-256 hash of public key (hex string)
|
|
8
|
+
*
|
|
9
|
+
* @see Requirements 9.1, 9.2, 9.3, 9.5
|
|
10
|
+
*/
|
|
11
|
+
import type { INodeAuthenticator } from '@brightchain/brightchain-lib';
|
|
12
|
+
/**
|
|
13
|
+
* Optional logger for authentication failures.
|
|
14
|
+
* Requirement 9.3: Failed authentication attempts SHALL be logged
|
|
15
|
+
* with the requesting node ID and operation type.
|
|
16
|
+
*/
|
|
17
|
+
export interface AuthFailureLogger {
|
|
18
|
+
logAuthFailure(nodeId: string, operationType: string): void;
|
|
19
|
+
}
|
|
20
|
+
export declare class ECDSANodeAuthenticator implements INodeAuthenticator {
|
|
21
|
+
private readonly logger?;
|
|
22
|
+
constructor(logger?: AuthFailureLogger);
|
|
23
|
+
/** Generate a 32-byte random challenge nonce. */
|
|
24
|
+
createChallenge(): Uint8Array;
|
|
25
|
+
/**
|
|
26
|
+
* Sign a challenge with the node's ECDSA private key (secp256k1).
|
|
27
|
+
* The private key must be a raw 32-byte secp256k1 private key.
|
|
28
|
+
* Returns a DER-encoded ECDSA signature.
|
|
29
|
+
*/
|
|
30
|
+
signChallenge(challenge: Uint8Array, privateKey: Uint8Array): Promise<Uint8Array>;
|
|
31
|
+
/**
|
|
32
|
+
* Verify an ECDSA signature against a public key (secp256k1).
|
|
33
|
+
* Accepts uncompressed (65 bytes) or compressed (33 bytes) keys.
|
|
34
|
+
* Logs authentication failures when a logger is provided (Requirement 9.3).
|
|
35
|
+
*/
|
|
36
|
+
verifySignature(challenge: Uint8Array, signature: Uint8Array, publicKey: Uint8Array): Promise<boolean>;
|
|
37
|
+
/** Derive a node ID from a public key via SHA-256 hash (hex). */
|
|
38
|
+
deriveNodeId(publicKey: Uint8Array): string;
|
|
39
|
+
/** Convert compressed (33-byte) public key to uncompressed (65-byte). */
|
|
40
|
+
private ensureUncompressed;
|
|
41
|
+
/** Build a JWK for a secp256k1 private key. */
|
|
42
|
+
private buildPrivateJWK;
|
|
43
|
+
/** Build a JWK for a secp256k1 public key (uncompressed 65-byte input). */
|
|
44
|
+
private buildPublicJWK;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=ecdsaNodeAuthenticator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ecdsaNodeAuthenticator.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/auth/ecdsaNodeAuthenticator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAGvE;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7D;AAED,qBAAa,sBAAuB,YAAW,kBAAkB;IAC/D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAoB;gBAEhC,MAAM,CAAC,EAAE,iBAAiB;IAItC,iDAAiD;IACjD,eAAe,IAAI,UAAU;IAI7B;;;;OAIG;IACG,aAAa,CACjB,SAAS,EAAE,UAAU,EACrB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,UAAU,CAAC;IActB;;;;OAIG;IACG,eAAe,CACnB,SAAS,EAAE,UAAU,EACrB,SAAS,EAAE,UAAU,EACrB,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,OAAO,CAAC;IA2BnB,iEAAiE;IACjE,YAAY,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM;IAO3C,yEAAyE;IACzE,OAAO,CAAC,kBAAkB;IAqB1B,+CAA+C;IAC/C,OAAO,CAAC,eAAe;IAevB,2EAA2E;IAC3E,OAAO,CAAC,cAAc;CAUvB"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ECDSA Node Authenticator - Node.js implementation of INodeAuthenticator.
|
|
4
|
+
*
|
|
5
|
+
* Uses Node.js `crypto` module for all cryptographic operations:
|
|
6
|
+
* - Challenge: 32 random bytes via crypto.randomBytes
|
|
7
|
+
* - Sign/verify: ECDSA with secp256k1 curve (via JWK key import)
|
|
8
|
+
* - Node ID derivation: SHA-256 hash of public key (hex string)
|
|
9
|
+
*
|
|
10
|
+
* @see Requirements 9.1, 9.2, 9.3, 9.5
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.ECDSANodeAuthenticator = void 0;
|
|
14
|
+
const tslib_1 = require("tslib");
|
|
15
|
+
const crypto = tslib_1.__importStar(require("crypto"));
|
|
16
|
+
class ECDSANodeAuthenticator {
|
|
17
|
+
constructor(logger) {
|
|
18
|
+
this.logger = logger;
|
|
19
|
+
}
|
|
20
|
+
/** Generate a 32-byte random challenge nonce. */
|
|
21
|
+
createChallenge() {
|
|
22
|
+
return new Uint8Array(crypto.randomBytes(32));
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Sign a challenge with the node's ECDSA private key (secp256k1).
|
|
26
|
+
* The private key must be a raw 32-byte secp256k1 private key.
|
|
27
|
+
* Returns a DER-encoded ECDSA signature.
|
|
28
|
+
*/
|
|
29
|
+
async signChallenge(challenge, privateKey) {
|
|
30
|
+
const ecdh = crypto.createECDH('secp256k1');
|
|
31
|
+
ecdh.setPrivateKey(Buffer.from(privateKey));
|
|
32
|
+
const uncompressedPub = ecdh.getPublicKey();
|
|
33
|
+
const keyObject = crypto.createPrivateKey({
|
|
34
|
+
key: this.buildPrivateJWK(privateKey, uncompressedPub),
|
|
35
|
+
format: 'jwk',
|
|
36
|
+
});
|
|
37
|
+
const signature = crypto.sign(null, Buffer.from(challenge), keyObject);
|
|
38
|
+
return new Uint8Array(signature);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Verify an ECDSA signature against a public key (secp256k1).
|
|
42
|
+
* Accepts uncompressed (65 bytes) or compressed (33 bytes) keys.
|
|
43
|
+
* Logs authentication failures when a logger is provided (Requirement 9.3).
|
|
44
|
+
*/
|
|
45
|
+
async verifySignature(challenge, signature, publicKey) {
|
|
46
|
+
try {
|
|
47
|
+
const uncompressed = this.ensureUncompressed(publicKey);
|
|
48
|
+
const keyObject = crypto.createPublicKey({
|
|
49
|
+
key: this.buildPublicJWK(uncompressed),
|
|
50
|
+
format: 'jwk',
|
|
51
|
+
});
|
|
52
|
+
const result = crypto.verify(null, Buffer.from(challenge), keyObject, Buffer.from(signature));
|
|
53
|
+
if (!result && this.logger) {
|
|
54
|
+
const nodeId = this.deriveNodeId(publicKey);
|
|
55
|
+
this.logger.logAuthFailure(nodeId, 'signature_verification');
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
if (this.logger) {
|
|
61
|
+
const nodeId = this.deriveNodeId(publicKey);
|
|
62
|
+
this.logger.logAuthFailure(nodeId, 'signature_verification');
|
|
63
|
+
}
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/** Derive a node ID from a public key via SHA-256 hash (hex). */
|
|
68
|
+
deriveNodeId(publicKey) {
|
|
69
|
+
return crypto
|
|
70
|
+
.createHash('sha256')
|
|
71
|
+
.update(Buffer.from(publicKey))
|
|
72
|
+
.digest('hex');
|
|
73
|
+
}
|
|
74
|
+
/** Convert compressed (33-byte) public key to uncompressed (65-byte). */
|
|
75
|
+
ensureUncompressed(publicKey) {
|
|
76
|
+
if (publicKey.length === 65 && publicKey[0] === 0x04) {
|
|
77
|
+
return Buffer.from(publicKey);
|
|
78
|
+
}
|
|
79
|
+
if (publicKey.length === 33 &&
|
|
80
|
+
(publicKey[0] === 0x02 || publicKey[0] === 0x03)) {
|
|
81
|
+
return crypto.ECDH.convertKey(Buffer.from(publicKey), 'secp256k1', undefined, undefined, 'uncompressed');
|
|
82
|
+
}
|
|
83
|
+
throw new Error(`Invalid secp256k1 public key: expected 33 or 65 bytes, got ${publicKey.length}`);
|
|
84
|
+
}
|
|
85
|
+
/** Build a JWK for a secp256k1 private key. */
|
|
86
|
+
buildPrivateJWK(rawPrivateKey, uncompressedPublicKey) {
|
|
87
|
+
const x = uncompressedPublicKey.subarray(1, 33);
|
|
88
|
+
const y = uncompressedPublicKey.subarray(33, 65);
|
|
89
|
+
return {
|
|
90
|
+
kty: 'EC',
|
|
91
|
+
crv: 'secp256k1',
|
|
92
|
+
x: x.toString('base64url'),
|
|
93
|
+
y: y.toString('base64url'),
|
|
94
|
+
d: Buffer.from(rawPrivateKey).toString('base64url'),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/** Build a JWK for a secp256k1 public key (uncompressed 65-byte input). */
|
|
98
|
+
buildPublicJWK(uncompressedPublicKey) {
|
|
99
|
+
const x = uncompressedPublicKey.subarray(1, 33);
|
|
100
|
+
const y = uncompressedPublicKey.subarray(33, 65);
|
|
101
|
+
return {
|
|
102
|
+
kty: 'EC',
|
|
103
|
+
crv: 'secp256k1',
|
|
104
|
+
x: x.toString('base64url'),
|
|
105
|
+
y: y.toString('base64url'),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
exports.ECDSANodeAuthenticator = ECDSANodeAuthenticator;
|
|
110
|
+
//# sourceMappingURL=ecdsaNodeAuthenticator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ecdsaNodeAuthenticator.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/auth/ecdsaNodeAuthenticator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './aclEnforcedAvailability';
|
|
2
|
+
export * from './aclEnforcedBlockStore';
|
|
3
|
+
export * from './ecdsaNodeAuthenticator';
|
|
4
|
+
export * from './poolAclBootstrap';
|
|
5
|
+
export * from './poolAclStore';
|
|
6
|
+
export { InsufficientQuorumError, PoolACLUpdater, type ACLUpdateProposal, } from './poolAclUpdater';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,KAAK,iBAAiB,GACvB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PoolACLUpdater = exports.InsufficientQuorumError = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
tslib_1.__exportStar(require("./aclEnforcedAvailability"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./aclEnforcedBlockStore"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./ecdsaNodeAuthenticator"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./poolAclBootstrap"), exports);
|
|
9
|
+
tslib_1.__exportStar(require("./poolAclStore"), exports);
|
|
10
|
+
var poolAclUpdater_1 = require("./poolAclUpdater");
|
|
11
|
+
Object.defineProperty(exports, "InsufficientQuorumError", { enumerable: true, get: function () { return poolAclUpdater_1.InsufficientQuorumError; } });
|
|
12
|
+
Object.defineProperty(exports, "PoolACLUpdater", { enumerable: true, get: function () { return poolAclUpdater_1.PoolACLUpdater; } });
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/auth/index.ts"],"names":[],"mappings":";;;;AAAA,oEAA0C;AAC1C,kEAAwC;AACxC,mEAAyC;AACzC,6DAAmC;AACnC,yDAA+B;AAC/B,mDAI0B;AAHxB,yHAAA,uBAAuB,OAAA;AACvB,gHAAA,cAAc,OAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pool ACL Bootstrap - creates the initial ACL when a new pool is created.
|
|
3
|
+
*
|
|
4
|
+
* Derives the creator's public key and node ID from their private key,
|
|
5
|
+
* creates an ACL with the creator as sole Admin, signs it, and stores it
|
|
6
|
+
* via PoolACLStore.
|
|
7
|
+
*
|
|
8
|
+
* @see Requirements 12.1, 12.2, 12.3, 12.4, 12.5, 12.6
|
|
9
|
+
*/
|
|
10
|
+
import type { IPoolACL } from '@brightchain/brightchain-lib';
|
|
11
|
+
import { ECDSANodeAuthenticator } from './ecdsaNodeAuthenticator';
|
|
12
|
+
import { PoolACLStore } from './poolAclStore';
|
|
13
|
+
export interface BootstrapPoolOptions {
|
|
14
|
+
publicRead?: boolean;
|
|
15
|
+
publicWrite?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface BootstrapPoolResult {
|
|
18
|
+
aclBlockId: string;
|
|
19
|
+
acl: IPoolACL<string>;
|
|
20
|
+
}
|
|
21
|
+
export declare class PoolACLBootstrap {
|
|
22
|
+
private readonly store;
|
|
23
|
+
private readonly authenticator;
|
|
24
|
+
constructor(store: PoolACLStore, authenticator?: ECDSANodeAuthenticator);
|
|
25
|
+
/**
|
|
26
|
+
* Bootstrap a new pool by creating and signing the initial ACL.
|
|
27
|
+
*
|
|
28
|
+
* - Derives the creator's public key and node ID from the private key
|
|
29
|
+
* - Creates an ACL with the creator as sole Admin member
|
|
30
|
+
* - Sets publicRead/publicWrite from options (default false)
|
|
31
|
+
* - Signs the ACL with the creator's key via PoolACLStore.storeACL()
|
|
32
|
+
* - Returns the block ID and the created ACL
|
|
33
|
+
*/
|
|
34
|
+
bootstrapPool(poolId: string, creatorPrivateKey: Uint8Array, options?: BootstrapPoolOptions): Promise<BootstrapPoolResult>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=poolAclBootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poolAclBootstrap.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/auth/poolAclBootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAI7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CACvB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;gBAE3C,KAAK,EAAE,YAAY,EAAE,aAAa,CAAC,EAAE,sBAAsB;IAKvE;;;;;;;;OAQG;IACG,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,UAAU,EAC7B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,CAAC;CAoChC"}
|