UNPKG

@sphereon/ssi-sdk.issuance-branding

Version:

288 lines • 15.9 kB
"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