@brightchain/brightchain-api-lib 0.2.1 → 0.6.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 +2 -2
- package/src/index.d.ts +10 -75
- package/src/index.d.ts.map +1 -1
- package/src/index.js +11 -78
- package/src/index.js.map +1 -1
- package/src/lib/__tests__/fixtures/mock-backend-brightchain-member.d.ts +1 -2
- package/src/lib/__tests__/fixtures/mock-backend-brightchain-member.d.ts.map +1 -1
- package/src/lib/__tests__/fixtures/mock-backend-brightchain-member.js +1 -1
- package/src/lib/__tests__/fixtures/mock-backend-brightchain-member.js.map +1 -1
- package/src/lib/application-base.d.ts +7 -6
- package/src/lib/application-base.d.ts.map +1 -1
- package/src/lib/application-base.js.map +1 -1
- package/src/lib/application.d.ts +7 -2
- package/src/lib/application.d.ts.map +1 -1
- package/src/lib/application.js +30 -0
- package/src/lib/application.js.map +1 -1
- package/src/lib/controllers/api/blocks.d.ts +246 -0
- package/src/lib/controllers/api/blocks.d.ts.map +1 -0
- package/src/lib/controllers/api/blocks.js +414 -0
- package/src/lib/controllers/api/blocks.js.map +1 -0
- package/src/lib/controllers/api/cbl.d.ts +88 -0
- package/src/lib/controllers/api/cbl.d.ts.map +1 -0
- package/src/lib/controllers/api/cbl.js +222 -0
- package/src/lib/controllers/api/cbl.js.map +1 -0
- package/src/lib/controllers/api/energy.d.ts +18 -0
- package/src/lib/controllers/api/energy.d.ts.map +1 -0
- package/src/lib/controllers/api/energy.js +96 -0
- package/src/lib/controllers/api/energy.js.map +1 -0
- package/src/lib/controllers/api/i18n.d.ts +19 -0
- package/src/lib/controllers/api/i18n.d.ts.map +1 -0
- package/src/lib/controllers/api/i18n.js +27 -0
- package/src/lib/controllers/api/i18n.js.map +1 -0
- package/src/lib/controllers/api/index.d.ts +9 -0
- package/src/lib/controllers/api/index.d.ts.map +1 -0
- package/src/lib/controllers/api/index.js +12 -0
- package/src/lib/controllers/api/index.js.map +1 -0
- package/src/lib/controllers/api/members.d.ts +19 -0
- package/src/lib/controllers/api/members.d.ts.map +1 -0
- package/src/lib/controllers/api/members.js +27 -0
- package/src/lib/controllers/api/members.js.map +1 -0
- package/src/lib/controllers/api/quorum.d.ts +369 -0
- package/src/lib/controllers/api/quorum.d.ts.map +1 -0
- package/src/lib/controllers/api/quorum.js +592 -0
- package/src/lib/controllers/api/quorum.js.map +1 -0
- package/src/lib/controllers/api/sessions.d.ts +21 -0
- package/src/lib/controllers/api/sessions.d.ts.map +1 -0
- package/src/lib/controllers/api/sessions.js +32 -0
- package/src/lib/controllers/api/sessions.js.map +1 -0
- package/src/lib/controllers/api/user.d.ts +20 -0
- package/src/lib/controllers/api/user.d.ts.map +1 -0
- package/src/lib/controllers/api/user.js +109 -0
- package/src/lib/controllers/api/user.js.map +1 -0
- package/src/lib/controllers/base.d.ts +6 -48
- package/src/lib/controllers/base.d.ts.map +1 -1
- package/src/lib/controllers/base.js +2 -225
- package/src/lib/controllers/base.js.map +1 -1
- package/src/lib/controllers/index.d.ts +3 -0
- package/src/lib/controllers/index.d.ts.map +1 -0
- package/src/lib/controllers/index.js +6 -0
- package/src/lib/controllers/index.js.map +1 -0
- package/src/lib/datastore/block-document-store.d.ts.map +1 -1
- package/src/lib/datastore/block-document-store.js +22 -18
- package/src/lib/datastore/block-document-store.js.map +1 -1
- package/src/lib/datastore/document-store.d.ts +1 -2
- package/src/lib/datastore/document-store.d.ts.map +1 -1
- package/src/lib/datastore/index.d.ts +6 -0
- package/src/lib/datastore/index.d.ts.map +1 -0
- package/src/lib/datastore/index.js +8 -0
- package/src/lib/datastore/index.js.map +1 -0
- package/src/lib/datastore/memory-document-store.d.ts.map +1 -1
- package/src/lib/datastore/memory-document-store.js.map +1 -1
- package/src/lib/documents/base.d.ts +3 -2
- package/src/lib/documents/base.d.ts.map +1 -1
- package/src/lib/enumerations/index.d.ts +5 -0
- package/src/lib/enumerations/index.d.ts.map +1 -0
- package/src/lib/enumerations/index.js +8 -0
- package/src/lib/enumerations/index.js.map +1 -0
- package/src/lib/enumerations/websocketMessageType.d.ts +44 -0
- package/src/lib/enumerations/websocketMessageType.d.ts.map +1 -0
- package/src/lib/enumerations/websocketMessageType.js +47 -0
- package/src/lib/enumerations/websocketMessageType.js.map +1 -0
- package/src/lib/environment.d.ts +4 -2
- package/src/lib/environment.d.ts.map +1 -1
- package/src/lib/environment.js.map +1 -1
- package/src/lib/errors/index.d.ts +20 -0
- package/src/lib/errors/index.d.ts.map +1 -0
- package/src/lib/errors/index.js +23 -0
- package/src/lib/errors/index.js.map +1 -0
- package/src/lib/interfaces/application.d.ts +19 -7
- package/src/lib/interfaces/application.d.ts.map +1 -1
- package/src/lib/interfaces/auth-credentials.d.ts +6 -0
- package/src/lib/interfaces/auth-credentials.d.ts.map +1 -0
- package/src/lib/interfaces/{server-init-result.js → auth-credentials.js} +1 -1
- package/src/lib/interfaces/auth-credentials.js.map +1 -0
- package/src/lib/interfaces/auth-token.d.ts +6 -0
- package/src/lib/interfaces/auth-token.d.ts.map +1 -0
- package/src/lib/interfaces/{ecies-consts.js → auth-token.js} +1 -1
- package/src/lib/interfaces/auth-token.js.map +1 -0
- package/src/lib/interfaces/backend-objects/index.d.ts +5 -0
- package/src/lib/interfaces/backend-objects/index.d.ts.map +1 -0
- package/src/lib/interfaces/backend-objects/index.js +8 -0
- package/src/lib/interfaces/backend-objects/index.js.map +1 -0
- package/src/lib/interfaces/bases/index.d.ts +5 -0
- package/src/lib/interfaces/bases/index.d.ts.map +1 -0
- package/src/lib/interfaces/bases/index.js +8 -0
- package/src/lib/interfaces/bases/index.js.map +1 -0
- package/src/lib/interfaces/blockRequest.d.ts +40 -0
- package/src/lib/interfaces/blockRequest.d.ts.map +1 -0
- package/src/lib/interfaces/{mongo-errors.js → blockRequest.js} +1 -1
- package/src/lib/interfaces/blockRequest.js.map +1 -0
- package/src/lib/interfaces/blockResponses.d.ts +32 -0
- package/src/lib/interfaces/blockResponses.d.ts.map +1 -0
- package/src/lib/interfaces/blockResponses.js +3 -0
- package/src/lib/interfaces/blockResponses.js.map +1 -0
- package/src/lib/interfaces/blockService.d.ts +16 -0
- package/src/lib/interfaces/blockService.d.ts.map +1 -0
- package/src/lib/interfaces/{pbkdf2-result.js → blockService.js} +1 -1
- package/src/lib/interfaces/blockService.js.map +1 -0
- package/src/lib/interfaces/blockStore.d.ts +7 -0
- package/src/lib/interfaces/blockStore.d.ts.map +1 -0
- package/src/lib/interfaces/blockStore.js +3 -0
- package/src/lib/interfaces/blockStore.js.map +1 -0
- package/src/lib/interfaces/blocksHandlers.d.ts +7 -0
- package/src/lib/interfaces/blocksHandlers.d.ts.map +1 -0
- package/src/lib/interfaces/blocksHandlers.js +3 -0
- package/src/lib/interfaces/blocksHandlers.js.map +1 -0
- package/src/lib/interfaces/cblHandlers.d.ts +7 -0
- package/src/lib/interfaces/cblHandlers.d.ts.map +1 -0
- package/src/lib/interfaces/cblHandlers.js +3 -0
- package/src/lib/interfaces/cblHandlers.js.map +1 -0
- package/src/lib/interfaces/environment.d.ts +4 -2
- package/src/lib/interfaces/environment.d.ts.map +1 -1
- package/src/lib/interfaces/index.d.ts +33 -0
- package/src/lib/interfaces/index.d.ts.map +1 -0
- package/src/lib/interfaces/index.js +36 -0
- package/src/lib/interfaces/index.js.map +1 -0
- package/src/lib/interfaces/member/index.d.ts +3 -0
- package/src/lib/interfaces/member/index.d.ts.map +1 -0
- package/src/lib/interfaces/member/index.js +6 -0
- package/src/lib/interfaces/member/index.js.map +1 -0
- package/src/lib/interfaces/member/operational.d.ts +1 -2
- package/src/lib/interfaces/member/operational.d.ts.map +1 -1
- package/src/lib/interfaces/membersResponse.d.ts +12 -0
- package/src/lib/interfaces/membersResponse.d.ts.map +1 -0
- package/src/lib/interfaces/membersResponse.js +3 -0
- package/src/lib/interfaces/membersResponse.js.map +1 -0
- package/src/lib/interfaces/responses/index.d.ts +0 -1
- package/src/lib/interfaces/responses/index.d.ts.map +1 -1
- package/src/lib/interfaces/token-payload.d.ts +9 -0
- package/src/lib/interfaces/token-payload.d.ts.map +1 -0
- package/src/lib/interfaces/token-payload.js +3 -0
- package/src/lib/interfaces/token-payload.js.map +1 -0
- package/src/lib/interfaces/websocketMessages.d.ts +222 -0
- package/src/lib/interfaces/websocketMessages.d.ts.map +1 -0
- package/src/lib/interfaces/websocketMessages.js +6 -0
- package/src/lib/interfaces/websocketMessages.js.map +1 -0
- package/src/lib/routers/api.d.ts +9 -4
- package/src/lib/routers/api.d.ts.map +1 -1
- package/src/lib/routers/api.js +18 -6
- package/src/lib/routers/api.js.map +1 -1
- package/src/lib/routers/app.d.ts +3 -2
- package/src/lib/routers/app.d.ts.map +1 -1
- package/src/lib/routers/app.js +5 -4
- package/src/lib/routers/app.js.map +1 -1
- package/src/lib/routers/base.d.ts +6 -4
- package/src/lib/routers/base.d.ts.map +1 -1
- package/src/lib/routers/base.js.map +1 -1
- package/src/lib/routers/index.d.ts +5 -0
- package/src/lib/routers/index.d.ts.map +1 -0
- package/src/lib/routers/index.js +8 -0
- package/src/lib/routers/index.js.map +1 -0
- package/src/lib/services/auth.d.ts +23 -0
- package/src/lib/services/auth.d.ts.map +1 -0
- package/src/lib/services/auth.js +93 -0
- package/src/lib/services/auth.js.map +1 -0
- package/src/lib/services/base.d.ts +12 -0
- package/src/lib/services/base.d.ts.map +1 -0
- package/src/lib/services/base.js +15 -0
- package/src/lib/services/base.js.map +1 -0
- package/src/lib/services/blockServiceFactory.d.ts +29 -0
- package/src/lib/services/blockServiceFactory.d.ts.map +1 -0
- package/src/lib/services/blockServiceFactory.js +42 -0
- package/src/lib/services/blockServiceFactory.js.map +1 -0
- package/src/lib/services/blockStore.d.ts +52 -0
- package/src/lib/services/blockStore.d.ts.map +1 -0
- package/src/lib/services/blockStore.js +105 -0
- package/src/lib/services/blockStore.js.map +1 -0
- package/src/lib/services/blocks.d.ts +26 -0
- package/src/lib/services/blocks.d.ts.map +1 -0
- package/src/lib/services/blocks.js +35 -0
- package/src/lib/services/blocks.js.map +1 -0
- package/src/lib/services/diskQuorumService.d.ts.map +1 -1
- package/src/lib/services/diskQuorumService.js.map +1 -1
- package/src/lib/services/email.d.ts +4 -3
- package/src/lib/services/email.d.ts.map +1 -1
- package/src/lib/services/email.js +4 -3
- package/src/lib/services/email.js.map +1 -1
- package/src/lib/services/index.d.ts +21 -0
- package/src/lib/services/index.d.ts.map +1 -0
- package/src/lib/services/index.js +26 -0
- package/src/lib/services/index.js.map +1 -0
- package/src/lib/services/messagePassingService.d.ts.map +1 -1
- package/src/lib/services/messagePassingService.js +1 -1
- package/src/lib/services/messagePassingService.js.map +1 -1
- package/src/lib/services/quorum.d.ts +44 -0
- package/src/lib/services/quorum.d.ts.map +1 -0
- package/src/lib/services/quorum.js +83 -0
- package/src/lib/services/quorum.js.map +1 -0
- package/src/lib/services/requestUser.d.ts +18 -0
- package/src/lib/services/requestUser.d.ts.map +1 -0
- package/src/lib/services/requestUser.js +22 -0
- package/src/lib/services/requestUser.js.map +1 -0
- package/src/lib/services/role.d.ts +19 -0
- package/src/lib/services/role.d.ts.map +1 -0
- package/src/lib/services/role.js +18 -0
- package/src/lib/services/role.js.map +1 -0
- package/src/lib/services/websocketHandler.d.ts +95 -0
- package/src/lib/services/websocketHandler.d.ts.map +1 -0
- package/src/lib/services/websocketHandler.js +269 -0
- package/src/lib/services/websocketHandler.js.map +1 -0
- package/src/lib/shared-types.d.ts +2 -1
- package/src/lib/shared-types.d.ts.map +1 -1
- package/src/lib/stores/availabilityAwareBlockStore.d.ts +45 -1
- package/src/lib/stores/availabilityAwareBlockStore.d.ts.map +1 -1
- package/src/lib/stores/availabilityAwareBlockStore.js +109 -0
- package/src/lib/stores/availabilityAwareBlockStore.js.map +1 -1
- package/src/lib/stores/diskBlockAsyncStore.d.ts +82 -4
- package/src/lib/stores/diskBlockAsyncStore.d.ts.map +1 -1
- package/src/lib/stores/diskBlockAsyncStore.js +403 -64
- package/src/lib/stores/diskBlockAsyncStore.js.map +1 -1
- package/src/lib/stores/diskBlockMetadataStore.d.ts +1 -1
- package/src/lib/stores/diskBlockMetadataStore.d.ts.map +1 -1
- package/src/lib/stores/diskBlockMetadataStore.js +1 -1
- package/src/lib/stores/diskBlockMetadataStore.js.map +1 -1
- package/src/lib/stores/diskBlockStore.d.ts +5 -4
- package/src/lib/stores/diskBlockStore.d.ts.map +1 -1
- package/src/lib/stores/diskBlockStore.js +9 -8
- package/src/lib/stores/diskBlockStore.js.map +1 -1
- package/src/lib/stores/diskBlockSyncStore.d.ts.map +1 -1
- package/src/lib/stores/diskBlockSyncStore.js +23 -23
- package/src/lib/stores/diskBlockSyncStore.js.map +1 -1
- package/src/lib/transforms/index.d.ts +4 -0
- package/src/lib/transforms/index.d.ts.map +1 -0
- package/src/lib/transforms/index.js +7 -0
- package/src/lib/transforms/index.js.map +1 -0
- package/src/lib/utils/errorResponse.d.ts +180 -0
- package/src/lib/utils/errorResponse.d.ts.map +1 -0
- package/src/lib/utils/errorResponse.js +313 -0
- package/src/lib/utils/errorResponse.js.map +1 -0
- package/src/lib/controllers/user.d.ts +0 -9
- package/src/lib/controllers/user.d.ts.map +0 -1
- package/src/lib/controllers/user.js +0 -21
- package/src/lib/controllers/user.js.map +0 -1
- package/src/lib/interfaces/api-express-validation-error-response.d.ts +0 -7
- package/src/lib/interfaces/api-express-validation-error-response.d.ts.map +0 -1
- package/src/lib/interfaces/api-express-validation-error-response.js +0 -3
- package/src/lib/interfaces/api-express-validation-error-response.js.map +0 -1
- package/src/lib/interfaces/api-mongo-validation-error-response.d.ts +0 -6
- package/src/lib/interfaces/api-mongo-validation-error-response.d.ts.map +0 -1
- package/src/lib/interfaces/api-mongo-validation-error-response.js +0 -3
- package/src/lib/interfaces/api-mongo-validation-error-response.js.map +0 -1
- package/src/lib/interfaces/authenticated-cipher.d.ts +0 -10
- package/src/lib/interfaces/authenticated-cipher.d.ts.map +0 -1
- package/src/lib/interfaces/authenticated-cipher.js +0 -3
- package/src/lib/interfaces/authenticated-cipher.js.map +0 -1
- package/src/lib/interfaces/authenticated-decipher.d.ts +0 -9
- package/src/lib/interfaces/authenticated-decipher.d.ts.map +0 -1
- package/src/lib/interfaces/authenticated-decipher.js +0 -3
- package/src/lib/interfaces/authenticated-decipher.js.map +0 -1
- package/src/lib/interfaces/ecies-consts.d.ts +0 -88
- package/src/lib/interfaces/ecies-consts.d.ts.map +0 -1
- package/src/lib/interfaces/ecies-consts.js.map +0 -1
- package/src/lib/interfaces/mongo-errors.d.ts +0 -9
- package/src/lib/interfaces/mongo-errors.d.ts.map +0 -1
- package/src/lib/interfaces/mongo-errors.js.map +0 -1
- package/src/lib/interfaces/pbkdf2-result.d.ts +0 -6
- package/src/lib/interfaces/pbkdf2-result.d.ts.map +0 -1
- package/src/lib/interfaces/pbkdf2-result.js.map +0 -1
- package/src/lib/interfaces/server-init-result.d.ts +0 -34
- package/src/lib/interfaces/server-init-result.d.ts.map +0 -1
- package/src/lib/interfaces/server-init-result.js.map +0 -1
- package/src/lib/services/keyWrapping.d.ts +0 -61
- package/src/lib/services/keyWrapping.d.ts.map +0 -1
- package/src/lib/services/keyWrapping.js +0 -297
- package/src/lib/services/keyWrapping.js.map +0 -1
- package/src/lib/services/pbkdf2.d.ts +0 -6
- package/src/lib/services/pbkdf2.d.ts.map +0 -1
- package/src/lib/services/pbkdf2.js +0 -31
- package/src/lib/services/pbkdf2.js.map +0 -1
- package/src/lib/services/user.d.ts +0 -10
- package/src/lib/services/user.d.ts.map +0 -1
- package/src/lib/services/user.js +0 -11
- package/src/lib/services/user.js.map +0 -1
- /package/{README.md → brightchain-api-lib/README.md} +0 -0
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
import { CanUnlockResult, QuorumDocumentInfo, QuorumMemberMetadata } from '@brightchain/brightchain-lib';
|
|
2
|
+
import { CoreLanguageCode } from '@digitaldefiance/i18n-lib';
|
|
3
|
+
import { PlatformID } from '@digitaldefiance/node-ecies-lib';
|
|
4
|
+
import { ApiErrorResponse, ApiRequestHandler, IApiMessageResponse, TypedHandlers } from '@digitaldefiance/node-express-suite';
|
|
5
|
+
import { IBrightChainApplication } from '../../interfaces/application';
|
|
6
|
+
import { DefaultBackendIdType } from '../../shared-types';
|
|
7
|
+
import { BaseController } from '../base';
|
|
8
|
+
/**
|
|
9
|
+
* Error codes for quorum API operations
|
|
10
|
+
* @deprecated Use ErrorCode from '../../utils/errorResponse' instead
|
|
11
|
+
*/
|
|
12
|
+
export declare enum QuorumErrorCode {
|
|
13
|
+
MEMBER_NOT_FOUND = "MEMBER_NOT_FOUND",
|
|
14
|
+
DOCUMENT_NOT_FOUND = "DOCUMENT_NOT_FOUND",
|
|
15
|
+
INSUFFICIENT_SHARES = "INSUFFICIENT_SHARES",
|
|
16
|
+
SHARE_DECRYPTION_FAILED = "SHARE_DECRYPTION_FAILED",
|
|
17
|
+
INVALID_MEMBER_COUNT = "INVALID_MEMBER_COUNT",
|
|
18
|
+
INVALID_THRESHOLD = "INVALID_THRESHOLD",
|
|
19
|
+
VALIDATION_ERROR = "VALIDATION_ERROR",
|
|
20
|
+
UNAUTHORIZED = "UNAUTHORIZED",
|
|
21
|
+
INTERNAL_ERROR = "INTERNAL_ERROR"
|
|
22
|
+
}
|
|
23
|
+
interface AddMemberResponse extends IApiMessageResponse {
|
|
24
|
+
member: SerializedQuorumMember;
|
|
25
|
+
mnemonic: string;
|
|
26
|
+
[key: string]: any;
|
|
27
|
+
}
|
|
28
|
+
interface ListMembersResponse extends IApiMessageResponse {
|
|
29
|
+
members: SerializedQuorumMember[];
|
|
30
|
+
[key: string]: any;
|
|
31
|
+
}
|
|
32
|
+
interface RemoveMemberResponse extends IApiMessageResponse {
|
|
33
|
+
success: boolean;
|
|
34
|
+
memberId: string;
|
|
35
|
+
[key: string]: any;
|
|
36
|
+
}
|
|
37
|
+
interface SealDocumentResponse extends IApiMessageResponse {
|
|
38
|
+
documentId: string;
|
|
39
|
+
memberIds: string[];
|
|
40
|
+
sharesRequired: number;
|
|
41
|
+
createdAt: string;
|
|
42
|
+
[key: string]: any;
|
|
43
|
+
}
|
|
44
|
+
interface UnsealDocumentResponse extends IApiMessageResponse {
|
|
45
|
+
document: unknown;
|
|
46
|
+
[key: string]: any;
|
|
47
|
+
}
|
|
48
|
+
interface GetDocumentResponse extends IApiMessageResponse {
|
|
49
|
+
document: QuorumDocumentInfo;
|
|
50
|
+
[key: string]: any;
|
|
51
|
+
}
|
|
52
|
+
interface CanUnlockResponse extends IApiMessageResponse, CanUnlockResult {
|
|
53
|
+
[key: string]: any;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Serialized quorum member for API responses
|
|
57
|
+
*/
|
|
58
|
+
interface SerializedQuorumMember {
|
|
59
|
+
id: string;
|
|
60
|
+
publicKey: string;
|
|
61
|
+
metadata: QuorumMemberMetadata;
|
|
62
|
+
isActive: boolean;
|
|
63
|
+
createdAt: string;
|
|
64
|
+
updatedAt: string;
|
|
65
|
+
}
|
|
66
|
+
type QuorumApiResponse = AddMemberResponse | ListMembersResponse | RemoveMemberResponse | SealDocumentResponse | UnsealDocumentResponse | GetDocumentResponse | CanUnlockResponse | ApiErrorResponse;
|
|
67
|
+
interface QuorumHandlers extends TypedHandlers {
|
|
68
|
+
addMember: ApiRequestHandler<AddMemberResponse | ApiErrorResponse>;
|
|
69
|
+
listMembers: ApiRequestHandler<ListMembersResponse | ApiErrorResponse>;
|
|
70
|
+
removeMember: ApiRequestHandler<RemoveMemberResponse | ApiErrorResponse>;
|
|
71
|
+
sealDocument: ApiRequestHandler<SealDocumentResponse | ApiErrorResponse>;
|
|
72
|
+
unsealDocument: ApiRequestHandler<UnsealDocumentResponse | ApiErrorResponse>;
|
|
73
|
+
getDocument: ApiRequestHandler<GetDocumentResponse | ApiErrorResponse>;
|
|
74
|
+
canUnlock: ApiRequestHandler<CanUnlockResponse | ApiErrorResponse>;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Controller for quorum operations including member management
|
|
78
|
+
* and document sealing/unsealing.
|
|
79
|
+
*
|
|
80
|
+
* Provides REST API endpoints for managing quorum members and performing
|
|
81
|
+
* secure multi-party document operations using Shamir's Secret Sharing.
|
|
82
|
+
*
|
|
83
|
+
* ## Endpoints
|
|
84
|
+
*
|
|
85
|
+
* ### Member Management
|
|
86
|
+
*
|
|
87
|
+
* #### POST /api/quorum/members
|
|
88
|
+
* Add a new member to the quorum with generated cryptographic keys.
|
|
89
|
+
*
|
|
90
|
+
* **Request Body:**
|
|
91
|
+
* - `name` (string, required): Member's display name
|
|
92
|
+
* - `email` (string, optional): Member's email address
|
|
93
|
+
* - `role` (string, optional): Member's role in the quorum
|
|
94
|
+
*
|
|
95
|
+
* **Response:** Member details and mnemonic for key recovery
|
|
96
|
+
*
|
|
97
|
+
* #### GET /api/quorum/members
|
|
98
|
+
* List all active quorum members.
|
|
99
|
+
*
|
|
100
|
+
* **Response:** Array of member objects with public keys and metadata
|
|
101
|
+
*
|
|
102
|
+
* #### DELETE /api/quorum/members/:memberId
|
|
103
|
+
* Remove a member from the quorum (deactivate).
|
|
104
|
+
*
|
|
105
|
+
* **Parameters:**
|
|
106
|
+
* - `memberId` (string, required): Member's unique identifier
|
|
107
|
+
*
|
|
108
|
+
* **Response:** Success confirmation
|
|
109
|
+
*
|
|
110
|
+
* ### Document Operations
|
|
111
|
+
*
|
|
112
|
+
* #### POST /api/quorum/documents/seal
|
|
113
|
+
* Seal a document using Shamir's Secret Sharing.
|
|
114
|
+
*
|
|
115
|
+
* **Request Body:**
|
|
116
|
+
* - `document` (any, required): Document to seal (JSON-serializable)
|
|
117
|
+
* - `memberIds` (string[], required): Array of member IDs (minimum 2)
|
|
118
|
+
* - `sharesRequired` (number, optional): Threshold for unsealing (default: all members)
|
|
119
|
+
*
|
|
120
|
+
* **Response:** Document ID and sealing metadata
|
|
121
|
+
*
|
|
122
|
+
* #### POST /api/quorum/documents/:documentId/unseal
|
|
123
|
+
* Unseal a document using member shares.
|
|
124
|
+
*
|
|
125
|
+
* **Parameters:**
|
|
126
|
+
* - `documentId` (string, required): Document's unique identifier
|
|
127
|
+
*
|
|
128
|
+
* **Request Body:**
|
|
129
|
+
* - `memberIds` (string[], required): Array of member IDs providing shares
|
|
130
|
+
*
|
|
131
|
+
* **Response:** Original document content
|
|
132
|
+
*
|
|
133
|
+
* #### GET /api/quorum/documents/:documentId
|
|
134
|
+
* Get metadata for a sealed document.
|
|
135
|
+
*
|
|
136
|
+
* **Parameters:**
|
|
137
|
+
* - `documentId` (string, required): Document's unique identifier
|
|
138
|
+
*
|
|
139
|
+
* **Response:** Document metadata (member IDs, threshold, creation date)
|
|
140
|
+
*
|
|
141
|
+
* #### GET /api/quorum/documents/:documentId/can-unlock
|
|
142
|
+
* Check if a set of members can unlock a document.
|
|
143
|
+
*
|
|
144
|
+
* **Parameters:**
|
|
145
|
+
* - `documentId` (string, required): Document's unique identifier
|
|
146
|
+
*
|
|
147
|
+
* **Query Parameters:**
|
|
148
|
+
* - `memberIds` (string, required): Comma-separated list of member IDs
|
|
149
|
+
*
|
|
150
|
+
* **Response:** Unlock status and share count information
|
|
151
|
+
*
|
|
152
|
+
* @requirements 7.1, 7.2, 7.3, 7.4, 8.1, 8.2, 8.3, 8.4, 8.5, 8.6, 9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 10.1, 10.2, 10.3, 10.4, 12.1, 12.2, 12.3, 12.4, 12.5, 12.6, 12.7
|
|
153
|
+
*/
|
|
154
|
+
export declare class QuorumController<TID extends PlatformID = DefaultBackendIdType> extends BaseController<TID, QuorumApiResponse, QuorumHandlers, CoreLanguageCode> {
|
|
155
|
+
private quorumServiceWrapper;
|
|
156
|
+
constructor(application: IBrightChainApplication<TID>);
|
|
157
|
+
protected initRouteDefinitions(): void;
|
|
158
|
+
/**
|
|
159
|
+
* POST /api/quorum/members
|
|
160
|
+
* Add a new member to the quorum with generated cryptographic keys.
|
|
161
|
+
*
|
|
162
|
+
* Creates a new member with ECIES key pair and adds them to the quorum.
|
|
163
|
+
* The mnemonic phrase is returned for key recovery - it should be stored
|
|
164
|
+
* securely by the user as it cannot be retrieved later.
|
|
165
|
+
*
|
|
166
|
+
* @param req - Request containing member name and optional metadata
|
|
167
|
+
* @returns Member details and mnemonic on success
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* ```json
|
|
171
|
+
* // Request
|
|
172
|
+
* POST /api/quorum/members
|
|
173
|
+
* {
|
|
174
|
+
* "name": "Alice",
|
|
175
|
+
* "email": "alice@example.com",
|
|
176
|
+
* "role": "admin"
|
|
177
|
+
* }
|
|
178
|
+
*
|
|
179
|
+
* // Response
|
|
180
|
+
* {
|
|
181
|
+
* "message": "Member added successfully",
|
|
182
|
+
* "member": {
|
|
183
|
+
* "id": "abc123...",
|
|
184
|
+
* "publicKey": "04...",
|
|
185
|
+
* "metadata": { "name": "Alice", "email": "alice@example.com", "role": "admin" },
|
|
186
|
+
* "isActive": true,
|
|
187
|
+
* "createdAt": "2025-01-16T10:00:00Z",
|
|
188
|
+
* "updatedAt": "2025-01-16T10:00:00Z"
|
|
189
|
+
* },
|
|
190
|
+
* "mnemonic": "word1 word2 word3..."
|
|
191
|
+
* }
|
|
192
|
+
* ```
|
|
193
|
+
*/
|
|
194
|
+
private handleAddMember;
|
|
195
|
+
/**
|
|
196
|
+
* GET /api/quorum/members
|
|
197
|
+
* List all active quorum members.
|
|
198
|
+
*
|
|
199
|
+
* Returns all members that are currently active in the quorum.
|
|
200
|
+
* Inactive (removed) members are not included in the response.
|
|
201
|
+
*
|
|
202
|
+
* @param _req - Request (no parameters required)
|
|
203
|
+
* @returns Array of member objects on success
|
|
204
|
+
*
|
|
205
|
+
* @example
|
|
206
|
+
* ```json
|
|
207
|
+
* // Request
|
|
208
|
+
* GET /api/quorum/members
|
|
209
|
+
*
|
|
210
|
+
* // Response
|
|
211
|
+
* {
|
|
212
|
+
* "message": "Members retrieved successfully",
|
|
213
|
+
* "members": [
|
|
214
|
+
* {
|
|
215
|
+
* "id": "abc123...",
|
|
216
|
+
* "publicKey": "04...",
|
|
217
|
+
* "metadata": { "name": "Alice", "role": "admin" },
|
|
218
|
+
* "isActive": true,
|
|
219
|
+
* "createdAt": "2025-01-16T10:00:00Z",
|
|
220
|
+
* "updatedAt": "2025-01-16T10:00:00Z"
|
|
221
|
+
* }
|
|
222
|
+
* ]
|
|
223
|
+
* }
|
|
224
|
+
* ```
|
|
225
|
+
*/
|
|
226
|
+
private handleListMembers;
|
|
227
|
+
/**
|
|
228
|
+
* DELETE /api/quorum/members/:memberId
|
|
229
|
+
* Remove a member from the quorum (deactivate).
|
|
230
|
+
*
|
|
231
|
+
* Marks the member as inactive. The member's access to existing documents
|
|
232
|
+
* they are part of is preserved, but they cannot be added to new documents.
|
|
233
|
+
*
|
|
234
|
+
* @param req - Request containing the member ID parameter
|
|
235
|
+
* @returns Success confirmation on success, or 404 if not found
|
|
236
|
+
*
|
|
237
|
+
* @example
|
|
238
|
+
* ```json
|
|
239
|
+
* // Request
|
|
240
|
+
* DELETE /api/quorum/members/abc123...
|
|
241
|
+
*
|
|
242
|
+
* // Response
|
|
243
|
+
* {
|
|
244
|
+
* "message": "Member removed successfully",
|
|
245
|
+
* "success": true,
|
|
246
|
+
* "memberId": "abc123..."
|
|
247
|
+
* }
|
|
248
|
+
* ```
|
|
249
|
+
*/
|
|
250
|
+
private handleRemoveMember;
|
|
251
|
+
/**
|
|
252
|
+
* POST /api/quorum/documents/seal
|
|
253
|
+
* Seal a document using Shamir's Secret Sharing.
|
|
254
|
+
*
|
|
255
|
+
* Encrypts the document with a randomly generated symmetric key, then splits
|
|
256
|
+
* the key into shares using Shamir's Secret Sharing. Each share is encrypted
|
|
257
|
+
* with the corresponding member's public key.
|
|
258
|
+
*
|
|
259
|
+
* @param req - Request containing document, member IDs, and optional threshold
|
|
260
|
+
* @returns Document ID and sealing metadata on success
|
|
261
|
+
*
|
|
262
|
+
* @example
|
|
263
|
+
* ```json
|
|
264
|
+
* // Request
|
|
265
|
+
* POST /api/quorum/documents/seal
|
|
266
|
+
* {
|
|
267
|
+
* "document": { "secret": "data", "value": 42 },
|
|
268
|
+
* "memberIds": ["member1...", "member2...", "member3..."],
|
|
269
|
+
* "sharesRequired": 2
|
|
270
|
+
* }
|
|
271
|
+
*
|
|
272
|
+
* // Response
|
|
273
|
+
* {
|
|
274
|
+
* "message": "Document sealed successfully",
|
|
275
|
+
* "documentId": "doc123...",
|
|
276
|
+
* "memberIds": ["member1...", "member2...", "member3..."],
|
|
277
|
+
* "sharesRequired": 2,
|
|
278
|
+
* "createdAt": "2025-01-16T10:00:00Z"
|
|
279
|
+
* }
|
|
280
|
+
* ```
|
|
281
|
+
*/
|
|
282
|
+
private handleSealDocument;
|
|
283
|
+
/**
|
|
284
|
+
* POST /api/quorum/documents/:documentId/unseal
|
|
285
|
+
* Unseal a document using member shares.
|
|
286
|
+
*
|
|
287
|
+
* Combines the provided member shares to reconstruct the symmetric key,
|
|
288
|
+
* then decrypts and returns the original document.
|
|
289
|
+
*
|
|
290
|
+
* Note: This endpoint requires members to have their private keys loaded,
|
|
291
|
+
* which is not yet fully implemented. Currently returns 501 Not Implemented.
|
|
292
|
+
*
|
|
293
|
+
* @param req - Request containing document ID and member IDs
|
|
294
|
+
* @returns Original document on success
|
|
295
|
+
*
|
|
296
|
+
* @example
|
|
297
|
+
* ```json
|
|
298
|
+
* // Request
|
|
299
|
+
* POST /api/quorum/documents/doc123.../unseal
|
|
300
|
+
* {
|
|
301
|
+
* "memberIds": ["member1...", "member2..."]
|
|
302
|
+
* }
|
|
303
|
+
*
|
|
304
|
+
* // Response (when implemented)
|
|
305
|
+
* {
|
|
306
|
+
* "message": "Document unsealed successfully",
|
|
307
|
+
* "document": { "secret": "data", "value": 42 }
|
|
308
|
+
* }
|
|
309
|
+
* ```
|
|
310
|
+
*/
|
|
311
|
+
private handleUnsealDocument;
|
|
312
|
+
/**
|
|
313
|
+
* GET /api/quorum/documents/:documentId
|
|
314
|
+
* Get metadata for a sealed document.
|
|
315
|
+
*
|
|
316
|
+
* Returns information about the document including which members have access
|
|
317
|
+
* and how many shares are required to unseal it.
|
|
318
|
+
*
|
|
319
|
+
* @param req - Request containing the document ID parameter
|
|
320
|
+
* @returns Document metadata on success, or 404 if not found
|
|
321
|
+
*
|
|
322
|
+
* @example
|
|
323
|
+
* ```json
|
|
324
|
+
* // Request
|
|
325
|
+
* GET /api/quorum/documents/doc123...
|
|
326
|
+
*
|
|
327
|
+
* // Response
|
|
328
|
+
* {
|
|
329
|
+
* "message": "Document retrieved successfully",
|
|
330
|
+
* "document": {
|
|
331
|
+
* "id": "doc123...",
|
|
332
|
+
* "memberIds": ["member1...", "member2...", "member3..."],
|
|
333
|
+
* "sharesRequired": 2,
|
|
334
|
+
* "createdAt": "2025-01-16T10:00:00Z",
|
|
335
|
+
* "creatorId": "creator..."
|
|
336
|
+
* }
|
|
337
|
+
* }
|
|
338
|
+
* ```
|
|
339
|
+
*/
|
|
340
|
+
private handleGetDocument;
|
|
341
|
+
/**
|
|
342
|
+
* GET /api/quorum/documents/:documentId/can-unlock
|
|
343
|
+
* Check if a set of members can unlock a document.
|
|
344
|
+
*
|
|
345
|
+
* Determines whether the provided members have enough shares to meet
|
|
346
|
+
* the threshold required to unseal the document.
|
|
347
|
+
*
|
|
348
|
+
* @param req - Request containing document ID and member IDs query parameter
|
|
349
|
+
* @returns Unlock status and share count information
|
|
350
|
+
*
|
|
351
|
+
* @example
|
|
352
|
+
* ```json
|
|
353
|
+
* // Request
|
|
354
|
+
* GET /api/quorum/documents/doc123.../can-unlock?memberIds=member1,member2
|
|
355
|
+
*
|
|
356
|
+
* // Response
|
|
357
|
+
* {
|
|
358
|
+
* "message": "Can-unlock check completed",
|
|
359
|
+
* "canUnlock": true,
|
|
360
|
+
* "sharesProvided": 2,
|
|
361
|
+
* "sharesRequired": 2,
|
|
362
|
+
* "missingMembers": ["member3..."]
|
|
363
|
+
* }
|
|
364
|
+
* ```
|
|
365
|
+
*/
|
|
366
|
+
private handleCanUnlock;
|
|
367
|
+
}
|
|
368
|
+
export {};
|
|
369
|
+
//# sourceMappingURL=quorum.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quorum.d.ts","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/controllers/api/quorum.ts"],"names":[],"mappings":"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"}
|