@sphereon/ssi-sdk.issuance-branding
Version:
288 lines • 15.9 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.IssuanceBranding = exports.issuanceBrandingMethods = void 0;
const ssi_sdk_core_1 = require("@sphereon/ssi-sdk.core");
const index_1 = require("../index");
const debug_1 = __importDefault(require("debug"));
const debug = (0, debug_1.default)('sphereon:ssi-sdk:issuance-branding');
exports.issuanceBrandingMethods = [
'ibAddCredentialBranding',
'ibGetCredentialBranding',
'ibUpdateCredentialBranding',
'ibRemoveCredentialBranding',
'ibAddCredentialLocaleBranding',
'ibGetCredentialLocaleBranding',
'ibRemoveCredentialLocaleBranding',
'ibUpdateCredentialLocaleBranding',
'ibCredentialLocaleBrandingFrom',
'ibAddIssuerBranding',
'ibGetIssuerBranding',
'ibUpdateIssuerBranding',
'ibRemoveIssuerBranding',
'ibAddIssuerLocaleBranding',
'ibGetIssuerLocaleBranding',
'ibRemoveIssuerLocaleBranding',
'ibUpdateIssuerLocaleBranding',
'ibIssuerLocaleBrandingFrom',
];
const EMPTY_IMAGE_ATTRIBUTES = {
mediaType: undefined,
dataUri: undefined,
dimensions: undefined,
};
/**
* {@inheritDoc IIssuanceBranding}
*/
class IssuanceBranding {
constructor(options) {
this.schema = index_1.schema.IIssuanceBranding;
this.methods = {
ibAddCredentialBranding: this.ibAddCredentialBranding.bind(this),
ibGetCredentialBranding: this.ibGetCredentialBranding.bind(this),
ibUpdateCredentialBranding: this.ibUpdateCredentialBranding.bind(this),
ibRemoveCredentialBranding: this.ibRemoveCredentialBranding.bind(this),
ibAddCredentialLocaleBranding: this.ibAddCredentialLocaleBranding.bind(this),
ibGetCredentialLocaleBranding: this.ibGetCredentialLocaleBranding.bind(this),
ibRemoveCredentialLocaleBranding: this.ibRemoveCredentialLocaleBranding.bind(this),
ibUpdateCredentialLocaleBranding: this.ibUpdateCredentialLocaleBranding.bind(this),
ibCredentialLocaleBrandingFrom: this.ibCredentialLocaleBrandingFrom.bind(this),
ibAddIssuerBranding: this.ibAddIssuerBranding.bind(this),
ibGetIssuerBranding: this.ibGetIssuerBranding.bind(this),
ibUpdateIssuerBranding: this.ibUpdateIssuerBranding.bind(this),
ibRemoveIssuerBranding: this.inRemoveIssuerBranding.bind(this),
ibAddIssuerLocaleBranding: this.ibAddIssuerLocaleBranding.bind(this),
ibGetIssuerLocaleBranding: this.ibAGetIssuerLocaleBranding.bind(this),
ibRemoveIssuerLocaleBranding: this.ibRemoveIssuerLocaleBranding.bind(this),
ibUpdateIssuerLocaleBranding: this.ibUpdateIssuerLocaleBranding.bind(this),
ibIssuerLocaleBrandingFrom: this.ibIssuerLocaleBrandingFrom.bind(this),
};
this.store = options.store;
}
/** {@inheritDoc IIssuanceBranding.ibAddCredentialBranding} */
ibAddCredentialBranding(args, context) {
return __awaiter(this, void 0, void 0, function* () {
const localeBranding = yield Promise.all(args.localeBranding.map((localeBranding) => this.setAdditionalImageAttributes(localeBranding)));
const credentialBranding = Object.assign(Object.assign({}, args), { localeBranding });
debug('Adding credential branding', credentialBranding);
return this.store.addCredentialBranding(credentialBranding);
});
}
/** {@inheritDoc IIssuanceBranding.ibGetCredentialBranding} */
ibGetCredentialBranding(args) {
return __awaiter(this, void 0, void 0, function* () {
debug('Getting credential branding', args);
return this.store.getCredentialBranding(args);
});
}
/** {@inheritDoc IIssuanceBranding.ibUpdateCredentialBranding} */
ibUpdateCredentialBranding(args, context) {
return __awaiter(this, void 0, void 0, function* () {
debug('Updating credential branding', args);
return this.store.updateCredentialBranding(args);
});
}
/** {@inheritDoc IIssuanceBranding.ibRemoveCredentialBranding} */
ibRemoveCredentialBranding(args, context) {
return __awaiter(this, void 0, void 0, function* () {
debug('Removing credential branding', args);
return this.store
.removeCredentialBranding(args)
.then(() => ({ result: true }))
.catch((error) => ({ result: false, error: error.message }));
});
}
/** {@inheritDoc IIssuanceBranding.ibAddCredentialLocaleBranding} */
ibAddCredentialLocaleBranding(args, context) {
return __awaiter(this, void 0, void 0, function* () {
const localeBranding = yield Promise.all(args.localeBranding.map((localeBranding) => this.setAdditionalImageAttributes(localeBranding)));
const addCredentialLocaleBrandingArgs = Object.assign(Object.assign({}, args), { localeBranding });
debug('Adding credential locale branding', addCredentialLocaleBrandingArgs);
return this.store.addCredentialLocaleBranding(addCredentialLocaleBrandingArgs);
});
}
/** {@inheritDoc IIssuanceBranding.ibGetCredentialLocaleBranding} */
ibGetCredentialLocaleBranding(args) {
return __awaiter(this, void 0, void 0, function* () {
debug('Getting credential locale branding', args);
return this.store.getCredentialLocaleBranding(args);
});
}
/** {@inheritDoc IIssuanceBranding.ibRemoveCredentialLocaleBranding} */
ibRemoveCredentialLocaleBranding(args, context) {
return __awaiter(this, void 0, void 0, function* () {
debug('Removing credential locale branding', args);
return this.store
.removeCredentialLocaleBranding(args)
.then(() => ({ result: true }))
.catch((error) => ({ result: false, error: error.message }));
});
}
/** {@inheritDoc IIssuanceBranding.ibUpdateCredentialLocaleBranding} */
ibUpdateCredentialLocaleBranding(args, context) {
return __awaiter(this, void 0, void 0, function* () {
const localeBranding = (yield this.setAdditionalImageAttributes(args.localeBranding));
const updateCredentialLocaleBrandingArgs = Object.assign(Object.assign({}, args), { localeBranding });
debug('Updating credential locale branding', updateCredentialLocaleBrandingArgs);
return this.store.updateCredentialLocaleBranding(updateCredentialLocaleBrandingArgs);
});
}
/** {@inheritDoc IIssuanceBranding.ibCredentialLocaleBrandingFrom} */
ibCredentialLocaleBrandingFrom(args, context) {
return __awaiter(this, void 0, void 0, function* () {
debug('get credential locale branding from', args);
return this.setAdditionalImageAttributes(args.localeBranding);
});
}
/** {@inheritDoc IIssuanceBranding.ibAddIssuerBranding} */
ibAddIssuerBranding(args, context) {
return __awaiter(this, void 0, void 0, function* () {
const localeBranding = yield Promise.all(args.localeBranding.map((localeBranding) => this.setAdditionalImageAttributes(localeBranding)));
const issuerBranding = Object.assign(Object.assign({}, args), { localeBranding });
debug('Adding issuer branding', issuerBranding);
return this.store.addIssuerBranding(issuerBranding);
});
}
/** {@inheritDoc IIssuanceBranding.ibGetIssuerBranding} */
ibGetIssuerBranding(args) {
return __awaiter(this, void 0, void 0, function* () {
debug('Getting issuer branding', args);
return this.store.getIssuerBranding(args);
});
}
/** {@inheritDoc IIssuanceBranding.ibUpdateIssuerBranding} */
ibUpdateIssuerBranding(args, context) {
return __awaiter(this, void 0, void 0, function* () {
debug('Updating issuer branding', args);
return this.store.updateIssuerBranding(args);
});
}
/** {@inheritDoc IIssuanceBranding.inRemoveIssuerBranding} */
inRemoveIssuerBranding(args, context) {
return __awaiter(this, void 0, void 0, function* () {
debug('Removing issuer branding', args);
return this.store
.removeIssuerBranding(args)
.then(() => ({ result: true }))
.catch((error) => ({ result: false, error: error.message }));
});
}
/** {@inheritDoc IIssuanceBranding.ibAddIssuerLocaleBranding} */
ibAddIssuerLocaleBranding(args, context) {
return __awaiter(this, void 0, void 0, function* () {
const localeBranding = yield Promise.all(args.localeBranding.map((localeBranding) => this.setAdditionalImageAttributes(localeBranding)));
const addIssuerLocaleBrandingArgs = Object.assign(Object.assign({}, args), { localeBranding });
debug('Adding issuer locale branding', addIssuerLocaleBrandingArgs);
return this.store.addIssuerLocaleBranding(addIssuerLocaleBrandingArgs);
});
}
/** {@inheritDoc IIssuanceBranding.ibAGetIssuerLocaleBranding} */
ibAGetIssuerLocaleBranding(args) {
return __awaiter(this, void 0, void 0, function* () {
debug('Getting issuer locale branding', args);
return this.store.getIssuerLocaleBranding(args);
});
}
/** {@inheritDoc IIssuanceBranding.ibRemoveIssuerLocaleBranding} */
ibRemoveIssuerLocaleBranding(args, context) {
return __awaiter(this, void 0, void 0, function* () {
debug('Removing issuer locale branding', args);
return this.store
.removeIssuerLocaleBranding(args)
.then(() => ({ result: true }))
.catch((error) => ({ result: false, error: error.message }));
});
}
/** {@inheritDoc IIssuanceBranding.ibUpdateIssuerLocaleBranding} */
ibUpdateIssuerLocaleBranding(args, context) {
return __awaiter(this, void 0, void 0, function* () {
const localeBranding = (yield this.setAdditionalImageAttributes(args.localeBranding));
const updateIssuerLocaleBrandingArgs = Object.assign(Object.assign({}, args), { localeBranding });
debug('Updating issuer locale branding', updateIssuerLocaleBrandingArgs);
return this.store.updateIssuerLocaleBranding(updateIssuerLocaleBrandingArgs);
});
}
/** {@inheritDoc IIssuanceBranding.ibIssuerLocaleBrandingFrom} */
ibIssuerLocaleBrandingFrom(args, context) {
return __awaiter(this, void 0, void 0, function* () {
debug('get issuer locale branding from', args);
return this.setAdditionalImageAttributes(args.localeBranding);
});
}
// todo: We really should add a cache for urls. We now fetch the same images multiple times in case the logo/background image is the same for multiple locales.
setAdditionalImageAttributes(localeBranding) {
return __awaiter(this, void 0, void 0, function* () {
return Object.assign(Object.assign(Object.assign({}, localeBranding), (localeBranding.logo && {
logo: Object.assign(Object.assign({}, localeBranding.logo), (localeBranding.logo.uri
? Object.assign({}, (yield this.getAdditionalImageAttributes(localeBranding.logo))) : EMPTY_IMAGE_ATTRIBUTES)),
})), (localeBranding.background && {
background: Object.assign(Object.assign({}, localeBranding.background), (localeBranding.background.image && {
image: Object.assign(Object.assign({}, localeBranding.background.image), (localeBranding.background.image.uri
? Object.assign({}, (yield this.getAdditionalImageAttributes(localeBranding.background.image))) : EMPTY_IMAGE_ATTRIBUTES)),
})),
}));
});
}
getAdditionalImageAttributes(image) {
return __awaiter(this, void 0, void 0, function* () {
var _a, _b, _c, _d, _e, _f, _g;
if (!image.uri) {
debug(`No image URI present, returning empty attributes`);
return EMPTY_IMAGE_ATTRIBUTES;
}
const data_uri_regex = /^data:image\/[^;]+;base64,/;
if (data_uri_regex.test(image.uri)) {
debug('Setting additional image properties for uri', image.uri);
const base64Content = yield this.extractBase64FromDataURI(image.uri);
const dimensions = (_a = image.dimensions) !== null && _a !== void 0 ? _a : (yield (0, ssi_sdk_core_1.getImageDimensions)(base64Content));
const mediaType = (_b = image.mediaType) !== null && _b !== void 0 ? _b : (yield this.getDataTypeFromDataURI(image.uri));
return {
mediaType,
dimensions,
};
}
debug('Setting additional image properties for url', image.uri);
const resource = !image.dataUri ? yield (0, ssi_sdk_core_1.downloadImage)(image.uri) : undefined;
const dimensions = (_c = image.dimensions) !== null && _c !== void 0 ? _c : (yield (0, ssi_sdk_core_1.getImageDimensions)((_d = resource === null || resource === void 0 ? void 0 : resource.base64Content) !== null && _d !== void 0 ? _d : (yield this.extractBase64FromDataURI(image.dataUri))));
const mediaType = (_f = (_e = image.mediaType) !== null && _e !== void 0 ? _e : resource === null || resource === void 0 ? void 0 : resource.contentType) !== null && _f !== void 0 ? _f : ((resource === null || resource === void 0 ? void 0 : resource.base64Content) ? yield (0, ssi_sdk_core_1.getImageMediaType)(resource === null || resource === void 0 ? void 0 : resource.base64Content) : yield this.getDataTypeFromDataURI(image.uri));
return {
mediaType,
dataUri: (_g = image.dataUri) !== null && _g !== void 0 ? _g : `data:${mediaType};base64,${resource.base64Content}`,
dimensions,
};
});
}
extractBase64FromDataURI(uri) {
return __awaiter(this, void 0, void 0, function* () {
const data_uri_base64_regex = /^data:[^;]+;base64,([\w+/=-]+)$/i;
const matches = uri.match(data_uri_base64_regex);
if (!matches || matches.length <= 1) {
return Promise.reject(Error('invalid base64 uri'));
}
return matches[1];
});
}
getDataTypeFromDataURI(uri) {
return __awaiter(this, void 0, void 0, function* () {
const data_uri_data_type_regex = /^data:([^;]+);base64,([\w+/=-]+)$/i;
const matches = uri.match(data_uri_data_type_regex);
if (!matches || matches.length <= 1) {
return Promise.reject(Error('invalid base64 uri'));
}
return matches[1];
});
}
}
exports.IssuanceBranding = IssuanceBranding;
//# sourceMappingURL=IssuanceBranding.js.map