@sphereon/ssi-sdk.qr-code-generator
Version:
QR Code provider (react)
209 lines (204 loc) • 8.04 kB
JavaScript
;
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