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 __defNormalProp = (obj3, key, value) => key in obj3 ? __defProp(obj3, key, { enumerable: true, configurable: true, writable: true, value }) : obj3[key] = value; var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { get: (a, b) => (typeof require !== "undefined" ? require : a)[b] }) : x)(function(x) { if (typeof require !== "undefined") return require.apply(this, arguments); throw Error('Dynamic require of "' + x + '" is not supported'); }); var __commonJS = (cb, mod) => function __require2() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; 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 __publicField = (obj3, key, value) => __defNormalProp(obj3, typeof key !== "symbol" ? key + "" : key, value); // ../../.cache/deno/deno_esbuild/registry.npmjs.org/events@3.3.0/node_modules/events/events.js var require_events = __commonJS({ "../../.cache/deno/deno_esbuild/registry.npmjs.org/events@3.3.0/node_modules/events/events.js"(exports, module) { "use strict"; var R = typeof Reflect === "object" ? Reflect : null; var ReflectApply = R && typeof R.apply === "function" ? R.apply : function ReflectApply2(target, receiver, args) { return Function.prototype.apply.call(target, receiver, args); }; var ReflectOwnKeys; if (R && typeof R.ownKeys === "function") { ReflectOwnKeys = R.ownKeys; } else if (Object.getOwnPropertySymbols) { ReflectOwnKeys = function ReflectOwnKeys2(target) { return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target)); }; } else { ReflectOwnKeys = function ReflectOwnKeys2(target) { return Object.getOwnPropertyNames(target); }; } function ProcessEmitWarning(warning) { if (console && console.warn) console.warn(warning); } var NumberIsNaN = Number.isNaN || function NumberIsNaN2(value) { return value !== value; }; function EventEmitter3() { EventEmitter3.init.call(this); } module.exports = EventEmitter3; module.exports.once = once; EventEmitter3.EventEmitter = EventEmitter3; EventEmitter3.prototype._events = void 0; EventEmitter3.prototype._eventsCount = 0; EventEmitter3.prototype._maxListeners = void 0; var defaultMaxListeners = 10; function checkListener(listener) { if (typeof listener !== "function") { throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); } } Object.defineProperty(EventEmitter3, "defaultMaxListeners", { enumerable: true, get: function() { return defaultMaxListeners; }, set: function(arg) { if (typeof arg !== "number" || arg < 0 || NumberIsNaN(arg)) { throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + "."); } defaultMaxListeners = arg; } }); EventEmitter3.init = function() { if (this._events === void 0 || this._events === Object.getPrototypeOf(this)._events) { this._events = /* @__PURE__ */ Object.create(null); this._eventsCount = 0; } this._maxListeners = this._maxListeners || void 0; }; EventEmitter3.prototype.setMaxListeners = function setMaxListeners(n) { if (typeof n !== "number" || n < 0 || NumberIsNaN(n)) { throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + "."); } this._maxListeners = n; return this; }; function _getMaxListeners(that) { if (that._maxListeners === void 0) return EventEmitter3.defaultMaxListeners; return that._maxListeners; } EventEmitter3.prototype.getMaxListeners = function getMaxListeners() { return _getMaxListeners(this); }; EventEmitter3.prototype.emit = function emit(type) { var args = []; for (var i = 1; i < arguments.length; i++) args.push(arguments[i]); var doError = type === "error"; var events2 = this._events; if (events2 !== void 0) doError = doError && events2.error === void 0; else if (!doError) return false; if (doError) { var er; if (args.length > 0) er = args[0]; if (er instanceof Error) { throw er; } var err2 = new Error("Unhandled error." + (er ? " (" + er.message + ")" : "")); err2.context = er; throw err2; } var handler = events2[type]; if (handler === void 0) return false; if (typeof handler === "function") { ReflectApply(handler, this, args); } else { var len = handler.length; var listeners = arrayClone(handler, len); for (var i = 0; i < len; ++i) ReflectApply(listeners[i], this, args); } return true; }; function _addListener(target, type, listener, prepend) { var m; var events2; var existing; checkListener(listener); events2 = target._events; if (events2 === void 0) { events2 = target._events = /* @__PURE__ */ Object.create(null); target._eventsCount = 0; } else { if (events2.newListener !== void 0) { target.emit( "newListener", type, listener.listener ? listener.listener : listener ); events2 = target._events; } existing = events2[type]; } if (existing === void 0) { existing = events2[type] = listener; ++target._eventsCount; } else { if (typeof existing === "function") { existing = events2[type] = prepend ? [listener, existing] : [existing, listener]; } else if (prepend) { existing.unshift(listener); } else { existing.push(listener); } m = _getMaxListeners(target); if (m > 0 && existing.length > m && !existing.warned) { existing.warned = true; var w = new Error("Possible EventEmitter memory leak detected. " + existing.length + " " + String(type) + " listeners added. Use emitter.setMaxListeners() to increase limit"); w.name = "MaxListenersExceededWarning"; w.emitter = target; w.type = type; w.count = existing.length; ProcessEmitWarning(w); } } return target; } EventEmitter3.prototype.addListener = function addListener(type, listener) { return _addListener(this, type, listener, false); }; EventEmitter3.prototype.on = EventEmitter3.prototype.addListener; EventEmitter3.prototype.prependListener = function prependListener(type, listener) { return _addListener(this, type, listener, true); }; function onceWrapper() { if (!this.fired) { this.target.removeListener(this.type, this.wrapFn); this.fired = true; if (arguments.length === 0) return this.listener.call(this.target); return this.listener.apply(this.target, arguments); } } function _onceWrap(target, type, listener) { var state = { fired: false, wrapFn: void 0, target, type, listener }; var wrapped = onceWrapper.bind(state); wrapped.listener = listener; state.wrapFn = wrapped; return wrapped; } EventEmitter3.prototype.once = function once2(type, listener) { checkListener(listener); this.on(type, _onceWrap(this, type, listener)); return this; }; EventEmitter3.prototype.prependOnceListener = function prependOnceListener(type, listener) { checkListener(listener); this.prependListener(type, _onceWrap(this, type, listener)); return this; }; EventEmitter3.prototype.removeListener = function removeListener(type, listener) { var list, events2, position, i, originalListener; checkListener(listener); events2 = this._events; if (events2 === void 0) return this; list = events2[type]; if (list === void 0) return this; if (list === listener || list.listener === listener) { if (--this._eventsCount === 0) this._events = /* @__PURE__ */ Object.create(null); else { delete events2[type]; if (events2.removeListener) this.emit("removeListener", type, list.listener || listener); } } else if (typeof list !== "function") { position = -1; for (i = list.length - 1; i >= 0; i--) { if (list[i] === listener || list[i].listener === listener) { originalListener = list[i].listener; position = i; break; } } if (position < 0) return this; if (position === 0) list.shift(); else { spliceOne(list, position); } if (list.length === 1) events2[type] = list[0]; if (events2.removeListener !== void 0) this.emit("removeListener", type, originalListener || listener); } return this; }; EventEmitter3.prototype.off = EventEmitter3.prototype.removeListener; EventEmitter3.prototype.removeAllListeners = function removeAllListeners(type) { var listeners, events2, i; events2 = this._events; if (events2 === void 0) return this; if (events2.removeListener === void 0) { if (arguments.length === 0) { this._events = /* @__PURE__ */ Object.create(null); this._eventsCount = 0; } else if (events2[type] !== void 0) { if (--this._eventsCount === 0) this._events = /* @__PURE__ */ Object.create(null); else delete events2[type]; } return this; } if (arguments.length === 0) { var keys = Object.keys(events2); var key; for (i = 0; i < keys.length; ++i) { key = keys[i]; if (key === "removeListener") continue; this.removeAllListeners(key); } this.removeAllListeners("removeListener"); this._events = /* @__PURE__ */ Object.create(null); this._eventsCount = 0; return this; } listeners = events2[type]; if (typeof listeners === "function") { this.removeListener(type, listeners); } else if (listeners !== void 0) { for (i = listeners.length - 1; i >= 0; i--) { this.removeListener(type, listeners[i]); } } return this; }; function _listeners(target, type, unwrap) { var events2 = target._events; if (events2 === void 0) return []; var evlistener = events2[type]; if (evlistener === void 0) return []; if (typeof evlistener === "function") return unwrap ? [evlistener.listener || evlistener] : [evlistener]; return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); } EventEmitter3.prototype.listeners = function listeners(type) { return _listeners(this, type, true); }; EventEmitter3.prototype.rawListeners = function rawListeners(type) { return _listeners(this, type, false); }; EventEmitter3.listenerCount = function(emitter, type) { if (typeof emitter.listenerCount === "function") { return emitter.listenerCount(type); } else { return listenerCount.call(emitter, type); } }; EventEmitter3.prototype.listenerCount = listenerCount; function listenerCount(type) { var events2 = this._events; if (events2 !== void 0) { var evlistener = events2[type]; if (typeof evlistener === "function") { return 1; } else if (evlistener !== void 0) { return evlistener.length; } } return 0; } EventEmitter3.prototype.eventNames = function eventNames() { return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; }; function arrayClone(arr, n) { var copy = new Array(n); for (var i = 0; i < n; ++i) copy[i] = arr[i]; return copy; } function spliceOne(list, index) { for (; index + 1 < list.length; index++) list[index] = list[index + 1]; list.pop(); } function unwrapListeners(arr) { var ret = new Array(arr.length); for (var i = 0; i < ret.length; ++i) { ret[i] = arr[i].listener || arr[i]; } return ret; } function once(emitter, name) { return new Promise(function(resolve, reject) { function errorListener(err2) { emitter.removeListener(name, resolver); reject(err2); } function resolver() { if (typeof emitter.removeListener === "function") { emitter.removeListener("error", errorListener); } resolve([].slice.call(arguments)); } ; eventTargetAgnosticAddListener(emitter, name, resolver, { once: true }); if (name !== "error") { addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true }); } }); } function addErrorHandlerIfEventEmitter(emitter, handler, flags) { if (typeof emitter.on === "function") { eventTargetAgnosticAddListener(emitter, "error", handler, flags); } } function eventTargetAgnosticAddListener(emitter, name, listener, flags) { if (typeof emitter.on === "function") { if (flags.once) { emitter.once(name, listener); } else { emitter.on(name, listener); } } else if (typeof emitter.addEventListener === "function") { emitter.addEventListener(name, function wrapListener(arg) { if (flags.once) { emitter.removeEventListener(name, wrapListener); } listener(arg); }); } else { throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter); } } } }); // ../../.cache/deno/deno_esbuild/registry.npmjs.org/lufi-sjcl@1.0.8/node_modules/lufi-sjcl/sjcl.js var require_sjcl = __commonJS({ "../../.cache/deno/deno_esbuild/registry.npmjs.org/lufi-sjcl@1.0.8/node_modules/lufi-sjcl/sjcl.js"(exports, module) { "use strict"; var sjcl2 = { cipher: {}, hash: {}, keyexchange: {}, mode: {}, misc: {}, codec: {}, exception: { corrupt: function(a) { this.toString = function() { return "CORRUPT: " + this.message; }; this.message = a; }, invalid: function(a) { this.toString = function() { return "INVALID: " + this.message; }; this.message = a; }, bug: function(a) { this.toString = function() { return "BUG: " + this.message; }; this.message = a; }, notReady: function(a) { this.toString = function() { return "NOT READY: " + this.message; }; this.message = a; } } }; sjcl2.cipher.aes = function(a) { this.w[0][0][0] || this.C(); var b, c, d, e, f = this.w[0][4], g = this.w[1]; b = a.length; var h = 1; if (4 !== b && 6 !== b && 8 !== b) throw new sjcl2.exception.invalid("invalid aes key size"); this.b = [d = a.slice(0), e = []]; for (a = b; a < 4 * b + 28; a++) { c = d[a - 1]; if (0 === a % b || 8 === b && 4 === a % b) c = f[c >>> 24] << 24 ^ f[c >> 16 & 255] << 16 ^ f[c >> 8 & 255] << 8 ^ f[c & 255], 0 === a % b && (c = c << 8 ^ c >>> 24 ^ h << 24, h = h << 1 ^ 283 * (h >> 7)); d[a] = d[a - b] ^ c; } for (b = 0; a; b++, a--) c = d[b & 3 ? a : a - 4], e[b] = 4 >= a || 4 > b ? c : g[0][f[c >>> 24]] ^ g[1][f[c >> 16 & 255]] ^ g[2][f[c >> 8 & 255]] ^ g[3][f[c & 255]]; }; sjcl2.cipher.aes.prototype = { encrypt: function(a) { return aa(this, a, 0); }, decrypt: function(a) { return aa(this, a, 1); }, w: [[[], [], [], [], []], [[], [], [], [], []]], C: function() { var a = this.w[0], b = this.w[1], c = a[4], d = b[4], e, f, g, h = [], k = [], n, l, m, p; for (e = 0; 256 > e; e++) k[(h[e] = e << 1 ^ 283 * (e >> 7)) ^ e] = e; for (f = g = 0; !c[f]; f ^= n || 1, g = k[g] || 1) for (m = g ^ g << 1 ^ g << 2 ^ g << 3 ^ g << 4, m = m >> 8 ^ m & 255 ^ 99, c[f] = m, d[m] = f, l = h[e = h[n = h[f]]], p = 16843009 * l ^ 65537 * e ^ 257 * n ^ 16843008 * f, l = 257 * h[m] ^ 16843008 * m, e = 0; 4 > e; e++) a[e][f] = l = l << 24 ^ l >>> 8, b[e][m] = p = p << 24 ^ p >>> 8; for (e = 0; 5 > e; e++) a[e] = a[e].slice(0), b[e] = b[e].slice(0); } }; function aa(a, b, c) { if (4 !== b.length) throw new sjcl2.exception.invalid("invalid aes block size"); var d = a.b[c], e = b[0] ^ d[0], f = b[c ? 3 : 1] ^ d[1], g = b[2] ^ d[2]; b = b[c ? 1 : 3] ^ d[3]; var h, k, n, l = d.length / 4 - 2, m, p = 4, z = [0, 0, 0, 0]; h = a.w[c]; a = h[0]; var A = h[1], C = h[2], B = h[3], D = h[4]; for (m = 0; m < l; m++) h = a[e >>> 24] ^ A[f >> 16 & 255] ^ C[g >> 8 & 255] ^ B[b & 255] ^ d[p], k = a[f >>> 24] ^ A[g >> 16 & 255] ^ C[b >> 8 & 255] ^ B[e & 255] ^ d[p + 1], n = a[g >>> 24] ^ A[b >> 16 & 255] ^ C[e >> 8 & 255] ^ B[f & 255] ^ d[p + 2], b = a[b >>> 24] ^ A[e >> 16 & 255] ^ C[f >> 8 & 255] ^ B[g & 255] ^ d[p + 3], p += 4, e = h, f = k, g = n; for (m = 0; 4 > m; m++) z[c ? 3 & -m : m] = D[e >>> 24] << 24 ^ D[f >> 16 & 255] << 16 ^ D[g >> 8 & 255] << 8 ^ D[b & 255] ^ d[p++], h = e, e = f, f = g, g = b, b = h; return z; } sjcl2.bitArray = { bitSlice: function(a, b, c) { a = sjcl2.bitArray.Y(a.slice(b / 32), 32 - (b & 31)).slice(1); return void 0 === c ? a : sjcl2.bitArray.clamp(a, c - b); }, extract: function(a, b, c) { var d = Math.floor(-b - c & 31); return ((b + c - 1 ^ b) & -32 ? a[b / 32 | 0] << 32 - d ^ a[b / 32 + 1 | 0] >>> d : a[b / 32 | 0] >>> d) & (1 << c) - 1; }, concat: function(a, b) { if (0 === a.length || 0 === b.length) return a.concat(b); var c = a[a.length - 1], d = sjcl2.bitArray.getPartial(c); return 32 === d ? a.concat(b) : sjcl2.bitArray.Y(b, d, c | 0, a.slice(0, a.length - 1)); }, bitLength: function(a) { var b = a.length; return 0 === b ? 0 : 32 * (b - 1) + sjcl2.bitArray.getPartial(a[b - 1]); }, clamp: function(a, b) { if (32 * a.length < b) return a; a = a.slice(0, Math.ceil(b / 32)); var c = a.length; b = b & 31; 0 < c && b && (a[c - 1] = sjcl2.bitArray.partial(b, a[c - 1] & 2147483648 >> b - 1, 1)); return a; }, partial: function(a, b, c) { return 32 === a ? b : (c ? b | 0 : b << 32 - a) + 1099511627776 * a; }, getPartial: function(a) { return Math.round(a / 1099511627776) || 32; }, equal: function(a, b) { if (sjcl2.bitArray.bitLength(a) !== sjcl2.bitArray.bitLength(b)) return false; var c = 0, d; for (d = 0; d < a.length; d++) c |= a[d] ^ b[d]; return 0 === c; }, Y: function(a, b, c, d) { var e; e = 0; for (void 0 === d && (d = []); 32 <= b; b -= 32) d.push(c), c = 0; if (0 === b) return d.concat(a); for (e = 0; e < a.length; e++) d.push(c | a[e] >>> b), c = a[e] << 32 - b; e = a.length ? a[a.length - 1] : 0; a = sjcl2.bitArray.getPartial(e); d.push(sjcl2.bitArray.partial(b + a & 31, 32 < b + a ? c : d.pop(), 1)); return d; }, P: function(a, b) { return [a[0] ^ b[0], a[1] ^ b[1], a[2] ^ b[2], a[3] ^ b[3]]; }, byteswapM: function(a) { var b, c; for (b = 0; b < a.length; ++b) c = a[b], a[b] = c >>> 24 | c >>> 8 & 65280 | (c & 65280) << 8 | c << 24; return a; } }; sjcl2.codec.utf8String = { fromBits: function(a) { var b = "", c = sjcl2.bitArray.bitLength(a), d, e; for (d = 0; d < c / 8; d++) 0 === (d & 3) && (e = a[d / 4]), b += String.fromCharCode(e >>> 8 >>> 8 >>> 8), e <<= 8; return decodeURIComponent(escape(b)); }, toBits: function(a) { a = unescape(encodeURIComponent(a)); var b = [], c, d = 0; for (c = 0; c < a.length; c++) d = d << 8 | a.charCodeAt(c), 3 === (c & 3) && (b.push(d), d = 0); c & 3 && b.push(sjcl2.bitArray.partial(8 * (c & 3), d)); return b; } }; sjcl2.codec.hex = { fromBits: function(a) { var b = "", c; for (c = 0; c < a.length; c++) b += ((a[c] | 0) + 263882790666240).toString(16).substr(4); return b.substr(0, sjcl2.bitArray.bitLength(a) / 4); }, toBits: function(a) { var b, c = [], d; a = a.replace(/\s|0x/g, ""); d = a.length; a = a + "00000000"; for (b = 0; b < a.length; b += 8) c.push(parseInt(a.substr(b, 8), 16) ^ 0); return sjcl2.bitArray.clamp(c, 4 * d); } }; sjcl2.codec.base64 = { S: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", fromBits: function(a, b, c) { var d = "", e = 0, f = sjcl2.codec.base64.S, g = 0, h = sjcl2.bitArray.bitLength(a); c && (f = f.substr(0, 62) + "-_"); for (c = 0; 6 * d.length < h; ) d += f.charAt((g ^ a[c] >>> e) >>> 26), 6 > e ? (g = a[c] << 6 - e, e += 26, c++) : (g <<= 6, e -= 6); for (; d.length & 3 && !b; ) d += "="; return d; }, toBits: function(a, b) { a = a.replace(/\s|=/g, ""); var c = [], d, e = 0, f = sjcl2.codec.base64.S, g = 0, h; b && (f = f.substr(0, 62) + "-_"); for (d = 0; d < a.length; d++) { h = f.indexOf(a.charAt(d)); if (0 > h) throw new sjcl2.exception.invalid("this isn't base64!"); 26 < e ? (e -= 26, c.push(g ^ h >>> e), g = h << 32 - e) : (e += 6, g ^= h << 32 - e); } e & 56 && c.push(sjcl2.bitArray.partial(e & 56, g, 1)); return c; } }; sjcl2.codec.base64url = { fromBits: function(a) { return sjcl2.codec.base64.fromBits(a, 1, 1); }, toBits: function(a) { return sjcl2.codec.base64.toBits(a, 1); } }; sjcl2.hash.sha256 = function(a) { this.b[0] || this.C(); a ? (this.g = a.g.slice(0), this.f = a.f.slice(0), this.c = a.c) : this.reset(); }; sjcl2.hash.sha256.hash = function(a) { return new sjcl2.hash.sha256().update(a).finalize(); }; sjcl2.hash.sha256.prototype = { blockSize: 512, reset: function() { this.g = this.o.slice(0); this.f = []; this.c = 0; return this; }, update: function(a) { "string" === typeof a && (a = sjcl2.codec.utf8String.toBits(a)); var b, c = this.f = sjcl2.bitArray.concat(this.f, a); b = this.c; a = this.c = b + sjcl2.bitArray.bitLength(a); if (9007199254740991 < a) throw new sjcl2.exception.invalid("Cannot hash more than 2^53 - 1 bits"); if ("undefined" !== typeof Uint32Array) { var d = new Uint32Array(c), e = 0; for (b = 512 + b - (512 + b & 511); b <= a; b += 512) this.l(d.subarray( 16 * e, 16 * (e + 1) )), e += 1; c.splice(0, 16 * e); } else for (b = 512 + b - (512 + b & 511); b <= a; b += 512) this.l(c.splice(0, 16)); return this; }, finalize: function() { var a, b = this.f, c = this.g, b = sjcl2.bitArray.concat(b, [sjcl2.bitArray.partial(1, 1)]); for (a = b.length + 2; a & 15; a++) b.push(0); b.push(Math.floor(this.c / 4294967296)); for (b.push(this.c | 0); b.length; ) this.l(b.splice(0, 16)); this.reset(); return c; }, o: [], b: [], C: function() { function a(a2) { return 4294967296 * (a2 - Math.floor(a2)) | 0; } for (var b = 0, c = 2, d, e; 64 > b; c++) { e = true; for (d = 2; d * d <= c; d++) if (0 === c % d) { e = false; break; } e && (8 > b && (this.o[b] = a(Math.pow(c, 0.5))), this.b[b] = a(Math.pow(c, 1 / 3)), b++); } }, l: function(a) { var b, c, d, e = this.g, f = this.b, g = e[0], h = e[1], k = e[2], n = e[3], l = e[4], m = e[5], p = e[6], z = e[7]; for (b = 0; 64 > b; b++) 16 > b ? c = a[b] : (c = a[b + 1 & 15], d = a[b + 14 & 15], c = a[b & 15] = (c >>> 7 ^ c >>> 18 ^ c >>> 3 ^ c << 25 ^ c << 14) + (d >>> 17 ^ d >>> 19 ^ d >>> 10 ^ d << 15 ^ d << 13) + a[b & 15] + a[b + 9 & 15] | 0), c = c + z + (l >>> 6 ^ l >>> 11 ^ l >>> 25 ^ l << 26 ^ l << 21 ^ l << 7) + (p ^ l & (m ^ p)) + f[b], z = p, p = m, m = l, l = n + c | 0, n = k, k = h, h = g, g = c + (h & k ^ n & (h ^ k)) + (h >>> 2 ^ h >>> 13 ^ h >>> 22 ^ h << 30 ^ h << 19 ^ h << 10) | 0; e[0] = e[0] + g | 0; e[1] = e[1] + h | 0; e[2] = e[2] + k | 0; e[3] = e[3] + n | 0; e[4] = e[4] + l | 0; e[5] = e[5] + m | 0; e[6] = e[6] + p | 0; e[7] = e[7] + z | 0; } }; sjcl2.hash.sha512 = function(a) { this.b[0] || this.C(); a ? (this.g = a.g.slice(0), this.f = a.f.slice(0), this.c = a.c) : this.reset(); }; sjcl2.hash.sha512.hash = function(a) { return new sjcl2.hash.sha512().update(a).finalize(); }; sjcl2.hash.sha512.prototype = { blockSize: 1024, reset: function() { this.g = this.o.slice(0); this.f = []; this.c = 0; return this; }, update: function(a) { "string" === typeof a && (a = sjcl2.codec.utf8String.toBits(a)); var b, c = this.f = sjcl2.bitArray.concat(this.f, a); b = this.c; a = this.c = b + sjcl2.bitArray.bitLength(a); if (9007199254740991 < a) throw new sjcl2.exception.invalid("Cannot hash more than 2^53 - 1 bits"); if ("undefined" !== typeof Uint32Array) { var d = new Uint32Array(c), e = 0; for (b = 1024 + b - (1024 + b & 1023); b <= a; b += 1024) this.l(d.subarray(32 * e, 32 * (e + 1))), e += 1; c.splice(0, 32 * e); } else for (b = 1024 + b - (1024 + b & 1023); b <= a; b += 1024) this.l(c.splice(0, 32)); return this; }, finalize: function() { var a, b = this.f, c = this.g, b = sjcl2.bitArray.concat(b, [sjcl2.bitArray.partial(1, 1)]); for (a = b.length + 4; a & 31; a++) b.push(0); b.push(0); b.push(0); b.push(Math.floor(this.c / 4294967296)); for (b.push(this.c | 0); b.length; ) this.l(b.splice(0, 32)); this.reset(); return c; }, o: [], ia: [12372232, 13281083, 9762859, 1914609, 15106769, 4090911, 4308331, 8266105], b: [], ka: [ 2666018, 15689165, 5061423, 9034684, 4764984, 380953, 1658779, 7176472, 197186, 7368638, 14987916, 16757986, 8096111, 1480369, 13046325, 6891156, 15813330, 5187043, 9229749, 11312229, 2818677, 10937475, 4324308, 1135541, 6741931, 11809296, 16458047, 15666916, 11046850, 698149, 229999, 945776, 13774844, 2541862, 12856045, 9810911, 11494366, 7844520, 15576806, 8533307, 15795044, 4337665, 16291729, 5553712, 15684120, 6662416, 7413802, 12308920, 13816008, 4303699, 9366425, 10176680, 13195875, 4295371, 6546291, 11712675, 15708924, 1519456, 15772530, 6568428, 6495784, 8568297, 13007125, 7492395, 2515356, 12632583, 14740254, 7262584, 1535930, 13146278, 16321966, 1853211, 294276, 13051027, 13221564, 1051980, 4080310, 6651434, 14088940, 4675607 ], C: function() { function a(a2) { return 4294967296 * (a2 - Math.floor(a2)) | 0; } function b(a2) { return 1099511627776 * (a2 - Math.floor(a2)) & 255; } for (var c = 0, d = 2, e, f; 80 > c; d++) { f = true; for (e = 2; e * e <= d; e++) if (0 === d % e) { f = false; break; } f && (8 > c && (this.o[2 * c] = a(Math.pow(d, 0.5)), this.o[2 * c + 1] = b(Math.pow(d, 0.5)) << 24 | this.ia[c]), this.b[2 * c] = a(Math.pow(d, 1 / 3)), this.b[2 * c + 1] = b(Math.pow(d, 1 / 3)) << 24 | this.ka[c], c++); } }, l: function(a) { var b, c, d = this.g, e = this.b, f = d[0], g = d[1], h = d[2], k = d[3], n = d[4], l = d[5], m = d[6], p = d[7], z = d[8], A = d[9], C = d[10], B = d[11], D = d[12], P = d[13], ea = d[14], Q = d[15], t; if ("undefined" !== typeof Uint32Array) { t = Array(160); for (var r = 0; 32 > r; r++) t[r] = a[r]; } else t = a; var r = f, u = g, G = h, E = k, H = n, F = l, V = m, I = p, w = z, v = A, R = C, J = B, S = D, K = P, W = ea, L = Q; for (a = 0; 80 > a; a++) { if (16 > a) b = t[2 * a], c = t[2 * a + 1]; else { c = t[2 * (a - 15)]; var q = t[2 * (a - 15) + 1]; b = (q << 31 | c >>> 1) ^ (q << 24 | c >>> 8) ^ c >>> 7; var x = (c << 31 | q >>> 1) ^ (c << 24 | q >>> 8) ^ (c << 25 | q >>> 7); c = t[2 * (a - 2)]; var y = t[2 * (a - 2) + 1], q = (y << 13 | c >>> 19) ^ (c << 3 | y >>> 29) ^ c >>> 6, y = (c << 13 | y >>> 19) ^ (y << 3 | c >>> 29) ^ (c << 26 | y >>> 6), X = t[2 * (a - 7)], Y = t[2 * (a - 16)], M = t[2 * (a - 16) + 1]; c = x + t[2 * (a - 7) + 1]; b = b + X + (c >>> 0 < x >>> 0 ? 1 : 0); c += y; b += q + (c >>> 0 < y >>> 0 ? 1 : 0); c += M; b += Y + (c >>> 0 < M >>> 0 ? 1 : 0); } t[2 * a] = b |= 0; t[2 * a + 1] = c |= 0; var X = w & R ^ ~w & S, fa = v & J ^ ~v & K, y = r & G ^ r & H ^ G & H, ja = u & E ^ u & F ^ E & F, Y = (u << 4 | r >>> 28) ^ (r << 30 | u >>> 2) ^ (r << 25 | u >>> 7), M = (r << 4 | u >>> 28) ^ (u << 30 | r >>> 2) ^ (u << 25 | r >>> 7), ka = e[2 * a], ga = e[2 * a + 1], q = L + ((w << 18 | v >>> 14) ^ (w << 14 | v >>> 18) ^ (v << 23 | w >>> 9)), x = W + ((v << 18 | w >>> 14) ^ (v << 14 | w >>> 18) ^ (w << 23 | v >>> 9)) + (q >>> 0 < L >>> 0 ? 1 : 0), q = q + fa, x = x + (X + (q >>> 0 < fa >>> 0 ? 1 : 0)), q = q + ga, x = x + (ka + (q >>> 0 < ga >>> 0 ? 1 : 0)), q = q + c | 0, x = x + (b + (q >>> 0 < c >>> 0 ? 1 : 0)); c = M + ja; b = Y + y + (c >>> 0 < M >>> 0 ? 1 : 0); W = S; L = K; S = R; K = J; R = w; J = v; v = I + q | 0; w = V + x + (v >>> 0 < I >>> 0 ? 1 : 0) | 0; V = H; I = F; H = G; F = E; G = r; E = u; u = q + c | 0; r = x + b + (u >>> 0 < q >>> 0 ? 1 : 0) | 0; } g = d[1] = g + u | 0; d[0] = f + r + (g >>> 0 < u >>> 0 ? 1 : 0) | 0; k = d[3] = k + E | 0; d[2] = h + G + (k >>> 0 < E >>> 0 ? 1 : 0) | 0; l = d[5] = l + F | 0; d[4] = n + H + (l >>> 0 < F >>> 0 ? 1 : 0) | 0; p = d[7] = p + I | 0; d[6] = m + V + (p >>> 0 < I >>> 0 ? 1 : 0) | 0; A = d[9] = A + v | 0; d[8] = z + w + (A >>> 0 < v >>> 0 ? 1 : 0) | 0; B = d[11] = B + J | 0; d[10] = C + R + (B >>> 0 < J >>> 0 ? 1 : 0) | 0; P = d[13] = P + K | 0; d[12] = D + S + (P >>> 0 < K >>> 0 ? 1 : 0) | 0; Q = d[15] = Q + L | 0; d[14] = ea + W + (Q >>> 0 < L >>> 0 ? 1 : 0) | 0; } }; sjcl2.mode.ccm = { name: "ccm", F: [], listenProgress: function(a) { sjcl2.mode.ccm.F.push(a); }, unListenProgress: function(a) { a = sjcl2.mode.ccm.F.indexOf(a); -1 < a && sjcl2.mode.ccm.F.splice(a, 1); }, da: function(a) { var b = sjcl2.mode.ccm.F.slice(), c; for (c = 0; c < b.length; c += 1) b[c](a); }, encrypt: function(a, b, c, d, e) { var f, g = b.slice(0), h = sjcl2.bitArray, k = h.bitLength(c) / 8, n = h.bitLength(g) / 8; e = e || 64; d = d || []; if (7 > k) throw new sjcl2.exception.invalid("ccm: iv must be at least 7 bytes"); for (f = 2; 4 > f && n >>> 8 * f; f++) ; f < 15 - k && (f = 15 - k); c = h.clamp( c, 8 * (15 - f) ); b = sjcl2.mode.ccm.U(a, b, c, d, e, f); g = sjcl2.mode.ccm.V(a, g, c, b, e, f); return h.concat(g.data, g.tag); }, decrypt: function(a, b, c, d, e) { e = e || 64; d = d || []; var f = sjcl2.bitArray, g = f.bitLength(c) / 8, h = f.bitLength(b), k = f.clamp(b, h - e), n = f.bitSlice(b, h - e), h = (h - e) / 8; if (7 > g) throw new sjcl2.exception.invalid("ccm: iv must be at least 7 bytes"); for (b = 2; 4 > b && h >>> 8 * b; b++) ; b < 15 - g && (b = 15 - g); c = f.clamp(c, 8 * (15 - b)); k = sjcl2.mode.ccm.V(a, k, c, n, e, b); a = sjcl2.mode.ccm.U(a, k.data, c, d, e, b); if (!f.equal(k.tag, a)) throw new sjcl2.exception.corrupt("ccm: tag doesn't match"); return k.data; }, ma: function(a, b, c, d, e, f) { var g = [], h = sjcl2.bitArray, k = h.P; d = [h.partial(8, (b.length ? 64 : 0) | d - 2 << 2 | f - 1)]; d = h.concat(d, c); d[3] |= e; d = a.encrypt(d); if (b.length) for (c = h.bitLength(b) / 8, 65279 >= c ? g = [h.partial(16, c)] : 4294967295 >= c && (g = h.concat([h.partial(16, 65534)], [c])), g = h.concat(g, b), b = 0; b < g.length; b += 4) d = a.encrypt(k(d, g.slice(b, b + 4).concat([0, 0, 0]))); return d; }, U: function(a, b, c, d, e, f) { var g = sjcl2.bitArray, h = g.P; e /= 8; if (e % 2 || 4 > e || 16 < e) throw new sjcl2.exception.invalid("ccm: invalid tag length"); if (4294967295 < d.length || 4294967295 < b.length) throw new sjcl2.exception.bug("ccm: can't deal with 4GiB or more data"); c = sjcl2.mode.ccm.ma(a, d, c, e, g.bitLength(b) / 8, f); for (d = 0; d < b.length; d += 4) c = a.encrypt(h(c, b.slice(d, d + 4).concat([0, 0, 0]))); return g.clamp(c, 8 * e); }, V: function(a, b, c, d, e, f) { var g, h = sjcl2.bitArray; g = h.P; var k = b.length, n = h.bitLength(b), l = k / 50, m = l; c = h.concat([h.partial(8, f - 1)], c).concat([0, 0, 0]).slice(0, 4); d = h.bitSlice(g(d, a.encrypt(c)), 0, e); if (!k) return { tag: d, data: [] }; for (g = 0; g < k; g += 4) g > l && (sjcl2.mode.ccm.da(g / k), l += m), c[3]++, e = a.encrypt(c), b[g] ^= e[0], b[g + 1] ^= e[1], b[g + 2] ^= e[2], b[g + 3] ^= e[3]; return { tag: d, data: h.clamp(b, n) }; } }; sjcl2.misc.hmac = function(a, b) { this.W = b = b || sjcl2.hash.sha256; var c = [[], []], d, e = b.prototype.blockSize / 32; this.B = [new b(), new b()]; a.length > e && (a = b.hash(a)); for (d = 0; d < e; d++) c[0][d] = a[d] ^ 909522486, c[1][d] = a[d] ^ 1549556828; this.B[0].update(c[0]); this.B[1].update(c[1]); this.O = new b(this.B[0]); }; sjcl2.misc.hmac.prototype.encrypt = sjcl2.misc.hmac.prototype.mac = function(a) { if (this.Z) throw new sjcl2.exception.invalid("encrypt on already updated hmac called!"); this.update(a); return this.digest(a); }; sjcl2.misc.hmac.prototype.reset = function() { this.O = new this.W(this.B[0]); this.Z = false; }; sjcl2.misc.hmac.prototype.update = function(a) { this.Z = true; this.O.update(a); }; sjcl2.misc.hmac.prototype.digest = function() { var a = this.O.finalize(), a = new this.W(this.B[1]).update(a).finalize(); this.reset(); return a; }; sjcl2.misc.pbkdf2 = function(a, b, c, d, e) { c = c || 1e4; if (0 > d || 0 > c) throw new sjcl2.exception.invalid("invalid params to pbkdf2"); "string" === typeof a && (a = sjcl2.codec.utf8String.toBits(a)); "string" === typeof b && (b = sjcl2.codec.utf8String.toBits(b)); e = e || sjcl2.misc.hmac; a = new e(a); var f, g, h, k, n = [], l = sjcl2.bitArray; for (k = 1; 32 * n.length < (d || 1); k++) { e = f = a.encrypt(l.concat(b, [k])); for (g = 1; g < c; g++) for (f = a.encrypt(f), h = 0; h < f.length; h++) e[h] ^= f[h]; n = n.concat(e); } d && (n = l.clamp(n, d)); return n; }; sjcl2.prng = function(a) { this.h = [new sjcl2.hash.sha256()]; this.s = [0]; this.N = 0; this.G = {}; this.M = 0; this.T = {}; this.X = this.i = this.u = this.fa = 0; this.b = [0, 0, 0, 0, 0, 0, 0, 0]; this.m = [0, 0, 0, 0]; this.K = void 0; this.L = a; this.D = false; this.J = { progress: {}, seeded: {} }; this.A = this.ea = 0; this.H = 1; this.I = 2; this.aa = 65536; this.R = [0, 48, 64, 96, 128, 192, 256, 384, 512, 768, 1024]; this.ba = 3e4; this.$ = 80; }; sjcl2.prng.prototype = { randomWords: function(a, b) { var c = [], d; d = this.isReady(b); var e; if (d === this.A) throw new sjcl2.exception.notReady("generator isn't seeded"); if (d & this.I) { d = !(d & this.H); e = []; var f = 0, g; this.X = e[0] = (/* @__PURE__ */ new Date()).valueOf() + this.ba; for (g = 0; 16 > g; g++) e.push(4294967296 * Math.random() | 0); for (g = 0; g < this.h.length && (e = e.concat(this.h[g].finalize()), f += this.s[g], this.s[g] = 0, d || !(this.N & 1 << g)); g++) ; this.N >= 1 << this.h.length && (this.h.push(new sjcl2.hash.sha256()), this.s.push(0)); this.i -= f; f > this.u && (this.u = f); this.N++; this.b = sjcl2.hash.sha256.hash(this.b.concat(e)); this.K = new sjcl2.cipher.aes(this.b); for (d = 0; 4 > d && (this.m[d] = this.m[d] + 1 | 0, !this.m[d]); d++) ; } for (d = 0; d < a; d += 4) 0 === (d + 1) % this.aa && ba(this), e = N(this), c.push(e[0], e[1], e[2], e[3]); ba(this); return c.slice(0, a); }, setDefaultParanoia: function(a, b) { if (0 === a && "Setting paranoia=0 will ruin your security; use it only for testing" !== b) throw new sjcl2.exception.invalid("Setting paranoia=0 will ruin your security; use it only for testing"); this.L = a; }, addEntropy: function(a, b, c) { c = c || "user"; var d, e, f = (/* @__PURE__ */ new Date()).valueOf(), g = this.G[c], h = this.isReady(), k = 0; d = this.T[c]; void 0 === d && (d = this.T[c] = this.fa++); void 0 === g && (g = this.G[c] = 0); this.G[c] = (this.G[c] + 1) % this.h.length; switch (typeof a) { case "number": void 0 === b && (b = 1); this.h[g].update([d, this.M++, 1, b, f, 1, a | 0]); break; case "object": c = Object.prototype.toString.call(a); if ("[object Uint32Array]" === c) { e = []; for (c = 0; c < a.length; c++) e.push(a[c]); a = e; } else for ("[object Array]" !== c && (k = 1), c = 0; c < a.length && !k; c++) "number" !== typeof a[c] && (k = 1); if (!k) { if (void 0 === b) for (c = b = 0; c < a.length; c++) for (e = a[c]; 0 < e; ) b++, e = e >>> 1; this.h[g].update([d, this.M++, 2, b, f, a.length].concat(a)); } break; case "string": void 0 === b && (b = a.length); this.h[g].update([d, this.M++, 3, b, f, a.length]); this.h[g].update(a); break; default: k = 1; } if (k) throw new sjcl2.exception.bug("random: addEntropy only supports number, array of numbers or string"); this.s[g] += b; this.i += b; h === this.A && (this.isReady() !== this.A && ca("seeded", Math.max(this.u, this.i)), ca("progress", this.getProgress())); }, isReady: function(a) { a = this.R[void 0 !== a ? a : this.L]; return this.u && this.u >= a ? this.s[0] > this.$ && (/* @__PURE__ */ new Date()).valueOf() > this.X ? this.I | this.H : this.H : this.i >= a ? this.I | this.A : this.A; }, getProgress: function(a) { a = this.R[a ? a : this.L]; return this.u >= a ? 1 : this.i > a ? 1 : this.i / a; }, startCollectors: function() { if (!this.D) { this.a = { loadTimeCollector: O(this, this.la), mouseCollector: O(this, this.na), keyboardCollector: O(this, this.ja), accelerometerCollector: O(this, this.ca), touchCollector: O(this, this.pa) }; if (window.addEventListener) window.addEventListener( "load", this.a.loadTimeCollector, false ), window.addEventListener("mousemove", this.a.mouseCollector, false), window.addEventListener("keypress", this.a.keyboardCollector, false), window.addEventListener("devicemotion", this.a.accelerometerCollector, false), window.addEventListener("touchmove", this.a.touchCollector, false); else if (document.attachEvent) document.attachEvent("onload", this.a.loadTimeCollector), document.attachEvent("onmousemove", this.a.mouseCollector), document.attachEvent("keypress", this.a.keyboardCollector); else throw new sjcl2.exception.bug("can't attach event"); this.D = true; } }, stopCollectors: function() { this.D && (window.removeEventListener ? (window.removeEventListener("load", this.a.loadTimeCollector, false), window.removeEventListener("mousemove", this.a.mouseCollector, false), window.removeEventListener("keypress", this.a.keyboardCollector, false), window.removeEventListener("devicemotion", this.a.accelerometerCollector, false), window.removeEventListener("touchmove", this.a.touchCollector, false)) : document.detachEvent && (document.detachEvent("onload", this.a.loadTimeCollector), document.detachEvent( "onmousemove", this.a.mouseCollector ), document.detachEvent("keypress", this.a.keyboardCollector)), this.D = false); }, addEventListener: function(a, b) { this.J[a][this.ea++] = b; }, removeEventListener: function(a, b) { var c, d, e = this.J[a], f = []; for (d in e) e.hasOwnProperty(d) && e[d] === b && f.push(d); for (c = 0; c < f.length; c++) d = f[c], delete e[d]; }, ja: function() { T(this, 1); }, na: function(a) { var b, c; try { b = a.x || a.clientX || a.offsetX || 0, c = a.y || a.clientY || a.offsetY || 0; } catch (d) { c = b = 0; } 0 != b && 0 != c && this.addEntropy([b, c], 2, "mouse"); T(this, 0); }, pa: function(a) { a = a.touches[0] || a.changedTouches[0]; this.addEntropy([a.pageX || a.clientX, a.pageY || a.clientY], 1, "touch"); T(this, 0); }, la: function() { T(this, 2); }, ca: function(a) { a = a.accelerationIncludingGravity.x || a.accelerationIncludingGravity.y || a.accelerationIncludingGravity.z; if (window.orientation) { var b = window.orientation; "number" === typeof b && this.addEntropy(b, 1, "accelerometer"); } a && this.addEntropy(a, 2, "accelerometer"); T(this, 0); } }; function ca(a, b) { var c, d = sjcl2.random.J[a], e = []; for (c in d) d.hasOwnProperty(c) && e.push(d[c]); for (c = 0; c < e.length; c++) e[c](b); } function T(a, b) { "undefined" !== typeof window && window.performance && "function" === typeof window.performance.now ? a.addEntropy(window.performance.now(), b, "loadtime") : a.addEntropy((/* @__PURE__ */ new Date()).valueOf(), b, "loadtime"); } function ba(a) { a.b = N(a).concat(N(a)); a.K = new sjcl2.cipher.aes(a.b); } function N(a) { for (var b = 0; 4 > b && (a.m[b] = a.m[b] + 1 | 0, !a.m[b]); b++) ; return a.K.encrypt(a.m); } function O(a, b) { return function() { b.apply(a, arguments); }; } sjcl2.random = new sjcl2.prng(6); a: try { if (ha = "undefined" !== typeof module && module.exports) { try { ia = __require("crypto"); } catch (a) { ia = null; } ha = da = ia; } if (ha && da.randomBytes) U = da.randomBytes(128), U = new Uint32Array(new Uint8Array(U).buffer), sjcl2.random.addEntropy(U, 1024, "crypto['randomBytes']"); else if ("undefined" !== typeof window && "undefined" !== typeof Uint32Array) { Z = new Uint32Array(32); if (window.crypto && window.crypto.getRandomValues) window.crypto.getRandomValues(Z); else if (window.msCrypto && window.msCrypto.getRandomValues) window.msCrypto.getRandomValues(Z); else break a; sjcl2.random.addEntropy(Z, 1024, "crypto['getRandomValues']"); } } catch (a) { "undefined" !== typeof window && window.console && (console.log("There was an error collecting entropy from the browser:"), console.log(a)); } var U; var da; var Z; var ha; var ia; sjcl2.json = { defaults: { v: 1, iter: 1e4, ks: 128, ts: 64, mode: "ccm", adata: "", cipher: "aes" }, ha: function(a, b, c, d) { c = c || {}; d = d || {}; var e = sjcl2.json, f = e.j({ iv: sjcl2.random.randomWords(4, 0) }, e.defaults), g; e.j(f, c); c = f.adata; "string" === typeof f.salt && (f.salt = sjcl2.codec.base64.toBits(f.salt)); "string" === typeof f.iv && (f.iv = sjcl2.codec.base64.toBits(f.iv)); if (!sjcl2.mode[f.mode] || !sjcl2.cipher[f.cipher] || "string" === typeof a && 100 >= f.iter || 64 !== f.ts && 96 !== f.ts && 128 !== f.ts || 128 !== f.ks && 192 !== f.ks && 256 !== f.ks || 2 > f.iv.length || 4 < f.iv.length) throw new sjcl2.exception.invalid("json encrypt: invalid parameters"); "string" === typeof a ? (g = sjcl2.misc.cachedPbkdf2(a, f), a = g.key.slice(0, f.ks / 32), f.salt = g.salt) : sjcl2.ecc && a instanceof sjcl2.ecc.elGamal.publicKey && (g = a.kem(), f.kemtag = g.tag, a = g.key.slice(0, f.ks / 32)); "string" === typeof b && (b = sjcl2.codec.utf8String.toBits(b)); "string" === typeof c && (f.adata = c = sjcl2.codec.utf8String.toBits(c)); g = new sjcl2.cipher[f.cipher](a); e.j(d, f); d.key = a; f.ct = "ccm" === f.mode && sjcl2.arrayBuffer && sjcl2.arrayBuffer.ccm && b instanceof ArrayBuffer ? sjcl2.arrayBuffer.ccm.encrypt(g, b, f.iv, c, f.ts) : sjcl2.mode[f.mode].encrypt(g, b, f.iv, c, f.ts); return f; }, encrypt: function(a, b, c, d) { var e = sjcl2.json, f = e.ha.apply(e, arguments); return e.encode(f); }, ga: function(a, b, c, d) { c = c || {}; d = d || {}; var e = sjcl2.json; b = e.j(e.j(e.j({}, e.defaults), b), c, true); var f, g; f = b.adata; "string" === typeof b.salt && (b.salt = sjcl2.codec.base64.toBits(b.salt)); "string" === typeof b.iv && (b.iv = sjcl2.codec.base64.toBits(b.iv)); if (!sjcl2.mode[b.mode] || !sjcl2.cipher[b.cipher] || "string" === typeof a && 100 >= b.iter || 64 !== b.ts && 96 !== b.ts && 128 !== b.ts || 128 !== b.ks && 192 !== b.ks && 256 !== b.ks || !b.iv || 2 > b.iv.length || 4 < b.iv.length) throw new sjcl2.exception.invalid("json decrypt: invalid parameters"); "string" === typeof a ? (g = sjcl2.misc.cachedPbkdf2(a, b), a = g.key.slice(0, b.ks / 32), b.salt = g.salt) : sjcl2.ecc && a instanceof sjcl2.ecc.elGamal.secretKey && (a = a.unkem(sjcl2.codec.base64.toBits(b.kemtag)).slice(0, b.ks / 32)); "string" === typeof f && (f = sjcl2.codec.utf8String.toBits(f)); g = new sjcl2.cipher[b.cipher](a); f = "ccm" === b.mode && sjcl2.arrayBuffer && sjcl2.arrayBuffer.ccm && b.ct instanceof ArrayBuffer ? sjcl2.arrayBuffer.ccm.decrypt(g, b.ct, b.iv, b.tag, f, b.ts) : sjcl2.mode[b.mode].decrypt(g, b.ct, b.iv, f, b.ts); e.j(d, b); d.key = a; return 1 === c.raw ? f : sjcl2.codec.utf8String.fromBits(f); }, decrypt: function(a, b, c, d) { var e = sjcl2.json; return e.ga(a, e.decode(b), c, d); }, encode: function(a) { var b, c = "{", d = ""; for (b in a) if (a.hasOwnProperty(b)) { if (!b.match(/^[a-z0-9]+$/i)) throw new sjcl2.exception.invalid("json encode: invalid property name"); c += d + '"' + b + '":'; d = ","; switch (typeof a[b]) { case "number": case "boolean": c += a[b]; break; case "string": c += '"' + escape(a[b]) + '"'; break; case "object": c += '"' + sjcl2.codec.base64.fromBits(a[b], 0) + '"'; break; default: throw new sjcl2.exception.bug("json encode: unsupported type"); } } return c + "}"; }, decode: function(a) { a = a.replace(/\s/g, ""); if (!a.match(/^\{.*\}$/)) throw new sjcl2.exception.invalid("json decode: this isn't json!"); a = a.replace(/^\{|\}$/g, "").split(/,/); var b = {}, c, d; for (c = 0; c < a.length; c++) { if (!(d = a[c].match(/^\s*(?:(["']?)([a-z][a-z0-9]*)\1)\s*:\s*(?:(-?\d+)|"([a-z0-9+\/%*_.@=\-]*)"|(true|false))$/i))) throw new sjcl2.exception.invalid("json decode: this isn't json!"); null != d[3] ? b[d[2]] = parseInt(d[3], 10) : null != d[4] ? b[d[2]] = d[2].match(/^(ct|adata|salt|iv)$/) ? sjcl2.codec.base64.toBits(d[4]) : unescape(d[4]) : null != d[5] && (b[d[2]] = "true" === d[5]); } return b; }, j: function(a, b, c) { void 0 === a && (a = {}); if (void 0 === b) return a; for (var d in b) if (b.hasOwnProperty(d)) { if (c && void 0 !== a[d] && a[d] !== b[d]) throw new sjcl2.exception.invalid("required parameter overridden"); a[d] = b[d]; } return a; }, ra: function(a, b) { var c = {}, d; for (d in a) a.hasOwnProperty(d) && a[d] !== b[d] && (c[d] = a[d]); return c; }, qa: function(a, b) { var c = {}, d; for (d = 0; d < b.length; d++) void 0 !== a[b[d]] && (c[b[d]] = a[b[d]]); return c; } }; sjcl2.encrypt = sjcl2.json.encrypt; sjcl2.decrypt = sjcl2.json.decrypt; sjcl2.misc.oa = {}; sjcl2.misc.cachedPbkdf2 = function(a, b) { var c = sjcl2.misc.oa, d; b = b || {}; d = b.iter || 1e3; c = c[a] = c[a] || {}; d = c[d] = c[d] || { firstSalt: b.salt && b.salt.length ? b.salt.slice(0) : sjcl2.random.randomWords(2, 0) }; c = void 0 === b.salt ? d.firstSalt : b.salt; d[c] = d[c] || sjcl2.misc.pbkdf2(a, c, b.iter); return { key: d[c].slice(0), salt: c.slice(0) }; }; "undefined" !== typeof module && module.exports && (module.exports = sjcl2); "function" === typeof define && define([], function() { return sjcl2; }); } }); // https://jsr.io/@booteille/lufi-api/0.3.0/src/api/lufi.ts var lufi_exports = {}; __export(lufi_exports, { addFilesToArchive: () => addFilesToArchive, cancel: () => cancel, compress: () => compress, decompress: () => decompress, download: () => download, events: () => events, getFileIndexInQueue: () => getFileIndexInQueue, infos: () => infos, pause: () => pause, remove: () => remove, resume: () => resume, upload: () => upload }); import EventEmitter2 from "node:events"; // ../../.cache/deno/deno_esbuild/registry.npmjs.org/neverthrow@8.2.0/node_modules/neverthrow/dist/index.es.js var defaultErrorConfig = { withStackTrace: false }; var createNeverThrowError = (message, result, config = defaultErrorConfig) => { const data = result.isOk() ? { type: "Ok", value: result.value } : { type: "Err", value: result.error }; const maybeStack = config.withStackTrace ? new Error().stack : void 0; return { data, message, stack: maybeStack }; }; function __awaiter(thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function(resolve) { resolve(value); }); } return new (P || (P = Promise))(function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); } function __values(o) { var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; if (m) return m.call(o); if (o && typeof o.length === "number") return { next: function() { if (o && i >= o.length) o = void 0; return { value: o && o[i++], done: !o }; } }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); } function __await(v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } function __asyncGenerator(thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var g = generator.apply(thisArg, _arguments || []), i, q = []; return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function() { return this; }, i; function awaitReturn(f) { return function(v) { return Promise.resolve(v).then(f, reject); }; } function verb(n, f) { if (g[n]) { i[n] = function(v) { return new Promise(function(a, b) { q.push([n, v, a, b]) > 1 || resume2(n, v); }); }; if (f) i[n] = f(i[n]); } } function resume2(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume2("next", value); } function reject(value) { resume2("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume2(q[0][0], q[0][1]); } } function __asyncDelegator(o) { var i, p; return i = {}, verb("next"), verb("throw", function(e) { throw e; }), verb("return"), i[Symbol.iterator] = function() { return this; }, i; function verb(n, f) { i[n] = o[n] ? function(v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; } } function __asyncValues(o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator], i; return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function() { return this; }, i); function verb(n) { i[n] = o[n] && function(v) { return new Promise(function(resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v2) { resolve({ value: v2, done: d }); }, reject); } } var ResultAsync = class _ResultAsync { constructor(res) { this._promise = res; } static fromSafePromise(promise) { const newPromise = promise.then((value) => new Ok(value)); return new _ResultAsync(newPromise); } static fromPromise(promise, errorFn) { const newPromise = promise.then((value) => new Ok(value)).catch((e) => new Err(errorFn(e))); return new _ResultAsync(newPromise); } // eslint-disable-next-line @typescript-eslint/no-explicit-any static fromThrowable(fn, errorFn) { return (...args) => { return new _ResultAsync((() => __awaiter(this, void 0, void 0, function* () { try { return new Ok(yield fn(...args)); } catch (error) { return new Err(errorFn ? errorFn(error) : error); } }))()); }; } static combine(asyncResultList) { return combineResultAsyncList(asyncResultList); } static combineWithAllErrors(asyncResultList) { return combineResultAsyncListWithAllErrors(asyncResultList); } map(f) { return new _ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () { if (res.isErr()) { return new Err(res.error); } return new Ok(yield f(res.value)); }))); } andThrough(f) { return new _ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () { if (res.isErr()) { return new Err(res.error); } const newRes = yield f(res.value); if (newRes.isErr()) { return new Err(newRes.error); } return new Ok(res.value); }))); } andTee(f) { return new _ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () { if (res.isErr()) { return new Err(res.error); } try { yield f(res.value); } catch (e) { } return new Ok(res.value); }))); } orTee(f) { return new _ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () { if (res.isOk()) { return new Ok(res.value); } try { yield f(res.error); } catch (e) { } return new Err(res.error); }))); } mapErr(f) { return new _ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () { if (res.isOk()) { return new Ok(res.value); } return new Err(yield f(res.error)); }))); } // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types andThen(f) { return new _ResultAsync(this._promise.then((res) => { if (res.isErr()) { return new Err(res.error); } const newValue = f(res.value); return newValue instanceof _ResultAsync ? newValue._promise : newValue; })); } // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types orElse(f) { return new _ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () { if (res.isErr()) { return f(res.error); } return new Ok(res.value); }))); } match(ok2, _err) { return this._promise.then((res) => res.match(ok2, _err)); } unwrapOr(t) { return this._promise.then((res) => res.unwrapOr(t)); } /** * @deprecated will be removed in 9.0.0. * * You can use `safeTry` without this method. * @example * ```typescript * safeTry(async function* () { * const okValue = yield* yourResult * }) * ``` * Emulates Rust's `?` operator in `safeTry`'s body. See also `safeTry`. */ safeUnwrap() { return __asyncGenerator(this, arguments, function* safeUnwrap_1() { return yield __await(yield __await(yield* __asyncDelegator(__asyncValues(yield __await(this._promise.then((res) => res.safeUnwrap())))))); }); } // Makes ResultAsync implement PromiseLike then(successCallback, failureCallback) { return this._promise.then(successCallback, failureCallback); } [Symbol.asyncIterator]() { return __asyncGenerator(this, arguments, function* _a() { const result = yield __await(this._promise); if (result.isErr()) { yield yield __await(errAsync(result.error)); } return yield __await(result.value); }); } }; function okAsync(value) { return new ResultAsync(Promise.resolve(new Ok(value))); } function errAsync(err2) { return new ResultAsync(Promise.resolve(new Err(err2))); } var fromPromise = ResultAsync.fromPromise; var fromSafePromise = ResultAsync.fromSafePromise; var fromAsyncThrowable = ResultAsync.fromThrowable; var combineResultList = (resultList) => { let acc = ok([]); for (const result of resultList) { if (result.isErr()) { acc = err(result.error); break; } else { acc.map((list) => list.push(result.value)); } } return acc; }; var combineResultAsyncList = (asyncResultList) => ResultAsync.fromSafePromise(Promise.all(asyncResultList)).andThen(combineResultList); var combineResultListWithAllErrors = (resultList) => { let acc = ok([]); for (const result of resultList) { if (result.isErr() && acc.isErr()) { acc.error.push(result.error); } else if (result.isErr() && acc.isOk()) { acc = err([result.error]); } else if (result.isOk() && acc.isOk()) { acc.value.push(result.value); } } return acc; }; var combineResultAsyncListWithAllErrors = (asyncResultList) => ResultAsync.fromSafePromise(Promise.all(asyncResultList)).andThen(combineResultListWithAllErrors); var Result; (function(Result2) { function fromThrowable2(fn, errorFn) { return (...args) => { try { const result = fn(...args); return ok(result); } catch (e) { return err(errorFn ? errorFn(e) : e); } }; } Result2.fromThrowable = fromThrowable2; function combine(resultList) { return combineResultList(resultList); } Result2.combine = combine; function combineWithAllErrors(resultList) { return combineResultListWithAllErrors(resultList); } Result2.combineWithAllErrors = combineWithAllErrors; })(Result || (Result = {})); function ok(value) { return new Ok(value); } function err(err2) { return new Err(err2); } var Ok = class { constructor(value) { this.value = value; } isOk() { return true; } isErr() { return !this.isOk(); } map(f) { return ok(f(this.value)); } // eslint-disable-next-line @typescript-eslint/no-unused-vars mapErr(_f) { return ok(this.value); } // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types andThen(f) { return f(this.value); } // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types andThrough(f) { return f(this.value).map((_value) => this.value); } andTee(f) { try { f(this.value); } catch (e) { } return ok(this.value); } orTee(_f) { return ok(this.value); } // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types orElse(_f) { return ok(this.value); } asyncAndThen(f) { return f(this.value); } // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types asyncAndThrough(f) { return f(this.value).map(() => this.value); } asyncMap(f) { return ResultAsync.fromSafePromise(f(this.value)); } // eslint-disable-next-line @typescript-eslint/no-unused-vars unwrapOr(_v) { return this.value; } // eslint-disable-next-line @typescript-eslint/no-unused-vars match(ok2, _err) { return ok2(this.value); } safeUnwrap() { const value = this.value; return function* () { return value; }(); } _unsafeUnwrap(_) { return this.value; } _unsafeUnwrapErr(config) { throw createNeverThrowError("Called `_unsafeUnwrapErr` on an Ok", this, config); } // eslint-disable-next-line @typescript-eslint/no-this-alias, require-yield *[Symbol.iterator]() { return this.value; } }; var Err = class { constructor(error) { this.error = error; } isOk() { return false; } isErr() { return !this.isOk(); } // eslint-disable-next-line @typescript-eslint/no-unused-vars map(_f) { return err(this.error); } mapErr(f) { return err(f(this.error)); } andThrough(_f) { return err(this.error); } andTee(_f) { return err(this.error); } orTee(f) { try { f(this.error); } catch (e) { } return err(this.error); } // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types andThen(_f) { return err(this.error); } // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types orElse(f) { return f(this.error); } // eslint-disable-next-line @typescript-eslint/no-unused-vars asyncAndThen(_f) { return errAsync(this.error); } asyncAndThrough(_f) { return errAsync(this.error); } // eslint-disable-next-line @typescript-eslint/no-unused-vars asyncMap(_f) { return errAsync(this.error); } unwrapOr(v) { return v; } match(_ok, err2) { return err2(this.error); } safeUnwrap() { const error = this.error; return function* () { yield err(error); throw new Error("Do not use this generator out of `safeTry`"); }(); } _unsafeUnwrap(config) { throw createNeverThrowError("Called `_unsafeUnwrap` on an Err", this, config); } _unsafeUnwrapErr(_) { return this.error; } *[Symbol.iterator]() { const self = this; yield self; return self; } }; var fromThrowable = Result.fromThrowable; // https://jsr.io/@booteille/lufi-api/0.3.0/src/entities/lufi-file.ts var LufiFile = class _LufiFile { constructor(serverUrl, properties) { __publicField(this, "actionToken", ""); __publicField(this, "chunksReady", 0); __publicField(this, "createdAt", 0); __publicField(this, "delay", 0); __publicField(this, "delAtFirstView", false); __publicField(this, "keys", { client: "", server: "" }); __publicField(this, "name", ""); __publicField(this, "password", ""); __publicField(this, "queueIndex", 0); __publicField(this, "serverUrl"); __publicField(this, "size", 0); __publicField(this, "uploadStatus", 3 /* INITIALIZED */); __publicField(this, "totalChunks", 0); __publicField(this, "type", ""); __publicField(this, "zipped", false); this.serverUrl = serverUrl; Object.assign(this, properties); } downloadUrl() { const serverUrl = new URL(this.serverUrl); return new URL( `${serverUrl.origin + serverUrl.pathname}r/${this.keys.server}#${this.keys.client}` ); } removeUrl() { const serverUrl = new URL(this.serverUrl); return new URL( `${serverUrl.origin + serverUrl.pathname}d/${this.keys.server}/${this.actionToken}` ); } static fromDownloadUrl(downloadUrl, password = "") { const pathinfos = downloadUrl.pathname.split("r/"); const keys = { client: downloadUrl.hash.slice(1).split("&")[0], server: pathinfos[1] }; return new _LufiFile(downloadUrl.origin + pathinfos[0], { keys, password }); } static fromRemoveUrl(removeUrl, password = "") { const pathInfos = removeUrl.pathname.split("d/"); const splittedPath = pathInfos[1].split("/"); const keys = { client: "", server: splittedPath[0] }; return new _LufiFile(removeUrl.origin + pathInfos[0], { keys, password, actionToken: splittedPath[1] }); } }; // https://jsr.io/@booteille/lufi-api/0.3.0/src/entities/lufi-job.ts var import_npm_events_3_3 = __toESM(require_events()); // https://jsr.io/@booteille/lufi-api/0.3.0/src/enum/job-status.ts var JobStatus = /* @__PURE__ */ ((JobStatus2) => { JobStatus2[JobStatus2["COMPLETE"] = 0] = "COMPLETE"; JobStatus2[JobStatus2["FAILED"] = 1] = "FAILED"; JobStatus2[JobStatus2["ONGOING"] = 2] = "ONGOING"; JobStatus2[JobStatus2["PAUSED"] = 3] = "PAUSED"; return JobStatus2; })(JobStatus || {}); // https://jsr.io/@booteille/lufi-api/0.3.0/src/error/base-error.ts var BaseError = class extends Error { constructor(message, options = {}) { const { cause, context } = options; super(message, { cause }); __publicField(this, "context"); this.name = this.constructor.name; this.context = context; } }; // https://jsr.io/@booteille/lufi-api/0.3.0/src/error/connection-error.ts var ConnectionError = class extends BaseError { constructor() { super(...arguments); __publicField(this, "message", "Unable to connect. Is the computer able to access the url?"); } }; // https://jsr.io/@booteille/lufi-api/0.3.0/src/error/server-error.ts var ServerError = class extends BaseError { constructor() { super(...arguments); __publicField(this, "message", "The server returned an error"); } }; // https://jsr.io/@booteille/lufi-api/0.3.0/src/utils.ts var ensureError = (value) => { if (value instanceof Error) return value; let stringified = "[Unable to stringify the thrown value]"; try { stringified = JSON.stringify(value); } catch (_error) { } return new Error(stringified); }; var fetchServerConfig = (instanceUrl) => { const originMatches = instanceUrl.href.match( /(.*?)\/?(?:\/[dr]{1}\/|login\/?|files\/?)/ ); const urlOrigin = originMatches && originMatches[1] ? originMatches[1] : instanceUrl.origin; return ResultAsync.fromPromise( fetch(urlOrigin + "/about/config"), (error) => new ConnectionError(void 0, { cause: ensureError(error) }) ).andThen((response) => { if (response.ok) { return ResultAsync.fromPromise( response.json(), (error) => ensureError(error) ); } else { return errAsync( new ServerError(void 0, { context: response.statusText }) ); } }); }; var isDenoRuntime = () => typeof Deno !== "undefined"; var isSecureContext = () => { return isDenoRuntime() || globalThis.isSecureContext || globalThis.location.protocol === "https:"; }; var workerUrl = (relativePath) => { return isDenoRuntime() ? new URL(`./worker/${relativePath}.ts`, new URL(".", import.meta.url).href) : new URL( import.meta.resolve( `./${relativePath !== "encrypt" ? `worker/${relativePath}` : relativePath}.js` ) ); }; // https://jsr.io/@booteille/lufi-api/0.3.0/src/entities/lufi-job.ts var LufiJob = class { constructor(lufiFile, workerType) { __publicField(this, "events", new import_npm_events_3_3.default()); __publicField(this, "lufiFile"); __publicField(this, "status", 2 /* ONGOING */); __publicField(this, "archiveFile"); __publicField(this, "archiveFiles", []); __publicField(this, "downloadedFile"); __publicField(this, "worker"); __publicField(this, "isTerminated", false); /** * Tells the worker the job is complete */ __publicField(this, "complete", () => { this.status = 0 /* COMPLETE */; this.events.emit("JOB_TERMINATED" /* JOB_TERMINATED */); }); __publicField(this, "hasFailed", () => this.status === 1 /* FAILED */); __publicField(this, "onError", (callback) => { this.worker.onerror = (event) => { callback(event); }; return this; }); __publicField(this, "onMessage", (callback) => { this.worker.onmessage = (e) => { if (callback) { callback(e); } const event = e.data.event; if (event) { if (event === "FILE_UPDATED" /* FILE_UPDATED */) { Object.assign(this.lufiFile, e.data.lufiFile); } else { this.dispatchEvent(event, e.data.error); } } }; return this; }); __publicField(this, "onMessageError", (callback) => { this.worker.onmessageerror = (event) => { callback(event); }; return this; }); __publicField(this, "onProgress", (callback) => { this.events.on("CHUNK_UPLOADED" /* CHUNK_UPLOADED */, () => { callback(); }); this.events.on("CHUNK_DOWNLOADED" /* CHUNK_DOWNLOADED */, () => { callback(); }); return this; }); __publicField(this, "requestMessage", (msg, transferable = []) => { this.worker.postMessage(msg, transferable); return this; }); __publicField(this, "terminate", () => { this.worker.terminate(); return this; }); __publicField(this, "waitForCompletion", () => { if (this.isTerminated) { if (this.status === 0 /* COMPLETE */) { return okAsync(this); } else { return errAsync(ensureError("Job has failed")); } } else { return ResultAsync.fromPromise( new Promise((resolve, reject) => { this.events.once("OPERATION_FAILED" /* OPERATION_FAILED */, (error) => { reject(error); }); this.events.once("JOB_TERMINATED" /* JOB_TERMINATED */, () => { if (this.status === 0 /* COMPLETE */) { resolve(this); } }); }), (error) => ensureError(error) ); } }); __publicField(this, "waitForStart", () => ResultAsync.fromPromise( new Promise((resolve, reject) => { this.events.once("OPERATION_FAILED" /* OPERATION_FAILED */, (error) => { reject(error); }); this.events.once("UPLOAD_STARTED" /* UPLOAD_STARTED */, () => { resolve(this); }); this.events.once("DOWNLOAD_STARTED" /* DOWNLOAD_STARTED */, () => { resolve(this); }); }), (error) => ensureError(error) )); __publicField(this, "dispatchEvent", (event, error) => { this.events.emit(event, error); }); switch (workerType) { case 0 /* CANCEL */: { this.worker = new Worker(workerUrl("cancel"), { type: "module" }); } break; case 1 /* COMPRESS */: { this.worker = new Worker(workerUrl("compress"), { type: "module" }); } break; case 2 /* DECOMPRESS */: { this.worker = new Worker(workerUrl("decompress"), { type: "module" }); } break; case 3 /* DOWNLOAD */: { this.worker = new Worker(workerUrl("download"), { type: "module" }); } break; case 4 /* INFOS */: { this.worker = new Worker(workerUrl("infos"), { type: "module" }); } break; case 5 /* REMOVE */: { this.worker = new Worker(workerUrl("remove"), { type: "module" }); } break; case 6 /* UPLOAD */: { this.worker = new Worker(workerUrl("upload"), { type: "module" }); } break; } this.lufiFile = lufiFile; this.events.once("JOB_TERMINATED" /* JOB_TERMINATED */, () => { this.isTerminated = true; this.terminate(); }); this.events.once("OPERATION_FAILED" /* OPERATION_FAILED */, (error) => { this.status = 1 /* FAILED */; this.lufiFile.uploadStatus = 2 /* FAILED */; this.events.emit("JOB_TERMINATED" /* JOB_TERMINATED */, error); }); this.onError((event) => console.error(event.error)); } }; // https://jsr.io/@booteille/lufi-api/0.3.0/src/enum/crypto-algorithm.ts var CryptoAlgorithm = /* @__PURE__ */ ((CryptoAlgorithm2) => { CryptoAlgorithm2[CryptoAlgorithm2["Sjcl"] = 0] = "Sjcl"; CryptoAlgorithm2[CryptoAlgorithm2["WebCrypto"] = 1] = "WebCrypto"; return CryptoAlgorithm2; })(CryptoAlgorithm || {}); // ../../.cache/deno/deno_esbuild/registry.npmjs.org/arraybuffer-encoding@1.1.0/node_modules/arraybuffer-encoding/dist/esm/base64/encoding.js var Encoding = class { /** * * @param charset Charset to use for base64 encoding. This must be 64-characters long. * @param noPadding If true, encoded strings won't include padding. */ constructor(charset, noPadding) { if (!charset || charset.length != 64) { throw Error("Charset must contain 64 characters"); } this._charset = charset; this._noPadding = !!noPadding; this._valid = new RegExp("^[" + this._charset.replace("-", "\\-") + "]+={0,2}$"); } /** * Encode an ArrayBuffer to base64 in a string. * @param ab Data to encode to base64 * @returns Base64-encoded string */ Encode(ab) { const len = ab.byteLength; if (!len) { return ""; } const view = new Uint8Array(ab); let res = ""; for (let i = 0; i < len; i += 3) { res += this._charset[view[i] >> 2] + this._charset[(view[i] & 3) << 4 | view[i + 1] >> 4] + this._charset[(view[i + 1] & 15) << 2 | view[i + 2] >> 6] + this._charset[view[i + 2] & 63]; } if (len % 3 == 2) { res = res.substring(0, res.length - 1); if (!this._noPadding) { res += "="; } } else if (len % 3 == 1) { res = res.substring(0, res.length - 2); if (!this._noPadding) { res += "=="; } } return res; } /** * Decode a string from base64. Padding is always optional. * @param str Base64-encoded string * @returns Data decoded from the base64 string */ Decode(str) { str = (str || "").replace(/[\s]/g, ""); if (!str) { return new ArrayBuffer(0); } if (!this._valid.test(str)) { throw Error("Invalid base64 input sequence"); } let viewLen = Math.floor(str.length * 0.75); if (str[str.length - 2] == "=") { viewLen -= 2; } else if (str[str.length - 1] == "=") { viewLen--; } const view = new Uint8Array(viewLen); let enc1, enc2, enc3, enc4, i = 0, j = 0; while (i < str.length * 0.75) { enc1 = this._charset.indexOf(str.charAt(j++)); enc2 = this._charset.indexOf(str.charAt(j++)); enc3 = this._charset.indexOf(str.charAt(j++)); enc4 = this._charset.indexOf(str.charAt(j++)); view[i++] = enc1 << 2 | enc2 >> 4; view[i++] = (enc2 & 15) << 4 | enc3 >> 2; view[i++] = (enc3 & 3) << 6 | enc4; } return view.buffer; } }; // ../../.cache/deno/deno_esbuild/registry.npmjs.org/arraybuffer-encoding@1.1.0/node_modules/arraybuffer-encoding/dist/esm/base64/standard.js var obj = new Encoding("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"); // ../../.cache/deno/deno_esbuild/registry.npmjs.org/arraybuffer-encoding@1.1.0/node_modules/arraybuffer-encoding/dist/esm/base64/url.js var obj2 = new Encoding("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_", true); function Encode(ab) { return obj2.Encode(ab); } // https://jsr.io/@booteille/lufi-api/0.3.0/src/api/crypto/sjcl.ts var import_npm_lufi_sjcl_1_0 = __toESM(require_sjcl()); // https://jsr.io/@booteille/lufi-api/0.3.0/src/error/crypto/crypto-error.ts var CryptoError = class extends BaseError { }; // https://jsr.io/@booteille/lufi-api/0.3.0/src/error/crypto/hashing-error.ts var HashingError = class extends CryptoError { constructor() { super(...arguments); __publicField(this, "message", "Unable to hash the provided string"); } }; // https://jsr.io/@booteille/lufi-api/0.3.0/src/api/crypto/sjcl.ts var generateKey = () => { try { return okAsync(import_npm_lufi_sjcl_1_0.default.codec.base64.fromBits(import_npm_lufi_sjcl_1_0.default.random.randomWords(8, 10))); } catch (error) { return errAsync( new CryptoError("Unable to generate key", { cause: ensureError(error) }) ); } }; var hashPassword = (password) => { try { return okAsync(import_npm_lufi_sjcl_1_0.default.codec.hex.fromBits(import_npm_lufi_sjcl_1_0.default.hash.sha512.hash(password))); } catch (error) { return errAsync(new HashingError(void 0, { cause: ensureError(error) })); } }; // https://jsr.io/@booteille/lufi-api/0.3.0/src/api/crypto/web.ts var generateKey2 = () => { return ResultAsync.fromPromise( new Promise( (resolve, reject) => crypto.subtle.generateKey( { name: "AES-GCM", length: 256 }, true, ["encrypt", "decrypt"] ).then( (generatedKey) => crypto.subtle.exportKey("raw", generatedKey).then((key) => resolve(Encode(key))).catch((error) => { reject( new CryptoError("Unable to base64 encode the url", { cause: ensureError(error) }) ); }) ).catch((error) => reject(error)) ), (error) => new CryptoError("Unable to generate key", { cause: ensureError(error) }) ); }; var hashPassword2 = (password) => { const promise = async () => { return Array.from( new Uint8Array( await crypto.subtle.digest( "SHA-512", new TextEncoder().encode(password) ) ) ).map((b) => b.toString(16).padStart(2, "0")).join(""); }; return ResultAsync.fromPromise( promise(), (error) => new HashingError(void 0, { cause: ensureError(error) }) ); }; // https://jsr.io/@booteille/lufi-api/0.3.0/src/api/crypto.ts var generateKey3 = (algo = 1 /* WebCrypto */) => algo === 0 /* Sjcl */ ? generateKey() : generateKey2(); var hashPassword3 = (password, algo) => algo === 0 /* Sjcl */ ? hashPassword(password) : hashPassword2(password); // https://jsr.io/@booteille/lufi-api/0.3.0/src/error/download/download-error.ts var DownloadError = class extends BaseError { constructor() { super(...arguments); __publicField(this, "message", "An error occured while downloading the data"); } }; // https://jsr.io/@booteille/lufi-api/0.3.0/src/error/infos-error.ts var InfosError = class extends BaseError { constructor() { super(...arguments); __publicField(this, "message", "An error occured while trying to retrieve server informations"); } }; // https://jsr.io/@booteille/lufi-api/0.3.0/src/error/job/job-error.ts var JobError = class extends BaseError { }; // https://jsr.io/@booteille/lufi-api/0.3.0/src/error/job/job-pause-error.ts var JobPauseError = class extends JobError { constructor() { super(...arguments); __publicField(this, "message", "An error occured while trying to pause the job"); } }; // https://jsr.io/@booteille/lufi-api/0.3.0/src/error/job/job-resume-error.ts var JobResumeError = class extends JobError { constructor() { super(...arguments); __publicField(this, "message", "An error occured while trying to resume the job"); } }; // https://jsr.io/@booteille/lufi-api/0.3.0/src/error/upload/upload-error.ts var UploadError = class extends BaseError { constructor() { super(...arguments); __publicField(this, "message", "An error occured while uploading the data"); } }; // https://jsr.io/@booteille/lufi-api/0.3.0/src/api/lufi.ts var CHUNK_LENGTH = 15e5; var files = {}; var events = new EventEmitter2(); var cancel = (uploadJob) => { uploadJob.terminate(); const job = new LufiJob(uploadJob.lufiFile, 0 /* CANCEL */); return ResultAsync.fromPromise( new Promise((resolve, reject) => { job.onMessage((event) => { if (event.data.event === "UPLOAD_CANCELLED" /* UPLOAD_CANCELLED */) { files[job.lufiFile.keys.client].uploadStatus = 0 /* CANCELED */; resolve(job); } if (event.data.event === "OPERATION_FAILED" /* OPERATION_FAILED */) { reject( new JobError( "An error occured while trying to cancel an upload", { cause: event.data.error } ) ); } }).requestMessage({ args: { lufiFile: job.lufiFile } }); }), (error) => ensureError(error) ); }; var addFilesToArchive = (files2, archiveEntries = {}) => { const asyncLoop = async (files3) => { var _a; for (const file of files3) { const nameWithExtension = ((_a = file.name.split("/")) == null ? void 0 : _a.pop()) || file.name; const nameWithoutExtension = nameWithExtension.split(".").shift(); const extension = nameWithExtension.split(".").length > 1 ? `.${nameWithExtension.split(".").pop()}` : ""; let name = nameWithExtension; if (archiveEntries[name] !== void 0) { let i = 1; do { name = `${nameWithoutExtension}(${i})${extension}`; i++; } while (archiveEntries[name] !== void 0); } events.emit("ARCHIVE_ADDED_FILE" /* ARCHIVE_ADDED_FILE */, { name, size: file.size }); archiveEntries[name] = await file.bytes(); } }; return ResultAsync.fromPromise( asyncLoop(files2), (error) => ensureError(error) ).andThen(() => okAsync(archiveEntries)); }; var compress = (archiveEntries, archiveName) => { const lufiFile = new LufiFile(""); const job = new LufiJob(lufiFile, 1 /* COMPRESS */); return okAsync( job.onMessage((event) => { if (event.data.event === "ARCHIVE_CREATED" /* ARCHIVE_CREATED */) { job.archiveFile = new File([event.data.buffer], archiveName, { type: "application/zip" }); job.complete(); } }).requestMessage({ args: { lufiFile, archive: { entries: archiveEntries } } }) ); }; var decompress = (zipFile) => { const lufiFile = new LufiFile(""); const job = new LufiJob(lufiFile, 2 /* DECOMPRESS */); return okAsync( job.onMessage((event) => { if (event.data.event === "ARCHIVE_DECOMPRESSED" /* ARCHIVE_DECOMPRESSED */) { job.complete(); } if (event.data.event === "ARCHIVE_RETRIEVED_FILE" /* ARCHIVE_RETRIEVED_FILE */) { job.archiveFiles.push( new File([event.data.file.buffer], event.data.file.path) ); } }).requestMessage({ args: { lufiFile, archive: { file: zipFile } } }) ); }; var handlePasswordHashing = (downloadUrl, password) => { if (password) { return fetchServerConfig(downloadUrl).andThen((config) => { if (config.version.tag > "0.07.0") { const algo = isSecureContext() ? 1 /* WebCrypto */ : 0 /* Sjcl */; return hashPassword3(password, algo).andThen( (hashedPassword) => okAsync(LufiFile.fromDownloadUrl(downloadUrl, hashedPassword)) ); } else { return okAsync(LufiFile.fromDownloadUrl(downloadUrl, password)); } }); } else { return okAsync(LufiFile.fromDownloadUrl(downloadUrl)); } }; var download = (downloadUrl, password) => handlePasswordHashing(downloadUrl, password).andThen( (lufiFile) => { const job = new LufiJob(lufiFile, 3 /* DOWNLOAD */); return ResultAsync.fromPromise( new Promise((resolve, reject) => { const chunks = []; return job.onMessage((event) => { handleSocketResults(resolve, reject, job, event); if (event.data.event === "CHUNK_DOWNLOADED" /* CHUNK_DOWNLOADED */) { chunks.push(event.data.chunk.buffer); if (chunks.length >= 50) { job.downloadedFile = new File( job.downloadedFile ? [job.downloadedFile.slice()].concat(chunks) : chunks, lufiFile.name, { type: lufiFile.type } ); chunks.length = 0; } } if (event.data.event === "DOWNLOAD_COMPLETE" /* DOWNLOAD_COMPLETE */) { job.downloadedFile = new File( job.downloadedFile ? [job.downloadedFile.slice()].concat(chunks) : chunks, lufiFile.name, { type: lufiFile.type } ); chunks.length = 0; job.complete(); } }).requestMessage({ args: { lufiFile } }); }), (error) => new DownloadError(void 0, { cause: ensureError(error) }) ); } ); var infos = (downloadUrl, password) => handlePasswordHashing(downloadUrl, password).andThen( (lufiFile) => okAsync(new LufiJob(lufiFile, 4 /* INFOS */)) ).andThen( (job) => ResultAsync.fromPromise( new Promise((resolve, reject) => { job.onMessage((event) => { if (event.data.event === "INFOS_RETRIEVED" /* INFOS_RETRIEVED */) { job.complete(); resolve(job); } if (event.data.event === "OPERATION_FAILED" /* OPERATION_FAILED */) { reject( new JobError( "An error occured while trying to retrieve informations of the file", { cause: event.data.error } ) ); } }).requestMessage({ args: { lufiFile: job.lufiFile } }); }), (error) => new InfosError(void 0, { cause: ensureError(error) }) ) ); var pause = (job) => { try { job.status = 3 /* PAUSED */; return okAsync( job.requestMessage({ action: 0 /* PAUSE */, args: { lufiFile: job.lufiFile } }) ); } catch (error) { return errAsync( new JobPauseError(void 0, { cause: ensureError(error) }) ); } }; var remove = (removeUrl, password) => { const lufiFile = LufiFile.fromRemoveUrl(removeUrl, password); const job = new LufiJob(lufiFile, 5 /* REMOVE */); return ResultAsync.fromPromise( new Promise((resolve, reject) => { job.onMessage((event) => { if (event.data.event === "FILE_REMOVED" /* FILE_REMOVED */) { job.complete(); resolve(job); } if (event.data.event === "OPERATION_FAILED" /* OPERATION_FAILED */) { reject( new JobError("An error occured while trying to remove a file", { cause: event.data.error }) ); } }).requestMessage({ args: { lufiFile } }); }), (error) => ensureError(error) ); }; var resume = (job) => { try { job.status = 2 /* ONGOING */; return okAsync( job.requestMessage({ action: 2 /* RESUME */, args: { lufiFile: job.lufiFile } }) ); } catch (error) { return errAsync( new JobResumeError(void 0, { cause: ensureError(error) }) ); } }; var sliceAndUpload = (job, file, algo, chunkLength = CHUNK_LENGTH) => { events.emit("SLICE_STARTED" /* SLICE_STARTED */, files[job.lufiFile.keys.client]); const totalChunks = Math.ceil(file.size / chunkLength) || 1; const concurrency = navigator.hardwareConcurrency || 1; files[job.lufiFile.keys.client].totalChunks = totalChunks; const sequentialLoop = async () => { for (let i = 0; i < totalChunks; i++) { const start = i * chunkLength; const end = Math.min(start + chunkLength, file.size); const buffer = await file.slice(start, end, file.type).arrayBuffer(); job.requestMessage( { args: { chunk: { buffer, index: i }, lufiFile: files[job.lufiFile.keys.client], algo } }, [buffer] ); if (i === 0) { const waitUntilUploadStarted = () => new Promise((resolve) => { job.events.once("UPLOAD_STARTED" /* UPLOAD_STARTED */, () => { resolve(void 0); }); }); await waitUntilUploadStarted(); } else if (i % concurrency === 0) { const waitForQueueAvailability = () => new Promise((resolve) => { job.events.once("CHUNK_UPLOADED" /* CHUNK_UPLOADED */, () => { resolve(void 0); }); }); await waitForQueueAvailability(); } } }; sequentialLoop(); return okAsync(void 0); }; var startUpload = (serverUrl, file, delay, delAtFirstView, zipped, password, algo) => generateKey3( algo ).andThen( (clientKey) => { if (password) { return hashPassword3(password, algo).andThen( (hashedPassword) => okAsync({ password: hashedPassword, clientKey }) ); } else { return okAsync({ password, clientKey }); } } ).andThen(({ password: password2, clientKey }) => { files[clientKey] = new LufiFile(serverUrl.toString(), { delay, delAtFirstView, zipped, password: password2, name: file.name.split("/").pop(), // Remove path from filename size: file.size, type: file.type, keys: { client: clientKey, server: "" } }); const job = new LufiJob(files[clientKey], 6 /* UPLOAD */); files[clientKey].uploadStatus = 4 /* QUEUED */; return sliceAndUpload(job, file, algo).andThen( () => ResultAsync.fromPromise( new Promise((resolve, reject) => { job.onMessage((event) => { handleSocketResults(resolve, reject, job, event); switch (event.data.event) { case "UPLOAD_COMPLETE" /* UPLOAD_COMPLETE */: { job.complete(); job.lufiFile.uploadStatus = 1 /* COMPLETE */; } break; } }); }), (error) => ensureError(error) ) ); }); var upload = (serverUrl, filesToUpload, delay = 0, delAtFirstView = false, zipped = false, zipName = "documents.zip", password = "", algo = 1 /* WebCrypto */) => { const operations = []; if (!zipped) { filesToUpload.forEach((file) => { operations.push(startUpload( serverUrl, file, delay, delAtFirstView, zipped, password, algo )); }); } else { if (filesToUpload.length === 1 && filesToUpload[0].type === "application/zip") { operations.push( startUpload( serverUrl, filesToUpload[0], delay, delAtFirstView, zipped, password, algo ) ); } else { operations.push( addFilesToArchive(filesToUpload).andThen( (archiveEntries) => compress( archiveEntries, zipName ).andThen((job) => job.waitForCompletion()).andThen((job) => { if (job.archiveFile) { return startUpload( serverUrl, job.archiveFile, delay, delAtFirstView, true, password, algo ); } else { return errAsync(new JobError("archiveFile must be defined")); } }) ) ); } } return ResultAsync.combine(operations).orElse( (error) => errAsync(new UploadError(void 0, { cause: error })) ); }; var handleSocketResults = (resolve, reject, job, event) => { if (event.data.event === "SOCKET_OPENED" /* SOCKET_OPENED */) { resolve(job); } if (event.data.event === "OPERATION_FAILED" /* OPERATION_FAILED */) { reject( new JobError("The job returned an error", { cause: event.data.error }) ); } }; var getFilesQueued = () => Object.values(files).filter( (file) => file.uploadStatus === 4 /* QUEUED */ ); var getFileIndexInQueue = (clientKey) => Object.keys(getFilesQueued()).indexOf(clientKey); export { CryptoAlgorithm, JobStatus, ResultAsync, err, errAsync, isSecureContext, lufi_exports as lufi, ok, okAsync };