@sphereon/ssi-sdk.qr-code-generator
Version:
QR Code provider (react)
178 lines (174 loc) • 6.37 kB
JavaScript
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
// 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
import QRCodeImport from "react-qr-code";
import React from "react";
var QRCode = QRCodeImport?.default || QRCodeImport;
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__ */ React.createElement(QRCode, {
value: result.value,
bgColor,
fgColor,
level,
size,
title
});
}
__name(generateQRCodeReactElementImpl, "generateQRCodeReactElementImpl");
// src/agent/utils/didcomm-oob-message.tsx
import base64url from "base64url";
var DidCommOutOfBandMessage = class {
static {
__name(this, "DidCommOutOfBandMessage");
}
static toJson(props) {
return JSON.stringify(props).replace("goalCode", "goal-code");
}
static urlEncode(payload) {
return base64url(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}`;
}
};
export {
QRType,
QrCodeProvider,
StatusCode,
events
};
//# sourceMappingURL=index.js.map