UNPKG

@sphereon/ssi-sdk.qr-code-generator

Version:

QR Code provider (react)

209 lines (204 loc) • 8.04 kB
"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.ts var index_exports = {}; __export(index_exports, { QRType: () => QRType, QrCodeProvider: () => QrCodeProvider, StatusCode: () => StatusCode, events: () => events }); module.exports = __toCommonJS(index_exports); // src/types/IQRCodeGenerator.ts var QRType = /* @__PURE__ */ (function(QRType2) { QRType2["URI"] = "uri"; QRType2["SIOPV2"] = "openid-vc"; QRType2["DIDCOMM_V2_OOB_INVITATION"] = "https://didcomm.org/out-of-band/2.0/invitation"; QRType2["OpenID4VCI"] = "openid-credential-offer"; return QRType2; })({}); var StatusCode = /* @__PURE__ */ (function(StatusCode2) { StatusCode2["OK"] = "OK"; StatusCode2["CREATED"] = "CREATED"; return StatusCode2; })({}); var events = /* @__PURE__ */ (function(events2) { events2["QR_CODE_CODE_CREATED"] = "QrCodeCreated"; return events2; })({}); // src/agent/utils/react-qr.tsx var import_react_qr_code = __toESM(require("react-qr-code"), 1); var import_react = __toESM(require("react"), 1); var QRCode = import_react_qr_code.default?.default || import_react_qr_code.default; async function generateQRCodeValueImpl(args, orig, context) { const { onGenerate } = orig; const { id } = orig.data; const value = args.data.object; const result = { id, value, data: orig.data, renderingProps: "renderingProps" in orig ? orig.renderingProps : void 0, context }; if (onGenerate) { onGenerate(result); } if (context) { context.agent.emit(events.QR_CODE_CODE_CREATED, result); } return result; } __name(generateQRCodeValueImpl, "generateQRCodeValueImpl"); async function generateQRCodeReactElement(args, context) { return generateQRCodeReactElementImpl(args, args, context); } __name(generateQRCodeReactElement, "generateQRCodeReactElement"); async function generateQRCodeReactElementImpl(args, orig, context) { const { renderingProps } = args; const { bgColor, fgColor, level, size, title } = renderingProps; const result = await generateQRCodeValueImpl(args, orig, context); return /* @__PURE__ */ import_react.default.createElement(QRCode, { value: result.value, bgColor, fgColor, level, size, title }); } __name(generateQRCodeReactElementImpl, "generateQRCodeReactElementImpl"); // src/agent/utils/didcomm-oob-message.tsx var import_base64url = __toESM(require("base64url"), 1); var DidCommOutOfBandMessage = class { static { __name(this, "DidCommOutOfBandMessage"); } static toJson(props) { return JSON.stringify(props).replace("goalCode", "goal-code"); } static urlEncode(payload) { return (0, import_base64url.default)(this.toJson(payload)); } }; // src/agent/QrCodeProvider.tsx var QrCodeProvider = class _QrCodeProvider { static { __name(this, "QrCodeProvider"); } methods = { qrDIDCommOobInvitationElement: _QrCodeProvider.qrDIDCommOobInvitationElement.bind(this), qrDIDCommOobInvitationValue: _QrCodeProvider.qrDIDCommOobInvitationValue.bind(this), qrSIOPv2Element: _QrCodeProvider.qrSIOPv2Element.bind(this), qrSIOPv2Value: _QrCodeProvider.qrSIOPv2Value.bind(this), qrURIElement: _QrCodeProvider.qrURIElement.bind(this), qrOpenID4VCIElement: _QrCodeProvider.qrOpenID4VCIElement.bind(this), qrOpenID4VCIValue: _QrCodeProvider.qrOpenID4VCIValue.bind(this) }; /** {@inheritDoc IQRCodeGenerator.uriElement} */ static async qrURIElement(args, context) { return generateQRCodeReactElement(args, context); } /** {@inheritDoc IQRCodeGenerator.didCommOobInvitationValue} */ static async qrDIDCommOobInvitationValue(args, context) { const { object } = args.data; const encoded = DidCommOutOfBandMessage.urlEncode(object.oobInvitation); const delim = object.baseURI.includes("?") ? "&" : "?"; return object.baseURI.includes("oob=") ? object.baseURI.replace("oob=", `oob=${encoded}`) : `${object.baseURI}${delim}_oob=${encoded}`; } /** {@inheritDoc IQRCodeGenerator.didCommOobInvitationElement} */ static async qrDIDCommOobInvitationElement(args, context) { const content = await _QrCodeProvider.qrDIDCommOobInvitationValue(args, context); return generateQRCodeReactElementImpl({ ...args, data: { ...args.data, object: content } }, args, context); } /** {@inheritDoc IQRCodeGenerator.siopv2Value} */ static async qrSIOPv2Value(args, context) { const { object } = args.data; if (typeof object === "string") { return object; } const scheme = (object.scheme ?? "openid-vc://").replace("://?", "").replace("://", "") + "://"; const requestUri = `request_uri=${object.requestUri.replace("request_uri=", "")}`; return `${scheme}?${requestUri}`; } /** {@inheritDoc IQRCodeGenerator.siopv2Element} */ static async qrSIOPv2Element(args, context) { const content = await _QrCodeProvider.qrSIOPv2Value(args, context); return generateQRCodeReactElementImpl({ ...args, data: { ...args.data, object: content } }, args, context); } /** {@inheritDoc IQRCodeGenerator.qrOpenID4VCIElement} */ static async qrOpenID4VCIElement(args, context) { const content = await _QrCodeProvider.qrOpenID4VCIValue(args, context); return generateQRCodeReactElementImpl({ ...args, data: { ...args.data, object: content } }, args, context); } /** {@inheritDoc IQRCodeGenerator.qrOpenID4VCIValue} */ static async qrOpenID4VCIValue(args, context) { const { object } = args.data; if (!object.credentialOffer && !object.credentialOfferUri) { throw new Error("Please provide credential_offer or credential_offer_uri"); } const scheme = (object.scheme ?? "openid-credential-offer://").replace("://?", "").replace("://", "") + "://"; const baseUri = object.baseUri ?? ""; let url; const splitBaseUri = baseUri.split("://"); const hasScheme = splitBaseUri.length > 1; if (hasScheme && object.scheme) { if (splitBaseUri[0] !== object.scheme) { throw new Error("The uri must contain the same scheme or omit it"); } url = `${baseUri}`; } else { url = `${scheme}${baseUri}`; } const credentialOfferUri = `?credential_offer_uri=${object.credentialOfferUri?.replace("credential_offer_uri=", "")}`; const credentialOffer = `?credential_offer=${object.credentialOffer?.replace("credential_offer=", "")}`; const value = object.credentialOffer ? credentialOffer : credentialOfferUri; return `${url}${value}`; } }; //# sourceMappingURL=index.cjs.map