@microsoft/useragent-sdk
Version:
SDK for building decentralized identity wallets and enterprise agents.
129 lines • 5.36 kB
JavaScript
;
/*---------------------------------------------------------------------------------------------
* 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