Socket
Socket
Sign inDemoInstall

@decentralized-identity/hub-node-core

Package Overview
Dependencies
40
Maintainers
6
Versions
5
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.1.2 to 0.1.3

.npmrcold

5

dist/controllers/ActionsController.js

@@ -11,2 +11,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
const hub_common_js_1 = require("@decentralized-identity/hub-common-js");
const BaseController_1 = require("./BaseController");

@@ -21,7 +22,7 @@ const HubError_1 = require("../models/HubError");

handleWriteCommitRequest(_, __) {
throw new HubError_1.default({ errorCode: HubError_1.ErrorCode.NotImplemented });
throw new HubError_1.default({ errorCode: hub_common_js_1.HubErrorCode.NotImplemented });
}
handleQueryRequest(_, __) {
return __awaiter(this, void 0, void 0, function* () {
throw new HubError_1.default({ errorCode: HubError_1.ErrorCode.NotImplemented });
throw new HubError_1.default({ errorCode: hub_common_js_1.HubErrorCode.NotImplemented });
});

@@ -28,0 +29,0 @@ }

4

dist/controllers/AuthorizationController.d.ts

@@ -6,3 +6,3 @@ import PermissionGrant from '../models/PermissionGrant';

import Context from '../interfaces/Context';
import { ObjectContainer } from '../index';
import { IObjectMetadata } from '../index';
/** Operations included in Permission Grants */

@@ -44,3 +44,3 @@ export declare enum AuthorizationOperation {

*/
static pruneResults(results: ObjectContainer[], grants: PermissionGrant[]): Promise<ObjectContainer[]>;
static pruneResults(results: IObjectMetadata[], grants: PermissionGrant[]): Promise<IObjectMetadata[]>;
}

@@ -11,2 +11,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
const hub_common_js_1 = require("@decentralized-identity/hub-common-js");
const PermissionGrant_1 = require("../models/PermissionGrant");

@@ -75,3 +76,3 @@ const HubError_1 = require("../models/HubError");

throw new HubError_1.default({
errorCode: HubError_1.ErrorCode.ServerError,
errorCode: hub_common_js_1.HubErrorCode.ServerError,
developerMessage: 'Commits should not call getPermissionGrantsForRequest',

@@ -162,3 +163,3 @@ });

throw new HubError_1.default({
errorCode: HubError_1.ErrorCode.PermissionsRequired,
errorCode: hub_common_js_1.HubErrorCode.PermissionsRequired,
});

@@ -210,5 +211,5 @@ }

throw new HubError_1.default({
errorCode: HubError_1.ErrorCode.PermissionsRequired,
errorCode: hub_common_js_1.HubErrorCode.PermissionsRequired,
});
// const prunedResults: ObjectContainer[] = [];
// const prunedResults: IObjectMetadata[] = [];
// results.forEach((result) => {

@@ -215,0 +216,0 @@ // if (createdByRestrictions.includes(result.created_by)) {

@@ -30,3 +30,3 @@ import Context from '../interfaces/Context';

*/
handle(request: BaseRequest): Promise<BaseResponse>;
handle(request: BaseRequest): Promise<BaseResponse<string>>;
/**

@@ -33,0 +33,0 @@ * Verifies common constraints for commits

@@ -11,2 +11,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
const hub_common_js_1 = require("@decentralized-identity/hub-common-js");
const HubError_1 = require("../models/HubError");

@@ -78,3 +79,3 @@ const ObjectQueryResponse_1 = require("../models/ObjectQueryResponse");

throw new HubError_1.default({
errorCode: HubError_1.ErrorCode.PermissionsRequired,
errorCode: hub_common_js_1.HubErrorCode.PermissionsRequired,
});

@@ -81,0 +82,0 @@ }

@@ -11,5 +11,5 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
const hub_common_js_1 = require("@decentralized-identity/hub-common-js");
const CommitQueryResponse_1 = require("../models/CommitQueryResponse");
const index_1 = require("../index");
const HubError_1 = require("../models/HubError");
/**

@@ -38,3 +38,3 @@ * Handles Commit requests for reading object data

throw new index_1.HubError({
errorCode: HubError_1.ErrorCode.NotImplemented,
errorCode: hub_common_js_1.HubErrorCode.NotImplemented,
property: 'fields',

@@ -68,3 +68,3 @@ developerMessage: 'A new type of response is required',

throw new index_1.HubError({
errorCode: HubError_1.ErrorCode.PermissionsRequired,
errorCode: hub_common_js_1.HubErrorCode.PermissionsRequired,
});

@@ -71,0 +71,0 @@ }

@@ -11,2 +11,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
const hub_common_js_1 = require("@decentralized-identity/hub-common-js");
const BaseController_1 = require("./BaseController");

@@ -16,3 +17,2 @@ const HubError_1 = require("../models/HubError");

const StoreUtils_1 = require("../utilities/StoreUtils");
const Commit_1 = require("../models/Commit");
/**

@@ -29,3 +29,3 @@ * This class handles all the permission requests.

throw new HubError_1.default({
errorCode: HubError_1.ErrorCode.BadRequest,
errorCode: hub_common_js_1.HubErrorCode.BadRequest,
developerMessage: `query 'context' must be '${PermissionGrant_1.PERMISSION_GRANT_CONTEXT}', 'type' must be '${PermissionGrant_1.PERMISSION_GRANT_TYPE}'`,

@@ -42,3 +42,3 @@ });

const operation = request.commit.getProtectedHeaders().operation;
if (operation === Commit_1.Operation.Create || operation === Commit_1.Operation.Update) {
if (operation === hub_common_js_1.CommitOperation.Create || operation === hub_common_js_1.CommitOperation.Update) {
PermissionsController.validateStrategy(headers);

@@ -69,3 +69,3 @@ PermissionsController.validatePermissionGrant(request);

throw new HubError_1.default({
errorCode: HubError_1.ErrorCode.BadRequest,
errorCode: hub_common_js_1.HubErrorCode.BadRequest,
});

@@ -78,3 +78,3 @@ }

throw new HubError_1.default({
errorCode: HubError_1.ErrorCode.BadRequest,
errorCode: hub_common_js_1.HubErrorCode.BadRequest,
property: 'commit.protected.commit_strategy',

@@ -91,3 +91,3 @@ });

throw new HubError_1.default({
errorCode: HubError_1.ErrorCode.BadRequest,
errorCode: hub_common_js_1.HubErrorCode.BadRequest,
property: 'commit.payload.created_by',

@@ -94,0 +94,0 @@ developerMessage: 'Create permission cannot be given when created_by is used',

@@ -11,2 +11,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
const hub_common_js_1 = require("@decentralized-identity/hub-common-js");
const BaseController_1 = require("./BaseController");

@@ -16,3 +17,2 @@ const HubError_1 = require("../models/HubError");

const StoreUtils_1 = require("../utilities/StoreUtils");
const Commit_1 = require("../models/Commit");
/**

@@ -25,7 +25,7 @@ * This class handles all the profile requests.

const headers = request.commit.getProtectedHeaders();
if (headers.operation === Commit_1.Operation.Create) {
if (headers.operation === hub_common_js_1.CommitOperation.Create) {
const profiles = yield this.getProfiles(request.sub, headers.context, headers.type);
if (profiles.length > 0) {
throw new HubError_1.default({
errorCode: HubError_1.ErrorCode.BadRequest,
errorCode: hub_common_js_1.HubErrorCode.BadRequest,
developerMessage: `Profile already exists. Please issue update for object_id: '${profiles[0].id}'`,

@@ -32,0 +32,0 @@ });

@@ -11,2 +11,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
const hub_common_js_1 = require("@decentralized-identity/hub-common-js");
const did_auth_jose_1 = require("@decentralized-identity/did-auth-jose");

@@ -69,3 +70,3 @@ const ActionsController_1 = require("./controllers/ActionsController");

body: Buffer.from(new HubError_1.default({
errorCode: HubError_1.ErrorCode.AuthenticationFailed,
errorCode: hub_common_js_1.HubErrorCode.AuthenticationFailed,
}).toResponse().toString()),

@@ -96,3 +97,3 @@ };

throw new HubError_1.default({
errorCode: HubError_1.ErrorCode.BadRequest,
errorCode: hub_common_js_1.HubErrorCode.BadRequest,
property: 'query.interface',

@@ -110,3 +111,3 @@ });

throw new HubError_1.default({
errorCode: HubError_1.ErrorCode.BadRequest,
errorCode: hub_common_js_1.HubErrorCode.BadRequest,
property: 'commit',

@@ -119,3 +120,3 @@ developerMessage: 'Signature could not be verified',

throw new HubError_1.default({
errorCode: HubError_1.ErrorCode.BadRequest,
errorCode: hub_common_js_1.HubErrorCode.BadRequest,
property: 'commit.protected.interface',

@@ -128,3 +129,3 @@ });

throw new HubError_1.default({
errorCode: HubError_1.ErrorCode.BadRequest,
errorCode: hub_common_js_1.HubErrorCode.BadRequest,
property: '@type',

@@ -148,3 +149,3 @@ developerMessage: `Request format unknown: ${requestType}`,

else {
hubError = new HubError_1.default({ errorCode: HubError_1.ErrorCode.ServerError });
hubError = new HubError_1.default({ errorCode: hub_common_js_1.HubErrorCode.ServerError });
hubError.stack = error.stack;

@@ -151,0 +152,0 @@ }

/**
* This file defines the external exports.
*/
import { HubErrorCode, IObjectMetadata } from '@decentralized-identity/hub-common-js';
import Hub from './Hub';
import ObjectContainer from './interfaces/ObjectContainer';
import * as Store from './interfaces/Store';
import SignedCommit from './models/SignedCommit';
import Commit from './models/Commit';
import HubError, { ErrorCode } from './models/HubError';
import HttpResolver from './plugins/HttpResolver';
import HubError from './models/HubError';
import CommitDeserializer from './utilities/CommitDeserializer';
export default Hub;
export { Commit, CommitDeserializer, ErrorCode, HubError, ObjectContainer, SignedCommit, Store, HttpResolver, };
export { Commit, CommitDeserializer, HubErrorCode, HubError, IObjectMetadata, SignedCommit, Store, };

@@ -6,3 +6,6 @@ "use strict";

*/
const hub_common_js_1 = require("@decentralized-identity/hub-common-js");
exports.HubErrorCode = hub_common_js_1.HubErrorCode;
const Hub_1 = require("./Hub");
// Interfaces
const Store = require("./interfaces/Store");

@@ -17,5 +20,2 @@ exports.Store = Store;

exports.HubError = HubError_1.default;
exports.ErrorCode = HubError_1.ErrorCode;
const HttpResolver_1 = require("./plugins/HttpResolver");
exports.HttpResolver = HttpResolver_1.default;
// Utilities

@@ -22,0 +22,0 @@ const CommitDeserializer_1 = require("./utilities/CommitDeserializer");

@@ -0,3 +1,3 @@

