UNPKG

@microsoft/useragent-sdk

Version:

SDK for building decentralized identity wallets and enterprise agents.

129 lines 5.36 kB
"use strict"; /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ Object.defineProperty(exports, "__esModule", { value: true }); const UserAgentError_1 = require("../UserAgentError"); const JwsToken_1 = require("../crypto/protocols/jose/jws/JwsToken"); /** * Class that represents a ClaimObject * @class */ class ClaimObject { /** * Instantiates a new ClaimObject. * @param claimClass Pointer to the claimClass that is tied to this claimObject. * @param claimDescriptions A list of claim descriptions that will define each claim. * @param claimDetails A list of claims that are contained in this claimObject. */ constructor(claimClass, context, type, issuer, claimDescriptions, claimDetails, signedClaimDetails) { this.claimClass = claimClass; this.issuer = issuer; this.claimDescriptions = claimDescriptions; this.claimDetails = claimDetails; this.signedClaimDetails = signedClaimDetails; this.context = context; this.type = type; } /** * Sign the claim details with signer. * @param signer Identifier that will sign the claim details. */ async signClaimDetails(signer, keyReference) { if (signer.id !== this.issuer) { throw new UserAgentError_1.default(`Signer ID: ${signer.id} does not match issuer ID: ${this.issuer}`); } this.signedClaimDetails = await signer.sign(this.claimDetails, keyReference); console.log(`${signer.id} signed claim details`); } /** * If details are signed, return signed claim details. * Else return unsigned claim details. */ getClaimDetails() { if (this.signedClaimDetails) { return this.signedClaimDetails; } return this.claimDetails; } /** * Add a claim to the claim details. * @param {Claim} claim Claim to be added to claimDetails. * @param {ClaimDescription} claimDescription Optional parameter if want to also add a corresponding claim description. */ async addClaim(claim, claimDescription) { this.claimDetails.push(claim); if (claimDescription) { this.claimDescriptions.push(claimDescription); } } /** * Stringify ClaimObject. * @returns A Stringified ClaimObject in the correct format */ serialize() { let claimDetails = {}; if (this.signedClaimDetails) { claimDetails = { type: 'jws', data: this.signedClaimDetails }; } else { claimDetails = { type: 'unsigned', data: this.claimDetails }; } const claimObject = { claimClass: this.claimClass, '@context': this.context, '@type': this.type, claimDescriptions: this.claimDescriptions, claimIssuer: this.issuer, claimDetails }; return JSON.stringify(claimObject); } /** * Create new ClaimObject from stringified JSON. * @param object Stringifed JSON object * @returns a ClaimObject */ static async deserialize(object) { let claimObject; if (typeof (object) === 'string') { claimObject = JSON.parse(object); } else { claimObject = object; } if (!claimObject.claimDetails) { throw new UserAgentError_1.default(`Claim Object does not contain parameter claimDetails`); } if (!claimObject.claimClass) { throw new UserAgentError_1.default(`Claim Object does not contain parameter claimClass`); } if (!claimObject.claimDescriptions) { throw new UserAgentError_1.default(`Claim Object does not contain parameter claimDescriptions`); } if (!claimObject.claimIssuer) { throw new UserAgentError_1.default(`Claim Object does not contain parameter claimIssuer`); } if (!claimObject['@context'] || !claimObject['@type']) { throw new UserAgentError_1.default(`Claim Object is missing context`); } const claimDetails = claimObject.claimDetails; if (claimDetails.type === 'unsigned') { return new ClaimObject(claimObject.claimClass, claimObject['@context'], claimObject['@type'], claimObject.claimIssuer, claimObject.claimDescriptions, claimDetails.data); } else { const token = await JwsToken_1.default.deserialize(claimDetails.data); const parsedClaimDetails = JSON.parse(token.payload.toString()); return new ClaimObject(claimObject.claimClass, claimObject['@context'], claimObject['@type'], claimObject.claimIssuer, claimObject.claimDescriptions, parsedClaimDetails, claimDetails.data); } } } exports.default = ClaimObject; //# sourceMappingURL=ClaimObject.js.map