From ee64b81fa0949d8cf442478d1665d890e4a0872f Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Mon, 9 Dec 2024 11:53:36 +0100 Subject: [PATCH 01/16] Add optio to get subject ual --- .../v1-0-0-handle-get-request-command.js | 27 +++ .../sender/get-schedule-messages-command.js | 1 + .../protocols/get/sender/local-get-command.js | 181 ++++++++---------- .../v1.0.0/v1-0-0-get-request-command.js | 2 + src/constants/constants.js | 2 + .../v0/request-schema/get-schema-v0.js | 3 + .../http-api/v1/get-http-api-controller-v1.js | 3 +- src/controllers/rpc/get-rpc-controller.js | 1 + src/service/triple-store-service.js | 24 ++- 9 files changed, 141 insertions(+), 103 deletions(-) diff --git a/src/commands/protocols/get/receiver/v1.0.0/v1-0-0-handle-get-request-command.js b/src/commands/protocols/get/receiver/v1.0.0/v1-0-0-handle-get-request-command.js index 155f263b67..ebadd007fc 100644 --- a/src/commands/protocols/get/receiver/v1.0.0/v1-0-0-handle-get-request-command.js +++ b/src/commands/protocols/get/receiver/v1.0.0/v1-0-0-handle-get-request-command.js @@ -4,6 +4,7 @@ import { NETWORK_MESSAGE_TYPES, OPERATION_ID_STATUS, TRIPLES_VISIBILITY, + TRIPLE_STORE_REPOSITORY, } from '../../../../../constants/constants.js'; class HandleGetRequestCommand extends HandleProtocolMessageCommand { @@ -36,6 +37,7 @@ class HandleGetRequestCommand extends HandleProtocolMessageCommand { knowledgeAssetId, ual, includeMetadata, + subjectUAL, } = commandData; // if (paranetUAL) { @@ -97,7 +99,32 @@ class HandleGetRequestCommand extends HandleProtocolMessageCommand { // }; // } // } + if (subjectUAL) { + const subjectsUALs = await this.tripleStoreService.findAllSubjectsWithGraphNames( + TRIPLE_STORE_REPOSITORY.DKG, + ual, + ); + if (subjectUAL?.length) { + await this.operationService.markOperationAsCompleted( + operationId, + blockchain, + subjectsUALs, + [ + OPERATION_ID_STATUS.GET.GET_LOCAL_END, + OPERATION_ID_STATUS.GET.GET_END, + OPERATION_ID_STATUS.COMPLETED, + ], + ); + } + + return subjectUAL?.length + ? { messageType: NETWORK_MESSAGE_TYPES.RESPONSES.ACK, messageData: subjectsUALs } + : { + messageType: NETWORK_MESSAGE_TYPES.RESPONSES.NACK, + messageData: { errorMessage: `Unable to find assertion ${ual}` }, + }; + } const promises = []; this.operationIdService.emitChangeEvent( OPERATION_ID_STATUS.GET.GET_REMOTE_GET_ASSERTION_START, diff --git a/src/commands/protocols/get/sender/get-schedule-messages-command.js b/src/commands/protocols/get/sender/get-schedule-messages-command.js index d59bb68977..1433cbacc9 100644 --- a/src/commands/protocols/get/sender/get-schedule-messages-command.js +++ b/src/commands/protocols/get/sender/get-schedule-messages-command.js @@ -19,6 +19,7 @@ class GetScheduleMessagesCommand extends ProtocolScheduleMessagesCommand { knowledgeAssetId: command.data.knowledgeAssetId, includeMetadata: command.data.includeMetadata, ual: command.data.ual, + subjectUAL: command.data.subjectUAL, assetSync: command.data.assetSync, paranetSync: command.data.paranetSync, paranetTokenId: command.data.paranetTokenId, diff --git a/src/commands/protocols/get/sender/local-get-command.js b/src/commands/protocols/get/sender/local-get-command.js index c67e664ec1..d1b68d273c 100644 --- a/src/commands/protocols/get/sender/local-get-command.js +++ b/src/commands/protocols/get/sender/local-get-command.js @@ -3,6 +3,7 @@ import { OPERATION_ID_STATUS, ERROR_TYPE, TRIPLES_VISIBILITY, + TRIPLE_STORE_REPOSITORY, } from '../../../../constants/constants.js'; class LocalGetCommand extends Command { @@ -33,6 +34,8 @@ class LocalGetCommand extends Command { contract, knowledgeCollectionId, knowledgeAssetId, + subjectUAL, + ual, } = command.data; await this.operationIdService.updateOperationIdStatus( operationId, @@ -40,122 +43,104 @@ class LocalGetCommand extends Command { OPERATION_ID_STATUS.GET.GET_LOCAL_START, ); - // const response = {}; - - // if (paranetUAL) { - // const paranetRepository = this.paranetService.getParanetRepositoryName(paranetUAL); - - // const ual = this.ualService.deriveUAL(blockchain, contract, tokenId); - // const syncedAssetRecord = - // await this.repositoryModuleManager.getParanetSyncedAssetRecordByUAL(ual); - - // const nquads = await this.tripleStoreService.getAssertion( - // paranetRepository, - // syncedAssetRecord.publicAssertionId, - // ); - - // let privateNquads; - // if (syncedAssetRecord.privateAssertionId) { - // privateNquads = await this.tripleStoreService.getAssertion( - // paranetRepository, - // syncedAssetRecord.privateAssertionId, - // ); - // } - - // if (nquads?.length) { - // response.assertion = nquads; - // if (privateNquads?.length) { - // response.privateAssertion = privateNquads; - // } - // } else { - // this.handleError( - // operationId, - // blockchain, - // `Couldn't find locally asset with ${ual} in paranet ${paranetUAL}`, - // this.errorType, - // ); - // } - - // await this.operationService.markOperationAsCompleted( - // operationId, - // blockchain, - // response, - // [ - // OPERATION_ID_STATUS.GET.GET_LOCAL_END, - // OPERATION_ID_STATUS.GET.GET_END, - // OPERATION_ID_STATUS.COMPLETED, - // ], - // ); - - // return Command.empty(); - // } - - // else { - - const promises = []; - this.operationIdService.emitChangeEvent( - OPERATION_ID_STATUS.GET.GET_LOCAL_GET_ASSERTION_START, - operationId, - blockchain, - ); - const assertionPromise = this.tripleStoreService - .getAssertion( + if (subjectUAL) { + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.GET.GET_LOCAL_GET_SUBJECT_UAL_START, + operationId, blockchain, - contract, - knowledgeCollectionId, - knowledgeAssetId, - TRIPLES_VISIBILITY.ALL, - ) - .then((result) => { - this.operationIdService.emitChangeEvent( - OPERATION_ID_STATUS.GET.GET_LOCAL_GET_ASSERTION_END, + ); + const subjectsUALs = await this.tripleStoreService.findAllSubjectsWithGraphNames( + TRIPLE_STORE_REPOSITORY.DKG, + ual, + ); + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.GET.GET_LOCAL_GET_SUBJECT_UAL_START, + operationId, + blockchain, + ); + if (subjectsUALs?.length) { + await this.operationService.markOperationAsCompleted( operationId, blockchain, + subjectsUALs, + [ + OPERATION_ID_STATUS.GET.GET_LOCAL_END, + OPERATION_ID_STATUS.GET.GET_END, + OPERATION_ID_STATUS.COMPLETED, + ], ); - return result; - }); - promises.push(assertionPromise); - - if (includeMetadata) { + return Command.empty(); + } + } else { + const promises = []; this.operationIdService.emitChangeEvent( - OPERATION_ID_STATUS.GET.GET_LOCAL_GET_ASSERTION_METADATA_START, + OPERATION_ID_STATUS.GET.GET_LOCAL_GET_ASSERTION_START, operationId, blockchain, ); - const metadataPromise = this.tripleStoreService - .getAssertionMetadata(blockchain, contract, knowledgeCollectionId, knowledgeAssetId) + const assertionPromise = this.tripleStoreService + .getAssertion( + blockchain, + contract, + knowledgeCollectionId, + knowledgeAssetId, + TRIPLES_VISIBILITY.ALL, + ) .then((result) => { this.operationIdService.emitChangeEvent( - OPERATION_ID_STATUS.GET.GET_LOCAL_GET_ASSERTION_METADATA_END, + OPERATION_ID_STATUS.GET.GET_LOCAL_GET_ASSERTION_END, operationId, blockchain, ); return result; }); - promises.push(metadataPromise); - } + promises.push(assertionPromise); - const [assertion, metadata] = await Promise.all(promises); - - const responseData = { - assertion, - ...(includeMetadata && metadata && { metadata }), - }; - if (assertion.length) { - await this.operationService.markOperationAsCompleted( - operationId, - blockchain, - responseData, - [ - OPERATION_ID_STATUS.GET.GET_LOCAL_END, - OPERATION_ID_STATUS.GET.GET_END, - OPERATION_ID_STATUS.COMPLETED, - ], - ); + if (includeMetadata) { + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.GET.GET_LOCAL_GET_ASSERTION_METADATA_START, + operationId, + blockchain, + ); + const metadataPromise = this.tripleStoreService + .getAssertionMetadata( + blockchain, + contract, + knowledgeCollectionId, + knowledgeAssetId, + ) + .then((result) => { + this.operationIdService.emitChangeEvent( + OPERATION_ID_STATUS.GET.GET_LOCAL_GET_ASSERTION_METADATA_END, + operationId, + blockchain, + ); + return result; + }); + promises.push(metadataPromise); + } + + const [assertion, metadata] = await Promise.all(promises); + + const responseData = { + assertion, + ...(includeMetadata && metadata && { metadata }), + }; + if (assertion.length) { + await this.operationService.markOperationAsCompleted( + operationId, + blockchain, + responseData, + [ + OPERATION_ID_STATUS.GET.GET_LOCAL_END, + OPERATION_ID_STATUS.GET.GET_END, + OPERATION_ID_STATUS.COMPLETED, + ], + ); - return Command.empty(); + return Command.empty(); + } } - // } await this.operationIdService.updateOperationIdStatus( operationId, diff --git a/src/commands/protocols/get/sender/v1.0.0/v1-0-0-get-request-command.js b/src/commands/protocols/get/sender/v1.0.0/v1-0-0-get-request-command.js index 491fce96a7..d4514a0253 100644 --- a/src/commands/protocols/get/sender/v1.0.0/v1-0-0-get-request-command.js +++ b/src/commands/protocols/get/sender/v1.0.0/v1-0-0-get-request-command.js @@ -45,6 +45,7 @@ class GetRequestCommand extends ProtocolRequestCommand { knowledgeAssetId, includeMetadata, ual, + subjectUAL, hashFunctionId, paranetUAL, paranetId, @@ -58,6 +59,7 @@ class GetRequestCommand extends ProtocolRequestCommand { knowledgeAssetId, includeMetadata, ual, + subjectUAL, hashFunctionId, proximityScoreFunctionsPairId, paranetUAL, diff --git a/src/constants/constants.js b/src/constants/constants.js index 9b3297680e..3dea7cb85f 100644 --- a/src/constants/constants.js +++ b/src/constants/constants.js @@ -713,6 +713,8 @@ export const OPERATION_ID_STATUS = { GET_FIND_NODES_PROCESS_FOUND_NODES_START: 'GET_FIND_NODES_PROCESS_FOUND_NODES_START', GET_FIND_NODES_PROCESS_FOUND_NODES_END: 'GET_FIND_NODES_PROCESS_FOUND_NODES_END', GET_END: 'GET_END', + GET_LOCAL_GET_SUBJECT_UAL_START: 'GET_LOCAL_GET_SUBJECT_UAL_START', + GET_LOCAL_GET_SUBJECT_UAL_END: 'GET_LOCAL_GET_SUBJECT_UAL_END', }, COMMIT_PROOF: { EPOCH_CHECK_START: 'EPOCH_CHECK_START', diff --git a/src/controllers/http-api/v0/request-schema/get-schema-v0.js b/src/controllers/http-api/v0/request-schema/get-schema-v0.js index 6de06ffc35..135701863d 100644 --- a/src/controllers/http-api/v0/request-schema/get-schema-v0.js +++ b/src/controllers/http-api/v0/request-schema/get-schema-v0.js @@ -18,5 +18,8 @@ export default () => ({ paranetUAL: { type: ['string', 'null'], }, + subjectUAL: { + type: 'boolean', + }, }, }); diff --git a/src/controllers/http-api/v1/get-http-api-controller-v1.js b/src/controllers/http-api/v1/get-http-api-controller-v1.js index 585de20fb6..1908db5c85 100644 --- a/src/controllers/http-api/v1/get-http-api-controller-v1.js +++ b/src/controllers/http-api/v1/get-http-api-controller-v1.js @@ -41,7 +41,7 @@ class GetController extends BaseController { let tokenId; let contract; try { - const { id, paranetUAL } = req.body; + const { id, paranetUAL, subjectUAL } = req.body; ({ blockchain, tokenId, contract } = this.ualService.resolveUAL(id)); const hashFunctionId = req.body.hashFunctionId ?? CONTENT_ASSET_HASH_FUNCTION_ID; @@ -65,6 +65,7 @@ class GetController extends BaseController { paranetUAL, tokenId, contract, + subjectUAL, }, transactional: false, }); diff --git a/src/controllers/rpc/get-rpc-controller.js b/src/controllers/rpc/get-rpc-controller.js index 901dd7bfc6..66bfd1bb63 100644 --- a/src/controllers/rpc/get-rpc-controller.js +++ b/src/controllers/rpc/get-rpc-controller.js @@ -38,6 +38,7 @@ class GetController extends BaseController { knowledgeCollectionId: message.data.knowledgeCollectionId, knowledgeAssetId: message.data.knowledgeAssetId, includeMetadata: message.data.includeMetadata, + subjectUAL: message.data.subjectUAL, hashFunctionId: message.data.hashFunctionId ?? CONTENT_ASSET_HASH_FUNCTION_ID, state: message.data.state ?? DEFAULT_GET_STATE, paranetUAL: message.data.paranetUAL, diff --git a/src/service/triple-store-service.js b/src/service/triple-store-service.js index cef1e8e0e2..73954ecd58 100644 --- a/src/service/triple-store-service.js +++ b/src/service/triple-store-service.js @@ -412,10 +412,7 @@ class TripleStoreService { async moveToHistoricAndDeleteAssertion(ual, stateIndex) { // Find all named graph that exist for given UAL - const ualNamedGraphs = this.tripleStoreModuleManager.findAllNamedGraphsByUAL( - TRIPLE_STORE_REPOSITORY.DKG, - ual, - ); + const ualNamedGraphs = await this.findAllNamedGraphsByUAL(TRIPLE_STORE_REPOSITORY.DKG, ual); let stateNamedGraphExistInHistoric = []; const ulaNamedGraphsWithState = []; const checkPromises = []; @@ -427,6 +424,7 @@ class TripleStoreService { ulaNamedGraphsWithState.push(ulaNamedGraphWithState); checkPromises.push( this.tripleStoreModuleManager.namedGraphExist( + this.repositoryImplementations[TRIPLE_STORE_REPOSITORY.DKG_HISTORIC], TRIPLE_STORE_REPOSITORY.DKG_HISTORIC, ulaNamedGraphWithState, ), @@ -439,10 +437,12 @@ class TripleStoreService { for (const [index, promiseResult] of stateNamedGraphExistInHistoric.entries()) { if (!promiseResult) { const nquads = await this.tripleStoreModuleManager.getAssertionFromNamedGraph( + this.repositoryImplementations[TRIPLE_STORE_REPOSITORY.DKG], TRIPLE_STORE_REPOSITORY.DKG, ualNamedGraphs[index], ); await this.tripleStoreModuleManager.insetAssertionInNamedGraph( + this.repositoryImplementations[TRIPLE_STORE_REPOSITORY.DKG_HISTORIC], TRIPLE_STORE_REPOSITORY.DKG_HISTORIC, ulaNamedGraphsWithState[index], nquads, @@ -458,6 +458,22 @@ class TripleStoreService { return ualNamedGraphs; } + async findAllNamedGraphsByUAL(repositories, ual) { + return this.tripleStoreModuleManager.findAllNamedGraphsByUAL( + this.repositoryImplementations[repositories], + repositories, + ual, + ); + } + + async findAllSubjectsWithGraphNames(repositories, ual) { + return this.tripleStoreModuleManager.findAllSubjectsWithGraphNames( + this.repositoryImplementations[repositories], + repositories, + ual, + ); + } + async getKnowledgeAssetNamedGraph(repository, ual, visibility) { return this.tripleStoreModuleManager.getKnowledgeAssetNamedGraph( this.repositoryImplementations[repository], From 9effc0fb8e86bb0d495f463a1ee2f905f01a5b90 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Mon, 9 Dec 2024 14:29:07 +0100 Subject: [PATCH 02/16] wip --- src/service/triple-store-service.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/service/triple-store-service.js b/src/service/triple-store-service.js index 73954ecd58..fd801f3d6c 100644 --- a/src/service/triple-store-service.js +++ b/src/service/triple-store-service.js @@ -61,7 +61,7 @@ class TripleStoreService { ); const publicKnowledgeAssetsUALs = []; - for (let i = 1; i <= (triples.public ?? triples).length; i += 1) { + for (let i = 1; i <= publicKnowledgeAssetsTriples.length; i += 1) { publicKnowledgeAssetsUALs.push(`${knowledgeCollectionUAL}/${i}`); } const promises = []; From 0693daeafca0ef891c22c44515000b3e036e49e5 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Mon, 9 Dec 2024 16:51:45 +0100 Subject: [PATCH 03/16] wip --- .../v1-0-0-handle-get-request-command.js | 4 ++-- .../get/sender/get-find-shard-command.js | 2 +- .../http-api/v0/get-http-api-controller-v0.js | 3 ++- .../implementation/ot-triple-store.js | 18 +++++++++--------- .../triple-store-module-manager.js | 1 - src/service/operation-id-service.js | 7 +++++-- 6 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/commands/protocols/get/receiver/v1.0.0/v1-0-0-handle-get-request-command.js b/src/commands/protocols/get/receiver/v1.0.0/v1-0-0-handle-get-request-command.js index ebadd007fc..c7b54c2490 100644 --- a/src/commands/protocols/get/receiver/v1.0.0/v1-0-0-handle-get-request-command.js +++ b/src/commands/protocols/get/receiver/v1.0.0/v1-0-0-handle-get-request-command.js @@ -105,7 +105,7 @@ class HandleGetRequestCommand extends HandleProtocolMessageCommand { ual, ); - if (subjectUAL?.length) { + if (subjectsUALs?.length) { await this.operationService.markOperationAsCompleted( operationId, blockchain, @@ -118,7 +118,7 @@ class HandleGetRequestCommand extends HandleProtocolMessageCommand { ); } - return subjectUAL?.length + return subjectsUALs?.length ? { messageType: NETWORK_MESSAGE_TYPES.RESPONSES.ACK, messageData: subjectsUALs } : { messageType: NETWORK_MESSAGE_TYPES.RESPONSES.NACK, diff --git a/src/commands/protocols/get/sender/get-find-shard-command.js b/src/commands/protocols/get/sender/get-find-shard-command.js index f2441793c8..799f62d0b3 100644 --- a/src/commands/protocols/get/sender/get-find-shard-command.js +++ b/src/commands/protocols/get/sender/get-find-shard-command.js @@ -20,7 +20,7 @@ class GetFindShardCommand extends FindShardCommand { getOperationCommandSequence(nodePartOfShard) { const sequence = []; if (nodePartOfShard) { - sequence.push('localGetCommand'); + // sequence.push('localGetCommand'); } sequence.push('networkGetCommand'); diff --git a/src/controllers/http-api/v0/get-http-api-controller-v0.js b/src/controllers/http-api/v0/get-http-api-controller-v0.js index a106e3a7de..a50b911698 100644 --- a/src/controllers/http-api/v0/get-http-api-controller-v0.js +++ b/src/controllers/http-api/v0/get-http-api-controller-v0.js @@ -150,7 +150,7 @@ class GetController extends BaseController { let knowledgeCollectionId; let knowledgeAssetId; try { - const { id, paranetUAL, includeMetadata } = req.body; + const { id, paranetUAL, includeMetadata, subjectUAL } = req.body; ({ blockchain, contract, knowledgeCollectionId, knowledgeAssetId } = this.ualService.resolveUAL(id)); const hashFunctionId = req.body.hashFunctionId ?? CONTENT_ASSET_HASH_FUNCTION_ID; @@ -173,6 +173,7 @@ class GetController extends BaseController { contract, knowledgeCollectionId, knowledgeAssetId, + subjectUAL, operationId, hashFunctionId, paranetUAL, diff --git a/src/modules/triple-store/implementation/ot-triple-store.js b/src/modules/triple-store/implementation/ot-triple-store.js index 2051af4f3e..bbe49e49d0 100644 --- a/src/modules/triple-store/implementation/ot-triple-store.js +++ b/src/modules/triple-store/implementation/ot-triple-store.js @@ -476,19 +476,19 @@ class OtTripleStore { FILTER(STRSTARTS(STR(?g), "${ual}")) }`; - this.select(repository, query); + return this.select(repository, query); } async findAllSubjectsWithGraphNames(repository, ual) { const query = ` - SELECT DISTINCT ?s ?g - WHERE { - GRAPH ?g { - ?s ?p ?o - } - FILTER(STRSTARTS(STR(?g), "${ual}")) - }`; - this.select(repository, query); + SELECT DISTINCT ?s ?g + WHERE { + GRAPH ?g { + ?s ?p ?o + } + FILTER(STRSTARTS(STR(?g), "${ual}") && STRENDS(STR(?g), "${TRIPLES_VISIBILITY.PUBLIC}")) + }`; + return this.select(repository, query); } async construct(repository, query) { diff --git a/src/modules/triple-store/triple-store-module-manager.js b/src/modules/triple-store/triple-store-module-manager.js index 7345b7ada5..aed671d334 100644 --- a/src/modules/triple-store/triple-store-module-manager.js +++ b/src/modules/triple-store/triple-store-module-manager.js @@ -259,7 +259,6 @@ class TripleStoreModuleManager extends BaseModuleManager { async findAllSubjectsWithGraphNames(implementationName, repository, ual) { if (this.getImplementation(implementationName)) { return this.getImplementation(implementationName).module.findAllSubjectsWithGraphNames( - implementationName, repository, ual, ); diff --git a/src/service/operation-id-service.js b/src/service/operation-id-service.js index 832ebf5edc..66e21f6ce9 100644 --- a/src/service/operation-id-service.js +++ b/src/service/operation-id-service.js @@ -71,8 +71,11 @@ class OperationIdService { response.data = JSON.stringify({ errorMessage, errorType }); await this.removeOperationIdCache(operationId); } - - this.emitChangeEvent(status, operationId, blockchain, errorMessage, errorType); + if (errorType) { + this.emitChangeEvent(errorType, operationId, blockchain, errorMessage, errorType); + } else { + this.emitChangeEvent(status, operationId, blockchain, errorMessage, errorType); + } await this.repositoryModuleManager.updateOperationIdRecord(response, operationId); } From 0558fe1a1b682cb164de8df29de0ecb4a8ec6779 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Wed, 11 Dec 2024 18:43:05 +0100 Subject: [PATCH 04/16] Add parsing --- .../protocols/get/sender/local-get-command.js | 6 ++--- .../implementation/ot-triple-store.js | 3 ++- src/service/triple-store-service.js | 23 ++++++++++++++++++- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/commands/protocols/get/sender/local-get-command.js b/src/commands/protocols/get/sender/local-get-command.js index d1b68d273c..601bf7b8d6 100644 --- a/src/commands/protocols/get/sender/local-get-command.js +++ b/src/commands/protocols/get/sender/local-get-command.js @@ -49,7 +49,7 @@ class LocalGetCommand extends Command { operationId, blockchain, ); - const subjectsUALs = await this.tripleStoreService.findAllSubjectsWithGraphNames( + const subjectUALPairs = await this.tripleStoreService.findAllSubjectsWithGraphNames( TRIPLE_STORE_REPOSITORY.DKG, ual, ); @@ -58,11 +58,11 @@ class LocalGetCommand extends Command { operationId, blockchain, ); - if (subjectsUALs?.length) { + if (subjectUALPairs?.length) { await this.operationService.markOperationAsCompleted( operationId, blockchain, - subjectsUALs, + subjectUALPairs, [ OPERATION_ID_STATUS.GET.GET_LOCAL_END, OPERATION_ID_STATUS.GET.GET_END, diff --git a/src/modules/triple-store/implementation/ot-triple-store.js b/src/modules/triple-store/implementation/ot-triple-store.js index bbe49e49d0..150764ef5c 100644 --- a/src/modules/triple-store/implementation/ot-triple-store.js +++ b/src/modules/triple-store/implementation/ot-triple-store.js @@ -487,7 +487,8 @@ class OtTripleStore { ?s ?p ?o } FILTER(STRSTARTS(STR(?g), "${ual}") && STRENDS(STR(?g), "${TRIPLES_VISIBILITY.PUBLIC}")) - }`; + } + ORDER BY ?g`; return this.select(repository, query); } diff --git a/src/service/triple-store-service.js b/src/service/triple-store-service.js index 7646580961..4773d6df06 100644 --- a/src/service/triple-store-service.js +++ b/src/service/triple-store-service.js @@ -5,6 +5,7 @@ import { BASE_NAMED_GRAPHS, TRIPLE_STORE_REPOSITORY, TRIPLES_VISIBILITY, + PRIVATE_HASH_SUBJECT_PREFIX, } from '../constants/constants.js'; class TripleStoreService { @@ -466,11 +467,31 @@ class TripleStoreService { } async findAllSubjectsWithGraphNames(repositories, ual) { - return this.tripleStoreModuleManager.findAllSubjectsWithGraphNames( + const unparsedSubjectUALPairs = this.tripleStoreModuleManager.findAllSubjectsWithGraphNames( this.repositoryImplementations[repositories], repositories, ual, ); + + const subjectUALPairs = Array.from( + unparsedSubjectUALPairs.reduce((map, { s, g }) => { + let pair = { subject: null, subjectHash: null, ual: g }; + if (map.has(g)) { + pair = map.get(g); + } + if (s) { + if (s.startsWith(`<${PRIVATE_HASH_SUBJECT_PREFIX}`)) { + pair.subjectHash = s; + } else { + pair.subject = s; + } + } + map.set(g, pair); + return map; + }, new Map()), + ).values(); + + return subjectUALPairs; } async getKnowledgeAssetNamedGraph(repository, ual, visibility) { From 8846afd77bd2f0ef4091ed0c9f3580471b0933bd Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Wed, 11 Dec 2024 20:06:47 +0100 Subject: [PATCH 05/16] Get private --- .../protocols/get/sender/local-get-command.js | 4 +++- .../implementation/ot-triple-store.js | 11 +++++++++ .../triple-store-module-manager.js | 8 +++++++ src/service/triple-store-service.js | 24 +++++++++++-------- 4 files changed, 36 insertions(+), 11 deletions(-) diff --git a/src/commands/protocols/get/sender/local-get-command.js b/src/commands/protocols/get/sender/local-get-command.js index 601bf7b8d6..43c1fc3cec 100644 --- a/src/commands/protocols/get/sender/local-get-command.js +++ b/src/commands/protocols/get/sender/local-get-command.js @@ -49,6 +49,7 @@ class LocalGetCommand extends Command { operationId, blockchain, ); + // TODO: Rename this to better reflect content const subjectUALPairs = await this.tripleStoreService.findAllSubjectsWithGraphNames( TRIPLE_STORE_REPOSITORY.DKG, ual, @@ -58,12 +59,13 @@ class LocalGetCommand extends Command { operationId, blockchain, ); - if (subjectUALPairs?.length) { + if (subjectUALPairs.subjectUALPairs?.length) { await this.operationService.markOperationAsCompleted( operationId, blockchain, subjectUALPairs, [ + OPERATION_ID_STATUS.GET.GET_LOCAL_GET_SUBJECT_UAL_START, OPERATION_ID_STATUS.GET.GET_LOCAL_END, OPERATION_ID_STATUS.GET.GET_END, OPERATION_ID_STATUS.COMPLETED, diff --git a/src/modules/triple-store/implementation/ot-triple-store.js b/src/modules/triple-store/implementation/ot-triple-store.js index 150764ef5c..00e6cc55b2 100644 --- a/src/modules/triple-store/implementation/ot-triple-store.js +++ b/src/modules/triple-store/implementation/ot-triple-store.js @@ -492,6 +492,17 @@ class OtTripleStore { return this.select(repository, query); } + async getKCPrivateAssertionIdentifierTriple(repository, ual) { + const query = ` + CONSTRUCT {?s ?p ?o .} + WHERE { + GRAPH <${ual}/public> { + ?s ?p ?o + } + }`; + return this.construct(repository, query); + } + async construct(repository, query) { return this._executeQuery(repository, query, MEDIA_TYPES.N_QUADS); } diff --git a/src/modules/triple-store/triple-store-module-manager.js b/src/modules/triple-store/triple-store-module-manager.js index aed671d334..8aea067642 100644 --- a/src/modules/triple-store/triple-store-module-manager.js +++ b/src/modules/triple-store/triple-store-module-manager.js @@ -265,6 +265,14 @@ class TripleStoreModuleManager extends BaseModuleManager { } } + async getKCPrivateAssertionIdentifierTriple(implementationName, repository, ual) { + if (this.getImplementation(implementationName)) { + return this.getImplementation( + implementationName, + ).module.getKCPrivateAssertionIdentifierTriple(repository, ual); + } + } + getName() { return 'tripleStore'; } diff --git a/src/service/triple-store-service.js b/src/service/triple-store-service.js index 4773d6df06..223d78ed94 100644 --- a/src/service/triple-store-service.js +++ b/src/service/triple-store-service.js @@ -458,20 +458,21 @@ class TripleStoreService { return ualNamedGraphs; } - async findAllNamedGraphsByUAL(repositories, ual) { + async findAllNamedGraphsByUAL(repository, ual) { return this.tripleStoreModuleManager.findAllNamedGraphsByUAL( - this.repositoryImplementations[repositories], - repositories, + this.repositoryImplementations[repository], + repository, ual, ); } - async findAllSubjectsWithGraphNames(repositories, ual) { - const unparsedSubjectUALPairs = this.tripleStoreModuleManager.findAllSubjectsWithGraphNames( - this.repositoryImplementations[repositories], - repositories, - ual, - ); + async findAllSubjectsWithGraphNames(repository, ual) { + const unparsedSubjectUALPairs = + await this.tripleStoreModuleManager.findAllSubjectsWithGraphNames( + this.repositoryImplementations[repository], + repository, + ual, + ); const subjectUALPairs = Array.from( unparsedSubjectUALPairs.reduce((map, { s, g }) => { @@ -491,7 +492,10 @@ class TripleStoreService { }, new Map()), ).values(); - return subjectUALPairs; + const privateMerkleRootTriple = + await this.tripleStoreService.getKCPrivateAssertionIdentifierTriple(repository, ual); + + return { subjectUALPairs, privateMerkleRootTriple }; } async getKnowledgeAssetNamedGraph(repository, ual, visibility) { From 70051314491c352ace295462c734c3a0420c91e1 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Wed, 11 Dec 2024 21:45:03 +0100 Subject: [PATCH 06/16] Add ual pairing for old and new --- src/service/triple-store-service.js | 105 +++++++++++++++++++--------- 1 file changed, 71 insertions(+), 34 deletions(-) diff --git a/src/service/triple-store-service.js b/src/service/triple-store-service.js index 223d78ed94..bfb2a55f83 100644 --- a/src/service/triple-store-service.js +++ b/src/service/triple-store-service.js @@ -182,38 +182,69 @@ class TripleStoreService { } async insertUpdatedKnowledgeCollection(preUpdateUalNamedGraphs, ual, triples, firstNewKAIndex) { - const preUpdateSubjectUalMap = new Map( - preUpdateUalNamedGraphs.map((entry) => [ - entry.subject, - entry.g.split('/').slice(0, -1).join('/'), - ]), - ); - const publicKnowledgeAssetsTriples = this.dataService.groupTriplesBySubject( triples.public ?? triples, ); - - const publicKnowledgeAssetsSubjects = publicKnowledgeAssetsTriples.map( + // subject or hashedSubject + const publicKnowledgeAssetTriplesSubjects = publicKnowledgeAssetsTriples.map( ([triple]) => triple.split(' ')[0], ); - const publicKnowledgeAssetsStatesUALs = []; + + const { subjectUALPairs } = preUpdateUalNamedGraphs; + + const preUpdateSubjectUALMap = new Map(); + const preUpdateSubjectHashUALMap = new Map(); + + subjectUALPairs.forEach((pair) => { + if (pair.subject) { + preUpdateSubjectUALMap.set(pair.subject, pair.UAL); + } + if (pair.privateSubjectHash) { + preUpdateSubjectHashUALMap.set(pair.privateSubjectHash, pair.UAL); + } + }); + for (const { publicPreUpdateSubject, ual: preUpdateUal } of preUpdateSubjectUALMap) { + if (!preUpdateSubjectHashUALMap.has(publicPreUpdateSubject)) { + preUpdateSubjectHashUALMap.set( + `<${PRIVATE_HASH_SUBJECT_PREFIX}${this.dataService.generateHashFromString( + publicPreUpdateSubject.slice(1, -1), + )}>`, + preUpdateUal, + ); + } + } + + const publicKnowledgeAssetsUALs = []; + // From event we get firstNewKAIndex let newKnowledgeAssetId = firstNewKAIndex; - for (const subject of publicKnowledgeAssetsSubjects) { - if (preUpdateSubjectUalMap.has(subject)) { - publicKnowledgeAssetsStatesUALs.push(preUpdateSubjectUalMap.get(subject)); + for (const subject of publicKnowledgeAssetTriplesSubjects) { + // Rewrite code so its node done every time + const hashedSubject = `<${PRIVATE_HASH_SUBJECT_PREFIX}${this.dataService.generateHashFromString( + subject, + )}>`; + if ( + subject.startsWith(`<${PRIVATE_HASH_SUBJECT_PREFIX}`) && + preUpdateSubjectHashUALMap.has(subject) + ) { + publicKnowledgeAssetsUALs.push(preUpdateSubjectHashUALMap.get(subject)); + } else if (preUpdateSubjectUALMap.has(subject)) { + publicKnowledgeAssetsUALs.push(preUpdateSubjectUALMap.get(subject)); + } else if (preUpdateSubjectHashUALMap.has(hashedSubject)) { + publicKnowledgeAssetsUALs.push( + preUpdateSubjectHashUALMap.get(preUpdateSubjectHashUALMap), + ); } else { - publicKnowledgeAssetsStatesUALs.push(`${ual}/${newKnowledgeAssetId}`); + publicKnowledgeAssetsUALs.push(`${ual}/${newKnowledgeAssetId}`); newKnowledgeAssetId += 1; } } - const promises = []; promises.push( this.tripleStoreModuleManager.createKnowledgeCollectionNamedGraphs( this.repositoryImplementations[TRIPLE_STORE_REPOSITORY.DKG], TRIPLE_STORE_REPOSITORY.DKG, - publicKnowledgeAssetsStatesUALs, + publicKnowledgeAssetsUALs, publicKnowledgeAssetsTriples, TRIPLES_VISIBILITY.PUBLIC, ), @@ -224,32 +255,38 @@ class TripleStoreService { triples.private, ); + const privateKnowledgeAssetsUALs = []; + const publicSubjectsMap = new Map( - publicKnowledgeAssetsTriples.map(([triple], index) => { + publicKnowledgeAssetsTriples.reduce((map, [triple], index) => { const [subject] = triple.split(' '); - return [subject, index]; - }), - ); - - const privateKnowledgeAssetsStatesUALs = privateKnowledgeAssetsTriples.reduce( - (result, [triple]) => { - const [privateSubject] = triple.split(' '); // groupTriplesBySubject guarantees format - if (publicSubjectsMap.has(privateSubject)) { - result.push( - publicKnowledgeAssetsStatesUALs[publicSubjectsMap.get(privateSubject)], - ); - } - return result; - }, - [], + map.set(subject, index); + return map; + }, new Map()), ); - if (privateKnowledgeAssetsStatesUALs.length > 0) { + // Public has to have this or hash of this subject as every private subject is represented in public part + for (const [triple] of privateKnowledgeAssetsTriples) { + const subject = triple.split(' '); + if (publicSubjectsMap.has(subject)) { + privateKnowledgeAssetsUALs.push( + publicKnowledgeAssetsUALs[publicSubjectsMap.get(subject)], + ); + } else { + const hashedSubject = `<${PRIVATE_HASH_SUBJECT_PREFIX}${this.dataService.generateHashFromString( + subject, + )}>`; + privateKnowledgeAssetsUALs.push( + publicKnowledgeAssetsUALs[publicSubjectsMap.get(hashedSubject)], + ); + } + } + if (privateKnowledgeAssetsUALs.length > 0) { promises.push( this.tripleStoreModuleManager.createKnowledgeCollectionNamedGraphs( this.repositoryImplementations[TRIPLE_STORE_REPOSITORY.DKG], TRIPLE_STORE_REPOSITORY.DKG, - privateKnowledgeAssetsStatesUALs, + privateKnowledgeAssetsUALs, privateKnowledgeAssetsTriples, TRIPLES_VISIBILITY.PRIVATE, ), From 47bd97e88620096ceca00bd2295ac9aae1ed104e Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Wed, 11 Dec 2024 21:51:38 +0100 Subject: [PATCH 07/16] Fix remote get subjects --- .../v1.0.0/v1-0-0-handle-get-request-command.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/commands/protocols/get/receiver/v1.0.0/v1-0-0-handle-get-request-command.js b/src/commands/protocols/get/receiver/v1.0.0/v1-0-0-handle-get-request-command.js index c7b54c2490..9f68f74918 100644 --- a/src/commands/protocols/get/receiver/v1.0.0/v1-0-0-handle-get-request-command.js +++ b/src/commands/protocols/get/receiver/v1.0.0/v1-0-0-handle-get-request-command.js @@ -99,17 +99,18 @@ class HandleGetRequestCommand extends HandleProtocolMessageCommand { // }; // } // } + // TODO: Add telemetry events and fix old wrong ones in here if (subjectUAL) { - const subjectsUALs = await this.tripleStoreService.findAllSubjectsWithGraphNames( + const subjectUALPairs = await this.tripleStoreService.findAllSubjectsWithGraphNames( TRIPLE_STORE_REPOSITORY.DKG, ual, ); - if (subjectsUALs?.length) { + if (subjectUALPairs.subjectUALPairs?.length) { await this.operationService.markOperationAsCompleted( operationId, blockchain, - subjectsUALs, + subjectUALPairs, [ OPERATION_ID_STATUS.GET.GET_LOCAL_END, OPERATION_ID_STATUS.GET.GET_END, @@ -118,8 +119,8 @@ class HandleGetRequestCommand extends HandleProtocolMessageCommand { ); } - return subjectsUALs?.length - ? { messageType: NETWORK_MESSAGE_TYPES.RESPONSES.ACK, messageData: subjectsUALs } + return subjectUALPairs.subjectUALPairs?.length + ? { messageType: NETWORK_MESSAGE_TYPES.RESPONSES.ACK, messageData: subjectUALPairs } : { messageType: NETWORK_MESSAGE_TYPES.RESPONSES.NACK, messageData: { errorMessage: `Unable to find assertion ${ual}` }, From e1fc586789480653fa0f610685fa5cd080ba4cb2 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Wed, 11 Dec 2024 21:51:57 +0100 Subject: [PATCH 08/16] enable local get --- src/commands/protocols/get/sender/get-find-shard-command.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commands/protocols/get/sender/get-find-shard-command.js b/src/commands/protocols/get/sender/get-find-shard-command.js index 799f62d0b3..f2441793c8 100644 --- a/src/commands/protocols/get/sender/get-find-shard-command.js +++ b/src/commands/protocols/get/sender/get-find-shard-command.js @@ -20,7 +20,7 @@ class GetFindShardCommand extends FindShardCommand { getOperationCommandSequence(nodePartOfShard) { const sequence = []; if (nodePartOfShard) { - // sequence.push('localGetCommand'); + sequence.push('localGetCommand'); } sequence.push('networkGetCommand'); From 50775d67a1a3a2aeefe55c633c7c2bccdce2aff6 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Wed, 11 Dec 2024 22:12:38 +0100 Subject: [PATCH 09/16] Fixes and comments --- src/service/data-service.js | 2 ++ src/service/triple-store-service.js | 19 ++++++++++--------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/service/data-service.js b/src/service/data-service.js index 187dbe8c5c..af7958e698 100644 --- a/src/service/data-service.js +++ b/src/service/data-service.js @@ -81,6 +81,8 @@ class DataService { return ethers.utils.sha256(ethers.utils.solidityPack(['string'], [string])); } + // We asume clients in certin way for assing UALs to work + // TODO: Move this to assertion-tools splitConnectedArrays(publicTriples) { const groupedPublic = []; let currentSubject = publicTriples[0].split(' ')[0]; diff --git a/src/service/triple-store-service.js b/src/service/triple-store-service.js index bfb2a55f83..dd0bbc2946 100644 --- a/src/service/triple-store-service.js +++ b/src/service/triple-store-service.js @@ -182,10 +182,10 @@ class TripleStoreService { } async insertUpdatedKnowledgeCollection(preUpdateUalNamedGraphs, ual, triples, firstNewKAIndex) { - const publicKnowledgeAssetsTriples = this.dataService.groupTriplesBySubject( + const publicKnowledgeAssetsTriples = this.dataService.splitConnectedArrays( triples.public ?? triples, ); - // subject or hashedSubject + // subject or hashedPrivateSubject const publicKnowledgeAssetTriplesSubjects = publicKnowledgeAssetsTriples.map( ([triple]) => triple.split(' ')[0], ); @@ -203,14 +203,14 @@ class TripleStoreService { preUpdateSubjectHashUALMap.set(pair.privateSubjectHash, pair.UAL); } }); + + // Some preUpdate KAs might not have private part, generate private subjects for them for (const { publicPreUpdateSubject, ual: preUpdateUal } of preUpdateSubjectUALMap) { if (!preUpdateSubjectHashUALMap.has(publicPreUpdateSubject)) { - preUpdateSubjectHashUALMap.set( - `<${PRIVATE_HASH_SUBJECT_PREFIX}${this.dataService.generateHashFromString( - publicPreUpdateSubject.slice(1, -1), - )}>`, - preUpdateUal, - ); + const hashedPreUpdateSubject = `<${PRIVATE_HASH_SUBJECT_PREFIX}${this.dataService.generateHashFromString( + publicPreUpdateSubject.slice(1, -1), + )}>`; + preUpdateSubjectHashUALMap.set(hashedPreUpdateSubject, preUpdateUal); } } @@ -222,6 +222,7 @@ class TripleStoreService { const hashedSubject = `<${PRIVATE_HASH_SUBJECT_PREFIX}${this.dataService.generateHashFromString( subject, )}>`; + // Rewrite this that if subject is private representation don't check preUpdateSubjectHashUALMap if ( subject.startsWith(`<${PRIVATE_HASH_SUBJECT_PREFIX}`) && preUpdateSubjectHashUALMap.has(subject) @@ -267,7 +268,7 @@ class TripleStoreService { // Public has to have this or hash of this subject as every private subject is represented in public part for (const [triple] of privateKnowledgeAssetsTriples) { - const subject = triple.split(' '); + const [subject] = triple.split(' '); if (publicSubjectsMap.has(subject)) { privateKnowledgeAssetsUALs.push( publicKnowledgeAssetsUALs[publicSubjectsMap.get(subject)], From 3474c0fe851d469c4fc48f75fa0e6f4ce97e3d46 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Fri, 13 Dec 2024 14:24:15 +0100 Subject: [PATCH 10/16] rewrite insert assertion --- package-lock.json | 774 +++++++++++++++++----------- src/service/data-service.js | 16 + src/service/triple-store-service.js | 101 ++-- 3 files changed, 546 insertions(+), 345 deletions(-) diff --git a/package-lock.json b/package-lock.json index a4ac6eb8fe..f218030fe4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4001,9 +4001,9 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dev": true, "dependencies": { "@jridgewell/set-array": "^1.2.1", @@ -5873,9 +5873,9 @@ } }, "node_modules/@types/node": { - "version": "22.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz", - "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", + "version": "22.10.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", + "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", "dependencies": { "undici-types": "~6.20.0" } @@ -5998,9 +5998,9 @@ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" }, "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.1.tgz", + "integrity": "sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==" }, "node_modules/@vascosantos/moving-average": { "version": "1.1.0", @@ -6034,9 +6034,9 @@ } }, "node_modules/abortcontroller-polyfill": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.6.tgz", - "integrity": "sha512-Zypm+LjYdWAzvuypZvDN0smUJrhOurcuBWhhMRBExqVLRvdjp3Z9mASxKyq19K+meZMshwjjy5S0lkm388zE4Q==", + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.8.tgz", + "integrity": "sha512-9f1iZ2uWh92VcrU9Y8x+LdM4DLj75VE0MJB8zuF1iUnroEptStw+DQ8EQPMUdfe5k+PkB1uUfDQfWbhstH8LrQ==", "dev": true }, "node_modules/accepts": { @@ -6548,9 +6548,9 @@ } }, "node_modules/assertion-tools": { - "version": "8.0.0-gamma.0", - "resolved": "https://registry.npmjs.org/assertion-tools/-/assertion-tools-8.0.0-gamma.0.tgz", - "integrity": "sha512-tUF2IcrddKhz2usRsgjrEGdfMuScz2P2nt8/9oJVb/NiSUp4l8i1nDDvmpAT3oompWLbd9HAxo2I0P4S4mJCYA==", + "version": "8.0.0-gamma.1", + "resolved": "https://registry.npmjs.org/assertion-tools/-/assertion-tools-8.0.0-gamma.1.tgz", + "integrity": "sha512-I4IHIiylrVFUoLy07qPxCbwwUk0Qpqfo0qL1cPBKcSY0e9b4+AHQoBLuSZkaE9rUy1wC+7vqBMikn4d/DW3FAw==", "dependencies": { "ethers": "^5.7.2", "jsonld": "^8.1.0", @@ -6740,13 +6740,13 @@ } }, "node_modules/bare-stream": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.4.2.tgz", - "integrity": "sha512-XZ4ln/KV4KT+PXdIWTKjsLY+quqCaEtqqtgGJVPw9AoM73By03ij64YjepK0aQvHSWDb6AfAZwqKaFu68qkrdA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.1.tgz", + "integrity": "sha512-eVZbtKM+4uehzrsj49KtCy3Pbg7kO1pJ3SKZ1SFrIH/0pnj9scuGGgUlNDf/7qS8WKtGdiJY5Kyhs/ivYPTB/g==", "dev": true, "optional": true, "dependencies": { - "streamx": "^2.20.0" + "streamx": "^2.21.0" } }, "node_modules/base-x": { @@ -7236,9 +7236,9 @@ } }, "node_modules/call-bind-apply-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.0.tgz", - "integrity": "sha512-CCKAP2tkPau7D3GE8+V8R6sQubA9R5foIzGp+85EXCVSCivuxBNAWqcpn72PKYiIcqoViv/kcUDpaEIMBVi1lQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" @@ -7247,6 +7247,21 @@ "node": ">= 0.4" } }, + "node_modules/call-bound": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.2.tgz", + "integrity": "sha512-0lk0PHFe/uz0vl527fG9CgdE9WdafjDbCXvBbs+LUv000TVt2Jjhqbs4Jwm8gz070w8xXyEAxrPOMullsxXeGg==", + "dependencies": { + "call-bind": "^1.0.8", + "get-intrinsic": "^1.2.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -7276,9 +7291,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001687", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001687.tgz", - "integrity": "sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==", + "version": "1.0.30001688", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001688.tgz", + "integrity": "sha512-Nmqpru91cuABu/DTCXbM2NSRHzM2uVHfPnhJ/1zEAJx/ILBRVmz3pzH4N7DZqbdG0gWClsCC05Oj0mJ/1AWMbA==", "dev": true, "funding": [ { @@ -7776,9 +7791,9 @@ } }, "node_modules/componentsjs/node_modules/@types/node": { - "version": "18.19.67", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.67.tgz", - "integrity": "sha512-wI8uHusga+0ZugNp0Ol/3BqQfEcCCNfojtO6Oou9iVNGPTL6QNSdnUdqq85fRgIorLhLMuPIKpsN98QE9Nh+KQ==", + "version": "18.19.68", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.68.tgz", + "integrity": "sha512-QGtpFH1vB99ZmTa63K4/FU8twThj4fuVSBkGddTp7uIL/cuoLWIUSL2RcOaigBhfR+hg5pgGkBnkoOxrTVBMKw==", "dependencies": { "undici-types": "~5.26.4" } @@ -8856,9 +8871,9 @@ } }, "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dependencies": { "ms": "^2.1.3" }, @@ -9065,7 +9080,6 @@ "version": "8.0.3-gamma.7", "resolved": "https://registry.npmjs.org/dkg-evm-module/-/dkg-evm-module-8.0.3-gamma.7.tgz", "integrity": "sha512-cEjPz8c6vqwhsYiDx5ibIJ0xh9BZDvqtYHigaYf4gE26QaFJs6+NFFoQOSwwbaKmB7FKlSPHw0mOJASqVaWwbw==", - "license": "Apache-2.0", "dependencies": { "@openzeppelin/contracts": "^4.9.3", "@polkadot/api": "^11.0.3", @@ -9599,9 +9613,9 @@ "optional": true }, "node_modules/dkg.js": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/dkg.js/-/dkg.js-6.5.4.tgz", - "integrity": "sha512-zvTG/ehsX6dcjnUKErVs1d9tpfsID2DrDf0sYjKVyqeYcnKntGsRN4fHwrQLPLjkVCnjTvnr5R34eUu03BmGqg==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/dkg.js/-/dkg.js-6.5.5.tgz", + "integrity": "sha512-MSVbGYAZkWtTPCdDG+PLAsy/lGff5IKvCnk0QEdZ6P6ieV6Hbq4HMJHIxpFVXlw7OIdwNaEEt5S+jtTfkVuqmg==", "dev": true, "dependencies": { "assertion-tools": "^2.2.1", @@ -10467,6 +10481,19 @@ "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.6.tgz", "integrity": "sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==" }, + "node_modules/dunder-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz", + "integrity": "sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", @@ -10562,9 +10589,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.71", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.71.tgz", - "integrity": "sha512-dB68l59BI75W1BUGVTAEJy45CEVuEGy9qPVVQ8pnHyHMn36PLPPoE1mjLH+lo9rKulO3HC2OhbACI/8tCqJBcA==", + "version": "1.5.73", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.73.tgz", + "integrity": "sha512-8wGNxG9tAG5KhGd3eeA0o6ixhiNdgr0DcHWm85XPCphwZgD1lIEoi6t3VERayWao7SF7AAZTw6oARGJeVjH8Kg==", "dev": true }, "node_modules/elliptic": { @@ -10744,12 +10771,9 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "engines": { "node": ">= 0.4" } @@ -10793,7 +10817,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, "dependencies": { "es-errors": "^1.3.0" }, @@ -12451,15 +12474,20 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", + "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -13124,11 +13152,13 @@ } }, "node_modules/has-proto": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.1.0.tgz", - "integrity": "sha512-QLdzI9IIO1Jg7f9GT1gXpPpXArAn6cS31R1eEZqz08Gc+uQ8/XiqHWt17Fiw+2p6oTTIq5GXEpQkAlA88YRl/Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "peer": true, "dependencies": { - "call-bind": "^1.0.7" + "dunder-proto": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -13733,13 +13763,13 @@ } }, "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -13814,13 +13844,13 @@ } }, "node_modules/is-boolean-object": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.0.tgz", - "integrity": "sha512-kR5g0+dXf/+kXnqI+lu0URKYPKgICtHGGNCDSB10AaUFj3o/HkB3u7WfpRBJGFopxxY0oH3ux7ZsDjLtK7xqvw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", + "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" }, "engines": { @@ -13879,12 +13909,14 @@ } }, "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "peer": true, "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" }, "engines": { @@ -13895,13 +13927,14 @@ } }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "peer": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -14103,14 +14136,14 @@ "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==" }, "node_modules/is-regex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.0.tgz", - "integrity": "sha512-B6ohK4ZmoftlUe+uvenXSbPJFo6U37BH7oO1B3nQH8f/7h27N56s85MhUtbFJAziz5dcmuR3i8ovUl35zp8pFA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.7", - "gopd": "^1.1.0", + "call-bound": "^1.0.2", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" }, @@ -14179,15 +14212,15 @@ } }, "node_modules/is-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.0.tgz", - "integrity": "sha512-qS8KkNNXUZ/I+nX6QT8ZS1/Yx0A444yhzdTKxCzKkNjQ9sHErBxJnJAgh+f5YhusYECEcjo4XcyH87hn6+ks0A==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.7", - "has-symbols": "^1.0.3", - "safe-regex-test": "^1.0.3" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -14619,17 +14652,18 @@ } }, "node_modules/iterator.prototype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", - "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.4.tgz", + "integrity": "sha512-x4WH0BWmrMmg4oHHl+duwubhrvczGlyuGAZu3nvrf0UXOfPu8IhZObFEr7DE/iv01YgVZrsOiRcqw2srkKEDIA==", "dev": true, "peer": true, "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "reflect.getprototypeof": "^1.0.8", + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -14762,9 +14796,9 @@ } }, "node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, "bin": { "jsesc": "bin/jsesc" @@ -14860,9 +14894,9 @@ } }, "node_modules/jsonld-context-parser/node_modules/@types/node": { - "version": "18.19.67", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.67.tgz", - "integrity": "sha512-wI8uHusga+0ZugNp0Ol/3BqQfEcCCNfojtO6Oou9iVNGPTL6QNSdnUdqq85fRgIorLhLMuPIKpsN98QE9Nh+KQ==", + "version": "18.19.68", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.68.tgz", + "integrity": "sha512-QGtpFH1vB99ZmTa63K4/FU8twThj4fuVSBkGddTp7uIL/cuoLWIUSL2RcOaigBhfR+hg5pgGkBnkoOxrTVBMKw==", "dependencies": { "undici-types": "~5.26.4" } @@ -16197,6 +16231,14 @@ "resolved": "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz", "integrity": "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==" }, + "node_modules/math-intrinsics": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.0.0.tgz", + "integrity": "sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mathjs": { "version": "10.6.4", "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-10.6.4.tgz", @@ -16223,7 +16265,6 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-1.7.0.tgz", "integrity": "sha512-ok9uE7ekFh5+orI0dFT19KeY/y5P6ONp0dks8oo/KniyNK6mJ0zloL3+s6LiEQXW8VxQHwsfZslitL/R7MM9ew==", - "license": "BSD-3-Clause", "dependencies": { "@types/node": "^20.2.5" }, @@ -16232,10 +16273,9 @@ } }, "node_modules/mcl-wasm/node_modules/@types/node": { - "version": "20.17.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.9.tgz", - "integrity": "sha512-0JOXkRyLanfGPE2QRCwgxhzlBAvaRdCNMcvbd7jFfpmD4eEXll7LRwy5ymJmyeZqk7Nh7eD2LeUyQ68BbndmXw==", - "license": "MIT", + "version": "20.17.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.10.tgz", + "integrity": "sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==", "dependencies": { "undici-types": "~6.19.2" } @@ -16243,8 +16283,7 @@ "node_modules/mcl-wasm/node_modules/undici-types": { "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "license": "MIT" + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" }, "node_modules/md5.js": { "version": "1.3.5", @@ -17197,9 +17236,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "dev": true }, "node_modules/normalize-path": { @@ -18938,19 +18977,20 @@ "dev": true }, "node_modules/reflect.getprototypeof": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.7.tgz", - "integrity": "sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.8.tgz", + "integrity": "sha512-B5dj6usc5dkk8uFliwjwDHM8To5/QwdKz9JcBZ8Ic4G1f0YmeeJTtE/ZTdgRFPAfxZFiUaPhZ1Jcs4qeagItGQ==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", + "dunder-proto": "^1.0.0", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "which-builtin-type": "^1.1.4" + "gopd": "^1.2.0", + "which-builtin-type": "^1.2.0" }, "engines": { "node": ">= 0.4" @@ -19344,15 +19384,16 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { @@ -19382,15 +19423,15 @@ ] }, "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -19800,14 +19841,65 @@ } }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -19963,8 +20055,7 @@ "node_modules/solady": { "version": "0.0.281", "resolved": "https://registry.npmjs.org/solady/-/solady-0.0.281.tgz", - "integrity": "sha512-pO/r0cVb6EXwAISE/cgcn1outhvkEKHEnVCSUTlRdIWDnl013CrUtMx8PbkDYfef2TrJB178TOA0jIBDVyjGBg==", - "license": "MIT" + "integrity": "sha512-pO/r0cVb6EXwAISE/cgcn1outhvkEKHEnVCSUTlRdIWDnl013CrUtMx8PbkDYfef2TrJB178TOA0jIBDVyjGBg==" }, "node_modules/solc": { "version": "0.8.26", @@ -20270,9 +20361,9 @@ } }, "node_modules/streamx": { - "version": "2.21.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.21.0.tgz", - "integrity": "sha512-Qz6MsDZXJ6ur9u+b+4xCG18TluU7PGlRfXVAAjNiGsFrBUt/ioyLkxbFaKJygoPs+/kW4VyBj0bSj89Qu0IGyg==", + "version": "2.21.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.21.1.tgz", + "integrity": "sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw==", "dev": true, "dependencies": { "fast-fifo": "^1.3.2", @@ -20388,16 +20479,19 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -20407,16 +20501,20 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -21263,9 +21361,9 @@ } }, "node_modules/umzug/node_modules/type-fest": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.30.0.tgz", - "integrity": "sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.30.1.tgz", + "integrity": "sha512-ojFL7eDMX2NF0xMbDwPZJ8sb7ckqtlAi1GsmgsFXvErT9kFTk1r0DuQKvrCh73M6D4nngeHJmvogF9OluXs7Hw==", "engines": { "node": ">=16" }, @@ -22182,25 +22280,25 @@ } }, "node_modules/which-builtin-type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.0.tgz", - "integrity": "sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", + "is-date-object": "^1.1.0", "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", + "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", + "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", - "which-typed-array": "^1.1.15" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -26038,9 +26136,9 @@ } }, "@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dev": true, "requires": { "@jridgewell/set-array": "^1.2.1", @@ -27559,9 +27657,9 @@ } }, "@types/node": { - "version": "22.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz", - "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", + "version": "22.10.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", + "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", "requires": { "undici-types": "~6.20.0" } @@ -27686,9 +27784,9 @@ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" }, "@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.1.tgz", + "integrity": "sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==" }, "@vascosantos/moving-average": { "version": "1.1.0", @@ -27718,9 +27816,9 @@ } }, "abortcontroller-polyfill": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.6.tgz", - "integrity": "sha512-Zypm+LjYdWAzvuypZvDN0smUJrhOurcuBWhhMRBExqVLRvdjp3Z9mASxKyq19K+meZMshwjjy5S0lkm388zE4Q==", + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.8.tgz", + "integrity": "sha512-9f1iZ2uWh92VcrU9Y8x+LdM4DLj75VE0MJB8zuF1iUnroEptStw+DQ8EQPMUdfe5k+PkB1uUfDQfWbhstH8LrQ==", "dev": true }, "accepts": { @@ -28108,9 +28206,9 @@ } }, "assertion-tools": { - "version": "8.0.0-gamma.0", - "resolved": "https://registry.npmjs.org/assertion-tools/-/assertion-tools-8.0.0-gamma.0.tgz", - "integrity": "sha512-tUF2IcrddKhz2usRsgjrEGdfMuScz2P2nt8/9oJVb/NiSUp4l8i1nDDvmpAT3oompWLbd9HAxo2I0P4S4mJCYA==", + "version": "8.0.0-gamma.1", + "resolved": "https://registry.npmjs.org/assertion-tools/-/assertion-tools-8.0.0-gamma.1.tgz", + "integrity": "sha512-I4IHIiylrVFUoLy07qPxCbwwUk0Qpqfo0qL1cPBKcSY0e9b4+AHQoBLuSZkaE9rUy1wC+7vqBMikn4d/DW3FAw==", "requires": { "ethers": "^5.7.2", "jsonld": "^8.1.0", @@ -28276,13 +28374,13 @@ } }, "bare-stream": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.4.2.tgz", - "integrity": "sha512-XZ4ln/KV4KT+PXdIWTKjsLY+quqCaEtqqtgGJVPw9AoM73By03ij64YjepK0aQvHSWDb6AfAZwqKaFu68qkrdA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.1.tgz", + "integrity": "sha512-eVZbtKM+4uehzrsj49KtCy3Pbg7kO1pJ3SKZ1SFrIH/0pnj9scuGGgUlNDf/7qS8WKtGdiJY5Kyhs/ivYPTB/g==", "dev": true, "optional": true, "requires": { - "streamx": "^2.20.0" + "streamx": "^2.21.0" } }, "base-x": { @@ -28655,14 +28753,23 @@ } }, "call-bind-apply-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.0.tgz", - "integrity": "sha512-CCKAP2tkPau7D3GE8+V8R6sQubA9R5foIzGp+85EXCVSCivuxBNAWqcpn72PKYiIcqoViv/kcUDpaEIMBVi1lQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", "requires": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, + "call-bound": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.2.tgz", + "integrity": "sha512-0lk0PHFe/uz0vl527fG9CgdE9WdafjDbCXvBbs+LUv000TVt2Jjhqbs4Jwm8gz070w8xXyEAxrPOMullsxXeGg==", + "requires": { + "call-bind": "^1.0.8", + "get-intrinsic": "^1.2.5" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -28683,9 +28790,9 @@ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" }, "caniuse-lite": { - "version": "1.0.30001687", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001687.tgz", - "integrity": "sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==", + "version": "1.0.30001688", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001688.tgz", + "integrity": "sha512-Nmqpru91cuABu/DTCXbM2NSRHzM2uVHfPnhJ/1zEAJx/ILBRVmz3pzH4N7DZqbdG0gWClsCC05Oj0mJ/1AWMbA==", "dev": true }, "canonicalize": { @@ -29057,9 +29164,9 @@ }, "dependencies": { "@types/node": { - "version": "18.19.67", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.67.tgz", - "integrity": "sha512-wI8uHusga+0ZugNp0Ol/3BqQfEcCCNfojtO6Oou9iVNGPTL6QNSdnUdqq85fRgIorLhLMuPIKpsN98QE9Nh+KQ==", + "version": "18.19.68", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.68.tgz", + "integrity": "sha512-QGtpFH1vB99ZmTa63K4/FU8twThj4fuVSBkGddTp7uIL/cuoLWIUSL2RcOaigBhfR+hg5pgGkBnkoOxrTVBMKw==", "requires": { "undici-types": "~5.26.4" } @@ -29955,9 +30062,9 @@ "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==" }, "debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "requires": { "ms": "^2.1.3" } @@ -30496,9 +30603,9 @@ } }, "dkg.js": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/dkg.js/-/dkg.js-6.5.4.tgz", - "integrity": "sha512-zvTG/ehsX6dcjnUKErVs1d9tpfsID2DrDf0sYjKVyqeYcnKntGsRN4fHwrQLPLjkVCnjTvnr5R34eUu03BmGqg==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/dkg.js/-/dkg.js-6.5.5.tgz", + "integrity": "sha512-MSVbGYAZkWtTPCdDG+PLAsy/lGff5IKvCnk0QEdZ6P6ieV6Hbq4HMJHIxpFVXlw7OIdwNaEEt5S+jtTfkVuqmg==", "dev": true, "requires": { "assertion-tools": "^2.2.1", @@ -31158,6 +31265,16 @@ "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.6.tgz", "integrity": "sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==" }, + "dunder-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz", + "integrity": "sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==", + "requires": { + "call-bind-apply-helpers": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, "duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", @@ -31254,9 +31371,9 @@ } }, "electron-to-chromium": { - "version": "1.5.71", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.71.tgz", - "integrity": "sha512-dB68l59BI75W1BUGVTAEJy45CEVuEGy9qPVVQ8pnHyHMn36PLPPoE1mjLH+lo9rKulO3HC2OhbACI/8tCqJBcA==", + "version": "1.5.73", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.73.tgz", + "integrity": "sha512-8wGNxG9tAG5KhGd3eeA0o6ixhiNdgr0DcHWm85XPCphwZgD1lIEoi6t3VERayWao7SF7AAZTw6oARGJeVjH8Kg==", "dev": true }, "elliptic": { @@ -31411,12 +31528,9 @@ } }, "es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "requires": { - "get-intrinsic": "^1.2.4" - } + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" }, "es-errors": { "version": "1.3.0", @@ -31451,7 +31565,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, "requires": { "es-errors": "^1.3.0" } @@ -32746,15 +32859,20 @@ "dev": true }, "get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", + "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", "requires": { + "call-bind-apply-helpers": "^1.0.1", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.0.0" } }, "get-iterator": { @@ -33267,11 +33385,13 @@ } }, "has-proto": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.1.0.tgz", - "integrity": "sha512-QLdzI9IIO1Jg7f9GT1gXpPpXArAn6cS31R1eEZqz08Gc+uQ8/XiqHWt17Fiw+2p6oTTIq5GXEpQkAlA88YRl/Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "peer": true, "requires": { - "call-bind": "^1.0.7" + "dunder-proto": "^1.0.0" } }, "has-symbols": { @@ -33721,13 +33841,13 @@ } }, "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" } }, "is-array-buffer": { @@ -33775,13 +33895,13 @@ } }, "is-boolean-object": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.0.tgz", - "integrity": "sha512-kR5g0+dXf/+kXnqI+lu0URKYPKgICtHGGNCDSB10AaUFj3o/HkB3u7WfpRBJGFopxxY0oH3ux7ZsDjLtK7xqvw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", + "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", "dev": true, "peer": true, "requires": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, @@ -33805,23 +33925,26 @@ } }, "is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "peer": true, "requires": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" } }, "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "peer": true, "requires": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" } }, "is-electron": { @@ -33953,14 +34076,14 @@ "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==" }, "is-regex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.0.tgz", - "integrity": "sha512-B6ohK4ZmoftlUe+uvenXSbPJFo6U37BH7oO1B3nQH8f/7h27N56s85MhUtbFJAziz5dcmuR3i8ovUl35zp8pFA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "peer": true, "requires": { - "call-bind": "^1.0.7", - "gopd": "^1.1.0", + "call-bound": "^1.0.2", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } @@ -33999,15 +34122,15 @@ } }, "is-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.0.tgz", - "integrity": "sha512-qS8KkNNXUZ/I+nX6QT8ZS1/Yx0A444yhzdTKxCzKkNjQ9sHErBxJnJAgh+f5YhusYECEcjo4XcyH87hn6+ks0A==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "peer": true, "requires": { - "call-bind": "^1.0.7", - "has-symbols": "^1.0.3", - "safe-regex-test": "^1.0.3" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" } }, "is-typed-array": { @@ -34365,17 +34488,18 @@ } }, "iterator.prototype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", - "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.4.tgz", + "integrity": "sha512-x4WH0BWmrMmg4oHHl+duwubhrvczGlyuGAZu3nvrf0UXOfPu8IhZObFEr7DE/iv01YgVZrsOiRcqw2srkKEDIA==", "dev": true, "peer": true, "requires": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "reflect.getprototypeof": "^1.0.8", + "set-function-name": "^2.0.2" } }, "javascript-natural-sort": { @@ -34473,9 +34597,9 @@ } }, "jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true }, "json-buffer": { @@ -34576,9 +34700,9 @@ }, "dependencies": { "@types/node": { - "version": "18.19.67", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.67.tgz", - "integrity": "sha512-wI8uHusga+0ZugNp0Ol/3BqQfEcCCNfojtO6Oou9iVNGPTL6QNSdnUdqq85fRgIorLhLMuPIKpsN98QE9Nh+KQ==", + "version": "18.19.68", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.68.tgz", + "integrity": "sha512-QGtpFH1vB99ZmTa63K4/FU8twThj4fuVSBkGddTp7uIL/cuoLWIUSL2RcOaigBhfR+hg5pgGkBnkoOxrTVBMKw==", "requires": { "undici-types": "~5.26.4" } @@ -35595,6 +35719,11 @@ "resolved": "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz", "integrity": "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==" }, + "math-intrinsics": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.0.0.tgz", + "integrity": "sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA==" + }, "mathjs": { "version": "10.6.4", "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-10.6.4.tgz", @@ -35620,9 +35749,9 @@ }, "dependencies": { "@types/node": { - "version": "20.17.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.9.tgz", - "integrity": "sha512-0JOXkRyLanfGPE2QRCwgxhzlBAvaRdCNMcvbd7jFfpmD4eEXll7LRwy5ymJmyeZqk7Nh7eD2LeUyQ68BbndmXw==", + "version": "20.17.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.10.tgz", + "integrity": "sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==", "requires": { "undici-types": "~6.19.2" } @@ -36374,9 +36503,9 @@ } }, "node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "dev": true }, "normalize-path": { @@ -37739,19 +37868,20 @@ "dev": true }, "reflect.getprototypeof": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.7.tgz", - "integrity": "sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.8.tgz", + "integrity": "sha512-B5dj6usc5dkk8uFliwjwDHM8To5/QwdKz9JcBZ8Ic4G1f0YmeeJTtE/ZTdgRFPAfxZFiUaPhZ1Jcs4qeagItGQ==", "dev": true, "peer": true, "requires": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", + "dunder-proto": "^1.0.0", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "which-builtin-type": "^1.1.4" + "gopd": "^1.2.0", + "which-builtin-type": "^1.2.0" } }, "regenerator-runtime": { @@ -38046,15 +38176,16 @@ } }, "safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "peer": true, "requires": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, @@ -38064,15 +38195,15 @@ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "peer": true, "requires": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "is-regex": "^1.2.1" } }, "safe-stable-stringify": { @@ -38393,14 +38524,47 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "requires": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + } + }, + "side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + } + }, + "side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + } + }, + "side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" } }, "signal-exit": { @@ -38750,9 +38914,9 @@ "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" }, "streamx": { - "version": "2.21.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.21.0.tgz", - "integrity": "sha512-Qz6MsDZXJ6ur9u+b+4xCG18TluU7PGlRfXVAAjNiGsFrBUt/ioyLkxbFaKJygoPs+/kW4VyBj0bSj89Qu0IGyg==", + "version": "2.21.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.21.1.tgz", + "integrity": "sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw==", "dev": true, "requires": { "bare-events": "^2.2.0", @@ -38847,26 +39011,30 @@ } }, "string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "peer": true, "requires": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" } }, "string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "peer": true, "requires": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } @@ -39507,9 +39675,9 @@ }, "dependencies": { "type-fest": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.30.0.tgz", - "integrity": "sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==" + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.30.1.tgz", + "integrity": "sha512-ojFL7eDMX2NF0xMbDwPZJ8sb7ckqtlAi1GsmgsFXvErT9kFTk1r0DuQKvrCh73M6D4nngeHJmvogF9OluXs7Hw==" } } }, @@ -40266,25 +40434,25 @@ } }, "which-builtin-type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.0.tgz", - "integrity": "sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "peer": true, "requires": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", + "is-date-object": "^1.1.0", "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", + "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", + "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", - "which-typed-array": "^1.1.15" + "which-typed-array": "^1.1.16" } }, "which-collection": { diff --git a/src/service/data-service.js b/src/service/data-service.js index 0e1a8c9039..a44c93a107 100644 --- a/src/service/data-service.js +++ b/src/service/data-service.js @@ -129,6 +129,22 @@ class DataService { return groupedPublic; } + + insertStringInSortadArray(array, str) { + // Assuming triplesArray is already sorted + let left = 0; + let right = array.length; + while (left < right) { + const mid = Math.floor((left + right) / 2); + if (array[mid].localeCompare(str) < 0) { + left = mid + 1; + } else { + right = mid; + } + } + array.splice(left, 0, str); + return left; + } } export default DataService; diff --git a/src/service/triple-store-service.js b/src/service/triple-store-service.js index 0cc782a75f..384e7eca33 100644 --- a/src/service/triple-store-service.js +++ b/src/service/triple-store-service.js @@ -1,10 +1,12 @@ /* eslint-disable no-await-in-loop */ import { setTimeout } from 'timers/promises'; +import { kcTools } from 'assertion-tools'; import { BASE_NAMED_GRAPHS, TRIPLE_STORE_REPOSITORY, TRIPLES_VISIBILITY, + PRIVATE_RESOURCE_PREDICATE, } from '../constants/constants.js'; class TripleStoreService { @@ -17,6 +19,7 @@ class TripleStoreService { this.ualService = ctx.ualService; this.dataService = ctx.dataService; this.paranetService = ctx.paranetService; + this.cryptoService = ctx.cryptoService; } initializeRepositories() { @@ -34,6 +37,7 @@ class TripleStoreService { repository, knowledgeCollectionUAL, triples, + ual, retries = 1, retryDelay = 0, ) { @@ -56,66 +60,79 @@ class TripleStoreService { // knowledgeAssetsUALs.map((ual) => `<${ual}>`), // ); // const unifiedGraphTriples = [...triples, ...tripleAnnotations]; - const publicKnowledgeAssetsTriples = this.dataService.splitConnectedArrays( - triples.public ?? triples, - ); - - const publicKnowledgeAssetsUALs = []; - - for (let i = 1; i <= publicKnowledgeAssetsTriples.length; i += 1) { - publicKnowledgeAssetsUALs.push(`${knowledgeCollectionUAL}/${i}`); - } const promises = []; + const publicAssertion = triples.public ?? triples; - if (triples.private?.length && !existsInNamedGraphs) { - const privateKnowledgeAssetsTriples = this.dataService.groupTriplesBySubject( - triples.private, - ); - const privateKnowledgeAssetsUALs = []; - let publicIndex = 0; - let privateIndex = 0; - while ( - publicIndex < publicKnowledgeAssetsTriples.length && - privateIndex < privateKnowledgeAssetsTriples.length - ) { - // const [privateSubject] = privateKnowledgeAssetsTriples[privateIndex][0].split(' '); - // Check if first triple is content or private existence identifier - if ( - this.dataService.quadsContainsPrivateRepresentations( - publicKnowledgeAssetsTriples[publicIndex], - ) - ) { - privateKnowledgeAssetsUALs.push(publicKnowledgeAssetsUALs[publicIndex]); - privateIndex += 1; - } - publicIndex += 1; + const filteredPublic = []; + const privateHashTriples = []; + publicAssertion.forEach((triple) => { + if (triple.includes(PRIVATE_RESOURCE_PREDICATE)) { + filteredPublic.push(triple); + } else { + privateHashTriples.push(triple); } + }); - if (privateKnowledgeAssetsUALs.length > 0) { - promises.push( - this.tripleStoreModuleManager.createKnowledgeCollectionNamedGraphs( - this.repositoryImplementations[repository], - repository, - privateKnowledgeAssetsUALs, - privateKnowledgeAssetsTriples, - TRIPLES_VISIBILITY.PRIVATE, - ), + const publicKnowledgeAssetsTriplesGrouped = kcTools.groupNquadsBySubject( + publicAssertion, + true, + ); + const publicKnowledgeAssetsUALs = publicKnowledgeAssetsTriplesGrouped.map( + (_, index) => `${ual}:${index + 1}`, + ); + + const publicSubjectHashMap = publicKnowledgeAssetsTriplesGrouped.reduce( + (map, group, index) => { + const [publicSubject] = group[0].split(' '); + const publicSubjectHash = this.cryptoService(publicSubject.slice(1, -1)); + map.set(publicSubjectHash, index); + return map; + }, + new Map(), + ); + const sortedPrivateRepresentationTriples = []; + for (const privateHashTriple of privateHashTriples) { + const privateHash = privateHashTriple + .split(' ')[0] + .slice(PRIVATE_RESOURCE_PREDICATE.length + 1, -1); + if (publicSubjectHashMap.has(privateHash)) { + const publicIndex = publicSubjectHashMap.get(privateHash); + this.dataService.insertStringInSortadArray( + publicKnowledgeAssetsTriplesGrouped[publicIndex], + privateHashTriple, ); + } else { + sortedPrivateRepresentationTriples.push(privateHashTriple); } } + const startIndexForPrivateKnowledgeAssetsWithoutPublicPair = + publicKnowledgeAssetsUALs.length + 1; + publicKnowledgeAssetsTriplesGrouped.push( + ...sortedPrivateRepresentationTriples.map((triple) => [triple]), + ); + publicKnowledgeAssetsUALs.push( + ...sortedPrivateRepresentationTriples.map( + (_, index) => + `${ual}:${startIndexForPrivateKnowledgeAssetsWithoutPublicPair + index}`, + ), + ); + if (!existsInNamedGraphs) { promises.push( this.tripleStoreModuleManager.createKnowledgeCollectionNamedGraphs( this.repositoryImplementations[repository], repository, publicKnowledgeAssetsUALs, - publicKnowledgeAssetsTriples, TRIPLES_VISIBILITY.PUBLIC, + publicKnowledgeAssetsTriplesGrouped, ), ); } const metadataTriples = publicKnowledgeAssetsUALs - .map((ual) => `<${ual}> "${ual}:0" .`) + .map( + (publicKnowledgeAssetUAL) => + `<${publicKnowledgeAssetUAL}> "${publicKnowledgeAssetUAL}:0" .`, + ) .join('\n'); promises.push( From 75a58e4a4224b2789f90bf22b0161fadecf05906 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Fri, 13 Dec 2024 16:28:58 +0100 Subject: [PATCH 11/16] public-privat-rework --- src/service/data-service.js | 2 +- src/service/triple-store-service.js | 52 +++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/src/service/data-service.js b/src/service/data-service.js index a44c93a107..0b7adc6c00 100644 --- a/src/service/data-service.js +++ b/src/service/data-service.js @@ -130,7 +130,7 @@ class DataService { return groupedPublic; } - insertStringInSortadArray(array, str) { + insertStringInSortedArray(array, str) { // Assuming triplesArray is already sorted let left = 0; let right = array.length; diff --git a/src/service/triple-store-service.js b/src/service/triple-store-service.js index 384e7eca33..cfba9b8acc 100644 --- a/src/service/triple-store-service.js +++ b/src/service/triple-store-service.js @@ -127,6 +127,58 @@ class TripleStoreService { publicKnowledgeAssetsTriplesGrouped, ), ); + + if (triples.private?.length) { + const privateKnowledgeAssetsTriplesGrouped = kcTools.groupNquadsBySubject( + publicAssertion, + true, + ); + + const privateKnowledgeAssetsUALs = []; + + // const privateSubjectHashMap = privateKnowledgeAssetsTriplesGrouped.reduce( + // (map, group, index) => { + // const [privateSubject] = group[0].split(' '); + // const privateSubjectHash = privateSubject.slice(1, -1); + // map.set(privateSubjectHash, index); + // return map; + // }, + // new Map(), ); + + const privateRepresentationTriplesSubjectMap = + sortedPrivateRepresentationTriples.reduce((map, triple, index) => { + const privateHashedSubject = triple + .split(' ')[0] + .slice(PRIVATE_RESOURCE_PREDICATE.length + 1, -1); + map.set(privateHashedSubject, index); + return map; + }, new Map()); + + for (const privateTriple of privateKnowledgeAssetsTriplesGrouped) { + const [privateSubject] = privateTriple[0].split(' '); + const privateSubjectHash = this.cryptoService.sha256( + privateSubject.slice(1, -1), + ); + + if (publicSubjectHashMap.has(privateSubjectHash)) { + const publicIndex = publicSubjectHashMap.get(privateSubjectHash); + privateKnowledgeAssetsUALs.push(publicKnowledgeAssetsUALs[publicIndex]); + } else { + const publicIndex = + privateRepresentationTriplesSubjectMap.get(privateSubjectHash); + privateKnowledgeAssetsUALs.push(publicKnowledgeAssetsUALs[publicIndex]); + } + } + promises.push( + this.tripleStoreModuleManager.createKnowledgeCollectionNamedGraphs( + this.repositoryImplementations[repository], + repository, + privateKnowledgeAssetsUALs, + TRIPLES_VISIBILITY.PRIVATE, + privateKnowledgeAssetsTriplesGrouped, + ), + ); + } } const metadataTriples = publicKnowledgeAssetsUALs .map( From 1a1657af36bbdff202b29184edd8983d91aa0ba2 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Fri, 13 Dec 2024 16:31:39 +0100 Subject: [PATCH 12/16] Correct filtering --- src/service/triple-store-service.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/service/triple-store-service.js b/src/service/triple-store-service.js index cfba9b8acc..832d16710f 100644 --- a/src/service/triple-store-service.js +++ b/src/service/triple-store-service.js @@ -67,9 +67,9 @@ class TripleStoreService { const privateHashTriples = []; publicAssertion.forEach((triple) => { if (triple.includes(PRIVATE_RESOURCE_PREDICATE)) { - filteredPublic.push(triple); - } else { privateHashTriples.push(triple); + } else { + filteredPublic.push(triple); } }); From c7eba8cd07ba63a990e1d56a22f089600a8e67bc Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Fri, 13 Dec 2024 18:00:55 +0100 Subject: [PATCH 13/16] fixes --- src/service/triple-store-service.js | 32 +++++++++++++++++------------ 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/service/triple-store-service.js b/src/service/triple-store-service.js index 832d16710f..160a3f627a 100644 --- a/src/service/triple-store-service.js +++ b/src/service/triple-store-service.js @@ -7,6 +7,7 @@ import { TRIPLE_STORE_REPOSITORY, TRIPLES_VISIBILITY, PRIVATE_RESOURCE_PREDICATE, + PRIVATE_HASH_SUBJECT_PREFIX, } from '../constants/constants.js'; class TripleStoreService { @@ -37,7 +38,6 @@ class TripleStoreService { repository, knowledgeCollectionUAL, triples, - ual, retries = 1, retryDelay = 0, ) { @@ -74,17 +74,17 @@ class TripleStoreService { }); const publicKnowledgeAssetsTriplesGrouped = kcTools.groupNquadsBySubject( - publicAssertion, + filteredPublic, true, ); const publicKnowledgeAssetsUALs = publicKnowledgeAssetsTriplesGrouped.map( - (_, index) => `${ual}:${index + 1}`, + (_, index) => `${knowledgeCollectionUAL}/${index + 1}`, ); const publicSubjectHashMap = publicKnowledgeAssetsTriplesGrouped.reduce( (map, group, index) => { const [publicSubject] = group[0].split(' '); - const publicSubjectHash = this.cryptoService(publicSubject.slice(1, -1)); + const publicSubjectHash = this.cryptoService.sha256(publicSubject.slice(1, -1)); map.set(publicSubjectHash, index); return map; }, @@ -94,10 +94,10 @@ class TripleStoreService { for (const privateHashTriple of privateHashTriples) { const privateHash = privateHashTriple .split(' ')[0] - .slice(PRIVATE_RESOURCE_PREDICATE.length + 1, -1); + .slice(PRIVATE_HASH_SUBJECT_PREFIX.length + 1, -1); if (publicSubjectHashMap.has(privateHash)) { const publicIndex = publicSubjectHashMap.get(privateHash); - this.dataService.insertStringInSortadArray( + this.dataService.insertStringInSortedArray( publicKnowledgeAssetsTriplesGrouped[publicIndex], privateHashTriple, ); @@ -106,14 +106,16 @@ class TripleStoreService { } } const startIndexForPrivateKnowledgeAssetsWithoutPublicPair = - publicKnowledgeAssetsUALs.length + 1; + publicKnowledgeAssetsUALs.length; publicKnowledgeAssetsTriplesGrouped.push( ...sortedPrivateRepresentationTriples.map((triple) => [triple]), ); publicKnowledgeAssetsUALs.push( ...sortedPrivateRepresentationTriples.map( (_, index) => - `${ual}:${startIndexForPrivateKnowledgeAssetsWithoutPublicPair + index}`, + `${knowledgeCollectionUAL}/${ + startIndexForPrivateKnowledgeAssetsWithoutPublicPair + index + 1 + }`, ), ); @@ -123,14 +125,14 @@ class TripleStoreService { this.repositoryImplementations[repository], repository, publicKnowledgeAssetsUALs, - TRIPLES_VISIBILITY.PUBLIC, publicKnowledgeAssetsTriplesGrouped, + TRIPLES_VISIBILITY.PUBLIC, ), ); if (triples.private?.length) { const privateKnowledgeAssetsTriplesGrouped = kcTools.groupNquadsBySubject( - publicAssertion, + triples.private, true, ); @@ -149,7 +151,7 @@ class TripleStoreService { sortedPrivateRepresentationTriples.reduce((map, triple, index) => { const privateHashedSubject = triple .split(' ')[0] - .slice(PRIVATE_RESOURCE_PREDICATE.length + 1, -1); + .slice(PRIVATE_HASH_SUBJECT_PREFIX.length + 1, -1); map.set(privateHashedSubject, index); return map; }, new Map()); @@ -166,7 +168,11 @@ class TripleStoreService { } else { const publicIndex = privateRepresentationTriplesSubjectMap.get(privateSubjectHash); - privateKnowledgeAssetsUALs.push(publicKnowledgeAssetsUALs[publicIndex]); + privateKnowledgeAssetsUALs.push( + publicKnowledgeAssetsUALs[ + startIndexForPrivateKnowledgeAssetsWithoutPublicPair + publicIndex + ], + ); } } promises.push( @@ -174,8 +180,8 @@ class TripleStoreService { this.repositoryImplementations[repository], repository, privateKnowledgeAssetsUALs, - TRIPLES_VISIBILITY.PRIVATE, privateKnowledgeAssetsTriplesGrouped, + TRIPLES_VISIBILITY.PRIVATE, ), ); } From 7ba6aaa5b467c6714404d89bf15cb0d9571ee2ca Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Fri, 13 Dec 2024 19:53:12 +0100 Subject: [PATCH 14/16] wip --- src/service/triple-store-service.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/service/triple-store-service.js b/src/service/triple-store-service.js index dd0bbc2946..fb35c81870 100644 --- a/src/service/triple-store-service.js +++ b/src/service/triple-store-service.js @@ -520,9 +520,10 @@ class TripleStoreService { } if (s) { if (s.startsWith(`<${PRIVATE_HASH_SUBJECT_PREFIX}`)) { - pair.subjectHash = s; + pair.subjectHash = s.trim(PRIVATE_HASH_SUBJECT_PREFIX.length + 1, -1); } else { - pair.subject = s; + pair.subject = s.trim(1, -1); + pair.subjectHash = this.cryptoService.sha256(pair.subject); } } map.set(g, pair); From 97530e480e447636e266015345c9ed643b859f33 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Sat, 14 Dec 2024 14:51:36 +0100 Subject: [PATCH 15/16] Add some comments --- src/service/triple-store-service.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/service/triple-store-service.js b/src/service/triple-store-service.js index 160a3f627a..57fab6bfb7 100644 --- a/src/service/triple-store-service.js +++ b/src/service/triple-store-service.js @@ -102,11 +102,13 @@ class TripleStoreService { privateHashTriple, ); } else { + // If there is no public match add it as new KA at the end sortedPrivateRepresentationTriples.push(privateHashTriple); } } const startIndexForPrivateKnowledgeAssetsWithoutPublicPair = publicKnowledgeAssetsUALs.length; + // Add private hashes without public pair to the end publicKnowledgeAssetsTriplesGrouped.push( ...sortedPrivateRepresentationTriples.map((triple) => [triple]), ); From 0a1ea48b7505349ccf0a363dbee0388b709ad77b Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Sun, 15 Dec 2024 11:40:38 +0100 Subject: [PATCH 16/16] wip --- src/service/triple-store-service.js | 259 ++++++++++++++++------------ 1 file changed, 146 insertions(+), 113 deletions(-) diff --git a/src/service/triple-store-service.js b/src/service/triple-store-service.js index bcc3439e56..b23c861328 100644 --- a/src/service/triple-store-service.js +++ b/src/service/triple-store-service.js @@ -77,6 +77,7 @@ class TripleStoreService { filteredPublic, true, ); + const publicKnowledgeAssetsUALs = publicKnowledgeAssetsTriplesGrouped.map( (_, index) => `${knowledgeCollectionUAL}/${index + 1}`, ); @@ -188,6 +189,7 @@ class TripleStoreService { ); } } + const metadataTriples = publicKnowledgeAssetsUALs .map( (publicKnowledgeAssetUAL) => @@ -258,119 +260,150 @@ class TripleStoreService { } } - async insertUpdatedKnowledgeCollection(preUpdateUalNamedGraphs, ual, triples, firstNewKAIndex) { - const publicKnowledgeAssetsTriples = this.dataService.splitConnectedArrays( - triples.public ?? triples, - ); - // subject or hashedPrivateSubject - const publicKnowledgeAssetTriplesSubjects = publicKnowledgeAssetsTriples.map( - ([triple]) => triple.split(' ')[0], - ); - - const { subjectUALPairs } = preUpdateUalNamedGraphs; - - const preUpdateSubjectUALMap = new Map(); - const preUpdateSubjectHashUALMap = new Map(); - - subjectUALPairs.forEach((pair) => { - if (pair.subject) { - preUpdateSubjectUALMap.set(pair.subject, pair.UAL); - } - if (pair.privateSubjectHash) { - preUpdateSubjectHashUALMap.set(pair.privateSubjectHash, pair.UAL); - } - }); - - // Some preUpdate KAs might not have private part, generate private subjects for them - for (const { publicPreUpdateSubject, ual: preUpdateUal } of preUpdateSubjectUALMap) { - if (!preUpdateSubjectHashUALMap.has(publicPreUpdateSubject)) { - const hashedPreUpdateSubject = `<${PRIVATE_HASH_SUBJECT_PREFIX}${this.dataService.generateHashFromString( - publicPreUpdateSubject.slice(1, -1), - )}>`; - preUpdateSubjectHashUALMap.set(hashedPreUpdateSubject, preUpdateUal); - } - } - - const publicKnowledgeAssetsUALs = []; - // From event we get firstNewKAIndex - let newKnowledgeAssetId = firstNewKAIndex; - for (const subject of publicKnowledgeAssetTriplesSubjects) { - // Rewrite code so its node done every time - const hashedSubject = `<${PRIVATE_HASH_SUBJECT_PREFIX}${this.dataService.generateHashFromString( - subject, - )}>`; - // Rewrite this that if subject is private representation don't check preUpdateSubjectHashUALMap - if ( - subject.startsWith(`<${PRIVATE_HASH_SUBJECT_PREFIX}`) && - preUpdateSubjectHashUALMap.has(subject) - ) { - publicKnowledgeAssetsUALs.push(preUpdateSubjectHashUALMap.get(subject)); - } else if (preUpdateSubjectUALMap.has(subject)) { - publicKnowledgeAssetsUALs.push(preUpdateSubjectUALMap.get(subject)); - } else if (preUpdateSubjectHashUALMap.has(hashedSubject)) { - publicKnowledgeAssetsUALs.push( - preUpdateSubjectHashUALMap.get(preUpdateSubjectHashUALMap), - ); - } else { - publicKnowledgeAssetsUALs.push(`${ual}/${newKnowledgeAssetId}`); - newKnowledgeAssetId += 1; - } - } - const promises = []; - - promises.push( - this.tripleStoreModuleManager.createKnowledgeCollectionNamedGraphs( - this.repositoryImplementations[TRIPLE_STORE_REPOSITORY.DKG], - TRIPLE_STORE_REPOSITORY.DKG, - publicKnowledgeAssetsUALs, - publicKnowledgeAssetsTriples, - TRIPLES_VISIBILITY.PUBLIC, - ), - ); - - if (triples.private?.length) { - const privateKnowledgeAssetsTriples = this.dataService.groupTriplesBySubject( - triples.private, - ); - - const privateKnowledgeAssetsUALs = []; - - const publicSubjectsMap = new Map( - publicKnowledgeAssetsTriples.reduce((map, [triple], index) => { - const [subject] = triple.split(' '); - map.set(subject, index); - return map; - }, new Map()), - ); - - // Public has to have this or hash of this subject as every private subject is represented in public part - for (const [triple] of privateKnowledgeAssetsTriples) { - const [subject] = triple.split(' '); - if (publicSubjectsMap.has(subject)) { - privateKnowledgeAssetsUALs.push( - publicKnowledgeAssetsUALs[publicSubjectsMap.get(subject)], - ); - } else { - const hashedSubject = `<${PRIVATE_HASH_SUBJECT_PREFIX}${this.dataService.generateHashFromString( - subject, - )}>`; - privateKnowledgeAssetsUALs.push( - publicKnowledgeAssetsUALs[publicSubjectsMap.get(hashedSubject)], - ); - } - } - if (privateKnowledgeAssetsUALs.length > 0) { - promises.push( - this.tripleStoreModuleManager.createKnowledgeCollectionNamedGraphs( - this.repositoryImplementations[TRIPLE_STORE_REPOSITORY.DKG], - TRIPLE_STORE_REPOSITORY.DKG, - privateKnowledgeAssetsUALs, - privateKnowledgeAssetsTriples, - TRIPLES_VISIBILITY.PRIVATE, - ), - ); - } - } + async insertUpdatedKnowledgeCollection() { + // preUpdateUalNamedGraphs, + // knowledgeCollectionUAL, + // triples, + // firstNewKAIndex, + // const publicAssertion = triples.public ?? triples; + // const { subjectUALPairs } = preUpdateUalNamedGraphs; + // const preUpdateSubjectUALMap = new Map(); + // const preUpdateSubjectHashUALMap = new Map(); + // subjectUALPairs.forEach((pair) => { + // if (pair.subject) { + // preUpdateSubjectUALMap.set(pair.subject, pair.UAL); + // } + // if (pair.privateSubjectHash) { + // preUpdateSubjectHashUALMap.set(pair.privateSubjectHash, pair.UAL); + // } + // }); + // const filteredPublic = []; + // const privateHashTriples = []; + // let kaIndex = firstNewKAIndex; + // publicAssertion.forEach((triple) => { + // if (triple.includes(PRIVATE_RESOURCE_PREDICATE)) { + // privateHashTriples.push(triple); + // } else { + // filteredPublic.push(triple); + // } + // }); + // // Only public subjects here + // const publicKnowledgeAssetsTriplesGrouped = kcTools.groupNquadsBySubject( + // filteredPublic, + // true, + // ); + // const publicKnowledgeAssetsUALs = []; + // const publicKnowledgeAssetsTriplesGroupedForInsertions = []; + // const publicSubjectMap = new Map(); + // const publicSubjectHashMap = new Map(); + // for (const [index, publicTriples] of publicKnowledgeAssetsTriplesGrouped.entries()) { + // // Check if it existed before in public + // const [publicSubject] = publicTriples[0].split(' '); + // publicKnowledgeAssetsTriplesGroupedForInsertions.push( + // publicKnowledgeAssetsTriplesGrouped[index], + // ); + // const publicSubjectHash = this.cryptoService.sha256(publicSubject.slice(1, -1)); + // let ual = ''; + // if (preUpdateSubjectUALMap.has(publicSubject)) { + // ual = preUpdateSubjectUALMap.get(publicSubject); + // } + // // Check if it existed before in private + // else if (preUpdateSubjectHashUALMap.has(publicSubjectHash)) { + // ual = preUpdateSubjectUALMap.get(publicSubjectHash); + // } else { + // // It didn't exist before + // ual = `${knowledgeCollectionUAL}/${kaIndex}`; + // kaIndex += 1; + // } + // publicKnowledgeAssetsUALs.push(ual); + // publicSubjectMap.set(publicSubject, ual); + // publicSubjectHashMap.set(publicSubjectHash, ual); + // } + // const sortedPrivateRepresentationTriples = []; + // // for (const privateHashTriple of privateHashTriples) { + // // const privateHash = privateHashTriple + // // .split(' ')[0] + // // .slice(PRIVATE_HASH_SUBJECT_PREFIX.length + 1, -1); + // // if (publicSubjectHashMap.has(privateHash)) { + // // const publicIndex = publicSubjectHashMap.get(privateHash); + // // this.dataService.insertStringInSortedArray( + // // publicKnowledgeAssetsTriplesGrouped[publicIndex], + // // privateHashTriple, + // // ); + // // } else { + // // // If there is no public match add it as new KA at the end + // // // Check if there is in previouse state + // // if (preUpdateSubjectHashUALMap.has(privateHash)) { + // // publicKnowledgeAssetsTriplesGroupedForInsertions.push([privateHashTriple]); + // // publicKnowledgeAssetsUALs.push(preUpdateSubjectHashUALMap.get(privateHash)); + // // } + // // sortedPrivateRepresentationTriples.push(privateHashTriple); + // // } + // // } + // const startIndexForPrivateKnowledgeAssetsWithoutPublicPair = + // publicKnowledgeAssetsUALs.length; + // // Add private hashes without public pair to the end + // publicKnowledgeAssetsTriplesGrouped.push( + // ...sortedPrivateRepresentationTriples.map((triple) => [triple]), + // ); + // publicKnowledgeAssetsUALs.push( + // ...sortedPrivateRepresentationTriples.map( + // (_, index) => + // `${knowledgeCollectionUAL}/${ + // startIndexForPrivateKnowledgeAssetsWithoutPublicPair + index + 1 + // }`, + // ), + // ); + // const promises = []; + // promises.push( + // this.tripleStoreModuleManager.createKnowledgeCollectionNamedGraphs( + // this.repositoryImplementations[TRIPLE_STORE_REPOSITORY.DKG], + // TRIPLE_STORE_REPOSITORY.DKG, + // publicKnowledgeAssetsUALs, + // // publicKnowledgeAssetsTriples, + // TRIPLES_VISIBILITY.PUBLIC, + // ), + // ); + // if (triples.private?.length) { + // const privateKnowledgeAssetsTriples = this.dataService.groupTriplesBySubject( + // triples.private, + // ); + // const privateKnowledgeAssetsUALs = []; + // const publicSubjectsMap = new Map( + // publicKnowledgeAssetsTriples.reduce((map, [triple], index) => { + // const [subject] = triple.split(' '); + // map.set(subject, index); + // return map; + // }, new Map()), + // ); + // // Public has to have this or hash of this subject as every private subject is represented in public part + // for (const [triple] of privateKnowledgeAssetsTriples) { + // const [subject] = triple.split(' '); + // if (publicSubjectsMap.has(subject)) { + // privateKnowledgeAssetsUALs.push( + // publicKnowledgeAssetsUALs[publicSubjectsMap.get(subject)], + // ); + // } else { + // const hashedSubject = `<${PRIVATE_HASH_SUBJECT_PREFIX}${this.dataService.generateHashFromString( + // subject, + // )}>`; + // privateKnowledgeAssetsUALs.push( + // publicKnowledgeAssetsUALs[publicSubjectsMap.get(hashedSubject)], + // ); + // } + // } + // if (privateKnowledgeAssetsUALs.length > 0) { + // promises.push( + // this.tripleStoreModuleManager.createKnowledgeCollectionNamedGraphs( + // this.repositoryImplementations[TRIPLE_STORE_REPOSITORY.DKG], + // TRIPLE_STORE_REPOSITORY.DKG, + // privateKnowledgeAssetsUALs, + // privateKnowledgeAssetsTriples, + // TRIPLES_VISIBILITY.PRIVATE, + // ), + // ); + // } + // } } async moveKnowledgeCollectionBetweenUnifiedGraphs(fromRepository, toRepository, ual) {