import { IObjectMetadata } from '@decentralized-identity/hub-common-js';
import Commit from '../models/Commit';
import ObjectContainer from './ObjectContainer';
/**

@@ -59,3 +59,3 @@ * Query filter which refines results to those where the specified `field` has the given `value`. If

*/
export interface ObjectQueryResponse extends QueryResponse<ObjectContainer> {
export interface ObjectQueryResponse extends QueryResponse<IObjectMetadata> {
}

@@ -62,0 +62,0 @@ /**

@@ -0,5 +1,6 @@

import { IHubResponse } from '@decentralized-identity/hub-common-js';
/**
* A hub response of type BaseResponse
* A base class for Hub responses, which is extended by more specific response classes.
*/
export default abstract class BaseResponse {
export default abstract class BaseResponse<ResponseType extends string> {
developerMessage?: string | undefined;

@@ -9,3 +10,3 @@ /** \@context of the response */

/** \@type of the response */
protected type: string;
protected type: ResponseType;
/**

@@ -15,3 +16,3 @@ * Creates a base response

*/
constructor(developerMessage?: string | undefined);
constructor(type: ResponseType, developerMessage?: string | undefined);
/**

@@ -24,3 +25,3 @@ * Forms a JSON stringified response

*/
protected toJson(): any;
protected toJson(): IHubResponse<ResponseType>;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/**
* A hub response of type BaseResponse
* A base class for Hub responses, which is extended by more specific response classes.
*/

@@ -11,6 +11,5 @@ class BaseResponse {

*/
constructor(developerMessage) {
constructor(type, developerMessage) {
this.developerMessage = developerMessage;
/** \@type of the response */
this.type = 'BaseResponse';
this.type = type;
}

@@ -17,0 +16,0 @@ /**

@@ -0,8 +1,3 @@

import { ICommitProtectedHeaders, ICommitUnprotectedHeaders } from '@decentralized-identity/hub-common-js';
import Context from '../interfaces/Context';
/** Operations for a commit */
export declare enum Operation {
Create = "create",
Update = "update",
Delete = "delete"
}
/**

@@ -17,5 +12,5 @@ * A single Commit to an object

/** decrypted unprotected headers */
protected readonly unprotectedHeaders: Partial<CommitHeaders>;
protected readonly unprotectedHeaders: Partial<ICommitUnprotectedHeaders>;
/** decrypted protected headers */
protected readonly protectedHeaders: Partial<CommitHeaders>;
protected readonly protectedHeaders: Partial<ICommitProtectedHeaders>;
/**

@@ -29,7 +24,7 @@ * Parses JSON Serialization and forms a Commit

*/
getHeaders(): CommitHeaders;
getHeaders(): ICommitProtectedHeaders & ICommitUnprotectedHeaders;
/**
* Gets the protected headers
*/
getProtectedHeaders(): Partial<CommitHeaders>;
getProtectedHeaders(): Partial<ICommitProtectedHeaders>;
/**

@@ -48,16 +43,1 @@ * Gets the payload

}
/** Combined headers for a commit */
export interface CommitHeaders {
interface: string;
context: string;
type: string;
operation: Operation;
committed_at: string;
commit_strategy: string;
sub: string;
kid: string;
meta?: any;
iss: string;
object_id: string;
rev: string;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const hub_common_js_1 = require("@decentralized-identity/hub-common-js");
const base64url_1 = require("base64url");

@@ -7,9 +8,2 @@ const did_common_typescript_1 = require("@decentralized-identity/did-common-typescript");

const crypto = require("crypto");
/** Operations for a commit */
var Operation;
(function (Operation) {
Operation["Create"] = "create";
Operation["Update"] = "update";
Operation["Delete"] = "delete";
})(Operation = exports.Operation || (exports.Operation = {}));
/**

@@ -49,3 +43,3 @@ * A single Commit to an object

switch (protectedHeaders.operation) {
case Operation.Create:
case hub_common_js_1.CommitOperation.Create:
// its impossible to include object_id as a create without the hash algorithm being broken

@@ -58,3 +52,3 @@ if ('object_id' in protectedHeaders) {

throw new HubError_1.default({
errorCode: HubError_1.ErrorCode.BadRequest,
errorCode: hub_common_js_1.HubErrorCode.BadRequest,
property: 'commit.protected.object_id',

@@ -65,4 +59,4 @@ developerMessage: 'object_id cannot be included in the protected headers for a \'create\' commit',

break;
case Operation.Update:
case Operation.Delete:
case hub_common_js_1.CommitOperation.Update:
case hub_common_js_1.CommitOperation.Delete:
if (!('object_id' in protectedHeaders)) {

@@ -85,3 +79,3 @@ throw HubError_1.default.missingParameter('commit.protected.object_id');

throw new HubError_1.default({
errorCode: HubError_1.ErrorCode.BadRequest,
errorCode: hub_common_js_1.HubErrorCode.BadRequest,
property: 'commit.protected.rev',

@@ -97,3 +91,3 @@ developerMessage: "'rev' cannot be included in protected headers",

additionalHeaders.rev = revision;
if (protectedHeaders.operation === Operation.Create) {
if (protectedHeaders.operation === hub_common_js_1.CommitOperation.Create) {
additionalHeaders.object_id = revision;

@@ -100,0 +94,0 @@ }

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const hub_common_js_1 = require("@decentralized-identity/hub-common-js");
const HubError_1 = require("./HubError");

@@ -20,3 +21,3 @@ const BaseRequest_1 = require("./BaseRequest");

throw new HubError_1.default({
errorCode: HubError_1.ErrorCode.NotImplemented,
errorCode: hub_common_js_1.HubErrorCode.NotImplemented,
property: 'query.object_id, query.revision',

@@ -23,0 +24,0 @@ developerMessage: 'object_id and revision are mutually exclusive',

import BaseResponse from './BaseResponse';
import Commit from './Commit';
import { IHubCommitQueryResponse } from '@decentralized-identity/hub-common-js';
/**
* A hub response of type CommitQueryResponse
*/
export default class CommitQueryResponse extends BaseResponse {
export default class CommitQueryResponse extends BaseResponse<'CommitQueryResponse'> {
readonly commits: Commit[];

@@ -16,3 +17,3 @@ readonly skipToken: string | null;

constructor(commits: Commit[], skipToken: string | null, developerMessage?: string);
protected toJson(): any;
protected toJson(): IHubCommitQueryResponse;
}

@@ -15,15 +15,12 @@ "use strict";

constructor(commits, skipToken, developerMessage) {
super(developerMessage);
super('CommitQueryResponse', developerMessage);
this.commits = commits;
this.skipToken = skipToken;
this.type = 'CommitQueryResponse';
}
toJson() {
const jwtCommits = this.commits.map(commit => commit.toJson());
const json = super.toJson();
Object.assign(json, {
return Object.assign({}, super.toJson(), {
commits: jwtCommits,
skip_token: this.skipToken,
});
return json;
}

@@ -30,0 +27,0 @@ }

import BaseResponse from './BaseResponse';
import { ErrorCode } from './HubError';
import { IHubErrorResponse, HubErrorCode } from '@decentralized-identity/hub-common-js';
/** Parameters to create an ErrorResponse */
interface ErrorResponseOptions {
errorCode: ErrorCode;
errorCode: HubErrorCode;
target?: string;

@@ -15,5 +15,5 @@ errorUrl?: string;

*/
export default class ErrorResponse extends BaseResponse {
export default class ErrorResponse extends BaseResponse<'ErrorResponse'> {
/** A standard error code value */
readonly errorCode: ErrorCode;
readonly errorCode: HubErrorCode;
/** A resolvable url for more information */

@@ -28,4 +28,4 @@ readonly errorUrl?: string;

constructor(options: ErrorResponseOptions);
protected toJson(): any;
protected toJson(): IHubErrorResponse;
}
export {};

@@ -9,4 +9,3 @@ "use strict";

constructor(options) {
super(options.developerMessage);
this.type = 'ErrorResponse';
super('ErrorResponse', options.developerMessage);
this.errorCode = options.errorCode;

@@ -19,4 +18,3 @@ // copy any additional properties

toJson() {
const json = super.toJson();
Object.assign(json, {
return Object.assign(super.toJson(), {
error_code: this.errorCode,

@@ -28,3 +26,2 @@ error_url: this.errorUrl,

});
return json;
}

@@ -31,0 +28,0 @@ }

@@ -0,17 +1,4 @@

import { HubErrorCode } from '@decentralized-identity/hub-common-js';
import ErrorResponse from './ErrorResponse';
/**
* Standard error codes
*/
export declare enum ErrorCode {
BadRequest = "bad_request",
AuthenticationFailed = "authentication_failed",
PermissionsRequired = "permissions_required",
NotFound = "not_found",
TooManyRequests = "too_many_requests",
ServerError = "server_error",
NotImplemented = "not_implemented",
ServiceUnavailable = "service_unavailable",
TemporarilyUnavailable = "temporarily_unavailable"
}
/**
* Common Developer Messages

@@ -26,3 +13,3 @@ */

interface HubErrorOptions {
errorCode: ErrorCode;
errorCode: HubErrorCode;
property?: string;

@@ -37,3 +24,3 @@ developerMessage?: string;

/** A standard error code value */
readonly errorCode: ErrorCode;
readonly errorCode: HubErrorCode;
/** The property in the request that caused error */

@@ -40,0 +27,0 @@ readonly property?: string;

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const hub_common_js_1 = require("@decentralized-identity/hub-common-js");
const ErrorResponse_1 = require("./ErrorResponse");
/**
* Standard error codes
*/
var ErrorCode;
(function (ErrorCode) {
ErrorCode["BadRequest"] = "bad_request";
ErrorCode["AuthenticationFailed"] = "authentication_failed";
ErrorCode["PermissionsRequired"] = "permissions_required";
ErrorCode["NotFound"] = "not_found";
ErrorCode["TooManyRequests"] = "too_many_requests";
ErrorCode["ServerError"] = "server_error";
ErrorCode["NotImplemented"] = "not_implemented";
ErrorCode["ServiceUnavailable"] = "service_unavailable";
ErrorCode["TemporarilyUnavailable"] = "temporarily_unavailable";
})(ErrorCode = exports.ErrorCode || (exports.ErrorCode = {}));
/**
* Common Developer Messages

@@ -51,3 +37,3 @@ */

switch (this.errorCode) {
case ErrorCode.NotImplemented:
case hub_common_js_1.HubErrorCode.NotImplemented:
developerMessage = DeveloperMessage.NotImplemented;

@@ -72,3 +58,3 @@ break;

property,
errorCode: ErrorCode.BadRequest,
errorCode: hub_common_js_1.HubErrorCode.BadRequest,
developerMessage: DeveloperMessage.IncorrectParameter,

@@ -81,3 +67,3 @@ });

property,
errorCode: ErrorCode.BadRequest,
errorCode: hub_common_js_1.HubErrorCode.BadRequest,
developerMessage: DeveloperMessage.MissingParameter,

@@ -89,3 +75,3 @@ });

return new HubError({
errorCode: ErrorCode.NotImplemented,
errorCode: hub_common_js_1.HubErrorCode.NotImplemented,
});

@@ -96,3 +82,3 @@ }

return new HubError({
errorCode: ErrorCode.PermissionsRequired,
errorCode: hub_common_js_1.HubErrorCode.PermissionsRequired,
});

@@ -103,3 +89,3 @@ }

return new HubError({
errorCode: ErrorCode.NotFound,
errorCode: hub_common_js_1.HubErrorCode.NotFound,
});

@@ -106,0 +92,0 @@ }

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const hub_common_js_1 = require("@decentralized-identity/hub-common-js");
const BaseRequest_1 = require("./BaseRequest");

@@ -34,3 +35,3 @@ const HubError_1 = require("./HubError");

throw new HubError_1.default({
errorCode: HubError_1.ErrorCode.BadRequest,
errorCode: hub_common_js_1.HubErrorCode.BadRequest,
property: 'query.context, query.type',

@@ -37,0 +38,0 @@ developerMessage: 'context and type are co-dependent',

@@ -0,8 +1,8 @@

import { IHubObjectQueryResponse, IObjectMetadata } from '@decentralized-identity/hub-common-js';
import BaseResponse from './BaseResponse';
import ObjectContainer from '../interfaces/ObjectContainer';
/**
* A hub response for type ObjectQueryResponse
*/
export default class ObjectQueryResponse extends BaseResponse {
readonly objects: ObjectContainer[];
export default class ObjectQueryResponse extends BaseResponse<'ObjectQueryResponse'> {
readonly objects: IObjectMetadata[];
readonly skipToken: string | null;

@@ -15,4 +15,4 @@ /**

*/
constructor(objects: ObjectContainer[], skipToken: string | null, developerMessage?: string);
protected toJson(): any;
constructor(objects: IObjectMetadata[], skipToken: string | null, developerMessage?: string);
protected toJson(): IHubObjectQueryResponse;
}

@@ -15,14 +15,11 @@ "use strict";

constructor(objects, skipToken, developerMessage) {
super(developerMessage);
super('ObjectQueryResponse', developerMessage);
this.objects = objects;
this.skipToken = skipToken;
this.type = 'ObjectQueryResponse';
}
toJson() {
const json = super.toJson();
Object.assign(json, {
return Object.assign({}, super.toJson(), {
objects: this.objects,
skip_token: this.skipToken,
});
return json;
}

@@ -29,0 +26,0 @@ }

@@ -11,2 +11,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
const hub_common_js_1 = require("@decentralized-identity/hub-common-js");
const Commit_1 = require("./Commit");

@@ -50,3 +51,3 @@ const HubError_1 = require("./HubError");

throw new HubError_1.default({
errorCode: HubError_1.ErrorCode.BadRequest,
errorCode: hub_common_js_1.HubErrorCode.BadRequest,
property: 'commit',

@@ -53,0 +54,0 @@ developerMessage: `Public Key ${keyId} could not be found`,

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const hub_common_js_1 = require("@decentralized-identity/hub-common-js");
const BaseRequest_1 = require("./BaseRequest");

@@ -27,3 +28,3 @@ const HubError_1 = require("./HubError");

throw new HubError_1.default({
errorCode: HubError_1.ErrorCode.BadRequest,
errorCode: hub_common_js_1.HubErrorCode.BadRequest,
property: 'commit',

@@ -30,0 +31,0 @@ developerMessage: 'The commit must be signed by the request issuer',

@@ -5,3 +5,3 @@ import BaseResponse from './BaseResponse';

*/
export default class WriteResponse extends BaseResponse {
export default class WriteResponse extends BaseResponse<'WriteResponse'> {
readonly revisions: string[];

@@ -8,0 +8,0 @@ constructor(revisions: string[], developerMessage?: string);

@@ -9,10 +9,9 @@ "use strict";

constructor(revisions, developerMessage) {
super(developerMessage);
super('WriteResponse', developerMessage);
this.revisions = revisions;
this.type = 'WriteResponse';
}
toJson() {
const json = super.toJson();
json.revisions = this.revisions;
return json;
return Object.assign({}, super.toJson(), {
revisions: this.revisions,
});
}

@@ -19,0 +18,0 @@ }

@@ -11,3 +11,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
const Commit_1 = require("../models/Commit");
const hub_common_js_1 = require("@decentralized-identity/hub-common-js");
const StoreUtils_1 = require("./StoreUtils");

@@ -60,9 +60,9 @@ /**

// create commits are first, any other commit has higher value
if (latestCommit.getProtectedHeaders().operation === Commit_1.Operation.Create &&
currentCommit.getProtectedHeaders().operation !== Commit_1.Operation.Create) {
if (latestCommit.getProtectedHeaders().operation === hub_common_js_1.CommitOperation.Create &&
currentCommit.getProtectedHeaders().operation !== hub_common_js_1.CommitOperation.Create) {
return currentCommit;
}
// delete commits are last, any other commit has lower value
if (latestCommit.getProtectedHeaders().operation !== Commit_1.Operation.Delete &&
currentCommit.getProtectedHeaders().operation === Commit_1.Operation.Delete) {
if (latestCommit.getProtectedHeaders().operation !== hub_common_js_1.CommitOperation.Delete &&
currentCommit.getProtectedHeaders().operation === hub_common_js_1.CommitOperation.Delete) {
return currentCommit;

@@ -69,0 +69,0 @@ }

@@ -11,5 +11,5 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
const hub_common_js_1 = require("@decentralized-identity/hub-common-js");
const HubError_1 = require("../models/HubError");
const WriteResponse_1 = require("../models/WriteResponse");
const Commit_1 = require("../models/Commit");
/**

@@ -28,3 +28,3 @@ * Utilities for interacting with the Storage layer (Store)

const operation = request.commit.getProtectedHeaders().operation;
if (operation !== Commit_1.Operation.Create && !(yield StoreUtils.objectExists(request, store, grants))) {
if (operation !== hub_common_js_1.CommitOperation.Create && !(yield StoreUtils.objectExists(request, store, grants))) {
throw HubError_1.default.notFound();

@@ -74,3 +74,3 @@ }

throw new HubError_1.default({
errorCode: HubError_1.ErrorCode.ServerError,
errorCode: hub_common_js_1.HubErrorCode.ServerError,
});

@@ -77,0 +77,0 @@ }

@@ -0,3 +1,4 @@

import { HubErrorCode } from '@decentralized-identity/hub-common-js';
import BaseController from './BaseController';
import HubError, { ErrorCode } from '../models/HubError';
import HubError from '../models/HubError';
import WriteRequest from '../models/WriteRequest';

@@ -18,8 +19,8 @@ import WriteResponse from '../models/WriteResponse';

handleWriteCommitRequest(_: WriteRequest, __: PermissionGrant[]): Promise<WriteResponse> {
throw new HubError({ errorCode: ErrorCode.NotImplemented });
throw new HubError({ errorCode: HubErrorCode.NotImplemented });
}
async handleQueryRequest(_: ObjectQueryRequest, __: PermissionGrant[]): Promise<ObjectQueryResponse> {
throw new HubError({ errorCode: ErrorCode.NotImplemented });
throw new HubError({ errorCode: HubErrorCode.NotImplemented });
}
}

@@ -0,3 +1,4 @@

import { HubErrorCode } from '@decentralized-identity/hub-common-js';
import PermissionGrant, { OWNER_PERMISSION, PERMISSION_GRANT_CONTEXT, PERMISSION_GRANT_TYPE } from '../models/PermissionGrant';
import HubError, { ErrorCode } from '../models/HubError';
import HubError from '../models/HubError';
import BaseRequest from '../models/BaseRequest';

@@ -11,3 +12,3 @@ import WriteRequest from '../models/WriteRequest';

import Context from '../interfaces/Context';
import { ObjectContainer } from '../index';
import { IObjectMetadata } from '../index';
import StoreUtils from '../utilities/StoreUtils';

@@ -73,3 +74,3 @@

throw new HubError({
errorCode: ErrorCode.ServerError,
errorCode: HubErrorCode.ServerError,
developerMessage: 'Commits should not call getPermissionGrantsForRequest',

@@ -165,3 +166,3 @@ });

throw new HubError({
errorCode: ErrorCode.PermissionsRequired,
errorCode: HubErrorCode.PermissionsRequired,
});

@@ -204,3 +205,3 @@ }

*/
static async pruneResults(results: ObjectContainer[], grants: PermissionGrant[]): Promise<ObjectContainer[]> {
static async pruneResults(results: IObjectMetadata[], grants: PermissionGrant[]): Promise<IObjectMetadata[]> {

@@ -215,6 +216,6 @@ // check if a grant gives permission to all results

throw new HubError({
errorCode: ErrorCode.PermissionsRequired,
errorCode: HubErrorCode.PermissionsRequired,
});
// const prunedResults: ObjectContainer[] = [];
// const prunedResults: IObjectMetadata[] = [];
// results.forEach((result) => {

@@ -221,0 +222,0 @@ // if (createdByRestrictions.includes(result.created_by)) {

@@ -0,3 +1,4 @@

import { CommitOperation, HubErrorCode } from '@decentralized-identity/hub-common-js';
import Context from '../interfaces/Context';
import HubError, { ErrorCode } from '../models/HubError';
import HubError from '../models/HubError';
import WriteRequest from '../models/WriteRequest';

@@ -9,3 +10,2 @@ import WriteResponse from '../models/WriteResponse';

import BaseResponse from '../models/BaseResponse';
import { Operation } from '../models/Commit';
import AuthorizationController from './AuthorizationController';

@@ -78,7 +78,7 @@ import PermissionGrant from '../models/PermissionGrant';

*/
public async handle(request: BaseRequest): Promise<BaseResponse> {
public async handle(request: BaseRequest): Promise<BaseResponse<string>> {
const grants = await this.authorization.getPermissionGrantsForRequest(request);
if (grants.length === 0) {
throw new HubError({
errorCode: ErrorCode.PermissionsRequired,
errorCode: HubErrorCode.PermissionsRequired,
});

@@ -108,3 +108,3 @@ }

}
const operation = request.commit.getProtectedHeaders().operation as Operation;
const operation = request.commit.getProtectedHeaders().operation as CommitOperation;
/* istanbul ignore if */

@@ -111,0 +111,0 @@ if (!operation) { // this is covered in Commit

@@ -0,1 +1,2 @@

import { HubErrorCode } from '@decentralized-identity/hub-common-js';
import Context from '../interfaces/Context';

@@ -6,3 +7,2 @@ import AuthorizationController from './AuthorizationController';

import { HubError } from '../index';
import { ErrorCode } from '../models/HubError';
import * as store from '../interfaces/Store';

@@ -31,3 +31,3 @@

throw new HubError({
errorCode: ErrorCode.NotImplemented,
errorCode: HubErrorCode.NotImplemented,
property: 'fields',

@@ -65,3 +65,3 @@ developerMessage: 'A new type of response is required',

throw new HubError({
errorCode: ErrorCode.PermissionsRequired,
errorCode: HubErrorCode.PermissionsRequired,
});

@@ -68,0 +68,0 @@ }

@@ -0,3 +1,4 @@

import { CommitOperation, HubErrorCode, ICommitProtectedHeaders } from '@decentralized-identity/hub-common-js';
import BaseController from './BaseController';
import HubError, { ErrorCode } from '../models/HubError';
import HubError from '../models/HubError';
import PermissionGrant, { PERMISSION_GRANT_CONTEXT, PERMISSION_GRANT_TYPE } from '../models/PermissionGrant';

@@ -9,3 +10,2 @@ import ObjectQueryRequest from '../models/ObjectQueryRequest';

import StoreUtils from '../utilities/StoreUtils';
import { Operation, CommitHeaders } from '../models/Commit';

@@ -22,3 +22,3 @@ /**

throw new HubError({
errorCode: ErrorCode.BadRequest,
errorCode: HubErrorCode.BadRequest,
developerMessage: `query 'context' must be '${PERMISSION_GRANT_CONTEXT}', 'type' must be '${PERMISSION_GRANT_TYPE}'`,

@@ -32,6 +32,6 @@ });

const headers = request.commit.getProtectedHeaders();
PermissionsController.validateSchema(headers as CommitHeaders);
PermissionsController.validateSchema(headers);
const operation = request.commit.getProtectedHeaders().operation!;
if (operation === Operation.Create || operation === Operation.Update) {
PermissionsController.validateStrategy(headers as CommitHeaders);
if (operation === CommitOperation.Create || operation === CommitOperation.Update) {
PermissionsController.validateStrategy(headers);
PermissionsController.validatePermissionGrant(request);

@@ -58,7 +58,7 @@ }

// given commit headers, validates the permission grant schema
private static validateSchema(headers: CommitHeaders) {
private static validateSchema(headers: Partial<ICommitProtectedHeaders>) {
if (headers.context !== PERMISSION_GRANT_CONTEXT ||
headers.type !== PERMISSION_GRANT_TYPE) {
throw new HubError({
errorCode: ErrorCode.BadRequest,
errorCode: HubErrorCode.BadRequest,
});

@@ -69,6 +69,6 @@ }

// given commit headers, validates the strategy
private static validateStrategy(headers: CommitHeaders) {
private static validateStrategy(headers: Partial<ICommitProtectedHeaders>) {
if (headers.commit_strategy !== 'basic') {
throw new HubError({
errorCode: ErrorCode.BadRequest,
errorCode: HubErrorCode.BadRequest,
property: 'commit.protected.commit_strategy',

@@ -87,3 +87,3 @@ });

throw new HubError({
errorCode: ErrorCode.BadRequest,
errorCode: HubErrorCode.BadRequest,
property: 'commit.payload.created_by',

@@ -90,0 +90,0 @@ developerMessage: 'Create permission cannot be given when created_by is used',

@@ -1,7 +0,6 @@

import { CommitOperation, HubErrorCode, IObjectMetadata } from '@decentralized-identity/hub-common-js';
import BaseController from './BaseController';
import HubError, { ErrorCode } from '../models/HubError';
import HubError from '../models/HubError';
import ObjectQueryRequest from '../models/ObjectQueryRequest';
import ObjectQueryResponse from '../models/ObjectQueryResponse';
import ObjectContainer from '../interfaces/ObjectContainer';
import PermissionGrant from '../models/PermissionGrant';

@@ -11,3 +10,2 @@ import WriteRequest from '../models/WriteRequest';

import StoreUtils from '../utilities/StoreUtils';
import { Operation } from '../models/Commit';
import { QueryEqualsFilter } from '../interfaces/Store';

@@ -22,7 +20,7 @@

const headers = request.commit.getProtectedHeaders();
if (headers.operation === Operation.Create) {
if (headers.operation === CommitOperation.Create) {
const profiles = await this.getProfiles(request.sub, headers.context, headers.type);
if (profiles.length > 0) {
throw new HubError({
errorCode: ErrorCode.BadRequest,
errorCode: HubErrorCode.BadRequest,
developerMessage: `Profile already exists. Please issue update for object_id: '${profiles[0].id}'`,

@@ -47,3 +45,3 @@ });

const schemas: [string, string][] = [];
const indexToObjects: {[index: number]: ObjectContainer} = {};
const indexToObjects: {[index: number]: IObjectMetadata} = {};
profiles.forEach((profile) => {

@@ -76,3 +74,3 @@ const schema: [string, string] = [profile.context, profile.type];

// finalize into an array
const results: ObjectContainer[] = [];
const results: IObjectMetadata[] = [];
for (const index in indexToObjects) {

@@ -86,3 +84,3 @@ results.push(indexToObjects[index]);

// gets all the profiles on the first page for this user
private async getProfiles(owner: string, context?: string, type?: string): Promise<ObjectContainer[]> {
private async getProfiles(owner: string, context?: string, type?: string): Promise<IObjectMetadata[]> {
const filters: QueryEqualsFilter[] = [

@@ -89,0 +87,0 @@ {

@@ -0,1 +1,2 @@

import { HubErrorCode } from '@decentralized-identity/hub-common-js';
import { Authentication } from '@decentralized-identity/did-auth-jose';

@@ -10,3 +11,3 @@ import Context from './interfaces/Context';

import ProfileController from './controllers/ProfileController';
import HubError, { ErrorCode } from './models/HubError';
import HubError from './models/HubError';
import BaseRequest from './models/BaseRequest';

@@ -77,3 +78,3 @@ import ObjectQueryRequest from './models/ObjectQueryRequest';

body: Buffer.from(new HubError({
errorCode: ErrorCode.AuthenticationFailed,
errorCode: HubErrorCode.AuthenticationFailed,
}).toResponse().toString()),

@@ -94,3 +95,3 @@ };

// If we get here, it means the Hub access token received is valid, proceed with handling the request.
let response: BaseResponse;
let response: BaseResponse<string>;
const requestType = BaseRequest.getTypeFromJson(verifiedRequest.request);

@@ -107,3 +108,3 @@ switch (requestType) {

throw new HubError({
errorCode: ErrorCode.BadRequest,
errorCode: HubErrorCode.BadRequest,
property: 'query.interface',

@@ -120,3 +121,3 @@ });

throw new HubError({
errorCode: ErrorCode.BadRequest,
errorCode: HubErrorCode.BadRequest,
property: 'commit',

@@ -129,3 +130,3 @@ developerMessage: 'Signature could not be verified',

throw new HubError({
errorCode: ErrorCode.BadRequest,
errorCode: HubErrorCode.BadRequest,
property: 'commit.protected.interface',

@@ -138,3 +139,3 @@ });

throw new HubError({
errorCode: ErrorCode.BadRequest,
errorCode: HubErrorCode.BadRequest,
property: '@type',

@@ -158,3 +159,3 @@ developerMessage: `Request format unknown: ${requestType}`,

} else {
hubError = new HubError({ errorCode: ErrorCode.ServerError });
hubError = new HubError({ errorCode: HubErrorCode.ServerError });
hubError.stack = error.stack;

@@ -161,0 +162,0 @@ }

/**
* This file defines the external exports.
*/
import { HubErrorCode, IObjectMetadata } from '@decentralized-identity/hub-common-js';
import Hub from './Hub';
// Interfaces
import ObjectContainer from './interfaces/ObjectContainer';
import * as Store from './interfaces/Store';

@@ -13,4 +13,3 @@

import Commit from './models/Commit';
import HubError, { ErrorCode } from './models/HubError';
import HttpResolver from './plugins/HttpResolver';
import HubError from './models/HubError';

@@ -24,8 +23,7 @@ // Utilities

CommitDeserializer,
ErrorCode,
HubErrorCode,
HubError,
ObjectContainer,
IObjectMetadata,
SignedCommit,
Store,
HttpResolver,
};

@@ -0,3 +1,3 @@

import { IObjectMetadata } from '@decentralized-identity/hub-common-js';
import Commit from '../models/Commit';
import ObjectContainer from './ObjectContainer';

@@ -80,3 +80,3 @@ /**

*/
export interface ObjectQueryResponse extends QueryResponse<ObjectContainer> {
export interface ObjectQueryResponse extends QueryResponse<IObjectMetadata> {

@@ -83,0 +83,0 @@ }

@@ -0,10 +1,13 @@

import { IHubResponse } from '@decentralized-identity/hub-common-js';
/**
* A hub response of type BaseResponse
* A base class for Hub responses, which is extended by more specific response classes.
*/
export default abstract class BaseResponse {
export default abstract class BaseResponse<ResponseType extends string> {
/** \@context of the response */
public static readonly context = 'https://schema.identity.foundation/0.1';
/** \@type of the response */
protected type = 'BaseResponse';
protected type: ResponseType;

@@ -15,3 +18,4 @@ /**

*/
constructor(public developerMessage?: string) {
constructor(type: ResponseType, public developerMessage?: string) {
this.type = type;
}

@@ -29,3 +33,3 @@

*/
protected toJson(): any {
protected toJson(): IHubResponse<ResponseType> {
return {

@@ -32,0 +36,0 @@ '@context': BaseResponse.context,

@@ -0,14 +1,8 @@

import { CommitOperation, ICommitProtectedHeaders, ICommitUnprotectedHeaders, HubErrorCode } from '@decentralized-identity/hub-common-js';
import base64url from 'base64url';
import { DidDocument } from '@decentralized-identity/did-common-typescript';
import HubError, { ErrorCode } from './HubError';
import HubError from './HubError';
import * as crypto from 'crypto';
import Context from '../interfaces/Context';
/** Operations for a commit */
export enum Operation {
Create = 'create',
Update = 'update',
Delete = 'delete',
}
/**

@@ -26,6 +20,6 @@ * A single Commit to an object

/** decrypted unprotected headers */
protected readonly unprotectedHeaders: Partial<CommitHeaders>;
protected readonly unprotectedHeaders: Partial<ICommitUnprotectedHeaders>;
/** decrypted protected headers */
protected readonly protectedHeaders: Partial<CommitHeaders>;
protected readonly protectedHeaders: Partial<ICommitProtectedHeaders>;

@@ -69,3 +63,3 @@ /**

switch (protectedHeaders.operation) {
case Operation.Create:
case CommitOperation.Create:
// its impossible to include object_id as a create without the hash algorithm being broken

@@ -78,3 +72,3 @@ if ('object_id' in protectedHeaders) {

throw new HubError({
errorCode: ErrorCode.BadRequest,
errorCode: HubErrorCode.BadRequest,
property: 'commit.protected.object_id',

@@ -85,4 +79,4 @@ developerMessage: 'object_id cannot be included in the protected headers for a \'create\' commit',

break;
case Operation.Update:
case Operation.Delete:
case CommitOperation.Update:
case CommitOperation.Delete:
if (!('object_id' in protectedHeaders)) {

@@ -106,3 +100,3 @@ throw HubError.missingParameter('commit.protected.object_id');

throw new HubError({
errorCode: ErrorCode.BadRequest,
errorCode: HubErrorCode.BadRequest,
property: 'commit.protected.rev',

@@ -121,3 +115,3 @@ developerMessage: "'rev' cannot be included in protected headers",

additionalHeaders.rev = revision;
if (protectedHeaders.operation === Operation.Create) {
if (protectedHeaders.operation === CommitOperation.Create) {
additionalHeaders.object_id = revision;

@@ -132,4 +126,4 @@ }

*/
getHeaders(): CommitHeaders {
return Object.assign({}, this.unprotectedHeaders, this.protectedHeaders) as CommitHeaders;
getHeaders(): ICommitProtectedHeaders & ICommitUnprotectedHeaders {
return Object.assign({}, this.unprotectedHeaders, this.protectedHeaders) as (ICommitProtectedHeaders & ICommitUnprotectedHeaders);
}

@@ -140,3 +134,3 @@

*/
getProtectedHeaders(): Partial<CommitHeaders> {
getProtectedHeaders(): Partial<ICommitProtectedHeaders> {
return this.protectedHeaders;

@@ -162,17 +156,1 @@ }

}
/** Combined headers for a commit */
export interface CommitHeaders {
interface: string;
context: string;
type: string;
operation: Operation;
committed_at: string;
commit_strategy: string;
sub: string;
kid: string;
meta?: any;
iss: string;
object_id: string;
rev: string;
}

@@ -1,2 +0,3 @@

import HubError, { ErrorCode } from './HubError';
import { HubErrorCode } from '@decentralized-identity/hub-common-js';
import HubError from './HubError';
import BaseRequest from './BaseRequest';

@@ -28,3 +29,3 @@

throw new HubError({
errorCode: ErrorCode.NotImplemented,
errorCode: HubErrorCode.NotImplemented,
property: 'query.object_id, query.revision',

@@ -31,0 +32,0 @@ developerMessage: 'object_id and revision are mutually exclusive',

import BaseResponse from './BaseResponse';
import Commit from './Commit';
import { IHubCommitQueryResponse } from '@decentralized-identity/hub-common-js';

@@ -7,3 +8,3 @@ /**

*/
export default class CommitQueryResponse extends BaseResponse {
export default class CommitQueryResponse extends BaseResponse<'CommitQueryResponse'> {

@@ -17,15 +18,12 @@ /**

constructor (public readonly commits: Commit[], public readonly skipToken: string | null, developerMessage?: string) {
super(developerMessage);
this.type = 'CommitQueryResponse';
super('CommitQueryResponse', developerMessage);
}
protected toJson(): any {
protected toJson(): IHubCommitQueryResponse {
const jwtCommits = this.commits.map(commit => commit.toJson());
const json = super.toJson();
Object.assign(json, {
return Object.assign({}, super.toJson(), {
commits: jwtCommits,
skip_token: this.skipToken,
});
return json;
}
}
import BaseResponse from './BaseResponse';
import { ErrorCode } from './HubError';
import { IHubErrorResponse, HubErrorCode } from '@decentralized-identity/hub-common-js';
/** Parameters to create an ErrorResponse */
interface ErrorResponseOptions {
errorCode: ErrorCode;
errorCode: HubErrorCode;
target?: string;

@@ -17,11 +17,16 @@ errorUrl?: string;

*/
export default class ErrorResponse extends BaseResponse {
export default class ErrorResponse extends BaseResponse<'ErrorResponse'> {
/** A standard error code value */
readonly errorCode: ErrorCode;
readonly errorCode: HubErrorCode;
/** A resolvable url for more information */
readonly errorUrl?: string;
/** Error messages to the user */
readonly userMessage?: string;
/** The property in the request that caused error */
readonly target?: string;
/** Custom hub provider error information */

@@ -31,5 +36,6 @@ readonly innerError?: any;

constructor(options: ErrorResponseOptions) {
super(options.developerMessage);
this.type = 'ErrorResponse';
super('ErrorResponse', options.developerMessage);
this.errorCode = options.errorCode;
// copy any additional properties

@@ -41,5 +47,4 @@ for (const property in options) {

protected toJson(): any {
const json = super.toJson();
Object.assign(json, {
protected toJson(): IHubErrorResponse {
return Object.assign(super.toJson(), {
error_code: this.errorCode,

@@ -51,4 +56,3 @@ error_url: this.errorUrl,

});
return json;
}
}

@@ -0,19 +1,5 @@

import { HubErrorCode } from '@decentralized-identity/hub-common-js';
import ErrorResponse from './ErrorResponse';
/**
* Standard error codes
*/
export enum ErrorCode {
BadRequest = 'bad_request',
AuthenticationFailed = 'authentication_failed',
PermissionsRequired = 'permissions_required',
NotFound = 'not_found',
TooManyRequests = 'too_many_requests',
ServerError = 'server_error',
NotImplemented = 'not_implemented',
ServiceUnavailable = 'service_unavailable',
TemporarilyUnavailable = 'temporarily_unavailable',
}
/**
* Common Developer Messages

@@ -29,3 +15,3 @@ */

interface HubErrorOptions {
errorCode: ErrorCode;
errorCode: HubErrorCode;
property?: string;

@@ -40,10 +26,15 @@ developerMessage?: string;

export default class HubError extends Error {
/** A standard error code value */
readonly errorCode: ErrorCode;
readonly errorCode: HubErrorCode;
/** The property in the request that caused error */
readonly property?: string;
/** (Optional) developer message */
readonly developerMessage?: string;
/** Message to the user */
readonly userMessage?: string;
/** ISO datetime at which this Error was created */

@@ -73,3 +64,3 @@ readonly timestamp: string;

switch (this.errorCode) {
case ErrorCode.NotImplemented:
case HubErrorCode.NotImplemented:
developerMessage = DeveloperMessage.NotImplemented;

@@ -95,3 +86,3 @@ break;

property,
errorCode: ErrorCode.BadRequest,
errorCode: HubErrorCode.BadRequest,
developerMessage: DeveloperMessage.IncorrectParameter,

@@ -105,3 +96,3 @@ });

property,
errorCode: ErrorCode.BadRequest,
errorCode: HubErrorCode.BadRequest,
developerMessage: DeveloperMessage.MissingParameter,

@@ -114,3 +105,3 @@ });

return new HubError({
errorCode: ErrorCode.NotImplemented,
errorCode: HubErrorCode.NotImplemented,
});

@@ -122,3 +113,3 @@ }

return new HubError({
errorCode: ErrorCode.PermissionsRequired,
errorCode: HubErrorCode.PermissionsRequired,
});

@@ -130,3 +121,3 @@ }

return new HubError({
errorCode: ErrorCode.NotFound,
errorCode: HubErrorCode.NotFound,
});

@@ -133,0 +124,0 @@ }

@@ -0,3 +1,4 @@

import { HubErrorCode } from '@decentralized-identity/hub-common-js';
import BaseRequest from './BaseRequest';
import HubError, { ErrorCode } from './HubError';
import HubError from './HubError';
import { QueryFilter } from '../interfaces/Store';

@@ -47,3 +48,3 @@

throw new HubError({
errorCode: ErrorCode.BadRequest,
errorCode: HubErrorCode.BadRequest,
property: 'query.context, query.type',

@@ -50,0 +51,0 @@ developerMessage: 'context and type are co-dependent',

@@ -0,3 +1,3 @@

import { IHubObjectQueryResponse, IObjectMetadata } from '@decentralized-identity/hub-common-js';
import BaseResponse from './BaseResponse';
import ObjectContainer from '../interfaces/ObjectContainer';

@@ -7,3 +7,3 @@ /**

*/
export default class ObjectQueryResponse extends BaseResponse {
export default class ObjectQueryResponse extends BaseResponse<'ObjectQueryResponse'> {

@@ -16,15 +16,12 @@ /**

*/
constructor(public readonly objects: ObjectContainer[], public readonly skipToken: string | null, developerMessage?: string) {
super(developerMessage);
this.type = 'ObjectQueryResponse';
constructor(public readonly objects: IObjectMetadata[], public readonly skipToken: string | null, developerMessage?: string) {
super('ObjectQueryResponse', developerMessage);
}
protected toJson(): any {
const json = super.toJson();
Object.assign(json, {
protected toJson(): IHubObjectQueryResponse {
return Object.assign({}, super.toJson(), {
objects: this.objects,
skip_token: this.skipToken,
});
return json;
}
}

@@ -0,3 +1,4 @@

import { HubErrorCode } from '@decentralized-identity/hub-common-js';
import Commit from './Commit';
import HubError, { ErrorCode } from './HubError';
import HubError from './HubError';
import Context from '../interfaces/Context';

@@ -50,3 +51,3 @@ import { DidResolver, DidDocument } from '@decentralized-identity/did-common-typescript';

throw new HubError({
errorCode: ErrorCode.BadRequest,
errorCode: HubErrorCode.BadRequest,
property: 'commit',

@@ -53,0 +54,0 @@ developerMessage: `Public Key ${keyId} could not be found`,

@@ -0,4 +1,5 @@

import { HubErrorCode } from '@decentralized-identity/hub-common-js';
import BaseRequest from './BaseRequest';
import Commit from './Commit';
import HubError, { ErrorCode } from './HubError';
import HubError from './HubError';
import SignedCommit from './SignedCommit';

@@ -31,3 +32,3 @@ import { DidDocument } from '@decentralized-identity/did-common-typescript';

throw new HubError({
errorCode: ErrorCode.BadRequest,
errorCode: HubErrorCode.BadRequest,
property: 'commit',

@@ -34,0 +35,0 @@ developerMessage: 'The commit must be signed by the request issuer',

@@ -6,13 +6,12 @@ import BaseResponse from './BaseResponse';

*/
export default class WriteResponse extends BaseResponse {
export default class WriteResponse extends BaseResponse<'WriteResponse'> {
constructor(public readonly revisions: string[], developerMessage?: string) {
super(developerMessage);
this.type = 'WriteResponse';
super('WriteResponse', developerMessage);
}
protected toJson(): any {
const json = super.toJson();
json.revisions = this.revisions;
return json;
return Object.assign({}, super.toJson(), {
revisions: this.revisions,
});
}
}

@@ -1,2 +0,3 @@

import Commit, { Operation } from '../models/Commit';
import { CommitOperation } from '@decentralized-identity/hub-common-js';
import Commit from '../models/Commit';
import { Store, CommitQueryResponse } from '../interfaces/Store';

@@ -50,9 +51,9 @@ import StoreUtils from './StoreUtils';

// create commits are first, any other commit has higher value
if (latestCommit.getProtectedHeaders().operation === Operation.Create &&
currentCommit.getProtectedHeaders().operation !== Operation.Create) {
if (latestCommit.getProtectedHeaders().operation === CommitOperation.Create &&
currentCommit.getProtectedHeaders().operation !== CommitOperation.Create) {
return currentCommit;
}
// delete commits are last, any other commit has lower value
if (latestCommit.getProtectedHeaders().operation !== Operation.Delete &&
currentCommit.getProtectedHeaders().operation === Operation.Delete) {
if (latestCommit.getProtectedHeaders().operation !== CommitOperation.Delete &&
currentCommit.getProtectedHeaders().operation === CommitOperation.Delete) {
return currentCommit;

@@ -65,3 +66,3 @@ }

if (latestDate === currentDate &&
latestCommit.getHeaders().rev < currentCommit.getHeaders().rev) {
latestCommit.getHeaders().rev! < currentCommit.getHeaders().rev!) {
return currentCommit;

@@ -68,0 +69,0 @@ }

@@ -0,7 +1,7 @@

import { CommitOperation, HubErrorCode } from '@decentralized-identity/hub-common-js';
import { Store, QueryEqualsFilter } from '../interfaces/Store';
import PermissionGrant from '../models/PermissionGrant';
import WriteRequest from '../models/WriteRequest';
import HubError, { ErrorCode } from '../models/HubError';
import HubError from '../models/HubError';
import WriteResponse from '../models/WriteResponse';
import { Operation } from '../models/Commit';

@@ -20,3 +20,3 @@ /**

const operation = request.commit.getProtectedHeaders().operation!;
if (operation !== Operation.Create && !await StoreUtils.objectExists(request, store, grants)) {
if (operation !== CommitOperation.Create && !await StoreUtils.objectExists(request, store, grants)) {
throw HubError.notFound();

@@ -68,3 +68,3 @@ }

throw new HubError({
errorCode: ErrorCode.ServerError,
errorCode: HubErrorCode.ServerError,
});

@@ -71,0 +71,0 @@ } else if (response.results.length === 1 && grants) {

{
"name": "@decentralized-identity/hub-node-core",
"version": "0.1.2",
"version": "0.1.3",
"description": "Node.js implementation of the Identity Hub core.",

@@ -12,2 +12,3 @@ "repository": "https://github.com/decentralized-identity/hub-node-core",

"@decentralized-identity/did-common-typescript": "^0.1.1",
"@decentralized-identity/hub-common-js": "^0.1.0",
"base64url": "3.0.1",

@@ -34,3 +35,4 @@ "node-fetch": "^2.2.0"

"test": "nyc jasmine-ts --config=./tests/jasmine.json",
"lint": "tslint --fix --project ."
"lint": "tslint --fix --project .",
"check-lint": "tslint --project ."
},

@@ -37,0 +39,0 @@ "nyc": {

@@ -0,9 +1,9 @@

import { CommitOperation, HubErrorCode, IObjectMetadata } from '@decentralized-identity/hub-common-js';
import AuthorizationController, { AuthorizationOperation } from '../../lib/controllers/AuthorizationController';
import TestCommit from '../mocks/TestCommit';
import PermissionGrant, { OWNER_PERMISSION, PERMISSION_GRANT_CONTEXT, PERMISSION_GRANT_TYPE } from '../../lib/models/PermissionGrant';
import ObjectContainer from '../../lib/interfaces/ObjectContainer';
import Commit, { Operation } from '../../lib/models/Commit';
import Commit from '../../lib/models/Commit';
import * as store from '../../lib/interfaces/Store';
import BaseRequest from '../../lib/models/BaseRequest';
import HubError, { ErrorCode } from '../../lib/models/HubError';
import HubError from '../../lib/models/HubError';
import TestContext from '../mocks/TestContext';

@@ -31,3 +31,3 @@ import CommitQueryRequest from '../../lib/models/CommitQueryRequest';

commits.forEach((commit) => {
asCommits[commit.getHeaders().rev] = commit;
asCommits[commit.getHeaders().rev!] = commit;
})

@@ -48,3 +48,3 @@ commitStore.and.callFake((query: store.CommitQueryRequest): Promise<store.CommitQueryResponse> => {

results: [
asCommits[filter.value]
asCommits[filter.value],
],

@@ -58,3 +58,3 @@ pagination: {

results: [
asCommits[filter.value[0]]
asCommits[filter.value[0]],
],

@@ -84,7 +84,7 @@ pagination: {

type: PERMISSION_GRANT_TYPE,
operation: Operation.Create,
operation: CommitOperation.Create,
commit_strategy: 'basic',
sub: 'did:example:alice.id',
kid: 'did:example:alice.id#key-1',
}, grant));
}, grant));
});

@@ -96,3 +96,3 @@ returnPermissionObject(asCommits);

function returnPermissionObject(commits: Commit[]) {
const asObjects: ObjectContainer[] = [];
const asObjects: IObjectMetadata[] = [];
commits.forEach((commit) => {

@@ -108,3 +108,3 @@ asObjects.push({

commit_strategy: 'basic',
});
} as any);
});

@@ -114,8 +114,8 @@ objectStore.and.returnValue({

pagination: {
skip_token: null
}
skip_token: null,
},
});
returnPermissionCommits(commits);
}
describe('getPermissionGrantsForRequest', () => {

@@ -128,3 +128,3 @@ it('should allow did owner without rules', async () => {

});
objectStore.and.returnValue({results: [], pagination: {skip_token: null}});
objectStore.and.returnValue({ results: [], pagination: { skip_token: null } });
const grants = await auth.getPermissionGrantsForRequest(request);

@@ -143,3 +143,3 @@ expect(grants.length > 0).toBeTruthy();

});
objectStore.and.returnValue({results: [], pagination: {skip_token: null}});
objectStore.and.returnValue({ results: [], pagination: { skip_token: null } });
try {

@@ -151,3 +151,3 @@ await auth.getPermissionGrantsForRequest(request);

}
expect(err.errorCode).toEqual(ErrorCode.PermissionsRequired);
expect(err.errorCode).toEqual(HubErrorCode.PermissionsRequired);
}

@@ -157,7 +157,7 @@ expect(objectStore).toHaveBeenCalled();

async function checkPermissionFor(operation: Operation, allowString: string) {
async function checkPermissionFor(operation: CommitOperation, allowString: string) {
const owner = 'did:example:alice.id';
const sender = `${owner}-not`;
const type = TestUtilities.randomString();
const object_id = (operation !== Operation.Create ? type : undefined);
const object_id = (operation !== CommitOperation.Create ? type : undefined);
const request = TestRequest.createWriteRequest({

@@ -171,3 +171,3 @@ iss: sender,

object_id,
kid: `${sender}#key-1`
kid: `${sender}#key-1`,
});

@@ -180,11 +180,11 @@ const permission = {

type,
}
};
returnPermissions([permission]);
const returnedPermissions = await auth.getPermissionGrantsForRequest(request)
const returnedPermissions = await auth.getPermissionGrantsForRequest(request);
expect(returnedPermissions.length > 0).toBeTruthy();
expect(returnedPermissions[0]).toEqual(permission);
}
it('should accept for create requests', async () => {
await checkPermissionFor(Operation.Create, 'C----');
await checkPermissionFor(CommitOperation.Create, 'C----');
});

@@ -209,5 +209,5 @@

type,
}
};
returnPermissions([permission]);
const returnedPermissions = await auth.getPermissionGrantsForRequest(request)
const returnedPermissions = await auth.getPermissionGrantsForRequest(request);
expect(returnedPermissions.length > 0).toBeTruthy();

@@ -218,7 +218,7 @@ expect(returnedPermissions[0]).toEqual(permission);

it('should accept for update requests', async () => {
await checkPermissionFor(Operation.Update, '--U--');
await checkPermissionFor(CommitOperation.Update, '--U--');
});
it('should accept for delete requests', async () => {
await checkPermissionFor(Operation.Delete, '---D-');
await checkPermissionFor(CommitOperation.Delete, '---D-');
});

@@ -244,3 +244,3 @@

}
expect(err.errorCode).toEqual(ErrorCode.BadRequest);
expect(err.errorCode).toEqual(HubErrorCode.BadRequest);
expect(err.property).toEqual('@type');

@@ -262,3 +262,3 @@ }

operation: 'unknown',
kid: `${sender}#key-1`
kid: `${sender}#key-1`,
});

@@ -271,3 +271,3 @@ await auth.getPermissionGrantsForRequest(request);

}
expect(err.errorCode).toEqual(ErrorCode.BadRequest);
expect(err.errorCode).toEqual(HubErrorCode.BadRequest);
expect(err.property).toEqual('commit.protected.operation');

@@ -284,9 +284,9 @@ }

const spy = spyOn(auth, 'getPermissionGrants' as any).and.callFake((operation: AuthorizationOperation,
owner: string,
requester: string,
contextTypePairs: [string, string][]) => {
expect(operation).toEqual(AuthorizationOperation.Read);
expect(owner).toEqual(request.sub);
expect(requester).toEqual(request.iss);
expect(contextTypePairs.length).toEqual(0);
owner: string,
requester: string,
contextTypePairs: [string, string][]) => {
expect(operation).toEqual(AuthorizationOperation.Read);
expect(owner).toEqual(request.sub);
expect(requester).toEqual(request.iss);
expect(contextTypePairs.length).toEqual(0);
});

@@ -306,9 +306,9 @@ await auth.getPermissionGrantsForRequest(request);

try {
await auth.getPermissionGrantsForRequest(request)
fail('should throw')
await auth.getPermissionGrantsForRequest(request);
fail('should throw');
} catch (err) {
if (!(err instanceof HubError)) {
fail(err.message)
fail(err.message);
}
expect(err.errorCode).toEqual(ErrorCode.ServerError);
expect(err.errorCode).toEqual(HubErrorCode.ServerError);
}

@@ -319,5 +319,5 @@ });

describe('pruneResults', () => {
function createObjects(context: string, type: string): ObjectContainer[] {
function createObjects(context: string, type: string): IObjectMetadata[] {
const count = Math.round(Math.random() * 10) + 1;
const objects: ObjectContainer[] = [];
const objects: IObjectMetadata[] = [];
for (let i = 0; i < count; i++) {

@@ -332,3 +332,3 @@ objects.push({

created_at: new Date(Date.now()).toISOString(),
commit_strategy: 'basic'
commit_strategy: 'basic',
});

@@ -350,4 +350,4 @@ }

context,
type
}
type,
};
const results = await AuthorizationController.pruneResults(objects, [grant]);

@@ -370,4 +370,4 @@ expect(results.length).toEqual(objects.length);

type,
created_by: owner
}
created_by: owner,
};
try {

@@ -380,3 +380,3 @@ await AuthorizationController.pruneResults(objects, [grant]);

}
expect(err.errorCode).toEqual(ErrorCode.PermissionsRequired);
expect(err.errorCode).toEqual(HubErrorCode.PermissionsRequired);
}

@@ -405,3 +405,3 @@ });

type: PERMISSION_GRANT_TYPE,
}, {
}, {
owner: 'did:example:alice.id',

@@ -422,3 +422,3 @@ grantee: 'did:example:bob.id',

}
const results: ObjectContainer[] = []
const results: IObjectMetadata[] = [];
request.filters.forEach((filter) => {

@@ -435,3 +435,3 @@ if (filter.field === 'object_id') {

commit_strategy: 'basic',
})
} as any);
}

@@ -448,3 +448,3 @@ if (filter.field === 'interface' && filter.value === 'Permissions') {

commit_strategy: 'basic',
});
} as any);
}

@@ -457,3 +457,3 @@ });

},
}
};
});

@@ -495,6 +495,6 @@ commitStore.and.returnValue({

const crudMap: {[operation: string]: string} = {
'create': 'C---',
'read': '-R--',
'update': '--U-',
'delete': '---D',
create: 'C---',
read: '-R--',
update: '--U-',
delete: '---D',
};

@@ -510,3 +510,3 @@

context: 'foo',
type: 'bar'
type: 'bar',
};

@@ -532,3 +532,3 @@ it(`should grant ${operation} for ${crudMap[operation]} in CRUD permissions`, () => {

context: 'foo',
type: 'bar'
type: 'bar',
};

@@ -538,3 +538,2 @@ expect(doesGrantPermit(grant, 'someThing' as AuthorizationOperation)).toBeFalsy();

});

@@ -544,6 +543,6 @@

async function getPermissionGrants(operation: AuthorizationOperation,
owner: string,
requester: string,
contextTypePairs: [string, string][]): Promise<PermissionGrant[]> {
return auth['getPermissionGrants'](operation, owner, requester, contextTypePairs);
owner: string,
requester: string,
contextTypePairs: [string, string][]): Promise<PermissionGrant[]> {
return auth['getPermissionGrants'](operation, owner, requester, contextTypePairs);
}

@@ -559,7 +558,7 @@

id: 'complex-permission',
created_by: owner,
created_by: owner,
created_at: new Date(Date.now()).toISOString(),
sub: owner,
commit_strategy: 'not-basic-totally-complex-commit-strategy',
}
};

@@ -569,4 +568,4 @@ objectStore.and.returnValue({

pagination: {
skip_token: null
}
skip_token: null,
},
});

@@ -582,3 +581,3 @@

}
expect(err.errorCode).toEqual(ErrorCode.PermissionsRequired);
expect(err.errorCode).toEqual(HubErrorCode.PermissionsRequired);
}

@@ -596,7 +595,7 @@ });

type: PERMISSION_GRANT_TYPE,
operation: Operation.Create,
operation: CommitOperation.Create,
commit_strategy: 'complex',
sub: owner,
kid: `${owner}#key-1`,
}, {
}, {
owner,

@@ -614,7 +613,7 @@ grantee: sender,

id: permissionCommit.getHeaders().rev,
created_by: owner,
created_by: owner,
created_at: new Date(Date.now()).toISOString(),
sub: owner,
commit_strategy: 'basic',
}
};

@@ -624,4 +623,4 @@ objectStore.and.returnValue({

pagination: {
skip_token: null
}
skip_token: null,
},
});

@@ -639,3 +638,3 @@

}
expect(err.errorCode).toEqual(ErrorCode.PermissionsRequired);
expect(err.errorCode).toEqual(HubErrorCode.PermissionsRequired);
}

@@ -654,6 +653,6 @@ });

allow: 'C----',
created_by: owner
}
created_by: owner,
};
returnPermissions([grant]);
const schema: [string, string] = ['example.com', type];

@@ -667,3 +666,3 @@ try {

}
expect(err.errorCode).toEqual(ErrorCode.PermissionsRequired);
expect(err.errorCode).toEqual(HubErrorCode.PermissionsRequired);
}

@@ -681,6 +680,6 @@ });

type,
allow: 'C----'
}
allow: 'C----',
};
returnPermissions([grant]);
const schema: [string, string] = ['example.com', type];

@@ -694,3 +693,3 @@ try {

}
expect(err.errorCode).toEqual(ErrorCode.PermissionsRequired);
expect(err.errorCode).toEqual(HubErrorCode.PermissionsRequired);
}

@@ -709,5 +708,5 @@ });

allow: 'C----',
}
};
returnPermissions([grant]);
const schema: [string, string] = ['example.com', type];

@@ -721,3 +720,3 @@ try {

}
expect(err.errorCode).toEqual(ErrorCode.PermissionsRequired);
expect(err.errorCode).toEqual(HubErrorCode.PermissionsRequired);
}

@@ -736,5 +735,5 @@ });

allow: '-R---',
}
};
returnPermissions([grant]);
const schema: [string, string] = ['example.com', type];

@@ -748,7 +747,7 @@ try {

}
expect(err.errorCode).toEqual(ErrorCode.PermissionsRequired);
expect(err.errorCode).toEqual(HubErrorCode.PermissionsRequired);
}
})
});
})
});
});

@@ -1,2 +0,3 @@

import HubError, { ErrorCode, DeveloperMessage } from '../../lib/models/HubError';
import { HubErrorCode } from '@decentralized-identity/hub-common-js';
import HubError, { DeveloperMessage } from '../../lib/models/HubError';
import TestController from '../mocks/TestController';

@@ -26,3 +27,3 @@ import TestContext from '../mocks/TestContext';

}
expect(err.errorCode).toEqual(ErrorCode.PermissionsRequired);
expect(err.errorCode).toEqual(HubErrorCode.PermissionsRequired);
}

@@ -36,3 +37,3 @@ });

throw new HubError({
errorCode: ErrorCode.NotImplemented,
errorCode: HubErrorCode.NotImplemented,
developerMessage: message,

@@ -57,3 +58,3 @@ });

throw new HubError({
errorCode: ErrorCode.NotImplemented,
errorCode: HubErrorCode.NotImplemented,
developerMessage: message,

@@ -83,3 +84,3 @@ });

const testError = err as HubError;
expect(testError.errorCode).toEqual(ErrorCode.BadRequest);
expect(testError.errorCode).toEqual(HubErrorCode.BadRequest);
expect(testError.property).toEqual('commit.protected.operation');

@@ -101,3 +102,3 @@ expect(testError.developerMessage).toEqual(DeveloperMessage.IncorrectParameter);

const testError = err as HubError;
expect(testError.errorCode).toEqual(ErrorCode.BadRequest);
expect(testError.errorCode).toEqual(HubErrorCode.BadRequest);
expect(testError.property).toEqual('@type');

@@ -118,3 +119,3 @@ expect(testError.developerMessage).toEqual(DeveloperMessage.IncorrectParameter);

const testError = err as HubError;
expect(testError.errorCode).toEqual(ErrorCode.BadRequest);
expect(testError.errorCode).toEqual(HubErrorCode.BadRequest);
expect(testError.property).toEqual('commit.protected.sub');

@@ -121,0 +122,0 @@ expect(testError.developerMessage).toEqual(DeveloperMessage.IncorrectParameter);

@@ -0,6 +1,6 @@

import { HubErrorCode, IObjectMetadata } from '@decentralized-identity/hub-common-js';
import CollectionsController from '../../lib/controllers/CollectionsController';
import TestContext from '../mocks/TestContext';
import HubError, { ErrorCode } from '../../lib/models/HubError';
import HubError from '../../lib/models/HubError';
import * as store from '../../lib/interfaces/Store';
import ObjectContainer from '../../lib/interfaces/ObjectContainer';
import TestAuthorization from '../mocks/TestAuthorization';

@@ -14,3 +14,3 @@ import AuthorizationController from '../../lib/controllers/AuthorizationController';

return spyOn(contextObject.store, 'queryObjects').and.callFake((query: store.QueryRequest) => {
const results: ObjectContainer[] = [];
const results: IObjectMetadata[] = [];
if (query.filters) {

@@ -48,3 +48,3 @@ query.filters.forEach((filter) => {

beforeEach(() => {
spyOn(AuthorizationController, 'pruneResults').and.callFake((results: ObjectContainer[], _:PermissionGrant[]) => { return results; });
spyOn(AuthorizationController, 'pruneResults').and.callFake((results: IObjectMetadata[], _:PermissionGrant[]) => { return results; });
});

@@ -90,3 +90,3 @@

}
expect(err.errorCode).toEqual(ErrorCode.NotFound);
expect(err.errorCode).toEqual(HubErrorCode.NotFound);
}

@@ -93,0 +93,0 @@ expect(spy).toHaveBeenCalled();

@@ -0,1 +1,2 @@

import { HubErrorCode } from '@decentralized-identity/hub-common-js';
import TestContext from '../mocks/TestContext';

@@ -5,3 +6,3 @@ import TestAuthorization from '../mocks/TestAuthorization';

import CommitQueryRequest from '../../lib/models/CommitQueryRequest';
import { HubError, ErrorCode } from '../../lib';
import { HubError } from '../../lib';
import * as store from '../../lib/interfaces/Store';

@@ -52,3 +53,3 @@ import TestCommit from '../mocks/TestCommit';

}
expect(err.errorCode).toEqual(ErrorCode.NotImplemented);
expect(err.errorCode).toEqual(HubErrorCode.NotImplemented);
expect(err.property).toEqual('fields');

@@ -65,3 +66,3 @@ }

throw new HubError({
errorCode: ErrorCode.ServerError,
errorCode: HubErrorCode.ServerError,
developerMessage: errorCode,

@@ -77,3 +78,3 @@ });

}
expect(err.errorCode).toEqual(ErrorCode.ServerError);
expect(err.errorCode).toEqual(HubErrorCode.ServerError);
expect(err.developerMessage).toEqual(errorCode);

@@ -105,3 +106,3 @@ }

throw new HubError({
errorCode: ErrorCode.ServerError,
errorCode: HubErrorCode.ServerError,
developerMessage: errorCode,

@@ -119,3 +120,3 @@ });

}
expect(err.errorCode).toEqual(ErrorCode.ServerError);
expect(err.errorCode).toEqual(HubErrorCode.ServerError);
expect(err.developerMessage).toEqual(errorCode);

@@ -164,3 +165,3 @@ }

}
expect(err.errorCode).toEqual(ErrorCode.PermissionsRequired);
expect(err.errorCode).toEqual(HubErrorCode.PermissionsRequired);
}

@@ -167,0 +168,0 @@ expect(storeSpy).toHaveBeenCalled();

@@ -0,1 +1,2 @@

import { CommitOperation, HubErrorCode, IObjectMetadata } from '@decentralized-identity/hub-common-js';
import WriteRequest from '../../lib/models/WriteRequest';

@@ -5,3 +6,3 @@ import TestContext from '../mocks/TestContext';

import TestAuthorization from '../mocks/TestAuthorization';
import HubError, { ErrorCode, DeveloperMessage } from '../../lib/models/HubError';
import HubError, { DeveloperMessage } from '../../lib/models/HubError';
import PermissionGrant, { PERMISSION_GRANT_TYPE, PERMISSION_GRANT_CONTEXT } from '../../lib/models/PermissionGrant';

@@ -12,5 +13,3 @@ import StoreUtils from '../../lib/utilities/StoreUtils';

import { QueryEqualsFilter } from '../../lib/interfaces/Store';
import ObjectContainer from '../../lib/interfaces/ObjectContainer';
import AuthorizationController from '../../lib/controllers/AuthorizationController';
import { Operation } from '../../lib/models/Commit';
import TestRequest from '../mocks/TestRequest';

@@ -37,3 +36,3 @@ import TestUtilities from '../TestUtilities';

}
expect(err.errorCode).toEqual(ErrorCode.BadRequest);
expect(err.errorCode).toEqual(HubErrorCode.BadRequest);
}

@@ -54,3 +53,3 @@ });

}
expect(err.errorCode).toEqual(ErrorCode.BadRequest);
expect(err.errorCode).toEqual(HubErrorCode.BadRequest);
}

@@ -75,3 +74,3 @@ });

}
expect(err.errorCode).toEqual(ErrorCode.BadRequest);
expect(err.errorCode).toEqual(HubErrorCode.BadRequest);
expect(err.property).toEqual('commit.protected.commit_strategy');

@@ -110,3 +109,3 @@ }

}
expect(err.errorCode).toEqual(ErrorCode.BadRequest);
expect(err.errorCode).toEqual(HubErrorCode.BadRequest);
expect(err.property).toEqual(`commit.payload.${property}`);

@@ -133,3 +132,3 @@ expect(err.developerMessage).toEqual(DeveloperMessage.MissingParameter);

}
expect(err.errorCode).toEqual(ErrorCode.BadRequest);
expect(err.errorCode).toEqual(HubErrorCode.BadRequest);
expect(err.property).toEqual(`commit.payload.${property}`);

@@ -170,3 +169,3 @@ expect(err.developerMessage).toEqual(DeveloperMessage.IncorrectParameter);

}
expect(err.errorCode).toEqual(ErrorCode.BadRequest);
expect(err.errorCode).toEqual(HubErrorCode.BadRequest);
expect(err.property).toEqual('commit.payload.created_by');

@@ -219,3 +218,3 @@ }

type: PERMISSION_GRANT_TYPE,
operation: Operation.Update,
operation: CommitOperation.Update,
object_id: TestUtilities.randomString(),

@@ -260,3 +259,3 @@ payload: {

type: PERMISSION_GRANT_TYPE,
operation: Operation.Update,
operation: CommitOperation.Update,
object_id: TestUtilities.randomString(),

@@ -306,3 +305,3 @@ payload: {

}
expect(err.errorCode).toEqual(ErrorCode.BadRequest);
expect(err.errorCode).toEqual(HubErrorCode.BadRequest);
}

@@ -332,3 +331,3 @@ expect(spy).not.toHaveBeenCalled();

}
expect(err.errorCode).toEqual(ErrorCode.BadRequest);
expect(err.errorCode).toEqual(HubErrorCode.BadRequest);
}

@@ -418,3 +417,3 @@ expect(spy).not.toHaveBeenCalled();

commit_strategy: 'basic'
} as ObjectContainer],
} as IObjectMetadata],
pagination: {

@@ -424,3 +423,3 @@ skip_token: null,

});
const pruneSpy = spyOn(AuthorizationController, 'pruneResults').and.callFake((objects: ObjectContainer[], grants: PermissionGrant[]) => {
const pruneSpy = spyOn(AuthorizationController, 'pruneResults').and.callFake((objects: IObjectMetadata[], grants: PermissionGrant[]) => {
expect(grants[0]).toEqual(grant);

@@ -427,0 +426,0 @@ expect(objects[0].id).toEqual(objectId);

@@ -0,1 +1,2 @@

import { CommitOperation, HubErrorCode, IObjectMetadata } from '@decentralized-identity/hub-common-js';
import TestContext from '../mocks/TestContext';

@@ -5,7 +6,5 @@ import TestAuthorization from '../mocks/TestAuthorization';

import WriteRequest from '../../lib/models/WriteRequest';
import HubError, { ErrorCode } from '../../lib/models/HubError';
import HubError from '../../lib/models/HubError';
import { Store } from '../../lib/interfaces/Store';
import StoreUtils from '../../lib/utilities/StoreUtils';
import ObjectContainer from '../../lib/interfaces/ObjectContainer';
import { Operation } from '../../lib/models/Commit';
import PermissionGrant, { OWNER_PERMISSION } from '../../lib/models/PermissionGrant';

@@ -95,3 +94,3 @@ import WriteResponse from '../../lib/models/WriteResponse';

commit_strategy: 'basic',
} as ObjectContainer
} as IObjectMetadata
],

@@ -116,3 +115,3 @@ pagination: {

}
expect(err.errorCode).toEqual(ErrorCode.BadRequest);
expect(err.errorCode).toEqual(HubErrorCode.BadRequest);
}

@@ -146,3 +145,3 @@

[Operation.Update, Operation.Delete].forEach((operation) => {
[CommitOperation.Update, CommitOperation.Delete].forEach((operation) => {
const permissionMap: { [operation: string]: string} = {

@@ -183,3 +182,3 @@ update: '--U--',

}
expect(err.errorCode).toEqual(ErrorCode.NotFound);
expect(err.errorCode).toEqual(HubErrorCode.NotFound);
}

@@ -203,3 +202,3 @@

expect(request).toEqual(writeRequest);
return new WriteResponse([request.commit.getHeaders().object_id]);
return new WriteResponse([request.commit.getHeaders().object_id!]);
});

@@ -210,3 +209,3 @@

let result = await controller.handleWriteCommitRequest(writeRequest, []);
expect(result.revisions[0]).toEqual(writeRequest.commit.getHeaders().object_id);
expect(result.revisions[0]).toEqual(writeRequest.commit.getHeaders().object_id!);
expect(spy).toHaveBeenCalled();

@@ -263,3 +262,3 @@ });

it('should return a random profile if multiple exist', async () => {
const profiles: ObjectContainer[] = [];
const profiles: IObjectMetadata[] = [];
const count = Math.round(Math.random() * 10) + 1;

@@ -292,3 +291,3 @@ for(let i = 0; i < count; i++) {

it('should return a random profile per schema if multiple exist', async () => {
const profiles: ObjectContainer[] = [];
const profiles: IObjectMetadata[] = [];
const count = Math.round(Math.random() * 10) + 1;

@@ -295,0 +294,0 @@ let someType: string = TestUtilities.randomString();

@@ -0,1 +1,2 @@

import { HubErrorCode } from '@decentralized-identity/hub-common-js';
import { DidDocument, unitTestExports } from '@decentralized-identity/did-common-typescript';

@@ -11,3 +12,2 @@ import Hub from '../lib/Hub';

CryptoFactory} from '@decentralized-identity/did-auth-jose';
import { ErrorCode } from '../lib/models/HubError';
import CommitQueryRequest from '../lib/models/CommitQueryRequest';

@@ -116,3 +116,3 @@ import ObjectQueryRequest from '../lib/models/ObjectQueryRequest';

const response = await unwrapResponse(hubkey, hubkey, httpresponse.body);
expect(response.error_code).toEqual(ErrorCode.BadRequest);
expect(response.error_code).toEqual(HubErrorCode.BadRequest);
expect(response.target).toEqual('@type');

@@ -168,3 +168,3 @@ });

const response = JSON.parse(httpresponse.body.toString('utf-8'));
expect(response.error_code).toEqual(ErrorCode.AuthenticationFailed);
expect(response.error_code).toEqual(HubErrorCode.AuthenticationFailed);
});

@@ -354,3 +354,3 @@

const error = await unwrapResponse(hubkey, hubkey, response.body);
expect(error.error_code).toEqual(ErrorCode.BadRequest);
expect(error.error_code).toEqual(HubErrorCode.BadRequest);
expect(error.target).toEqual('query.interface');

@@ -385,3 +385,3 @@ });

const error = await unwrapResponse(hubkey, hubkey, response.body);
expect(error.error_code).toEqual(ErrorCode.BadRequest);
expect(error.error_code).toEqual(HubErrorCode.BadRequest);
expect(error.target).toEqual('commit.protected.interface');

@@ -388,0 +388,0 @@ });

@@ -0,3 +1,4 @@

import { CommitOperation } from '@decentralized-identity/hub-common-js';
import base64url from 'base64url';
import Commit, { Operation } from "../../lib/models/Commit";
import Commit from "../../lib/models/Commit";
import Context from '../../lib/interfaces/Context';

@@ -31,3 +32,3 @@

if (!headers.operation) {
headers.operation = Operation.Create; // does not require additional parameters
headers.operation = CommitOperation.Create; // does not require additional parameters
}

@@ -34,0 +35,0 @@ if (!headers.context) {

@@ -0,5 +1,5 @@

import { CommitOperation } from '@decentralized-identity/hub-common-js';
import BaseRequest from "../../lib/models/BaseRequest";
import ObjectQueryRequest from "../../lib/models/ObjectQueryRequest";
import WriteRequest from "../../lib/models/WriteRequest";
import { Operation } from "../../lib/models/Commit";
import TestCommit from '../mocks/TestCommit';

@@ -57,3 +57,3 @@ import TestUtilities from "../TestUtilities";

type: options && options.type? options.type : 'type',
operation: options && options.operation? options.operation : Operation.Create,
operation: options && options.operation? options.operation : CommitOperation.Create,
'commit_strategy': options && options.commit_strategy ? options.commit_strategy : 'basic',

@@ -63,3 +63,3 @@ sub: options && options.override_commit_sub ? options.override_commit_sub : options && options.sub? options.sub : 'did:example:alice.id',

};
if (options && (options.operation == Operation.Update || options.operation === Operation.Delete) && !options.object_id) {
if (options && (options.operation == CommitOperation.Update || options.operation === CommitOperation.Delete) && !options.object_id) {
headers.object_id = TestUtilities.randomString();

@@ -66,0 +66,0 @@ }

@@ -1,3 +0,7 @@

import BaseResponse from "../../lib/models/BaseResponse";
import BaseResponse from '../../lib/models/BaseResponse';
export default class TestResponse extends BaseResponse {};
export default class TestResponse extends BaseResponse<'TestResponse'> {
constructor(developerMessage?: string) {
super('TestResponse', developerMessage);
}
}

@@ -0,5 +1,6 @@

import { HubErrorCode } from '@decentralized-identity/hub-common-js';
import BaseRequest from "../../lib/models/BaseRequest";
import TestRequest from "../mocks/TestRequest";
import TestUtilities from "../TestUtilities";
import HubError, { ErrorCode, DeveloperMessage } from "../../lib/models/HubError";
import HubError, { DeveloperMessage } from "../../lib/models/HubError";

@@ -131,3 +132,3 @@ describe('BaseRequest', () => {

}
expect(err.errorCode).toEqual(ErrorCode.BadRequest);
expect(err.errorCode).toEqual(HubErrorCode.BadRequest);
expect(err.property).toEqual('@type');

@@ -134,0 +135,0 @@ expect(err.developerMessage).toEqual(DeveloperMessage.IncorrectParameter);

@@ -19,3 +19,3 @@ import TestResponse from '../mocks/TestResponse';

expect(json['@type']).toBeDefined();
expect(json['@type']).toEqual('BaseResponse');
expect(json['@type']).toEqual('TestResponse');
expect(json['developer_message']).toBeDefined();

@@ -22,0 +22,0 @@ expect(json['developer_message']).toEqual(message);

@@ -0,3 +1,4 @@

import { CommitOperation } from '@decentralized-identity/hub-common-js';
import base64url from 'base64url';
import Commit, { Operation } from '../../lib/models/Commit';
import Commit from '../../lib/models/Commit';
import HubError, { DeveloperMessage } from '../../lib/models/HubError';

@@ -149,3 +150,3 @@ import TestUtilities from '../TestUtilities';

type: 'test',
operation: Operation.Create,
operation: CommitOperation.Create,
committed_at: new Date(Date.now()).toISOString(),

@@ -174,3 +175,3 @@ commit_strategy: 'basic',

type: 'test',
operation: Operation.Create,
operation: CommitOperation.Create,
committed_at: new Date(Date.now()).toISOString(),

@@ -200,3 +201,3 @@ commit_strategy: 'basic',

type: 'test',
operation: Operation.Create,
operation: CommitOperation.Create,
committed_at: new Date(Date.now()).toISOString(),

@@ -227,3 +228,3 @@ commit_strategy: 'basic',

type: 'test',
operation: Operation.Create,
operation: CommitOperation.Create,
committed_at: new Date(Date.now()).toISOString(),

@@ -230,0 +231,0 @@ commit_strategy: 'basic',

@@ -0,3 +1,4 @@

import { HubErrorCode } from '@decentralized-identity/hub-common-js';
import CommitQueryRequest from '../../lib/models/CommitQueryRequest';
import HubError, { ErrorCode } from '../../lib/models/HubError';
import HubError from '../../lib/models/HubError';
import BaseRequest from '../../lib/models/BaseRequest';

@@ -120,3 +121,3 @@ import TestUtilities from '../TestUtilities';

}
expect(err.errorCode).toEqual(ErrorCode.NotImplemented);
expect(err.errorCode).toEqual(HubErrorCode.NotImplemented);
expect(err.property).toContain('query.object_id');

@@ -123,0 +124,0 @@ expect(err.property).toContain('query.revision');

@@ -0,3 +1,3 @@

import { HubErrorCode } from '@decentralized-identity/hub-common-js';
import ErrorResponse from '../../lib/models/ErrorResponse';
import { ErrorCode } from '../../lib/models/HubError';

@@ -8,6 +8,6 @@ describe('ErrorResponse', () => {

const response = new ErrorResponse({
errorCode: ErrorCode.ServerError,
errorCode: HubErrorCode.ServerError,
});
expect(response).toBeDefined();
expect(response.errorCode).toEqual(ErrorCode.ServerError);
expect(response.errorCode).toEqual(HubErrorCode.ServerError);
});

@@ -17,3 +17,3 @@

const options = {
errorCode: ErrorCode.ServerError,
errorCode: HubErrorCode.ServerError,
errorUrl: Math.round(Math.random() * Number.MAX_SAFE_INTEGER).toString(32),

@@ -38,3 +38,3 @@ userMessage: Math.round(Math.random() * 255).toString(2),

const options = {
errorCode: ErrorCode.ServerError,
errorCode: HubErrorCode.ServerError,
errorUrl: Math.round(Math.random() * Number.MAX_SAFE_INTEGER).toString(32),

@@ -41,0 +41,0 @@ userMessage: Math.round(Math.random() * 255).toString(2),

@@ -1,2 +0,3 @@

import HubError, { ErrorCode, DeveloperMessage } from '../../lib/models/HubError';
import { HubErrorCode } from '@decentralized-identity/hub-common-js';
import HubError, { DeveloperMessage } from '../../lib/models/HubError';

@@ -8,7 +9,7 @@ describe('HubError', () => {

const error = new HubError({
errorCode: ErrorCode.ServerError,
errorCode: HubErrorCode.ServerError,
developerMessage: message,
});
expect(error).toBeDefined();
expect(error.errorCode).toEqual(ErrorCode.ServerError);
expect(error.errorCode).toEqual(HubErrorCode.ServerError);
expect(error.developerMessage).toEqual(message);

@@ -22,3 +23,3 @@ });

const error = new HubError({
errorCode: ErrorCode.ServerError,
errorCode: HubErrorCode.ServerError,
developerMessage: message,

@@ -33,6 +34,6 @@ });

const error = new HubError({
errorCode: ErrorCode.NotImplemented,
errorCode: HubErrorCode.NotImplemented,
});
const response = error.toResponse();
expect(response.errorCode).toEqual(ErrorCode.NotImplemented);
expect(response.errorCode).toEqual(HubErrorCode.NotImplemented);
expect(response.developerMessage).toEqual(DeveloperMessage.NotImplemented);

@@ -39,0 +40,0 @@ })

@@ -0,6 +1,6 @@

import { IObjectMetadata } from '@decentralized-identity/hub-common-js';
import ObjectQueryResponse from '../../lib/models/ObjectQueryResponse';
import ObjectContainer from '../../lib/interfaces/ObjectContainer';
describe('ObjectQueryResponse', () => {
function createObject(): ObjectContainer {
function createObject(): IObjectMetadata {
return {

@@ -7,0 +7,0 @@ interface: 'Test',

@@ -0,4 +1,5 @@

import { HubErrorCode } from '@decentralized-identity/hub-common-js';
import SignedCommit from '../../lib/models/SignedCommit';
import TestCommit from '../mocks/TestCommit';
import HubError, { ErrorCode } from '../../lib/models/HubError';
import HubError from '../../lib/models/HubError';
import TestContext from '../mocks/TestContext';

@@ -126,3 +127,3 @@ import { DidDocument } from '@decentralized-identity/did-common-typescript';

}
expect(err.errorCode).toEqual(ErrorCode.BadRequest);
expect(err.errorCode).toEqual(HubErrorCode.BadRequest);
expect(err.property).toEqual('commit');

@@ -129,0 +130,0 @@ expect(err.developerMessage.toLowerCase()).toContain('public key');

@@ -0,1 +1,2 @@

import { CommitOperation } from '@decentralized-identity/hub-common-js';
import TestStore from "../mocks/TestStore";

@@ -6,3 +7,2 @@ import { CommitQueryRequest, CommitQueryResponse } from "../../lib/interfaces/Store";

import { PERMISSION_GRANT_CONTEXT, PERMISSION_GRANT_TYPE } from "../../lib/models/PermissionGrant";
import { Operation } from "../../lib/models/Commit";
import TestUtilities from "../TestUtilities";

@@ -51,3 +51,3 @@

type: PERMISSION_GRANT_TYPE,
operation: Operation.Create,
operation: CommitOperation.Create,
sub: owner,

@@ -80,3 +80,3 @@ commit_strategy: 'basic',

type: PERMISSION_GRANT_TYPE,
operation: Operation.Create,
operation: CommitOperation.Create,
sub: owner,

@@ -92,3 +92,3 @@ commit_strategy: 'basic',

type: PERMISSION_GRANT_TYPE,
operation: Operation.Update,
operation: CommitOperation.Update,
sub: owner,

@@ -125,3 +125,3 @@ commit_strategy: 'basic',

type: PERMISSION_GRANT_TYPE,
operation: Operation.Update,
operation: CommitOperation.Update,
sub: owner,

@@ -138,3 +138,3 @@ commit_strategy: 'basic',

type: PERMISSION_GRANT_TYPE,
operation: Operation.Delete,
operation: CommitOperation.Delete,
sub: owner,

@@ -168,3 +168,3 @@ commit_strategy: 'basic',

type: PERMISSION_GRANT_TYPE,
operation: Operation.Create,
operation: CommitOperation.Create,
sub: owner,

@@ -180,3 +180,3 @@ commit_strategy: 'basic',

type: PERMISSION_GRANT_TYPE,
operation: Operation.Create,
operation: CommitOperation.Create,
sub: owner,

@@ -213,3 +213,3 @@ commit_strategy: 'basic',

type: PERMISSION_GRANT_TYPE,
operation: Operation.Update,
operation: CommitOperation.Update,
object_id: id,

@@ -226,3 +226,3 @@ sub: owner,

type: PERMISSION_GRANT_TYPE,
operation: Operation.Update,
operation: CommitOperation.Update,
object_id: id,

@@ -235,4 +235,4 @@ sub: owner,

const theCommit = commitOne.getHeaders().rev > commitTwo.getHeaders().rev ? commitOne : commitTwo;
const notTheCommit = commitOne.getHeaders().rev > commitTwo.getHeaders().rev ? commitTwo : commitOne;
const theCommit = commitOne.getHeaders().rev! > commitTwo.getHeaders().rev! ? commitOne : commitTwo;
const notTheCommit = commitOne.getHeaders().rev! > commitTwo.getHeaders().rev! ? commitTwo : commitOne;

@@ -239,0 +239,0 @@ spy.and.returnValue({

@@ -0,1 +1,2 @@

import { CommitOperation, HubErrorCode, IObjectMetadata } from '@decentralized-identity/hub-common-js';
import TestStore from '../mocks/TestStore';

@@ -6,5 +7,3 @@ import TestCommit from '../mocks/TestCommit';

import StoreUtils from '../../lib/utilities/StoreUtils';
import { Operation } from '../../lib/models/Commit';
import ObjectContainer from '../../lib/interfaces/ObjectContainer';
import HubError, { ErrorCode } from '../../lib/models/HubError';
import HubError from '../../lib/models/HubError';
import PermissionGrant from '../../lib/models/PermissionGrant';

@@ -33,3 +32,3 @@ import BaseRequest from '../../lib/models/BaseRequest';

kid: `${sender}#key-1`,
operation: Operation.Update,
operation: CommitOperation.Update,
});

@@ -65,3 +64,3 @@ request = new WriteRequest({

} else {
expect(filter.value).toEqual([commit.getHeaders().object_id]);
expect(filter.value).toEqual([commit.getHeaders().object_id!]);
}

@@ -84,3 +83,3 @@ });

const spy = spyOn(store, "queryObjects").and.callFake((_: store.ObjectQueryRequest) => {
const objects: ObjectContainer[] = [];
const objects: IObjectMetadata[] = [];
const count = Math.round(Math.random() * 10) + 2;

@@ -113,3 +112,3 @@ for (let i = 0; i < count; i++) {

}
expect(err.errorCode).toEqual(ErrorCode.ServerError);
expect(err.errorCode).toEqual(HubErrorCode.ServerError);
}

@@ -152,3 +151,3 @@ expect(spy).toHaveBeenCalled();

}
expect(err.errorCode).toEqual(ErrorCode.PermissionsRequired);
expect(err.errorCode).toEqual(HubErrorCode.PermissionsRequired);
}

@@ -155,0 +154,0 @@ expect(spy).toHaveBeenCalled();

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc