@brightchain/brightchain-lib 0.22.0 → 0.23.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/browser.d.ts +2 -0
- package/src/browser.d.ts.map +1 -1
- package/src/browser.js +4 -1
- package/src/browser.js.map +1 -1
- package/src/lib/blocks/tcbl/tcblAttachmentUtils.js +1 -1
- package/src/lib/blocks/tcbl/tcblAttachmentUtils.js.map +1 -1
- package/src/lib/blocks/tcbl/tcblBuilder.js +1 -1
- package/src/lib/blocks/tcbl/tcblBuilder.js.map +1 -1
- package/src/lib/blocks/tcbl/tcblReader.js +1 -1
- package/src/lib/blocks/tcbl/tcblReader.js.map +1 -1
- package/src/lib/documents/member/memberDocument.d.ts +3 -3
- package/src/lib/documents/member/memberDocument.d.ts.map +1 -1
- package/src/lib/documents/member/memberDocument.js +2 -2
- package/src/lib/documents/member/memberDocument.js.map +1 -1
- package/src/lib/documents/member/memberHydration.js +3 -3
- package/src/lib/documents/member/memberHydration.js.map +1 -1
- package/src/lib/documents/member/memberOperational.d.ts.map +1 -1
- package/src/lib/documents/member/memberOperational.js +2 -2
- package/src/lib/documents/member/memberOperational.js.map +1 -1
- package/src/lib/documents/member/memberProfileHydration.js +4 -4
- package/src/lib/documents/member/memberProfileHydration.js.map +1 -1
- package/src/lib/interfaces/aliasRecord.d.ts +3 -5
- package/src/lib/interfaces/aliasRecord.d.ts.map +1 -1
- package/src/lib/interfaces/auditLogEntry.d.ts +7 -6
- package/src/lib/interfaces/auditLogEntry.d.ts.map +1 -1
- package/src/lib/interfaces/availability/availabilityService.d.ts +12 -11
- package/src/lib/interfaces/availability/availabilityService.d.ts.map +1 -1
- package/src/lib/interfaces/availability/availabilityService.js.map +1 -1
- package/src/lib/interfaces/availability/blockRegistry.d.ts +8 -7
- package/src/lib/interfaces/availability/blockRegistry.d.ts.map +1 -1
- package/src/lib/interfaces/availability/discoveryProtocol.d.ts +6 -5
- package/src/lib/interfaces/availability/discoveryProtocol.d.ts.map +1 -1
- package/src/lib/interfaces/availability/discoveryProtocol.js.map +1 -1
- package/src/lib/interfaces/availability/gossipService.d.ts +16 -15
- package/src/lib/interfaces/availability/gossipService.d.ts.map +1 -1
- package/src/lib/interfaces/availability/gossipService.js.map +1 -1
- package/src/lib/interfaces/availability/locationRecord.d.ts +2 -1
- package/src/lib/interfaces/availability/locationRecord.d.ts.map +1 -1
- package/src/lib/interfaces/availability/locationRecord.js.map +1 -1
- package/src/lib/interfaces/availability/reconciliationService.d.ts +5 -4
- package/src/lib/interfaces/availability/reconciliationService.d.ts.map +1 -1
- package/src/lib/interfaces/availability/reconciliationService.js.map +1 -1
- package/src/lib/interfaces/blockFetch/blockFetcher.d.ts +2 -1
- package/src/lib/interfaces/blockFetch/blockFetcher.d.ts.map +1 -1
- package/src/lib/interfaces/blockFetch/blockFetcher.js.map +1 -1
- package/src/lib/interfaces/branded/primitives/blockId.d.ts +13 -0
- package/src/lib/interfaces/branded/primitives/blockId.d.ts.map +1 -1
- package/src/lib/interfaces/branded/primitives/blockId.js +13 -0
- package/src/lib/interfaces/branded/primitives/blockId.js.map +1 -1
- package/src/lib/interfaces/brightpass/vaultEntry.d.ts +2 -1
- package/src/lib/interfaces/brightpass/vaultEntry.d.ts.map +1 -1
- package/src/lib/interfaces/brightpass/vaultMetadata.d.ts +2 -1
- package/src/lib/interfaces/brightpass/vaultMetadata.d.ts.map +1 -1
- package/src/lib/interfaces/chainedAuditLogEntry.d.ts +3 -2
- package/src/lib/interfaces/chainedAuditLogEntry.d.ts.map +1 -1
- package/src/lib/interfaces/contentWithIdentity.d.ts +3 -3
- package/src/lib/interfaces/contentWithIdentity.d.ts.map +1 -1
- package/src/lib/interfaces/identityRecoveryRecord.d.ts +5 -7
- package/src/lib/interfaces/identityRecoveryRecord.d.ts.map +1 -1
- package/src/lib/interfaces/member/memberDto.d.ts +4 -4
- package/src/lib/interfaces/member/memberDto.d.ts.map +1 -1
- package/src/lib/interfaces/messaging/attachmentMetadata.d.ts +2 -1
- package/src/lib/interfaces/messaging/attachmentMetadata.d.ts.map +1 -1
- package/src/lib/interfaces/messaging/emailDelivery.d.ts +3 -2
- package/src/lib/interfaces/messaging/emailDelivery.d.ts.map +1 -1
- package/src/lib/interfaces/messaging/emailDelivery.js.map +1 -1
- package/src/lib/interfaces/messaging/emailMetadata.d.ts +7 -3
- package/src/lib/interfaces/messaging/emailMetadata.d.ts.map +1 -1
- package/src/lib/interfaces/messaging/emailMetadata.js.map +1 -1
- package/src/lib/interfaces/messaging/messageMetadata.d.ts +12 -6
- package/src/lib/interfaces/messaging/messageMetadata.d.ts.map +1 -1
- package/src/lib/interfaces/messaging/messageMetadataStore.d.ts +17 -10
- package/src/lib/interfaces/messaging/messageMetadataStore.d.ts.map +1 -1
- package/src/lib/interfaces/messaging/mimePart.d.ts +2 -1
- package/src/lib/interfaces/messaging/mimePart.d.ts.map +1 -1
- package/src/lib/interfaces/messaging/mimePart.js.map +1 -1
- package/src/lib/interfaces/proposal.d.ts +4 -8
- package/src/lib/interfaces/proposal.d.ts.map +1 -1
- package/src/lib/interfaces/quorumDocumentMetadata.d.ts +2 -2
- package/src/lib/interfaces/quorumDocumentMetadata.d.ts.map +1 -1
- package/src/lib/interfaces/quorumEpoch.d.ts +3 -5
- package/src/lib/interfaces/quorumEpoch.d.ts.map +1 -1
- package/src/lib/interfaces/readOnlyDataObjectDto.d.ts +2 -2
- package/src/lib/interfaces/readOnlyDataObjectDto.d.ts.map +1 -1
- package/src/lib/interfaces/redistributionJournalEntry.d.ts +4 -4
- package/src/lib/interfaces/redistributionJournalEntry.d.ts.map +1 -1
- package/src/lib/interfaces/responses/getBlock.d.ts +2 -1
- package/src/lib/interfaces/responses/getBlock.d.ts.map +1 -1
- package/src/lib/interfaces/responses/index.d.ts +1 -0
- package/src/lib/interfaces/responses/index.d.ts.map +1 -1
- package/src/lib/interfaces/responses/memberProfileData.d.ts +51 -0
- package/src/lib/interfaces/responses/memberProfileData.d.ts.map +1 -0
- package/src/lib/interfaces/responses/memberProfileData.js +3 -0
- package/src/lib/interfaces/responses/memberProfileData.js.map +1 -0
- package/src/lib/interfaces/responses/replicateBlockResponse.d.ts +2 -1
- package/src/lib/interfaces/responses/replicateBlockResponse.d.ts.map +1 -1
- package/src/lib/interfaces/responses/storeBlock.d.ts +2 -1
- package/src/lib/interfaces/responses/storeBlock.d.ts.map +1 -1
- package/src/lib/interfaces/services/contentIngestion.d.ts +3 -3
- package/src/lib/interfaces/services/contentIngestion.d.ts.map +1 -1
- package/src/lib/interfaces/services/expirationScheduler.d.ts +2 -2
- package/src/lib/interfaces/services/expirationScheduler.d.ts.map +1 -1
- package/src/lib/interfaces/services/identitySealingPipeline.d.ts +3 -3
- package/src/lib/interfaces/services/identitySealingPipeline.d.ts.map +1 -1
- package/src/lib/interfaces/services/identityValidator.d.ts +2 -2
- package/src/lib/interfaces/services/identityValidator.d.ts.map +1 -1
- package/src/lib/interfaces/services/operatorPrompt.d.ts +4 -4
- package/src/lib/interfaces/services/operatorPrompt.d.ts.map +1 -1
- package/src/lib/interfaces/services/quorumDatabase.d.ts +9 -9
- package/src/lib/interfaces/services/quorumDatabase.d.ts.map +1 -1
- package/src/lib/interfaces/services/quorumService.d.ts +23 -22
- package/src/lib/interfaces/services/quorumService.d.ts.map +1 -1
- package/src/lib/interfaces/services/quorumStateMachine.d.ts +6 -6
- package/src/lib/interfaces/services/quorumStateMachine.d.ts.map +1 -1
- package/src/lib/interfaces/services/redistributionConfig.d.ts +2 -2
- package/src/lib/interfaces/services/redistributionConfig.d.ts.map +1 -1
- package/src/lib/interfaces/storage/blockMetadata.d.ts +7 -6
- package/src/lib/interfaces/storage/blockMetadata.d.ts.map +1 -1
- package/src/lib/interfaces/storage/blockMetadata.js.map +1 -1
- package/src/lib/interfaces/storage/blockMetadataStore.d.ts +5 -4
- package/src/lib/interfaces/storage/blockMetadataStore.d.ts.map +1 -1
- package/src/lib/interfaces/storage/cblIndex.d.ts +5 -4
- package/src/lib/interfaces/storage/cblIndex.d.ts.map +1 -1
- package/src/lib/interfaces/storage/cblIndex.js.map +1 -1
- package/src/lib/interfaces/storage/cblWhitening.d.ts +9 -8
- package/src/lib/interfaces/storage/cblWhitening.d.ts.map +1 -1
- package/src/lib/interfaces/vote.d.ts +5 -9
- package/src/lib/interfaces/vote.d.ts.map +1 -1
- package/src/lib/quorum.d.ts +4 -4
- package/src/lib/quorum.d.ts.map +1 -1
- package/src/lib/quorum.js +1 -1
- package/src/lib/quorum.js.map +1 -1
- package/src/lib/quorumDataRecord.d.ts +4 -4
- package/src/lib/quorumDataRecord.d.ts.map +1 -1
- package/src/lib/quorumDataRecord.js +3 -3
- package/src/lib/quorumDataRecord.js.map +1 -1
- package/src/lib/quorumDataRecordDto.d.ts +5 -5
- package/src/lib/quorumDataRecordDto.d.ts.map +1 -1
- package/src/lib/schemas/messaging/messageMetadataSchema.d.ts.map +1 -1
- package/src/lib/schemas/messaging/messageMetadataSchema.js +1 -1
- package/src/lib/schemas/messaging/messageMetadataSchema.js.map +1 -1
- package/src/lib/schemas/quorumDocument.d.ts +1 -1
- package/src/lib/schemas/quorumDocument.d.ts.map +1 -1
- package/src/lib/schemas/quorumDocument.js +1 -1
- package/src/lib/schemas/quorumDocument.js.map +1 -1
- package/src/lib/services/aliasRegistry.d.ts +3 -3
- package/src/lib/services/aliasRegistry.d.ts.map +1 -1
- package/src/lib/services/aliasRegistry.js +2 -3
- package/src/lib/services/aliasRegistry.js.map +1 -1
- package/src/lib/services/auditLogService.d.ts +3 -3
- package/src/lib/services/auditLogService.d.ts.map +1 -1
- package/src/lib/services/auditLogService.js.map +1 -1
- package/src/lib/services/communication/explodingMessageService.js +7 -7
- package/src/lib/services/communication/explodingMessageService.js.map +1 -1
- package/src/lib/services/identity/memberIdentityProofService.js +2 -2
- package/src/lib/services/identity/memberIdentityProofService.js.map +1 -1
- package/src/lib/services/identity/memberPaperKeyService.js +5 -5
- package/src/lib/services/identity/memberPaperKeyService.js.map +1 -1
- package/src/lib/services/identitySealingPipeline.d.ts +2 -2
- package/src/lib/services/identitySealingPipeline.d.ts.map +1 -1
- package/src/lib/services/identitySealingPipeline.js.map +1 -1
- package/src/lib/services/identityValidator.d.ts +1 -1
- package/src/lib/services/identityValidator.d.ts.map +1 -1
- package/src/lib/services/identityValidator.js +1 -1
- package/src/lib/services/identityValidator.js.map +1 -1
- package/src/lib/services/memberStore.d.ts.map +1 -1
- package/src/lib/services/memberStore.js +7 -6
- package/src/lib/services/memberStore.js.map +1 -1
- package/src/lib/services/messaging/emailMessageService.d.ts.map +1 -1
- package/src/lib/services/messaging/emailMessageService.js +2 -1
- package/src/lib/services/messaging/emailMessageService.js.map +1 -1
- package/src/lib/services/messaging/emailParser.d.ts.map +1 -1
- package/src/lib/services/messaging/emailParser.js.map +1 -1
- package/src/lib/services/messaging/gossipRetryService.d.ts +3 -2
- package/src/lib/services/messaging/gossipRetryService.d.ts.map +1 -1
- package/src/lib/services/messaging/gossipRetryService.js.map +1 -1
- package/src/lib/services/messaging/messageCBLService.d.ts.map +1 -1
- package/src/lib/services/messaging/messageCBLService.js +2 -1
- package/src/lib/services/messaging/messageCBLService.js.map +1 -1
- package/src/lib/services/quorumService.d.ts +16 -16
- package/src/lib/services/quorumService.d.ts.map +1 -1
- package/src/lib/services/quorumService.js +72 -39
- package/src/lib/services/quorumService.js.map +1 -1
- package/src/lib/services/quorumStateMachine.d.ts +7 -7
- package/src/lib/services/quorumStateMachine.d.ts.map +1 -1
- package/src/lib/services/quorumStateMachine.js +31 -24
- package/src/lib/services/quorumStateMachine.js.map +1 -1
- package/src/lib/services/sealing.service.d.ts +4 -4
- package/src/lib/services/sealing.service.d.ts.map +1 -1
- package/src/lib/services/sealing.service.js +2 -2
- package/src/lib/services/sealing.service.js.map +1 -1
- package/src/lib/stores/energyAccountStore.d.ts.map +1 -1
- package/src/lib/stores/energyAccountStore.js.map +1 -1
- package/src/lib/stores/energyLedger.d.ts.map +1 -1
- package/src/lib/stores/energyLedger.js.map +1 -1
- package/src/lib/stores/memoryBlockMetadataStore.d.ts +6 -5
- package/src/lib/stores/memoryBlockMetadataStore.d.ts.map +1 -1
- package/src/lib/stores/memoryBlockMetadataStore.js.map +1 -1
- package/src/lib/stores/memoryBlockStore.d.ts.map +1 -1
- package/src/lib/stores/memoryBlockStore.js +38 -22
- package/src/lib/stores/memoryBlockStore.js.map +1 -1
- package/src/lib/stores/messaging/memoryMessageMetadataStore.d.ts.map +1 -1
- package/src/lib/stores/messaging/memoryMessageMetadataStore.js.map +1 -1
- package/src/lib/stores/pooledMemoryBlockStore.d.ts.map +1 -1
- package/src/lib/stores/pooledMemoryBlockStore.js +17 -7
- package/src/lib/stores/pooledMemoryBlockStore.js.map +1 -1
|
@@ -30,10 +30,10 @@ class QuorumService {
|
|
|
30
30
|
this.documents = new simpleStore_1.SimpleStore();
|
|
31
31
|
}
|
|
32
32
|
/**
|
|
33
|
-
* Convert a
|
|
33
|
+
* Convert a TID to hex string format for internal storage keys
|
|
34
34
|
*/
|
|
35
|
-
|
|
36
|
-
return
|
|
35
|
+
tidToHex(id) {
|
|
36
|
+
return this.enhancedProvider.toString(id, 'hex');
|
|
37
37
|
}
|
|
38
38
|
// === Member Management ===
|
|
39
39
|
async addMember(member, metadata) {
|
|
@@ -42,7 +42,7 @@ class QuorumService {
|
|
|
42
42
|
const hexId = (0, ecies_lib_1.uint8ArrayToHex)(member.idBytes);
|
|
43
43
|
const now = new Date();
|
|
44
44
|
const quorumMember = {
|
|
45
|
-
id:
|
|
45
|
+
id: member.id,
|
|
46
46
|
publicKey: member.publicKey,
|
|
47
47
|
metadata,
|
|
48
48
|
isActive: true,
|
|
@@ -55,29 +55,33 @@ class QuorumService {
|
|
|
55
55
|
return quorumMember;
|
|
56
56
|
}
|
|
57
57
|
async removeMember(memberId) {
|
|
58
|
-
|
|
58
|
+
const hexId = this.tidToHex(memberId);
|
|
59
|
+
if (!this.members.has(hexId)) {
|
|
59
60
|
throw new quorumError_1.QuorumError(quorumErrorType_1.QuorumErrorType.MemberNotFound);
|
|
60
61
|
}
|
|
61
62
|
// Get the member and mark as inactive rather than deleting
|
|
62
63
|
// This preserves their ability to participate in existing documents
|
|
63
|
-
const member = this.members.get(
|
|
64
|
+
const member = this.members.get(hexId);
|
|
64
65
|
member.isActive = false;
|
|
65
66
|
member.updatedAt = new Date();
|
|
66
|
-
this.members.set(
|
|
67
|
+
this.members.set(hexId, member);
|
|
67
68
|
// Note: We don't remove from memberIds because the member still exists
|
|
68
69
|
}
|
|
69
70
|
async getMember(memberId) {
|
|
70
|
-
|
|
71
|
+
const hexId = this.tidToHex(memberId);
|
|
72
|
+
if (!this.members.has(hexId)) {
|
|
71
73
|
return null;
|
|
72
74
|
}
|
|
73
|
-
return this.members.get(
|
|
75
|
+
return this.members.get(hexId);
|
|
74
76
|
}
|
|
75
77
|
async listMembers() {
|
|
76
78
|
const result = [];
|
|
77
|
-
for (const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
79
|
+
for (const hexId of this.memberIds) {
|
|
80
|
+
if (this.members.has(hexId)) {
|
|
81
|
+
const member = this.members.get(hexId);
|
|
82
|
+
if (member && member.isActive) {
|
|
83
|
+
result.push(member);
|
|
84
|
+
}
|
|
81
85
|
}
|
|
82
86
|
}
|
|
83
87
|
return result;
|
|
@@ -91,20 +95,21 @@ class QuorumService {
|
|
|
91
95
|
// Get Member objects for the specified IDs
|
|
92
96
|
const members = [];
|
|
93
97
|
for (const memberId of memberIds) {
|
|
94
|
-
|
|
98
|
+
const hexId = this.tidToHex(memberId);
|
|
99
|
+
if (!this.membersByMember.has(hexId)) {
|
|
95
100
|
throw new quorumError_1.QuorumError(quorumErrorType_1.QuorumErrorType.MemberNotFound);
|
|
96
101
|
}
|
|
97
|
-
members.push(this.membersByMember.get(
|
|
102
|
+
members.push(this.membersByMember.get(hexId));
|
|
98
103
|
}
|
|
99
104
|
// Seal the document using the sealing service
|
|
100
105
|
const sealedDoc = await this.sealingService.quorumSeal(agent, document, members, sharesRequired);
|
|
101
106
|
// Store the sealed document
|
|
102
107
|
// Use the document's own enhancedProvider to convert the ID to bytes
|
|
103
|
-
const docHexId =
|
|
108
|
+
const docHexId = this.enhancedProvider.toString(sealedDoc.id, 'hex');
|
|
104
109
|
this.documents.set(docHexId, sealedDoc);
|
|
105
110
|
this.documentIds.add(docHexId);
|
|
106
111
|
return {
|
|
107
|
-
documentId:
|
|
112
|
+
documentId: sealedDoc.id,
|
|
108
113
|
encryptedData: sealedDoc.encryptedData,
|
|
109
114
|
memberIds,
|
|
110
115
|
sharesRequired: sealedDoc.sharesRequired,
|
|
@@ -113,60 +118,88 @@ class QuorumService {
|
|
|
113
118
|
}
|
|
114
119
|
// === Document Unsealing ===
|
|
115
120
|
async unsealDocument(documentId, membersWithPrivateKey) {
|
|
116
|
-
|
|
121
|
+
const hexId = this.tidToHex(documentId);
|
|
122
|
+
if (!this.documents.has(hexId)) {
|
|
117
123
|
throw new quorumError_1.QuorumError(quorumErrorType_1.QuorumErrorType.DocumentNotFound);
|
|
118
124
|
}
|
|
119
|
-
const doc = this.documents.get(
|
|
125
|
+
const doc = this.documents.get(hexId);
|
|
120
126
|
// Unseal using the sealing service
|
|
121
127
|
return await this.sealingService.quorumUnseal(doc, membersWithPrivateKey);
|
|
122
128
|
}
|
|
123
129
|
// === Document Management ===
|
|
124
130
|
async getDocument(documentId) {
|
|
125
|
-
|
|
131
|
+
const hexId = this.tidToHex(documentId);
|
|
132
|
+
if (!this.documents.has(hexId)) {
|
|
126
133
|
return null;
|
|
127
134
|
}
|
|
128
|
-
const doc = this.documents.get(
|
|
129
|
-
const creatorHexId = (0, ecies_lib_1.uint8ArrayToHex)(this.enhancedProvider.toBytes(doc.creator.id));
|
|
135
|
+
const doc = this.documents.get(hexId);
|
|
130
136
|
return {
|
|
131
|
-
id:
|
|
132
|
-
memberIds: doc.memberIDs
|
|
137
|
+
id: doc.id,
|
|
138
|
+
memberIds: doc.memberIDs,
|
|
133
139
|
sharesRequired: doc.sharesRequired,
|
|
134
140
|
createdAt: doc.dateCreated,
|
|
135
|
-
creatorId:
|
|
141
|
+
creatorId: doc.creator.id,
|
|
136
142
|
};
|
|
137
143
|
}
|
|
138
144
|
async listDocuments(memberId) {
|
|
139
145
|
const result = [];
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
if (
|
|
146
|
+
const memberHexId = memberId ? this.tidToHex(memberId) : undefined;
|
|
147
|
+
for (const docHexId of this.documentIds) {
|
|
148
|
+
if (this.documents.has(docHexId)) {
|
|
149
|
+
const doc = this.documents.get(docHexId);
|
|
143
150
|
// Filter by member if specified
|
|
144
|
-
if (!
|
|
145
|
-
result.push(
|
|
151
|
+
if (!memberHexId) {
|
|
152
|
+
result.push({
|
|
153
|
+
id: doc.id,
|
|
154
|
+
memberIds: doc.memberIDs,
|
|
155
|
+
sharesRequired: doc.sharesRequired,
|
|
156
|
+
createdAt: doc.dateCreated,
|
|
157
|
+
creatorId: doc.creator.id,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
const docMemberHexIds = doc.memberIDs.map((id) => this.enhancedProvider.toString(id, 'hex'));
|
|
162
|
+
if (docMemberHexIds.includes(memberHexId)) {
|
|
163
|
+
result.push({
|
|
164
|
+
id: doc.id,
|
|
165
|
+
memberIds: doc.memberIDs,
|
|
166
|
+
sharesRequired: doc.sharesRequired,
|
|
167
|
+
createdAt: doc.dateCreated,
|
|
168
|
+
creatorId: doc.creator.id,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
146
171
|
}
|
|
147
172
|
}
|
|
148
173
|
}
|
|
149
174
|
return result;
|
|
150
175
|
}
|
|
151
176
|
async deleteDocument(documentId) {
|
|
152
|
-
|
|
177
|
+
const hexId = this.tidToHex(documentId);
|
|
178
|
+
if (!this.documents.has(hexId)) {
|
|
153
179
|
throw new quorumError_1.QuorumError(quorumErrorType_1.QuorumErrorType.DocumentNotFound);
|
|
154
180
|
}
|
|
155
181
|
// Remove from tracking - the document remains in SimpleStore but won't be listed
|
|
156
|
-
this.documentIds.delete(
|
|
182
|
+
this.documentIds.delete(hexId);
|
|
157
183
|
}
|
|
158
184
|
async canUnlock(documentId, memberIds) {
|
|
159
|
-
|
|
185
|
+
const hexId = this.tidToHex(documentId);
|
|
186
|
+
if (!this.documents.has(hexId)) {
|
|
160
187
|
throw new quorumError_1.QuorumError(quorumErrorType_1.QuorumErrorType.DocumentNotFound);
|
|
161
188
|
}
|
|
162
|
-
const doc = this.documents.get(
|
|
163
|
-
const
|
|
189
|
+
const doc = this.documents.get(hexId);
|
|
190
|
+
const docMemberHexIds = doc.memberIDs.map((id) => this.enhancedProvider.toString(id, 'hex'));
|
|
191
|
+
// Convert provided memberIds to hex for comparison
|
|
192
|
+
const providedHexIds = memberIds.map((id) => this.tidToHex(id));
|
|
164
193
|
// Find which provided members are actually in the document
|
|
165
|
-
const
|
|
166
|
-
|
|
194
|
+
const validCount = providedHexIds.filter((id) => docMemberHexIds.includes(id)).length;
|
|
195
|
+
// Find missing members (doc members not in provided list)
|
|
196
|
+
const missingMembers = doc.memberIDs.filter((id) => {
|
|
197
|
+
const hex = this.enhancedProvider.toString(id, 'hex');
|
|
198
|
+
return !providedHexIds.includes(hex);
|
|
199
|
+
});
|
|
167
200
|
return {
|
|
168
|
-
canUnlock:
|
|
169
|
-
sharesProvided:
|
|
201
|
+
canUnlock: validCount >= doc.sharesRequired,
|
|
202
|
+
sharesProvided: validCount,
|
|
170
203
|
sharesRequired: doc.sharesRequired,
|
|
171
204
|
missingMembers,
|
|
172
205
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quorumService.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/services/quorumService.ts"],"names":[],"mappings":";;;AAAA,0DAOoC;AACpC,qEAAkE;AAClE,uDAAoD;AAUpD,uDAAoD;AACpD,uDAAmD;AACnD,yDAAqD;AAErD;;;;;;GAMG;AACH,MAAa,aAAa;
|
|
1
|
+
{"version":3,"file":"quorumService.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/services/quorumService.ts"],"names":[],"mappings":";;;AAAA,0DAOoC;AACpC,qEAAkE;AAClE,uDAAoD;AAUpD,uDAAoD;AACpD,uDAAmD;AACnD,yDAAqD;AAErD;;;;;;GAMG;AACH,MAAa,aAAa;IAiBxB,YACE,UAAwC,EACxC,YAAgC;QANlC,kEAAkE;QAC/C,cAAS,GAAmB,IAAI,GAAG,EAAE,CAAC;QACtC,gBAAW,GAAmB,IAAI,GAAG,EAAE,CAAC;QAMzD,sFAAsF;QACtF,+DAA+D;QAC/D,MAAM,eAAe,GAAG,kCAAe,CAAC,WAAW,EAAO,CAAC;QAC3D,IAAI,CAAC,gBAAgB,GAAG,UAAU,IAAI,eAAe,CAAC,UAAU,CAAC;QACjE,IAAI,CAAC,YAAY,GAAG,YAAY,IAAI,eAAe,CAAC,YAAY,CAAC;QACjE,IAAI,CAAC,cAAc,GAAG,IAAI,gCAAc,CACtC,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,gBAAgB,CACtB,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,yBAAW,EAAiC,CAAC;QAChE,IAAI,CAAC,eAAe,GAAG,IAAI,yBAAW,EAA0B,CAAC;QACjE,IAAI,CAAC,SAAS,GAAG,IAAI,yBAAW,EAAoC,CAAC;IACvE,CAAC;IAED;;OAEG;IACO,QAAQ,CAAC,EAAO;QACxB,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAc,CAAC;IAChE,CAAC;IAED,4BAA4B;IAE5B,KAAK,CAAC,SAAS,CACb,MAAmB,EACnB,QAA8B;QAE9B,qEAAqE;QACrE,6EAA6E;QAC7E,MAAM,KAAK,GAAG,IAAA,2BAAe,EAAC,MAAM,CAAC,OAAO,CAAc,CAAC;QAC3D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,MAAM,YAAY,GAAuB;YACvC,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,QAAQ;YACR,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;SACf,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACtC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAE1B,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAAa;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,yBAAW,CAAC,iCAAe,CAAC,cAAc,CAAC,CAAC;QACxD,CAAC;QAED,2DAA2D;QAC3D,oEAAoE;QACpE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;QACxB,MAAM,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAChC,uEAAuE;IACzE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAa;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,MAAM,GAAyB,EAAE,CAAC;QACxC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACvC,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBAC9B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,2BAA2B;IAE3B,KAAK,CAAC,YAAY,CAChB,KAAkB,EAClB,QAAW,EACX,SAAgB,EAChB,cAAuB;QAEvB,wBAAwB;QACxB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,yBAAW,CAAC,iCAAe,CAAC,gBAAgB,CAAC,CAAC;QAC1D,CAAC;QAED,2CAA2C;QAC3C,MAAM,OAAO,GAAkB,EAAE,CAAC;QAClC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,yBAAW,CAAC,iCAAe,CAAC,cAAc,CAAC,CAAC;YACxD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,8CAA8C;QAC9C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CACpD,KAAK,EACL,QAAQ,EACR,OAAO,EACP,cAAc,CACf,CAAC;QAEF,4BAA4B;QAC5B,qEAAqE;QACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAC7C,SAAS,CAAC,EAAE,EACZ,KAAK,CACO,CAAC;QACf,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE/B,OAAO;YACL,UAAU,EAAE,SAAS,CAAC,EAAE;YACxB,aAAa,EAAE,SAAS,CAAC,aAAa;YACtC,SAAS;YACT,cAAc,EAAE,SAAS,CAAC,cAAc;YACxC,SAAS,EAAE,SAAS,CAAC,WAAW;SACjC,CAAC;IACJ,CAAC;IAED,6BAA6B;IAE7B,KAAK,CAAC,cAAc,CAClB,UAAe,EACf,qBAAoC;QAEpC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,yBAAW,CAAC,iCAAe,CAAC,gBAAgB,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAEtC,mCAAmC;QACnC,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAC3C,GAAG,EACH,qBAAqB,CACtB,CAAC;IACJ,CAAC;IAED,8BAA8B;IAE9B,KAAK,CAAC,WAAW,CAAC,UAAe;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAEtC,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,SAAS,EAAE,GAAG,CAAC,WAAW;YAC1B,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE;SAC1B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAc;QAChC,MAAM,MAAM,GAA8B,EAAE,CAAC;QAC7C,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACnE,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACzC,gCAAgC;gBAChC,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,MAAM,CAAC,IAAI,CAAC;wBACV,EAAE,EAAE,GAAG,CAAC,EAAE;wBACV,SAAS,EAAE,GAAG,CAAC,SAAS;wBACxB,cAAc,EAAE,GAAG,CAAC,cAAc;wBAClC,SAAS,EAAE,GAAG,CAAC,WAAW;wBAC1B,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE;qBAC1B,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,MAAM,eAAe,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CACvC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAc,CAC/D,CAAC;oBACF,IAAI,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;wBAC1C,MAAM,CAAC,IAAI,CAAC;4BACV,EAAE,EAAE,GAAG,CAAC,EAAE;4BACV,SAAS,EAAE,GAAG,CAAC,SAAS;4BACxB,cAAc,EAAE,GAAG,CAAC,cAAc;4BAClC,SAAS,EAAE,GAAG,CAAC,WAAW;4BAC1B,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE;yBAC1B,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,UAAe;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,yBAAW,CAAC,iCAAe,CAAC,gBAAgB,CAAC,CAAC;QAC1D,CAAC;QAED,iFAAiF;QACjF,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,SAAS,CACb,UAAe,EACf,SAAgB;QAEhB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,yBAAW,CAAC,iCAAe,CAAC,gBAAgB,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,eAAe,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CACvC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAc,CAC/D,CAAC;QAEF,mDAAmD;QACnD,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAEhE,2DAA2D;QAC3D,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAC9C,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,CAC7B,CAAC,MAAM,CAAC;QAET,0DAA0D;QAC1D,MAAM,cAAc,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE;YACjD,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAc,CAAC;YACnE,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,SAAS,EAAE,UAAU,IAAI,GAAG,CAAC,cAAc;YAC3C,cAAc,EAAE,UAAU;YAC1B,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,cAAc;SACf,CAAC;IACJ,CAAC;CACF;AAhRD,sCAgRC"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @see Requirements 1-8, 10-13
|
|
9
9
|
*/
|
|
10
|
-
import { Member, PlatformID
|
|
10
|
+
import { Member, PlatformID } from '@digitaldefiance/ecies-lib';
|
|
11
11
|
import { QuorumOperationalMode } from '../enumerations/quorumOperationalMode';
|
|
12
12
|
import { IGossipService } from '../interfaces/availability/gossipService';
|
|
13
13
|
import { Proposal, ProposalInput } from '../interfaces/proposal';
|
|
@@ -156,7 +156,7 @@ export declare class QuorumStateMachine<TID extends PlatformID = Uint8Array> imp
|
|
|
156
156
|
* @param threshold - The configured quorum threshold
|
|
157
157
|
* @returns The new QuorumEpoch in Quorum mode
|
|
158
158
|
*/
|
|
159
|
-
createTransitionEpoch(memberIds:
|
|
159
|
+
createTransitionEpoch(memberIds: TID[], threshold: number): Promise<QuorumEpoch<TID>>;
|
|
160
160
|
/**
|
|
161
161
|
* Add a new member to the quorum.
|
|
162
162
|
*
|
|
@@ -184,7 +184,7 @@ export declare class QuorumStateMachine<TID extends PlatformID = Uint8Array> imp
|
|
|
184
184
|
* @throws QuorumError with InsufficientRemainingMembers if removal would drop below threshold
|
|
185
185
|
* @throws QuorumError with MemberNotFound if the member is not in the current epoch
|
|
186
186
|
*/
|
|
187
|
-
removeMember(memberId:
|
|
187
|
+
removeMember(memberId: TID, redistributionConfig?: Partial<RedistributionConfig>): Promise<QuorumEpoch<TID>>;
|
|
188
188
|
/**
|
|
189
189
|
* Maximum allowed description length for proposals.
|
|
190
190
|
*/
|
|
@@ -220,7 +220,7 @@ export declare class QuorumStateMachine<TID extends PlatformID = Uint8Array> imp
|
|
|
220
220
|
* @returns The created Proposal with assigned ID and status
|
|
221
221
|
* @throws QuorumError with MissingAttachment if IDENTITY_DISCLOSURE lacks attachmentCblId
|
|
222
222
|
*/
|
|
223
|
-
submitProposal(proposal: ProposalInput
|
|
223
|
+
submitProposal(proposal: ProposalInput): Promise<Proposal<TID>>;
|
|
224
224
|
/**
|
|
225
225
|
* Submit a vote on a pending proposal.
|
|
226
226
|
*
|
|
@@ -305,7 +305,7 @@ export declare class QuorumStateMachine<TID extends PlatformID = Uint8Array> imp
|
|
|
305
305
|
/**
|
|
306
306
|
* Get a proposal by its ID.
|
|
307
307
|
*/
|
|
308
|
-
getProposal(proposalId:
|
|
308
|
+
getProposal(proposalId: TID): Promise<Proposal<TID> | null>;
|
|
309
309
|
/**
|
|
310
310
|
* Seal a document using the appropriate mode (bootstrap or quorum).
|
|
311
311
|
*
|
|
@@ -315,7 +315,7 @@ export declare class QuorumStateMachine<TID extends PlatformID = Uint8Array> imp
|
|
|
315
315
|
*
|
|
316
316
|
* @throws QuorumError with TransitionInProgress if a transition ceremony is active
|
|
317
317
|
*/
|
|
318
|
-
sealDocument<T>(agent: Member<TID>, document: T, memberIds:
|
|
318
|
+
sealDocument<T>(agent: Member<TID>, document: T, memberIds: TID[], sharesRequired?: number): Promise<SealedDocumentResult<TID>>;
|
|
319
319
|
/**
|
|
320
320
|
* Unseal a document.
|
|
321
321
|
*
|
|
@@ -323,7 +323,7 @@ export declare class QuorumStateMachine<TID extends PlatformID = Uint8Array> imp
|
|
|
323
323
|
* comparison before delegating to SealingService.
|
|
324
324
|
* Returns generic error on failure without revealing which check failed (Req 8.4-8.6).
|
|
325
325
|
*/
|
|
326
|
-
unsealDocument<T>(documentId:
|
|
326
|
+
unsealDocument<T>(documentId: TID, membersWithPrivateKey: Member<TID>[]): Promise<T>;
|
|
327
327
|
/** Get the current epoch. */
|
|
328
328
|
getCurrentEpoch(): Promise<QuorumEpoch<TID>>;
|
|
329
329
|
/** Get a specific epoch by number. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quorumStateMachine.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/services/quorumStateMachine.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"quorumStateMachine.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/services/quorumStateMachine.ts"],"names":[],"mappings":"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"}
|
|
@@ -129,11 +129,12 @@ class QuorumStateMachine {
|
|
|
129
129
|
: threshold;
|
|
130
130
|
// Save members to database
|
|
131
131
|
for (const member of members) {
|
|
132
|
-
const hexId = (0, ecies_lib_1.uint8ArrayToHex)(member.idBytes);
|
|
133
132
|
const quorumMember = {
|
|
134
|
-
id:
|
|
133
|
+
id: member.id,
|
|
135
134
|
publicKey: member.publicKey,
|
|
136
|
-
metadata: {
|
|
135
|
+
metadata: {
|
|
136
|
+
name: `Member-${(0, ecies_lib_1.uint8ArrayToHex)(member.idBytes).substring(0, 8)}`,
|
|
137
|
+
},
|
|
137
138
|
isActive: true,
|
|
138
139
|
createdAt: new Date(),
|
|
139
140
|
updatedAt: new Date(),
|
|
@@ -141,7 +142,7 @@ class QuorumStateMachine {
|
|
|
141
142
|
await this.db.saveMember(quorumMember);
|
|
142
143
|
}
|
|
143
144
|
// Create epoch 1
|
|
144
|
-
const memberIds = members.map((m) =>
|
|
145
|
+
const memberIds = members.map((m) => m.id);
|
|
145
146
|
const epoch = {
|
|
146
147
|
epochNumber: 1,
|
|
147
148
|
memberIds,
|
|
@@ -290,9 +291,10 @@ class QuorumStateMachine {
|
|
|
290
291
|
*/
|
|
291
292
|
resolveMembersFromRecords(quorumMembers) {
|
|
292
293
|
return quorumMembers.map((qm) => {
|
|
293
|
-
|
|
294
|
+
const idHex = (0, ecies_lib_1.uint8ArrayToHex)(this.sealingService['enhancedProvider'].toBytes(qm.id));
|
|
295
|
+
return new ecies_lib_1.Member(this.sealingService.eciesServiceRef, ecies_lib_1.MemberType.User, qm.metadata.name || `Member-${idHex.substring(0, 8)}`, new ecies_lib_1.EmailString(`${idHex.substring(0, 8)}@quorum.local`), qm.publicKey, undefined, // no private key
|
|
294
296
|
undefined, // no wallet
|
|
295
|
-
|
|
297
|
+
qm.id);
|
|
296
298
|
});
|
|
297
299
|
}
|
|
298
300
|
/**
|
|
@@ -444,7 +446,7 @@ class QuorumStateMachine {
|
|
|
444
446
|
for (const doc of docs) {
|
|
445
447
|
const docHexId = (0, ecies_lib_1.uint8ArrayToHex)(doc.enhancedProvider.toBytes(doc.id));
|
|
446
448
|
// Save journal entry BEFORE modifying the document
|
|
447
|
-
const oldMemberHexIds = doc.memberIDs.map((mid) =>
|
|
449
|
+
const oldMemberHexIds = doc.memberIDs.map((mid) => doc.enhancedProvider.toString(mid, 'hex'));
|
|
448
450
|
const journalEntry = {
|
|
449
451
|
documentId: docHexId,
|
|
450
452
|
oldShares: new Map(doc.encryptedSharesByMemberId),
|
|
@@ -550,13 +552,13 @@ class QuorumStateMachine {
|
|
|
550
552
|
this.ensureNotTransitioning();
|
|
551
553
|
const hexId = (0, ecies_lib_1.uint8ArrayToHex)(member.idBytes);
|
|
552
554
|
// Check if member already exists
|
|
553
|
-
const existing = await this.db.getMember(
|
|
555
|
+
const existing = await this.db.getMember(member.id);
|
|
554
556
|
if (existing && existing.isActive) {
|
|
555
557
|
throw new quorumError_1.QuorumError(quorumErrorType_1.QuorumErrorType.MemberAlreadyExists);
|
|
556
558
|
}
|
|
557
559
|
// Save the new member
|
|
558
560
|
const quorumMember = {
|
|
559
|
-
id:
|
|
561
|
+
id: member.id,
|
|
560
562
|
publicKey: member.publicKey,
|
|
561
563
|
metadata,
|
|
562
564
|
isActive: true,
|
|
@@ -569,7 +571,7 @@ class QuorumStateMachine {
|
|
|
569
571
|
const previousThreshold = this.currentEpochData?.threshold ?? 1;
|
|
570
572
|
const previousMemberIds = this.currentEpochData?.memberIds ?? [];
|
|
571
573
|
// Build new member list
|
|
572
|
-
const newMemberIds = [...previousMemberIds,
|
|
574
|
+
const newMemberIds = [...previousMemberIds, member.id];
|
|
573
575
|
// Determine mode and threshold for the new epoch
|
|
574
576
|
const newMode = newMemberIds.length >= this.configuredThreshold
|
|
575
577
|
? quorumOperationalMode_1.QuorumOperationalMode.Quorum
|
|
@@ -585,7 +587,7 @@ class QuorumStateMachine {
|
|
|
585
587
|
epochNumber: newEpoch.epochNumber,
|
|
586
588
|
previousEpochNumber,
|
|
587
589
|
memberCount: newMemberIds.length,
|
|
588
|
-
},
|
|
590
|
+
}, member.id);
|
|
589
591
|
// Trigger batched share redistribution for documents in the previous epoch
|
|
590
592
|
if (previousEpochNumber > 0 && previousMemberIds.length > 0) {
|
|
591
593
|
const config = {
|
|
@@ -827,13 +829,13 @@ class QuorumStateMachine {
|
|
|
827
829
|
};
|
|
828
830
|
// Store as pending in the database
|
|
829
831
|
await this.db.saveProposal(fullProposal);
|
|
830
|
-
// Announce via gossip
|
|
832
|
+
// Announce via gossip (gossip layer uses serialized HexString format)
|
|
831
833
|
const gossipMetadata = {
|
|
832
|
-
proposalId: fullProposal.id,
|
|
834
|
+
proposalId: (0, ecies_lib_1.uint8ArrayToHex)(this.sealingService['enhancedProvider'].toBytes(fullProposal.id)),
|
|
833
835
|
description: fullProposal.description,
|
|
834
836
|
actionType: fullProposal.actionType,
|
|
835
837
|
actionPayload: JSON.stringify(fullProposal.actionPayload),
|
|
836
|
-
proposerMemberId: fullProposal.proposerMemberId,
|
|
838
|
+
proposerMemberId: (0, ecies_lib_1.uint8ArrayToHex)(this.sealingService['enhancedProvider'].toBytes(fullProposal.proposerMemberId)),
|
|
837
839
|
expiresAt: fullProposal.expiresAt,
|
|
838
840
|
requiredThreshold: fullProposal.requiredThreshold,
|
|
839
841
|
attachmentCblId: fullProposal.attachmentCblId,
|
|
@@ -907,10 +909,10 @@ class QuorumStateMachine {
|
|
|
907
909
|
createdAt: new Date(),
|
|
908
910
|
};
|
|
909
911
|
await this.db.saveVote(fullVote);
|
|
910
|
-
// Announce via gossip
|
|
912
|
+
// Announce via gossip (gossip layer uses serialized HexString format)
|
|
911
913
|
const gossipMetadata = {
|
|
912
|
-
proposalId: fullVote.proposalId,
|
|
913
|
-
voterMemberId: fullVote.voterMemberId,
|
|
914
|
+
proposalId: (0, ecies_lib_1.uint8ArrayToHex)(this.sealingService['enhancedProvider'].toBytes(fullVote.proposalId)),
|
|
915
|
+
voterMemberId: (0, ecies_lib_1.uint8ArrayToHex)(this.sealingService['enhancedProvider'].toBytes(fullVote.voterMemberId)),
|
|
914
916
|
decision: fullVote.decision,
|
|
915
917
|
comment: fullVote.comment,
|
|
916
918
|
};
|
|
@@ -1257,11 +1259,13 @@ class QuorumStateMachine {
|
|
|
1257
1259
|
const activeMembers = await this.db.listActiveMembers();
|
|
1258
1260
|
const memberMap = new Map();
|
|
1259
1261
|
for (const m of activeMembers) {
|
|
1260
|
-
|
|
1262
|
+
const key = (0, ecies_lib_1.uint8ArrayToHex)(this.sealingService['enhancedProvider'].toBytes(m.id));
|
|
1263
|
+
memberMap.set(key, m);
|
|
1261
1264
|
}
|
|
1262
1265
|
// Validate all requested member IDs exist
|
|
1263
1266
|
for (const mid of memberIds) {
|
|
1264
|
-
|
|
1267
|
+
const key = (0, ecies_lib_1.uint8ArrayToHex)(this.sealingService['enhancedProvider'].toBytes(mid));
|
|
1268
|
+
if (!memberMap.has(key)) {
|
|
1265
1269
|
throw new quorumError_1.QuorumError(quorumErrorType_1.QuorumErrorType.MemberNotFound);
|
|
1266
1270
|
}
|
|
1267
1271
|
}
|
|
@@ -1270,9 +1274,13 @@ class QuorumStateMachine {
|
|
|
1270
1274
|
? Math.max(memberIds.length, 1)
|
|
1271
1275
|
: (sharesRequired ?? this.currentEpochData.threshold);
|
|
1272
1276
|
// Resolve full Member objects for the requested member IDs
|
|
1273
|
-
const sealMembers =
|
|
1274
|
-
|
|
1275
|
-
|
|
1277
|
+
const sealMembers = [];
|
|
1278
|
+
for (const mid of memberIds) {
|
|
1279
|
+
const key = (0, ecies_lib_1.uint8ArrayToHex)(this.sealingService['enhancedProvider'].toBytes(mid));
|
|
1280
|
+
const m = memberMap.get(key);
|
|
1281
|
+
if (m)
|
|
1282
|
+
sealMembers.push(m);
|
|
1283
|
+
}
|
|
1276
1284
|
const resolvedMembers = this.resolveMembersFromRecords(sealMembers);
|
|
1277
1285
|
// Delegate to SealingService
|
|
1278
1286
|
let sealedDoc;
|
|
@@ -1282,11 +1290,10 @@ class QuorumStateMachine {
|
|
|
1282
1290
|
else {
|
|
1283
1291
|
sealedDoc = await this.sealingService.quorumSeal(agent, document, resolvedMembers, effectiveThreshold);
|
|
1284
1292
|
}
|
|
1285
|
-
const docHexId = (0, ecies_lib_1.uint8ArrayToHex)(sealedDoc.enhancedProvider.toBytes(sealedDoc.id));
|
|
1286
1293
|
// Save to database
|
|
1287
1294
|
await this.db.saveDocument(sealedDoc);
|
|
1288
1295
|
return {
|
|
1289
|
-
documentId:
|
|
1296
|
+
documentId: sealedDoc.id,
|
|
1290
1297
|
encryptedData: sealedDoc.encryptedData,
|
|
1291
1298
|
memberIds,
|
|
1292
1299
|
sharesRequired: sealedDoc.sharesRequired,
|