UNPKG

sth-qrcode

Version:

A web component to generate QR codes for SmartHoldem payments.

135 lines (134 loc) 16.3 kB
import QRious from 'qrious'; export class SthQRCode { constructor() { this.size = 100; this.showLogo = false; } validateAddress(oldValue, newValue) { const pattern = /^[SsDd]{1}[0-9a-zA-Z]{33}$/g; if (!newValue) throw new Error('address: required'); if (newValue && !newValue.match(pattern)) throw new Error('address: not valid ark recipient'); } validateAmount(oldValue, newValue) { if (typeof Number(newValue) !== 'number') throw new Error('amount: invalid amount'); } validateVendorField(oldValue, newValue) { if (typeof newValue == 'string' && decodeURIComponent(newValue) == newValue) throw new Error('vendorField: must be a UTF-8 encoded string'); if (decodeURIComponent(newValue).length > 64) throw new Error('vendorField: enter no more than 64 characters'); } validateSize(oldValue, newValue) { if (typeof newValue !== 'number') throw new Error('size: must be a number'); } validateShowLogo(oldValue, newValue) { if (typeof newValue !== 'boolean') throw new Error('show-logo: must be a boolean'); if (newValue && this.size < 150) throw new Error('show-logo: to display the logo the size must be greater than 150'); } getURI() { if (!this.isLoad) throw new Error('component not loaded'); return this.generateSchema(); } getDataURL(mime = 'image/png') { const canvas = this.element.shadowRoot.querySelector('canvas'); if (!canvas) throw new Error('qrcode element not generated'); return canvas.toDataURL(mime); } deserializeURI(uri) { let validate = this.validateURI(uri); if (!validate) return; const queryString = {}; const regex = new RegExp('([^?=&]+)(=([^&]*))?', 'g'); validate[2].replace(regex, ($0, $1, $2, $3) => queryString[$1] = $3); const scheme = { address: null, amount: null, label: null, vendorField: null }; for (let prop in scheme) { scheme[prop] = queryString[prop]; } scheme.address = validate[1]; scheme.amount = scheme.amount ? Number(scheme.amount) : null; scheme.label = scheme.label ? decodeURI(scheme.label) : null; scheme.vendorField = scheme.vendorField ? decodeURI(scheme.vendorField) : null; return scheme; } validateURI(uri) { const regex = new RegExp(/^(?:sth:)([SsDd]{1}[0-9a-zA-Z]{33})([-a-zA-Z0-9+&@#\/%=~_|$?!:,.]*)$/); if (regex.test(uri)) return regex.exec(uri); } generateSchema() { const params = this.formatParams(); const uri = `sth:${this.address}${params}`; const scheme = JSON.parse(JSON.stringify(uri)); return scheme; } generateQRCode(scheme) { const level = this.showLogo ? 'M' : 'L'; const qr = new QRious({ element: this.element.shadowRoot.querySelector('canvas'), value: scheme, size: this.size, level, }); return this.drawLogo(qr); } drawLogo(qr) { if (!this.showLogo) return; const ctx = this.element.shadowRoot.querySelector('canvas').getContext('2d'); const img = new Image(); img.onload = () => { const logoWidth = img.width; const logoHeight = img.height; const width = qr.size / 3.5; const height = logoHeight / logoWidth * width; var x = (qr.size / 2) - (width / 2); var y = (qr.size / 2) - (height / 2); var maskPadding = qr.size / 50; ctx.globalCompositeOperation = 'destination-out'; ctx.drawImage(img, 0, 0, logoWidth, logoHeight, x - maskPadding, y - maskPadding, width + (maskPadding * 2), height + (maskPadding * 2)); ctx.globalCompositeOperation = 'source-over'; ctx.drawImage(img, 0, 0, logoWidth, logoHeight, x, y, width, height); }; img.src = 'data:image/png;base64,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'; } formatParams() { let params = []; if (this.amount) params.push(`amount=${this.amount}`); if (this.label) params.push(`label=${this.label}`); if (this.vendorField) params.push(`vendorField=${this.vendorField}`); const stringify = params.length > 0 ? `?${params.join("&")}` : ''; return stringify; } componentDidUpdate() { const scheme = this.generateSchema(); return this.generateQRCode(scheme); } componentDidLoad() { this.validateAddress(null, this.address); this.validateAmount(null, this.amount); this.validateVendorField(null, this.vendorField); this.validateSize(null, this.size); this.validateShowLogo(null, this.showLogo); this.isLoad = true; } render() { return (h("div", null, h("canvas", null))); } static get is() { return "ark-qrcode"; } static get encapsulation() { return "shadow"; } static get properties() { return { "address": { "type": String, "watchCallbacks": ["validateAddress"] }, "amount": { "type": Number, "watchCallbacks": ["validateAmount"] }, "deserializeURI": { "method": true }, "element": { "elementRef": true }, "getDataURL": { "method": true }, "getURI": { "method": true }, "isLoad": { "state": true }, "label": { "type": String }, "showLogo": { "type": Boolean, "watchCallbacks": ["validateShowLogo"] }, "size": { "type": Number, "watchCallbacks": ["validateSize"] }, "vendorField": { "type": String, "watchCallbacks": ["validateVendorField"] } }; } static get style() { return "/**style-placeholder:ark-qrcode:**/"; } }