diff --git a/src/client/service/gestaltsActionsSetByIdentity.ts b/src/client/service/gestaltsActionsSetByIdentity.ts index 2ba7730e65..a366a300b9 100644 --- a/src/client/service/gestaltsActionsSetByIdentity.ts +++ b/src/client/service/gestaltsActionsSetByIdentity.ts @@ -68,10 +68,12 @@ function gestaltsActionsSetByIdentity({ return; } catch (e) { callback(grpcUtils.fromError(e)); - clientUtils.logServerError(logger, e, [ - gestaltsErrors.ErrorGestaltsGraphIdentityIdMissing, - gestaltsErrors.ErrorGestaltsGraphNodeIdMissing, - ]); + clientUtils.logServerError(logger, e, { + ErrorGestaltsGraphIdentityIdMissing: + gestaltsErrors.ErrorGestaltsGraphIdentityIdMissing, + ErrorGestaltsGraphNodeIdMissing: + gestaltsErrors.ErrorGestaltsGraphNodeIdMissing, + }); return; } }; diff --git a/src/client/service/gestaltsActionsSetByNode.ts b/src/client/service/gestaltsActionsSetByNode.ts index 5439fe744d..91acdf3e01 100644 --- a/src/client/service/gestaltsActionsSetByNode.ts +++ b/src/client/service/gestaltsActionsSetByNode.ts @@ -54,9 +54,10 @@ function gestaltsActionsSetByNode({ return; } catch (e) { callback(grpcUtils.fromError(e)); - clientUtils.logServerError(logger, e, [ - gestaltsErrors.ErrorGestaltsGraphNodeIdMissing, - ]); + clientUtils.logServerError(logger, e, { + ErrorGestaltsGraphNodeIdMissing: + gestaltsErrors.ErrorGestaltsGraphNodeIdMissing, + }); return; } }; diff --git a/src/client/service/gestaltsActionsUnsetByIdentity.ts b/src/client/service/gestaltsActionsUnsetByIdentity.ts index 1ee1c1132c..87ef7a7bd0 100644 --- a/src/client/service/gestaltsActionsUnsetByIdentity.ts +++ b/src/client/service/gestaltsActionsUnsetByIdentity.ts @@ -68,10 +68,12 @@ function gestaltsActionsUnsetByIdentity({ return; } catch (e) { callback(grpcUtils.fromError(e)); - clientUtils.logServerError(logger, e, [ - gestaltsErrors.ErrorGestaltsGraphIdentityIdMissing, - gestaltsErrors.ErrorGestaltsGraphNodeIdMissing, - ]); + clientUtils.logServerError(logger, e, { + ErrorGestaltsGraphIdentityIdMissing: + gestaltsErrors.ErrorGestaltsGraphIdentityIdMissing, + ErrorGestaltsGraphNodeIdMissing: + gestaltsErrors.ErrorGestaltsGraphNodeIdMissing, + }); return; } }; diff --git a/src/client/service/gestaltsActionsUnsetByNode.ts b/src/client/service/gestaltsActionsUnsetByNode.ts index 7a21a0ee57..cfaa20939c 100644 --- a/src/client/service/gestaltsActionsUnsetByNode.ts +++ b/src/client/service/gestaltsActionsUnsetByNode.ts @@ -54,9 +54,10 @@ function gestaltsActionsUnsetByNode({ return; } catch (e) { callback(grpcUtils.fromError(e)); - clientUtils.logServerError(logger, e, [ - gestaltsErrors.ErrorGestaltsGraphNodeIdMissing, - ]); + clientUtils.logServerError(logger, e, { + ErrorGestaltsGraphNodeIdMissing: + gestaltsErrors.ErrorGestaltsGraphNodeIdMissing, + }); return; } }; diff --git a/src/client/service/gestaltsGestaltTrustByIdentity.ts b/src/client/service/gestaltsGestaltTrustByIdentity.ts index 571687fa80..4335456a55 100644 --- a/src/client/service/gestaltsGestaltTrustByIdentity.ts +++ b/src/client/service/gestaltsGestaltTrustByIdentity.ts @@ -84,10 +84,12 @@ function gestaltsGestaltTrustByIdentity({ return; } catch (e) { callback(grpcUtils.fromError(e)); - clientUtils.logServerError(logger, e, [ - gestaltsErrors.ErrorGestaltsGraphIdentityIdMissing, - gestaltsErrors.ErrorGestaltsGraphNodeIdMissing, - ]); + clientUtils.logServerError(logger, e, { + ErrorGestaltsGraphIdentityIdMissing: + gestaltsErrors.ErrorGestaltsGraphIdentityIdMissing, + ErrorGestaltsGraphNodeIdMissing: + gestaltsErrors.ErrorGestaltsGraphNodeIdMissing, + }); return; } }; diff --git a/src/client/service/gestaltsGestaltTrustByNode.ts b/src/client/service/gestaltsGestaltTrustByNode.ts index 097a94b07a..ebab3a2790 100644 --- a/src/client/service/gestaltsGestaltTrustByNode.ts +++ b/src/client/service/gestaltsGestaltTrustByNode.ts @@ -9,9 +9,11 @@ import type Logger from '@matrixai/logger'; import { validateSync } from '../../validation'; import { matchSync } from '../../utils'; import * as grpcUtils from '../../grpc/utils'; +import * as gestaltsErrors from '../../gestalts/errors'; import * as validationUtils from '../../validation/utils'; import * as utilsPB from '../../proto/js/polykey/v1/utils/utils_pb'; import * as nodesUtils from '../../nodes/utils'; +import * as clientUtils from '../utils'; function gestaltsGestaltTrustByNode({ authenticate, @@ -69,7 +71,10 @@ function gestaltsGestaltTrustByNode({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e, { + ErrorGestaltsGraphNodeIdMissing: + gestaltsErrors.ErrorGestaltsGraphNodeIdMissing, + }); return; } }; diff --git a/src/client/service/identitiesAuthenticate.ts b/src/client/service/identitiesAuthenticate.ts index 05c3e05d35..3165375986 100644 --- a/src/client/service/identitiesAuthenticate.ts +++ b/src/client/service/identitiesAuthenticate.ts @@ -9,6 +9,7 @@ import { validateSync } from '../../validation'; import * as validationUtils from '../../validation/utils'; import { matchSync, never } from '../../utils'; import * as identitiesPB from '../../proto/js/polykey/v1/identities/identities_pb'; +import * as clientUtils from '../utils'; function identitiesAuthenticate({ authenticate, @@ -74,7 +75,9 @@ function identitiesAuthenticate({ return; } catch (e) { await genWritable.throw(e); - logger.error(e); + clientUtils.logServerError(logger, e, { + ErrorProviderMissing: identitiesErrors.ErrorProviderMissing, + }); return; } }; diff --git a/src/client/service/identitiesAuthenticatedGet.ts b/src/client/service/identitiesAuthenticatedGet.ts index 82262f89d8..738f5dc806 100644 --- a/src/client/service/identitiesAuthenticatedGet.ts +++ b/src/client/service/identitiesAuthenticatedGet.ts @@ -8,6 +8,7 @@ import { matchSync } from '../../utils'; import * as grpcUtils from '../../grpc/utils'; import * as validationUtils from '../../validation/utils'; import * as identitiesPB from '../../proto/js/polykey/v1/identities/identities_pb'; +import * as clientUtils from '../utils'; function identitiesAuthenticatedGet({ authenticate, @@ -63,7 +64,7 @@ function identitiesAuthenticatedGet({ return; } catch (e) { await genWritable.throw(e); - logger.error(e); + clientUtils.logServerError(logger, e); return; } }; diff --git a/src/client/service/identitiesClaim.ts b/src/client/service/identitiesClaim.ts index 43919bd45c..ab5341ae6a 100644 --- a/src/client/service/identitiesClaim.ts +++ b/src/client/service/identitiesClaim.ts @@ -14,6 +14,7 @@ import { validateSync } from '../../validation'; import * as validationUtils from '../../validation/utils'; import { matchSync } from '../../utils'; import * as identitiesPB from '../../proto/js/polykey/v1/identities/identities_pb'; +import * as clientUtils from '../utils'; /** * Augments the keynode with a new identity. @@ -92,7 +93,11 @@ function identitiesClaim({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e, { + ErrorProviderMissing: identitiesErrors.ErrorProviderMissing, + ErrorProviderUnauthenticated: + identitiesErrors.ErrorProviderUnauthenticated, + }); return; } }; diff --git a/src/client/service/identitiesInfoConnectedGet.ts b/src/client/service/identitiesInfoConnectedGet.ts index b9d7ac4411..72517eb795 100644 --- a/src/client/service/identitiesInfoConnectedGet.ts +++ b/src/client/service/identitiesInfoConnectedGet.ts @@ -13,6 +13,7 @@ import * as grpcUtils from '../../grpc/utils'; import * as validationUtils from '../../validation/utils'; import * as identitiesErrors from '../../identities/errors'; import * as identitiesPB from '../../proto/js/polykey/v1/identities/identities_pb'; +import * as clientUtils from '../utils'; function identitiesInfoConnectedGet({ authenticate, @@ -119,7 +120,11 @@ function identitiesInfoConnectedGet({ return; } catch (e) { await genWritable.throw(e); - logger.error(e); + clientUtils.logServerError(logger, e, { + ErrorProviderMissing: identitiesErrors.ErrorProviderMissing, + ErrorProviderUnauthenticated: + identitiesErrors.ErrorProviderUnauthenticated, + }); return; } }; diff --git a/src/client/service/identitiesInfoGet.ts b/src/client/service/identitiesInfoGet.ts index 5f456dac57..13fccf9a00 100644 --- a/src/client/service/identitiesInfoGet.ts +++ b/src/client/service/identitiesInfoGet.ts @@ -14,6 +14,7 @@ import * as validationUtils from '../../validation/utils'; import * as identitiesUtils from '../../identities/utils'; import * as identitiesErrors from '../../identities/errors'; import * as identitiesPB from '../../proto/js/polykey/v1/identities/identities_pb'; +import * as clientUtils from '../utils'; function identitiesInfoGet({ authenticate, @@ -112,7 +113,11 @@ function identitiesInfoGet({ return; } catch (e) { await genWritable.throw(e); - logger.error(e); + clientUtils.logServerError(logger, e, { + ErrorProviderMissing: identitiesErrors.ErrorProviderMissing, + ErrorProviderUnauthenticated: + identitiesErrors.ErrorProviderUnauthenticated, + }); return; } }; diff --git a/src/client/service/identitiesProvidersList.ts b/src/client/service/identitiesProvidersList.ts index 35751c3fb8..306677918a 100644 --- a/src/client/service/identitiesProvidersList.ts +++ b/src/client/service/identitiesProvidersList.ts @@ -5,6 +5,7 @@ import type * as utilsPB from '../../proto/js/polykey/v1/utils/utils_pb'; import type Logger from '@matrixai/logger'; import * as grpcUtils from '../../grpc/utils'; import * as identitiesPB from '../../proto/js/polykey/v1/identities/identities_pb'; +import * as clientUtils from '../utils'; function identitiesProvidersList({ authenticate, @@ -29,7 +30,7 @@ function identitiesProvidersList({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e); return; } }; diff --git a/src/client/service/identitiesTokenDelete.ts b/src/client/service/identitiesTokenDelete.ts index 82d0d57d50..0e9491a34e 100644 --- a/src/client/service/identitiesTokenDelete.ts +++ b/src/client/service/identitiesTokenDelete.ts @@ -10,6 +10,7 @@ import { validateSync } from '../../validation'; import * as validationUtils from '../../validation/utils'; import { matchSync } from '../../utils'; import * as utilsPB from '../../proto/js/polykey/v1/utils/utils_pb'; +import * as clientUtils from '../utils'; function identitiesTokenDelete({ authenticate, @@ -56,7 +57,7 @@ function identitiesTokenDelete({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e); return; } }; diff --git a/src/client/service/identitiesTokenGet.ts b/src/client/service/identitiesTokenGet.ts index 09199866dd..cb10f458c6 100644 --- a/src/client/service/identitiesTokenGet.ts +++ b/src/client/service/identitiesTokenGet.ts @@ -9,6 +9,7 @@ import { validateSync } from '../../validation'; import * as validationUtils from '../../validation/utils'; import { matchSync } from '../../utils'; import * as identitiesPB from '../../proto/js/polykey/v1/identities/identities_pb'; +import * as clientUtils from '../utils'; function identitiesTokenGet({ authenticate, @@ -56,7 +57,7 @@ function identitiesTokenGet({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e); return; } }; diff --git a/src/client/service/identitiesTokenPut.ts b/src/client/service/identitiesTokenPut.ts index 336f1646a6..6d036387e8 100644 --- a/src/client/service/identitiesTokenPut.ts +++ b/src/client/service/identitiesTokenPut.ts @@ -10,6 +10,7 @@ import { validateSync } from '../../validation'; import * as validationUtils from '../../validation/utils'; import { matchSync } from '../../utils'; import * as utilsPB from '../../proto/js/polykey/v1/utils/utils_pb'; +import * as clientUtils from '../utils'; function identitiesTokenPut({ authenticate, @@ -66,7 +67,7 @@ function identitiesTokenPut({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e); return; } }; diff --git a/src/client/service/keysCertsChainGet.ts b/src/client/service/keysCertsChainGet.ts index 6290a313c5..8947f59ca6 100644 --- a/src/client/service/keysCertsChainGet.ts +++ b/src/client/service/keysCertsChainGet.ts @@ -5,6 +5,7 @@ import type * as utilsPB from '../../proto/js/polykey/v1/utils/utils_pb'; import type Logger from '@matrixai/logger'; import * as grpcUtils from '../../grpc/utils'; import * as keysPB from '../../proto/js/polykey/v1/keys/keys_pb'; +import * as clientUtils from '../utils'; function keysCertsChainGet({ authenticate, @@ -33,7 +34,7 @@ function keysCertsChainGet({ return; } catch (e) { await genWritable.throw(e); - logger.error(e); + clientUtils.logServerError(logger, e); return; } }; diff --git a/src/client/service/keysCertsGet.ts b/src/client/service/keysCertsGet.ts index eabde463b8..4ba75e5d57 100644 --- a/src/client/service/keysCertsGet.ts +++ b/src/client/service/keysCertsGet.ts @@ -5,6 +5,7 @@ import type * as utilsPB from '../../proto/js/polykey/v1/utils/utils_pb'; import type Logger from '@matrixai/logger'; import * as grpcUtils from '../../grpc/utils'; import * as keysPB from '../../proto/js/polykey/v1/keys/keys_pb'; +import * as clientUtils from '../utils'; function keysCertsGet({ authenticate, @@ -29,7 +30,7 @@ function keysCertsGet({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e); return; } }; diff --git a/src/client/service/keysDecrypt.ts b/src/client/service/keysDecrypt.ts index ed1776cdae..18ddfa3ab4 100644 --- a/src/client/service/keysDecrypt.ts +++ b/src/client/service/keysDecrypt.ts @@ -4,6 +4,7 @@ import type KeyManager from '../../keys/KeyManager'; import type Logger from '@matrixai/logger'; import * as grpcUtils from '../../grpc/utils'; import * as keysPB from '../../proto/js/polykey/v1/keys/keys_pb'; +import * as clientUtils from '../utils'; function keysDecrypt({ authenticate, @@ -30,7 +31,7 @@ function keysDecrypt({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e); return; } }; diff --git a/src/client/service/keysEncrypt.ts b/src/client/service/keysEncrypt.ts index 35159f8707..e28548829e 100644 --- a/src/client/service/keysEncrypt.ts +++ b/src/client/service/keysEncrypt.ts @@ -4,6 +4,7 @@ import type KeyManager from '../../keys/KeyManager'; import type Logger from '@matrixai/logger'; import * as grpcUtils from '../../grpc/utils'; import * as keysPB from '../../proto/js/polykey/v1/keys/keys_pb'; +import * as clientUtils from '../utils'; function keysEncrypt({ authenticate, @@ -30,7 +31,7 @@ function keysEncrypt({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e); return; } }; diff --git a/src/client/service/keysKeyPairRenew.ts b/src/client/service/keysKeyPairRenew.ts index dcd90d7c1e..a41c2bf787 100644 --- a/src/client/service/keysKeyPairRenew.ts +++ b/src/client/service/keysKeyPairRenew.ts @@ -5,6 +5,7 @@ import type * as keysPB from '../../proto/js/polykey/v1/keys/keys_pb'; import type Logger from '@matrixai/logger'; import * as grpcUtils from '../../grpc/utils'; import * as utilsPB from '../../proto/js/polykey/v1/utils/utils_pb'; +import * as clientUtils from '../utils'; function keysKeyPairRenew({ authenticate, @@ -30,7 +31,7 @@ function keysKeyPairRenew({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e); return; } }; diff --git a/src/client/service/keysKeyPairReset.ts b/src/client/service/keysKeyPairReset.ts index 87498f7333..bce6da2727 100644 --- a/src/client/service/keysKeyPairReset.ts +++ b/src/client/service/keysKeyPairReset.ts @@ -5,6 +5,7 @@ import type * as keysPB from '../../proto/js/polykey/v1/keys/keys_pb'; import type Logger from '@matrixai/logger'; import * as grpcUtils from '../../grpc/utils'; import * as utilsPB from '../../proto/js/polykey/v1/utils/utils_pb'; +import * as clientUtils from '../utils'; function keysKeyPairReset({ authenticate, @@ -30,7 +31,7 @@ function keysKeyPairReset({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e); return; } }; diff --git a/src/client/service/keysKeyPairRoot.ts b/src/client/service/keysKeyPairRoot.ts index 7bfc955498..9dcff7ad62 100644 --- a/src/client/service/keysKeyPairRoot.ts +++ b/src/client/service/keysKeyPairRoot.ts @@ -5,6 +5,7 @@ import type * as utilsPB from '../../proto/js/polykey/v1/utils/utils_pb'; import type Logger from '@matrixai/logger'; import * as grpcUtils from '../../grpc/utils'; import * as keysPB from '../../proto/js/polykey/v1/keys/keys_pb'; +import * as clientUtils from '../utils'; function keysKeyPairRoot({ authenticate, @@ -30,7 +31,7 @@ function keysKeyPairRoot({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e); return; } }; diff --git a/src/client/service/keysPasswordChange.ts b/src/client/service/keysPasswordChange.ts index 639e60ac9c..0210772a39 100644 --- a/src/client/service/keysPasswordChange.ts +++ b/src/client/service/keysPasswordChange.ts @@ -5,6 +5,7 @@ import type * as sessionsPB from '../../proto/js/polykey/v1/sessions/sessions_pb import type Logger from '@matrixai/logger'; import * as grpcUtils from '../../grpc/utils'; import * as utilsPB from '../../proto/js/polykey/v1/utils/utils_pb'; +import * as clientUtils from '../utils'; function keysPasswordChange({ authenticate, @@ -28,7 +29,7 @@ function keysPasswordChange({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e); return; } }; diff --git a/src/client/service/keysSign.ts b/src/client/service/keysSign.ts index b998e0561e..79849a47e8 100644 --- a/src/client/service/keysSign.ts +++ b/src/client/service/keysSign.ts @@ -4,6 +4,7 @@ import type KeyManager from '../../keys/KeyManager'; import type Logger from '@matrixai/logger'; import * as grpcUtils from '../../grpc/utils'; import * as keysPB from '../../proto/js/polykey/v1/keys/keys_pb'; +import * as clientUtils from '../utils'; function keysSign({ authenticate, @@ -31,7 +32,7 @@ function keysSign({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e); return; } }; diff --git a/src/client/service/keysVerify.ts b/src/client/service/keysVerify.ts index efbfb7b4c7..870b8c1c22 100644 --- a/src/client/service/keysVerify.ts +++ b/src/client/service/keysVerify.ts @@ -5,6 +5,7 @@ import type * as keysPB from '../../proto/js/polykey/v1/keys/keys_pb'; import type Logger from '@matrixai/logger'; import * as grpcUtils from '../../grpc/utils'; import * as utilsPB from '../../proto/js/polykey/v1/utils/utils_pb'; +import * as clientUtils from '../utils'; function keysVerify({ authenticate, @@ -32,7 +33,7 @@ function keysVerify({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e); return; } }; diff --git a/src/client/service/nodesAdd.ts b/src/client/service/nodesAdd.ts index 1433e08967..d0af40e3ad 100644 --- a/src/client/service/nodesAdd.ts +++ b/src/client/service/nodesAdd.ts @@ -11,6 +11,7 @@ import { validateSync } from '../../validation'; import * as validationUtils from '../../validation/utils'; import { matchSync } from '../../utils'; import * as utilsPB from '../../proto/js/polykey/v1/utils/utils_pb'; +import * as clientUtils from '../utils'; /** * Adds a node ID -> node address mapping into the buckets database. @@ -73,7 +74,7 @@ function nodesAdd({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e); return; } }; diff --git a/src/client/service/nodesClaim.ts b/src/client/service/nodesClaim.ts index 4d9cdc7839..715065ddca 100644 --- a/src/client/service/nodesClaim.ts +++ b/src/client/service/nodesClaim.ts @@ -9,8 +9,10 @@ import type Logger from '@matrixai/logger'; import * as grpcUtils from '../../grpc/utils'; import { validateSync } from '../../validation'; import * as validationUtils from '../../validation/utils'; +import * as nodesErrors from '../../nodes/errors'; import { matchSync } from '../../utils'; import * as utilsPB from '../../proto/js/polykey/v1/utils/utils_pb'; +import * as clientUtils from '../utils'; /** * Checks whether there is an existing Gestalt Invitation from the other node. @@ -75,7 +77,9 @@ function nodesClaim({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e, { + ErrorNodeGraphNodeIdNotFound: nodesErrors.ErrorNodeGraphNodeIdNotFound, + }); return; } }; diff --git a/src/client/service/nodesFind.ts b/src/client/service/nodesFind.ts index 284e50748a..7d242d5271 100644 --- a/src/client/service/nodesFind.ts +++ b/src/client/service/nodesFind.ts @@ -4,11 +4,13 @@ import type NodeConnectionManager from '../../nodes/NodeConnectionManager'; import type { NodeId } from '../../nodes/types'; import type Logger from '@matrixai/logger'; import * as nodesUtils from '../../nodes/utils'; +import * as nodesErrors from '../../nodes/errors'; import * as grpcUtils from '../../grpc/utils'; import { validateSync } from '../../validation'; import * as validationUtils from '../../validation/utils'; import { matchSync } from '../../utils'; import * as nodesPB from '../../proto/js/polykey/v1/nodes/nodes_pb'; +import * as clientUtils from '../utils'; /** * Attempts to get the node address of a provided node ID (by contacting @@ -57,7 +59,9 @@ function nodesFind({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e, { + ErrorNodeGraphNodeIdNotFound: nodesErrors.ErrorNodeGraphNodeIdNotFound, + }); return; } }; diff --git a/src/client/service/nodesPing.ts b/src/client/service/nodesPing.ts index 449905cc75..c246fa9255 100644 --- a/src/client/service/nodesPing.ts +++ b/src/client/service/nodesPing.ts @@ -7,8 +7,10 @@ import type Logger from '@matrixai/logger'; import * as grpcUtils from '../../grpc/utils'; import { validateSync } from '../../validation'; import * as validationUtils from '../../validation/utils'; +import * as nodesErrors from '../../nodes/errors'; import { matchSync } from '../../utils'; import * as utilsPB from '../../proto/js/polykey/v1/utils/utils_pb'; +import * as clientUtils from '../utils'; /** * Checks if a remote node is online. @@ -51,7 +53,9 @@ function nodesPing({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e, { + ErrorNodeGraphNodeIdNotFound: nodesErrors.ErrorNodeGraphNodeIdNotFound, + }); return; } }; diff --git a/src/client/service/notificationsClear.ts b/src/client/service/notificationsClear.ts index 56b2fabef6..3218eeeb45 100644 --- a/src/client/service/notificationsClear.ts +++ b/src/client/service/notificationsClear.ts @@ -5,6 +5,7 @@ import type NotificationsManager from '../../notifications/NotificationsManager' import type Logger from '@matrixai/logger'; import * as grpcUtils from '../../grpc/utils'; import * as utilsPB from '../../proto/js/polykey/v1/utils/utils_pb'; +import * as clientUtils from '../utils'; function notificationsClear({ authenticate, @@ -32,7 +33,7 @@ function notificationsClear({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e); return; } }; diff --git a/src/client/service/notificationsRead.ts b/src/client/service/notificationsRead.ts index 63b94438d7..8ac73edf1e 100644 --- a/src/client/service/notificationsRead.ts +++ b/src/client/service/notificationsRead.ts @@ -5,6 +5,7 @@ import type NotificationsManager from '../../notifications/NotificationsManager' import type Logger from '@matrixai/logger'; import * as grpcUtils from '../../grpc/utils'; import * as notificationsPB from '../../proto/js/polykey/v1/notifications/notifications_pb'; +import * as clientUtils from '../utils'; function notificationsRead({ authenticate, @@ -74,7 +75,7 @@ function notificationsRead({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e); return; } }; diff --git a/src/client/service/notificationsSend.ts b/src/client/service/notificationsSend.ts index 4ff96fea61..be7c4cca2c 100644 --- a/src/client/service/notificationsSend.ts +++ b/src/client/service/notificationsSend.ts @@ -8,8 +8,10 @@ import * as grpcUtils from '../../grpc/utils'; import * as notificationsUtils from '../../notifications/utils'; import { validateSync } from '../../validation'; import * as validationUtils from '../../validation/utils'; +import * as nodesErrors from '../../nodes/errors'; import { matchSync } from '../../utils'; import * as utilsPB from '../../proto/js/polykey/v1/utils/utils_pb'; +import * as clientUtils from '../utils'; function notificationsSend({ authenticate, @@ -54,7 +56,9 @@ function notificationsSend({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e, { + ErrorNodeGraphNodeIdNotFound: nodesErrors.ErrorNodeGraphNodeIdNotFound, + }); return; } }; diff --git a/src/client/service/vaultsClone.ts b/src/client/service/vaultsClone.ts index bd3693c5c7..fed7a27ef8 100644 --- a/src/client/service/vaultsClone.ts +++ b/src/client/service/vaultsClone.ts @@ -1,13 +1,20 @@ import type { DB } from '@matrixai/db'; import type { Authenticate } from '../types'; import type VaultManager from '../../vaults/VaultManager'; +import type { VaultId } from '../../vaults/types'; +import type { NodeId } from '../../nodes/types'; import type * as vaultsPB from '../../proto/js/polykey/v1/vaults/vaults_pb'; import type Logger from '@matrixai/logger'; -import * as grpc from '@grpc/grpc-js'; +import type * as grpc from '@grpc/grpc-js'; import * as grpcUtils from '../../grpc/utils'; import * as utilsPB from '../../proto/js/polykey/v1/utils/utils_pb'; +import * as nodesErrors from '../../nodes/errors'; +import { validateSync } from '../../validation'; import * as validationUtils from '../../validation/utils'; import * as vaultsUtils from '../../vaults/utils'; +import * as vaultsErrors from '../../vaults/errors'; +import { matchSync } from '../../utils'; +import * as clientUtils from '../utils'; function vaultsClone({ authenticate, @@ -28,24 +35,25 @@ function vaultsClone({ const response = new utilsPB.StatusMessage(); const metadata = await authenticate(call.metadata); call.sendMetadata(metadata); - - const vaultMessage = call.request.getVault(); - if (vaultMessage == null) { - callback({ code: grpc.status.NOT_FOUND }, null); - return; - } - const nodeMessage = call.request.getNode(); - if (nodeMessage == null) { - callback({ code: grpc.status.NOT_FOUND }, null); - return; - } - // Vault id - let vaultId; - const vaultNameOrId = vaultMessage.getNameOrId(); - vaultId = vaultsUtils.decodeVaultId(vaultNameOrId); - vaultId = vaultId ?? vaultNameOrId; - // Node id - const nodeId = validationUtils.parseNodeId(nodeMessage.getNodeId()); + const { + nodeId, + vaultId, + }: { + nodeId: NodeId; + vaultId: VaultId; + } = validateSync( + (keyPath, value) => { + return matchSync(keyPath)( + [['nodeId'], () => validationUtils.parseNodeId(value)], + [['vaultId'], () => vaultsUtils.decodeVaultId(value) ?? value], + () => value, + ); + }, + { + nodeId: call.request.getNode()?.getNodeId(), + vaultId: call.request.getVault()?.getNameOrId(), + }, + ); await db.withTransactionF(async (tran) => vaultManager.cloneVault(nodeId, vaultId, tran), ); @@ -54,7 +62,10 @@ function vaultsClone({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e, { + ErrorNodeGraphNodeIdNotFound: nodesErrors.ErrorNodeGraphNodeIdNotFound, + ErrorVaultsNameConflict: vaultsErrors.ErrorVaultsNameConflict, + }); return; } }; diff --git a/src/client/service/vaultsCreate.ts b/src/client/service/vaultsCreate.ts index a739604e70..96522ca325 100644 --- a/src/client/service/vaultsCreate.ts +++ b/src/client/service/vaultsCreate.ts @@ -7,7 +7,9 @@ import type * as utilsPB from '../../proto/js/polykey/v1/utils/utils_pb'; import type Logger from '@matrixai/logger'; import * as grpcUtils from '../../grpc/utils'; import * as vaultsUtils from '../../vaults/utils'; +import * as vaultsErrors from '../../vaults/errors'; import * as vaultsPB from '../../proto/js/polykey/v1/vaults/vaults_pb'; +import * as clientUtils from '../utils'; function vaultsCreate({ authenticate, @@ -37,7 +39,9 @@ function vaultsCreate({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e, { + ErrorVaultsVaultDefined: vaultsErrors.ErrorVaultsVaultDefined, + }); return; } }; diff --git a/src/client/service/vaultsDelete.ts b/src/client/service/vaultsDelete.ts index 7a87f2da0d..0814e3fa16 100644 --- a/src/client/service/vaultsDelete.ts +++ b/src/client/service/vaultsDelete.ts @@ -1,5 +1,5 @@ import type { Authenticate } from '../types'; -import type { VaultName } from '../../vaults/types'; +import type { VaultName, VaultId } from '../../vaults/types'; import type VaultManager from '../../vaults/VaultManager'; import type * as grpc from '@grpc/grpc-js'; import type { DB } from '@matrixai/db'; @@ -7,7 +7,11 @@ import type * as vaultsPB from '../../proto/js/polykey/v1/vaults/vaults_pb'; import type Logger from '@matrixai/logger'; import * as grpcUtils from '../../grpc/utils'; import * as utilsPB from '../../proto/js/polykey/v1/utils/utils_pb'; +import { validateSync } from '../../validation'; import * as validationUtils from '../../validation/utils'; +import * as vaultsErrors from '../../vaults/errors'; +import { matchSync } from '../../utils'; +import * as clientUtils from '../utils'; function vaultsDelete({ authenticate, @@ -24,18 +28,33 @@ function vaultsDelete({ call: grpc.ServerUnaryCall, callback: grpc.sendUnaryData, ): Promise => { - const vaultMessage = call.request; try { const response = new utilsPB.StatusMessage(); const metadata = await authenticate(call.metadata); call.sendMetadata(metadata); - const nameOrId = vaultMessage.getNameOrId(); await db.withTransactionF(async (tran) => { - let vaultId = await vaultManager.getVaultId( - nameOrId as VaultName, + const vaultIdFromName = await vaultManager.getVaultId( + call.request.getNameOrId() as VaultName, tran, ); - vaultId = vaultId ?? validationUtils.parseVaultId(nameOrId); + const { + vaultId, + }: { + vaultId: VaultId; + } = validateSync( + (keyPath, value) => { + return matchSync(keyPath)( + [ + ['vaultId'], + () => vaultIdFromName ?? validationUtils.parseVaultId(value), + ], + () => value, + ); + }, + { + vaultId: call.request.getNameOrId(), + }, + ); await vaultManager.destroyVault(vaultId, tran); }); response.setSuccess(true); @@ -43,7 +62,9 @@ function vaultsDelete({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e, { + ErrorVaultsVaultUndefined: vaultsErrors.ErrorVaultsVaultUndefined, + }); return; } }; diff --git a/src/client/service/vaultsList.ts b/src/client/service/vaultsList.ts index a4a618275b..434053cc82 100644 --- a/src/client/service/vaultsList.ts +++ b/src/client/service/vaultsList.ts @@ -7,6 +7,7 @@ import type Logger from '@matrixai/logger'; import * as grpcUtils from '../../grpc/utils'; import * as vaultsUtils from '../../vaults/utils'; import * as vaultsPB from '../../proto/js/polykey/v1/vaults/vaults_pb'; +import * as clientUtils from '../utils'; function vaultsList({ authenticate, @@ -39,7 +40,7 @@ function vaultsList({ return; } catch (e) { await genWritable.throw(e); - logger.error(e); + clientUtils.logServerError(logger, e); return; } }; diff --git a/src/client/service/vaultsLog.ts b/src/client/service/vaultsLog.ts index 367dd0a1ed..7cdaea7f43 100644 --- a/src/client/service/vaultsLog.ts +++ b/src/client/service/vaultsLog.ts @@ -1,13 +1,17 @@ import type { DB } from '@matrixai/db'; import type { Authenticate } from '../types'; -import type { VaultName } from '../../vaults/types'; +import type { VaultName, VaultId } from '../../vaults/types'; import type VaultManager from '../../vaults/VaultManager'; import type Logger from '@matrixai/logger'; -import * as grpc from '@grpc/grpc-js'; +import type * as grpc from '@grpc/grpc-js'; import { Timestamp } from 'google-protobuf/google/protobuf/timestamp_pb'; import * as grpcUtils from '../../grpc/utils'; import * as vaultsPB from '../../proto/js/polykey/v1/vaults/vaults_pb'; +import { validateSync } from '../../validation'; import * as validationUtils from '../../validation/utils'; +import * as vaultsErrors from '../../vaults/errors'; +import { matchSync } from '../../utils'; +import * as clientUtils from '../utils'; function vaultsLog({ authenticate, @@ -27,23 +31,32 @@ function vaultsLog({ try { const metadata = await authenticate(call.metadata); call.sendMetadata(metadata); - // Getting the vault - const vaultsLogMessage = call.request; - const vaultMessage = vaultsLogMessage.getVault(); - if (vaultMessage == null) { - await genWritable.throw({ code: grpc.status.NOT_FOUND }); - return; - } - const nameOrId = vaultMessage.getNameOrId(); const log = await db.withTransactionF(async (tran) => { - let vaultId = await vaultManager.getVaultId( - nameOrId as VaultName, + const vaultIdFromName = await vaultManager.getVaultId( + call.request.getVault()?.getNameOrId() as VaultName, tran, ); - vaultId = vaultId ?? validationUtils.parseVaultId(nameOrId); + const { + vaultId, + }: { + vaultId: VaultId; + } = validateSync( + (keyPath, value) => { + return matchSync(keyPath)( + [ + ['vaultId'], + () => vaultIdFromName ?? validationUtils.parseVaultId(value), + ], + () => value, + ); + }, + { + vaultId: call.request.getVault()?.getNameOrId(), + }, + ); // Getting the log - const depth = vaultsLogMessage.getLogDepth(); - let commitId: string | undefined = vaultsLogMessage.getCommitId(); + const depth = call.request.getLogDepth(); + let commitId: string | undefined = call.request.getCommitId(); commitId = commitId ? commitId : undefined; return await vaultManager.withVaults( [vaultId], @@ -67,7 +80,10 @@ function vaultsLog({ return; } catch (e) { await genWritable.throw(e); - logger.error(e); + clientUtils.logServerError(logger, e, { + ErrorVaultsVaultUndefined: vaultsErrors.ErrorVaultsVaultUndefined, + ErrorVaultReferenceInvalid: vaultsErrors.ErrorVaultReferenceInvalid, + }); return; } }; diff --git a/src/client/service/vaultsPermissionGet.ts b/src/client/service/vaultsPermissionGet.ts index 8e62be35a7..e27d1578c9 100644 --- a/src/client/service/vaultsPermissionGet.ts +++ b/src/client/service/vaultsPermissionGet.ts @@ -2,8 +2,7 @@ import type * as grpc from '@grpc/grpc-js'; import type { DB } from '@matrixai/db'; import type { Authenticate } from '../types'; import type VaultManager from '../../vaults/VaultManager'; -import type { VaultName } from '../../vaults/types'; -import type { VaultActions } from '../../vaults/types'; +import type { VaultName, VaultId, VaultActions } from '../../vaults/types'; import type ACL from '../../acl/ACL'; import type { NodeId, NodeIdEncoded } from 'nodes/types'; import type Logger from '@matrixai/logger'; @@ -11,8 +10,11 @@ import { IdInternal } from '@matrixai/id'; import * as grpcUtils from '../../grpc/utils'; import * as nodesPB from '../../proto/js/polykey/v1/nodes/nodes_pb'; import * as vaultsPB from '../../proto/js/polykey/v1/vaults/vaults_pb'; +import { validateSync } from '../../validation'; import * as validationUtils from '../../validation/utils'; import * as nodesUtils from '../../nodes/utils'; +import { matchSync } from '../../utils'; +import * as clientUtils from '../utils'; function vaultsPermissionGet({ authenticate, @@ -32,18 +34,33 @@ function vaultsPermissionGet({ ): Promise => { const genWritable = grpcUtils.generatorWritable(call, false); try { - const vaultMessage = call.request; const metadata = await authenticate(call.metadata); call.sendMetadata(metadata); // Getting vaultId - const nameOrId = vaultMessage.getNameOrId(); const [rawPermissions, vaultId] = await db.withTransactionF( async (tran) => { - let vaultId = await vaultManager.getVaultId( - nameOrId as VaultName, + const vaultIdFromName = await vaultManager.getVaultId( + call.request.getNameOrId() as VaultName, tran, ); - vaultId = vaultId ?? validationUtils.parseVaultId(nameOrId); + const { + vaultId, + }: { + vaultId: VaultId; + } = validateSync( + (keyPath, value) => { + return matchSync(keyPath)( + [ + ['vaultId'], + () => vaultIdFromName ?? validationUtils.parseVaultId(value), + ], + () => value, + ); + }, + { + vaultId: call.request.getNameOrId(), + }, + ); // Getting permissions return [await acl.getVaultPerm(vaultId, tran), vaultId]; }, @@ -53,11 +70,9 @@ function vaultsPermissionGet({ for (const nodeId in rawPermissions) { permissionList[nodeId] = rawPermissions[nodeId].vaults[vaultId]; } - const vaultPermissionsMessage = new vaultsPB.Permissions(); - vaultPermissionsMessage.setVault(vaultMessage); + vaultPermissionsMessage.setVault(call.request); const nodeMessage = new nodesPB.Node(); - // Constructing the message for (const nodeIdString in permissionList) { const nodeId = IdInternal.fromString(nodeIdString); @@ -71,7 +86,7 @@ function vaultsPermissionGet({ return; } catch (e) { await genWritable.throw(e); - logger.error(e); + clientUtils.logServerError(logger, e); return; } }; diff --git a/src/client/service/vaultsPermissionSet.ts b/src/client/service/vaultsPermissionSet.ts index f91ccd81f1..bf5c0116d2 100644 --- a/src/client/service/vaultsPermissionSet.ts +++ b/src/client/service/vaultsPermissionSet.ts @@ -1,19 +1,29 @@ import type { DB } from '@matrixai/db'; import type { Authenticate } from '../types'; -import type { VaultName } from '../../vaults/types'; +import type { NodeId } from '../../nodes/types'; +import type { + VaultName, + VaultId, + VaultAction, + VaultActions, +} from '../../vaults/types'; import type VaultManager from '../../vaults/VaultManager'; import type GestaltGraph from '../../gestalts/GestaltGraph'; import type ACL from '../../acl/ACL'; import type NotificationsManager from '../../notifications/NotificationsManager'; -import type { VaultActions } from '../../vaults/types'; import type * as vaultsPB from '../../proto/js/polykey/v1/vaults/vaults_pb'; import type Logger from '@matrixai/logger'; -import * as grpc from '@grpc/grpc-js'; +import type * as grpc from '@grpc/grpc-js'; import * as vaultsUtils from '../../vaults/utils'; import * as vaultsErrors from '../../vaults/errors'; +import { validateSync } from '../../validation'; import * as validationUtils from '../../validation/utils'; import * as grpcUtils from '../../grpc/utils'; +import * as aclErrors from '../../acl/errors'; +import * as nodesErrors from '../../nodes/errors'; import * as utilsPB from '../../proto/js/polykey/v1/utils/utils_pb'; +import { matchSync } from '../../utils'; +import * as clientUtils from '../utils'; function vaultsPermissionSet({ authenticate, @@ -40,27 +50,37 @@ function vaultsPermissionSet({ // Checking session token const metadata = await authenticate(call.metadata); call.sendMetadata(metadata); - const vaultsPermissionsMessage = call.request; - const vaultMessage = vaultsPermissionsMessage.getVault(); - const nodeMessage = vaultsPermissionsMessage.getNode(); - if (vaultMessage == null || nodeMessage == null) { - callback({ code: grpc.status.NOT_FOUND }, null); - return; - } await db.withTransactionF(async (tran) => { - // Parsing VaultId - const nameOrId = vaultMessage.getNameOrId(); - let vaultId = await vaultManager.getVaultId( - nameOrId as VaultName, + const vaultIdFromName = await vaultManager.getVaultId( + call.request.getVault()?.getNameOrId() as VaultName, tran, ); - vaultId = vaultId ?? validationUtils.parseVaultId(nameOrId); - // Parsing NodeId - const nodeId = validationUtils.parseNodeId(nodeMessage.getNodeId()); - // Parsing actions - const actions = vaultsPermissionsMessage - .getVaultPermissionsList() - .map((vaultAction) => validationUtils.parseVaultAction(vaultAction)); + const { + nodeId, + vaultId, + actions, + }: { + nodeId: NodeId; + vaultId: VaultId; + actions: Array; + } = validateSync( + (keyPath, value) => { + return matchSync(keyPath)( + [['nodeId'], () => validationUtils.parseNodeId(value)], + [ + ['vaultId'], + () => vaultIdFromName ?? validationUtils.parseVaultId(value), + ], + [['actions'], () => value.map(validationUtils.parseVaultAction)], + () => value, + ); + }, + { + nodeId: call.request.getNode()?.getNodeId(), + vaultId: call.request.getVault()?.getNameOrId(), + actions: call.request.getVaultPermissionsList(), + }, + ); // Checking if vault exists const vaultMeta = await vaultManager.getVaultMeta(vaultId, tran); if (!vaultMeta) throw new vaultsErrors.ErrorVaultsVaultUndefined(); @@ -85,7 +105,11 @@ function vaultsPermissionSet({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e, { + ErrorVaultsVaultUndefined: vaultsErrors.ErrorVaultsVaultUndefined, + ErrorACLNodeIdMissing: aclErrors.ErrorACLNodeIdMissing, + ErrorNodeGraphNodeIdNotFound: nodesErrors.ErrorNodeGraphNodeIdNotFound, + }); return; } }; diff --git a/src/client/service/vaultsPermissionUnset.ts b/src/client/service/vaultsPermissionUnset.ts index 8095e21c4c..9635c07174 100644 --- a/src/client/service/vaultsPermissionUnset.ts +++ b/src/client/service/vaultsPermissionUnset.ts @@ -1,16 +1,21 @@ import type { DB } from '@matrixai/db'; import type { Authenticate } from '../types'; -import type { VaultName } from '../../vaults/types'; +import type { NodeId } from '../../nodes/types'; +import type { VaultName, VaultId, VaultAction } from '../../vaults/types'; import type VaultManager from '../../vaults/VaultManager'; import type GestaltGraph from '../../gestalts/GestaltGraph'; import type ACL from '../../acl/ACL'; import type * as vaultsPB from '../../proto/js/polykey/v1/vaults/vaults_pb'; import type Logger from '@matrixai/logger'; -import * as grpc from '@grpc/grpc-js'; +import type * as grpc from '@grpc/grpc-js'; import * as vaultsErrors from '../../vaults/errors'; +import { validateSync } from '../../validation'; import * as validationUtils from '../../validation/utils'; import * as grpcUtils from '../../grpc/utils'; +import * as gestaltsErrors from '../../gestalts/errors'; import * as utilsPB from '../../proto/js/polykey/v1/utils/utils_pb'; +import { matchSync } from '../../utils'; +import * as clientUtils from '../utils'; function vaultsPermissionUnset({ authenticate, @@ -35,24 +40,37 @@ function vaultsPermissionUnset({ // Checking session token const metadata = await authenticate(call.metadata); call.sendMetadata(metadata); - const vaultsPermissionsMessage = call.request; - const vaultMessage = vaultsPermissionsMessage.getVault(); - const nodeMessage = vaultsPermissionsMessage.getNode(); - if (vaultMessage == null || nodeMessage == null) { - callback({ code: grpc.status.NOT_FOUND }, null); - return; - } await db.withTransactionF(async (tran) => { - // Parsing VaultId - const nameOrId = vaultMessage.getNameOrId(); - let vaultId = await vaultManager.getVaultId(nameOrId as VaultName); - vaultId = vaultId ?? validationUtils.parseVaultId(nameOrId); - // Parsing NodeId - const nodeId = validationUtils.parseNodeId(nodeMessage.getNodeId()); - // Parsing actions - const actions = vaultsPermissionsMessage - .getVaultPermissionsList() - .map((vaultAction) => validationUtils.parseVaultAction(vaultAction)); + const vaultIdFromName = await vaultManager.getVaultId( + call.request.getVault()?.getNameOrId() as VaultName, + tran, + ); + const { + nodeId, + vaultId, + actions, + }: { + nodeId: NodeId; + vaultId: VaultId; + actions: Array; + } = validateSync( + (keyPath, value) => { + return matchSync(keyPath)( + [['nodeId'], () => validationUtils.parseNodeId(value)], + [ + ['vaultId'], + () => vaultIdFromName ?? validationUtils.parseVaultId(value), + ], + [['actions'], () => value.map(validationUtils.parseVaultAction)], + () => value, + ); + }, + { + nodeId: call.request.getNode()?.getNodeId(), + vaultId: call.request.getVault()?.getNameOrId(), + actions: call.request.getVaultPermissionsList(), + }, + ); // Checking if vault exists const vaultMeta = await vaultManager.getVaultMeta(vaultId, tran); if (!vaultMeta) throw new vaultsErrors.ErrorVaultsVaultUndefined(); @@ -81,7 +99,11 @@ function vaultsPermissionUnset({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e, { + ErrorVaultsVaultUndefined: vaultsErrors.ErrorVaultsVaultUndefined, + ErrorGestaltsGraphNodeIdMissing: + gestaltsErrors.ErrorGestaltsGraphNodeIdMissing, + }); return; } }; diff --git a/src/client/service/vaultsPull.ts b/src/client/service/vaultsPull.ts index f68a62903c..3ff8a66fb4 100644 --- a/src/client/service/vaultsPull.ts +++ b/src/client/service/vaultsPull.ts @@ -1,14 +1,19 @@ import type { DB } from '@matrixai/db'; import type { Authenticate } from '../types'; import type VaultManager from '../../vaults/VaultManager'; -import type { VaultName } from '../../vaults/types'; +import type { VaultName, VaultId } from '../../vaults/types'; +import type { NodeId } from '../../nodes/types'; import type * as vaultsPB from '../../proto/js/polykey/v1/vaults/vaults_pb'; import type Logger from '@matrixai/logger'; -import * as grpc from '@grpc/grpc-js'; +import type * as grpc from '@grpc/grpc-js'; import * as grpcUtils from '../../grpc/utils'; import * as utilsPB from '../../proto/js/polykey/v1/utils/utils_pb'; +import { validateSync } from '../../validation'; import * as validationUtils from '../../validation/utils'; import * as vaultsUtils from '../../vaults/utils'; +import * as nodesErrors from '../../nodes/errors'; +import { matchSync } from '../../utils'; +import * as clientUtils from '../utils'; function vaultsPull({ authenticate, @@ -29,39 +34,47 @@ function vaultsPull({ const response = new utilsPB.StatusMessage(); const metadata = await authenticate(call.metadata); call.sendMetadata(metadata); - - const vaultMessage = call.request.getVault(); - if (vaultMessage == null) { - callback({ code: grpc.status.NOT_FOUND }, null); - return; - } - const nameOrId = vaultMessage.getNameOrId(); await db.withTransactionF(async (tran) => { - let vaultId = await vaultManager.getVaultId( - nameOrId as VaultName, + const vaultIdFromName = await vaultManager.getVaultId( + call.request.getVault()?.getNameOrId() as VaultName, tran, ); - vaultId = vaultId ?? validationUtils.parseVaultId(nameOrId); - let nodeId; - const nodeMessage = call.request.getNode(); - if (nodeMessage == null) { - nodeId = null; - } else { - nodeId = validationUtils.parseNodeId(nodeMessage.getNodeId()); - } - let pullVault; - const pullVaultMessage = call.request.getPullVault(); - if (pullVaultMessage == null) { - pullVault = null; - } else { - pullVault = vaultsUtils.decodeVaultId(pullVaultMessage.getNameOrId()); - pullVault = pullVault ?? pullVaultMessage.getNameOrId(); - if (pullVault == null) pullVault = pullVaultMessage.getNameOrId(); - } + const { + vaultId, + nodeId, + pullVaultId, + }: { + vaultId: VaultId; + nodeId: NodeId | undefined; + pullVaultId: VaultId | VaultName | undefined; + } = validateSync( + (keyPath, value) => { + return matchSync(keyPath)( + [ + ['vaultId'], + () => vaultIdFromName ?? validationUtils.parseVaultId(value), + ], + [ + ['nodeId'], + () => (value ? validationUtils.parseNodeId(value) : undefined), + ], + [ + ['pullVaultId'], + () => vaultsUtils.decodeVaultId(value) ?? value, + ], + () => value, + ); + }, + { + vaultId: call.request.getVault()?.getNameOrId(), + nodeId: call.request.getNode()?.getNodeId(), + pullVaultId: call.request.getPullVault()?.getNameOrId(), + }, + ); await vaultManager.pullVault({ vaultId, pullNodeId: nodeId, - pullVaultNameOrId: pullVault, + pullVaultNameOrId: pullVaultId, tran, }); }); @@ -70,7 +83,9 @@ function vaultsPull({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e, { + ErrorNodeGraphNodeIdNotFound: nodesErrors.ErrorNodeGraphNodeIdNotFound, + }); return; } }; diff --git a/src/client/service/vaultsRename.ts b/src/client/service/vaultsRename.ts index 0689b2506c..e3297ee3d8 100644 --- a/src/client/service/vaultsRename.ts +++ b/src/client/service/vaultsRename.ts @@ -1,13 +1,17 @@ import type { DB } from '@matrixai/db'; import type { Authenticate } from '../types'; -import type { VaultName } from '../../vaults/types'; +import type { VaultName, VaultId } from '../../vaults/types'; import type VaultManager from '../../vaults/VaultManager'; import type Logger from '@matrixai/logger'; -import * as grpc from '@grpc/grpc-js'; +import type * as grpc from '@grpc/grpc-js'; +import { validateSync } from '../../validation'; import * as validationUtils from '../../validation/utils'; import * as grpcUtils from '../../grpc/utils'; import * as vaultsUtils from '../../vaults/utils'; +import * as vaultsErrors from '../../vaults/errors'; import * as vaultsPB from '../../proto/js/polykey/v1/vaults/vaults_pb'; +import { matchSync } from '../../utils'; +import * as clientUtils from '../utils'; function vaultsRename({ authenticate, @@ -28,27 +32,41 @@ function vaultsRename({ const response = new vaultsPB.Vault(); const metadata = await authenticate(call.metadata); call.sendMetadata(metadata); - const vaultMessage = call.request.getVault(); - if (vaultMessage == null) { - callback({ code: grpc.status.NOT_FOUND }, null); - return; - } - const nameOrId = vaultMessage.getNameOrId(); await db.withTransactionF(async (tran) => { - let vaultId = await vaultManager.getVaultId( - nameOrId as VaultName, + const vaultIdFromName = await vaultManager.getVaultId( + call.request.getVault()?.getNameOrId() as VaultName, tran, ); - vaultId = vaultId ?? validationUtils.parseVaultId(nameOrId); + const { + vaultId, + }: { + vaultId: VaultId; + } = validateSync( + (keyPath, value) => { + return matchSync(keyPath)( + [ + ['vaultId'], + () => vaultIdFromName ?? validationUtils.parseVaultId(value), + ], + () => value, + ); + }, + { + vaultId: call.request.getVault()?.getNameOrId(), + }, + ); const newName = call.request.getNewName() as VaultName; - await vaultManager.renameVault(vaultId, newName); + await vaultManager.renameVault(vaultId, newName, tran); response.setNameOrId(vaultsUtils.encodeVaultId(vaultId)); }); callback(null, response); return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e, { + ErrorVaultsVaultUndefined: vaultsErrors.ErrorVaultsVaultUndefined, + ErrorVaultsVaultDefined: vaultsErrors.ErrorVaultsVaultDefined, + }); return; } }; diff --git a/src/client/service/vaultsScan.ts b/src/client/service/vaultsScan.ts index f0392dba5d..eaced472c7 100644 --- a/src/client/service/vaultsScan.ts +++ b/src/client/service/vaultsScan.ts @@ -7,8 +7,10 @@ import type Logger from '@matrixai/logger'; import * as grpcUtils from '../../grpc/utils'; import { validateSync } from '../../validation'; import * as validationUtils from '../../validation/utils'; -import { matchSync } from '../../utils'; import * as vaultsPB from '../../proto/js/polykey/v1/vaults/vaults_pb'; +import * as nodesErrors from '../../nodes/errors'; +import { matchSync } from '../../utils'; +import * as clientUtils from '../utils'; function vaultsScan({ authenticate, @@ -56,7 +58,9 @@ function vaultsScan({ return; } catch (e) { await genWritable.throw(e); - logger.error(e); + clientUtils.logServerError(logger, e, { + ErrorNodeGraphNodeIdNotFound: nodesErrors.ErrorNodeGraphNodeIdNotFound, + }); return; } }; diff --git a/src/client/service/vaultsSecretsDelete.ts b/src/client/service/vaultsSecretsDelete.ts index 46784f9fe1..e10decf930 100644 --- a/src/client/service/vaultsSecretsDelete.ts +++ b/src/client/service/vaultsSecretsDelete.ts @@ -1,14 +1,18 @@ import type { DB } from '@matrixai/db'; import type { Authenticate } from '../types'; -import type { VaultName } from '../../vaults/types'; +import type { VaultName, VaultId } from '../../vaults/types'; import type VaultManager from '../../vaults/VaultManager'; import type * as secretsPB from '../../proto/js/polykey/v1/secrets/secrets_pb'; import type Logger from '@matrixai/logger'; -import * as grpc from '@grpc/grpc-js'; +import type * as grpc from '@grpc/grpc-js'; +import { validateSync } from '../../validation'; import * as validationUtils from '../../validation/utils'; import * as grpcUtils from '../../grpc/utils'; +import * as vaultsErrors from '../../vaults/errors'; import * as vaultOps from '../../vaults/VaultOps'; import * as utilsPB from '../../proto/js/polykey/v1/utils/utils_pb'; +import { matchSync } from '../../utils'; +import * as clientUtils from '../utils'; function vaultsSecretsDelete({ authenticate, @@ -29,18 +33,29 @@ function vaultsSecretsDelete({ const response = new utilsPB.StatusMessage(); const metadata = await authenticate(call.metadata); call.sendMetadata(metadata); - const vaultMessage = call.request.getVault(); - if (vaultMessage == null) { - callback({ code: grpc.status.NOT_FOUND }, null); - return; - } - const nameOrId = vaultMessage.getNameOrId(); await db.withTransactionF(async (tran) => { - let vaultId = await vaultManager.getVaultId( - nameOrId as VaultName, + const vaultIdFromName = await vaultManager.getVaultId( + call.request.getVault()?.getNameOrId() as VaultName, tran, ); - vaultId = vaultId ?? validationUtils.parseVaultId(nameOrId); + const { + vaultId, + }: { + vaultId: VaultId; + } = validateSync( + (keyPath, value) => { + return matchSync(keyPath)( + [ + ['vaultId'], + () => vaultIdFromName ?? validationUtils.parseVaultId(value), + ], + () => value, + ); + }, + { + vaultId: call.request.getVault()?.getNameOrId(), + }, + ); const secretName = call.request.getSecretName(); await vaultManager.withVaults( [vaultId], @@ -55,7 +70,10 @@ function vaultsSecretsDelete({ return; } catch (e) { callback(grpcUtils.fromError(e)); - logger.error(e); + clientUtils.logServerError(logger, e, { + ErrorVaultsVaultUndefined: vaultsErrors.ErrorVaultsVaultUndefined, + ErrorSecretsSecretUndefined: vaultsErrors.ErrorSecretsSecretUndefined, + }); return; } }; diff --git a/src/client/utils/utils.ts b/src/client/utils/utils.ts index dd72187090..c6ae6347a6 100644 --- a/src/client/utils/utils.ts +++ b/src/client/utils/utils.ts @@ -7,6 +7,7 @@ import type KeyManager from '../../keys/KeyManager'; import type Session from '../../sessions/Session'; import type SessionManager from '../../sessions/SessionManager'; import type { SessionToken } from '../../sessions/types'; +import type { POJO } from '../../types'; import type { Authenticate } from '../types'; import type Logger from '@matrixai/logger/dist/Logger'; import * as base64 from 'multiformats/bases/base64'; @@ -135,22 +136,15 @@ function decodeAuthToSession( return auth.substring(7) as SessionToken; } -function logServerError( - logger: Logger, - e: Error, - specificClientErrors?: Array, -) { - const clientErrorTypes = [ - validationErrors.ErrorValidation, - clientErrors.ErrorClientAuthMissing, - clientErrors.ErrorClientAuthFormat, - clientErrors.ErrorClientAuthDenied, - ]; - if (clientErrorTypes[e.name] != null) { - return; - } else if (specificClientErrors && specificClientErrors[e.name] != null) { - return; - } +function logServerError(logger: Logger, e: Error, specificClientErrors?: POJO) { + const clientErrorTypes: POJO = { + ErrorValidation: validationErrors.ErrorValidation, + ErrorClientAuthMissing: clientErrors.ErrorClientAuthMissing, + ErrorClientAuthFormat: clientErrors.ErrorClientAuthFormat, + ErrorClientAuthDenied: clientErrors.ErrorClientAuthDenied, + }; + if (clientErrorTypes[e.name] != null) return; + if (specificClientErrors && specificClientErrors[e.name] != null) return; logger.error(e); }