/* THIS IS A GENERATED/BUNDLED FILE BY ESBUILD if you want to view the source, please visit the github repository of this plugin */ var __create = Object.create; var __defProp = Object.defineProperty; var __defProps = Object.defineProperties; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropDescs = Object.getOwnPropertyDescriptors; var __getOwnPropNames = Object.getOwnPropertyNames; var __getOwnPropSymbols = Object.getOwnPropertySymbols; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __propIsEnum = Object.prototype.propertyIsEnumerable; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __spreadValues = (a, b) => { for (var prop in b || (b = {})) if (__hasOwnProp.call(b, prop)) __defNormalProp(a, prop, b[prop]); if (__getOwnPropSymbols) for (var prop of __getOwnPropSymbols(b)) { if (__propIsEnum.call(b, prop)) __defNormalProp(a, prop, b[prop]); } return a; }; var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)); var __markAsModule = (target) => __defProp(target, "__esModule", { value: true }); var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[Object.keys(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __export = (target, all) => { __markAsModule(target); for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __reExport = (target, module2, desc) => { if (module2 && typeof module2 === "object" || typeof module2 === "function") { for (let key of __getOwnPropNames(module2)) if (!__hasOwnProp.call(target, key) && key !== "default") __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable }); } return target; }; var __toModule = (module2) => { return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2); }; var __async = (__this, __arguments, generator) => { return new Promise((resolve, reject) => { var fulfilled = (value) => { try { step(generator.next(value)); } catch (e) { reject(e); } }; var rejected = (value) => { try { step(generator.throw(value)); } catch (e) { reject(e); } }; var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); step((generator = generator.apply(__this, __arguments)).next()); }); }; // node_modules/qrious/dist/qrious.js var require_qrious = __commonJS({ "node_modules/qrious/dist/qrious.js"(exports, module2) { (function(global, factory) { typeof exports === "object" && typeof module2 !== "undefined" ? module2.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global.QRious = factory(); })(exports, function() { "use strict"; var Constructor = function() { }; var hasOwnProperty = Object.prototype.hasOwnProperty; var slice = Array.prototype.slice; function createObject(prototype, properties) { var result; if (typeof Object.create === "function") { result = Object.create(prototype); } else { Constructor.prototype = prototype; result = new Constructor(); Constructor.prototype = null; } if (properties) { extendObject(true, result, properties); } return result; } function extend(name, constructor, prototype, statics) { var superConstructor = this; if (typeof name !== "string") { statics = prototype; prototype = constructor; constructor = name; name = null; } if (typeof constructor !== "function") { statics = prototype; prototype = constructor; constructor = function() { return superConstructor.apply(this, arguments); }; } extendObject(false, constructor, superConstructor, statics); constructor.prototype = createObject(superConstructor.prototype, prototype); constructor.prototype.constructor = constructor; constructor.class_ = name || superConstructor.class_; constructor.super_ = superConstructor; return constructor; } function extendObject(own, target, sources) { sources = slice.call(arguments, 2); var property; var source; for (var i = 0, length = sources.length; i < length; i++) { source = sources[i]; for (property in source) { if (!own || hasOwnProperty.call(source, property)) { target[property] = source[property]; } } } } var extend_1 = extend; function Nevis() { } Nevis.class_ = "Nevis"; Nevis.super_ = Object; Nevis.extend = extend_1; var nevis = Nevis; var lite = nevis; var Renderer = lite.extend(function(qrious, element, enabled) { this.qrious = qrious; this.element = element; this.element.qrious = qrious; this.enabled = Boolean(enabled); }, { draw: function(frame) { }, getElement: function() { if (!this.enabled) { this.enabled = true; this.render(); } return this.element; }, getModuleSize: function(frame) { var qrious = this.qrious; var padding = qrious.padding || 0; var pixels = Math.floor((qrious.size - padding * 2) / frame.width); return Math.max(1, pixels); }, getOffset: function(frame) { var qrious = this.qrious; var padding = qrious.padding; if (padding != null) { return padding; } var moduleSize = this.getModuleSize(frame); var offset = Math.floor((qrious.size - moduleSize * frame.width) / 2); return Math.max(0, offset); }, render: function(frame) { if (this.enabled) { this.resize(); this.reset(); this.draw(frame); } }, reset: function() { }, resize: function() { } }); var Renderer_1 = Renderer; var CanvasRenderer = Renderer_1.extend({ draw: function(frame) { var i, j; var qrious = this.qrious; var moduleSize = this.getModuleSize(frame); var offset = this.getOffset(frame); var context = this.element.getContext("2d"); context.fillStyle = qrious.foreground; context.globalAlpha = qrious.foregroundAlpha; for (i = 0; i < frame.width; i++) { for (j = 0; j < frame.width; j++) { if (frame.buffer[j * frame.width + i]) { context.fillRect(moduleSize * i + offset, moduleSize * j + offset, moduleSize, moduleSize); } } } }, reset: function() { var qrious = this.qrious; var context = this.element.getContext("2d"); var size = qrious.size; context.lineWidth = 1; context.clearRect(0, 0, size, size); context.fillStyle = qrious.background; context.globalAlpha = qrious.backgroundAlpha; context.fillRect(0, 0, size, size); }, resize: function() { var element = this.element; element.width = element.height = this.qrious.size; } }); var CanvasRenderer_1 = CanvasRenderer; var Alignment = lite.extend(null, { BLOCK: [ 0, 11, 15, 19, 23, 27, 31, 16, 18, 20, 22, 24, 26, 28, 20, 22, 24, 24, 26, 28, 28, 22, 24, 24, 26, 26, 28, 28, 24, 24, 26, 26, 26, 28, 28, 24, 26, 26, 26, 28, 28 ] }); var Alignment_1 = Alignment; var ErrorCorrection = lite.extend(null, { BLOCKS: [ 1, 0, 19, 7, 1, 0, 16, 10, 1, 0, 13, 13, 1, 0, 9, 17, 1, 0, 34, 10, 1, 0, 28, 16, 1, 0, 22, 22, 1, 0, 16, 28, 1, 0, 55, 15, 1, 0, 44, 26, 2, 0, 17, 18, 2, 0, 13, 22, 1, 0, 80, 20, 2, 0, 32, 18, 2, 0, 24, 26, 4, 0, 9, 16, 1, 0, 108, 26, 2, 0, 43, 24, 2, 2, 15, 18, 2, 2, 11, 22, 2, 0, 68, 18, 4, 0, 27, 16, 4, 0, 19, 24, 4, 0, 15, 28, 2, 0, 78, 20, 4, 0, 31, 18, 2, 4, 14, 18, 4, 1, 13, 26, 2, 0, 97, 24, 2, 2, 38, 22, 4, 2, 18, 22, 4, 2, 14, 26, 2, 0, 116, 30, 3, 2, 36, 22, 4, 4, 16, 20, 4, 4, 12, 24, 2, 2, 68, 18, 4, 1, 43, 26, 6, 2, 19, 24, 6, 2, 15, 28, 4, 0, 81, 20, 1, 4, 50, 30, 4, 4, 22, 28, 3, 8, 12, 24, 2, 2, 92, 24, 6, 2, 36, 22, 4, 6, 20, 26, 7, 4, 14, 28, 4, 0, 107, 26, 8, 1, 37, 22, 8, 4, 20, 24, 12, 4, 11, 22, 3, 1, 115, 30, 4, 5, 40, 24, 11, 5, 16, 20, 11, 5, 12, 24, 5, 1, 87, 22, 5, 5, 41, 24, 5, 7, 24, 30, 11, 7, 12, 24, 5, 1, 98, 24, 7, 3, 45, 28, 15, 2, 19, 24, 3, 13, 15, 30, 1, 5, 107, 28, 10, 1, 46, 28, 1, 15, 22, 28, 2, 17, 14, 28, 5, 1, 120, 30, 9, 4, 43, 26, 17, 1, 22, 28, 2, 19, 14, 28, 3, 4, 113, 28, 3, 11, 44, 26, 17, 4, 21, 26, 9, 16, 13, 26, 3, 5, 107, 28, 3, 13, 41, 26, 15, 5, 24, 30, 15, 10, 15, 28, 4, 4, 116, 28, 17, 0, 42, 26, 17, 6, 22, 28, 19, 6, 16, 30, 2, 7, 111, 28, 17, 0, 46, 28, 7, 16, 24, 30, 34, 0, 13, 24, 4, 5, 121, 30, 4, 14, 47, 28, 11, 14, 24, 30, 16, 14, 15, 30, 6, 4, 117, 30, 6, 14, 45, 28, 11, 16, 24, 30, 30, 2, 16, 30, 8, 4, 106, 26, 8, 13, 47, 28, 7, 22, 24, 30, 22, 13, 15, 30, 10, 2, 114, 28, 19, 4, 46, 28, 28, 6, 22, 28, 33, 4, 16, 30, 8, 4, 122, 30, 22, 3, 45, 28, 8, 26, 23, 30, 12, 28, 15, 30, 3, 10, 117, 30, 3, 23, 45, 28, 4, 31, 24, 30, 11, 31, 15, 30, 7, 7, 116, 30, 21, 7, 45, 28, 1, 37, 23, 30, 19, 26, 15, 30, 5, 10, 115, 30, 19, 10, 47, 28, 15, 25, 24, 30, 23, 25, 15, 30, 13, 3, 115, 30, 2, 29, 46, 28, 42, 1, 24, 30, 23, 28, 15, 30, 17, 0, 115, 30, 10, 23, 46, 28, 10, 35, 24, 30, 19, 35, 15, 30, 17, 1, 115, 30, 14, 21, 46, 28, 29, 19, 24, 30, 11, 46, 15, 30, 13, 6, 115, 30, 14, 23, 46, 28, 44, 7, 24, 30, 59, 1, 16, 30, 12, 7, 121, 30, 12, 26, 47, 28, 39, 14, 24, 30, 22, 41, 15, 30, 6, 14, 121, 30, 6, 34, 47, 28, 46, 10, 24, 30, 2, 64, 15, 30, 17, 4, 122, 30, 29, 14, 46, 28, 49, 10, 24, 30, 24, 46, 15, 30, 4, 18, 122, 30, 13, 32, 46, 28, 48, 14, 24, 30, 42, 32, 15, 30, 20, 4, 117, 30, 40, 7, 47, 28, 43, 22, 24, 30, 10, 67, 15, 30, 19, 6, 118, 30, 18, 31, 47, 28, 34, 34, 24, 30, 20, 61, 15, 30 ], FINAL_FORMAT: [ 30660, 29427, 32170, 30877, 26159, 25368, 27713, 26998, 21522, 20773, 24188, 23371, 17913, 16590, 20375, 19104, 13663, 12392, 16177, 14854, 9396, 8579, 11994, 11245, 5769, 5054, 7399, 6608, 1890, 597, 3340, 2107 ], LEVELS: { L: 1, M: 2, Q: 3, H: 4 } }); var ErrorCorrection_1 = ErrorCorrection; var Galois = lite.extend(null, { EXPONENT: [ 1, 2, 4, 8, 16, 32, 64, 128, 29, 58, 116, 232, 205, 135, 19, 38, 76, 152, 45, 90, 180, 117, 234, 201, 143, 3, 6, 12, 24, 48, 96, 192, 157, 39, 78, 156, 37, 74, 148, 53, 106, 212, 181, 119, 238, 193, 159, 35, 70, 140, 5, 10, 20, 40, 80, 160, 93, 186, 105, 210, 185, 111, 222, 161, 95, 190, 97, 194, 153, 47, 94, 188, 101, 202, 137, 15, 30, 60, 120, 240, 253, 231, 211, 187, 107, 214, 177, 127, 254, 225, 223, 163, 91, 182, 113, 226, 217, 175, 67, 134, 17, 34, 68, 136, 13, 26, 52, 104, 208, 189, 103, 206, 129, 31, 62, 124, 248, 237, 199, 147, 59, 118, 236, 197, 151, 51, 102, 204, 133, 23, 46, 92, 184, 109, 218, 169, 79, 158, 33, 66, 132, 21, 42, 84, 168, 77, 154, 41, 82, 164, 85, 170, 73, 146, 57, 114, 228, 213, 183, 115, 230, 209, 191, 99, 198, 145, 63, 126, 252, 229, 215, 179, 123, 246, 241, 255, 227, 219, 171, 75, 150, 49, 98, 196, 149, 55, 110, 220, 165, 87, 174, 65, 130, 25, 50, 100, 200, 141, 7, 14, 28, 56, 112, 224, 221, 167, 83, 166, 81, 162, 89, 178, 121, 242, 249, 239, 195, 155, 43, 86, 172, 69, 138, 9, 18, 36, 72, 144, 61, 122, 244, 245, 247, 243, 251, 235, 203, 139, 11, 22, 44, 88, 176, 125, 250, 233, 207, 131, 27, 54, 108, 216, 173, 71, 142, 0 ], LOG: [ 255, 0, 1, 25, 2, 50, 26, 198, 3, 223, 51, 238, 27, 104, 199, 75, 4, 100, 224, 14, 52, 141, 239, 129, 28, 193, 105, 248, 200, 8, 76, 113, 5, 138, 101, 47, 225, 36, 15, 33, 53, 147, 142, 218, 240, 18, 130, 69, 29, 181, 194, 125, 106, 39, 249, 185, 201, 154, 9, 120, 77, 228, 114, 166, 6, 191, 139, 98, 102, 221, 48, 253, 226, 152, 37, 179, 16, 145, 34, 136, 54, 208, 148, 206, 143, 150, 219, 189, 241, 210, 19, 92, 131, 56, 70, 64, 30, 66, 182, 163, 195, 72, 126, 110, 107, 58, 40, 84, 250, 133, 186, 61, 202, 94, 155, 159, 10, 21, 121, 43, 78, 212, 229, 172, 115, 243, 167, 87, 7, 112, 192, 247, 140, 128, 99, 13, 103, 74, 222, 237, 49, 197, 254, 24, 227, 165, 153, 119, 38, 184, 180, 124, 17, 68, 146, 217, 35, 32, 137, 46, 55, 63, 209, 91, 149, 188, 207, 205, 144, 135, 151, 178, 220, 252, 190, 97, 242, 86, 211, 171, 20, 42, 93, 158, 132, 60, 57, 83, 71, 109, 65, 162, 31, 45, 67, 216, 183, 123, 164, 118, 196, 23, 73, 236, 127, 12, 111, 246, 108, 161, 59, 82, 41, 157, 85, 170, 251, 96, 134, 177, 187, 204, 62, 90, 203, 89, 95, 176, 156, 169, 160, 81, 11, 245, 22, 235, 122, 117, 44, 215, 79, 174, 213, 233, 230, 231, 173, 232, 116, 214, 244, 234, 168, 80, 88, 175 ] }); var Galois_1 = Galois; var Version = lite.extend(null, { BLOCK: [ 3220, 1468, 2713, 1235, 3062, 1890, 2119, 1549, 2344, 2936, 1117, 2583, 1330, 2470, 1667, 2249, 2028, 3780, 481, 4011, 142, 3098, 831, 3445, 592, 2517, 1776, 2234, 1951, 2827, 1070, 2660, 1345, 3177 ] }); var Version_1 = Version; var Frame = lite.extend(function(options) { var dataBlock, eccBlock, index2, neccBlock1, neccBlock2; var valueLength = options.value.length; this._badness = []; this._level = ErrorCorrection_1.LEVELS[options.level]; this._polynomial = []; this._value = options.value; this._version = 0; this._stringBuffer = []; while (this._version < 40) { this._version++; index2 = (this._level - 1) * 4 + (this._version - 1) * 16; neccBlock1 = ErrorCorrection_1.BLOCKS[index2++]; neccBlock2 = ErrorCorrection_1.BLOCKS[index2++]; dataBlock = ErrorCorrection_1.BLOCKS[index2++]; eccBlock = ErrorCorrection_1.BLOCKS[index2]; index2 = dataBlock * (neccBlock1 + neccBlock2) + neccBlock2 - 3 + (this._version <= 9); if (valueLength <= index2) { break; } } this._dataBlock = dataBlock; this._eccBlock = eccBlock; this._neccBlock1 = neccBlock1; this._neccBlock2 = neccBlock2; var width = this.width = 17 + 4 * this._version; this.buffer = Frame._createArray(width * width); this._ecc = Frame._createArray(dataBlock + (dataBlock + eccBlock) * (neccBlock1 + neccBlock2) + neccBlock2); this._mask = Frame._createArray((width * (width + 1) + 1) / 2); this._insertFinders(); this._insertAlignments(); this.buffer[8 + width * (width - 8)] = 1; this._insertTimingGap(); this._reverseMask(); this._insertTimingRowAndColumn(); this._insertVersion(); this._syncMask(); this._convertBitStream(valueLength); this._calculatePolynomial(); this._appendEccToData(); this._interleaveBlocks(); this._pack(); this._finish(); }, { _addAlignment: function(x, y) { var i; var buffer = this.buffer; var width = this.width; buffer[x + width * y] = 1; for (i = -2; i < 2; i++) { buffer[x + i + width * (y - 2)] = 1; buffer[x - 2 + width * (y + i + 1)] = 1; buffer[x + 2 + width * (y + i)] = 1; buffer[x + i + 1 + width * (y + 2)] = 1; } for (i = 0; i < 2; i++) { this._setMask(x - 1, y + i); this._setMask(x + 1, y - i); this._setMask(x - i, y - 1); this._setMask(x + i, y + 1); } }, _appendData: function(data, dataLength, ecc, eccLength) { var bit, i, j; var polynomial = this._polynomial; var stringBuffer = this._stringBuffer; for (i = 0; i < eccLength; i++) { stringBuffer[ecc + i] = 0; } for (i = 0; i < dataLength; i++) { bit = Galois_1.LOG[stringBuffer[data + i] ^ stringBuffer[ecc]]; if (bit !== 255) { for (j = 1; j < eccLength; j++) { stringBuffer[ecc + j - 1] = stringBuffer[ecc + j] ^ Galois_1.EXPONENT[Frame._modN(bit + polynomial[eccLength - j])]; } } else { for (j = ecc; j < ecc + eccLength; j++) { stringBuffer[j] = stringBuffer[j + 1]; } } stringBuffer[ecc + eccLength - 1] = bit === 255 ? 0 : Galois_1.EXPONENT[Frame._modN(bit + polynomial[0])]; } }, _appendEccToData: function() { var i; var data = 0; var dataBlock = this._dataBlock; var ecc = this._calculateMaxLength(); var eccBlock = this._eccBlock; for (i = 0; i < this._neccBlock1; i++) { this._appendData(data, dataBlock, ecc, eccBlock); data += dataBlock; ecc += eccBlock; } for (i = 0; i < this._neccBlock2; i++) { this._appendData(data, dataBlock + 1, ecc, eccBlock); data += dataBlock + 1; ecc += eccBlock; } }, _applyMask: function(mask) { var r3x, r3y, x, y; var buffer = this.buffer; var width = this.width; switch (mask) { case 0: for (y = 0; y < width; y++) { for (x = 0; x < width; x++) { if (!(x + y & 1) && !this._isMasked(x, y)) { buffer[x + y * width] ^= 1; } } } break; case 1: for (y = 0; y < width; y++) { for (x = 0; x < width; x++) { if (!(y & 1) && !this._isMasked(x, y)) { buffer[x + y * width] ^= 1; } } } break; case 2: for (y = 0; y < width; y++) { for (r3x = 0, x = 0; x < width; x++, r3x++) { if (r3x === 3) { r3x = 0; } if (!r3x && !this._isMasked(x, y)) { buffer[x + y * width] ^= 1; } } } break; case 3: for (r3y = 0, y = 0; y < width; y++, r3y++) { if (r3y === 3) { r3y = 0; } for (r3x = r3y, x = 0; x < width; x++, r3x++) { if (r3x === 3) { r3x = 0; } if (!r3x && !this._isMasked(x, y)) { buffer[x + y * width] ^= 1; } } } break; case 4: for (y = 0; y < width; y++) { for (r3x = 0, r3y = y >> 1 & 1, x = 0; x < width; x++, r3x++) { if (r3x === 3) { r3x = 0; r3y = !r3y; } if (!r3y && !this._isMasked(x, y)) { buffer[x + y * width] ^= 1; } } } break; case 5: for (r3y = 0, y = 0; y < width; y++, r3y++) { if (r3y === 3) { r3y = 0; } for (r3x = 0, x = 0; x < width; x++, r3x++) { if (r3x === 3) { r3x = 0; } if (!((x & y & 1) + !(!r3x | !r3y)) && !this._isMasked(x, y)) { buffer[x + y * width] ^= 1; } } } break; case 6: for (r3y = 0, y = 0; y < width; y++, r3y++) { if (r3y === 3) { r3y = 0; } for (r3x = 0, x = 0; x < width; x++, r3x++) { if (r3x === 3) { r3x = 0; } if (!((x & y & 1) + (r3x && r3x === r3y) & 1) && !this._isMasked(x, y)) { buffer[x + y * width] ^= 1; } } } break; case 7: for (r3y = 0, y = 0; y < width; y++, r3y++) { if (r3y === 3) { r3y = 0; } for (r3x = 0, x = 0; x < width; x++, r3x++) { if (r3x === 3) { r3x = 0; } if (!((r3x && r3x === r3y) + (x + y & 1) & 1) && !this._isMasked(x, y)) { buffer[x + y * width] ^= 1; } } } break; } }, _calculateMaxLength: function() { return this._dataBlock * (this._neccBlock1 + this._neccBlock2) + this._neccBlock2; }, _calculatePolynomial: function() { var i, j; var eccBlock = this._eccBlock; var polynomial = this._polynomial; polynomial[0] = 1; for (i = 0; i < eccBlock; i++) { polynomial[i + 1] = 1; for (j = i; j > 0; j--) { polynomial[j] = polynomial[j] ? polynomial[j - 1] ^ Galois_1.EXPONENT[Frame._modN(Galois_1.LOG[polynomial[j]] + i)] : polynomial[j - 1]; } polynomial[0] = Galois_1.EXPONENT[Frame._modN(Galois_1.LOG[polynomial[0]] + i)]; } for (i = 0; i <= eccBlock; i++) { polynomial[i] = Galois_1.LOG[polynomial[i]]; } }, _checkBadness: function() { var b, b1, h, x, y; var bad = 0; var badness = this._badness; var buffer = this.buffer; var width = this.width; for (y = 0; y < width - 1; y++) { for (x = 0; x < width - 1; x++) { if (buffer[x + width * y] && buffer[x + 1 + width * y] && buffer[x + width * (y + 1)] && buffer[x + 1 + width * (y + 1)] || !(buffer[x + width * y] || buffer[x + 1 + width * y] || buffer[x + width * (y + 1)] || buffer[x + 1 + width * (y + 1)])) { bad += Frame.N2; } } } var bw = 0; for (y = 0; y < width; y++) { h = 0; badness[0] = 0; for (b = 0, x = 0; x < width; x++) { b1 = buffer[x + width * y]; if (b === b1) { badness[h]++; } else { badness[++h] = 1; } b = b1; bw += b ? 1 : -1; } bad += this._getBadness(h); } if (bw < 0) { bw = -bw; } var count = 0; var big = bw; big += big << 2; big <<= 1; while (big > width * width) { big -= width * width; count++; } bad += count * Frame.N4; for (x = 0; x < width; x++) { h = 0; badness[0] = 0; for (b = 0, y = 0; y < width; y++) { b1 = buffer[x + width * y]; if (b === b1) { badness[h]++; } else { badness[++h] = 1; } b = b1; } bad += this._getBadness(h); } return bad; }, _convertBitStream: function(length) { var bit, i; var ecc = this._ecc; var version = this._version; for (i = 0; i < length; i++) { ecc[i] = this._value.charCodeAt(i); } var stringBuffer = this._stringBuffer = ecc.slice(); var maxLength = this._calculateMaxLength(); if (length >= maxLength - 2) { length = maxLength - 2; if (version > 9) { length--; } } var index2 = length; if (version > 9) { stringBuffer[index2 + 2] = 0; stringBuffer[index2 + 3] = 0; while (index2--) { bit = stringBuffer[index2]; stringBuffer[index2 + 3] |= 255 & bit << 4; stringBuffer[index2 + 2] = bit >> 4; } stringBuffer[2] |= 255 & length << 4; stringBuffer[1] = length >> 4; stringBuffer[0] = 64 | length >> 12; } else { stringBuffer[index2 + 1] = 0; stringBuffer[index2 + 2] = 0; while (index2--) { bit = stringBuffer[index2]; stringBuffer[index2 + 2] |= 255 & bit << 4; stringBuffer[index2 + 1] = bit >> 4; } stringBuffer[1] |= 255 & length << 4; stringBuffer[0] = 64 | length >> 4; } index2 = length + 3 - (version < 10); while (index2 < maxLength) { stringBuffer[index2++] = 236; stringBuffer[index2++] = 17; } }, _getBadness: function(length) { var i; var badRuns = 0; var badness = this._badness; for (i = 0; i <= length; i++) { if (badness[i] >= 5) { badRuns += Frame.N1 + badness[i] - 5; } } for (i = 3; i < length - 1; i += 2) { if (badness[i - 2] === badness[i + 2] && badness[i + 2] === badness[i - 1] && badness[i - 1] === badness[i + 1] && badness[i - 1] * 3 === badness[i] && (badness[i - 3] === 0 || i + 3 > length || badness[i - 3] * 3 >= badness[i] * 4 || badness[i + 3] * 3 >= badness[i] * 4)) { badRuns += Frame.N3; } } return badRuns; }, _finish: function() { this._stringBuffer = this.buffer.slice(); var currentMask, i; var bit = 0; var mask = 3e4; for (i = 0; i < 8; i++) { this._applyMask(i); currentMask = this._checkBadness(); if (currentMask < mask) { mask = currentMask; bit = i; } if (bit === 7) { break; } this.buffer = this._stringBuffer.slice(); } if (bit !== i) { this._applyMask(bit); } mask = ErrorCorrection_1.FINAL_FORMAT[bit + (this._level - 1 << 3)]; var buffer = this.buffer; var width = this.width; for (i = 0; i < 8; i++, mask >>= 1) { if (mask & 1) { buffer[width - 1 - i + width * 8] = 1; if (i < 6) { buffer[8 + width * i] = 1; } else { buffer[8 + width * (i + 1)] = 1; } } } for (i = 0; i < 7; i++, mask >>= 1) { if (mask & 1) { buffer[8 + width * (width - 7 + i)] = 1; if (i) { buffer[6 - i + width * 8] = 1; } else { buffer[7 + width * 8] = 1; } } } }, _interleaveBlocks: function() { var i, j; var dataBlock = this._dataBlock; var ecc = this._ecc; var eccBlock = this._eccBlock; var k = 0; var maxLength = this._calculateMaxLength(); var neccBlock1 = this._neccBlock1; var neccBlock2 = this._neccBlock2; var stringBuffer = this._stringBuffer; for (i = 0; i < dataBlock; i++) { for (j = 0; j < neccBlock1; j++) { ecc[k++] = stringBuffer[i + j * dataBlock]; } for (j = 0; j < neccBlock2; j++) { ecc[k++] = stringBuffer[neccBlock1 * dataBlock + i + j * (dataBlock + 1)]; } } for (j = 0; j < neccBlock2; j++) { ecc[k++] = stringBuffer[neccBlock1 * dataBlock + i + j * (dataBlock + 1)]; } for (i = 0; i < eccBlock; i++) { for (j = 0; j < neccBlock1 + neccBlock2; j++) { ecc[k++] = stringBuffer[maxLength + i + j * eccBlock]; } } this._stringBuffer = ecc; }, _insertAlignments: function() { var i, x, y; var version = this._version; var width = this.width; if (version > 1) { i = Alignment_1.BLOCK[version]; y = width - 7; for (; ; ) { x = width - 7; while (x > i - 3) { this._addAlignment(x, y); if (x < i) { break; } x -= i; } if (y <= i + 9) { break; } y -= i; this._addAlignment(6, y); this._addAlignment(y, 6); } } }, _insertFinders: function() { var i, j, x, y; var buffer = this.buffer; var width = this.width; for (i = 0; i < 3; i++) { j = 0; y = 0; if (i === 1) { j = width - 7; } if (i === 2) { y = width - 7; } buffer[y + 3 + width * (j + 3)] = 1; for (x = 0; x < 6; x++) { buffer[y + x + width * j] = 1; buffer[y + width * (j + x + 1)] = 1; buffer[y + 6 + width * (j + x)] = 1; buffer[y + x + 1 + width * (j + 6)] = 1; } for (x = 1; x < 5; x++) { this._setMask(y + x, j + 1); this._setMask(y + 1, j + x + 1); this._setMask(y + 5, j + x); this._setMask(y + x + 1, j + 5); } for (x = 2; x < 4; x++) { buffer[y + x + width * (j + 2)] = 1; buffer[y + 2 + width * (j + x + 1)] = 1; buffer[y + 4 + width * (j + x)] = 1; buffer[y + x + 1 + width * (j + 4)] = 1; } } }, _insertTimingGap: function() { var x, y; var width = this.width; for (y = 0; y < 7; y++) { this._setMask(7, y); this._setMask(width - 8, y); this._setMask(7, y + width - 7); } for (x = 0; x < 8; x++) { this._setMask(x, 7); this._setMask(x + width - 8, 7); this._setMask(x, width - 8); } }, _insertTimingRowAndColumn: function() { var x; var buffer = this.buffer; var width = this.width; for (x = 0; x < width - 14; x++) { if (x & 1) { this._setMask(8 + x, 6); this._setMask(6, 8 + x); } else { buffer[8 + x + width * 6] = 1; buffer[6 + width * (8 + x)] = 1; } } }, _insertVersion: function() { var i, j, x, y; var buffer = this.buffer; var version = this._version; var width = this.width; if (version > 6) { i = Version_1.BLOCK[version - 7]; j = 17; for (x = 0; x < 6; x++) { for (y = 0; y < 3; y++, j--) { if (1 & (j > 11 ? version >> j - 12 : i >> j)) { buffer[5 - x + width * (2 - y + width - 11)] = 1; buffer[2 - y + width - 11 + width * (5 - x)] = 1; } else { this._setMask(5 - x, 2 - y + width - 11); this._setMask(2 - y + width - 11, 5 - x); } } } } }, _isMasked: function(x, y) { var bit = Frame._getMaskBit(x, y); return this._mask[bit] === 1; }, _pack: function() { var bit, i, j; var k = 1; var v = 1; var width = this.width; var x = width - 1; var y = width - 1; var length = (this._dataBlock + this._eccBlock) * (this._neccBlock1 + this._neccBlock2) + this._neccBlock2; for (i = 0; i < length; i++) { bit = this._stringBuffer[i]; for (j = 0; j < 8; j++, bit <<= 1) { if (128 & bit) { this.buffer[x + width * y] = 1; } do { if (v) { x--; } else { x++; if (k) { if (y !== 0) { y--; } else { x -= 2; k = !k; if (x === 6) { x--; y = 9; } } } else if (y !== width - 1) { y++; } else { x -= 2; k = !k; if (x === 6) { x--; y -= 8; } } } v = !v; } while (this._isMasked(x, y)); } } }, _reverseMask: function() { var x, y; var width = this.width; for (x = 0; x < 9; x++) { this._setMask(x, 8); } for (x = 0; x < 8; x++) { this._setMask(x + width - 8, 8); this._setMask(8, x); } for (y = 0; y < 7; y++) { this._setMask(8, y + width - 7); } }, _setMask: function(x, y) { var bit = Frame._getMaskBit(x, y); this._mask[bit] = 1; }, _syncMask: function() { var x, y; var width = this.width; for (y = 0; y < width; y++) { for (x = 0; x <= y; x++) { if (this.buffer[x + width * y]) { this._setMask(x, y); } } } } }, { _createArray: function(length) { var i; var array = []; for (i = 0; i < length; i++) { array[i] = 0; } return array; }, _getMaskBit: function(x, y) { var bit; if (x > y) { bit = x; x = y; y = bit; } bit = y; bit += y * y; bit >>= 1; bit += x; return bit; }, _modN: function(x) { while (x >= 255) { x -= 255; x = (x >> 8) + (x & 255); } return x; }, N1: 3, N2: 3, N3: 40, N4: 10 }); var Frame_1 = Frame; var ImageRenderer = Renderer_1.extend({ draw: function() { this.element.src = this.qrious.toDataURL(); }, reset: function() { this.element.src = ""; }, resize: function() { var element = this.element; element.width = element.height = this.qrious.size; } }); var ImageRenderer_1 = ImageRenderer; var Option = lite.extend(function(name, modifiable, defaultValue, valueTransformer) { this.name = name; this.modifiable = Boolean(modifiable); this.defaultValue = defaultValue; this._valueTransformer = valueTransformer; }, { transform: function(value) { var transformer = this._valueTransformer; if (typeof transformer === "function") { return transformer(value, this); } return value; } }); var Option_1 = Option; var Utilities = lite.extend(null, { abs: function(value) { return value != null ? Math.abs(value) : null; }, hasOwn: function(object, name) { return Object.prototype.hasOwnProperty.call(object, name); }, noop: function() { }, toUpperCase: function(string) { return string != null ? string.toUpperCase() : null; } }); var Utilities_1 = Utilities; var OptionManager = lite.extend(function(options) { this.options = {}; options.forEach(function(option) { this.options[option.name] = option; }, this); }, { exists: function(name) { return this.options[name] != null; }, get: function(name, target) { return OptionManager._get(this.options[name], target); }, getAll: function(target) { var name; var options = this.options; var result = {}; for (name in options) { if (Utilities_1.hasOwn(options, name)) { result[name] = OptionManager._get(options[name], target); } } return result; }, init: function(options, target, changeHandler) { if (typeof changeHandler !== "function") { changeHandler = Utilities_1.noop; } var name, option; for (name in this.options) { if (Utilities_1.hasOwn(this.options, name)) { option = this.options[name]; OptionManager._set(option, option.defaultValue, target); OptionManager._createAccessor(option, target, changeHandler); } } this._setAll(options, target, true); }, set: function(name, value, target) { return this._set(name, value, target); }, setAll: function(options, target) { return this._setAll(options, target); }, _set: function(name, value, target, allowUnmodifiable) { var option = this.options[name]; if (!option) { throw new Error("Invalid option: " + name); } if (!option.modifiable && !allowUnmodifiable) { throw new Error("Option cannot be modified: " + name); } return OptionManager._set(option, value, target); }, _setAll: function(options, target, allowUnmodifiable) { if (!options) { return false; } var name; var changed = false; for (name in options) { if (Utilities_1.hasOwn(options, name) && this._set(name, options[name], target, allowUnmodifiable)) { changed = true; } } return changed; } }, { _createAccessor: function(option, target, changeHandler) { var descriptor = { get: function() { return OptionManager._get(option, target); } }; if (option.modifiable) { descriptor.set = function(value) { if (OptionManager._set(option, value, target)) { changeHandler(value, option); } }; } Object.defineProperty(target, option.name, descriptor); }, _get: function(option, target) { return target["_" + option.name]; }, _set: function(option, value, target) { var fieldName = "_" + option.name; var oldValue = target[fieldName]; var newValue = option.transform(value != null ? value : option.defaultValue); target[fieldName] = newValue; return newValue !== oldValue; } }); var OptionManager_1 = OptionManager; var ServiceManager = lite.extend(function() { this._services = {}; }, { getService: function(name) { var service = this._services[name]; if (!service) { throw new Error("Service is not being managed with name: " + name); } return service; }, setService: function(name, service) { if (this._services[name]) { throw new Error("Service is already managed with name: " + name); } if (service) { this._services[name] = service; } } }); var ServiceManager_1 = ServiceManager; var optionManager = new OptionManager_1([ new Option_1("background", true, "white"), new Option_1("backgroundAlpha", true, 1, Utilities_1.abs), new Option_1("element"), new Option_1("foreground", true, "black"), new Option_1("foregroundAlpha", true, 1, Utilities_1.abs), new Option_1("level", true, "L", Utilities_1.toUpperCase), new Option_1("mime", true, "image/png"), new Option_1("padding", true, null, Utilities_1.abs), new Option_1("size", true, 100, Utilities_1.abs), new Option_1("value", true, "") ]); var serviceManager = new ServiceManager_1(); var QRious2 = lite.extend(function(options) { optionManager.init(options, this, this.update.bind(this)); var element = optionManager.get("element", this); var elementService = serviceManager.getService("element"); var canvas = element && elementService.isCanvas(element) ? element : elementService.createCanvas(); var image = element && elementService.isImage(element) ? element : elementService.createImage(); this._canvasRenderer = new CanvasRenderer_1(this, canvas, true); this._imageRenderer = new ImageRenderer_1(this, image, image === element); this.update(); }, { get: function() { return optionManager.getAll(this); }, set: function(options) { if (optionManager.setAll(options, this)) { this.update(); } }, toDataURL: function(mime) { return this.canvas.toDataURL(mime || this.mime); }, update: function() { var frame = new Frame_1({ level: this.level, value: this.value }); this._canvasRenderer.render(frame); this._imageRenderer.render(frame); } }, { use: function(service) { serviceManager.setService(service.getName(), service); } }); Object.defineProperties(QRious2.prototype, { canvas: { get: function() { return this._canvasRenderer.getElement(); } }, image: { get: function() { return this._imageRenderer.getElement(); } } }); var QRious_1$2 = QRious2; var index = QRious_1$2; var Service = lite.extend({ getName: function() { } }); var Service_1 = Service; var ElementService = Service_1.extend({ createCanvas: function() { }, createImage: function() { }, getName: function() { return "element"; }, isCanvas: function(element) { }, isImage: function(element) { } }); var ElementService_1 = ElementService; var BrowserElementService = ElementService_1.extend({ createCanvas: function() { return document.createElement("canvas"); }, createImage: function() { return document.createElement("img"); }, isCanvas: function(element) { return element instanceof HTMLCanvasElement; }, isImage: function(element) { return element instanceof HTMLImageElement; } }); var BrowserElementService_1 = BrowserElementService; index.use(new BrowserElementService_1()); var QRious_1 = index; return QRious_1; }); } }); // src/main.ts __export(exports, { default: () => MatterPlugin }); var import_obsidian2 = __toModule(require("obsidian")); // src/api.ts var CLIENT_TYPE = "integration"; var MATTER_API_VERSION = "v11"; var MATTER_API_DOMAIN = "api.getmatter.app"; var MATTER_API_HOST = `https://${MATTER_API_DOMAIN}/api/${MATTER_API_VERSION}`; var ENDPOINTS = { QR_LOGIN_TRIGGER: `${MATTER_API_HOST}/qr_login/trigger/`, QR_LOGIN_EXCHANGE: `${MATTER_API_HOST}/qr_login/exchange/`, REFRESH_TOKEN_EXCHANGE: `${MATTER_API_HOST}/token/refresh/`, HIGHLIGHTS_FEED: `${MATTER_API_HOST}/library_items/highlights_feed/` }; var RequestError = class extends Error { constructor(response, message) { super(message); this.response = response; } }; function authedRequest(_0, _1) { return __async(this, arguments, function* (accessToken, url, fetchArgs = {}) { const headers = new Headers(); headers.set("Authorization", `Bearer ${accessToken}`); headers.set("Content-Type", "application/json"); const response = yield fetch(url, __spreadProps(__spreadValues({}, fetchArgs), { headers })); if (!response.ok) { throw new RequestError(response, "Matter authenticated request failed"); } return yield response.json(); }); } // src/settings.ts var import_obsidian = __toModule(require("obsidian")); var import_qrious = __toModule(require_qrious()); // src/utils.ts var sleep = (ms) => { return new Promise((resolve) => setTimeout(resolve, ms)); }; var toFilename = (s) => { return s.replace(/[/\\?%*:|"<>]/g, "-"); }; // src/settings.ts var DEFAULT_SETTINGS = { accessToken: null, refreshToken: null, qrSessionToken: null, dataDir: "Matter", syncInterval: 60, hasCompletedInitialSetup: false, lastSync: null, isSyncing: false, contentMap: {} }; var MatterSettingsTab = class extends import_obsidian.PluginSettingTab { constructor(app, plugin) { super(app, plugin); this.plugin = plugin; } display() { const { containerEl } = this; containerEl.empty(); this.loadInterface(); } loadInterface() { const { containerEl } = this; containerEl.createEl("h1", { text: "Matter" }); if (!this.plugin.settings.accessToken || !this.plugin.settings.hasCompletedInitialSetup) { this.displaySetup(); } else { this.displaySettings(); } } displaySetup() { return __async(this, null, function* () { const { containerEl } = this; try { const headers = new Headers(); headers.set("Content-Type", "application/json"); const triggerResponse = yield fetch(ENDPOINTS.QR_LOGIN_TRIGGER, { method: "POST", body: JSON.stringify({ client_type: CLIENT_TYPE }), headers }); this.plugin.settings.qrSessionToken = (yield triggerResponse.json()).session_token; } catch (error) { return; } const qrSetting = new import_obsidian.Setting(containerEl).setName("Scan this QR code in the Matter app").setDesc("Go to Profile > Settings > Connected Accounts > Obsidian"); const canvas = document.createElement("canvas"); canvas.className = "matter-qr"; qrSetting.settingEl.appendChild(canvas); new import_qrious.default({ element: canvas, value: this.plugin.settings.qrSessionToken, size: 80, backgroundAlpha: 0.2 }); new import_obsidian.Setting(containerEl).setName("Matter Sync Folder").setDesc("Where do you want your Matter data to live in Obsidian?").addText((text) => text.setPlaceholder("Enter location").setValue(this.plugin.settings.dataDir).onChange((value) => __async(this, null, function* () { value = value.replace(/^\/+|\/+$/g, ""); this.plugin.settings.dataDir = (0, import_obsidian.normalizePath)(value); yield this.plugin.saveSettings(); }))); console.log(this.plugin.app.workspace.getLayout()); const startBtn = new import_obsidian.ButtonComponent(containerEl).setButtonText("Start Syncing").setClass("mod-cta").setClass("matter-setup-btn").setDisabled(true).onClick(() => __async(this, null, function* () { this.plugin.settings.hasCompletedInitialSetup = true; yield this.plugin.saveSettings(); this.plugin.sync(); this.plugin.loopSync(); this.display(); })); const { access_token, refresh_token } = yield this._pollQRLoginExchange(); if (access_token) { this.plugin.settings.accessToken = access_token; this.plugin.settings.refreshToken = refresh_token; yield this.plugin.saveSettings(); canvas.remove(); const authConfirmation = document.createElement("p"); authConfirmation.className = "matter-auth-confirmation"; authConfirmation.appendText("\u2705"); qrSetting.settingEl.appendChild(authConfirmation); startBtn.setDisabled(false); } }); } displaySettings() { return __async(this, null, function* () { const { containerEl } = this; let newDataDir = this.plugin.settings.dataDir; new import_obsidian.Setting(containerEl).setName("Matter Sync Folder").setDesc('Where do you want your Matter data to live in Obsidian? Once you click "Apply" all of your current data will be moved').addText((text) => text.setPlaceholder("Enter location").setValue(newDataDir).onChange((value) => __async(this, null, function* () { value = value.replace(/^\/+|\/+$/g, ""); newDataDir = value; }))).addButton((button) => button.setButtonText("Apply").setClass("matter-folder-button").onClick(() => __async(this, null, function* () { if (newDataDir === this.plugin.settings.dataDir) { return; } if (this.plugin.settings.isSyncing) { new import_obsidian.Notice("Wait for the current sync to end and try again."); return; } this.plugin.settings.isSyncing = true; yield this.plugin.saveSettings(); const fs = this.plugin.app.vault.adapter; try { yield fs.rename(this.plugin.settings.dataDir, newDataDir); } catch (e) { new import_obsidian.Notice(e.message); this.plugin.settings.isSyncing = false; yield this.plugin.saveSettings(); return; } this.plugin.settings.dataDir = (0, import_obsidian.normalizePath)(newDataDir); this.plugin.settings.isSyncing = false; yield this.plugin.saveSettings(); new import_obsidian.Notice("Sync folder updated"); }))); new import_obsidian.Setting(containerEl).setName("Sync Frequency").setDesc("How often should Obsidian sync with Matter?").addDropdown((dropdown) => dropdown.addOption("30", "Every half hour").addOption("60", "Every hour").addOption("720", "Every 12 hours").addOption("1440", "Every 24 hours").setValue(this.plugin.settings.syncInterval.toString()).onChange((val) => __async(this, null, function* () { this.plugin.settings.syncInterval = parseInt(val, 10); yield this.plugin.saveSettings(); }))); new import_obsidian.Setting(containerEl).setName("Sync Now").setDesc("Manually start a sync with Matter").addButton((button) => button.setButtonText("Sync Now").onClick(() => __async(this, null, function* () { yield this.plugin.sync(); }))); }); } _pollQRLoginExchange() { return __async(this, null, function* () { if (!this.plugin.settings.qrSessionToken) { return; } let attempts = 0; while (attempts < 600) { try { const loginSession = yield this._qrLoginExchange(this.plugin.settings.qrSessionToken); if (loginSession == null ? void 0 : loginSession.access_token) { return { access_token: loginSession.access_token, refresh_token: loginSession.refresh_token }; } } finally { attempts++; yield sleep(1e3); } } }); } _qrLoginExchange(sessionToken) { return __async(this, null, function* () { const headers = new Headers(); headers.set("Content-Type", "application/json"); const response = yield fetch(ENDPOINTS.QR_LOGIN_EXCHANGE, { method: "POST", body: JSON.stringify({ session_token: sessionToken }), headers }); return response.json(); }); } }; // src/main.ts var LOOP_SYNC_INTERVAL = 60 * 1e3; var MatterPlugin = class extends import_obsidian2.Plugin { onload() { return __async(this, null, function* () { yield this.loadSettings(); this.addSettingTab(new MatterSettingsTab(this.app, this)); this.initialSync(); this.registerInterval(window.setInterval(() => __async(this, null, function* () { yield this.loopSync(); }), LOOP_SYNC_INTERVAL)); }); } onunload() { } initialSync() { return __async(this, null, function* () { this.settings.isSyncing = false; yield this.saveSettings(); if (this.settings.accessToken && this.settings.hasCompletedInitialSetup) { yield this.sync(); } else { new import_obsidian2.Notice("Finish setting up Matter in settings"); } }); } loadSettings() { return __async(this, null, function* () { this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData()); }); } saveSettings() { return __async(this, null, function* () { yield this.saveData(this.settings); }); } loopSync() { return __async(this, null, function* () { const msSinceLastSync = new Date().valueOf() - new Date(this.settings.lastSync).valueOf(); const mssyncInterval = this.settings.syncInterval * 60 * 1e3; if (this.settings.accessToken && this.settings.hasCompletedInitialSetup && msSinceLastSync >= mssyncInterval) { this.sync(); } }); } sync() { return __async(this, null, function* () { if (this.settings.isSyncing || !this.settings.accessToken) { return; } this.settings.isSyncing = true; yield this.saveSettings(); try { new import_obsidian2.Notice("Syncing with Matter"); yield this._pageAnnotations(); this.settings.lastSync = new Date(); new import_obsidian2.Notice("Finished syncing with Matter"); } catch (error) { console.error(error); new import_obsidian2.Notice("There was a problem syncing with Matter, try again later."); } this.settings.isSyncing = false; yield this.saveSettings(); }); } _pageAnnotations() { return __async(this, null, function* () { let url = ENDPOINTS.HIGHLIGHTS_FEED; let feedEntries = []; while (url !== null) { const response = yield this._authedRequest(url); feedEntries = feedEntries.concat(response.feed); url = response.next; } feedEntries = feedEntries.reverse(); for (const feedEntry of feedEntries) { yield this._handleFeedEntry(feedEntry); } }); } _authedRequest(url) { return __async(this, null, function* () { try { return yield authedRequest(this.settings.accessToken, url); } catch (e) { yield this._refreshTokenExchange(); return yield authedRequest(this.settings.accessToken, url); } }); } _refreshTokenExchange() { return __async(this, null, function* () { const headers = new Headers(); headers.set("Content-Type", "application/json"); const response = yield fetch(ENDPOINTS.REFRESH_TOKEN_EXCHANGE, { method: "POST", headers, body: JSON.stringify({ refresh_token: this.settings.refreshToken }) }); const payload = yield response.json(); this.settings.accessToken = payload.access_token; this.settings.refreshToken = payload.refresh_token; yield this.saveSettings(); if (!this.settings.accessToken) { new import_obsidian2.Notice("Unable to sync with Matter, please sign in again."); throw new Error("Authentication failed"); } }); } _handleFeedEntry(feedEntry) { return __async(this, null, function* () { const fs = this.app.vault.adapter; if (!(yield fs.exists(this.settings.dataDir))) { yield fs.mkdir(this.settings.dataDir); } const entryName = yield this._generateEntryName(feedEntry); const entryPath = this._getPath(entryName); if (yield fs.exists(entryPath)) { const after = new Date(this.settings.lastSync); const content = yield fs.read(entryPath); const newContent = this._appendAnnotations(feedEntry, content, after); if (newContent != content) { yield fs.write(entryPath, newContent); } } else { yield fs.write(entryPath, this._renderFeedEntry(feedEntry)); } }); } _getPath(name) { return (0, import_obsidian2.normalizePath)(`${this.settings.dataDir}/${name}`); } _generateEntryName(feedEntry) { return __async(this, null, function* () { const fs = this.app.vault.adapter; let name = `${toFilename(feedEntry.content.title)}.md`; let i = 1; while ((yield fs.exists(this._getPath(name))) && this.settings.contentMap[name] !== feedEntry.id) { i++; name = `${toFilename(feedEntry.content.title)}-${i}.md`; } this.settings.contentMap[name] = feedEntry.id; yield this.saveSettings(); return name; }); } _appendAnnotations(feedEntry, content, after) { const newAnnotations = feedEntry.content.my_annotations.filter((a) => new Date(a.created_date) > after); if (!newAnnotations.length) { return content; } if (content[-1] !== "\n") { content += "\n"; } return content + `${newAnnotations.map(this._renderAnnotation).join("\n")}`; } _renderFeedEntry(feedEntry) { const annotations = feedEntry.content.my_annotations.sort((a, b) => a.word_start - b.word_start); return ` ## Metadata ${this._renderMetadata(feedEntry)} ## Highlights ${annotations.map(this._renderAnnotation).join("\n")} `.trim(); } _renderMetadata(feedEntry) { let metadata = `* URL: [${feedEntry.content.url}](${feedEntry.content.url})`; if (feedEntry.content.publication_date) { const publicationDate = new Date(feedEntry.content.publication_date); const publicationDateStr = publicationDate.toISOString().slice(0, 10); metadata += ` * Published Date: ${publicationDateStr}`; } if (feedEntry.content.author) { metadata += ` * Author: [[${feedEntry.content.author.any_name}]]`; } metadata += "\n"; return metadata; } _renderAnnotation(annotation) { return ` * ${annotation.text}${annotation.note ? ` * **Note**: ${annotation.note}` : ""} `.trim(); } };