@linkedrecords/browser 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"browser_sdk.js","mappings":"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","sources":["webpack:///webpack/universalModuleDefinition","webpack:///../../node_modules/changesets/lib/Builder.js","webpack:///../../node_modules/changesets/lib/Changeset.js","webpack:///../../node_modules/changesets/lib/ChangesetTransform.js","webpack:///../../node_modules/changesets/lib/Operator.js","webpack:///../../node_modules/changesets/lib/TextTransform.js","webpack:///../../node_modules/changesets/lib/index.js","webpack:///../../node_modules/changesets/lib/operations/Insert.js","webpack:///../../node_modules/changesets/lib/operations/Retain.js","webpack:///../../node_modules/changesets/lib/operations/Skip.js","webpack:///../../node_modules/debug/src/browser.js","webpack:///../../node_modules/debug/src/common.js","webpack:///../../node_modules/diff_match_patch/lib/diff_match_patch.js","webpack:///../../node_modules/engine.io-client/node_modules/debug/src/browser.js","webpack:///../../node_modules/engine.io-client/node_modules/debug/src/common.js","webpack:///../../node_modules/engine.io-client/node_modules/ms/index.js","webpack:///../../node_modules/flat/index.js","webpack:///../../node_modules/get-value/index.js","webpack:///../../node_modules/is-plain-object/index.js","webpack:///../../node_modules/is-primitive/index.js","webpack:///../../node_modules/isobject/index.js","webpack:///../../node_modules/ms/index.js","webpack:///../../node_modules/oidc-client-ts/dist/umd/oidc-client-ts.js","webpack:///../../node_modules/set-value/index.js","webpack:///../../node_modules/socket.io-client/node_modules/debug/src/browser.js","webpack:///../../node_modules/socket.io-client/node_modules/debug/src/common.js","webpack:///../../node_modules/socket.io-client/node_modules/ms/index.js","webpack:///../../lib/client-server-bus/client/index.ts","webpack:///../../lib/client-server-bus/drivers/ws/client/index.ts","webpack:///../../lib/utils/all_prefixes.ts","webpack:///../../lib/utils/unset.ts","webpack:///../attributes/abstract/abstract_attribute_client.ts","webpack:///../attributes/abstract/serialized_change_with_metadata.ts","webpack:///../attributes/blob/client/index.ts","webpack:///../attributes/key_value/client/index.ts","webpack:///../attributes/key_value/key_value_change.ts","webpack:///../attributes/long_text/client/buffer.ts","webpack:///../attributes/long_text/client/index.ts","webpack:///../attributes/long_text/long_text_change.ts","webpack:///../facts/client/index.ts","webpack:///./attributes_repository.ts","webpack:///./facts_repository.ts","webpack:///./index.ts","webpack:///./oidc.ts","webpack:///../../node_modules/engine.io-client/build/cjs/contrib/has-cors.js","webpack:///../../node_modules/engine.io-client/build/cjs/contrib/parseqs.js","webpack:///../../node_modules/engine.io-client/build/cjs/contrib/parseuri.js","webpack:///../../node_modules/engine.io-client/build/cjs/globals.js","webpack:///../../node_modules/engine.io-client/build/cjs/index.js","webpack:///../../node_modules/engine.io-client/build/cjs/socket.js","webpack:///../../node_modules/engine.io-client/build/cjs/transport.js","webpack:///../../node_modules/engine.io-client/build/cjs/transports/index.js","webpack:///../../node_modules/engine.io-client/build/cjs/transports/polling-fetch.js","webpack:///../../node_modules/engine.io-client/build/cjs/transports/polling-xhr.js","webpack:///../../node_modules/engine.io-client/build/cjs/transports/polling.js","webpack:///../../node_modules/engine.io-client/build/cjs/transports/websocket.js","webpack:///../../node_modules/engine.io-client/build/cjs/transports/webtransport.js","webpack:///../../node_modules/engine.io-client/build/cjs/util.js","webpack:///../../node_modules/engine.io-parser/build/cjs/commons.js","webpack:///../../node_modules/engine.io-parser/build/cjs/contrib/base64-arraybuffer.js","webpack:///../../node_modules/engine.io-parser/build/cjs/decodePacket.browser.js","webpack:///../../node_modules/engine.io-parser/build/cjs/encodePacket.browser.js","webpack:///../../node_modules/engine.io-parser/build/cjs/index.js","webpack:///../../node_modules/jwt-decode/build/cjs/index.js","webpack:///../../node_modules/socket.io-client/build/cjs/contrib/backo2.js","webpack:///../../node_modules/socket.io-client/build/cjs/index.js","webpack:///../../node_modules/socket.io-client/build/cjs/manager.js","webpack:///../../node_modules/socket.io-client/build/cjs/on.js","webpack:///../../node_modules/socket.io-client/build/cjs/socket.js","webpack:///../../node_modules/socket.io-client/build/cjs/url.js","webpack:///../../node_modules/socket.io-parser/build/cjs/binary.js","webpack:///../../node_modules/socket.io-parser/build/cjs/index.js","webpack:///../../node_modules/socket.io-parser/build/cjs/is-binary.js","webpack:///../../node_modules/uuidv7/dist/index.cjs","webpack:///../../node_modules/@socket.io/component-emitter/index.mjs","webpack:///webpack/bootstrap","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn ","var Changeset = require('./Changeset')\n , Retain = require('./operations/Retain')\n , Skip = require('./operations/Skip')\n , Insert = require('./operations/Insert')\n\nfunction Builder() {\n this.ops = []\n this.addendum = ''\n this.removendum = ''\n}\n\nmodule.exports = Builder\n\nBuilder.prototype.keep =\nBuilder.prototype.retain = function(len) {\n this.ops.push(new Retain(len))\n return this\n}\n\nBuilder.prototype.delete =\nBuilder.prototype.skip = function(str) {\n this.removendum += str\n this.ops.push(new Skip(str.length))\n return this\n}\n\nBuilder.prototype.add =\nBuilder.prototype.insert = function(str) {\n this.addendum += str\n this.ops.push(new Insert(str.length))\n return this\n}\n\nBuilder.prototype.end = function() {\n var cs = new Changeset(this.ops)\n cs.addendum = this.addendum\n cs.removendum = this.removendum\n return cs\n}\n","/*!\n * changesets\n * A Changeset library incorporating operational transformation (OT)\n * Copyright 2012 by Marcel Klehr <mklehr@gmx.net>\n *\n * (MIT LICENSE)\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/**\n * A sequence of consecutive operations\n *\n * @param ops.. <Operation> all passed operations will be added to the changeset\n */\nfunction Changeset(ops/*or ops..*/) {\n this.addendum = \"\"\n this.removendum = \"\"\n this.inputLength = 0\n this.outputLength = 0\n\n if(!Array.isArray(ops)) ops = arguments\n for(var i=0; i<ops.length; i++) {\n this.push(ops[i])\n this.inputLength += ops[i].input\n this.outputLength += ops[i].output\n }\n}\n\n// True inheritance\nChangeset.prototype = Object.create(Array.prototype, {\n constructor: {\n value: Changeset,\n enumerable: false,\n writable: true,\n configurable: true\n }\n});\nmodule.exports = Changeset\n\nvar TextTransform = require('./TextTransform')\n , ChangesetTransform = require('./ChangesetTransform')\n\nvar Retain = require('./operations/Retain')\n , Skip = require('./operations/Skip')\n , Insert = require('./operations/Insert')\n\nvar Builder = require('./Builder')\n\n/**\n * Returns an array containing the ops that are within the passed range\n * (only op.input is counted; thus not counting inserts to the range length, yet they are part of the range)\n */\nChangeset.prototype.subrange = function(start, len) {\n var range = []\n , op, oplen\n , l=0\n for(var i=0, pos=0; i<this.length && l < len; i++) {\n op = this[i]\n if(op.input+pos >= start) {\n if(op.input) {\n if(op.length != Infinity) oplen = op.length -Math.max(0, start-pos) -Math.max(0, (op.length+pos)-(start+len))\n else oplen = len\n if (oplen !== 0) range.push( op.derive(oplen) ) // (Don't copy over more than len param allows)\n }\n else {\n range.push( op.derive(op.length) )\n oplen = 0\n }\n l += oplen\n }\n pos += op.input\n }\n return range\n}\n\n/**\n * Merge two changesets (that are based on the same state!) so that the resulting changseset\n * has the same effect as both orignal ones applied one after the other\n *\n * @param otherCs <Changeset>\n * @param left <boolean> Which op to choose if there's an insert tie (If you use this function in a distributed, synchronous environment, be sure to invert this param on the other site, otherwise it can be omitted safely))\n * @returns <Changeset>\n */\nChangeset.prototype.merge = function(otherCs, left) {\n if(otherCs.inputLength !== this.outputLength) {\n throw new Error(\"Changeset lengths for merging don't match! Input length of younger cs: \"+otherCs.inputLength+', output length of older cs:'+this.outputLength)\n }\n\n var newops = []\n , addPtr1 = 0\n , remPtr1 = 0\n , addPtr2 = 0\n , remPtr2 = 0\n , newaddendum = ''\n , newremovendum = ''\n\n zip(this, otherCs, function(op1, op2) {\n // console.log(newops)\n // console.log(op1, op2)\n\n // I'm deleting something -- the other cs can't know that, so just overtake my op\n if(op1 && !op1.output) {\n newops.push(op1.merge().clone())\n newremovendum += this.removendum.substr(remPtr1, op1.length) // overtake added chars\n remPtr1 += op1.length\n op1.length = 0 // don't gimme that one again.\n return\n }\n\n // op2 is an insert\n if(op2 && !op2.input) {\n newops.push(op2.merge().clone())\n newaddendum += otherCs.addendum.substr(addPtr2, op2.length) // overtake added chars\n addPtr2 += op2.length\n op2.length = 0 // don't gimme that one again.\n return\n }\n\n // op2 is either a retain or a skip\n if(op2 && op2.input && op1) {\n // op2 retains whatever we do here (retain or insert), so just clone my op\n if(op2.output) {\n newops.push(op1.merge(op2).clone())\n if(!op1.input) { // overtake addendum\n newaddendum += this.addendum.substr(addPtr1, op1.length)\n addPtr1 += op1.length\n }\n op1.length = 0 // don't gimme these again\n op2.length = 0\n }else\n\n // op2 deletes my retain here, so just clone the delete\n // (op1 can only be a retain and no skip here, cause we've handled skips above already)\n if(!op2.output && op1.input) {\n newops.push(op2.merge(op1).clone())\n newremovendum += otherCs.removendum.substr(remPtr2, op2.length) // overtake added chars\n remPtr2 += op2.length\n op1.length = 0 // don't gimme these again\n op2.length = 0\n }else\n\n //otherCs deletes something I added (-1) +1 = 0\n {\n addPtr1 += op1.length\n op1.length = 0 // don't gimme these again\n op2.length = 0\n }\n return\n }\n\n console.log('oops', arguments)\n throw new Error('oops. This case hasn\\'t been considered by the developer (error code: PBCAC)')\n }.bind(this))\n\n var newCs = new Changeset(newops)\n newCs.addendum = newaddendum\n newCs.removendum = newremovendum\n\n return newCs\n}\n\n/**\n * A private and quite handy function that slices ops into equally long pieces and applies them on a mapping function\n * that can determine the iteration steps by setting op.length to 0 on an op (equals using .next() in a usual iterator)\n */\nfunction zip(cs1, cs2, func) {\n var opstack1 = cs1.map(function(op) {return op.clone()}) // copy ops\n , opstack2 = cs2.map(function(op) {return op.clone()})\n\n var op2, op1\n while(opstack1.length || opstack2.length) {// iterate through all outstanding ops of this cs\n op1 = opstack1[0]? opstack1[0].clone() : null\n op2 = opstack2[0]? opstack2[0].clone() : null\n\n if(op1) {\n if(op2) op1 = op1.derive(Math.min(op1.length, op2.length)) // slice 'em into equally long pieces\n if(opstack1[0].length > op1.length) opstack1[0] = opstack1[0].derive(opstack1[0].length-op1.length)\n else opstack1.shift()\n }\n\n if(op2) {\n if(op1) op2 = op2.derive(Math.min(op1.length, op2.length)) // slice 'em into equally long pieces\n if(opstack2[0].length > op2.length) opstack2[0] = opstack2[0].derive(opstack2[0].length-op2.length)\n else opstack2.shift()\n }\n\n func(op1, op2)\n\n if(op1 && op1.length) opstack1.unshift(op1)\n if(op2 && op2.length) opstack2.unshift(op2)\n }\n}\n\n/**\n * Inclusion Transformation (IT) or Forward Transformation\n *\n * transforms the operations of the current changeset against the\n * all operations in another changeset in such a way that the\n * effects of the latter are effectively included.\n * This is basically like a applying the other cs on this one.\n *\n * @param otherCs <Changeset>\n * @param left <boolean> Which op to choose if there's an insert tie (If you use this function in a distributed, synchronous environment, be sure to invert this param on the other site, otherwise it can be omitted safely)\n *\n * @returns <Changeset>\n */\nChangeset.prototype.transformAgainst = function(otherCs, left) {\n if(this.inputLength != otherCs.inputLength) {\n throw new Error('Can\\'t transform changesets with differing inputLength: '+this.inputLength+' and '+otherCs.inputLength)\n }\n\n var transformation = new ChangesetTransform(this, [new Retain(Infinity)])\n otherCs.forEach(function(op) {\n var nextOp = this.subrange(transformation.pos, Infinity)[0] // next op of this cs\n if(nextOp && !nextOp.input && !op.input) { // two inserts tied; left breaks it\n if (left) transformation.writeOutput(transformation.readInput(nextOp.length))\n }\n op.apply(transformation)\n }.bind(this))\n\n return transformation.result()\n}\n\n/**\n * Exclusion Transformation (ET) or Backwards Transformation\n *\n * transforms all operations in the current changeset against the operations\n * in another changeset in such a way that the impact of the latter are effectively excluded\n *\n * @param changeset <Changeset> the changeset to substract from this one\n * @param left <boolean> Which op to choose if there's an insert tie (If you use this function in a distributed, synchronous environment, be sure to invert this param on the other site, otherwise it can be omitted safely)\n * @returns <Changeset>\n */\nChangeset.prototype.substract = function(changeset, left) {\n // The current operations assume that the changes in\n // `changeset` happened before, so for each of those ops\n // we create an operation that undoes its effect and\n // transform all our operations on top of the inverse changes\n return this.transformAgainst(changeset.invert(), left)\n}\n\n/**\n * Returns the inverse Changeset of the current one\n *\n * Changeset.invert().apply(Changeset.apply(document)) == document\n */\nChangeset.prototype.invert = function() {\n // invert all ops\n var newCs = new Changeset(this.map(function(op) {\n return op.invert()\n }))\n\n // removendum becomes addendum and vice versa\n newCs.addendum = this.removendum\n newCs.removendum = this.addendum\n\n return newCs\n}\n\n/**\n * Applies this changeset on a text\n */\nChangeset.prototype.apply = function(input) {\n // pre-requisites\n if(input.length != this.inputLength) throw new Error('Input length doesn\\'t match expected length. expected: '+this.inputLength+'; actual: '+input.length)\n\n var operation = new TextTransform(input, this.addendum, this.removendum)\n\n this.forEach(function(op) {\n // each Operation has access to all pointers as well as the input, addendum and removendum (the latter are immutable)\n op.apply(operation)\n }.bind(this))\n\n return operation.result()\n}\n\n/**\n * Returns an array of strings describing this changeset's operations\n */\nChangeset.prototype.inspect = function() {\n var j = 0\n return this.map(function(op) {\n var string = ''\n\n if(!op.input) { // if Insert\n string = this.addendum.substr(j,op.length)\n j += op.length\n return string\n }\n\n for(var i=0; i<op.length; i++) string += op.symbol\n return string\n }.bind(this)).join('')\n}\n\n/**\n * Serializes the given changeset in order to return a (hopefully) more compact representation\n * than json that can be sent through a network or stored in a database\n *\n * Numbers are converted to the base 36, unsafe chars in the text are urlencoded\n *\n * @param cs <Changeset> The changeset to be serialized\n * @returns <String> The serialized changeset\n */\nChangeset.prototype.pack = function() {\n var packed = this.map(function(op) {\n return op.pack()\n }).join('')\n\n var addendum = this.addendum.replace(/%/g, '%25').replace(/\\|/g, '%7C')\n , removendum = this.removendum.replace(/%/g, '%25').replace(/\\|/g, '%7C')\n return packed+'|'+addendum+'|'+removendum\n}\nChangeset.prototype.toString = function() {\n return this.pack()\n}\n\n/**\n * Unserializes the output of cs.text.Changeset#toString()\n *\n * @param packed <String> The serialized changeset\n * @param <cs.Changeset>\n */\nChangeset.unpack = function(packed) {\n if(packed == '') throw new Error('Cannot unpack from empty string')\n var components = packed.split('|')\n , opstring = components[0]\n , addendum = components[1].replace(/%7c/gi, '|').replace(/%25/g, '%')\n , removendum = components[2].replace(/%7c/gi, '|').replace(/%25/g, '%')\n\n var matches = opstring.match(/[=+-]([^=+-])+/g)\n if(!matches) throw new Error('Cannot unpack invalidly serialized op string')\n\n var ops = []\n matches.forEach(function(s) {\n var symbol = s.substr(0,1)\n , data = s.substr(1)\n if(Skip.prototype.symbol == symbol) return ops.push(Skip.unpack(data))\n if(Insert.prototype.symbol == symbol) return ops.push(Insert.unpack(data))\n if(Retain.prototype.symbol == symbol) return ops.push(Retain.unpack(data))\n throw new Error('Invalid changeset representation passed to Changeset.unpack')\n })\n\n var cs = new Changeset(ops)\n cs.addendum = addendum\n cs.removendum = removendum\n\n return cs\n}\n\nChangeset.create = function() {\n return new Builder\n}\n\n/**\n * Returns a Changeset containing the operations needed to transform text1 into text2\n *\n * @param text1 <String>\n * @param text2 <String>\n */\nChangeset.fromDiff = function(diff) {\n /**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\n var DIFF_DELETE = -1;\n var DIFF_INSERT = 1;\n var DIFF_EQUAL = 0;\n\n var ops = []\n , removendum = ''\n , addendum = ''\n\n diff.forEach(function(d) {\n if (DIFF_DELETE == d[0]) {\n ops.push(new Skip(d[1].length))\n removendum += d[1]\n }\n\n if (DIFF_INSERT == d[0]) {\n ops.push(new Insert(d[1].length))\n addendum += d[1]\n }\n\n if(DIFF_EQUAL == d[0]) {\n ops.push(new Retain(d[1].length))\n }\n })\n\n var cs = new Changeset(ops)\n cs.addendum = addendum\n cs.removendum = removendum\n return cs\n}\n","/*!\n * changesets\n * A Changeset library incorporating operational ChangesetTransform (OT)\n * Copyright 2012 by Marcel Klehr <mklehr@gmx.net>\n *\n * (MIT LICENSE)\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar Retain = require('./operations/Retain')\n , Skip = require('./operations/Skip')\n , Insert = require('./operations/Insert')\n , Changeset = require('./Changeset')\n\n\nfunction ChangesetTransform(inputCs, addendum) {\n this.output = []\n this.addendum = addendum\n this.newRemovendum = ''\n this.newAddendum = ''\n\n this.cs = inputCs\n this.pos = 0\n this.addendumPointer = 0\n this.removendumPointer = 0\n}\nmodule.exports = ChangesetTransform\n\nChangesetTransform.prototype.readInput = function (len) {\n var ret = this.cs.subrange(this.pos, len)\n this.pos += len\n return ret\n}\n\nChangesetTransform.prototype.readAddendum = function (len) {\n //return [new Retain(len)]\n var ret = this.subrange(this.addendum, this.addendumPointer, len)\n this.addendumPointer += len\n return ret\n}\n\nChangesetTransform.prototype.writeRemovendum = function (range) {\n range\n .filter(function(op) {return !op.output})\n .forEach(function(op) {\n this.removendumPointer += op.length\n }.bind(this))\n}\n\nChangesetTransform.prototype.writeOutput = function (range) {\n this.output = this.output.concat(range)\n range\n .filter(function(op) {return !op.output})\n .forEach(function(op) {\n this.newRemovendum += this.cs.removendum.substr(this.removendumPointer, op.length)\n this.removendumPointer += op.length\n }.bind(this))\n}\n\nChangesetTransform.prototype.subrange = function (range, start, len) {\n if(len) return this.cs.subrange.call(range, start, len)\n else return range.filter(function(op){ return !op.input})\n}\n\nChangesetTransform.prototype.result = function() {\n this.writeOutput(this.readInput(Infinity))\n var newCs = new Changeset(this.output)\n newCs.addendum = this.cs.addendum\n newCs.removendum = this.newRemovendum\n return newCs\n}\n","function Operator() {\n}\n\nmodule.exports = Operator\n\nOperator.prototype.clone = function() {\n return this.derive(this.length)\n}\n\nOperator.prototype.derive = function(len) {\n return new (this.constructor)(len)\n}\n\nOperator.prototype.pack = function() {\n return this.symbol + (this.length).toString(36)\n}\n","/*!\n * changesets\n * A Changeset library incorporating operational Apply (OT)\n * Copyright 2012 by Marcel Klehr <mklehr@gmx.net>\n *\n * (MIT LICENSE)\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar Retain = require('./operations/Retain')\n , Skip = require('./operations/Skip')\n , Insert = require('./operations/Insert')\n , Insert = require('./Changeset')\n\n\nfunction TextTransform(input, addendum, removendum) {\n this.output = ''\n\n this.input = input\n this.addendum = addendum\n this.removendum = removendum\n this.pos = 0\n this.addPos = 0\n this.remPos = 0\n}\nmodule.exports = TextTransform\n\nTextTransform.prototype.readInput = function (len) {\n var ret = this.input.substr(this.pos, len)\n this.pos += len\n return ret\n}\n\nTextTransform.prototype.readAddendum = function (len) {\n var ret = this.addendum.substr(this.addPos, len)\n this.addPos += len\n return ret\n}\n\nTextTransform.prototype.writeRemovendum = function (range) {\n //var expected = this.removendum.substr(this.remPos, range.length)\n //if(range != expected) throw new Error('Removed chars don\\'t match removendum. expected: '+expected+'; actual: '+range)\n this.remPos += range.length\n}\n\nTextTransform.prototype.writeOutput = function (range) {\n this.output += range\n}\n\nTextTransform.prototype.subrange = function (range, start, len) {\n return range.substr(start, len)\n}\n\nTextTransform.prototype.result = function() {\n this.writeOutput(this.readInput(Infinity))\n return this.output\n}\n","/*!\n * changesets\n * A Changeset library incorporating operational transformation (OT)\n * Copyright 2012 by Marcel Klehr <mklehr@gmx.net>\n *\n * (MIT LICENSE)\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar Changeset = require('./Changeset')\n , Retain = require('./operations/Retain')\n , Skip = require('./operations/Skip')\n , Insert = require('./operations/Insert')\n\nexports.Operator = require('./Operator')\nexports.Changeset = Changeset\nexports.Insert = Insert\nexports.Retain = Retain\nexports.Skip = Skip\n\nif('undefined' != typeof window) window.changesets = exports\n\n/**\n * Serializes the given changeset in order to return a (hopefully) more compact representation\n * that can be sent through a network or stored in a database\n * @alias cs.text.Changeset#pack\n */\nexports.pack = function(cs) {\n return cs.pack()\n}\n\n/**\n * Unserializes the output of cs.text.pack\n * @alias cs.text.Changeset.unpack\n */\nexports.unpack = function(packed) {\n return Changeset.unpack(packed)\n}\n\n\n\n\n/**\n * shareJS ot type API sepc support\n */\n\nexports.name = 'changesets'\nexports.url = 'https://github.com/marcelklehr/changesets'\n\n/**\n * create([initialText])\n *\n * creates a snapshot (optionally with supplied intial text)\n */\nexports.create = function(initText) {\n return initText || ''\n}\n\n/**\n * Apply a changeset on a snapshot creating a new one\n *\n * The old snapshot object mustn't be used after calling apply on it\n * returns the resulting\n */\nexports.apply = function(snapshot, op) {\n op = exports.unpack(op)\n return op.apply(snapshot)\n}\n\n/**\n * Transform changeset1 against changeset2\n */\nexports.transform = function (op1, op2, side) {\n op1 = exports.unpack(op1)\n op2 = exports.unpack(op2)\n return exports.pack(op1.transformAgainst(op2, ('left'==side)))\n}\n\n/**\n * Merge two changesets into one\n */\nexports.compose = function (op1, op2) {\n op1 = exports.unpack(op1)\n op2 = exports.unpack(op2)\n return exports.pack(op1.merge(op2))\n}\n\n/**\n * Invert a changeset\n */\nexports.invert = function(op) {\n return exports.pack(exports.unpack(op).invert())\n}\n","/*!\n * changesets\n * A Changeset library incorporating operational transformation (OT)\n * Copyright 2012 by Marcel Klehr <mklehr@gmx.net>\n *\n * (MIT LICENSE)\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar Operator = require('../Operator')\n\n/**\n * Insert Operator\n * Defined by:\n * - length\n * - input=0\n * - output=length\n *\n * @param length <Number> How many chars to be inserted\n */\nfunction Insert(length) {\n this.length = length\n this.input = 0\n this.output = length\n}\n\n// True inheritance\nInsert.prototype = Object.create(Operator.prototype, {\n constructor: {\n value: Insert,\n enumerable: false,\n writable: true,\n configurable: true\n }\n});\nmodule.exports = Insert\nInsert.prototype.symbol = '+'\n\nvar Skip = require('./Skip')\n , Retain = require('./Retain')\n\nInsert.prototype.apply = function(t) {\n t.writeOutput(t.readAddendum(this.output))\n}\n\nInsert.prototype.merge = function() {\n return this\n}\n\nInsert.prototype.invert = function() {\n return new Skip(this.length)\n}\n\nInsert.unpack = function(data) {\n return new Insert(parseInt(data, 36))\n}\n","/*!\n * changesets\n * A Changeset library incorporating operational transformation (OT)\n * Copyright 2012 by Marcel Klehr <mklehr@gmx.net>\n *\n * (MIT LICENSE)\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar Operator = require('../Operator')\n\n/**\n * Retain Operator\n * Defined by:\n * - length\n * - input=output=length\n *\n * @param length <Number> How many chars to retain\n */\nfunction Retain(length) {\n this.length = length\n this.input = length\n this.output = length\n}\n\n// True inheritance\nRetain.prototype = Object.create(Operator.prototype, {\n constructor: {\n value: Retain,\n enumerable: false,\n writable: true,\n configurable: true\n }\n});\nmodule.exports = Retain\nRetain.prototype.symbol = '='\n\nRetain.prototype.apply = function(t) {\n t.writeOutput(t.readInput(this.input))\n}\n\nRetain.prototype.invert = function() {\n return this\n}\n\nRetain.prototype.merge = function(op2) {\n return this\n}\n\nRetain.unpack = function(data) {\n return new Retain(parseInt(data, 36))\n}\n","/*!\n * changesets\n * A Changeset library incorporating operational transformation (OT)\n * Copyright 2012 by Marcel Klehr <mklehr@gmx.net>\n *\n * (MIT LICENSE)\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar Operator = require('../Operator')\n\n/**\n * Skip Operator\n * Defined by:\n * - length\n * - input=length\n * - output=0\n *\n * @param length <Number> How many chars to be Skip\n */\nfunction Skip(length) {\n this.length = length\n this.input = length\n this.output = 0\n}\n\n// True inheritance\nSkip.prototype = Object.create(Operator.prototype, {\n constructor: {\n value: Skip,\n enumerable: false,\n writable: true,\n configurable: true\n }\n});\nmodule.exports = Skip\nSkip.prototype.symbol = '-'\n\nvar Insert = require('./Insert')\n , Retain = require('./Retain')\n , Changeset = require('../Changeset')\n\nSkip.prototype.apply = function(t) {\n var input = t.readInput(this.input)\n t.writeRemovendum(input)\n t.writeOutput(t.subrange(input, 0, this.output)) // retain Inserts in my range\n}\n\nSkip.prototype.merge = function(op2) {\n return this\n}\n\nSkip.prototype.invert = function() {\n return new Insert(this.length)\n}\n\nSkip.unpack = function(data) {\n return new Skip(parseInt(data, 36))\n}\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/**\n * Diff Match and Patch\n *\n * Copyright 2006 Google Inc.\n * http://code.google.com/p/google-diff-match-patch/\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Computes the difference between two texts to create a patch.\n * Applies the patch onto another text, allowing for errors.\n * @author fraser@google.com (Neil Fraser)\n */\n\n/**\n * Class containing the diff, match and patch methods.\n * @constructor\n */\nfunction diff_match_patch() {\n\n // Defaults.\n // Redefine these in your program to override the defaults.\n\n // Number of seconds to map a diff before giving up (0 for infinity).\n this.Diff_Timeout = 1.0;\n // Cost of an empty edit operation in terms of edit characters.\n this.Diff_EditCost = 4;\n // The size beyond which the double-ended diff activates.\n // Double-ending is twice as fast, but less accurate.\n this.Diff_DualThreshold = 32;\n // At what point is no match declared (0.0 = perfection, 1.0 = very loose).\n this.Match_Threshold = 0.5;\n // How far to search for a match (0 = exact location, 1000+ = broad match).\n // A match this many characters away from the expected location will add\n // 1.0 to the score (0.0 is a perfect match).\n this.Match_Distance = 1000;\n // When deleting a large block of text (over ~64 characters), how close does\n // the contents have to match the expected contents. (0.0 = perfection,\n // 1.0 = very loose). Note that Match_Threshold controls how closely the\n // end points of a delete need to match.\n this.Patch_DeleteThreshold = 0.5;\n // Chunk size for context length.\n this.Patch_Margin = 4;\n\n /**\n * Compute the number of bits in an int.\n * The normal answer for JavaScript is 32.\n * @return {number} Max bits\n */\n function getMaxBits() {\n var maxbits = 0;\n var oldi = 1;\n var newi = 2;\n while (oldi != newi) {\n maxbits++;\n oldi = newi;\n newi = newi << 1;\n }\n return maxbits;\n }\n // How many bits in a number?\n this.Match_MaxBits = getMaxBits();\n}\n\n\n// DIFF FUNCTIONS\n\n\n/**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\nvar DIFF_DELETE = -1;\nvar DIFF_INSERT = 1;\nvar DIFF_EQUAL = 0;\n\n\n/**\n * Find the differences between two texts. Simplifies the problem by stripping\n * any common prefix or suffix off the texts before diffing.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {boolean} opt_checklines Optional speedup flag. If present and false,\n * then don't run a line-level diff first to identify the changed areas.\n * Defaults to true, which does a faster, slightly less optimal diff\n * @return {Array.<Array.<number|string>>} Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_main = function(text1, text2, opt_checklines) {\n // Check for null inputs.\n if (text1 == null || text2 == null) {\n throw new Error('Null input. (diff_main)');\n }\n\n // Check for equality (speedup).\n if (text1 == text2) {\n return [[DIFF_EQUAL, text1]];\n }\n\n if (typeof opt_checklines == 'undefined') {\n opt_checklines = true;\n }\n var checklines = opt_checklines;\n\n // Trim off common prefix (speedup).\n var commonlength = this.diff_commonPrefix(text1, text2);\n var commonprefix = text1.substring(0, commonlength);\n text1 = text1.substring(commonlength);\n text2 = text2.substring(commonlength);\n\n // Trim off common suffix (speedup).\n commonlength = this.diff_commonSuffix(text1, text2);\n var commonsuffix = text1.substring(text1.length - commonlength);\n text1 = text1.substring(0, text1.length - commonlength);\n text2 = text2.substring(0, text2.length - commonlength);\n\n // Compute the diff on the middle block.\n var diffs = this.diff_compute(text1, text2, checklines);\n\n // Restore the prefix and suffix.\n if (commonprefix) {\n diffs.unshift([DIFF_EQUAL, commonprefix]);\n }\n if (commonsuffix) {\n diffs.push([DIFF_EQUAL, commonsuffix]);\n }\n this.diff_cleanupMerge(diffs);\n return diffs;\n};\n\n\n/**\n * Find the differences between two texts. Assumes that the texts do not\n * have any common prefix or suffix.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {boolean} checklines Speedup flag. If false, then don't run a\n * line-level diff first to identify the changed areas.\n * If true, then run a faster, slightly less optimal diff\n * @return {Array.<Array.<number|string>>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_compute = function(text1, text2, checklines) {\n var diffs;\n\n if (!text1) {\n // Just add some text (speedup).\n return [[DIFF_INSERT, text2]];\n }\n\n if (!text2) {\n // Just delete some text (speedup).\n return [[DIFF_DELETE, text1]];\n }\n\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n var i = longtext.indexOf(shorttext);\n if (i != -1) {\n // Shorter text is inside the longer text (speedup).\n diffs = [[DIFF_INSERT, longtext.substring(0, i)],\n [DIFF_EQUAL, shorttext],\n [DIFF_INSERT, longtext.substring(i + shorttext.length)]];\n // Swap insertions for deletions if diff is reversed.\n if (text1.length > text2.length) {\n diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n }\n return diffs;\n }\n longtext = shorttext = null; // Garbage collect.\n\n // Check to see if the problem can be split in two.\n var hm = this.diff_halfMatch(text1, text2);\n if (hm) {\n // A half-match was found, sort out the return data.\n var text1_a = hm[0];\n var text1_b = hm[1];\n var text2_a = hm[2];\n var text2_b = hm[3];\n var mid_common = hm[4];\n // Send both pairs off for separate processing.\n var diffs_a = this.diff_main(text1_a, text2_a, checklines);\n var diffs_b = this.diff_main(text1_b, text2_b, checklines);\n // Merge the results.\n return diffs_a.concat([[DIFF_EQUAL, mid_common]], diffs_b);\n }\n\n // Perform a real diff.\n if (checklines && (text1.length < 100 || text2.length < 100)) {\n // Too trivial for the overhead.\n checklines = false;\n }\n var linearray;\n if (checklines) {\n // Scan the text on a line-by-line basis first.\n var a = this.diff_linesToChars(text1, text2);\n text1 = a[0];\n text2 = a[1];\n linearray = a[2];\n }\n diffs = this.diff_map(text1, text2);\n if (!diffs) {\n // No acceptable result.\n diffs = [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];\n }\n if (checklines) {\n // Convert the diff back to original text.\n this.diff_charsToLines(diffs, linearray);\n // Eliminate freak matches (e.g. blank lines)\n this.diff_cleanupSemantic(diffs);\n\n // Rediff any replacement blocks, this time character-by-character.\n // Add a dummy entry at the end.\n diffs.push([DIFF_EQUAL, '']);\n var pointer = 0;\n var count_delete = 0;\n var count_insert = 0;\n var text_delete = '';\n var text_insert = '';\n while (pointer < diffs.length) {\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n count_insert++;\n text_insert += diffs[pointer][1];\n break;\n case DIFF_DELETE:\n count_delete++;\n text_delete += diffs[pointer][1];\n break;\n case DIFF_EQUAL:\n // Upon reaching an equality, check for prior redundancies.\n if (count_delete >= 1 && count_insert >= 1) {\n // Delete the offending records and add the merged ones.\n var a = this.diff_main(text_delete, text_insert, false);\n diffs.splice(pointer - count_delete - count_insert,\n count_delete + count_insert);\n pointer = pointer - count_delete - count_insert;\n for (var j = a.length - 1; j >= 0; j--) {\n diffs.splice(pointer, 0, a[j]);\n }\n pointer = pointer + a.length;\n }\n count_insert = 0;\n count_delete = 0;\n text_delete = '';\n text_insert = '';\n break;\n }\n pointer++;\n }\n diffs.pop(); // Remove the dummy entry at the end.\n }\n return diffs;\n};\n\n\n/**\n * Split two texts into an array of strings. Reduce the texts to a string of\n * hashes where each Unicode character represents one line.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {Array.<string|Array.<string>>} Three element Array, containing the\n * encoded text1, the encoded text2 and the array of unique strings. The\n * zeroth element of the array of unique strings is intentionally blank.\n * @private\n */\ndiff_match_patch.prototype.diff_linesToChars = function(text1, text2) {\n var lineArray = []; // e.g. lineArray[4] == 'Hello\\n'\n var lineHash = {}; // e.g. lineHash['Hello\\n'] == 4\n\n // '\\x00' is a valid character, but various debuggers don't like it.\n // So we'll insert a junk entry to avoid generating a null character.\n lineArray[0] = '';\n\n /**\n * Split a text into an array of strings. Reduce the texts to a string of\n * hashes where each Unicode character represents one line.\n * Modifies linearray and linehash through being a closure.\n * @param {string} text String to encode.\n * @return {string} Encoded string.\n * @private\n */\n function diff_linesToCharsMunge(text) {\n var chars = '';\n // Walk the text, pulling out a substring for each line.\n // text.split('\\n') would would temporarily double our memory footprint.\n // Modifying text would create many large strings to garbage collect.\n var lineStart = 0;\n var lineEnd = -1;\n // Keeping our own length variable is faster than looking it up.\n var lineArrayLength = lineArray.length;\n while (lineEnd < text.length - 1) {\n lineEnd = text.indexOf('\\n', lineStart);\n if (lineEnd == -1) {\n lineEnd = text.length - 1;\n }\n var line = text.substring(lineStart, lineEnd + 1);\n lineStart = lineEnd + 1;\n\n if (lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line) :\n (lineHash[line] !== undefined)) {\n chars += String.fromCharCode(lineHash[line]);\n } else {\n chars += String.fromCharCode(lineArrayLength);\n lineHash[line] = lineArrayLength;\n lineArray[lineArrayLength++] = line;\n }\n }\n return chars;\n }\n\n var chars1 = diff_linesToCharsMunge(text1);\n var chars2 = diff_linesToCharsMunge(text2);\n return [chars1, chars2, lineArray];\n};\n\n\n/**\n * Rehydrate the text in a diff from a string of line hashes to real lines of\n * text.\n * @param {Array.<Array.<number|string>>} diffs Array of diff tuples.\n * @param {Array.<string>} lineArray Array of unique strings.\n * @private\n */\ndiff_match_patch.prototype.diff_charsToLines = function(diffs, lineArray) {\n for (var x = 0; x < diffs.length; x++) {\n var chars = diffs[x][1];\n var text = [];\n for (var y = 0; y < chars.length; y++) {\n text[y] = lineArray[chars.charCodeAt(y)];\n }\n diffs[x][1] = text.join('');\n }\n};\n\n\n/**\n * Explore the intersection points between the two texts.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {?Array.<Array.<number|string>>} Array of diff tuples or null if no\n * diff available.\n * @private\n */\ndiff_match_patch.prototype.diff_map = function(text1, text2) {\n // Don't run for too long.\n var ms_end = (new Date()).getTime() + this.Diff_Timeout * 1000;\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length;\n var max_d = text1_length + text2_length - 1;\n var doubleEnd = this.Diff_DualThreshold * 2 < max_d;\n // JavaScript efficiency note: (x << 32) + y doesn't work since numbers are\n // only 32 bit. Use x + ',' + y to create a hash instead.\n var v_map1 = [];\n var v_map2 = [];\n var v1 = {};\n var v2 = {};\n v1[1] = 0;\n v2[1] = 0;\n var x, y;\n var footstep; // Used to track overlapping paths.\n var footsteps = {};\n var done = false;\n // If the total number of characters is odd, then the front path will collide\n // with the reverse path.\n var front = (text1_length + text2_length) % 2;\n for (var d = 0; d < max_d; d++) {\n // Bail out if timeout reached.\n if (this.Diff_Timeout > 0 && (new Date()).getTime() > ms_end) {\n return null;\n }\n\n // Walk the front path one step.\n v_map1[d] = {};\n for (var k = -d; k <= d; k += 2) {\n if (k == -d || k != d && v1[k - 1] < v1[k + 1]) {\n x = v1[k + 1];\n } else {\n x = v1[k - 1] + 1;\n }\n y = x - k;\n if (doubleEnd) {\n footstep = x + ',' + y;\n if (front && footsteps[footstep] !== undefined) {\n done = true;\n }\n if (!front) {\n footsteps[footstep] = d;\n }\n }\n while (!done && x < text1_length && y < text2_length &&\n text1.charAt(x) == text2.charAt(y)) {\n x++;\n y++;\n if (doubleEnd) {\n footstep = x + ',' + y;\n if (front && footsteps[footstep] !== undefined) {\n done = true;\n }\n if (!front) {\n footsteps[footstep] = d;\n }\n }\n }\n v1[k] = x;\n v_map1[d][x + ',' + y] = true;\n if (x == text1_length && y == text2_length) {\n // Reached the end in single-path mode.\n return this.diff_path1(v_map1, text1, text2);\n } else if (done) {\n // Front path ran over reverse path.\n v_map2 = v_map2.slice(0, footsteps[footstep] + 1);\n var a = this.diff_path1(v_map1, text1.substring(0, x),\n text2.substring(0, y));\n return a.concat(this.diff_path2(v_map2, text1.substring(x),\n text2.substring(y)));\n }\n }\n\n if (doubleEnd) {\n // Walk the reverse path one step.\n v_map2[d] = {};\n for (var k = -d; k <= d; k += 2) {\n if (k == -d || k != d && v2[k - 1] < v2[k + 1]) {\n x = v2[k + 1];\n } else {\n x = v2[k - 1] + 1;\n }\n y = x - k;\n footstep = (text1_length - x) + ',' + (text2_length - y);\n if (!front && footsteps[footstep] !== undefined) {\n done = true;\n }\n if (front) {\n footsteps[footstep] = d;\n }\n while (!done && x < text1_length && y < text2_length &&\n text1.charAt(text1_length - x - 1) ==\n text2.charAt(text2_length - y - 1)) {\n x++;\n y++;\n footstep = (text1_length - x) + ',' + (text2_length - y);\n if (!front && footsteps[footstep] !== undefined) {\n done = true;\n }\n if (front) {\n footsteps[footstep] = d;\n }\n }\n v2[k] = x;\n v_map2[d][x + ',' + y] = true;\n if (done) {\n // Reverse path ran over front path.\n v_map1 = v_map1.slice(0, footsteps[footstep] + 1);\n var a = this.diff_path1(v_map1, text1.substring(0, text1_length - x),\n text2.substring(0, text2_length - y));\n return a.concat(this.diff_path2(v_map2,\n text1.substring(text1_length - x),\n text2.substring(text2_length - y)));\n }\n }\n }\n }\n // Number of diffs equals number of characters, no commonality at all.\n return null;\n};\n\n\n/**\n * Work from the middle back to the start to determine the path.\n * @param {Array.<Object>} v_map Array of paths.\n * @param {string} text1 Old string fragment to be diffed.\n * @param {string} text2 New string fragment to be diffed.\n * @return {Array.<Array.<number|string>>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_path1 = function(v_map, text1, text2) {\n var path = [];\n var x = text1.length;\n var y = text2.length;\n /** @type {?number} */\n var last_op = null;\n for (var d = v_map.length - 2; d >= 0; d--) {\n while (1) {\n if (v_map[d][(x - 1) + ',' + y] !== undefined) {\n x--;\n if (last_op === DIFF_DELETE) {\n path[0][1] = text1.charAt(x) + path[0][1];\n } else {\n path.unshift([DIFF_DELETE, text1.charAt(x)]);\n }\n last_op = DIFF_DELETE;\n break;\n } else if (v_map[d][x + ',' + (y - 1)] !== undefined) {\n y--;\n if (last_op === DIFF_INSERT) {\n path[0][1] = text2.charAt(y) + path[0][1];\n } else {\n path.unshift([DIFF_INSERT, text2.charAt(y)]);\n }\n last_op = DIFF_INSERT;\n break;\n } else {\n x--;\n y--;\n if (text1.charAt(x) != text2.charAt(y)) {\n throw new Error('No diagonal. Can\\'t happen. (diff_path1)');\n }\n if (last_op === DIFF_EQUAL) {\n path[0][1] = text1.charAt(x) + path[0][1];\n } else {\n path.unshift([DIFF_EQUAL, text1.charAt(x)]);\n }\n last_op = DIFF_EQUAL;\n }\n }\n }\n return path;\n};\n\n\n/**\n * Work from the middle back to the end to determine the path.\n * @param {Array.<Object>} v_map Array of paths.\n * @param {string} text1 Old string fragment to be diffed.\n * @param {string} text2 New string fragment to be diffed.\n * @return {Array.<Array.<number|string>>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_path2 = function(v_map, text1, text2) {\n var path = [];\n var pathLength = 0;\n var x = text1.length;\n var y = text2.length;\n /** @type {?number} */\n var last_op = null;\n for (var d = v_map.length - 2; d >= 0; d--) {\n while (1) {\n if (v_map[d][(x - 1) + ',' + y] !== undefined) {\n x--;\n if (last_op === DIFF_DELETE) {\n path[pathLength - 1][1] += text1.charAt(text1.length - x - 1);\n } else {\n path[pathLength++] =\n [DIFF_DELETE, text1.charAt(text1.length - x - 1)];\n }\n last_op = DIFF_DELETE;\n break;\n } else if (v_map[d][x + ',' + (y - 1)] !== undefined) {\n y--;\n if (last_op === DIFF_INSERT) {\n path[pathLength - 1][1] += text2.charAt(text2.length - y - 1);\n } else {\n path[pathLength++] =\n [DIFF_INSERT, text2.charAt(text2.length - y - 1)];\n }\n last_op = DIFF_INSERT;\n break;\n } else {\n x--;\n y--;\n if (text1.charAt(text1.length - x - 1) !=\n text2.charAt(text2.length - y - 1)) {\n throw new Error('No diagonal. Can\\'t happen. (diff_path2)');\n }\n if (last_op === DIFF_EQUAL) {\n path[pathLength - 1][1] += text1.charAt(text1.length - x - 1);\n } else {\n path[pathLength++] =\n [DIFF_EQUAL, text1.charAt(text1.length - x - 1)];\n }\n last_op = DIFF_EQUAL;\n }\n }\n }\n return path;\n};\n\n\n/**\n * Determine the common prefix of two strings\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the start of each\n * string.\n */\ndiff_match_patch.prototype.diff_commonPrefix = function(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerstart = 0;\n while (pointermin < pointermid) {\n if (text1.substring(pointerstart, pointermid) ==\n text2.substring(pointerstart, pointermid)) {\n pointermin = pointermid;\n pointerstart = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n return pointermid;\n};\n\n\n/**\n * Determine the common suffix of two strings\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of each string.\n */\ndiff_match_patch.prototype.diff_commonSuffix = function(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 || text1.charAt(text1.length - 1) !=\n text2.charAt(text2.length - 1)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerend = 0;\n while (pointermin < pointermid) {\n if (text1.substring(text1.length - pointermid, text1.length - pointerend) ==\n text2.substring(text2.length - pointermid, text2.length - pointerend)) {\n pointermin = pointermid;\n pointerend = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n return pointermid;\n};\n\n\n/**\n * Do the two texts share a substring which is at least half the length of the\n * longer text?\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {?Array.<string>} Five element Array, containing the prefix of\n * text1, the suffix of text1, the prefix of text2, the suffix of\n * text2 and the common middle. Or null if there was no match.\n */\ndiff_match_patch.prototype.diff_halfMatch = function(text1, text2) {\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n if (longtext.length < 10 || shorttext.length < 1) {\n return null; // Pointless.\n }\n var dmp = this; // 'this' becomes 'window' in a closure.\n\n /**\n * Does a substring of shorttext exist within longtext such that the substring\n * is at least half the length of longtext?\n * Closure, but does not reference any external variables.\n * @param {string} longtext Longer string.\n * @param {string} shorttext Shorter string.\n * @param {number} i Start index of quarter length substring within longtext\n * @return {?Array.<string>} Five element Array, containing the prefix of\n * longtext, the suffix of longtext, the prefix of shorttext, the suffix\n * of shorttext and the common middle. Or null if there was no match.\n * @private\n */\n function diff_halfMatchI(longtext, shorttext, i) {\n // Start with a 1/4 length substring at position i as a seed.\n var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n var j = -1;\n var best_common = '';\n var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n while ((j = shorttext.indexOf(seed, j + 1)) != -1) {\n var prefixLength = dmp.diff_commonPrefix(longtext.substring(i),\n shorttext.substring(j));\n var suffixLength = dmp.diff_commonSuffix(longtext.substring(0, i),\n shorttext.substring(0, j));\n if (best_common.length < suffixLength + prefixLength) {\n best_common = shorttext.substring(j - suffixLength, j) +\n shorttext.substring(j, j + prefixLength);\n best_longtext_a = longtext.substring(0, i - suffixLength);\n best_longtext_b = longtext.substring(i + prefixLength);\n best_shorttext_a = shorttext.substring(0, j - suffixLength);\n best_shorttext_b = shorttext.substring(j + prefixLength);\n }\n }\n if (best_common.length >= longtext.length / 2) {\n return [best_longtext_a, best_longtext_b,\n best_shorttext_a, best_shorttext_b, best_common];\n } else {\n return null;\n }\n }\n\n // First check if the second quarter is the seed for a half-match.\n var hm1 = diff_halfMatchI(longtext, shorttext,\n Math.ceil(longtext.length / 4));\n // Check again based on the third quarter.\n var hm2 = diff_halfMatchI(longtext, shorttext,\n Math.ceil(longtext.length / 2));\n var hm;\n if (!hm1 && !hm2) {\n return null;\n } else if (!hm2) {\n hm = hm1;\n } else if (!hm1) {\n hm = hm2;\n } else {\n // Both matched. Select the longest.\n hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n }\n\n // A half-match was found, sort out the return data.\n var text1_a, text1_b, text2_a, text2_b;\n if (text1.length > text2.length) {\n text1_a = hm[0];\n text1_b = hm[1];\n text2_a = hm[2];\n text2_b = hm[3];\n } else {\n text2_a = hm[0];\n text2_b = hm[1];\n text1_a = hm[2];\n text1_b = hm[3];\n }\n var mid_common = hm[4];\n return [text1_a, text1_b, text2_a, text2_b, mid_common];\n};\n\n\n/**\n * Reduce the number of edits by eliminating semantically trivial equalities.\n * @param {Array.<Array.<number|string>>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupSemantic = function(diffs) {\n var changes = false;\n var equalities = []; // Stack of indices where equalities are found.\n var equalitiesLength = 0; // Keeping our own length var is faster in JS.\n var lastequality = null; // Always equal to equalities[equalitiesLength-1][1]\n var pointer = 0; // Index of current position.\n // Number of characters that changed prior to the equality.\n var length_changes1 = 0;\n // Number of characters that changed after the equality.\n var length_changes2 = 0;\n while (pointer < diffs.length) {\n if (diffs[pointer][0] == DIFF_EQUAL) { // equality found\n equalities[equalitiesLength++] = pointer;\n length_changes1 = length_changes2;\n length_changes2 = 0;\n lastequality = diffs[pointer][1];\n } else { // an insertion or deletion\n length_changes2 += diffs[pointer][1].length;\n if (lastequality !== null && (lastequality.length <= length_changes1) &&\n (lastequality.length <= length_changes2)) {\n // Duplicate record\n diffs.splice(equalities[equalitiesLength - 1], 0,\n [DIFF_DELETE, lastequality]);\n // Change second copy to insert.\n diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n // Throw away the equality we just deleted.\n equalitiesLength--;\n // Throw away the previous equality (it needs to be reevaluated).\n equalitiesLength--;\n pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;\n length_changes1 = 0; // Reset the counters.\n length_changes2 = 0;\n lastequality = null;\n changes = true;\n }\n }\n pointer++;\n }\n if (changes) {\n this.diff_cleanupMerge(diffs);\n }\n this.diff_cleanupSemanticLossless(diffs);\n};\n\n\n/**\n * Look for single edits surrounded on both sides by equalities\n * which can be shifted sideways to align the edit to a word boundary.\n * e.g: The c<ins>at c</ins>ame. -> The <ins>cat </ins>came.\n * @param {Array.<Array.<number|string>>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupSemanticLossless = function(diffs) {\n // Define some regex patterns for matching boundaries.\n var punctuation = /[^a-zA-Z0-9]/;\n var whitespace = /\\s/;\n var linebreak = /[\\r\\n]/;\n var blanklineEnd = /\\n\\r?\\n$/;\n var blanklineStart = /^\\r?\\n\\r?\\n/;\n\n /**\n * Given two strings, compute a score representing whether the internal\n * boundary falls on logical boundaries.\n * Scores range from 5 (best) to 0 (worst).\n * Closure, makes reference to regex patterns defined above.\n * @param {string} one First string.\n * @param {string} two Second string.\n * @return {number} The score.\n */\n function diff_cleanupSemanticScore(one, two) {\n if (!one || !two) {\n // Edges are the best.\n return 5;\n }\n\n // Each port of this function behaves slightly differently due to\n // subtle differences in each language's definition of things like\n // 'whitespace'. Since this function's purpose is largely cosmetic,\n // the choice has been made to use each language's native features\n // rather than force total conformity.\n var score = 0;\n // One point for non-alphanumeric.\n if (one.charAt(one.length - 1).match(punctuation) ||\n two.charAt(0).match(punctuation)) {\n score++;\n // Two points for whitespace.\n if (one.charAt(one.length - 1).match(whitespace) ||\n two.charAt(0).match(whitespace)) {\n score++;\n // Three points for line breaks.\n if (one.charAt(one.length - 1).match(linebreak) ||\n two.charAt(0).match(linebreak)) {\n score++;\n // Four points for blank lines.\n if (one.match(blanklineEnd) || two.match(blanklineStart)) {\n score++;\n }\n }\n }\n }\n return score;\n }\n\n var pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (diffs[pointer - 1][0] == DIFF_EQUAL &&\n diffs[pointer + 1][0] == DIFF_EQUAL) {\n // This is a single edit surrounded by equalities.\n var equality1 = diffs[pointer - 1][1];\n var edit = diffs[pointer][1];\n var equality2 = diffs[pointer + 1][1];\n\n // First, shift the edit as far left as possible.\n var commonOffset = this.diff_commonSuffix(equality1, edit);\n if (commonOffset) {\n var commonString = edit.substring(edit.length - commonOffset);\n equality1 = equality1.substring(0, equality1.length - commonOffset);\n edit = commonString + edit.substring(0, edit.length - commonOffset);\n equality2 = commonString + equality2;\n }\n\n // Second, step character by character right, looking for the best fit.\n var bestEquality1 = equality1;\n var bestEdit = edit;\n var bestEquality2 = equality2;\n var bestScore = diff_cleanupSemanticScore(equality1, edit) +\n diff_cleanupSemanticScore(edit, equality2);\n while (edit.charAt(0) === equality2.charAt(0)) {\n equality1 += edit.charAt(0);\n edit = edit.substring(1) + equality2.charAt(0);\n equality2 = equality2.substring(1);\n var score = diff_cleanupSemanticScore(equality1, edit) +\n diff_cleanupSemanticScore(edit, equality2);\n // The >= encourages trailing rather than leading whitespace on edits.\n if (score >= bestScore) {\n bestScore = score;\n bestEquality1 = equality1;\n bestEdit = edit;\n bestEquality2 = equality2;\n }\n }\n\n if (diffs[pointer - 1][1] != bestEquality1) {\n // We have an improvement, save it back to the diff.\n if (bestEquality1) {\n diffs[pointer - 1][1] = bestEquality1;\n } else {\n diffs.splice(pointer - 1, 1);\n pointer--;\n }\n diffs[pointer][1] = bestEdit;\n if (bestEquality2) {\n diffs[pointer + 1][1] = bestEquality2;\n } else {\n diffs.splice(pointer + 1, 1);\n pointer--;\n }\n }\n }\n pointer++;\n }\n};\n\n\n/**\n * Reduce the number of edits by eliminating operationally trivial equalities.\n * @param {Array.<Array.<number|string>>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupEfficiency = function(diffs) {\n var changes = false;\n var equalities = []; // Stack of indices where equalities are found.\n var equalitiesLength = 0; // Keeping our own length var is faster in JS.\n var lastequality = ''; // Always equal to equalities[equalitiesLength-1][1]\n var pointer = 0; // Index of current position.\n // Is there an insertion operation before the last equality.\n var pre_ins = false;\n // Is there a deletion operation before the last equality.\n var pre_del = false;\n // Is there an insertion operation after the last equality.\n var post_ins = false;\n // Is there a deletion operation after the last equality.\n var post_del = false;\n while (pointer < diffs.length) {\n if (diffs[pointer][0] == DIFF_EQUAL) { // equality found\n if (diffs[pointer][1].length < this.Diff_EditCost &&\n (post_ins || post_del)) {\n // Candidate found.\n equalities[equalitiesLength++] = pointer;\n pre_ins = post_ins;\n pre_del = post_del;\n lastequality = diffs[pointer][1];\n } else {\n // Not a candidate, and can never become one.\n equalitiesLength = 0;\n lastequality = '';\n }\n post_ins = post_del = false;\n } else { // an insertion or deletion\n if (diffs[pointer][0] == DIFF_DELETE) {\n post_del = true;\n } else {\n post_ins = true;\n }\n /*\n * Five types to be split:\n * <ins>A</ins><del>B</del>XY<ins>C</ins><del>D</del>\n * <ins>A</ins>X<ins>C</ins><del>D</del>\n * <ins>A</ins><del>B</del>X<ins>C</ins>\n * <ins>A</del>X<ins>C</ins><del>D</del>\n * <ins>A</ins><del>B</del>X<del>C</del>\n */\n if (lastequality && ((pre_ins && pre_del && post_ins && post_del) ||\n ((lastequality.length < this.Diff_EditCost / 2) &&\n (pre_ins + pre_del + post_ins + post_del) == 3))) {\n // Duplicate record\n diffs.splice(equalities[equalitiesLength - 1], 0,\n [DIFF_DELETE, lastequality]);\n // Change second copy to insert.\n diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n equalitiesLength--; // Throw away the equality we just deleted;\n lastequality = '';\n if (pre_ins && pre_del) {\n // No changes made which could affect previous entry, keep going.\n post_ins = post_del = true;\n equalitiesLength = 0;\n } else {\n equalitiesLength--; // Throw away the previous equality;\n pointer = equalitiesLength > 0 ?\n equalities[equalitiesLength - 1] : -1;\n post_ins = post_del = false;\n }\n changes = true;\n }\n }\n pointer++;\n }\n\n if (changes) {\n this.diff_cleanupMerge(diffs);\n }\n};\n\n\n/**\n * Reorder and merge like edit sections. Merge equalities.\n * Any edit section can move as long as it doesn't cross an equality.\n * @param {Array.<Array.<number|string>>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupMerge = function(diffs) {\n diffs.push([DIFF_EQUAL, '']); // Add a dummy entry at the end.\n var pointer = 0;\n var count_delete = 0;\n var count_insert = 0;\n var text_delete = '';\n var text_insert = '';\n var commonlength;\n while (pointer < diffs.length) {\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n count_insert++;\n text_insert += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_DELETE:\n count_delete++;\n text_delete += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_EQUAL:\n // Upon reaching an equality, check for prior redundancies.\n if (count_delete !== 0 || count_insert !== 0) {\n if (count_delete !== 0 && count_insert !== 0) {\n // Factor out any common prefixies.\n commonlength = this.diff_commonPrefix(text_insert, text_delete);\n if (commonlength !== 0) {\n if ((pointer - count_delete - count_insert) > 0 &&\n diffs[pointer - count_delete - count_insert - 1][0] ==\n DIFF_EQUAL) {\n diffs[pointer - count_delete - count_insert - 1][1] +=\n text_insert.substring(0, commonlength);\n } else {\n diffs.splice(0, 0, [DIFF_EQUAL,\n text_insert.substring(0, commonlength)]);\n pointer++;\n }\n text_insert = text_insert.substring(commonlength);\n text_delete = text_delete.substring(commonlength);\n }\n // Factor out any common suffixies.\n commonlength = this.diff_commonSuffix(text_insert, text_delete);\n if (commonlength !== 0) {\n diffs[pointer][1] = text_insert.substring(text_insert.length -\n commonlength) + diffs[pointer][1];\n text_insert = text_insert.substring(0, text_insert.length -\n commonlength);\n text_delete = text_delete.substring(0, text_delete.length -\n commonlength);\n }\n }\n // Delete the offending records and add the merged ones.\n if (count_delete === 0) {\n diffs.splice(pointer - count_delete - count_insert,\n count_delete + count_insert, [DIFF_INSERT, text_insert]);\n } else if (count_insert === 0) {\n diffs.splice(pointer - count_delete - count_insert,\n count_delete + count_insert, [DIFF_DELETE, text_delete]);\n } else {\n diffs.splice(pointer - count_delete - count_insert,\n count_delete + count_insert, [DIFF_DELETE, text_delete],\n [DIFF_INSERT, text_insert]);\n }\n pointer = pointer - count_delete - count_insert +\n (count_delete ? 1 : 0) + (count_insert ? 1 : 0) + 1;\n } else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) {\n // Merge this equality with the previous one.\n diffs[pointer - 1][1] += diffs[pointer][1];\n diffs.splice(pointer, 1);\n } else {\n pointer++;\n }\n count_insert = 0;\n count_delete = 0;\n text_delete = '';\n text_insert = '';\n break;\n }\n }\n if (diffs[diffs.length - 1][1] === '') {\n diffs.pop(); // Remove the dummy entry at the end.\n }\n\n // Second pass: look for single edits surrounded on both sides by equalities\n // which can be shifted sideways to eliminate an equality.\n // e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC\n var changes = false;\n pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (diffs[pointer - 1][0] == DIFF_EQUAL &&\n diffs[pointer + 1][0] == DIFF_EQUAL) {\n // This is a single edit surrounded by equalities.\n if (diffs[pointer][1].substring(diffs[pointer][1].length -\n diffs[pointer - 1][1].length) == diffs[pointer - 1][1]) {\n // Shift the edit over the previous equality.\n diffs[pointer][1] = diffs[pointer - 1][1] +\n diffs[pointer][1].substring(0, diffs[pointer][1].length -\n diffs[pointer - 1][1].length);\n diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n diffs.splice(pointer - 1, 1);\n changes = true;\n } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) ==\n diffs[pointer + 1][1]) {\n // Shift the edit over the next equality.\n diffs[pointer - 1][1] += diffs[pointer + 1][1];\n diffs[pointer][1] =\n diffs[pointer][1].substring(diffs[pointer + 1][1].length) +\n diffs[pointer + 1][1];\n diffs.splice(pointer + 1, 1);\n changes = true;\n }\n }\n pointer++;\n }\n // If shifts were made, the diff needs reordering and another shift sweep.\n if (changes) {\n this.diff_cleanupMerge(diffs);\n }\n};\n\n\n/**\n * loc is a location in text1, compute and return the equivalent location in\n * text2.\n * e.g. 'The cat' vs 'The big cat', 1->1, 5->8\n * @param {Array.<Array.<number|string>>} diffs Array of diff tuples.\n * @param {number} loc Location within text1.\n * @return {number} Location within text2.\n */\ndiff_match_patch.prototype.diff_xIndex = function(diffs, loc) {\n var chars1 = 0;\n var chars2 = 0;\n var last_chars1 = 0;\n var last_chars2 = 0;\n var x;\n for (x = 0; x < diffs.length; x++) {\n if (diffs[x][0] !== DIFF_INSERT) { // Equality or deletion.\n chars1 += diffs[x][1].length;\n }\n if (diffs[x][0] !== DIFF_DELETE) { // Equality or insertion.\n chars2 += diffs[x][1].length;\n }\n if (chars1 > loc) { // Overshot the location.\n break;\n }\n last_chars1 = chars1;\n last_chars2 = chars2;\n }\n // Was the location was deleted?\n if (diffs.length != x && diffs[x][0] === DIFF_DELETE) {\n return last_chars2;\n }\n // Add the remaining character length.\n return last_chars2 + (loc - last_chars1);\n};\n\n\n/**\n * Convert a diff array into a pretty HTML report.\n * @param {Array.<Array.<number|string>>} diffs Array of diff tuples.\n * @return {string} HTML representation.\n */\ndiff_match_patch.prototype.diff_prettyHtml = function(diffs) {\n var html = [];\n var i = 0;\n for (var x = 0; x < diffs.length; x++) {\n var op = diffs[x][0]; // Operation (insert, delete, equal)\n var data = diffs[x][1]; // Text of change.\n var text = data.replace(/&/g, '&amp;').replace(/</g, '&lt;')\n .replace(/>/g, '&gt;').replace(/\\n/g, '&para;<BR>');\n switch (op) {\n case DIFF_INSERT:\n html[x] = '<INS STYLE=\"background:#E6FFE6;\" TITLE=\"i=' + i + '\">' +\n text + '</INS>';\n break;\n case DIFF_DELETE:\n html[x] = '<DEL STYLE=\"background:#FFE6E6;\" TITLE=\"i=' + i + '\">' +\n text + '</DEL>';\n break;\n case DIFF_EQUAL:\n html[x] = '<SPAN TITLE=\"i=' + i + '\">' + text + '</SPAN>';\n break;\n }\n if (op !== DIFF_DELETE) {\n i += data.length;\n }\n }\n return html.join('');\n};\n\n\n/**\n * Compute and return the source text (all equalities and deletions).\n * @param {Array.<Array.<number|string>>} diffs Array of diff tuples.\n * @return {string} Source text.\n */\ndiff_match_patch.prototype.diff_text1 = function(diffs) {\n var text = [];\n for (var x = 0; x < diffs.length; x++) {\n if (diffs[x][0] !== DIFF_INSERT) {\n text[x] = diffs[x][1];\n }\n }\n return text.join('');\n};\n\n\n/**\n * Compute and return the destination text (all equalities and insertions).\n * @param {Array.<Array.<number|string>>} diffs Array of diff tuples.\n * @return {string} Destination text.\n */\ndiff_match_patch.prototype.diff_text2 = function(diffs) {\n var text = [];\n for (var x = 0; x < diffs.length; x++) {\n if (diffs[x][0] !== DIFF_DELETE) {\n text[x] = diffs[x][1];\n }\n }\n return text.join('');\n};\n\n\n/**\n * Compute the Levenshtein distance; the number of inserted, deleted or\n * substituted characters.\n * @param {Array.<Array.<number|string>>} diffs Array of diff tuples.\n * @return {number} Number of changes.\n */\ndiff_match_patch.prototype.diff_levenshtein = function(diffs) {\n var levenshtein = 0;\n var insertions = 0;\n var deletions = 0;\n for (var x = 0; x < diffs.length; x++) {\n var op = diffs[x][0];\n var data = diffs[x][1];\n switch (op) {\n case DIFF_INSERT:\n insertions += data.length;\n break;\n case DIFF_DELETE:\n deletions += data.length;\n break;\n case DIFF_EQUAL:\n // A deletion and an insertion is one substitution.\n levenshtein += Math.max(insertions, deletions);\n insertions = 0;\n deletions = 0;\n break;\n }\n }\n levenshtein += Math.max(insertions, deletions);\n return levenshtein;\n};\n\n\n/**\n * Crush the diff into an encoded string which describes the operations\n * required to transform text1 into text2.\n * E.g. =3\\t-2\\t+ing -> Keep 3 chars, delete 2 chars, insert 'ing'.\n * Operations are tab-separated. Inserted text is escaped using %xx notation.\n * @param {Array.<Array.<number|string>>} diffs Array of diff tuples.\n * @return {string} Delta text.\n */\ndiff_match_patch.prototype.diff_toDelta = function(diffs) {\n var text = [];\n for (var x = 0; x < diffs.length; x++) {\n switch (diffs[x][0]) {\n case DIFF_INSERT:\n text[x] = '+' + encodeURI(diffs[x][1]);\n break;\n case DIFF_DELETE:\n text[x] = '-' + diffs[x][1].length;\n break;\n case DIFF_EQUAL:\n text[x] = '=' + diffs[x][1].length;\n break;\n }\n }\n // Opera doesn't know how to encode char 0.\n return text.join('\\t').replace(/\\x00/g, '%00').replace(/%20/g, ' ');\n};\n\n\n/**\n * Given the original text1, and an encoded string which describes the\n * operations required to transform text1 into text2, compute the full diff.\n * @param {string} text1 Source string for the diff.\n * @param {string} delta Delta text.\n * @return {Array.<Array.<number|string>>} Array of diff tuples.\n * @throws {Error} If invalid input.\n */\ndiff_match_patch.prototype.diff_fromDelta = function(text1, delta) {\n var diffs = [];\n var diffsLength = 0; // Keeping our own length var is faster in JS.\n var pointer = 0; // Cursor in text1\n // Opera doesn't know how to decode char 0.\n delta = delta.replace(/%00/g, '\\0');\n var tokens = delta.split(/\\t/g);\n for (var x = 0; x < tokens.length; x++) {\n // Each token begins with a one character parameter which specifies the\n // operation of this token (delete, insert, equality).\n var param = tokens[x].substring(1);\n switch (tokens[x].charAt(0)) {\n case '+':\n try {\n diffs[diffsLength++] = [DIFF_INSERT, decodeURI(param)];\n } catch (ex) {\n // Malformed URI sequence.\n throw new Error('Illegal escape in diff_fromDelta: ' + param);\n }\n break;\n case '-':\n // Fall through.\n case '=':\n var n = parseInt(param, 10);\n if (isNaN(n) || n < 0) {\n throw new Error('Invalid number in diff_fromDelta: ' + param);\n }\n var text = text1.substring(pointer, pointer += n);\n if (tokens[x].charAt(0) == '=') {\n diffs[diffsLength++] = [DIFF_EQUAL, text];\n } else {\n diffs[diffsLength++] = [DIFF_DELETE, text];\n }\n break;\n default:\n // Blank tokens are ok (from a trailing \\t).\n // Anything else is an error.\n if (tokens[x]) {\n throw new Error('Invalid diff operation in diff_fromDelta: ' +\n tokens[x]);\n }\n }\n }\n if (pointer != text1.length) {\n throw new Error('Delta length (' + pointer +\n ') does not equal source text length (' + text1.length + ').');\n }\n return diffs;\n};\n\n\n// MATCH FUNCTIONS\n\n\n/**\n * Locate the best instance of 'pattern' in 'text' near 'loc'.\n * @param {string} text The text to search.\n * @param {string} pattern The pattern to search for.\n * @param {number} loc The location to search around.\n * @return {number} Best match index or -1.\n */\ndiff_match_patch.prototype.match_main = function(text, pattern, loc) {\n // Check for null inputs.\n if (text == null || pattern == null || loc == null) {\n throw new Error('Null input. (match_main)');\n }\n\n loc = Math.max(0, Math.min(loc, text.length));\n if (text == pattern) {\n // Shortcut (potentially not guaranteed by the algorithm)\n return 0;\n } else if (!text.length) {\n // Nothing to match.\n return -1;\n } else if (text.substring(loc, loc + pattern.length) == pattern) {\n // Perfect match at the perfect spot! (Includes case of null pattern)\n return loc;\n } else {\n // Do a fuzzy compare.\n return this.match_bitap(text, pattern, loc);\n }\n};\n\n\n/**\n * Locate the best instance of 'pattern' in 'text' near 'loc' using the\n * Bitap algorithm.\n * @param {string} text The text to search.\n * @param {string} pattern The pattern to search for.\n * @param {number} loc The location to search around.\n * @return {number} Best match index or -1.\n * @private\n */\ndiff_match_patch.prototype.match_bitap = function(text, pattern, loc) {\n if (pattern.length > this.Match_MaxBits) {\n throw new Error('Pattern too long for this browser.');\n }\n\n // Initialise the alphabet.\n var s = this.match_alphabet(pattern);\n\n var dmp = this; // 'this' becomes 'window' in a closure.\n\n /**\n * Compute and return the score for a match with e errors and x location.\n * Accesses loc and pattern through being a closure.\n * @param {number} e Number of errors in match.\n * @param {number} x Location of match.\n * @return {number} Overall score for match (0.0 = good, 1.0 = bad).\n * @private\n */\n function match_bitapScore(e, x) {\n var accuracy = e / pattern.length;\n var proximity = Math.abs(loc - x);\n if (!dmp.Match_Distance) {\n // Dodge divide by zero error.\n return proximity ? 1.0 : accuracy;\n }\n return accuracy + (proximity / dmp.Match_Distance);\n }\n\n // Highest score beyond which we give up.\n var score_threshold = this.Match_Threshold;\n // Is there a nearby exact match? (speedup)\n var best_loc = text.indexOf(pattern, loc);\n if (best_loc != -1) {\n score_threshold = Math.min(match_bitapScore(0, best_loc), score_threshold);\n // What about in the other direction? (speedup)\n best_loc = text.lastIndexOf(pattern, loc + pattern.length);\n if (best_loc != -1) {\n score_threshold =\n Math.min(match_bitapScore(0, best_loc), score_threshold);\n }\n }\n\n // Initialise the bit arrays.\n var matchmask = 1 << (pattern.length - 1);\n best_loc = -1;\n\n var bin_min, bin_mid;\n var bin_max = pattern.length + text.length;\n var last_rd;\n for (var d = 0; d < pattern.length; d++) {\n // Scan for the best match; each iteration allows for one more error.\n // Run a binary search to determine how far from 'loc' we can stray at this\n // error level.\n bin_min = 0;\n bin_mid = bin_max;\n while (bin_min < bin_mid) {\n if (match_bitapScore(d, loc + bin_mid) <= score_threshold) {\n bin_min = bin_mid;\n } else {\n bin_max = bin_mid;\n }\n bin_mid = Math.floor((bin_max - bin_min) / 2 + bin_min);\n }\n // Use the result from this iteration as the maximum for the next.\n bin_max = bin_mid;\n var start = Math.max(1, loc - bin_mid + 1);\n var finish = Math.min(loc + bin_mid, text.length) + pattern.length;\n\n var rd = Array(finish + 2);\n rd[finish + 1] = (1 << d) - 1;\n for (var j = finish; j >= start; j--) {\n // The alphabet (s) is a sparse hash, so the following line generates\n // warnings.\n var charMatch = s[text.charAt(j - 1)];\n if (d === 0) { // First pass: exact match.\n rd[j] = ((rd[j + 1] << 1) | 1) & charMatch;\n } else { // Subsequent passes: fuzzy match.\n rd[j] = ((rd[j + 1] << 1) | 1) & charMatch |\n (((last_rd[j + 1] | last_rd[j]) << 1) | 1) |\n last_rd[j + 1];\n }\n if (rd[j] & matchmask) {\n var score = match_bitapScore(d, j - 1);\n // This match will almost certainly be better than any existing match.\n // But check anyway.\n if (score <= score_threshold) {\n // Told you so.\n score_threshold = score;\n best_loc = j - 1;\n if (best_loc > loc) {\n // When passing loc, don't exceed our current distance from loc.\n start = Math.max(1, 2 * loc - best_loc);\n } else {\n // Already passed loc, downhill from here on in.\n break;\n }\n }\n }\n }\n // No hope for a (better) match at greater error levels.\n if (match_bitapScore(d + 1, loc) > score_threshold) {\n break;\n }\n last_rd = rd;\n }\n return best_loc;\n};\n\n\n/**\n * Initialise the alphabet for the Bitap algorithm.\n * @param {string} pattern The text to encode.\n * @return {Object} Hash of character locations.\n * @private\n */\ndiff_match_patch.prototype.match_alphabet = function(pattern) {\n var s = {};\n for (var i = 0; i < pattern.length; i++) {\n s[pattern.charAt(i)] = 0;\n }\n for (var i = 0; i < pattern.length; i++) {\n s[pattern.charAt(i)] |= 1 << (pattern.length - i - 1);\n }\n return s;\n};\n\n\n// PATCH FUNCTIONS\n\n\n/**\n * Increase the context until it is unique,\n * but don't let the pattern expand beyond Match_MaxBits.\n * @param {patch_obj} patch The patch to grow.\n * @param {string} text Source text.\n * @private\n */\ndiff_match_patch.prototype.patch_addContext = function(patch, text) {\n if (text.length == 0) {\n return;\n }\n var pattern = text.substring(patch.start2, patch.start2 + patch.length1);\n var padding = 0;\n\n // Look for the first and last matches of pattern in text. If two different\n // matches are found, increase the pattern length.\n while (text.indexOf(pattern) != text.lastIndexOf(pattern) &&\n pattern.length < this.Match_MaxBits - this.Patch_Margin -\n this.Patch_Margin) {\n padding += this.Patch_Margin;\n pattern = text.substring(patch.start2 - padding,\n patch.start2 + patch.length1 + padding);\n }\n // Add one chunk for good luck.\n padding += this.Patch_Margin;\n\n // Add the prefix.\n var prefix = text.substring(patch.start2 - padding, patch.start2);\n if (prefix) {\n patch.diffs.unshift([DIFF_EQUAL, prefix]);\n }\n // Add the suffix.\n var suffix = text.substring(patch.start2 + patch.length1,\n patch.start2 + patch.length1 + padding);\n if (suffix) {\n patch.diffs.push([DIFF_EQUAL, suffix]);\n }\n\n // Roll back the start points.\n patch.start1 -= prefix.length;\n patch.start2 -= prefix.length;\n // Extend the lengths.\n patch.length1 += prefix.length + suffix.length;\n patch.length2 += prefix.length + suffix.length;\n};\n\n\n/**\n * Compute a list of patches to turn text1 into text2.\n * Use diffs if provided, otherwise compute it ourselves.\n * There are four ways to call this function, depending on what data is\n * available to the caller:\n * Method 1:\n * a = text1, b = text2\n * Method 2:\n * a = diffs\n * Method 3 (optimal):\n * a = text1, b = diffs\n * Method 4 (deprecated, use method 3):\n * a = text1, b = text2, c = diffs\n *\n * @param {string|Array.<Array.<number|string>>} a text1 (methods 1,3,4) or\n * Array of diff tuples for text1 to text2 (method 2).\n * @param {string|Array.<Array.<number|string>>} opt_b text2 (methods 1,4) or\n * Array of diff tuples for text1 to text2 (method 3) or undefined (method 2).\n * @param {string|Array.<Array.<number|string>>} opt_c Array of diff tuples for\n * text1 to text2 (method 4) or undefined (methods 1,2,3).\n * @return {Array.<patch_obj>} Array of patch objects.\n */\ndiff_match_patch.prototype.patch_make = function(a, opt_b, opt_c) {\n var text1, diffs;\n if (typeof a == 'string' && typeof opt_b == 'string' &&\n typeof opt_c == 'undefined') {\n // Method 1: text1, text2\n // Compute diffs from text1 and text2.\n text1 = a;\n diffs = this.diff_main(text1, opt_b, true);\n if (diffs.length > 2) {\n this.diff_cleanupSemantic(diffs);\n this.diff_cleanupEfficiency(diffs);\n }\n } else if (a && typeof a == 'object' && typeof opt_b == 'undefined' &&\n typeof opt_c == 'undefined') {\n // Method 2: diffs\n // Compute text1 from diffs.\n diffs = a;\n text1 = this.diff_text1(diffs);\n } else if (typeof a == 'string' && opt_b && typeof opt_b == 'object' &&\n typeof opt_c == 'undefined') {\n // Method 3: text1, diffs\n text1 = a;\n diffs = opt_b;\n } else if (typeof a == 'string' && typeof opt_b == 'string' &&\n opt_c && typeof opt_c == 'object') {\n // Method 4: text1, text2, diffs\n // text2 is not used.\n text1 = a;\n diffs = opt_c;\n } else {\n throw new Error('Unknown call format to patch_make.');\n }\n\n if (diffs.length === 0) {\n return []; // Get rid of the null case.\n }\n var patches = [];\n var patch = new patch_obj();\n var patchDiffLength = 0; // Keeping our own length var is faster in JS.\n var char_count1 = 0; // Number of characters into the text1 string.\n var char_count2 = 0; // Number of characters into the text2 string.\n // Start with text1 (prepatch_text) and apply the diffs until we arrive at\n // text2 (postpatch_text). We recreate the patches one by one to determine\n // context info.\n var prepatch_text = text1;\n var postpatch_text = text1;\n for (var x = 0; x < diffs.length; x++) {\n var diff_type = diffs[x][0];\n var diff_text = diffs[x][1];\n\n if (!patchDiffLength && diff_type !== DIFF_EQUAL) {\n // A new patch starts here.\n patch.start1 = char_count1;\n patch.start2 = char_count2;\n }\n\n switch (diff_type) {\n case DIFF_INSERT:\n patch.diffs[patchDiffLength++] = diffs[x];\n patch.length2 += diff_text.length;\n postpatch_text = postpatch_text.substring(0, char_count2) + diff_text +\n postpatch_text.substring(char_count2);\n break;\n case DIFF_DELETE:\n patch.length1 += diff_text.length;\n patch.diffs[patchDiffLength++] = diffs[x];\n postpatch_text = postpatch_text.substring(0, char_count2) +\n postpatch_text.substring(char_count2 +\n diff_text.length);\n break;\n case DIFF_EQUAL:\n if (diff_text.length <= 2 * this.Patch_Margin &&\n patchDiffLength && diffs.length != x + 1) {\n // Small equality inside a patch.\n patch.diffs[patchDiffLength++] = diffs[x];\n patch.length1 += diff_text.length;\n patch.length2 += diff_text.length;\n } else if (diff_text.length >= 2 * this.Patch_Margin) {\n // Time for a new patch.\n if (patchDiffLength) {\n this.patch_addContext(patch, prepatch_text);\n patches.push(patch);\n patch = new patch_obj();\n patchDiffLength = 0;\n // Unlike Unidiff, our patch lists have a rolling context.\n // http://code.google.com/p/google-diff-match-patch/wiki/Unidiff\n // Update prepatch text & pos to reflect the application of the\n // just completed patch.\n prepatch_text = postpatch_text;\n char_count1 = char_count2;\n }\n }\n break;\n }\n\n // Update the current character count.\n if (diff_type !== DIFF_INSERT) {\n char_count1 += diff_text.length;\n }\n if (diff_type !== DIFF_DELETE) {\n char_count2 += diff_text.length;\n }\n }\n // Pick up the leftover patch if not empty.\n if (patchDiffLength) {\n this.patch_addContext(patch, prepatch_text);\n patches.push(patch);\n }\n\n return patches;\n};\n\n\n/**\n * Given an array of patches, return another array that is identical.\n * @param {Array.<patch_obj>} patches Array of patch objects.\n * @return {Array.<patch_obj>} Array of patch objects.\n */\ndiff_match_patch.prototype.patch_deepCopy = function(patches) {\n // Making deep copies is hard in JavaScript.\n var patchesCopy = [];\n for (var x = 0; x < patches.length; x++) {\n var patch = patches[x];\n var patchCopy = new patch_obj();\n patchCopy.diffs = [];\n for (var y = 0; y < patch.diffs.length; y++) {\n patchCopy.diffs[y] = patch.diffs[y].slice();\n }\n patchCopy.start1 = patch.start1;\n patchCopy.start2 = patch.start2;\n patchCopy.length1 = patch.length1;\n patchCopy.length2 = patch.length2;\n patchesCopy[x] = patchCopy;\n }\n return patchesCopy;\n};\n\n\n/**\n * Merge a set of patches onto the text. Return a patched text, as well\n * as a list of true/false values indicating which patches were applied.\n * @param {Array.<patch_obj>} patches Array of patch objects.\n * @param {string} text Old text.\n * @return {Array.<string|Array.<boolean>>} Two element Array, containing the\n * new text and an array of boolean values.\n */\ndiff_match_patch.prototype.patch_apply = function(patches, text) {\n if (patches.length == 0) {\n return [text, []];\n }\n\n // Deep copy the patches so that no changes are made to originals.\n patches = this.patch_deepCopy(patches);\n\n var nullPadding = this.patch_addPadding(patches);\n text = nullPadding + text + nullPadding;\n\n this.patch_splitMax(patches);\n // delta keeps track of the offset between the expected and actual location\n // of the previous patch. If there are patches expected at positions 10 and\n // 20, but the first patch was found at 12, delta is 2 and the second patch\n // has an effective expected position of 22.\n var delta = 0;\n var results = [];\n for (var x = 0; x < patches.length; x++) {\n var expected_loc = patches[x].start2 + delta;\n var text1 = this.diff_text1(patches[x].diffs);\n var start_loc;\n var end_loc = -1;\n if (text1.length > this.Match_MaxBits) {\n // patch_splitMax will only provide an oversized pattern in the case of\n // a monster delete.\n start_loc = this.match_main(text, text1.substring(0, this.Match_MaxBits),\n expected_loc);\n if (start_loc != -1) {\n end_loc = this.match_main(text,\n text1.substring(text1.length - this.Match_MaxBits),\n expected_loc + text1.length - this.Match_MaxBits);\n if (end_loc == -1 || start_loc >= end_loc) {\n // Can't find valid trailing context. Drop this patch.\n start_loc = -1;\n }\n }\n } else {\n start_loc = this.match_main(text, text1, expected_loc);\n }\n if (start_loc == -1) {\n // No match found. :(\n results[x] = false;\n // Subtract the delta for this failed patch from subsequent patches.\n delta -= patches[x].length2 - patches[x].length1;\n } else {\n // Found a match. :)\n results[x] = true;\n delta = start_loc - expected_loc;\n var text2;\n if (end_loc == -1) {\n text2 = text.substring(start_loc, start_loc + text1.length);\n } else {\n text2 = text.substring(start_loc, end_loc + this.Match_MaxBits);\n }\n if (text1 == text2) {\n // Perfect match, just shove the replacement text in.\n text = text.substring(0, start_loc) +\n this.diff_text2(patches[x].diffs) +\n text.substring(start_loc + text1.length);\n } else {\n // Imperfect match. Run a diff to get a framework of equivalent\n // indices.\n var diffs = this.diff_main(text1, text2, false);\n if (text1.length > this.Match_MaxBits &&\n this.diff_levenshtein(diffs) / text1.length >\n this.Patch_DeleteThreshold) {\n // The end points match, but the content is unacceptably bad.\n results[x] = false;\n } else {\n this.diff_cleanupSemanticLossless(diffs);\n var index1 = 0;\n var index2;\n for (var y = 0; y < patches[x].diffs.length; y++) {\n var mod = patches[x].diffs[y];\n if (mod[0] !== DIFF_EQUAL) {\n index2 = this.diff_xIndex(diffs, index1);\n }\n if (mod[0] === DIFF_INSERT) { // Insertion\n text = text.substring(0, start_loc + index2) + mod[1] +\n text.substring(start_loc + index2);\n } else if (mod[0] === DIFF_DELETE) { // Deletion\n text = text.substring(0, start_loc + index2) +\n text.substring(start_loc + this.diff_xIndex(diffs,\n index1 + mod[1].length));\n }\n if (mod[0] !== DIFF_DELETE) {\n index1 += mod[1].length;\n }\n }\n }\n }\n }\n }\n // Strip the padding off.\n text = text.substring(nullPadding.length, text.length - nullPadding.length);\n return [text, results];\n};\n\n\n/**\n * Add some padding on text start and end so that edges can match something.\n * Intended to be called only from within patch_apply.\n * @param {Array.<patch_obj>} patches Array of patch objects.\n * @return {string} The padding string added to each side.\n */\ndiff_match_patch.prototype.patch_addPadding = function(patches) {\n var paddingLength = this.Patch_Margin;\n var nullPadding = '';\n for (var x = 1; x <= paddingLength; x++) {\n nullPadding += String.fromCharCode(x);\n }\n\n // Bump all the patches forward.\n for (var x = 0; x < patches.length; x++) {\n patches[x].start1 += paddingLength;\n patches[x].start2 += paddingLength;\n }\n\n // Add some padding on start of first diff.\n var patch = patches[0];\n var diffs = patch.diffs;\n if (diffs.length == 0 || diffs[0][0] != DIFF_EQUAL) {\n // Add nullPadding equality.\n diffs.unshift([DIFF_EQUAL, nullPadding]);\n patch.start1 -= paddingLength; // Should be 0.\n patch.start2 -= paddingLength; // Should be 0.\n patch.length1 += paddingLength;\n patch.length2 += paddingLength;\n } else if (paddingLength > diffs[0][1].length) {\n // Grow first equality.\n var extraLength = paddingLength - diffs[0][1].length;\n diffs[0][1] = nullPadding.substring(diffs[0][1].length) + diffs[0][1];\n patch.start1 -= extraLength;\n patch.start2 -= extraLength;\n patch.length1 += extraLength;\n patch.length2 += extraLength;\n }\n\n // Add some padding on end of last diff.\n patch = patches[patches.length - 1];\n diffs = patch.diffs;\n if (diffs.length == 0 || diffs[diffs.length - 1][0] != DIFF_EQUAL) {\n // Add nullPadding equality.\n diffs.push([DIFF_EQUAL, nullPadding]);\n patch.length1 += paddingLength;\n patch.length2 += paddingLength;\n } else if (paddingLength > diffs[diffs.length - 1][1].length) {\n // Grow last equality.\n var extraLength = paddingLength - diffs[diffs.length - 1][1].length;\n diffs[diffs.length - 1][1] += nullPadding.substring(0, extraLength);\n patch.length1 += extraLength;\n patch.length2 += extraLength;\n }\n\n return nullPadding;\n};\n\n\n/**\n * Look through the patches and break up any which are longer than the maximum\n * limit of the match algorithm.\n * @param {Array.<patch_obj>} patches Array of patch objects.\n */\ndiff_match_patch.prototype.patch_splitMax = function(patches) {\n for (var x = 0; x < patches.length; x++) {\n if (patches[x].length1 > this.Match_MaxBits) {\n var bigpatch = patches[x];\n // Remove the big old patch.\n patches.splice(x--, 1);\n var patch_size = this.Match_MaxBits;\n var start1 = bigpatch.start1;\n var start2 = bigpatch.start2;\n var precontext = '';\n while (bigpatch.diffs.length !== 0) {\n // Create one of several smaller patches.\n var patch = new patch_obj();\n var empty = true;\n patch.start1 = start1 - precontext.length;\n patch.start2 = start2 - precontext.length;\n if (precontext !== '') {\n patch.length1 = patch.length2 = precontext.length;\n patch.diffs.push([DIFF_EQUAL, precontext]);\n }\n while (bigpatch.diffs.length !== 0 &&\n patch.length1 < patch_size - this.Patch_Margin) {\n var diff_type = bigpatch.diffs[0][0];\n var diff_text = bigpatch.diffs[0][1];\n if (diff_type === DIFF_INSERT) {\n // Insertions are harmless.\n patch.length2 += diff_text.length;\n start2 += diff_text.length;\n patch.diffs.push(bigpatch.diffs.shift());\n empty = false;\n } else if (diff_type === DIFF_DELETE && patch.diffs.length == 1 &&\n patch.diffs[0][0] == DIFF_EQUAL &&\n diff_text.length > 2 * patch_size) {\n // This is a large deletion. Let it pass in one chunk.\n patch.length1 += diff_text.length;\n start1 += diff_text.length;\n empty = false;\n patch.diffs.push([diff_type, diff_text]);\n bigpatch.diffs.shift();\n } else {\n // Deletion or equality. Only take as much as we can stomach.\n diff_text = diff_text.substring(0, patch_size - patch.length1 -\n this.Patch_Margin);\n patch.length1 += diff_text.length;\n start1 += diff_text.length;\n if (diff_type === DIFF_EQUAL) {\n patch.length2 += diff_text.length;\n start2 += diff_text.length;\n } else {\n empty = false;\n }\n patch.diffs.push([diff_type, diff_text]);\n if (diff_text == bigpatch.diffs[0][1]) {\n bigpatch.diffs.shift();\n } else {\n bigpatch.diffs[0][1] =\n bigpatch.diffs[0][1].substring(diff_text.length);\n }\n }\n }\n // Compute the head context for the next patch.\n precontext = this.diff_text2(patch.diffs);\n precontext =\n precontext.substring(precontext.length - this.Patch_Margin);\n // Append the end context for this patch.\n var postcontext = this.diff_text1(bigpatch.diffs)\n .substring(0, this.Patch_Margin);\n if (postcontext !== '') {\n patch.length1 += postcontext.length;\n patch.length2 += postcontext.length;\n if (patch.diffs.length !== 0 &&\n patch.diffs[patch.diffs.length - 1][0] === DIFF_EQUAL) {\n patch.diffs[patch.diffs.length - 1][1] += postcontext;\n } else {\n patch.diffs.push([DIFF_EQUAL, postcontext]);\n }\n }\n if (!empty) {\n patches.splice(++x, 0, patch);\n }\n }\n }\n }\n};\n\n\n/**\n * Take a list of patches and return a textual representation.\n * @param {Array.<patch_obj>} patches Array of patch objects.\n * @return {string} Text representation of patches.\n */\ndiff_match_patch.prototype.patch_toText = function(patches) {\n var text = [];\n for (var x = 0; x < patches.length; x++) {\n text[x] = patches[x];\n }\n return text.join('');\n};\n\n\n/**\n * Parse a textual representation of patches and return a list of patch objects.\n * @param {string} textline Text representation of patches.\n * @return {Array.<patch_obj>} Array of patch objects.\n * @throws {Error} If invalid input.\n */\ndiff_match_patch.prototype.patch_fromText = function(textline) {\n var patches = [];\n if (!textline) {\n return patches;\n }\n // Opera doesn't know how to decode char 0.\n textline = textline.replace(/%00/g, '\\0');\n var text = textline.split('\\n');\n var textPointer = 0;\n while (textPointer < text.length) {\n var m = text[textPointer].match(/^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$/);\n if (!m) {\n throw new Error('Invalid patch string: ' + text[textPointer]);\n }\n var patch = new patch_obj();\n patches.push(patch);\n patch.start1 = parseInt(m[1], 10);\n if (m[2] === '') {\n patch.start1--;\n patch.length1 = 1;\n } else if (m[2] == '0') {\n patch.length1 = 0;\n } else {\n patch.start1--;\n patch.length1 = parseInt(m[2], 10);\n }\n\n patch.start2 = parseInt(m[3], 10);\n if (m[4] === '') {\n patch.start2--;\n patch.length2 = 1;\n } else if (m[4] == '0') {\n patch.length2 = 0;\n } else {\n patch.start2--;\n patch.length2 = parseInt(m[4], 10);\n }\n textPointer++;\n\n while (textPointer < text.length) {\n var sign = text[textPointer].charAt(0);\n try {\n var line = decodeURI(text[textPointer].substring(1));\n } catch (ex) {\n // Malformed URI sequence.\n throw new Error('Illegal escape in patch_fromText: ' + line);\n }\n if (sign == '-') {\n // Deletion.\n patch.diffs.push([DIFF_DELETE, line]);\n } else if (sign == '+') {\n // Insertion.\n patch.diffs.push([DIFF_INSERT, line]);\n } else if (sign == ' ') {\n // Minor equality.\n patch.diffs.push([DIFF_EQUAL, line]);\n } else if (sign == '@') {\n // Start of next patch.\n break;\n } else if (sign === '') {\n // Blank line? Whatever.\n } else {\n // WTF?\n throw new Error('Invalid patch mode \"' + sign + '\" in: ' + line);\n }\n textPointer++;\n }\n }\n return patches;\n};\n\n\n/**\n * Class representing one patch operation.\n * @constructor\n */\nfunction patch_obj() {\n /** @type {Array.<Array.<number|string>>} */\n this.diffs = [];\n /** @type {?number} */\n this.start1 = null;\n /** @type {?number} */\n this.start2 = null;\n /** @type {number} */\n this.length1 = 0;\n /** @type {number} */\n this.length2 = 0;\n}\n\n\n/**\n * Emmulate GNU diff's format.\n * Header: @@ -382,8 +481,9 @@\n * Indicies are printed as 1-based, not 0-based.\n * @return {string} The GNU diff string.\n */\npatch_obj.prototype.toString = function() {\n var coords1, coords2;\n if (this.length1 === 0) {\n coords1 = this.start1 + ',0';\n } else if (this.length1 == 1) {\n coords1 = this.start1 + 1;\n } else {\n coords1 = (this.start1 + 1) + ',' + this.length1;\n }\n if (this.length2 === 0) {\n coords2 = this.start2 + ',0';\n } else if (this.length2 == 1) {\n coords2 = this.start2 + 1;\n } else {\n coords2 = (this.start2 + 1) + ',' + this.length2;\n }\n var text = ['@@ -' + coords1 + ' +' + coords2 + ' @@\\n'];\n var op;\n // Escape the body of the patch with %xx notation.\n for (var x = 0; x < this.diffs.length; x++) {\n switch (this.diffs[x][0]) {\n case DIFF_INSERT:\n op = '+';\n break;\n case DIFF_DELETE:\n op = '-';\n break;\n case DIFF_EQUAL:\n op = ' ';\n break;\n }\n text[x + 1] = op + encodeURI(this.diffs[x][1]) + '\\n';\n }\n // Opera doesn't know how to encode char 0.\n return text.join('').replace(/\\x00/g, '%00').replace(/%20/g, ' ');\n};\n\n\n// Export these global variables so that they survive Google's JS compiler.\n/*changed by lfborjas: changed `window` for `exports` to make it suitable for the node.js module conventions*/\nexports['diff_match_patch'] = diff_match_patch;\nexports['patch_obj'] = patch_obj;\nexports['DIFF_DELETE'] = DIFF_DELETE;\nexports['DIFF_INSERT'] = DIFF_INSERT;\nexports['DIFF_EQUAL'] = DIFF_EQUAL;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","module.exports = flatten\nflatten.flatten = flatten\nflatten.unflatten = unflatten\n\nfunction isBuffer (obj) {\n return obj &&\n obj.constructor &&\n (typeof obj.constructor.isBuffer === 'function') &&\n obj.constructor.isBuffer(obj)\n}\n\nfunction keyIdentity (key) {\n return key\n}\n\nfunction flatten (target, opts) {\n opts = opts || {}\n\n const delimiter = opts.delimiter || '.'\n const maxDepth = opts.maxDepth\n const transformKey = opts.transformKey || keyIdentity\n const output = {}\n\n function step (object, prev, currentDepth) {\n currentDepth = currentDepth || 1\n Object.keys(object).forEach(function (key) {\n const value = object[key]\n const isarray = opts.safe && Array.isArray(value)\n const type = Object.prototype.toString.call(value)\n const isbuffer = isBuffer(value)\n const isobject = (\n type === '[object Object]' ||\n type === '[object Array]'\n )\n\n const newKey = prev\n ? prev + delimiter + transformKey(key)\n : transformKey(key)\n\n if (!isarray && !isbuffer && isobject && Object.keys(value).length &&\n (!opts.maxDepth || currentDepth < maxDepth)) {\n return step(value, newKey, currentDepth + 1)\n }\n\n output[newKey] = value\n })\n }\n\n step(target)\n\n return output\n}\n\nfunction unflatten (target, opts) {\n opts = opts || {}\n\n const delimiter = opts.delimiter || '.'\n const overwrite = opts.overwrite || false\n const transformKey = opts.transformKey || keyIdentity\n const result = {}\n\n const isbuffer = isBuffer(target)\n if (isbuffer || Object.prototype.toString.call(target) !== '[object Object]') {\n return target\n }\n\n // safely ensure that the key is\n // an integer.\n function getkey (key) {\n const parsedKey = Number(key)\n\n return (\n isNaN(parsedKey) ||\n key.indexOf('.') !== -1 ||\n opts.object\n ) ? key\n : parsedKey\n }\n\n function addKeys (keyPrefix, recipient, target) {\n return Object.keys(target).reduce(function (result, key) {\n result[keyPrefix + delimiter + key] = target[key]\n\n return result\n }, recipient)\n }\n\n function isEmpty (val) {\n const type = Object.prototype.toString.call(val)\n const isArray = type === '[object Array]'\n const isObject = type === '[object Object]'\n\n if (!val) {\n return true\n } else if (isArray) {\n return !val.length\n } else if (isObject) {\n return !Object.keys(val).length\n }\n }\n\n target = Object.keys(target).reduce(function (result, key) {\n const type = Object.prototype.toString.call(target[key])\n const isObject = (type === '[object Object]' || type === '[object Array]')\n if (!isObject || isEmpty(target[key])) {\n result[key] = target[key]\n return result\n } else {\n return addKeys(\n key,\n result,\n flatten(target[key], opts)\n )\n }\n }, {})\n\n Object.keys(target).forEach(function (key) {\n const split = key.split(delimiter).map(transformKey)\n let key1 = getkey(split.shift())\n let key2 = getkey(split[0])\n let recipient = result\n\n while (key2 !== undefined) {\n if (key1 === '__proto__') {\n return\n }\n\n const type = Object.prototype.toString.call(recipient[key1])\n const isobject = (\n type === '[object Object]' ||\n type === '[object Array]'\n )\n\n // do not write over falsey, non-undefined values if overwrite is false\n if (!overwrite && !isobject && typeof recipient[key1] !== 'undefined') {\n return\n }\n\n if ((overwrite && !isobject) || (!overwrite && recipient[key1] == null)) {\n recipient[key1] = (\n typeof key2 === 'number' &&\n !opts.object ? [] : {}\n )\n }\n\n recipient = recipient[key1]\n if (split.length > 0) {\n key1 = getkey(split.shift())\n key2 = getkey(split[0])\n }\n }\n\n // unflatten again for 'messy objects'\n recipient[key1] = unflatten(target[key], opts)\n })\n\n return result\n}\n","/*!\n * get-value <https://github.com/jonschlinkert/get-value>\n *\n * Copyright (c) 2014-2018, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nconst isObject = require('isobject');\n\nmodule.exports = function(target, path, options) {\n if (!isObject(options)) {\n options = { default: options };\n }\n\n if (!isValidObject(target)) {\n return typeof options.default !== 'undefined' ? options.default : target;\n }\n\n if (typeof path === 'number') {\n path = String(path);\n }\n\n const isArray = Array.isArray(path);\n const isString = typeof path === 'string';\n const splitChar = options.separator || '.';\n const joinChar = options.joinChar || (typeof splitChar === 'string' ? splitChar : '.');\n\n if (!isString && !isArray) {\n return target;\n }\n\n if (isString && path in target) {\n return isValid(path, target, options) ? target[path] : options.default;\n }\n\n let segs = isArray ? path : split(path, splitChar, options);\n let len = segs.length;\n let idx = 0;\n\n do {\n let prop = segs[idx];\n if (typeof prop === 'number') {\n prop = String(prop);\n }\n\n while (prop && prop.slice(-1) === '\\\\') {\n prop = join([prop.slice(0, -1), segs[++idx] || ''], joinChar, options);\n }\n\n if (prop in target) {\n if (!isValid(prop, target, options)) {\n return options.default;\n }\n\n target = target[prop];\n } else {\n let hasProp = false;\n let n = idx + 1;\n\n while (n < len) {\n prop = join([prop, segs[n++]], joinChar, options);\n\n if ((hasProp = prop in target)) {\n if (!isValid(prop, target, options)) {\n return options.default;\n }\n\n target = target[prop];\n idx = n - 1;\n break;\n }\n }\n\n if (!hasProp) {\n return options.default;\n }\n }\n } while (++idx < len && isValidObject(target));\n\n if (idx === len) {\n return target;\n }\n\n return options.default;\n};\n\nfunction join(segs, joinChar, options) {\n if (typeof options.join === 'function') {\n return options.join(segs);\n }\n return segs[0] + joinChar + segs[1];\n}\n\nfunction split(path, splitChar, options) {\n if (typeof options.split === 'function') {\n return options.split(path);\n }\n return path.split(splitChar);\n}\n\nfunction isValid(key, target, options) {\n if (typeof options.isValid === 'function') {\n return options.isValid(key, target);\n }\n return true;\n}\n\nfunction isValidObject(val) {\n return isObject(val) || Array.isArray(val) || typeof val === 'function';\n}\n","/*!\n * is-plain-object <https://github.com/jonschlinkert/is-plain-object>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nvar isObject = require('isobject');\n\nfunction isObjectObject(o) {\n return isObject(o) === true\n && Object.prototype.toString.call(o) === '[object Object]';\n}\n\nmodule.exports = function isPlainObject(o) {\n var ctor,prot;\n\n if (isObjectObject(o) === false) return false;\n\n // If has modified constructor\n ctor = o.constructor;\n if (typeof ctor !== 'function') return false;\n\n // If has modified prototype\n prot = ctor.prototype;\n if (isObjectObject(prot) === false) return false;\n\n // If constructor does not have an Object-specific method\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false;\n }\n\n // Most likely a plain Object\n return true;\n};\n","/*!\n * is-primitive <https://github.com/jonschlinkert/is-primitive>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function isPrimitive(val) {\n if (typeof val === 'object') {\n return val === null;\n }\n return typeof val !== 'function';\n};\n","/*!\n * isobject <https://github.com/jonschlinkert/isobject>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function isObject(val) {\n return val != null && typeof val === 'object' && Array.isArray(val) === false;\n};\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/index.ts\nvar index_exports = {};\n__export(index_exports, {\n AccessTokenEvents: () => AccessTokenEvents,\n CheckSessionIFrame: () => CheckSessionIFrame,\n DPoPState: () => DPoPState,\n ErrorResponse: () => ErrorResponse,\n ErrorTimeout: () => ErrorTimeout,\n InMemoryWebStorage: () => InMemoryWebStorage,\n IndexedDbDPoPStore: () => IndexedDbDPoPStore,\n Log: () => Log,\n Logger: () => Logger,\n MetadataService: () => MetadataService,\n OidcClient: () => OidcClient,\n OidcClientSettingsStore: () => OidcClientSettingsStore,\n SessionMonitor: () => SessionMonitor,\n SigninResponse: () => SigninResponse,\n SigninState: () => SigninState,\n SignoutResponse: () => SignoutResponse,\n State: () => State,\n User: () => User,\n UserManager: () => UserManager,\n UserManagerSettingsStore: () => UserManagerSettingsStore,\n Version: () => Version,\n WebStorageStateStore: () => WebStorageStateStore\n});\nmodule.exports = __toCommonJS(index_exports);\n\n// src/utils/Logger.ts\nvar nopLogger = {\n debug: () => void 0,\n info: () => void 0,\n warn: () => void 0,\n error: () => void 0\n};\nvar level;\nvar logger;\nvar Log = /* @__PURE__ */ ((Log2) => {\n Log2[Log2[\"NONE\"] = 0] = \"NONE\";\n Log2[Log2[\"ERROR\"] = 1] = \"ERROR\";\n Log2[Log2[\"WARN\"] = 2] = \"WARN\";\n Log2[Log2[\"INFO\"] = 3] = \"INFO\";\n Log2[Log2[\"DEBUG\"] = 4] = \"DEBUG\";\n return Log2;\n})(Log || {});\n((Log2) => {\n function reset() {\n level = 3 /* INFO */;\n logger = nopLogger;\n }\n Log2.reset = reset;\n function setLevel(value) {\n if (!(0 /* NONE */ <= value && value <= 4 /* DEBUG */)) {\n throw new Error(\"Invalid log level\");\n }\n level = value;\n }\n Log2.setLevel = setLevel;\n function setLogger(value) {\n logger = value;\n }\n Log2.setLogger = setLogger;\n})(Log || (Log = {}));\nvar Logger = class _Logger {\n constructor(_name) {\n this._name = _name;\n }\n /* eslint-disable @typescript-eslint/no-unsafe-enum-comparison */\n debug(...args) {\n if (level >= 4 /* DEBUG */) {\n logger.debug(_Logger._format(this._name, this._method), ...args);\n }\n }\n info(...args) {\n if (level >= 3 /* INFO */) {\n logger.info(_Logger._format(this._name, this._method), ...args);\n }\n }\n warn(...args) {\n if (level >= 2 /* WARN */) {\n logger.warn(_Logger._format(this._name, this._method), ...args);\n }\n }\n error(...args) {\n if (level >= 1 /* ERROR */) {\n logger.error(_Logger._format(this._name, this._method), ...args);\n }\n }\n /* eslint-enable @typescript-eslint/no-unsafe-enum-comparison */\n throw(err) {\n this.error(err);\n throw err;\n }\n create(method) {\n const methodLogger = Object.create(this);\n methodLogger._method = method;\n methodLogger.debug(\"begin\");\n return methodLogger;\n }\n static createStatic(name, staticMethod) {\n const staticLogger = new _Logger(`${name}.${staticMethod}`);\n staticLogger.debug(\"begin\");\n return staticLogger;\n }\n static _format(name, method) {\n const prefix = `[${name}]`;\n return method ? `${prefix} ${method}:` : prefix;\n }\n /* eslint-disable @typescript-eslint/no-unsafe-enum-comparison */\n // helpers for static class methods\n static debug(name, ...args) {\n if (level >= 4 /* DEBUG */) {\n logger.debug(_Logger._format(name), ...args);\n }\n }\n static info(name, ...args) {\n if (level >= 3 /* INFO */) {\n logger.info(_Logger._format(name), ...args);\n }\n }\n static warn(name, ...args) {\n if (level >= 2 /* WARN */) {\n logger.warn(_Logger._format(name), ...args);\n }\n }\n static error(name, ...args) {\n if (level >= 1 /* ERROR */) {\n logger.error(_Logger._format(name), ...args);\n }\n }\n /* eslint-enable @typescript-eslint/no-unsafe-enum-comparison */\n};\nLog.reset();\n\n// src/utils/JwtUtils.ts\nvar import_jwt_decode = require(\"jwt-decode\");\nvar JwtUtils = class {\n // IMPORTANT: doesn't validate the token\n static decode(token) {\n try {\n return (0, import_jwt_decode.jwtDecode)(token);\n } catch (err) {\n Logger.error(\"JwtUtils.decode\", err);\n throw err;\n }\n }\n static async generateSignedJwt(header, payload, privateKey) {\n const encodedHeader = CryptoUtils.encodeBase64Url(new TextEncoder().encode(JSON.stringify(header)));\n const encodedPayload = CryptoUtils.encodeBase64Url(new TextEncoder().encode(JSON.stringify(payload)));\n const encodedToken = `${encodedHeader}.${encodedPayload}`;\n const signature = await window.crypto.subtle.sign(\n {\n name: \"ECDSA\",\n hash: { name: \"SHA-256\" }\n },\n privateKey,\n new TextEncoder().encode(encodedToken)\n );\n const encodedSignature = CryptoUtils.encodeBase64Url(new Uint8Array(signature));\n return `${encodedToken}.${encodedSignature}`;\n }\n};\n\n// src/utils/CryptoUtils.ts\nvar UUID_V4_TEMPLATE = \"10000000-1000-4000-8000-100000000000\";\nvar toBase64 = (val) => btoa([...new Uint8Array(val)].map((chr) => String.fromCharCode(chr)).join(\"\"));\nvar _CryptoUtils = class _CryptoUtils {\n static _randomWord() {\n const arr = new Uint32Array(1);\n crypto.getRandomValues(arr);\n return arr[0];\n }\n /**\n * Generates RFC4122 version 4 guid\n */\n static generateUUIDv4() {\n const uuid = UUID_V4_TEMPLATE.replace(\n /[018]/g,\n (c) => (+c ^ _CryptoUtils._randomWord() & 15 >> +c / 4).toString(16)\n );\n return uuid.replace(/-/g, \"\");\n }\n /**\n * PKCE: Generate a code verifier\n */\n static generateCodeVerifier() {\n return _CryptoUtils.generateUUIDv4() + _CryptoUtils.generateUUIDv4() + _CryptoUtils.generateUUIDv4();\n }\n /**\n * PKCE: Generate a code challenge\n */\n static async generateCodeChallenge(code_verifier) {\n if (!crypto.subtle) {\n throw new Error(\"Crypto.subtle is available only in secure contexts (HTTPS).\");\n }\n try {\n const encoder = new TextEncoder();\n const data = encoder.encode(code_verifier);\n const hashed = await crypto.subtle.digest(\"SHA-256\", data);\n return toBase64(hashed).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n } catch (err) {\n Logger.error(\"CryptoUtils.generateCodeChallenge\", err);\n throw err;\n }\n }\n /**\n * Generates a base64-encoded string for a basic auth header\n */\n static generateBasicAuth(client_id, client_secret) {\n const encoder = new TextEncoder();\n const data = encoder.encode([client_id, client_secret].join(\":\"));\n return toBase64(data);\n }\n /**\n * Generates a hash of a string using a given algorithm\n * @param alg\n * @param message\n */\n static async hash(alg, message) {\n const msgUint8 = new TextEncoder().encode(message);\n const hashBuffer = await crypto.subtle.digest(alg, msgUint8);\n return new Uint8Array(hashBuffer);\n }\n /**\n * Generates a rfc7638 compliant jwk thumbprint\n * @param jwk\n */\n static async customCalculateJwkThumbprint(jwk) {\n let jsonObject;\n switch (jwk.kty) {\n case \"RSA\":\n jsonObject = {\n \"e\": jwk.e,\n \"kty\": jwk.kty,\n \"n\": jwk.n\n };\n break;\n case \"EC\":\n jsonObject = {\n \"crv\": jwk.crv,\n \"kty\": jwk.kty,\n \"x\": jwk.x,\n \"y\": jwk.y\n };\n break;\n case \"OKP\":\n jsonObject = {\n \"crv\": jwk.crv,\n \"kty\": jwk.kty,\n \"x\": jwk.x\n };\n break;\n case \"oct\":\n jsonObject = {\n \"crv\": jwk.k,\n \"kty\": jwk.kty\n };\n break;\n default:\n throw new Error(\"Unknown jwk type\");\n }\n const utf8encodedAndHashed = await _CryptoUtils.hash(\"SHA-256\", JSON.stringify(jsonObject));\n return _CryptoUtils.encodeBase64Url(utf8encodedAndHashed);\n }\n static async generateDPoPProof({\n url,\n accessToken,\n httpMethod,\n keyPair,\n nonce\n }) {\n let hashedToken;\n let encodedHash;\n const payload = {\n \"jti\": window.crypto.randomUUID(),\n \"htm\": httpMethod != null ? httpMethod : \"GET\",\n \"htu\": url,\n \"iat\": Math.floor(Date.now() / 1e3)\n };\n if (accessToken) {\n hashedToken = await _CryptoUtils.hash(\"SHA-256\", accessToken);\n encodedHash = _CryptoUtils.encodeBase64Url(hashedToken);\n payload.ath = encodedHash;\n }\n if (nonce) {\n payload.nonce = nonce;\n }\n try {\n const publicJwk = await crypto.subtle.exportKey(\"jwk\", keyPair.publicKey);\n const header = {\n \"alg\": \"ES256\",\n \"typ\": \"dpop+jwt\",\n \"jwk\": {\n \"crv\": publicJwk.crv,\n \"kty\": publicJwk.kty,\n \"x\": publicJwk.x,\n \"y\": publicJwk.y\n }\n };\n return await JwtUtils.generateSignedJwt(header, payload, keyPair.privateKey);\n } catch (err) {\n if (err instanceof TypeError) {\n throw new Error(`Error exporting dpop public key: ${err.message}`);\n } else {\n throw err;\n }\n }\n }\n static async generateDPoPJkt(keyPair) {\n try {\n const publicJwk = await crypto.subtle.exportKey(\"jwk\", keyPair.publicKey);\n return await _CryptoUtils.customCalculateJwkThumbprint(publicJwk);\n } catch (err) {\n if (err instanceof TypeError) {\n throw new Error(`Could not retrieve dpop keys from storage: ${err.message}`);\n } else {\n throw err;\n }\n }\n }\n static async generateDPoPKeys() {\n return await window.crypto.subtle.generateKey(\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\"\n },\n false,\n [\"sign\", \"verify\"]\n );\n }\n};\n/**\n * Generates a base64url encoded string\n */\n_CryptoUtils.encodeBase64Url = (input) => {\n return toBase64(input).replace(/=/g, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\");\n};\nvar CryptoUtils = _CryptoUtils;\n\n// src/utils/Event.ts\nvar Event = class {\n constructor(_name) {\n this._name = _name;\n this._callbacks = [];\n this._logger = new Logger(`Event('${this._name}')`);\n }\n addHandler(cb) {\n this._callbacks.push(cb);\n return () => this.removeHandler(cb);\n }\n removeHandler(cb) {\n const idx = this._callbacks.lastIndexOf(cb);\n if (idx >= 0) {\n this._callbacks.splice(idx, 1);\n }\n }\n async raise(...ev) {\n this._logger.debug(\"raise:\", ...ev);\n for (const cb of this._callbacks) {\n await cb(...ev);\n }\n }\n};\n\n// src/utils/PopupUtils.ts\nvar PopupUtils = class {\n /**\n * Populates a map of window features with a placement centered in front of\n * the current window. If no explicit width is given, a default value is\n * binned into [800, 720, 600, 480, 360] based on the current window's width.\n */\n static center({ ...features }) {\n var _a, _b, _c;\n if (features.width == null)\n features.width = (_a = [800, 720, 600, 480].find((width) => width <= window.outerWidth / 1.618)) != null ? _a : 360;\n (_b = features.left) != null ? _b : features.left = Math.max(0, Math.round(window.screenX + (window.outerWidth - features.width) / 2));\n if (features.height != null)\n (_c = features.top) != null ? _c : features.top = Math.max(0, Math.round(window.screenY + (window.outerHeight - features.height) / 2));\n return features;\n }\n static serialize(features) {\n return Object.entries(features).filter(([, value]) => value != null).map(([key, value]) => `${key}=${typeof value !== \"boolean\" ? value : value ? \"yes\" : \"no\"}`).join(\",\");\n }\n};\n\n// src/utils/Timer.ts\nvar Timer = class _Timer extends Event {\n constructor() {\n super(...arguments);\n this._logger = new Logger(`Timer('${this._name}')`);\n this._timerHandle = null;\n this._expiration = 0;\n this._callback = () => {\n const diff = this._expiration - _Timer.getEpochTime();\n this._logger.debug(\"timer completes in\", diff);\n if (this._expiration <= _Timer.getEpochTime()) {\n this.cancel();\n void super.raise();\n }\n };\n }\n // get the time\n static getEpochTime() {\n return Math.floor(Date.now() / 1e3);\n }\n init(durationInSeconds) {\n const logger2 = this._logger.create(\"init\");\n durationInSeconds = Math.max(Math.floor(durationInSeconds), 1);\n const expiration = _Timer.getEpochTime() + durationInSeconds;\n if (this.expiration === expiration && this._timerHandle) {\n logger2.debug(\"skipping since already initialized for expiration at\", this.expiration);\n return;\n }\n this.cancel();\n logger2.debug(\"using duration\", durationInSeconds);\n this._expiration = expiration;\n const timerDurationInSeconds = Math.min(durationInSeconds, 5);\n this._timerHandle = setInterval(this._callback, timerDurationInSeconds * 1e3);\n }\n get expiration() {\n return this._expiration;\n }\n cancel() {\n this._logger.create(\"cancel\");\n if (this._timerHandle) {\n clearInterval(this._timerHandle);\n this._timerHandle = null;\n }\n }\n};\n\n// src/utils/UrlUtils.ts\nvar UrlUtils = class {\n static readParams(url, responseMode = \"query\") {\n if (!url) throw new TypeError(\"Invalid URL\");\n const parsedUrl = new URL(url, \"http://127.0.0.1\");\n const params = parsedUrl[responseMode === \"fragment\" ? \"hash\" : \"search\"];\n return new URLSearchParams(params.slice(1));\n }\n};\nvar URL_STATE_DELIMITER = \";\";\n\n// src/errors/ErrorResponse.ts\nvar ErrorResponse = class extends Error {\n constructor(args, form) {\n var _a, _b, _c;\n super(args.error_description || args.error || \"\");\n this.form = form;\n /** Marker to detect class: \"ErrorResponse\" */\n this.name = \"ErrorResponse\";\n if (!args.error) {\n Logger.error(\"ErrorResponse\", \"No error passed\");\n throw new Error(\"No error passed\");\n }\n this.error = args.error;\n this.error_description = (_a = args.error_description) != null ? _a : null;\n this.error_uri = (_b = args.error_uri) != null ? _b : null;\n this.state = args.userState;\n this.session_state = (_c = args.session_state) != null ? _c : null;\n this.url_state = args.url_state;\n }\n};\n\n// src/errors/ErrorTimeout.ts\nvar ErrorTimeout = class extends Error {\n constructor(message) {\n super(message);\n /** Marker to detect class: \"ErrorTimeout\" */\n this.name = \"ErrorTimeout\";\n }\n};\n\n// src/AccessTokenEvents.ts\nvar AccessTokenEvents = class {\n constructor(args) {\n this._logger = new Logger(\"AccessTokenEvents\");\n this._expiringTimer = new Timer(\"Access token expiring\");\n this._expiredTimer = new Timer(\"Access token expired\");\n this._expiringNotificationTimeInSeconds = args.expiringNotificationTimeInSeconds;\n }\n async load(container) {\n const logger2 = this._logger.create(\"load\");\n if (container.access_token && container.expires_in !== void 0) {\n const duration = container.expires_in;\n logger2.debug(\"access token present, remaining duration:\", duration);\n if (duration > 0) {\n let expiring = duration - this._expiringNotificationTimeInSeconds;\n if (expiring <= 0) {\n expiring = 1;\n }\n logger2.debug(\"registering expiring timer, raising in\", expiring, \"seconds\");\n this._expiringTimer.init(expiring);\n } else {\n logger2.debug(\"canceling existing expiring timer because we're past expiration.\");\n this._expiringTimer.cancel();\n }\n const expired = duration + 1;\n logger2.debug(\"registering expired timer, raising in\", expired, \"seconds\");\n this._expiredTimer.init(expired);\n } else {\n this._expiringTimer.cancel();\n this._expiredTimer.cancel();\n }\n }\n async unload() {\n this._logger.debug(\"unload: canceling existing access token timers\");\n this._expiringTimer.cancel();\n this._expiredTimer.cancel();\n }\n /**\n * Add callback: Raised prior to the access token expiring.\n */\n addAccessTokenExpiring(cb) {\n return this._expiringTimer.addHandler(cb);\n }\n /**\n * Remove callback: Raised prior to the access token expiring.\n */\n removeAccessTokenExpiring(cb) {\n this._expiringTimer.removeHandler(cb);\n }\n /**\n * Add callback: Raised after the access token has expired.\n */\n addAccessTokenExpired(cb) {\n return this._expiredTimer.addHandler(cb);\n }\n /**\n * Remove callback: Raised after the access token has expired.\n */\n removeAccessTokenExpired(cb) {\n this._expiredTimer.removeHandler(cb);\n }\n};\n\n// src/CheckSessionIFrame.ts\nvar CheckSessionIFrame = class {\n constructor(_callback, _client_id, url, _intervalInSeconds, _stopOnError) {\n this._callback = _callback;\n this._client_id = _client_id;\n this._intervalInSeconds = _intervalInSeconds;\n this._stopOnError = _stopOnError;\n this._logger = new Logger(\"CheckSessionIFrame\");\n this._timer = null;\n this._session_state = null;\n this._message = (e) => {\n if (e.origin === this._frame_origin && e.source === this._frame.contentWindow) {\n if (e.data === \"error\") {\n this._logger.error(\"error message from check session op iframe\");\n if (this._stopOnError) {\n this.stop();\n }\n } else if (e.data === \"changed\") {\n this._logger.debug(\"changed message from check session op iframe\");\n this.stop();\n void this._callback();\n } else {\n this._logger.debug(e.data + \" message from check session op iframe\");\n }\n }\n };\n const parsedUrl = new URL(url);\n this._frame_origin = parsedUrl.origin;\n this._frame = window.document.createElement(\"iframe\");\n this._frame.style.visibility = \"hidden\";\n this._frame.style.position = \"fixed\";\n this._frame.style.left = \"-1000px\";\n this._frame.style.top = \"0\";\n this._frame.width = \"0\";\n this._frame.height = \"0\";\n this._frame.src = parsedUrl.href;\n }\n load() {\n return new Promise((resolve) => {\n this._frame.onload = () => {\n resolve();\n };\n window.document.body.appendChild(this._frame);\n window.addEventListener(\"message\", this._message, false);\n });\n }\n start(session_state) {\n if (this._session_state === session_state) {\n return;\n }\n this._logger.create(\"start\");\n this.stop();\n this._session_state = session_state;\n const send = () => {\n if (!this._frame.contentWindow || !this._session_state) {\n return;\n }\n this._frame.contentWindow.postMessage(this._client_id + \" \" + this._session_state, this._frame_origin);\n };\n send();\n this._timer = setInterval(send, this._intervalInSeconds * 1e3);\n }\n stop() {\n this._logger.create(\"stop\");\n this._session_state = null;\n if (this._timer) {\n clearInterval(this._timer);\n this._timer = null;\n }\n }\n};\n\n// src/InMemoryWebStorage.ts\nvar InMemoryWebStorage = class {\n constructor() {\n this._logger = new Logger(\"InMemoryWebStorage\");\n this._data = {};\n }\n clear() {\n this._logger.create(\"clear\");\n this._data = {};\n }\n getItem(key) {\n this._logger.create(`getItem('${key}')`);\n return this._data[key];\n }\n setItem(key, value) {\n this._logger.create(`setItem('${key}')`);\n this._data[key] = value;\n }\n removeItem(key) {\n this._logger.create(`removeItem('${key}')`);\n delete this._data[key];\n }\n get length() {\n return Object.getOwnPropertyNames(this._data).length;\n }\n key(index) {\n return Object.getOwnPropertyNames(this._data)[index];\n }\n};\n\n// src/errors/ErrorDPoPNonce.ts\nvar ErrorDPoPNonce = class extends Error {\n constructor(nonce, message) {\n super(message);\n /** Marker to detect class: \"ErrorDPoPNonce\" */\n this.name = \"ErrorDPoPNonce\";\n this.nonce = nonce;\n }\n};\n\n// src/JsonService.ts\nvar JsonService = class {\n constructor(additionalContentTypes = [], _jwtHandler = null, _extraHeaders = {}) {\n this._jwtHandler = _jwtHandler;\n this._extraHeaders = _extraHeaders;\n this._logger = new Logger(\"JsonService\");\n this._contentTypes = [];\n this._contentTypes.push(...additionalContentTypes, \"application/json\");\n if (_jwtHandler) {\n this._contentTypes.push(\"application/jwt\");\n }\n }\n async fetchWithTimeout(input, init = {}) {\n const { timeoutInSeconds, ...initFetch } = init;\n if (!timeoutInSeconds) {\n return await fetch(input, initFetch);\n }\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeoutInSeconds * 1e3);\n try {\n const response = await fetch(input, {\n ...init,\n signal: controller.signal\n });\n return response;\n } catch (err) {\n if (err instanceof DOMException && err.name === \"AbortError\") {\n throw new ErrorTimeout(\"Network timed out\");\n }\n throw err;\n } finally {\n clearTimeout(timeoutId);\n }\n }\n async getJson(url, {\n token,\n credentials,\n timeoutInSeconds\n } = {}) {\n const logger2 = this._logger.create(\"getJson\");\n const headers = {\n \"Accept\": this._contentTypes.join(\", \")\n };\n if (token) {\n logger2.debug(\"token passed, setting Authorization header\");\n headers[\"Authorization\"] = \"Bearer \" + token;\n }\n this._appendExtraHeaders(headers);\n let response;\n try {\n logger2.debug(\"url:\", url);\n response = await this.fetchWithTimeout(url, { method: \"GET\", headers, timeoutInSeconds, credentials });\n } catch (err) {\n logger2.error(\"Network Error\");\n throw err;\n }\n logger2.debug(\"HTTP response received, status\", response.status);\n const contentType = response.headers.get(\"Content-Type\");\n if (contentType && !this._contentTypes.find((item) => contentType.startsWith(item))) {\n logger2.throw(new Error(`Invalid response Content-Type: ${contentType != null ? contentType : \"undefined\"}, from URL: ${url}`));\n }\n if (response.ok && this._jwtHandler && (contentType == null ? void 0 : contentType.startsWith(\"application/jwt\"))) {\n return await this._jwtHandler(await response.text());\n }\n let json;\n try {\n json = await response.json();\n } catch (err) {\n logger2.error(\"Error parsing JSON response\", err);\n if (response.ok) throw err;\n throw new Error(`${response.statusText} (${response.status})`);\n }\n if (!response.ok) {\n logger2.error(\"Error from server:\", json);\n if (json.error) {\n throw new ErrorResponse(json);\n }\n throw new Error(`${response.statusText} (${response.status}): ${JSON.stringify(json)}`);\n }\n return json;\n }\n async postForm(url, {\n body,\n basicAuth,\n timeoutInSeconds,\n initCredentials,\n extraHeaders\n }) {\n const logger2 = this._logger.create(\"postForm\");\n const headers = {\n \"Accept\": this._contentTypes.join(\", \"),\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n ...extraHeaders\n };\n if (basicAuth !== void 0) {\n headers[\"Authorization\"] = \"Basic \" + basicAuth;\n }\n this._appendExtraHeaders(headers);\n let response;\n try {\n logger2.debug(\"url:\", url);\n response = await this.fetchWithTimeout(url, { method: \"POST\", headers, body, timeoutInSeconds, credentials: initCredentials });\n } catch (err) {\n logger2.error(\"Network error\");\n throw err;\n }\n logger2.debug(\"HTTP response received, status\", response.status);\n const contentType = response.headers.get(\"Content-Type\");\n if (contentType && !this._contentTypes.find((item) => contentType.startsWith(item))) {\n throw new Error(`Invalid response Content-Type: ${contentType != null ? contentType : \"undefined\"}, from URL: ${url}`);\n }\n const responseText = await response.text();\n let json = {};\n if (responseText) {\n try {\n json = JSON.parse(responseText);\n } catch (err) {\n logger2.error(\"Error parsing JSON response\", err);\n if (response.ok) throw err;\n throw new Error(`${response.statusText} (${response.status})`);\n }\n }\n if (!response.ok) {\n logger2.error(\"Error from server:\", json);\n if (response.headers.has(\"dpop-nonce\")) {\n const nonce = response.headers.get(\"dpop-nonce\");\n throw new ErrorDPoPNonce(nonce, `${JSON.stringify(json)}`);\n }\n if (json.error) {\n throw new ErrorResponse(json, body);\n }\n throw new Error(`${response.statusText} (${response.status}): ${JSON.stringify(json)}`);\n }\n return json;\n }\n _appendExtraHeaders(headers) {\n const logger2 = this._logger.create(\"appendExtraHeaders\");\n const customKeys = Object.keys(this._extraHeaders);\n const protectedHeaders = [\n \"accept\",\n \"content-type\"\n ];\n const preventOverride = [\n \"authorization\"\n ];\n if (customKeys.length === 0) {\n return;\n }\n customKeys.forEach((headerName) => {\n if (protectedHeaders.includes(headerName.toLocaleLowerCase())) {\n logger2.warn(\"Protected header could not be set\", headerName, protectedHeaders);\n return;\n }\n if (preventOverride.includes(headerName.toLocaleLowerCase()) && Object.keys(headers).includes(headerName)) {\n logger2.warn(\"Header could not be overridden\", headerName, preventOverride);\n return;\n }\n const content = typeof this._extraHeaders[headerName] === \"function\" ? this._extraHeaders[headerName]() : this._extraHeaders[headerName];\n if (content && content !== \"\") {\n headers[headerName] = content;\n }\n });\n }\n};\n\n// src/MetadataService.ts\nvar MetadataService = class {\n constructor(_settings) {\n this._settings = _settings;\n this._logger = new Logger(\"MetadataService\");\n this._signingKeys = null;\n this._metadata = null;\n this._metadataUrl = this._settings.metadataUrl;\n this._jsonService = new JsonService(\n [\"application/jwk-set+json\"],\n null,\n this._settings.extraHeaders\n );\n if (this._settings.signingKeys) {\n this._logger.debug(\"using signingKeys from settings\");\n this._signingKeys = this._settings.signingKeys;\n }\n if (this._settings.metadata) {\n this._logger.debug(\"using metadata from settings\");\n this._metadata = this._settings.metadata;\n }\n if (this._settings.fetchRequestCredentials) {\n this._logger.debug(\"using fetchRequestCredentials from settings\");\n this._fetchRequestCredentials = this._settings.fetchRequestCredentials;\n }\n }\n resetSigningKeys() {\n this._signingKeys = null;\n }\n async getMetadata() {\n const logger2 = this._logger.create(\"getMetadata\");\n if (this._metadata) {\n logger2.debug(\"using cached values\");\n return this._metadata;\n }\n if (!this._metadataUrl) {\n logger2.throw(new Error(\"No authority or metadataUrl configured on settings\"));\n throw null;\n }\n logger2.debug(\"getting metadata from\", this._metadataUrl);\n const metadata = await this._jsonService.getJson(this._metadataUrl, { credentials: this._fetchRequestCredentials, timeoutInSeconds: this._settings.requestTimeoutInSeconds });\n logger2.debug(\"merging remote JSON with seed metadata\");\n this._metadata = Object.assign({}, metadata, this._settings.metadataSeed);\n return this._metadata;\n }\n getIssuer() {\n return this._getMetadataProperty(\"issuer\");\n }\n getAuthorizationEndpoint() {\n return this._getMetadataProperty(\"authorization_endpoint\");\n }\n getUserInfoEndpoint() {\n return this._getMetadataProperty(\"userinfo_endpoint\");\n }\n getTokenEndpoint(optional = true) {\n return this._getMetadataProperty(\"token_endpoint\", optional);\n }\n getCheckSessionIframe() {\n return this._getMetadataProperty(\"check_session_iframe\", true);\n }\n getEndSessionEndpoint() {\n return this._getMetadataProperty(\"end_session_endpoint\", true);\n }\n getRevocationEndpoint(optional = true) {\n return this._getMetadataProperty(\"revocation_endpoint\", optional);\n }\n getKeysEndpoint(optional = true) {\n return this._getMetadataProperty(\"jwks_uri\", optional);\n }\n async _getMetadataProperty(name, optional = false) {\n const logger2 = this._logger.create(`_getMetadataProperty('${name}')`);\n const metadata = await this.getMetadata();\n logger2.debug(\"resolved\");\n if (metadata[name] === void 0) {\n if (optional === true) {\n logger2.warn(\"Metadata does not contain optional property\");\n return void 0;\n }\n logger2.throw(new Error(\"Metadata does not contain property \" + name));\n }\n return metadata[name];\n }\n async getSigningKeys() {\n const logger2 = this._logger.create(\"getSigningKeys\");\n if (this._signingKeys) {\n logger2.debug(\"returning signingKeys from cache\");\n return this._signingKeys;\n }\n const jwks_uri = await this.getKeysEndpoint(false);\n logger2.debug(\"got jwks_uri\", jwks_uri);\n const keySet = await this._jsonService.getJson(jwks_uri, { timeoutInSeconds: this._settings.requestTimeoutInSeconds });\n logger2.debug(\"got key set\", keySet);\n if (!Array.isArray(keySet.keys)) {\n logger2.throw(new Error(\"Missing keys on keyset\"));\n throw null;\n }\n this._signingKeys = keySet.keys;\n return this._signingKeys;\n }\n};\n\n// src/WebStorageStateStore.ts\nvar WebStorageStateStore = class {\n constructor({\n prefix = \"oidc.\",\n store = localStorage\n } = {}) {\n this._logger = new Logger(\"WebStorageStateStore\");\n this._store = store;\n this._prefix = prefix;\n }\n async set(key, value) {\n this._logger.create(`set('${key}')`);\n key = this._prefix + key;\n await this._store.setItem(key, value);\n }\n async get(key) {\n this._logger.create(`get('${key}')`);\n key = this._prefix + key;\n const item = await this._store.getItem(key);\n return item;\n }\n async remove(key) {\n this._logger.create(`remove('${key}')`);\n key = this._prefix + key;\n const item = await this._store.getItem(key);\n await this._store.removeItem(key);\n return item;\n }\n async getAllKeys() {\n this._logger.create(\"getAllKeys\");\n const len = await this._store.length;\n const keys = [];\n for (let index = 0; index < len; index++) {\n const key = await this._store.key(index);\n if (key && key.indexOf(this._prefix) === 0) {\n keys.push(key.substr(this._prefix.length));\n }\n }\n return keys;\n }\n};\n\n// src/OidcClientSettings.ts\nvar DefaultResponseType = \"code\";\nvar DefaultScope = \"openid\";\nvar DefaultClientAuthentication = \"client_secret_post\";\nvar DefaultStaleStateAgeInSeconds = 60 * 15;\nvar OidcClientSettingsStore = class {\n constructor({\n // metadata related\n authority,\n metadataUrl,\n metadata,\n signingKeys,\n metadataSeed,\n // client related\n client_id,\n client_secret,\n response_type = DefaultResponseType,\n scope = DefaultScope,\n redirect_uri,\n post_logout_redirect_uri,\n client_authentication = DefaultClientAuthentication,\n // optional protocol\n prompt,\n display,\n max_age,\n ui_locales,\n acr_values,\n resource,\n response_mode,\n // behavior flags\n filterProtocolClaims = true,\n loadUserInfo = false,\n requestTimeoutInSeconds,\n staleStateAgeInSeconds = DefaultStaleStateAgeInSeconds,\n mergeClaimsStrategy = { array: \"replace\" },\n disablePKCE = false,\n // other behavior\n stateStore,\n revokeTokenAdditionalContentTypes,\n fetchRequestCredentials,\n refreshTokenAllowedScope,\n // extra\n extraQueryParams = {},\n extraTokenParams = {},\n extraHeaders = {},\n dpop,\n omitScopeWhenRequesting = false\n }) {\n var _a;\n this.authority = authority;\n if (metadataUrl) {\n this.metadataUrl = metadataUrl;\n } else {\n this.metadataUrl = authority;\n if (authority) {\n if (!this.metadataUrl.endsWith(\"/\")) {\n this.metadataUrl += \"/\";\n }\n this.metadataUrl += \".well-known/openid-configuration\";\n }\n }\n this.metadata = metadata;\n this.metadataSeed = metadataSeed;\n this.signingKeys = signingKeys;\n this.client_id = client_id;\n this.client_secret = client_secret;\n this.response_type = response_type;\n this.scope = scope;\n this.redirect_uri = redirect_uri;\n this.post_logout_redirect_uri = post_logout_redirect_uri;\n this.client_authentication = client_authentication;\n this.prompt = prompt;\n this.display = display;\n this.max_age = max_age;\n this.ui_locales = ui_locales;\n this.acr_values = acr_values;\n this.resource = resource;\n this.response_mode = response_mode;\n this.filterProtocolClaims = filterProtocolClaims != null ? filterProtocolClaims : true;\n this.loadUserInfo = !!loadUserInfo;\n this.staleStateAgeInSeconds = staleStateAgeInSeconds;\n this.mergeClaimsStrategy = mergeClaimsStrategy;\n this.omitScopeWhenRequesting = omitScopeWhenRequesting;\n this.disablePKCE = !!disablePKCE;\n this.revokeTokenAdditionalContentTypes = revokeTokenAdditionalContentTypes;\n this.fetchRequestCredentials = fetchRequestCredentials ? fetchRequestCredentials : \"same-origin\";\n this.requestTimeoutInSeconds = requestTimeoutInSeconds;\n if (stateStore) {\n this.stateStore = stateStore;\n } else {\n const store = typeof window !== \"undefined\" ? window.localStorage : new InMemoryWebStorage();\n this.stateStore = new WebStorageStateStore({ store });\n }\n this.refreshTokenAllowedScope = refreshTokenAllowedScope;\n this.extraQueryParams = extraQueryParams;\n this.extraTokenParams = extraTokenParams;\n this.extraHeaders = extraHeaders;\n this.dpop = dpop;\n if (this.dpop && !((_a = this.dpop) == null ? void 0 : _a.store)) {\n throw new Error(\"A DPoPStore is required when dpop is enabled\");\n }\n }\n};\n\n// src/UserInfoService.ts\nvar UserInfoService = class {\n constructor(_settings, _metadataService) {\n this._settings = _settings;\n this._metadataService = _metadataService;\n this._logger = new Logger(\"UserInfoService\");\n this._getClaimsFromJwt = async (responseText) => {\n const logger2 = this._logger.create(\"_getClaimsFromJwt\");\n try {\n const payload = JwtUtils.decode(responseText);\n logger2.debug(\"JWT decoding successful\");\n return payload;\n } catch (err) {\n logger2.error(\"Error parsing JWT response\");\n throw err;\n }\n };\n this._jsonService = new JsonService(\n void 0,\n this._getClaimsFromJwt,\n this._settings.extraHeaders\n );\n }\n async getClaims(token) {\n const logger2 = this._logger.create(\"getClaims\");\n if (!token) {\n this._logger.throw(new Error(\"No token passed\"));\n }\n const url = await this._metadataService.getUserInfoEndpoint();\n logger2.debug(\"got userinfo url\", url);\n const claims = await this._jsonService.getJson(url, {\n token,\n credentials: this._settings.fetchRequestCredentials,\n timeoutInSeconds: this._settings.requestTimeoutInSeconds\n });\n logger2.debug(\"got claims\", claims);\n return claims;\n }\n};\n\n// src/TokenClient.ts\nvar TokenClient = class {\n constructor(_settings, _metadataService) {\n this._settings = _settings;\n this._metadataService = _metadataService;\n this._logger = new Logger(\"TokenClient\");\n this._jsonService = new JsonService(\n this._settings.revokeTokenAdditionalContentTypes,\n null,\n this._settings.extraHeaders\n );\n }\n /**\n * Exchange code.\n *\n * @see https://www.rfc-editor.org/rfc/rfc6749#section-4.1.3\n */\n async exchangeCode({\n grant_type = \"authorization_code\",\n redirect_uri = this._settings.redirect_uri,\n client_id = this._settings.client_id,\n client_secret = this._settings.client_secret,\n extraHeaders,\n ...args\n }) {\n const logger2 = this._logger.create(\"exchangeCode\");\n if (!client_id) {\n logger2.throw(new Error(\"A client_id is required\"));\n }\n if (!redirect_uri) {\n logger2.throw(new Error(\"A redirect_uri is required\"));\n }\n if (!args.code) {\n logger2.throw(new Error(\"A code is required\"));\n }\n const params = new URLSearchParams({ grant_type, redirect_uri });\n for (const [key, value] of Object.entries(args)) {\n if (value != null) {\n params.set(key, value);\n }\n }\n let basicAuth;\n switch (this._settings.client_authentication) {\n case \"client_secret_basic\":\n if (client_secret === void 0 || client_secret === null) {\n logger2.throw(new Error(\"A client_secret is required\"));\n throw null;\n }\n basicAuth = CryptoUtils.generateBasicAuth(client_id, client_secret);\n break;\n case \"client_secret_post\":\n params.append(\"client_id\", client_id);\n if (client_secret) {\n params.append(\"client_secret\", client_secret);\n }\n break;\n }\n const url = await this._metadataService.getTokenEndpoint(false);\n logger2.debug(\"got token endpoint\");\n const response = await this._jsonService.postForm(url, {\n body: params,\n basicAuth,\n timeoutInSeconds: this._settings.requestTimeoutInSeconds,\n initCredentials: this._settings.fetchRequestCredentials,\n extraHeaders\n });\n logger2.debug(\"got response\");\n return response;\n }\n /**\n * Exchange credentials.\n *\n * @see https://www.rfc-editor.org/rfc/rfc6749#section-4.3.2\n */\n async exchangeCredentials({\n grant_type = \"password\",\n client_id = this._settings.client_id,\n client_secret = this._settings.client_secret,\n scope = this._settings.scope,\n ...args\n }) {\n const logger2 = this._logger.create(\"exchangeCredentials\");\n if (!client_id) {\n logger2.throw(new Error(\"A client_id is required\"));\n }\n const params = new URLSearchParams({ grant_type });\n if (!this._settings.omitScopeWhenRequesting) {\n params.set(\"scope\", scope);\n }\n for (const [key, value] of Object.entries(args)) {\n if (value != null) {\n params.set(key, value);\n }\n }\n let basicAuth;\n switch (this._settings.client_authentication) {\n case \"client_secret_basic\":\n if (client_secret === void 0 || client_secret === null) {\n logger2.throw(new Error(\"A client_secret is required\"));\n throw null;\n }\n basicAuth = CryptoUtils.generateBasicAuth(client_id, client_secret);\n break;\n case \"client_secret_post\":\n params.append(\"client_id\", client_id);\n if (client_secret) {\n params.append(\"client_secret\", client_secret);\n }\n break;\n }\n const url = await this._metadataService.getTokenEndpoint(false);\n logger2.debug(\"got token endpoint\");\n const response = await this._jsonService.postForm(url, { body: params, basicAuth, timeoutInSeconds: this._settings.requestTimeoutInSeconds, initCredentials: this._settings.fetchRequestCredentials });\n logger2.debug(\"got response\");\n return response;\n }\n /**\n * Exchange a refresh token.\n *\n * @see https://www.rfc-editor.org/rfc/rfc6749#section-6\n */\n async exchangeRefreshToken({\n grant_type = \"refresh_token\",\n client_id = this._settings.client_id,\n client_secret = this._settings.client_secret,\n timeoutInSeconds,\n extraHeaders,\n ...args\n }) {\n const logger2 = this._logger.create(\"exchangeRefreshToken\");\n if (!client_id) {\n logger2.throw(new Error(\"A client_id is required\"));\n }\n if (!args.refresh_token) {\n logger2.throw(new Error(\"A refresh_token is required\"));\n }\n const params = new URLSearchParams({ grant_type });\n for (const [key, value] of Object.entries(args)) {\n if (Array.isArray(value)) {\n value.forEach((param) => params.append(key, param));\n } else if (value != null) {\n params.set(key, value);\n }\n }\n let basicAuth;\n switch (this._settings.client_authentication) {\n case \"client_secret_basic\":\n if (client_secret === void 0 || client_secret === null) {\n logger2.throw(new Error(\"A client_secret is required\"));\n throw null;\n }\n basicAuth = CryptoUtils.generateBasicAuth(client_id, client_secret);\n break;\n case \"client_secret_post\":\n params.append(\"client_id\", client_id);\n if (client_secret) {\n params.append(\"client_secret\", client_secret);\n }\n break;\n }\n const url = await this._metadataService.getTokenEndpoint(false);\n logger2.debug(\"got token endpoint\");\n const response = await this._jsonService.postForm(url, { body: params, basicAuth, timeoutInSeconds, initCredentials: this._settings.fetchRequestCredentials, extraHeaders });\n logger2.debug(\"got response\");\n return response;\n }\n /**\n * Revoke an access or refresh token.\n *\n * @see https://datatracker.ietf.org/doc/html/rfc7009#section-2.1\n */\n async revoke(args) {\n var _a;\n const logger2 = this._logger.create(\"revoke\");\n if (!args.token) {\n logger2.throw(new Error(\"A token is required\"));\n }\n const url = await this._metadataService.getRevocationEndpoint(false);\n logger2.debug(`got revocation endpoint, revoking ${(_a = args.token_type_hint) != null ? _a : \"default token type\"}`);\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(args)) {\n if (value != null) {\n params.set(key, value);\n }\n }\n params.set(\"client_id\", this._settings.client_id);\n if (this._settings.client_secret) {\n params.set(\"client_secret\", this._settings.client_secret);\n }\n await this._jsonService.postForm(url, { body: params, timeoutInSeconds: this._settings.requestTimeoutInSeconds });\n logger2.debug(\"got response\");\n }\n};\n\n// src/ResponseValidator.ts\nvar ResponseValidator = class {\n constructor(_settings, _metadataService, _claimsService) {\n this._settings = _settings;\n this._metadataService = _metadataService;\n this._claimsService = _claimsService;\n this._logger = new Logger(\"ResponseValidator\");\n this._userInfoService = new UserInfoService(this._settings, this._metadataService);\n this._tokenClient = new TokenClient(this._settings, this._metadataService);\n }\n async validateSigninResponse(response, state, extraHeaders) {\n const logger2 = this._logger.create(\"validateSigninResponse\");\n this._processSigninState(response, state);\n logger2.debug(\"state processed\");\n await this._processCode(response, state, extraHeaders);\n logger2.debug(\"code processed\");\n if (response.isOpenId) {\n this._validateIdTokenAttributes(response);\n }\n logger2.debug(\"tokens validated\");\n await this._processClaims(response, state == null ? void 0 : state.skipUserInfo, response.isOpenId);\n logger2.debug(\"claims processed\");\n }\n async validateCredentialsResponse(response, skipUserInfo) {\n const logger2 = this._logger.create(\"validateCredentialsResponse\");\n const shouldValidateSubClaim = response.isOpenId && !!response.id_token;\n if (shouldValidateSubClaim) {\n this._validateIdTokenAttributes(response);\n }\n logger2.debug(\"tokens validated\");\n await this._processClaims(response, skipUserInfo, shouldValidateSubClaim);\n logger2.debug(\"claims processed\");\n }\n async validateRefreshResponse(response, state) {\n var _a, _b;\n const logger2 = this._logger.create(\"validateRefreshResponse\");\n response.userState = state.data;\n (_a = response.session_state) != null ? _a : response.session_state = state.session_state;\n (_b = response.scope) != null ? _b : response.scope = state.scope;\n if (response.isOpenId && !!response.id_token) {\n this._validateIdTokenAttributes(response, state.id_token);\n logger2.debug(\"ID Token validated\");\n }\n if (!response.id_token) {\n response.id_token = state.id_token;\n response.profile = state.profile;\n }\n const hasIdToken = response.isOpenId && !!response.id_token;\n await this._processClaims(response, false, hasIdToken);\n logger2.debug(\"claims processed\");\n }\n validateSignoutResponse(response, state) {\n const logger2 = this._logger.create(\"validateSignoutResponse\");\n if (state.id !== response.state) {\n logger2.throw(new Error(\"State does not match\"));\n }\n logger2.debug(\"state validated\");\n response.userState = state.data;\n if (response.error) {\n logger2.warn(\"Response was error\", response.error);\n throw new ErrorResponse(response);\n }\n }\n _processSigninState(response, state) {\n var _a;\n const logger2 = this._logger.create(\"_processSigninState\");\n if (state.id !== response.state) {\n logger2.throw(new Error(\"State does not match\"));\n }\n if (!state.client_id) {\n logger2.throw(new Error(\"No client_id on state\"));\n }\n if (!state.authority) {\n logger2.throw(new Error(\"No authority on state\"));\n }\n if (this._settings.authority !== state.authority) {\n logger2.throw(new Error(\"authority mismatch on settings vs. signin state\"));\n }\n if (this._settings.client_id && this._settings.client_id !== state.client_id) {\n logger2.throw(new Error(\"client_id mismatch on settings vs. signin state\"));\n }\n logger2.debug(\"state validated\");\n response.userState = state.data;\n response.url_state = state.url_state;\n (_a = response.scope) != null ? _a : response.scope = state.scope;\n if (response.error) {\n logger2.warn(\"Response was error\", response.error);\n throw new ErrorResponse(response);\n }\n if (state.code_verifier && !response.code) {\n logger2.throw(new Error(\"Expected code in response\"));\n }\n }\n async _processClaims(response, skipUserInfo = false, validateSub = true) {\n const logger2 = this._logger.create(\"_processClaims\");\n response.profile = this._claimsService.filterProtocolClaims(response.profile);\n if (skipUserInfo || !this._settings.loadUserInfo || !response.access_token) {\n logger2.debug(\"not loading user info\");\n return;\n }\n logger2.debug(\"loading user info\");\n const claims = await this._userInfoService.getClaims(response.access_token);\n logger2.debug(\"user info claims received from user info endpoint\");\n if (validateSub && claims.sub !== response.profile.sub) {\n logger2.throw(new Error(\"subject from UserInfo response does not match subject in ID Token\"));\n }\n response.profile = this._claimsService.mergeClaims(response.profile, this._claimsService.filterProtocolClaims(claims));\n logger2.debug(\"user info claims received, updated profile:\", response.profile);\n }\n async _processCode(response, state, extraHeaders) {\n const logger2 = this._logger.create(\"_processCode\");\n if (response.code) {\n logger2.debug(\"Validating code\");\n const tokenResponse = await this._tokenClient.exchangeCode({\n client_id: state.client_id,\n client_secret: state.client_secret,\n code: response.code,\n redirect_uri: state.redirect_uri,\n code_verifier: state.code_verifier,\n extraHeaders,\n ...state.extraTokenParams\n });\n Object.assign(response, tokenResponse);\n } else {\n logger2.debug(\"No code to process\");\n }\n }\n _validateIdTokenAttributes(response, existingToken) {\n var _a;\n const logger2 = this._logger.create(\"_validateIdTokenAttributes\");\n logger2.debug(\"decoding ID Token JWT\");\n const incoming = JwtUtils.decode((_a = response.id_token) != null ? _a : \"\");\n if (!incoming.sub) {\n logger2.throw(new Error(\"ID Token is missing a subject claim\"));\n }\n if (existingToken) {\n const existing = JwtUtils.decode(existingToken);\n if (incoming.sub !== existing.sub) {\n logger2.throw(new Error(\"sub in id_token does not match current sub\"));\n }\n if (incoming.auth_time && incoming.auth_time !== existing.auth_time) {\n logger2.throw(new Error(\"auth_time in id_token does not match original auth_time\"));\n }\n if (incoming.azp && incoming.azp !== existing.azp) {\n logger2.throw(new Error(\"azp in id_token does not match original azp\"));\n }\n if (!incoming.azp && existing.azp) {\n logger2.throw(new Error(\"azp not in id_token, but present in original id_token\"));\n }\n }\n response.profile = incoming;\n }\n};\n\n// src/State.ts\nvar State = class _State {\n constructor(args) {\n this.id = args.id || CryptoUtils.generateUUIDv4();\n this.data = args.data;\n if (args.created && args.created > 0) {\n this.created = args.created;\n } else {\n this.created = Timer.getEpochTime();\n }\n this.request_type = args.request_type;\n this.url_state = args.url_state;\n }\n toStorageString() {\n new Logger(\"State\").create(\"toStorageString\");\n return JSON.stringify({\n id: this.id,\n data: this.data,\n created: this.created,\n request_type: this.request_type,\n url_state: this.url_state\n });\n }\n static fromStorageString(storageString) {\n Logger.createStatic(\"State\", \"fromStorageString\");\n return Promise.resolve(new _State(JSON.parse(storageString)));\n }\n static async clearStaleState(storage, age) {\n const logger2 = Logger.createStatic(\"State\", \"clearStaleState\");\n const cutoff = Timer.getEpochTime() - age;\n const keys = await storage.getAllKeys();\n logger2.debug(\"got keys\", keys);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const item = await storage.get(key);\n let remove = false;\n if (item) {\n try {\n const state = await _State.fromStorageString(item);\n logger2.debug(\"got item from key:\", key, state.created);\n if (state.created <= cutoff) {\n remove = true;\n }\n } catch (err) {\n logger2.error(\"Error parsing state for key:\", key, err);\n remove = true;\n }\n } else {\n logger2.debug(\"no item in storage for key:\", key);\n remove = true;\n }\n if (remove) {\n logger2.debug(\"removed item for key:\", key);\n void storage.remove(key);\n }\n }\n }\n};\n\n// src/SigninState.ts\nvar SigninState = class _SigninState extends State {\n constructor(args) {\n super(args);\n this.code_verifier = args.code_verifier;\n this.code_challenge = args.code_challenge;\n this.authority = args.authority;\n this.client_id = args.client_id;\n this.redirect_uri = args.redirect_uri;\n this.scope = args.scope;\n this.client_secret = args.client_secret;\n this.extraTokenParams = args.extraTokenParams;\n this.response_mode = args.response_mode;\n this.skipUserInfo = args.skipUserInfo;\n }\n static async create(args) {\n const code_verifier = args.code_verifier === true ? CryptoUtils.generateCodeVerifier() : args.code_verifier || void 0;\n const code_challenge = code_verifier ? await CryptoUtils.generateCodeChallenge(code_verifier) : void 0;\n return new _SigninState({\n ...args,\n code_verifier,\n code_challenge\n });\n }\n toStorageString() {\n new Logger(\"SigninState\").create(\"toStorageString\");\n return JSON.stringify({\n id: this.id,\n data: this.data,\n created: this.created,\n request_type: this.request_type,\n url_state: this.url_state,\n code_verifier: this.code_verifier,\n authority: this.authority,\n client_id: this.client_id,\n redirect_uri: this.redirect_uri,\n scope: this.scope,\n client_secret: this.client_secret,\n extraTokenParams: this.extraTokenParams,\n response_mode: this.response_mode,\n skipUserInfo: this.skipUserInfo\n });\n }\n static fromStorageString(storageString) {\n Logger.createStatic(\"SigninState\", \"fromStorageString\");\n const data = JSON.parse(storageString);\n return _SigninState.create(data);\n }\n};\n\n// src/SigninRequest.ts\nvar _SigninRequest = class _SigninRequest {\n constructor(args) {\n this.url = args.url;\n this.state = args.state;\n }\n static async create({\n // mandatory\n url,\n authority,\n client_id,\n redirect_uri,\n response_type,\n scope,\n // optional\n state_data,\n response_mode,\n request_type,\n client_secret,\n nonce,\n url_state,\n resource,\n skipUserInfo,\n extraQueryParams,\n extraTokenParams,\n disablePKCE,\n dpopJkt,\n omitScopeWhenRequesting,\n ...optionalParams\n }) {\n if (!url) {\n this._logger.error(\"create: No url passed\");\n throw new Error(\"url\");\n }\n if (!client_id) {\n this._logger.error(\"create: No client_id passed\");\n throw new Error(\"client_id\");\n }\n if (!redirect_uri) {\n this._logger.error(\"create: No redirect_uri passed\");\n throw new Error(\"redirect_uri\");\n }\n if (!response_type) {\n this._logger.error(\"create: No response_type passed\");\n throw new Error(\"response_type\");\n }\n if (!scope) {\n this._logger.error(\"create: No scope passed\");\n throw new Error(\"scope\");\n }\n if (!authority) {\n this._logger.error(\"create: No authority passed\");\n throw new Error(\"authority\");\n }\n const state = await SigninState.create({\n data: state_data,\n request_type,\n url_state,\n code_verifier: !disablePKCE,\n client_id,\n authority,\n redirect_uri,\n response_mode,\n client_secret,\n scope,\n extraTokenParams,\n skipUserInfo\n });\n const parsedUrl = new URL(url);\n parsedUrl.searchParams.append(\"client_id\", client_id);\n parsedUrl.searchParams.append(\"redirect_uri\", redirect_uri);\n parsedUrl.searchParams.append(\"response_type\", response_type);\n if (!omitScopeWhenRequesting) {\n parsedUrl.searchParams.append(\"scope\", scope);\n }\n if (nonce) {\n parsedUrl.searchParams.append(\"nonce\", nonce);\n }\n if (dpopJkt) {\n parsedUrl.searchParams.append(\"dpop_jkt\", dpopJkt);\n }\n let stateParam = state.id;\n if (url_state) {\n stateParam = `${stateParam}${URL_STATE_DELIMITER}${url_state}`;\n }\n parsedUrl.searchParams.append(\"state\", stateParam);\n if (state.code_challenge) {\n parsedUrl.searchParams.append(\"code_challenge\", state.code_challenge);\n parsedUrl.searchParams.append(\"code_challenge_method\", \"S256\");\n }\n if (resource) {\n const resources = Array.isArray(resource) ? resource : [resource];\n resources.forEach((r) => parsedUrl.searchParams.append(\"resource\", r));\n }\n for (const [key, value] of Object.entries({ response_mode, ...optionalParams, ...extraQueryParams })) {\n if (value != null) {\n parsedUrl.searchParams.append(key, value.toString());\n }\n }\n return new _SigninRequest({\n url: parsedUrl.href,\n state\n });\n }\n};\n_SigninRequest._logger = new Logger(\"SigninRequest\");\nvar SigninRequest = _SigninRequest;\n\n// src/SigninResponse.ts\nvar OidcScope = \"openid\";\nvar SigninResponse = class {\n constructor(params) {\n /** @see {@link User.access_token} */\n this.access_token = \"\";\n /** @see {@link User.token_type} */\n this.token_type = \"\";\n /** @see {@link User.profile} */\n this.profile = {};\n this.state = params.get(\"state\");\n this.session_state = params.get(\"session_state\");\n if (this.state) {\n const splitState = decodeURIComponent(this.state).split(URL_STATE_DELIMITER);\n this.state = splitState[0];\n if (splitState.length > 1) {\n this.url_state = splitState.slice(1).join(URL_STATE_DELIMITER);\n }\n }\n this.error = params.get(\"error\");\n this.error_description = params.get(\"error_description\");\n this.error_uri = params.get(\"error_uri\");\n this.code = params.get(\"code\");\n }\n get expires_in() {\n if (this.expires_at === void 0) {\n return void 0;\n }\n return this.expires_at - Timer.getEpochTime();\n }\n set expires_in(value) {\n if (typeof value === \"string\") value = Number(value);\n if (value !== void 0 && value >= 0) {\n this.expires_at = Math.floor(value) + Timer.getEpochTime();\n }\n }\n get isOpenId() {\n var _a;\n return ((_a = this.scope) == null ? void 0 : _a.split(\" \").includes(OidcScope)) || !!this.id_token;\n }\n};\n\n// src/SignoutRequest.ts\nvar SignoutRequest = class {\n constructor({\n url,\n state_data,\n id_token_hint,\n post_logout_redirect_uri,\n extraQueryParams,\n request_type,\n client_id,\n url_state\n }) {\n this._logger = new Logger(\"SignoutRequest\");\n if (!url) {\n this._logger.error(\"ctor: No url passed\");\n throw new Error(\"url\");\n }\n const parsedUrl = new URL(url);\n if (id_token_hint) {\n parsedUrl.searchParams.append(\"id_token_hint\", id_token_hint);\n }\n if (client_id) {\n parsedUrl.searchParams.append(\"client_id\", client_id);\n }\n if (post_logout_redirect_uri) {\n parsedUrl.searchParams.append(\"post_logout_redirect_uri\", post_logout_redirect_uri);\n if (state_data || url_state) {\n this.state = new State({ data: state_data, request_type, url_state });\n let stateParam = this.state.id;\n if (url_state) {\n stateParam = `${stateParam}${URL_STATE_DELIMITER}${url_state}`;\n }\n parsedUrl.searchParams.append(\"state\", stateParam);\n }\n }\n for (const [key, value] of Object.entries({ ...extraQueryParams })) {\n if (value != null) {\n parsedUrl.searchParams.append(key, value.toString());\n }\n }\n this.url = parsedUrl.href;\n }\n};\n\n// src/SignoutResponse.ts\nvar SignoutResponse = class {\n constructor(params) {\n this.state = params.get(\"state\");\n if (this.state) {\n const splitState = decodeURIComponent(this.state).split(URL_STATE_DELIMITER);\n this.state = splitState[0];\n if (splitState.length > 1) {\n this.url_state = splitState.slice(1).join(URL_STATE_DELIMITER);\n }\n }\n this.error = params.get(\"error\");\n this.error_description = params.get(\"error_description\");\n this.error_uri = params.get(\"error_uri\");\n }\n};\n\n// src/ClaimsService.ts\nvar DefaultProtocolClaims = [\n \"nbf\",\n \"jti\",\n \"auth_time\",\n \"nonce\",\n \"acr\",\n \"amr\",\n \"azp\",\n \"at_hash\"\n // https://openid.net/specs/openid-connect-core-1_0.html#CodeIDToken\n];\nvar InternalRequiredProtocolClaims = [\"sub\", \"iss\", \"aud\", \"exp\", \"iat\"];\nvar ClaimsService = class {\n constructor(_settings) {\n this._settings = _settings;\n this._logger = new Logger(\"ClaimsService\");\n }\n filterProtocolClaims(claims) {\n const result = { ...claims };\n if (this._settings.filterProtocolClaims) {\n let protocolClaims;\n if (Array.isArray(this._settings.filterProtocolClaims)) {\n protocolClaims = this._settings.filterProtocolClaims;\n } else {\n protocolClaims = DefaultProtocolClaims;\n }\n for (const claim of protocolClaims) {\n if (!InternalRequiredProtocolClaims.includes(claim)) {\n delete result[claim];\n }\n }\n }\n return result;\n }\n mergeClaims(claims1, claims2) {\n const result = { ...claims1 };\n for (const [claim, values] of Object.entries(claims2)) {\n if (result[claim] !== values) {\n if (Array.isArray(result[claim]) || Array.isArray(values)) {\n if (this._settings.mergeClaimsStrategy.array == \"replace\") {\n result[claim] = values;\n } else {\n const mergedValues = Array.isArray(result[claim]) ? result[claim] : [result[claim]];\n for (const value of Array.isArray(values) ? values : [values]) {\n if (!mergedValues.includes(value)) {\n mergedValues.push(value);\n }\n }\n result[claim] = mergedValues;\n }\n } else if (typeof result[claim] === \"object\" && typeof values === \"object\") {\n result[claim] = this.mergeClaims(result[claim], values);\n } else {\n result[claim] = values;\n }\n }\n }\n return result;\n }\n};\n\n// src/DPoPStore.ts\nvar DPoPState = class {\n constructor(keys, nonce) {\n this.keys = keys;\n this.nonce = nonce;\n }\n};\n\n// src/OidcClient.ts\nvar OidcClient = class {\n constructor(settings, metadataService) {\n this._logger = new Logger(\"OidcClient\");\n this.settings = settings instanceof OidcClientSettingsStore ? settings : new OidcClientSettingsStore(settings);\n this.metadataService = metadataService != null ? metadataService : new MetadataService(this.settings);\n this._claimsService = new ClaimsService(this.settings);\n this._validator = new ResponseValidator(this.settings, this.metadataService, this._claimsService);\n this._tokenClient = new TokenClient(this.settings, this.metadataService);\n }\n async createSigninRequest({\n state,\n request,\n request_uri,\n request_type,\n id_token_hint,\n login_hint,\n skipUserInfo,\n nonce,\n url_state,\n response_type = this.settings.response_type,\n scope = this.settings.scope,\n redirect_uri = this.settings.redirect_uri,\n prompt = this.settings.prompt,\n display = this.settings.display,\n max_age = this.settings.max_age,\n ui_locales = this.settings.ui_locales,\n acr_values = this.settings.acr_values,\n resource = this.settings.resource,\n response_mode = this.settings.response_mode,\n extraQueryParams = this.settings.extraQueryParams,\n extraTokenParams = this.settings.extraTokenParams,\n dpopJkt,\n omitScopeWhenRequesting = this.settings.omitScopeWhenRequesting\n }) {\n const logger2 = this._logger.create(\"createSigninRequest\");\n if (response_type !== \"code\") {\n throw new Error(\"Only the Authorization Code flow (with PKCE) is supported\");\n }\n const url = await this.metadataService.getAuthorizationEndpoint();\n logger2.debug(\"Received authorization endpoint\", url);\n const signinRequest = await SigninRequest.create({\n url,\n authority: this.settings.authority,\n client_id: this.settings.client_id,\n redirect_uri,\n response_type,\n scope,\n state_data: state,\n url_state,\n prompt,\n display,\n max_age,\n ui_locales,\n id_token_hint,\n login_hint,\n acr_values,\n dpopJkt,\n resource,\n request,\n request_uri,\n extraQueryParams,\n extraTokenParams,\n request_type,\n response_mode,\n client_secret: this.settings.client_secret,\n skipUserInfo,\n nonce,\n disablePKCE: this.settings.disablePKCE,\n omitScopeWhenRequesting\n });\n await this.clearStaleState();\n const signinState = signinRequest.state;\n await this.settings.stateStore.set(signinState.id, signinState.toStorageString());\n return signinRequest;\n }\n async readSigninResponseState(url, removeState = false) {\n const logger2 = this._logger.create(\"readSigninResponseState\");\n const response = new SigninResponse(UrlUtils.readParams(url, this.settings.response_mode));\n if (!response.state) {\n logger2.throw(new Error(\"No state in response\"));\n throw null;\n }\n const storedStateString = await this.settings.stateStore[removeState ? \"remove\" : \"get\"](response.state);\n if (!storedStateString) {\n logger2.throw(new Error(\"No matching state found in storage\"));\n throw null;\n }\n const state = await SigninState.fromStorageString(storedStateString);\n return { state, response };\n }\n async processSigninResponse(url, extraHeaders, removeState = true) {\n const logger2 = this._logger.create(\"processSigninResponse\");\n const { state, response } = await this.readSigninResponseState(url, removeState);\n logger2.debug(\"received state from storage; validating response\");\n if (this.settings.dpop && this.settings.dpop.store) {\n const dpopProof = await this.getDpopProof(this.settings.dpop.store);\n extraHeaders = { ...extraHeaders, \"DPoP\": dpopProof };\n }\n try {\n await this._validator.validateSigninResponse(response, state, extraHeaders);\n } catch (err) {\n if (err instanceof ErrorDPoPNonce && this.settings.dpop) {\n const dpopProof = await this.getDpopProof(this.settings.dpop.store, err.nonce);\n extraHeaders[\"DPoP\"] = dpopProof;\n await this._validator.validateSigninResponse(response, state, extraHeaders);\n } else {\n throw err;\n }\n }\n return response;\n }\n async getDpopProof(dpopStore, nonce) {\n let keyPair;\n let dpopState;\n if (!(await dpopStore.getAllKeys()).includes(this.settings.client_id)) {\n keyPair = await CryptoUtils.generateDPoPKeys();\n dpopState = new DPoPState(keyPair, nonce);\n await dpopStore.set(this.settings.client_id, dpopState);\n } else {\n dpopState = await dpopStore.get(this.settings.client_id);\n if (dpopState.nonce !== nonce && nonce) {\n dpopState.nonce = nonce;\n await dpopStore.set(this.settings.client_id, dpopState);\n }\n }\n return await CryptoUtils.generateDPoPProof({\n url: await this.metadataService.getTokenEndpoint(false),\n httpMethod: \"POST\",\n keyPair: dpopState.keys,\n nonce: dpopState.nonce\n });\n }\n async processResourceOwnerPasswordCredentials({\n username,\n password,\n skipUserInfo = false,\n extraTokenParams = {}\n }) {\n const tokenResponse = await this._tokenClient.exchangeCredentials({ username, password, ...extraTokenParams });\n const signinResponse = new SigninResponse(new URLSearchParams());\n Object.assign(signinResponse, tokenResponse);\n await this._validator.validateCredentialsResponse(signinResponse, skipUserInfo);\n return signinResponse;\n }\n async useRefreshToken({\n state,\n redirect_uri,\n resource,\n timeoutInSeconds,\n extraHeaders,\n extraTokenParams\n }) {\n var _a;\n const logger2 = this._logger.create(\"useRefreshToken\");\n let scope;\n if (this.settings.refreshTokenAllowedScope === void 0) {\n scope = state.scope;\n } else {\n const allowableScopes = this.settings.refreshTokenAllowedScope.split(\" \");\n const providedScopes = ((_a = state.scope) == null ? void 0 : _a.split(\" \")) || [];\n scope = providedScopes.filter((s) => allowableScopes.includes(s)).join(\" \");\n }\n if (this.settings.dpop && this.settings.dpop.store) {\n const dpopProof = await this.getDpopProof(this.settings.dpop.store);\n extraHeaders = { ...extraHeaders, \"DPoP\": dpopProof };\n }\n let result;\n try {\n result = await this._tokenClient.exchangeRefreshToken({\n refresh_token: state.refresh_token,\n // provide the (possible filtered) scope list\n scope,\n redirect_uri,\n resource,\n timeoutInSeconds,\n extraHeaders,\n ...extraTokenParams\n });\n } catch (err) {\n if (err instanceof ErrorDPoPNonce && this.settings.dpop) {\n extraHeaders[\"DPoP\"] = await this.getDpopProof(this.settings.dpop.store, err.nonce);\n result = await this._tokenClient.exchangeRefreshToken({\n refresh_token: state.refresh_token,\n // provide the (possible filtered) scope list\n scope,\n redirect_uri,\n resource,\n timeoutInSeconds,\n extraHeaders,\n ...extraTokenParams\n });\n } else {\n throw err;\n }\n }\n const response = new SigninResponse(new URLSearchParams());\n Object.assign(response, result);\n logger2.debug(\"validating response\", response);\n await this._validator.validateRefreshResponse(response, {\n ...state,\n // override the scope in the state handed over to the validator\n // so it can set the granted scope to the requested scope in case none is included in the response\n scope\n });\n return response;\n }\n async createSignoutRequest({\n state,\n id_token_hint,\n client_id,\n request_type,\n url_state,\n post_logout_redirect_uri = this.settings.post_logout_redirect_uri,\n extraQueryParams = this.settings.extraQueryParams\n } = {}) {\n const logger2 = this._logger.create(\"createSignoutRequest\");\n const url = await this.metadataService.getEndSessionEndpoint();\n if (!url) {\n logger2.throw(new Error(\"No end session endpoint\"));\n throw null;\n }\n logger2.debug(\"Received end session endpoint\", url);\n if (!client_id && post_logout_redirect_uri && !id_token_hint) {\n client_id = this.settings.client_id;\n }\n const request = new SignoutRequest({\n url,\n id_token_hint,\n client_id,\n post_logout_redirect_uri,\n state_data: state,\n extraQueryParams,\n request_type,\n url_state\n });\n await this.clearStaleState();\n const signoutState = request.state;\n if (signoutState) {\n logger2.debug(\"Signout request has state to persist\");\n await this.settings.stateStore.set(signoutState.id, signoutState.toStorageString());\n }\n return request;\n }\n async readSignoutResponseState(url, removeState = false) {\n const logger2 = this._logger.create(\"readSignoutResponseState\");\n const response = new SignoutResponse(UrlUtils.readParams(url, this.settings.response_mode));\n if (!response.state) {\n logger2.debug(\"No state in response\");\n if (response.error) {\n logger2.warn(\"Response was error:\", response.error);\n throw new ErrorResponse(response);\n }\n return { state: void 0, response };\n }\n const storedStateString = await this.settings.stateStore[removeState ? \"remove\" : \"get\"](response.state);\n if (!storedStateString) {\n logger2.throw(new Error(\"No matching state found in storage\"));\n throw null;\n }\n const state = await State.fromStorageString(storedStateString);\n return { state, response };\n }\n async processSignoutResponse(url) {\n const logger2 = this._logger.create(\"processSignoutResponse\");\n const { state, response } = await this.readSignoutResponseState(url, true);\n if (state) {\n logger2.debug(\"Received state from storage; validating response\");\n this._validator.validateSignoutResponse(response, state);\n } else {\n logger2.debug(\"No state from storage; skipping response validation\");\n }\n return response;\n }\n clearStaleState() {\n this._logger.create(\"clearStaleState\");\n return State.clearStaleState(this.settings.stateStore, this.settings.staleStateAgeInSeconds);\n }\n async revokeToken(token, type) {\n this._logger.create(\"revokeToken\");\n return await this._tokenClient.revoke({\n token,\n token_type_hint: type\n });\n }\n};\n\n// src/SessionMonitor.ts\nvar SessionMonitor = class {\n constructor(_userManager) {\n this._userManager = _userManager;\n this._logger = new Logger(\"SessionMonitor\");\n this._start = async (user) => {\n const session_state = user.session_state;\n if (!session_state) {\n return;\n }\n const logger2 = this._logger.create(\"_start\");\n if (user.profile) {\n this._sub = user.profile.sub;\n logger2.debug(\"session_state\", session_state, \", sub\", this._sub);\n } else {\n this._sub = void 0;\n logger2.debug(\"session_state\", session_state, \", anonymous user\");\n }\n if (this._checkSessionIFrame) {\n this._checkSessionIFrame.start(session_state);\n return;\n }\n try {\n const url = await this._userManager.metadataService.getCheckSessionIframe();\n if (url) {\n logger2.debug(\"initializing check session iframe\");\n const client_id = this._userManager.settings.client_id;\n const intervalInSeconds = this._userManager.settings.checkSessionIntervalInSeconds;\n const stopOnError = this._userManager.settings.stopCheckSessionOnError;\n const checkSessionIFrame = new CheckSessionIFrame(this._callback, client_id, url, intervalInSeconds, stopOnError);\n await checkSessionIFrame.load();\n this._checkSessionIFrame = checkSessionIFrame;\n checkSessionIFrame.start(session_state);\n } else {\n logger2.warn(\"no check session iframe found in the metadata\");\n }\n } catch (err) {\n logger2.error(\"Error from getCheckSessionIframe:\", err instanceof Error ? err.message : err);\n }\n };\n this._stop = () => {\n const logger2 = this._logger.create(\"_stop\");\n this._sub = void 0;\n if (this._checkSessionIFrame) {\n this._checkSessionIFrame.stop();\n }\n if (this._userManager.settings.monitorAnonymousSession) {\n const timerHandle = setInterval(async () => {\n clearInterval(timerHandle);\n try {\n const session = await this._userManager.querySessionStatus();\n if (session) {\n const tmpUser = {\n session_state: session.session_state,\n profile: session.sub ? {\n sub: session.sub\n } : null\n };\n void this._start(tmpUser);\n }\n } catch (err) {\n logger2.error(\"error from querySessionStatus\", err instanceof Error ? err.message : err);\n }\n }, 1e3);\n }\n };\n this._callback = async () => {\n const logger2 = this._logger.create(\"_callback\");\n try {\n const session = await this._userManager.querySessionStatus();\n let raiseEvent = true;\n if (session && this._checkSessionIFrame) {\n if (session.sub === this._sub) {\n raiseEvent = false;\n this._checkSessionIFrame.start(session.session_state);\n logger2.debug(\"same sub still logged in at OP, session state has changed, restarting check session iframe; session_state\", session.session_state);\n await this._userManager.events._raiseUserSessionChanged();\n } else {\n logger2.debug(\"different subject signed into OP\", session.sub);\n }\n } else {\n logger2.debug(\"subject no longer signed into OP\");\n }\n if (raiseEvent) {\n if (this._sub) {\n await this._userManager.events._raiseUserSignedOut();\n } else {\n await this._userManager.events._raiseUserSignedIn();\n }\n } else {\n logger2.debug(\"no change in session detected, no event to raise\");\n }\n } catch (err) {\n if (this._sub) {\n logger2.debug(\"Error calling queryCurrentSigninSession; raising signed out event\", err);\n await this._userManager.events._raiseUserSignedOut();\n }\n }\n };\n if (!_userManager) {\n this._logger.throw(new Error(\"No user manager passed\"));\n }\n this._userManager.events.addUserLoaded(this._start);\n this._userManager.events.addUserUnloaded(this._stop);\n this._init().catch((err) => {\n this._logger.error(err);\n });\n }\n async _init() {\n this._logger.create(\"_init\");\n const user = await this._userManager.getUser();\n if (user) {\n void this._start(user);\n } else if (this._userManager.settings.monitorAnonymousSession) {\n const session = await this._userManager.querySessionStatus();\n if (session) {\n const tmpUser = {\n session_state: session.session_state,\n profile: session.sub ? {\n sub: session.sub\n } : null\n };\n void this._start(tmpUser);\n }\n }\n }\n};\n\n// src/User.ts\nvar User = class _User {\n constructor(args) {\n var _a;\n this.id_token = args.id_token;\n this.session_state = (_a = args.session_state) != null ? _a : null;\n this.access_token = args.access_token;\n this.refresh_token = args.refresh_token;\n this.token_type = args.token_type;\n this.scope = args.scope;\n this.profile = args.profile;\n this.expires_at = args.expires_at;\n this.state = args.userState;\n this.url_state = args.url_state;\n }\n /** Computed number of seconds the access token has remaining. */\n get expires_in() {\n if (this.expires_at === void 0) {\n return void 0;\n }\n return this.expires_at - Timer.getEpochTime();\n }\n set expires_in(value) {\n if (value !== void 0) {\n this.expires_at = Math.floor(value) + Timer.getEpochTime();\n }\n }\n /** Computed value indicating if the access token is expired. */\n get expired() {\n const expires_in = this.expires_in;\n if (expires_in === void 0) {\n return void 0;\n }\n return expires_in <= 0;\n }\n /** Array representing the parsed values from the `scope`. */\n get scopes() {\n var _a, _b;\n return (_b = (_a = this.scope) == null ? void 0 : _a.split(\" \")) != null ? _b : [];\n }\n toStorageString() {\n new Logger(\"User\").create(\"toStorageString\");\n return JSON.stringify({\n id_token: this.id_token,\n session_state: this.session_state,\n access_token: this.access_token,\n refresh_token: this.refresh_token,\n token_type: this.token_type,\n scope: this.scope,\n profile: this.profile,\n expires_at: this.expires_at\n });\n }\n static fromStorageString(storageString) {\n Logger.createStatic(\"User\", \"fromStorageString\");\n return new _User(JSON.parse(storageString));\n }\n};\n\n// src/navigators/AbstractChildWindow.ts\nvar messageSource = \"oidc-client\";\nvar AbstractChildWindow = class {\n constructor() {\n this._abort = new Event(\"Window navigation aborted\");\n this._disposeHandlers = /* @__PURE__ */ new Set();\n this._window = null;\n }\n async navigate(params) {\n const logger2 = this._logger.create(\"navigate\");\n if (!this._window) {\n throw new Error(\"Attempted to navigate on a disposed window\");\n }\n logger2.debug(\"setting URL in window\");\n this._window.location.replace(params.url);\n const { url, keepOpen } = await new Promise((resolve, reject) => {\n const listener = (e) => {\n var _a;\n const data = e.data;\n const origin = (_a = params.scriptOrigin) != null ? _a : window.location.origin;\n if (e.origin !== origin || (data == null ? void 0 : data.source) !== messageSource) {\n return;\n }\n try {\n const state = UrlUtils.readParams(data.url, params.response_mode).get(\"state\");\n if (!state) {\n logger2.warn(\"no state found in response url\");\n }\n if (e.source !== this._window && state !== params.state) {\n return;\n }\n } catch {\n this._dispose();\n reject(new Error(\"Invalid response from window\"));\n }\n resolve(data);\n };\n window.addEventListener(\"message\", listener, false);\n this._disposeHandlers.add(() => window.removeEventListener(\"message\", listener, false));\n const channel = new BroadcastChannel(`oidc-client-popup-${params.state}`);\n channel.addEventListener(\"message\", listener, false);\n this._disposeHandlers.add(() => channel.close());\n this._disposeHandlers.add(this._abort.addHandler((reason) => {\n this._dispose();\n reject(reason);\n }));\n });\n logger2.debug(\"got response from window\");\n this._dispose();\n if (!keepOpen) {\n this.close();\n }\n return { url };\n }\n _dispose() {\n this._logger.create(\"_dispose\");\n for (const dispose of this._disposeHandlers) {\n dispose();\n }\n this._disposeHandlers.clear();\n }\n static _notifyParent(parent, url, keepOpen = false, targetOrigin = window.location.origin) {\n const msgData = {\n source: messageSource,\n url,\n keepOpen\n };\n const logger2 = new Logger(\"_notifyParent\");\n if (parent) {\n logger2.debug(\"With parent. Using parent.postMessage.\");\n parent.postMessage(msgData, targetOrigin);\n } else {\n logger2.debug(\"No parent. Using BroadcastChannel.\");\n const state = new URL(url).searchParams.get(\"state\");\n if (!state) {\n throw new Error(\"No parent and no state in URL. Can't complete notification.\");\n }\n const channel = new BroadcastChannel(`oidc-client-popup-${state}`);\n channel.postMessage(msgData);\n channel.close();\n }\n }\n};\n\n// src/UserManagerSettings.ts\nvar DefaultPopupWindowFeatures = {\n location: false,\n toolbar: false,\n height: 640,\n closePopupWindowAfterInSeconds: -1\n};\nvar DefaultPopupTarget = \"_blank\";\nvar DefaultAccessTokenExpiringNotificationTimeInSeconds = 60;\nvar DefaultCheckSessionIntervalInSeconds = 2;\nvar DefaultSilentRequestTimeoutInSeconds = 10;\nvar UserManagerSettingsStore = class extends OidcClientSettingsStore {\n constructor(args) {\n const {\n popup_redirect_uri = args.redirect_uri,\n popup_post_logout_redirect_uri = args.post_logout_redirect_uri,\n popupWindowFeatures = DefaultPopupWindowFeatures,\n popupWindowTarget = DefaultPopupTarget,\n redirectMethod = \"assign\",\n redirectTarget = \"self\",\n iframeNotifyParentOrigin = args.iframeNotifyParentOrigin,\n iframeScriptOrigin = args.iframeScriptOrigin,\n requestTimeoutInSeconds,\n silent_redirect_uri = args.redirect_uri,\n silentRequestTimeoutInSeconds,\n automaticSilentRenew = true,\n validateSubOnSilentRenew = true,\n includeIdTokenInSilentRenew = false,\n monitorSession = false,\n monitorAnonymousSession = false,\n checkSessionIntervalInSeconds = DefaultCheckSessionIntervalInSeconds,\n query_status_response_type = \"code\",\n stopCheckSessionOnError = true,\n revokeTokenTypes = [\"access_token\", \"refresh_token\"],\n revokeTokensOnSignout = false,\n includeIdTokenInSilentSignout = false,\n accessTokenExpiringNotificationTimeInSeconds = DefaultAccessTokenExpiringNotificationTimeInSeconds,\n userStore\n } = args;\n super(args);\n this.popup_redirect_uri = popup_redirect_uri;\n this.popup_post_logout_redirect_uri = popup_post_logout_redirect_uri;\n this.popupWindowFeatures = popupWindowFeatures;\n this.popupWindowTarget = popupWindowTarget;\n this.redirectMethod = redirectMethod;\n this.redirectTarget = redirectTarget;\n this.iframeNotifyParentOrigin = iframeNotifyParentOrigin;\n this.iframeScriptOrigin = iframeScriptOrigin;\n this.silent_redirect_uri = silent_redirect_uri;\n this.silentRequestTimeoutInSeconds = silentRequestTimeoutInSeconds || requestTimeoutInSeconds || DefaultSilentRequestTimeoutInSeconds;\n this.automaticSilentRenew = automaticSilentRenew;\n this.validateSubOnSilentRenew = validateSubOnSilentRenew;\n this.includeIdTokenInSilentRenew = includeIdTokenInSilentRenew;\n this.monitorSession = monitorSession;\n this.monitorAnonymousSession = monitorAnonymousSession;\n this.checkSessionIntervalInSeconds = checkSessionIntervalInSeconds;\n this.stopCheckSessionOnError = stopCheckSessionOnError;\n this.query_status_response_type = query_status_response_type;\n this.revokeTokenTypes = revokeTokenTypes;\n this.revokeTokensOnSignout = revokeTokensOnSignout;\n this.includeIdTokenInSilentSignout = includeIdTokenInSilentSignout;\n this.accessTokenExpiringNotificationTimeInSeconds = accessTokenExpiringNotificationTimeInSeconds;\n if (userStore) {\n this.userStore = userStore;\n } else {\n const store = typeof window !== \"undefined\" ? window.sessionStorage : new InMemoryWebStorage();\n this.userStore = new WebStorageStateStore({ store });\n }\n }\n};\n\n// src/navigators/IFrameWindow.ts\nvar IFrameWindow = class _IFrameWindow extends AbstractChildWindow {\n constructor({\n silentRequestTimeoutInSeconds = DefaultSilentRequestTimeoutInSeconds\n }) {\n super();\n this._logger = new Logger(\"IFrameWindow\");\n this._timeoutInSeconds = silentRequestTimeoutInSeconds;\n this._frame = _IFrameWindow.createHiddenIframe();\n this._window = this._frame.contentWindow;\n }\n static createHiddenIframe() {\n const iframe = window.document.createElement(\"iframe\");\n iframe.style.visibility = \"hidden\";\n iframe.style.position = \"fixed\";\n iframe.style.left = \"-1000px\";\n iframe.style.top = \"0\";\n iframe.width = \"0\";\n iframe.height = \"0\";\n window.document.body.appendChild(iframe);\n return iframe;\n }\n async navigate(params) {\n this._logger.debug(\"navigate: Using timeout of:\", this._timeoutInSeconds);\n const timer = setTimeout(() => void this._abort.raise(new ErrorTimeout(\"IFrame timed out without a response\")), this._timeoutInSeconds * 1e3);\n this._disposeHandlers.add(() => clearTimeout(timer));\n return await super.navigate(params);\n }\n close() {\n var _a;\n if (this._frame) {\n if (this._frame.parentNode) {\n this._frame.addEventListener(\"load\", (ev) => {\n var _a2;\n const frame = ev.target;\n (_a2 = frame.parentNode) == null ? void 0 : _a2.removeChild(frame);\n void this._abort.raise(new Error(\"IFrame removed from DOM\"));\n }, true);\n (_a = this._frame.contentWindow) == null ? void 0 : _a.location.replace(\"about:blank\");\n }\n this._frame = null;\n }\n this._window = null;\n }\n static notifyParent(url, targetOrigin) {\n return super._notifyParent(window.parent, url, false, targetOrigin);\n }\n};\n\n// src/navigators/IFrameNavigator.ts\nvar IFrameNavigator = class {\n constructor(_settings) {\n this._settings = _settings;\n this._logger = new Logger(\"IFrameNavigator\");\n }\n async prepare({\n silentRequestTimeoutInSeconds = this._settings.silentRequestTimeoutInSeconds\n }) {\n return new IFrameWindow({ silentRequestTimeoutInSeconds });\n }\n async callback(url) {\n this._logger.create(\"callback\");\n IFrameWindow.notifyParent(url, this._settings.iframeNotifyParentOrigin);\n }\n};\n\n// src/navigators/PopupWindow.ts\nvar checkForPopupClosedInterval = 500;\nvar second = 1e3;\nvar PopupWindow = class extends AbstractChildWindow {\n constructor({\n popupWindowTarget = DefaultPopupTarget,\n popupWindowFeatures = {},\n popupSignal\n }) {\n super();\n this._logger = new Logger(\"PopupWindow\");\n const centeredPopup = PopupUtils.center({ ...DefaultPopupWindowFeatures, ...popupWindowFeatures });\n this._window = window.open(void 0, popupWindowTarget, PopupUtils.serialize(centeredPopup));\n if (popupSignal) {\n popupSignal.addEventListener(\"abort\", () => {\n var _a;\n void this._abort.raise(new Error((_a = popupSignal.reason) != null ? _a : \"Popup aborted\"));\n });\n }\n if (popupWindowFeatures.closePopupWindowAfterInSeconds && popupWindowFeatures.closePopupWindowAfterInSeconds > 0) {\n setTimeout(() => {\n if (!this._window || typeof this._window.closed !== \"boolean\" || this._window.closed) {\n void this._abort.raise(new Error(\"Popup blocked by user\"));\n return;\n }\n this.close();\n }, popupWindowFeatures.closePopupWindowAfterInSeconds * second);\n }\n }\n async navigate(params) {\n var _a;\n (_a = this._window) == null ? void 0 : _a.focus();\n const popupClosedInterval = setInterval(() => {\n if (!this._window || this._window.closed) {\n this._logger.debug(\"Popup closed by user or isolated by redirect\");\n clearPopupClosedInterval();\n this._disposeHandlers.delete(clearPopupClosedInterval);\n }\n }, checkForPopupClosedInterval);\n const clearPopupClosedInterval = () => clearInterval(popupClosedInterval);\n this._disposeHandlers.add(clearPopupClosedInterval);\n return await super.navigate(params);\n }\n close() {\n if (this._window) {\n if (!this._window.closed) {\n this._window.close();\n void this._abort.raise(new Error(\"Popup closed\"));\n }\n }\n this._window = null;\n }\n static notifyOpener(url, keepOpen) {\n super._notifyParent(window.opener, url, keepOpen);\n if (!keepOpen && !window.opener) {\n window.close();\n }\n }\n};\n\n// src/navigators/PopupNavigator.ts\nvar PopupNavigator = class {\n constructor(_settings) {\n this._settings = _settings;\n this._logger = new Logger(\"PopupNavigator\");\n }\n async prepare({\n popupWindowFeatures = this._settings.popupWindowFeatures,\n popupWindowTarget = this._settings.popupWindowTarget,\n popupSignal\n }) {\n return new PopupWindow({ popupWindowFeatures, popupWindowTarget, popupSignal });\n }\n async callback(url, { keepOpen = false }) {\n this._logger.create(\"callback\");\n PopupWindow.notifyOpener(url, keepOpen);\n }\n};\n\n// src/navigators/RedirectNavigator.ts\nvar RedirectNavigator = class {\n constructor(_settings) {\n this._settings = _settings;\n this._logger = new Logger(\"RedirectNavigator\");\n }\n async prepare({\n redirectMethod = this._settings.redirectMethod,\n redirectTarget = this._settings.redirectTarget\n }) {\n var _a;\n this._logger.create(\"prepare\");\n let targetWindow = window.self;\n if (redirectTarget === \"top\") {\n targetWindow = (_a = window.top) != null ? _a : window.self;\n }\n const redirect = targetWindow.location[redirectMethod].bind(targetWindow.location);\n let abort;\n return {\n navigate: async (params) => {\n this._logger.create(\"navigate\");\n const promise = new Promise((resolve, reject) => {\n abort = reject;\n });\n redirect(params.url);\n return await promise;\n },\n close: () => {\n this._logger.create(\"close\");\n abort == null ? void 0 : abort(new Error(\"Redirect aborted\"));\n targetWindow.stop();\n }\n };\n }\n async callback() {\n return;\n }\n};\n\n// src/UserManagerEvents.ts\nvar UserManagerEvents = class extends AccessTokenEvents {\n constructor(settings) {\n super({ expiringNotificationTimeInSeconds: settings.accessTokenExpiringNotificationTimeInSeconds });\n this._logger = new Logger(\"UserManagerEvents\");\n this._userLoaded = new Event(\"User loaded\");\n this._userUnloaded = new Event(\"User unloaded\");\n this._silentRenewError = new Event(\"Silent renew error\");\n this._userSignedIn = new Event(\"User signed in\");\n this._userSignedOut = new Event(\"User signed out\");\n this._userSessionChanged = new Event(\"User session changed\");\n }\n async load(user, raiseEvent = true) {\n await super.load(user);\n if (raiseEvent) {\n await this._userLoaded.raise(user);\n }\n }\n async unload() {\n await super.unload();\n await this._userUnloaded.raise();\n }\n /**\n * Add callback: Raised when a user session has been established (or re-established).\n */\n addUserLoaded(cb) {\n return this._userLoaded.addHandler(cb);\n }\n /**\n * Remove callback: Raised when a user session has been established (or re-established).\n */\n removeUserLoaded(cb) {\n return this._userLoaded.removeHandler(cb);\n }\n /**\n * Add callback: Raised when a user session has been terminated.\n */\n addUserUnloaded(cb) {\n return this._userUnloaded.addHandler(cb);\n }\n /**\n * Remove callback: Raised when a user session has been terminated.\n */\n removeUserUnloaded(cb) {\n return this._userUnloaded.removeHandler(cb);\n }\n /**\n * Add callback: Raised when the automatic silent renew has failed.\n */\n addSilentRenewError(cb) {\n return this._silentRenewError.addHandler(cb);\n }\n /**\n * Remove callback: Raised when the automatic silent renew has failed.\n */\n removeSilentRenewError(cb) {\n return this._silentRenewError.removeHandler(cb);\n }\n /**\n * @internal\n */\n async _raiseSilentRenewError(e) {\n await this._silentRenewError.raise(e);\n }\n /**\n * Add callback: Raised when the user is signed in (when `monitorSession` is set).\n * @see {@link UserManagerSettings.monitorSession}\n */\n addUserSignedIn(cb) {\n return this._userSignedIn.addHandler(cb);\n }\n /**\n * Remove callback: Raised when the user is signed in (when `monitorSession` is set).\n */\n removeUserSignedIn(cb) {\n this._userSignedIn.removeHandler(cb);\n }\n /**\n * @internal\n */\n async _raiseUserSignedIn() {\n await this._userSignedIn.raise();\n }\n /**\n * Add callback: Raised when the user's sign-in status at the OP has changed (when `monitorSession` is set).\n * @see {@link UserManagerSettings.monitorSession}\n */\n addUserSignedOut(cb) {\n return this._userSignedOut.addHandler(cb);\n }\n /**\n * Remove callback: Raised when the user's sign-in status at the OP has changed (when `monitorSession` is set).\n */\n removeUserSignedOut(cb) {\n this._userSignedOut.removeHandler(cb);\n }\n /**\n * @internal\n */\n async _raiseUserSignedOut() {\n await this._userSignedOut.raise();\n }\n /**\n * Add callback: Raised when the user session changed (when `monitorSession` is set).\n * @see {@link UserManagerSettings.monitorSession}\n */\n addUserSessionChanged(cb) {\n return this._userSessionChanged.addHandler(cb);\n }\n /**\n * Remove callback: Raised when the user session changed (when `monitorSession` is set).\n */\n removeUserSessionChanged(cb) {\n this._userSessionChanged.removeHandler(cb);\n }\n /**\n * @internal\n */\n async _raiseUserSessionChanged() {\n await this._userSessionChanged.raise();\n }\n};\n\n// src/SilentRenewService.ts\nvar SilentRenewService = class {\n constructor(_userManager) {\n this._userManager = _userManager;\n this._logger = new Logger(\"SilentRenewService\");\n this._isStarted = false;\n this._retryTimer = new Timer(\"Retry Silent Renew\");\n this._tokenExpiring = async () => {\n const logger2 = this._logger.create(\"_tokenExpiring\");\n try {\n await this._userManager.signinSilent();\n logger2.debug(\"silent token renewal successful\");\n } catch (err) {\n if (err instanceof ErrorTimeout) {\n logger2.warn(\"ErrorTimeout from signinSilent:\", err, \"retry in 5s\");\n this._retryTimer.init(5);\n return;\n }\n logger2.error(\"Error from signinSilent:\", err);\n await this._userManager.events._raiseSilentRenewError(err);\n }\n };\n }\n async start() {\n const logger2 = this._logger.create(\"start\");\n if (!this._isStarted) {\n this._isStarted = true;\n this._userManager.events.addAccessTokenExpiring(this._tokenExpiring);\n this._retryTimer.addHandler(this._tokenExpiring);\n try {\n await this._userManager.getUser();\n } catch (err) {\n logger2.error(\"getUser error\", err);\n }\n }\n }\n stop() {\n if (this._isStarted) {\n this._retryTimer.cancel();\n this._retryTimer.removeHandler(this._tokenExpiring);\n this._userManager.events.removeAccessTokenExpiring(this._tokenExpiring);\n this._isStarted = false;\n }\n }\n};\n\n// src/RefreshState.ts\nvar RefreshState = class {\n constructor(args) {\n this.refresh_token = args.refresh_token;\n this.id_token = args.id_token;\n this.session_state = args.session_state;\n this.scope = args.scope;\n this.profile = args.profile;\n this.data = args.state;\n }\n};\n\n// src/UserManager.ts\nvar UserManager = class {\n constructor(settings, redirectNavigator, popupNavigator, iframeNavigator) {\n this._logger = new Logger(\"UserManager\");\n this.settings = new UserManagerSettingsStore(settings);\n this._client = new OidcClient(settings);\n this._redirectNavigator = redirectNavigator != null ? redirectNavigator : new RedirectNavigator(this.settings);\n this._popupNavigator = popupNavigator != null ? popupNavigator : new PopupNavigator(this.settings);\n this._iframeNavigator = iframeNavigator != null ? iframeNavigator : new IFrameNavigator(this.settings);\n this._events = new UserManagerEvents(this.settings);\n this._silentRenewService = new SilentRenewService(this);\n if (this.settings.automaticSilentRenew) {\n this.startSilentRenew();\n }\n this._sessionMonitor = null;\n if (this.settings.monitorSession) {\n this._sessionMonitor = new SessionMonitor(this);\n }\n }\n /**\n * Get object used to register for events raised by the `UserManager`.\n */\n get events() {\n return this._events;\n }\n /**\n * Get object used to access the metadata configuration of the identity provider.\n */\n get metadataService() {\n return this._client.metadataService;\n }\n /**\n * Load the `User` object for the currently authenticated user.\n *\n * @param raiseEvent - If `true`, the `UserLoaded` event will be raised. Defaults to false.\n * @returns A promise\n */\n async getUser(raiseEvent = false) {\n const logger2 = this._logger.create(\"getUser\");\n const user = await this._loadUser();\n if (user) {\n logger2.info(\"user loaded\");\n await this._events.load(user, raiseEvent);\n return user;\n }\n logger2.info(\"user not found in storage\");\n return null;\n }\n /**\n * Remove from any storage the currently authenticated user.\n *\n * @returns A promise\n */\n async removeUser() {\n const logger2 = this._logger.create(\"removeUser\");\n await this.storeUser(null);\n logger2.info(\"user removed from storage\");\n await this._events.unload();\n }\n /**\n * Trigger a redirect of the current window to the authorization endpoint.\n *\n * @returns A promise\n *\n * @throws `Error` In cases of wrong authentication.\n */\n async signinRedirect(args = {}) {\n var _a;\n this._logger.create(\"signinRedirect\");\n const {\n redirectMethod,\n ...requestArgs\n } = args;\n let dpopJkt;\n if ((_a = this.settings.dpop) == null ? void 0 : _a.bind_authorization_code) {\n dpopJkt = await this.generateDPoPJkt(this.settings.dpop);\n }\n const handle = await this._redirectNavigator.prepare({ redirectMethod });\n await this._signinStart({\n request_type: \"si:r\",\n dpopJkt,\n ...requestArgs\n }, handle);\n }\n /**\n * Process the response (callback) from the authorization endpoint.\n * It is recommended to use {@link UserManager.signinCallback} instead.\n *\n * @returns A promise containing the authenticated `User`.\n *\n * @see {@link UserManager.signinCallback}\n */\n async signinRedirectCallback(url = window.location.href) {\n const logger2 = this._logger.create(\"signinRedirectCallback\");\n const user = await this._signinEnd(url);\n if (user.profile && user.profile.sub) {\n logger2.info(\"success, signed in subject\", user.profile.sub);\n } else {\n logger2.info(\"no subject\");\n }\n return user;\n }\n /**\n * Trigger the signin with user/password.\n *\n * @returns A promise containing the authenticated `User`.\n * @throws {@link ErrorResponse} In cases of wrong authentication.\n */\n async signinResourceOwnerCredentials({\n username,\n password,\n skipUserInfo = false\n }) {\n const logger2 = this._logger.create(\"signinResourceOwnerCredential\");\n const signinResponse = await this._client.processResourceOwnerPasswordCredentials({\n username,\n password,\n skipUserInfo,\n extraTokenParams: this.settings.extraTokenParams\n });\n logger2.debug(\"got signin response\");\n const user = await this._buildUser(signinResponse);\n if (user.profile && user.profile.sub) {\n logger2.info(\"success, signed in subject\", user.profile.sub);\n } else {\n logger2.info(\"no subject\");\n }\n return user;\n }\n /**\n * Trigger a request (via a popup window) to the authorization endpoint.\n *\n * @returns A promise containing the authenticated `User`.\n * @throws `Error` In cases of wrong authentication.\n */\n async signinPopup(args = {}) {\n var _a;\n const logger2 = this._logger.create(\"signinPopup\");\n let dpopJkt;\n if ((_a = this.settings.dpop) == null ? void 0 : _a.bind_authorization_code) {\n dpopJkt = await this.generateDPoPJkt(this.settings.dpop);\n }\n const {\n popupWindowFeatures,\n popupWindowTarget,\n popupSignal,\n ...requestArgs\n } = args;\n const url = this.settings.popup_redirect_uri;\n if (!url) {\n logger2.throw(new Error(\"No popup_redirect_uri configured\"));\n }\n const handle = await this._popupNavigator.prepare({ popupWindowFeatures, popupWindowTarget, popupSignal });\n const user = await this._signin({\n request_type: \"si:p\",\n redirect_uri: url,\n display: \"popup\",\n dpopJkt,\n ...requestArgs\n }, handle);\n if (user) {\n if (user.profile && user.profile.sub) {\n logger2.info(\"success, signed in subject\", user.profile.sub);\n } else {\n logger2.info(\"no subject\");\n }\n }\n return user;\n }\n /**\n * Notify the opening window of response (callback) from the authorization endpoint.\n * It is recommended to use {@link UserManager.signinCallback} instead.\n *\n * @returns A promise\n *\n * @see {@link UserManager.signinCallback}\n */\n async signinPopupCallback(url = window.location.href, keepOpen = false) {\n const logger2 = this._logger.create(\"signinPopupCallback\");\n await this._popupNavigator.callback(url, { keepOpen });\n logger2.info(\"success\");\n }\n /**\n * Trigger a silent request (via refresh token or an iframe) to the authorization endpoint.\n *\n * @returns A promise that contains the authenticated `User`.\n */\n async signinSilent(args = {}) {\n var _a, _b;\n const logger2 = this._logger.create(\"signinSilent\");\n const {\n silentRequestTimeoutInSeconds,\n ...requestArgs\n } = args;\n let user = await this._loadUser();\n if (user == null ? void 0 : user.refresh_token) {\n logger2.debug(\"using refresh token\");\n const state = new RefreshState(user);\n return await this._useRefreshToken({\n state,\n redirect_uri: requestArgs.redirect_uri,\n resource: requestArgs.resource,\n extraTokenParams: requestArgs.extraTokenParams,\n timeoutInSeconds: silentRequestTimeoutInSeconds\n });\n }\n let dpopJkt;\n if ((_a = this.settings.dpop) == null ? void 0 : _a.bind_authorization_code) {\n dpopJkt = await this.generateDPoPJkt(this.settings.dpop);\n }\n const url = this.settings.silent_redirect_uri;\n if (!url) {\n logger2.throw(new Error(\"No silent_redirect_uri configured\"));\n }\n let verifySub;\n if (user && this.settings.validateSubOnSilentRenew) {\n logger2.debug(\"subject prior to silent renew:\", user.profile.sub);\n verifySub = user.profile.sub;\n }\n const handle = await this._iframeNavigator.prepare({ silentRequestTimeoutInSeconds });\n user = await this._signin({\n request_type: \"si:s\",\n redirect_uri: url,\n prompt: \"none\",\n id_token_hint: this.settings.includeIdTokenInSilentRenew ? user == null ? void 0 : user.id_token : void 0,\n dpopJkt,\n ...requestArgs\n }, handle, verifySub);\n if (user) {\n if ((_b = user.profile) == null ? void 0 : _b.sub) {\n logger2.info(\"success, signed in subject\", user.profile.sub);\n } else {\n logger2.info(\"no subject\");\n }\n }\n return user;\n }\n async _useRefreshToken(args) {\n const response = await this._client.useRefreshToken({\n timeoutInSeconds: this.settings.silentRequestTimeoutInSeconds,\n ...args\n });\n const user = new User({ ...args.state, ...response });\n await this.storeUser(user);\n await this._events.load(user);\n return user;\n }\n /**\n *\n * Notify the parent window of response (callback) from the authorization endpoint.\n * It is recommended to use {@link UserManager.signinCallback} instead.\n *\n * @returns A promise\n *\n * @see {@link UserManager.signinCallback}\n */\n async signinSilentCallback(url = window.location.href) {\n const logger2 = this._logger.create(\"signinSilentCallback\");\n await this._iframeNavigator.callback(url);\n logger2.info(\"success\");\n }\n /**\n * Process any response (callback) from the authorization endpoint, by dispatching the request_type\n * and executing one of the following functions:\n * - {@link UserManager.signinRedirectCallback}\n * - {@link UserManager.signinPopupCallback}\n * - {@link UserManager.signinSilentCallback}\n *\n * @throws `Error` If request_type is unknown or signin cannot be processed.\n */\n async signinCallback(url = window.location.href) {\n const { state } = await this._client.readSigninResponseState(url);\n switch (state.request_type) {\n case \"si:r\":\n return await this.signinRedirectCallback(url);\n case \"si:p\":\n await this.signinPopupCallback(url);\n break;\n case \"si:s\":\n await this.signinSilentCallback(url);\n break;\n default:\n throw new Error(\"invalid response_type in state\");\n }\n return void 0;\n }\n /**\n * Process any response (callback) from the end session endpoint, by dispatching the request_type\n * and executing one of the following functions:\n * - {@link UserManager.signoutRedirectCallback}\n * - {@link UserManager.signoutPopupCallback}\n * - {@link UserManager.signoutSilentCallback}\n *\n * @throws `Error` If request_type is unknown or signout cannot be processed.\n */\n async signoutCallback(url = window.location.href, keepOpen = false) {\n const { state } = await this._client.readSignoutResponseState(url);\n if (!state) {\n return void 0;\n }\n switch (state.request_type) {\n case \"so:r\":\n return await this.signoutRedirectCallback(url);\n case \"so:p\":\n await this.signoutPopupCallback(url, keepOpen);\n break;\n case \"so:s\":\n await this.signoutSilentCallback(url);\n break;\n default:\n throw new Error(\"invalid response_type in state\");\n }\n return void 0;\n }\n /**\n * Query OP for user's current signin status.\n *\n * @returns A promise object with session_state and subject identifier.\n */\n async querySessionStatus(args = {}) {\n const logger2 = this._logger.create(\"querySessionStatus\");\n const {\n silentRequestTimeoutInSeconds,\n ...requestArgs\n } = args;\n const url = this.settings.silent_redirect_uri;\n if (!url) {\n logger2.throw(new Error(\"No silent_redirect_uri configured\"));\n }\n const user = await this._loadUser();\n const handle = await this._iframeNavigator.prepare({ silentRequestTimeoutInSeconds });\n const navResponse = await this._signinStart({\n request_type: \"si:s\",\n // this acts like a signin silent\n redirect_uri: url,\n prompt: \"none\",\n id_token_hint: this.settings.includeIdTokenInSilentRenew ? user == null ? void 0 : user.id_token : void 0,\n response_type: this.settings.query_status_response_type,\n scope: \"openid\",\n skipUserInfo: true,\n ...requestArgs\n }, handle);\n try {\n const extraHeaders = {};\n const signinResponse = await this._client.processSigninResponse(navResponse.url, extraHeaders);\n logger2.debug(\"got signin response\");\n if (signinResponse.session_state && signinResponse.profile.sub) {\n logger2.info(\"success for subject\", signinResponse.profile.sub);\n return {\n session_state: signinResponse.session_state,\n sub: signinResponse.profile.sub\n };\n }\n logger2.info(\"success, user not authenticated\");\n return null;\n } catch (err) {\n if (this.settings.monitorAnonymousSession && err instanceof ErrorResponse) {\n switch (err.error) {\n case \"login_required\":\n case \"consent_required\":\n case \"interaction_required\":\n case \"account_selection_required\":\n logger2.info(\"success for anonymous user\");\n return {\n session_state: err.session_state\n };\n }\n }\n throw err;\n }\n }\n async _signin(args, handle, verifySub) {\n const navResponse = await this._signinStart(args, handle);\n return await this._signinEnd(navResponse.url, verifySub);\n }\n async _signinStart(args, handle) {\n const logger2 = this._logger.create(\"_signinStart\");\n try {\n const signinRequest = await this._client.createSigninRequest(args);\n logger2.debug(\"got signin request\");\n return await handle.navigate({\n url: signinRequest.url,\n state: signinRequest.state.id,\n response_mode: signinRequest.state.response_mode,\n scriptOrigin: this.settings.iframeScriptOrigin\n });\n } catch (err) {\n logger2.debug(\"error after preparing navigator, closing navigator window\");\n handle.close();\n throw err;\n }\n }\n async _signinEnd(url, verifySub) {\n const logger2 = this._logger.create(\"_signinEnd\");\n const extraHeaders = {};\n const signinResponse = await this._client.processSigninResponse(url, extraHeaders);\n logger2.debug(\"got signin response\");\n const user = await this._buildUser(signinResponse, verifySub);\n return user;\n }\n async _buildUser(signinResponse, verifySub) {\n const logger2 = this._logger.create(\"_buildUser\");\n const user = new User(signinResponse);\n if (verifySub) {\n if (verifySub !== user.profile.sub) {\n logger2.debug(\"current user does not match user returned from signin. sub from signin:\", user.profile.sub);\n throw new ErrorResponse({ ...signinResponse, error: \"login_required\" });\n }\n logger2.debug(\"current user matches user returned from signin\");\n }\n await this.storeUser(user);\n logger2.debug(\"user stored\");\n await this._events.load(user);\n return user;\n }\n /**\n * Trigger a redirect of the current window to the end session endpoint.\n *\n * @returns A promise\n */\n async signoutRedirect(args = {}) {\n const logger2 = this._logger.create(\"signoutRedirect\");\n const {\n redirectMethod,\n ...requestArgs\n } = args;\n const handle = await this._redirectNavigator.prepare({ redirectMethod });\n await this._signoutStart({\n request_type: \"so:r\",\n post_logout_redirect_uri: this.settings.post_logout_redirect_uri,\n ...requestArgs\n }, handle);\n logger2.info(\"success\");\n }\n /**\n * Process response (callback) from the end session endpoint.\n * It is recommended to use {@link UserManager.signoutCallback} instead.\n *\n * @returns A promise containing signout response\n *\n * @see {@link UserManager.signoutCallback}\n */\n async signoutRedirectCallback(url = window.location.href) {\n const logger2 = this._logger.create(\"signoutRedirectCallback\");\n const response = await this._signoutEnd(url);\n logger2.info(\"success\");\n return response;\n }\n /**\n * Trigger a redirect of a popup window to the end session endpoint.\n *\n * @returns A promise\n */\n async signoutPopup(args = {}) {\n const logger2 = this._logger.create(\"signoutPopup\");\n const {\n popupWindowFeatures,\n popupWindowTarget,\n popupSignal,\n ...requestArgs\n } = args;\n const url = this.settings.popup_post_logout_redirect_uri;\n const handle = await this._popupNavigator.prepare({ popupWindowFeatures, popupWindowTarget, popupSignal });\n await this._signout({\n request_type: \"so:p\",\n post_logout_redirect_uri: url,\n // we're putting a dummy entry in here because we\n // need a unique id from the state for notification\n // to the parent window, which is necessary if we\n // plan to return back to the client after signout\n // and so we can close the popup after signout\n state: url == null ? void 0 : {},\n ...requestArgs\n }, handle);\n logger2.info(\"success\");\n }\n /**\n * Process response (callback) from the end session endpoint from a popup window.\n * It is recommended to use {@link UserManager.signoutCallback} instead.\n *\n * @returns A promise\n *\n * @see {@link UserManager.signoutCallback}\n */\n async signoutPopupCallback(url = window.location.href, keepOpen = false) {\n const logger2 = this._logger.create(\"signoutPopupCallback\");\n await this._popupNavigator.callback(url, { keepOpen });\n logger2.info(\"success\");\n }\n async _signout(args, handle) {\n const navResponse = await this._signoutStart(args, handle);\n return await this._signoutEnd(navResponse.url);\n }\n async _signoutStart(args = {}, handle) {\n var _a;\n const logger2 = this._logger.create(\"_signoutStart\");\n try {\n const user = await this._loadUser();\n logger2.debug(\"loaded current user from storage\");\n if (this.settings.revokeTokensOnSignout) {\n await this._revokeInternal(user);\n }\n const id_token = args.id_token_hint || user && user.id_token;\n if (id_token) {\n logger2.debug(\"setting id_token_hint in signout request\");\n args.id_token_hint = id_token;\n }\n await this.removeUser();\n logger2.debug(\"user removed, creating signout request\");\n const signoutRequest = await this._client.createSignoutRequest(args);\n logger2.debug(\"got signout request\");\n return await handle.navigate({\n url: signoutRequest.url,\n state: (_a = signoutRequest.state) == null ? void 0 : _a.id,\n scriptOrigin: this.settings.iframeScriptOrigin\n });\n } catch (err) {\n logger2.debug(\"error after preparing navigator, closing navigator window\");\n handle.close();\n throw err;\n }\n }\n async _signoutEnd(url) {\n const logger2 = this._logger.create(\"_signoutEnd\");\n const signoutResponse = await this._client.processSignoutResponse(url);\n logger2.debug(\"got signout response\");\n return signoutResponse;\n }\n /**\n * Trigger a silent request (via an iframe) to the end session endpoint.\n *\n * @returns A promise\n */\n async signoutSilent(args = {}) {\n var _a;\n const logger2 = this._logger.create(\"signoutSilent\");\n const {\n silentRequestTimeoutInSeconds,\n ...requestArgs\n } = args;\n const id_token_hint = this.settings.includeIdTokenInSilentSignout ? (_a = await this._loadUser()) == null ? void 0 : _a.id_token : void 0;\n const url = this.settings.popup_post_logout_redirect_uri;\n const handle = await this._iframeNavigator.prepare({ silentRequestTimeoutInSeconds });\n await this._signout({\n request_type: \"so:s\",\n post_logout_redirect_uri: url,\n id_token_hint,\n ...requestArgs\n }, handle);\n logger2.info(\"success\");\n }\n /**\n * Notify the parent window of response (callback) from the end session endpoint.\n * It is recommended to use {@link UserManager.signoutCallback} instead.\n *\n * @returns A promise\n *\n * @see {@link UserManager.signoutCallback}\n */\n async signoutSilentCallback(url = window.location.href) {\n const logger2 = this._logger.create(\"signoutSilentCallback\");\n await this._iframeNavigator.callback(url);\n logger2.info(\"success\");\n }\n async revokeTokens(types) {\n const user = await this._loadUser();\n await this._revokeInternal(user, types);\n }\n async _revokeInternal(user, types = this.settings.revokeTokenTypes) {\n const logger2 = this._logger.create(\"_revokeInternal\");\n if (!user) return;\n const typesPresent = types.filter((type) => typeof user[type] === \"string\");\n if (!typesPresent.length) {\n logger2.debug(\"no need to revoke due to no token(s)\");\n return;\n }\n for (const type of typesPresent) {\n await this._client.revokeToken(\n user[type],\n type\n );\n logger2.info(`${type} revoked successfully`);\n if (type !== \"access_token\") {\n user[type] = null;\n }\n }\n await this.storeUser(user);\n logger2.debug(\"user stored\");\n await this._events.load(user);\n }\n /**\n * Enables silent renew for the `UserManager`.\n */\n startSilentRenew() {\n this._logger.create(\"startSilentRenew\");\n void this._silentRenewService.start();\n }\n /**\n * Disables silent renew for the `UserManager`.\n */\n stopSilentRenew() {\n this._silentRenewService.stop();\n }\n get _userStoreKey() {\n return `user:${this.settings.authority}:${this.settings.client_id}`;\n }\n async _loadUser() {\n const logger2 = this._logger.create(\"_loadUser\");\n const storageString = await this.settings.userStore.get(this._userStoreKey);\n if (storageString) {\n logger2.debug(\"user storageString loaded\");\n return User.fromStorageString(storageString);\n }\n logger2.debug(\"no user storageString\");\n return null;\n }\n async storeUser(user) {\n const logger2 = this._logger.create(\"storeUser\");\n if (user) {\n logger2.debug(\"storing user\");\n const storageString = user.toStorageString();\n await this.settings.userStore.set(this._userStoreKey, storageString);\n } else {\n this._logger.debug(\"removing user\");\n await this.settings.userStore.remove(this._userStoreKey);\n if (this.settings.dpop) {\n await this.settings.dpop.store.remove(this.settings.client_id);\n }\n }\n }\n /**\n * Removes stale state entries in storage for incomplete authorize requests.\n */\n async clearStaleState() {\n await this._client.clearStaleState();\n }\n /**\n * Dynamically generates a DPoP proof for a given user, URL and optional Http method.\n * This method is useful when you need to make a request to a resource server\n * with fetch or similar, and you need to include a DPoP proof in a DPoP header.\n * @param url - The URL to generate the DPoP proof for\n * @param user - The user to generate the DPoP proof for\n * @param httpMethod - Optional, defaults to \"GET\"\n * @param nonce - Optional nonce provided by the resource server\n *\n * @returns A promise containing the DPoP proof or undefined if DPoP is not enabled/no user is found.\n */\n async dpopProof(url, user, httpMethod, nonce) {\n var _a, _b;\n const dpopState = await ((_b = (_a = this.settings.dpop) == null ? void 0 : _a.store) == null ? void 0 : _b.get(this.settings.client_id));\n if (dpopState) {\n return await CryptoUtils.generateDPoPProof({\n url,\n accessToken: user == null ? void 0 : user.access_token,\n httpMethod,\n keyPair: dpopState.keys,\n nonce\n });\n }\n return void 0;\n }\n async generateDPoPJkt(dpopSettings) {\n let dpopState = await dpopSettings.store.get(this.settings.client_id);\n if (!dpopState) {\n const dpopKeys = await CryptoUtils.generateDPoPKeys();\n dpopState = new DPoPState(dpopKeys);\n await dpopSettings.store.set(this.settings.client_id, dpopState);\n }\n return await CryptoUtils.generateDPoPJkt(dpopState.keys);\n }\n};\n\n// package.json\nvar version = \"3.3.0\";\n\n// src/Version.ts\nvar Version = version;\n\n// src/IndexedDbDPoPStore.ts\nvar IndexedDbDPoPStore = class {\n constructor() {\n this._dbName = \"oidc\";\n this._storeName = \"dpop\";\n }\n async set(key, value) {\n const store = await this.createStore(this._dbName, this._storeName);\n await store(\"readwrite\", (str) => {\n str.put(value, key);\n return this.promisifyRequest(str.transaction);\n });\n }\n async get(key) {\n const store = await this.createStore(this._dbName, this._storeName);\n return await store(\"readonly\", (str) => {\n return this.promisifyRequest(str.get(key));\n });\n }\n async remove(key) {\n const item = await this.get(key);\n const store = await this.createStore(this._dbName, this._storeName);\n await store(\"readwrite\", (str) => {\n return this.promisifyRequest(str.delete(key));\n });\n return item;\n }\n async getAllKeys() {\n const store = await this.createStore(this._dbName, this._storeName);\n return await store(\"readonly\", (str) => {\n return this.promisifyRequest(str.getAllKeys());\n });\n }\n promisifyRequest(request) {\n return new Promise((resolve, reject) => {\n request.oncomplete = request.onsuccess = () => resolve(request.result);\n request.onabort = request.onerror = () => reject(request.error);\n });\n }\n async createStore(dbName, storeName) {\n const request = indexedDB.open(dbName);\n request.onupgradeneeded = () => request.result.createObjectStore(storeName);\n const db = await this.promisifyRequest(request);\n return async (txMode, callback) => {\n const tx = db.transaction(storeName, txMode);\n const store = tx.objectStore(storeName);\n return await callback(store);\n };\n }\n};\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n AccessTokenEvents,\n CheckSessionIFrame,\n DPoPState,\n ErrorResponse,\n ErrorTimeout,\n InMemoryWebStorage,\n IndexedDbDPoPStore,\n Log,\n Logger,\n MetadataService,\n OidcClient,\n OidcClientSettingsStore,\n SessionMonitor,\n SigninResponse,\n SigninState,\n SignoutResponse,\n State,\n User,\n UserManager,\n UserManagerSettingsStore,\n Version,\n WebStorageStateStore\n});\n//# sourceMappingURL=oidc-client-ts.js.map\n","/*!\n * set-value <https://github.com/jonschlinkert/set-value>\n *\n * Copyright (c) Jon Schlinkert (https://github.com/jonschlinkert).\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst { deleteProperty } = Reflect;\nconst isPrimitive = require('is-primitive');\nconst isPlainObject = require('is-plain-object');\n\nconst isObject = value => {\n return (typeof value === 'object' && value !== null) || typeof value === 'function';\n};\n\nconst isUnsafeKey = key => {\n return key === '__proto__' || key === 'constructor' || key === 'prototype';\n};\n\nconst validateKey = key => {\n if (!isPrimitive(key)) {\n throw new TypeError('Object keys must be strings or symbols');\n }\n\n if (isUnsafeKey(key)) {\n throw new Error(`Cannot set unsafe key: \"${key}\"`);\n }\n};\n\nconst toStringKey = input => {\n return Array.isArray(input) ? input.flat().map(String).join(',') : input;\n};\n\nconst createMemoKey = (input, options) => {\n if (typeof input !== 'string' || !options) return input;\n let key = input + ';';\n if (options.arrays !== undefined) key += `arrays=${options.arrays};`;\n if (options.separator !== undefined) key += `separator=${options.separator};`;\n if (options.split !== undefined) key += `split=${options.split};`;\n if (options.merge !== undefined) key += `merge=${options.merge};`;\n if (options.preservePaths !== undefined) key += `preservePaths=${options.preservePaths};`;\n return key;\n};\n\nconst memoize = (input, options, fn) => {\n const key = toStringKey(options ? createMemoKey(input, options) : input);\n validateKey(key);\n\n const value = setValue.cache.get(key) || fn();\n setValue.cache.set(key, value);\n return value;\n};\n\nconst splitString = (input, options = {}) => {\n const sep = options.separator || '.';\n const preserve = sep === '/' ? false : options.preservePaths;\n\n if (typeof input === 'string' && preserve !== false && /\\//.test(input)) {\n return [input];\n }\n\n const parts = [];\n let part = '';\n\n const push = part => {\n let number;\n if (part.trim() !== '' && Number.isInteger((number = Number(part)))) {\n parts.push(number);\n } else {\n parts.push(part);\n }\n };\n\n for (let i = 0; i < input.length; i++) {\n const value = input[i];\n\n if (value === '\\\\') {\n part += input[++i];\n continue;\n }\n\n if (value === sep) {\n push(part);\n part = '';\n continue;\n }\n\n part += value;\n }\n\n if (part) {\n push(part);\n }\n\n return parts;\n};\n\nconst split = (input, options) => {\n if (options && typeof options.split === 'function') return options.split(input);\n if (typeof input === 'symbol') return [input];\n if (Array.isArray(input)) return input;\n return memoize(input, options, () => splitString(input, options));\n};\n\nconst assignProp = (obj, prop, value, options) => {\n validateKey(prop);\n\n // Delete property when \"value\" is undefined\n if (value === undefined) {\n deleteProperty(obj, prop);\n\n } else if (options && options.merge) {\n const merge = options.merge === 'function' ? options.merge : Object.assign;\n\n // Only merge plain objects\n if (merge && isPlainObject(obj[prop]) && isPlainObject(value)) {\n obj[prop] = merge(obj[prop], value);\n } else {\n obj[prop] = value;\n }\n\n } else {\n obj[prop] = value;\n }\n\n return obj;\n};\n\nconst setValue = (target, path, value, options) => {\n if (!path || !isObject(target)) return target;\n\n const keys = split(path, options);\n let obj = target;\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const next = keys[i + 1];\n\n validateKey(key);\n\n if (next === undefined) {\n assignProp(obj, key, value, options);\n break;\n }\n\n if (typeof next === 'number' && !Array.isArray(obj[key])) {\n obj = obj[key] = [];\n continue;\n }\n\n if (!isObject(obj[key])) {\n obj[key] = {};\n }\n\n obj = obj[key];\n }\n\n return target;\n};\n\nsetValue.split = split;\nsetValue.cache = new Map();\nsetValue.clear = () => {\n setValue.cache = new Map();\n};\n\nmodule.exports = setValue;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","// eslint-disable-next-line import/no-cycle\nimport ClientServerBus from '../drivers/ws/client';\n\nexport default ClientServerBus;\n","import {\n io,\n ManagerOptions,\n Socket,\n SocketOptions,\n} from 'socket.io-client';\n\nexport default class ClientServerBus {\n subscriptions = {};\n\n connections = {};\n\n connectionsInEstablishment = {};\n\n isPaused: boolean = false;\n\n connectionInterruptedSubscribers: ((error?: any) => void)[] = [];\n\n messagesWhilePaused: { cb: (data: any) => any, data: any }[] = [];\n\n getBearerToken?: () => Promise<string | null>;\n\n constructor(getBearerToken?: () => Promise<string | null>) {\n this.getBearerToken = getBearerToken;\n }\n\n public subscribeConnectionInterrupted(sub: (error?: any) => void): void {\n this.connectionInterruptedSubscribers.push(sub);\n }\n\n public async subscribe(url: string, channel: string, readToken, handler: (data: any) => any)\n : Promise<[string, (data: any) => any]> {\n const parsedUrl: URL = new URL(url);\n const subId = `${parsedUrl.origin}-${channel}`;\n const connection = await this.ensureConnection(parsedUrl.origin);\n\n const subResult = await new Promise((resolve) => {\n connection.emit('subscribe', { channel, readToken }, resolve);\n }) as any;\n\n if (subResult.status === 'unauthorized') {\n throw new Error('unauthorized');\n }\n\n if (subResult.status !== 'subscribed') {\n throw new Error(`unknown error when subscribing to ${channel}`);\n }\n\n this.subscriptions[subId] = this.subscriptions[subId] || [];\n this.subscriptions[subId].push(handler);\n\n return [subId, handler];\n }\n\n public async send(url: string, channel: string, message: object) {\n const parsedUrl: URL = new URL(url);\n const connection = await this.ensureConnection(parsedUrl.origin);\n\n const sendResult = await new Promise((resolve) => {\n connection.emit('message', { channel, message }, resolve);\n }) as any;\n\n if (sendResult.status === 'unauthorized') {\n throw new Error('unauthorized');\n }\n\n if (sendResult.status !== 'delivered') {\n throw new Error(`unknown error when sending message to ${channel}`);\n }\n }\n\n public async unsubscribe([subId, handler]: [string, (data: any) => any]) {\n if (this.subscriptions[subId]) {\n this.subscriptions[subId] = this.subscriptions[subId].filter((h) => h !== handler);\n }\n }\n\n public unsubscribeAll() {\n Object.values(this.connections).forEach((connection: any) => {\n connection.close();\n });\n\n this.connections = {};\n }\n\n public pauseNotification() {\n this.isPaused = true;\n }\n\n public unpauseNotification() {\n this.messagesWhilePaused.forEach(({ cb, data }) => {\n cb(data);\n });\n\n this.messagesWhilePaused = [];\n }\n\n private async getWSAsync(url: URL): Promise<Socket<any, any>> {\n const opt: Partial<ManagerOptions & SocketOptions> = {\n withCredentials: true,\n path: url.pathname,\n transports: ['websocket'],\n };\n\n if (this.getBearerToken) {\n const token = await this.getBearerToken();\n\n if (token) {\n opt.auth = {\n token: `Bearer ${token}`,\n };\n }\n }\n\n return new Promise((resolve, reject) => {\n const socket = io(url.origin, opt);\n\n socket.on('connect', () => {\n resolve(socket);\n });\n\n socket.on('error', (error) => {\n console.log('==> websocket error', error);\n this.connectionInterruptedSubscribers.forEach((sub) => {\n sub(error);\n });\n });\n\n socket.on('disconnect', (reason) => {\n const willTryToReconnectReasons = ['ping timeout', 'transport close', 'transport error'];\n\n if (willTryToReconnectReasons.includes(reason)) {\n console.log('Connection disconnected. Socket.io will try to reconnect...');\n return;\n }\n\n this.connectionInterruptedSubscribers.forEach((sub) => {\n sub(new Error(`Websocket connection closed because: ${reason}`));\n });\n });\n\n socket.io.on('reconnect_error', (error) => {\n this.connectionInterruptedSubscribers.forEach((sub) => {\n console.log(`Websocket reconnect error: ${error}`);\n sub(new Error(`Websocket reconnect error: ${error}`));\n });\n });\n\n socket.io.on('reconnect_failed', () => {\n this.connectionInterruptedSubscribers.forEach((sub) => {\n console.log('Websocket reconnect failed!');\n sub(new Error('Websocket reconnect failed!'));\n });\n });\n\n socket.on('connect_error', reject);\n });\n }\n\n private async ensureConnection(origin) {\n const url = new URL(origin);\n url.pathname = '/ws';\n\n if (this.connectionsInEstablishment[url.origin]) {\n const connection = await this.connectionsInEstablishment[url.origin];\n return connection;\n }\n\n if (!this.connections[url.origin]) {\n this.connectionsInEstablishment[url.origin] = this.getWSAsync(url);\n this.connections[url.origin] = await this.connectionsInEstablishment[url.origin];\n\n this.connections[url.origin].on('data', (data) => {\n const { sseChannel } = data;\n\n if (!sseChannel) {\n return;\n }\n\n // eslint-disable-next-line no-param-reassign\n delete data.sseChannel;\n\n const subscriptions = this.subscriptions[`${url.origin}-${sseChannel}`];\n\n if (subscriptions) {\n subscriptions.forEach((cb) => {\n if (this.isPaused) {\n this.messagesWhilePaused.push({ cb, data });\n } else {\n cb(data);\n }\n });\n }\n });\n }\n\n return this.connections[origin];\n }\n}\n","export default function getAllPrefixes(arr: string[]): string[][] {\n const result: string[][] = [];\n const prefix: string[] = [];\n\n arr.forEach((item) => {\n prefix.push(item);\n result.push([...prefix]);\n });\n\n return result;\n}\n","export default function unset(obj, path) {\n const keys = path.split('.');\n let currentObj = obj;\n\n for (let i = 0; i < keys.length - 1; i += 1) {\n const key = keys[i];\n // eslint-disable-next-line no-prototype-builtins\n if (!currentObj.hasOwnProperty(key) || typeof currentObj[key] !== 'object') {\n // If the key doesn't exist or isn't an object, stop here.\n return;\n }\n currentObj = currentObj[key];\n }\n\n const lastKey = keys[keys.length - 1];\n // eslint-disable-next-line no-prototype-builtins\n if (currentObj.hasOwnProperty(lastKey)) {\n delete currentObj[lastKey];\n }\n}\n","/* eslint-disable import/no-cycle */\n/* eslint-disable class-methods-use-this */\n\nimport LinkedRecords from '../../browser_sdk/index';\nimport SerializedChangeWithMetadata from './serialized_change_with_metadata';\nimport IsSerializable from './is_serializable';\nimport ClientServerBus from '../../../lib/client-server-bus/client';\n\nexport default abstract class AbstractAttributeClient <Type, TypedChange extends IsSerializable > {\n linkedRecords: LinkedRecords;\n\n clientServerBus: ClientServerBus;\n\n id?: string;\n\n actorId: string | undefined;\n\n clientId: string;\n\n createdAt: Date | undefined;\n\n updatedAt: Date | undefined;\n\n serverURL: URL;\n\n observers: Function[];\n\n isInitialized: boolean;\n\n version: string; // TODO: should be number\n\n value: Type;\n\n attrSubscription?: [string, (data: any) => any] = undefined;\n\n readToken?: string;\n\n constructor(linkedRecords: LinkedRecords, clientServerBus: ClientServerBus, id?: string) {\n this.id = id;\n this.linkedRecords = linkedRecords;\n this.clientServerBus = clientServerBus;\n this.serverURL = linkedRecords.serverURL;\n this.createdAt = undefined;\n this.updatedAt = undefined;\n this.observers = [];\n\n // because the same user can be logged on two browsers/laptops, we need\n // a clientId and an actorId. Every attribute needs to have its own clientId.\n this.clientId = linkedRecords.getAttributeClientId();\n\n if (linkedRecords.actorId) {\n this.actorId = linkedRecords.actorId;\n } else {\n linkedRecords.ensureUserIdIsKnown().then((aId) => { this.actorId = aId; });\n }\n\n this.version = '0';\n this.value = this.getDefaultValue();\n this.isInitialized = false;\n }\n\n public static getDataTypeName() {\n throw new Error('getDataTypeName needs to be implemented in child class');\n }\n\n public static isAttributeId(id: string) {\n return id.split('-')[0] === this.prototype.getDataTypePrefix();\n }\n\n public abstract getDataTypePrefix();\n public abstract getDefaultValue() : Type;\n public abstract deserializeValue(serializedValue: string) : Promise<Type>;\n\n protected abstract rawSet(newValue: Type): void;\n protected abstract rawChange(delta: TypedChange): Promise<boolean>;\n protected abstract onServerMessage(payload: SerializedChangeWithMetadata<TypedChange>);\n protected abstract onLoad();\n\n public async create(value: Type, facts?: [ string?, string?, string? ][]) {\n if (this.id) {\n throw new Error(`Cannot create attribute because it has an id assigned (${this.id})`);\n }\n\n const requestConfig: any = {\n method: 'POST',\n body: await this.getCreatePayload(value, facts),\n };\n\n if (typeof requestConfig.body !== 'string') {\n requestConfig.isJSON = false;\n }\n\n const url = `/attributes?dtp=${this.getDataTypePrefix()}&clientId=${this.clientId}`;\n const response = await this.linkedRecords.fetch(url, requestConfig);\n\n if (!response) {\n return;\n }\n\n if (response.status !== 200) {\n throw new Error(`Error creating attribute: ${await response.text()}`);\n }\n\n const responseBody = await response.json();\n\n this.id = responseBody.id;\n\n if (!this.id || !this.id.trim()) {\n throw new Error('Unknown error occurred: The attribute was not assigned an ID by the server');\n }\n\n await this.load(responseBody);\n }\n\n public getId(): string {\n if (!this.id) {\n throw new Error('getId can not return the attribute id as id is undefined');\n }\n\n return this.id;\n }\n\n public getClientId(): string {\n if (!this.clientId) {\n throw new Error('clientId can not return the attribute id as id is undefined');\n }\n\n return this.clientId;\n }\n\n public getServerURL(): string {\n if (!this.serverURL) {\n throw new Error('serverURL can not return the attribute id as id is undefined');\n }\n\n return this.serverURL.toString();\n }\n\n public getDataURL() {\n const url = new URL(`/attributes/${this.id}?clientId=${this.clientId}&valueOnly=true`, this.linkedRecords.serverURL);\n return url.toString();\n }\n\n protected async getCreatePayload(\n value: Type,\n facts: [ string?, string?, string? ][] = [],\n ): Promise<string | FormData> {\n const actorId = await this.linkedRecords.ensureUserIdIsKnown();\n\n if (!actorId) {\n throw new Error('actorId is unknown, can not create payload!');\n }\n\n return JSON.stringify({\n clientId: this.clientId,\n actorId,\n facts,\n value,\n });\n }\n\n public async get() : Promise<{ value: Type, changeId: string, actorId: string } | undefined> {\n const isOk = await this.load();\n\n if (!isOk) {\n return undefined;\n }\n\n if (!this.actorId) {\n throw new Error('actorId is unknown, can not get attribute value!');\n }\n\n return {\n value: this.value,\n changeId: this.version,\n actorId: this.actorId,\n };\n }\n\n public async getValue() : Promise<Type | undefined> {\n const isOk = await this.load();\n\n if (!isOk) {\n return undefined;\n }\n\n return this.value;\n }\n\n public async set(newValue: Type) : Promise<void> {\n await this.load();\n\n if (newValue === this.value) {\n return;\n }\n\n await this.rawSet(newValue);\n }\n\n public async change(change: TypedChange) : Promise<boolean> {\n await this.load();\n return this.rawChange(change);\n }\n\n public async subscribe(observer: Function) {\n await this.load();\n this.observers.push(observer);\n }\n\n // TODO: when an attribute is unloaded it should be removed from the attribute cache\n public unload() {\n if (this.attrSubscription) {\n this.clientServerBus.unsubscribe(this.attrSubscription);\n }\n }\n\n public async load(serverState?: {\n changeId: string,\n value: string,\n createdAt: Date,\n updatedAt: Date,\n readToken?: string,\n }, forceReload: boolean = false): Promise<boolean> {\n let result = serverState;\n\n if (this.isInitialized && !forceReload) {\n return true;\n }\n\n if (!this.id) {\n throw new Error('cannot load an attribute without id');\n }\n\n if (!result) {\n const url = `/attributes/${this.id}?clientId=${this.clientId}`;\n const response = await this.linkedRecords.fetch(url);\n\n if (!response) {\n return false;\n }\n\n const jsonBody = await response.json();\n\n result = {\n changeId: jsonBody.changeId,\n value: jsonBody.value,\n createdAt: new Date(jsonBody.createdAt),\n updatedAt: new Date(jsonBody.updatedAt),\n };\n }\n\n const serializedValue = typeof result.value === 'string' ? result.value : JSON.stringify(result.value);\n\n if (!serializedValue && serializedValue !== '') {\n throw new Error('invalid server state');\n }\n\n this.version = result.changeId;\n this.value = await this.deserializeValue(serializedValue);\n this.createdAt = new Date(result.createdAt);\n this.updatedAt = new Date(result.updatedAt);\n this.readToken = result.readToken;\n this.isInitialized = true;\n this.onLoad();\n this.notifySubscribers(undefined, undefined);\n\n if (!this.attrSubscription) {\n const url = new URL(`/attributes/${this.id}/changes?clientId=${this.clientId}`, this.serverURL);\n const callback = (parsedData) => {\n if (parsedData.error === 'quota_violation') {\n this.linkedRecords.handleQuotaViolationError(parsedData);\n return;\n }\n\n if (parsedData.attributeId !== this.id) {\n return;\n }\n\n this.updatedAt = new Date(parsedData.updatedAt);\n\n this.onServerMessage(parsedData);\n };\n\n this.attrSubscription = await this.clientServerBus.subscribe(\n url.toString(),\n this.id,\n this.readToken,\n callback,\n );\n }\n\n return true;\n }\n\n protected async sendToServer(\n change: SerializedChangeWithMetadata<TypedChange>,\n ): Promise<boolean> {\n if (!this.id) {\n throw Error('cannot send message to server as attribute does not has an id');\n }\n\n try {\n await this.clientServerBus.send(this.serverURL.toString(), this.id, change);\n return true;\n } catch (ex: any) {\n if (ex.message && ex.message.match && ex.message.match(/unauthorized/)) {\n if (this.linkedRecords.authorizationErrorHandler) {\n this.linkedRecords.authorizationErrorHandler();\n } else {\n throw new Error('User is not allowed to perform operation');\n }\n } else {\n this.linkedRecords.handleConnectionError(ex);\n }\n\n return false;\n }\n }\n\n protected notifySubscribers(change?: TypedChange, fullChangeInfo?: { actorId: string }) {\n this.observers.forEach((callback) => {\n callback(change, fullChangeInfo);\n });\n }\n}\n","import IsSerializable from './is_serializable';\n\nexport default class SerializedChangeWithMetadata<Change extends IsSerializable> {\n public attributeId: string;\n\n public actorId: string;\n\n public clientId: string;\n\n public change: Change;\n\n public updatedAt: Date | undefined;\n\n constructor(\n attributeId: string,\n actorId: string,\n clientId: string,\n change: Change,\n updatedAt: Date | undefined = undefined,\n ) {\n this.attributeId = attributeId;\n this.actorId = actorId;\n this.clientId = clientId;\n this.change = change;\n this.updatedAt = updatedAt;\n }\n\n toJSON(): any {\n return {\n attributeId: this.attributeId,\n change: this.change.toJSON(),\n actorId: this.actorId,\n clientId: this.clientId,\n updatedAt: this.updatedAt,\n };\n }\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\n/* eslint-disable import/no-cycle */\n/* eslint-disable class-methods-use-this */\nimport AbstractAttributeClient from '../../abstract/abstract_attribute_client';\nimport SerializedChangeWithMetadata from '../../abstract/serialized_change_with_metadata';\nimport BlobChange from '../blob_change';\n\nexport default class BlobAttribute extends AbstractAttributeClient<Blob, BlobChange> {\n public static getDataTypePrefix() : string {\n return 'bl';\n }\n\n public static getDataTypeName() : string {\n return 'blob';\n }\n\n public getDataTypePrefix() : string {\n return BlobAttribute.getDataTypePrefix();\n }\n\n public getDataTypeName() : string {\n return BlobAttribute.getDataTypeName();\n }\n\n public getDefaultValue() : Blob {\n return new Blob();\n }\n\n public async deserializeValue(serializedValue: string) : Promise<Blob> {\n return new Blob([serializedValue]);\n }\n\n protected async getCreatePayload(value: Blob): Promise<string | FormData> {\n const actorId = await this.linkedRecords.ensureUserIdIsKnown();\n\n if (!actorId) {\n throw new Error('actorId is unknown, can not create blob payload!');\n }\n\n const formData = new FormData();\n formData.append('change', value, 'blob');\n formData.append('actorId', actorId);\n formData.append('clientId', this.clientId);\n\n return formData;\n }\n\n protected async rawSet(newValue: Blob) {\n this.value = newValue;\n this.transmitChange(this.value);\n }\n\n protected async rawChange(change: BlobChange): Promise<boolean> {\n this.value = change.value;\n return this.transmitChange(this.value);\n }\n\n protected onServerMessage(changeWithMetadata: SerializedChangeWithMetadata<BlobChange>) {\n if (changeWithMetadata.clientId !== this.clientId) {\n this.notifySubscribers(changeWithMetadata.change, changeWithMetadata);\n }\n }\n\n protected async transmitChange(value: Blob): Promise<boolean> {\n if (!this.id) {\n throw new Error('change can not be transmitted because attribute does not has an id');\n }\n\n if (!this.actorId) {\n throw new Error('actorId is unknown, can not transmit change!');\n }\n\n const formData = new FormData();\n const url = `/attributes/${this.id}?clientId=${this.clientId}&actorId=${this.actorId}`;\n\n formData.append('change', value, 'blob');\n formData.append('attributeId', this.id);\n formData.append('actorId', this.actorId);\n formData.append('clientId', this.clientId);\n\n const success = await this.linkedRecords.fetch(url, {\n method: 'PATCH',\n body: formData,\n isJSON: false,\n doNotHandleExpiredSessions: true,\n });\n\n return !!success;\n }\n\n protected onLoad() {}\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\n/* eslint-disable import/no-cycle */\n/* eslint-disable class-methods-use-this */\nimport flatten, { unflatten } from 'flat';\nimport get from 'get-value';\nimport AbstractAttributeClient from '../../abstract/abstract_attribute_client';\nimport SerializedChangeWithMetadata from '../../abstract/serialized_change_with_metadata';\nimport KeyValueChange, { AtomicChange } from '../key_value_change';\nimport getAllPrefixes from '../../../../lib/utils/all_prefixes';\n\nexport default class KeyValueAttribute extends AbstractAttributeClient<object, KeyValueChange> {\n public static getDataTypePrefix() : string {\n return 'kv';\n }\n\n public static getDataTypeName() : string {\n return 'keyValue';\n }\n\n public getDataTypePrefix() : string {\n return KeyValueAttribute.getDataTypePrefix();\n }\n\n public getDataTypeName() : string {\n return KeyValueAttribute.getDataTypeName();\n }\n\n public getDefaultValue() : object {\n return {};\n }\n\n public deserializeValue(serializedValue: string) : Promise<object> {\n return Promise.resolve(unflatten(JSON.parse(serializedValue)));\n }\n\n public async getValue() : Promise<object | undefined> {\n const isOk = await this.load();\n\n if (!isOk) {\n return undefined;\n }\n\n if (!this.value) {\n return this.value;\n }\n\n return JSON.parse(JSON.stringify(this.value));\n }\n\n public async patch(changes: Record<string, object | string | number | boolean | null >) {\n return this.change(new KeyValueChange(\n Object.entries(changes).map(([key, value]) => ({ key, value })),\n ));\n }\n\n protected async rawSet(newValue: object) {\n let changes: AtomicChange[] = [];\n const flatOldValue = flatten(this.value) as object;\n const flatValue = flatten(newValue) as object;\n\n Object.entries(flatOldValue).forEach(([key]) => {\n // in case keys are not present in newValue anymore,\n // we want to remove them from the key value store.\n // flatOldValue.split('.').\n getAllPrefixes(key.split('.')).forEach((path) => {\n changes.push({ key: path.join('.'), value: null });\n });\n });\n\n changes = changes.filter(({ key }) => (\n get(newValue, key) === null || get(newValue, key) === undefined));\n\n Object.entries(flatValue).forEach(([key, value]) => {\n // We transmit the key value pair only if it actually changed\n if (flatOldValue[key] !== value) {\n changes.push({ key, value });\n }\n });\n\n if (changes.length) {\n await this.change(new KeyValueChange(changes));\n }\n }\n\n protected async rawChange(change: KeyValueChange): Promise<boolean> {\n const actualChanges = change.change.filter(({ key, value }) => {\n if (!this.value[key] && value) {\n return true;\n }\n\n if (this.value[key] && !value) {\n return true;\n }\n\n return JSON.stringify(this.value[key]) !== JSON.stringify(value);\n });\n\n if (actualChanges.length === 0) {\n return true;\n }\n\n const success = await this.transmitChange(new KeyValueChange(actualChanges, this.version));\n\n if (success) {\n this.notifySubscribers(change);\n this.value = change.apply(this.value);\n }\n\n return success;\n }\n\n protected onLoad() {\n }\n\n protected onServerMessage(changeWithMetadata: SerializedChangeWithMetadata<KeyValueChange>) {\n const change = new KeyValueChange(\n changeWithMetadata.change as unknown as AtomicChange[],\n changeWithMetadata.change.changeId,\n );\n\n if (changeWithMetadata.clientId === this.clientId) {\n return;\n }\n\n this.value = change.apply(this.value);\n this.version = change.changeId;\n\n this.notifySubscribers(change, changeWithMetadata);\n }\n\n protected transmitChange(changeset: KeyValueChange): Promise<boolean> {\n if (!this.id) {\n throw new Error('change can not be transmitted because attribute does not has an id');\n }\n\n if (!this.actorId) {\n throw new Error('actorId is unknown, can not transmit change!');\n }\n\n return this.sendToServer(new SerializedChangeWithMetadata<KeyValueChange>(\n this.id,\n this.actorId,\n this.clientId,\n changeset,\n ));\n }\n}\n","import set from 'set-value';\nimport unset from '../../../lib/utils/unset';\n\nexport type AtomicChange = {\n key: string,\n value: object | string | boolean | number | null,\n};\n\nexport default class KeyValueChange {\n public changeId: string;\n\n public change: AtomicChange[];\n\n public static fromJSON(input: any, changeId?: string) {\n return new KeyValueChange(input as AtomicChange[], changeId);\n }\n\n public static fromString(input: string) : KeyValueChange {\n return new KeyValueChange(JSON.parse(input));\n }\n\n constructor(changeset: AtomicChange[], changeId?: string) {\n this.changeId = changeId ?? 'uncommitted';\n this.change = changeset;\n }\n\n public toString(): string {\n return JSON.stringify(this.change);\n }\n\n public toJSON(): object {\n return this.change;\n }\n\n public apply(input: object): object {\n const result = JSON.parse(JSON.stringify(input));\n\n if (!this.change.forEach) {\n return result;\n }\n\n this.change.forEach((aChange) => {\n if (aChange.value === null) {\n unset(result, aChange.key);\n } else {\n set(result, aChange.key, aChange.value);\n }\n });\n\n return result;\n }\n\n public merge(other: KeyValueChange): KeyValueChange {\n let mergedChanges: AtomicChange[] = [];\n\n this.change.forEach((ch) => {\n mergedChanges = mergedChanges.filter((x) => x.key !== ch.key);\n mergedChanges.push(ch);\n });\n\n other.change.forEach((ch) => {\n mergedChanges = mergedChanges.filter((x) => x.key !== ch.key);\n mergedChanges.push(ch);\n });\n\n return new KeyValueChange(mergedChanges);\n }\n}\n","import LongTextChange from '../long_text_change';\n\nexport default class ChangeBuffer {\n value?: LongTextChange;\n\n // this is the a2\n inFlightOp?: LongTextChange;\n\n init(inFlightOp: LongTextChange) {\n this.inFlightOp = inFlightOp;\n }\n\n add(changeset: LongTextChange): void {\n this.value = this.value ? this.value.merge(changeset) : changeset;\n }\n\n // this function returns a transformed version of the foreignChange which\n // fits into the current client state. This is required because the client\n // could have some changes which has not been send to the server yet. So, the\n // server don't know about these changes and the changes coming from the server\n // would not fit into the client state.\n transformAgainst(\n foreignChange: LongTextChange,\n ) : LongTextChange {\n if (!this.inFlightOp) {\n return foreignChange;\n }\n\n const c2 = foreignChange.transformAgainst(this.inFlightOp, true);\n this.inFlightOp = this.inFlightOp?.transformAgainst(foreignChange, false);\n\n if (!this.value) return c2;\n\n // transform the foreignChange (change from server) into the client state.\n const c1 = c2.transformAgainst(this.value, true);\n\n // \"Once we have this inferred operation, c2, we can use it\n // to transform the buffer (b) \"down\" one step\"\n this.value = this.value?.transformAgainst(c2, false);\n\n return c1;\n }\n\n // TODO: Why does it not work to use the bridge to transform server changes?\n get bridge(): LongTextChange | undefined {\n if (!this.inFlightOp) {\n return undefined;\n }\n\n if (!this.value) {\n return this.inFlightOp;\n }\n\n return this.inFlightOp.merge(this.value);\n }\n\n clear() {\n this.value = undefined;\n this.inFlightOp = undefined;\n }\n\n getValue(): LongTextChange | undefined {\n return this.value;\n }\n}\n","/* eslint-disable import/no-cycle */\n/* eslint-disable class-methods-use-this */\n\nimport AbstractAttributeClient from '../../abstract/abstract_attribute_client';\nimport SerializedChangeWithMetadata from '../../abstract/serialized_change_with_metadata';\nimport LongTextChange from '../long_text_change';\nimport ChangeBuffer from './buffer';\n\nexport default class LongTextAttribute extends AbstractAttributeClient<string, LongTextChange> {\n buffer: ChangeBuffer = new ChangeBuffer();\n\n changeInTransmission?: SerializedChangeWithMetadata<LongTextChange> = undefined;\n\n changeInTransmissionSendAt?: Date = undefined;\n\n public static serverApprovalTimeoutInMS: number = 2500;\n\n public static getDataTypePrefix() : string {\n return 'l';\n }\n\n public static getDataTypeName() : string {\n return 'longText';\n }\n\n public getDataTypePrefix() : string {\n return 'l';\n }\n\n public getDataTypeName() : string {\n return LongTextAttribute.getDataTypeName();\n }\n\n public getDefaultValue() : string {\n return '';\n }\n\n public deserializeValue(serializedValue: string) : Promise<string> {\n return Promise.resolve(serializedValue);\n }\n\n protected async rawSet(newValue: string) {\n const changeset = LongTextChange.fromDiff(this.value, newValue);\n\n await this.change(changeset);\n }\n\n protected async rawChange(changeset: LongTextChange): Promise<boolean> {\n // TODO: Check for version is valid\n // if (this.version === '0') {\n // throw Error('Cannot change attribute as attributed state is not loaded from server!');\n // }\n\n this.value = changeset.apply(this.value);\n\n if (this.changeInTransmission) {\n if (\n this.getLastChangeTransmittedMillisecondsAgo() > LongTextAttribute.serverApprovalTimeoutInMS\n ) {\n this.linkedRecords.handleConnectionError(new Error(`No approval received from server after ${LongTextAttribute.serverApprovalTimeoutInMS} ms`));\n }\n\n this.buffer.add(changeset);\n } else {\n const success = await this.transmitChange(\n new LongTextChange(changeset.changeset, this.version),\n );\n\n if (!success) {\n return false;\n }\n }\n\n this.notifySubscribers(changeset);\n\n return true;\n }\n\n protected getLastChangeTransmittedMillisecondsAgo(): number {\n if (!this.changeInTransmissionSendAt) {\n return -1;\n }\n\n return (new Date()).getTime() - this.changeInTransmissionSendAt.getTime();\n }\n\n protected onLoad() {\n this.changeInTransmission = undefined;\n this.changeInTransmissionSendAt = undefined;\n this.buffer.clear();\n }\n\n protected onServerMessage(changeWithMetadata: SerializedChangeWithMetadata<LongTextChange>) {\n if (changeWithMetadata.clientId === this.clientId) {\n this.processApproval(changeWithMetadata);\n } else {\n this.processForeignChange(changeWithMetadata);\n }\n }\n\n private processForeignChange(\n foreignChangeWithMetadata: SerializedChangeWithMetadata<LongTextChange>,\n ) {\n let transformedForeignChange;\n let foreignChangeset;\n\n try {\n foreignChangeset = LongTextChange.fromString(\n foreignChangeWithMetadata.change.changeset,\n );\n\n transformedForeignChange = this.buffer.transformAgainst(\n foreignChangeset,\n );\n\n this.value = transformedForeignChange.apply(this.value);\n this.version = foreignChangeWithMetadata.change.changeId;\n this.notifySubscribers(transformedForeignChange, foreignChangeWithMetadata);\n } catch (ex) {\n // eslint-disable-next-line no-console\n console.log(this.value);\n // eslint-disable-next-line no-console\n console.log(transformedForeignChange?.changeset?.inspect());\n // eslint-disable-next-line no-console\n console.log('ERROR: processing foreign change failed (probably because of a previous message loss). Reload server state to recover.', ex);\n this.buffer.clear();\n this.load(undefined, true);\n }\n }\n\n private processApproval(approval: SerializedChangeWithMetadata<LongTextChange>) {\n const bufferedChanges = this.buffer.getValue();\n this.changeInTransmission = undefined;\n this.changeInTransmissionSendAt = undefined;\n this.version = approval.change.changeId;\n this.buffer.clear();\n\n if (bufferedChanges) {\n this.transmitChange(new LongTextChange(bufferedChanges.changeset, approval.change.changeId));\n }\n }\n\n protected transmitChange(changeset: LongTextChange): Promise<boolean> {\n if (!this.id) {\n throw new Error('change can not be transmitted because attribute does not has an id');\n }\n\n if (!this.actorId) {\n throw new Error('actorId is unknown, can not transmit change!');\n }\n\n this.changeInTransmissionSendAt = new Date();\n this.changeInTransmission = new SerializedChangeWithMetadata<LongTextChange>(\n this.id,\n this.actorId,\n this.clientId,\n changeset,\n );\n\n this.buffer.init(changeset);\n\n return this.sendToServer(this.changeInTransmission);\n }\n}\n","import { Changeset } from 'changesets';\nimport { diff_match_patch as DiffMatchPatch } from 'diff_match_patch';\n\nconst diffEngine = new DiffMatchPatch();\n\nexport default class LongTextChange {\n public changeset;\n\n public changeId: string;\n\n constructor(changeset, changeId?: string) {\n this.changeset = changeset;\n this.changeId = changeId ?? 'uncommitted';\n }\n\n public static fromString(change: string): LongTextChange {\n return new LongTextChange(Changeset.unpack(change));\n }\n\n public static fromDiff(a: string, b: string): LongTextChange {\n return new LongTextChange(Changeset.fromDiff(diffEngine.diff_main(a, b)));\n }\n\n public apply(value: string): string {\n return this.changeset.apply(value);\n }\n\n public toString(): string {\n return typeof this.changeset === 'string'\n ? this.changeset\n : this.changeset.pack();\n }\n\n public transformAgainst(change: LongTextChange | null, side?) : LongTextChange {\n if (!change) {\n return this;\n }\n\n return new LongTextChange(this.changeset.transformAgainst(change.changeset, side));\n }\n\n public merge(otherChange: LongTextChange) : LongTextChange {\n return new LongTextChange(this.changeset.merge(otherChange.changeset));\n }\n\n public toJSON() {\n return {\n changeset: this.toString(),\n changeId: this.changeId,\n };\n }\n}\n","// eslint-disable-next-line import/no-cycle\nimport LinkedRecords from '../../browser_sdk';\n\nexport default class Fact {\n linkedRecords: LinkedRecords;\n\n subject: string;\n\n predicate: string;\n\n object: string;\n\n constructor(linkedRecords: LinkedRecords, subject: string, predicate: string, object: string) {\n this.linkedRecords = linkedRecords;\n this.subject = subject;\n this.predicate = predicate;\n this.object = object;\n }\n\n toJSON() {\n return {\n subject: this.subject,\n predicate: this.predicate,\n object: this.object,\n };\n }\n\n async save() {\n await this.linkedRecords.fetch('/facts', {\n method: 'POST',\n body: JSON.stringify({\n subject: this.subject,\n predicate: this.predicate,\n object: this.object,\n }),\n });\n }\n}\n","/* eslint-disable max-len */\n/* eslint-disable import/no-cycle */\nimport LinkedRecords from '.';\nimport AbstractAttributeClient from '../attributes/abstract/abstract_attribute_client';\nimport IsSerializable from '../attributes/abstract/is_serializable';\nimport LongTextAttribute from '../attributes/long_text/client';\nimport KeyValueAttribute from '../attributes/key_value/client';\nimport BlobAttribute from '../attributes/blob/client';\nimport { CompoundAttributeQuery, FactQueryWithOptionalSubjectPlaceholder } from '../attributes/attribute_query';\nimport ClientServerBus from '../../lib/client-server-bus/client';\n\ntype ArrayContains<T, U> = T extends Array<infer E>\n ? Extract<E, U> extends never\n ? T & Array<U>\n : T\n : never;\n\ntype ConcreteTypedArray<X> =\n X extends ArrayContains<X, [string, string, typeof KeyValueAttribute] | [string, typeof KeyValueAttribute]> ? Array<KeyValueAttribute> :\n X extends ArrayContains<X, [string, string, typeof LongTextAttribute] | [string, typeof LongTextAttribute]> ? Array<LongTextAttribute> :\n X extends ArrayContains<X, [string, string, typeof BlobAttribute] | [string, typeof BlobAttribute]> ? Array<BlobAttribute> :\n Array<AbstractAttributeClient<any, any>>;\n\ntype TransformQueryRecord<X>\n = X extends Array<FactQueryWithOptionalSubjectPlaceholder> ? ConcreteTypedArray<X> : AbstractAttributeClient<any, any>;\n\ntype TransformCompositionCreationResult<X extends { type?: typeof AbstractAttributeClient<any, IsSerializable> | string }> =\n X['type'] extends typeof KeyValueAttribute ? KeyValueAttribute :\n X['type'] extends typeof LongTextAttribute ? LongTextAttribute :\n X['type'] extends typeof BlobAttribute ? BlobAttribute :\n X['type'] extends string ? AbstractAttributeClient<any, IsSerializable> :\n KeyValueAttribute;\n\ntype QueryResult<T> = { [K in keyof T]: TransformQueryRecord<T[K]> };\n\nexport type CompositionCreationRequest = {\n [k: string]: {\n type?: typeof AbstractAttributeClient<any, IsSerializable> | string,\n facts?: [string, string, string?][] | undefined,\n value?: any,\n }\n};\n\nconst stringify = (query) => JSON.stringify(query, (_, v) => {\n if (v === KeyValueAttribute) {\n return 'KeyValueAttribute';\n }\n\n if (v === LongTextAttribute) {\n return 'LongTextAttribute';\n }\n\n if (v === BlobAttribute) {\n return 'BlobAttribute';\n }\n\n return v;\n});\n\nconst byId = (a, b) => {\n if (a.id < b.id) return -1;\n if (a.id > b.id) return 1;\n return 0;\n};\n\nexport default class AttributesRepository {\n private linkedRecords: LinkedRecords;\n\n private getClientServerBus: () => Promise<ClientServerBus>;\n\n private attributeCache: Record<string, AbstractAttributeClient<any, any>>;\n\n static attributeTypes = [\n LongTextAttribute,\n KeyValueAttribute,\n BlobAttribute,\n ];\n\n constructor(linkedRecords: LinkedRecords, getClientServerBus: () => Promise<ClientServerBus>) {\n this.linkedRecords = linkedRecords;\n this.getClientServerBus = getClientServerBus;\n this.attributeCache = {};\n }\n\n // TODO: we should cache this\n private async idToAttribute(id, ignoreCache: boolean = false, serverState?): Promise<AbstractAttributeClient<any, any> | undefined> {\n const [attributeTypePrefix] = id.split('-');\n const AttributeClass = AttributesRepository\n .attributeTypes\n .find((c) => c.getDataTypePrefix() === attributeTypePrefix);\n\n if (!AttributeClass) {\n return undefined;\n }\n\n if (this.attributeCache[id] && !ignoreCache) {\n return this.attributeCache[id];\n }\n\n const attr = new AttributeClass(this.linkedRecords, await this.getClientServerBus(), id);\n\n if (serverState) {\n await attr.load(serverState);\n }\n\n this.attributeCache[id] = attr;\n\n return attr;\n }\n\n async createKeyValue(\n value?: object,\n facts?: [ string, string, string?][],\n ): Promise<KeyValueAttribute> {\n const attr = await this.create('keyValue', value || {}, facts);\n return attr as KeyValueAttribute;\n }\n\n async createLongText(\n value?: string,\n facts?: [ string, string, string? ][],\n ): Promise<LongTextAttribute> {\n const attr = await this.create('longText', value || '', facts);\n return attr as LongTextAttribute;\n }\n\n async createBlob(\n value?: Blob,\n facts?: [ string, string, string? ][],\n ): Promise<BlobAttribute> {\n const attr = await this.create('blob', value || '', facts);\n return attr as BlobAttribute;\n }\n\n async create(attributeType: string, value: any, facts?: [ string, string, string? ][])\n :Promise<AbstractAttributeClient<any, IsSerializable>> {\n const AttributeClass = AttributesRepository\n .attributeTypes\n .find((c) => c.getDataTypeName() === attributeType);\n\n if (!AttributeClass) {\n throw new Error(`Attribute Type ${attributeType} is unknown`);\n }\n\n const attribute: AbstractAttributeClient<any, IsSerializable> = new AttributeClass(\n this.linkedRecords,\n await this.getClientServerBus(),\n );\n\n await attribute.create(value, facts);\n\n return attribute;\n }\n\n async createAll<CCR extends CompositionCreationRequest>(attr: CCR)\n : Promise<{\n [K in keyof CCR]: TransformCompositionCreationResult<CCR[K]>\n }> {\n const url = `/attribute-compositions?clientId=${this.linkedRecords.clientId}`;\n\n const rawResult = await this.linkedRecords.fetch(url, {\n method: 'POST',\n body: stringify(attr),\n });\n\n if (!rawResult) {\n throw new Error('error creating attribute composition');\n }\n\n const resultBody = await rawResult.json();\n\n const result: { [key: string]: AbstractAttributeClient<any, any> } = {};\n\n await Promise.all(Object.entries(resultBody).map(async ([attrName, config]: [string, any]) => {\n if (config.id) {\n const tmpResult = await this.idToAttribute(config.id!, false, config);\n\n if (!tmpResult) {\n throw new Error(`Error transforming id to attribute: ${config.id}`);\n }\n\n result[attrName] = tmpResult;\n }\n }));\n\n // @ts-ignore I don't know how to make him happy here.\n return result;\n }\n\n async find(attributeId: string, ignoreCache: boolean = false)\n :Promise<AbstractAttributeClient<any, IsSerializable> | undefined> {\n const attribute = await this.idToAttribute(attributeId, ignoreCache);\n\n if (!attribute) {\n throw new Error(`Attribute ID ${attributeId} is unknown`);\n }\n\n const isOk = await attribute.get();\n\n if (!isOk) {\n return undefined;\n }\n\n return attribute;\n }\n\n // TODO: check for null values in the query\n async findAll<T extends CompoundAttributeQuery>(\n query: T,\n ignoreCache: boolean = false,\n ): Promise<QueryResult<T>> {\n const params = new URLSearchParams();\n\n params.append('query', stringify(query));\n\n const result = await this.linkedRecords.fetch(`/attributes?${params.toString()}`);\n const records = await result.json();\n\n const attributeResult = {} as any;\n\n await Promise.all(Object.keys(records).map(async (key) => {\n if (Array.isArray(records[key])) {\n attributeResult[key] = (await Promise.all(records[key].map((attr) => this.idToAttribute(attr.id, ignoreCache, attr)))).sort(byId);\n } else if (records[key]) {\n attributeResult[key] = await this.idToAttribute(records[key].id, ignoreCache, records[key]);\n } else {\n attributeResult[key] = null;\n }\n }));\n\n return attributeResult;\n }\n\n async findAndLoadAll<T extends CompoundAttributeQuery>(query: T): Promise<QueryResult<T>> {\n const result = await this.findAll(query);\n const promises: Promise<boolean>[] = [];\n\n Object.keys(result).forEach((compoundName) => {\n if (result[compoundName]) {\n if (Array.isArray(result[compoundName])) {\n (result[compoundName] as Array<AbstractAttributeClient<any, any>>).forEach((attr) => {\n promises.push(attr.load());\n });\n } else {\n promises.push((result[compoundName] as AbstractAttributeClient<any, any>).load());\n }\n }\n });\n\n await Promise.all(promises);\n\n return result;\n }\n\n async subscribeToQuery<T extends CompoundAttributeQuery>(query: T, onChange: (result: QueryResult<T>) => void): Promise<() => void> {\n if (!this.linkedRecords.actorId) {\n throw new Error('Not ready to subscribe to queries yet: this.linkedRecords.actorId is not initialized');\n }\n\n const bus = await this.getClientServerBus();\n const url = new URL('query-sub', this.linkedRecords.serverURL).toString();\n const channel = `query-sub:${this.linkedRecords.actorId}:${stringify(query)}`;\n\n const onPossibleChange = () => {\n this.findAndLoadAll(query).then(onChange);\n };\n\n const subscription = await bus.subscribe(url, channel, undefined, onPossibleChange);\n\n onPossibleChange();\n\n return () => {\n bus.unsubscribe(subscription);\n };\n }\n\n clearCache() {\n this.attributeCache = {};\n }\n}\n","/* eslint-disable import/no-cycle */\n\nimport LinkedRecords from '.';\nimport Fact from '../facts/client';\nimport { FactQuery } from '../facts/fact_query';\n\nexport default class FactsRepository {\n linkedRecords: LinkedRecords;\n\n constructor(linkedRecords: LinkedRecords) {\n this.linkedRecords = linkedRecords;\n }\n\n async createAll(facts: [ string?, string?, string? ][]):\n Promise<Fact[]> {\n const response = await this.linkedRecords.fetch('/facts', {\n method: 'POST',\n body: JSON.stringify(facts),\n });\n\n if (!response) {\n return [];\n }\n\n const createdRawFacts = await response.json();\n\n return createdRawFacts.map((rawFact) => new Fact(\n this.linkedRecords,\n rawFact.subject,\n rawFact.predicate,\n rawFact.object,\n ));\n }\n\n async findAll(query: FactQuery | FactQuery[]): Promise<Fact[]> {\n if (Array.isArray(query)) {\n const result = await Promise.all(query.map((fq) => this.findAll(fq)));\n return result.flat();\n }\n\n const { subject, predicate, object } = query;\n\n const params = new URLSearchParams();\n\n if (subject) {\n params.append('subject', JSON.stringify(subject));\n }\n\n if (predicate) {\n params.append('predicate', JSON.stringify(predicate));\n }\n\n if (object) {\n params.append('object', JSON.stringify(object));\n }\n\n const response = await this.linkedRecords.fetch(`/facts?${params.toString()}`);\n const responseJson = await response.json();\n\n return responseJson.map((record) => new Fact(\n this.linkedRecords,\n record.subject,\n record.predicate,\n record.object,\n ));\n }\n\n async deleteAll(facts: [ string, string, string ][]): Promise<void> {\n await this.linkedRecords.fetch('/facts/delete', {\n method: 'POST',\n body: JSON.stringify(facts),\n });\n }\n}\n","/* eslint-disable class-methods-use-this */\n/* eslint-disable import/no-cycle */\n\nimport { uuidv7 as uuid } from 'uuidv7';\n\nimport LongTextAttribute from '../attributes/long_text/client';\nimport KeyValueAttribute from '../attributes/key_value/client';\nimport KeyValueChange from '../attributes/key_value/key_value_change';\nimport LongTextChange from '../attributes/long_text/long_text_change';\nimport ClientServerBus from '../../lib/client-server-bus/client';\nimport FactsRepository from './facts_repository';\nimport AttributesRepository from './attributes_repository';\nimport { QuotaAsJSON } from '../server/quota';\nimport { OIDCManager, OIDCConfig } from './oidc';\n\ntype FetchOptions = {\n headers?: object | undefined,\n method?: string,\n body?: any,\n isJSON?: boolean,\n doNotHandleExpiredSessions?: boolean,\n skipWaitForUserId?: boolean,\n};\n\nexport {\n LongTextAttribute,\n KeyValueAttribute,\n KeyValueChange,\n LongTextChange,\n};\n\nconst publicClients: Record<string, LinkedRecords> = {};\n\nexport default class LinkedRecords {\n static fetchUserInfoPromise;\n\n KeyValueChange: typeof KeyValueChange = KeyValueChange;\n\n private clientServerBus: ClientServerBus;\n\n serverURL: URL;\n\n loginHandler?: () => void;\n\n connectionLostHandler?: (err?) => void;\n\n unknownServerErrorHandler?: (response) => void;\n\n quotaViolationErrorHandler?: (response) => void;\n\n authorizationErrorHandler?: (response?) => void;\n\n attributeClientIdSuffix: number = 0;\n\n clientId: string;\n\n actorId: string | undefined;\n\n Attribute: AttributesRepository;\n\n Fact: FactsRepository;\n\n private oidcManager?: OIDCManager;\n\n private qetQuotaPromise: Record<string, Promise<any | undefined>> = {};\n\n static getPublicClient(url: string): LinkedRecords {\n const normalizedUrl = new URL(url).toString().replace(/\\/$/, '');\n const cached = publicClients[normalizedUrl];\n if (cached !== undefined) {\n return cached;\n }\n\n const oidcConfig = {\n redirect_uri: `${window.location.origin}/callback`,\n };\n\n const linkedRecords: LinkedRecords = new LinkedRecords(new URL(url), oidcConfig);\n\n linkedRecords.setConnectionLostHandler((error: any) => {\n console.error('linkedRecords connection lost error:', error);\n });\n\n linkedRecords.setUnknownServerErrorHandler(() => {\n console.error('server error');\n });\n\n linkedRecords.setLoginHandler(() => {\n const needsVerification = window.location.search.includes('email-not-verified');\n\n if (needsVerification) {\n console.log('the user must verify its email address.');\n } else {\n linkedRecords.login();\n }\n\n console.log('login required, set a login handler which prompts the user to login via linkedRecords.setLoginHandler');\n });\n\n publicClients[normalizedUrl] = linkedRecords;\n return linkedRecords;\n }\n\n constructor(\n serverURL: URL,\n oidcConfig?: OIDCConfig,\n autoHandleRedirect = true,\n deferUserInfoFetching = false,\n ) {\n this.serverURL = serverURL;\n\n if (oidcConfig) {\n this.oidcManager = new OIDCManager(oidcConfig, serverURL);\n }\n\n this.clientServerBus = new ClientServerBus(() => this.getAccessToken());\n\n this.clientServerBus.subscribeConnectionInterrupted(() => {\n if (this.connectionLostHandler) {\n this.connectionLostHandler();\n }\n });\n\n this.Attribute = new AttributesRepository(this, () => this.getClientServerBus());\n this.clientId = uuid();\n this.Fact = new FactsRepository(this);\n\n if (!deferUserInfoFetching) {\n this.ensureUserIdIsKnown();\n }\n\n if (this.oidcManager) {\n if (\n autoHandleRedirect\n && typeof window !== 'undefined'\n && window.location\n && window.location.search\n ) {\n const params = new URLSearchParams(window.location.search);\n if (params.has('code') && params.has('state')) {\n this.oidcManager\n .handleRedirectCallback()\n .then(() => {\n // Clean up the URL after handling the callback\n // Remove OIDC parameters from the URL\n // for a cleaner user experience\n window.history.replaceState(\n {},\n document.title,\n window.location.pathname,\n );\n });\n }\n }\n }\n }\n\n public getAttributeClientId(): string {\n this.attributeClientIdSuffix += 1;\n return `${this.clientId}-${this.attributeClientIdSuffix}`;\n }\n\n public async getClientServerBus(): Promise<ClientServerBus> {\n return this.clientServerBus;\n }\n\n public async getUserIdByEmail(email: string): Promise<string | undefined> {\n const resp = await this.fetch(`/userinfo?email=${encodeURIComponent(email)}`);\n const parsed = await resp.json();\n return parsed.id;\n }\n\n public async isAuthorizedToSeeMemberOf(nodeId: string):Promise<boolean> {\n const response = await this.fetch(`/attributes/${nodeId}/members?clientId=${this.clientId}`, { doNotHandleExpiredSessions: true });\n return !!response;\n }\n\n public async getMembersOf(nodeId: string): Promise<{ id: string, username: string }[]> {\n const response = await this.fetch(`/attributes/${nodeId}/members?clientId=${this.clientId}`);\n\n if (!response) {\n // TODO: remove this check once the this.fetch throws an exception\n throw new Error(`Unauthorized member query for ${nodeId}`);\n }\n\n const data = await response.json();\n\n if (data.notVisibleToUser) {\n throw new Error(`Unauthorized member query for ${nodeId}`);\n }\n\n return data;\n }\n\n public async getQuota(nodeId?: string): Promise<QuotaAsJSON> {\n if (this.qetQuotaPromise[nodeId || '']) {\n return this.qetQuotaPromise[nodeId || ''];\n }\n\n this.qetQuotaPromise[nodeId || ''] = this.ensureUserIdIsKnown()\n .then((uId) => this.fetch(`/quota/${nodeId || uId}`))\n .then((r) => r.json());\n\n const result = await this.qetQuotaPromise[nodeId || ''];\n delete this.qetQuotaPromise[nodeId || ''];\n\n return result;\n }\n\n public async fetch(url: string, fetchOpt?: FetchOptions) {\n const isOnRedirectUriRoute = await this.oidcManager?.isOnRedirectUriRoute();\n\n const {\n headers = undefined,\n method = 'GET',\n body = undefined,\n isJSON = true,\n doNotHandleExpiredSessions = false,\n skipWaitForUserId = false,\n } = fetchOpt || {};\n\n if (isOnRedirectUriRoute) {\n // We are on the OIDC redirect URI: delay requests briefly to avoid\n // triggering the login flow again while the session is being established.\n await new Promise((resolve) => { setTimeout(resolve, 2000); });\n }\n\n if (!skipWaitForUserId) {\n await this.ensureUserIdIsKnown();\n }\n\n const absoluteUrl = (new URL(url, this.serverURL)).toString();\n const options: any = {\n method,\n credentials: 'include',\n };\n\n const mergedHeaders: Record<string, string> = headers\n ? { ...(headers as Record<string, string>) }\n : {};\n\n // If OIDC is enabled and access token is available, use Bearer token\n if (this.oidcManager) {\n const accessToken = await this.oidcManager.getAccessToken();\n\n // FIXME: if we do not hav a token but still are in public client mode,\n // the userInfo request will fail because of CORS which tries to send\n // cookies to the domain\n if (accessToken) {\n mergedHeaders['Authorization'] = `Bearer ${accessToken}`;\n // For cross-origin, do not send cookies if using Bearer\n options.credentials = 'same-origin';\n }\n }\n\n if (body) {\n options.body = body;\n }\n\n if (Object.keys(mergedHeaders).length > 0) {\n options.headers = mergedHeaders;\n }\n\n if (isJSON) {\n if (!options.headers) {\n options.headers = {};\n }\n options.headers.Accept = 'application/json';\n options.headers['Content-Type'] = 'application/json';\n }\n\n const response = await this.withConnectionLostHandler(() => fetch(absoluteUrl, options));\n\n if (response.status === 401) {\n console.error(`Authentication Error when calling ${method} ${url} ${await response.text()}`);\n\n if (!doNotHandleExpiredSessions) {\n this.handleExpiredLoginSession();\n }\n\n return false;\n }\n\n if (response.status === 403) {\n const clonedResponse = response.clone();\n const responseText = await clonedResponse.text();\n\n if (responseText.startsWith('Not enough storage space')) {\n this.handleQuotaViolationError(response);\n } else {\n this.handleAuthorizationError(response);\n }\n\n return false;\n }\n\n if (!response.ok) {\n this.handleUnknownServerError(response);\n return false;\n }\n\n return response;\n }\n\n public async withConnectionLostHandler(fn: () => Promise<any>) {\n try {\n return await fn();\n } catch (ex: any) {\n if (ex.message === 'Failed to fetch') {\n this.handleConnectionError(ex);\n }\n\n return false;\n }\n }\n\n public setConnectionLostHandler(handler: (err?) => void) {\n this.connectionLostHandler = handler;\n }\n\n public handleConnectionError(error) {\n if (this.connectionLostHandler) {\n this.connectionLostHandler(error);\n } else {\n console.log('Connection Lost', error);\n }\n }\n\n public setLoginHandler(handler: () => void) {\n this.loginHandler = handler;\n }\n\n public handleExpiredLoginSession() {\n if (this.loginHandler) {\n this.loginHandler();\n }\n }\n\n public setUnknownServerErrorHandler(handler: (response) => void) {\n this.unknownServerErrorHandler = handler;\n }\n\n public handleUnknownServerError(response) {\n if (this.unknownServerErrorHandler) {\n this.unknownServerErrorHandler(response);\n } else {\n console.log('UnknownServerError', response);\n }\n }\n\n public setQuotaViolationErrorHandler(handler: (response) => void) {\n this.quotaViolationErrorHandler = handler;\n }\n\n public handleQuotaViolationError(response) {\n if (this.quotaViolationErrorHandler) {\n this.quotaViolationErrorHandler(response);\n } else {\n this.handleUnknownServerError(response);\n }\n }\n\n public setAuthorizationErrorHandler(handler: (response) => void) {\n this.authorizationErrorHandler = handler;\n }\n\n public handleAuthorizationError(response?) {\n if (this.authorizationErrorHandler) {\n this.authorizationErrorHandler(response);\n } else {\n throw new Error('User is not allowed to perform operation');\n }\n }\n\n async fetchUserInfo(): Promise<Record<string, string> | undefined> {\n if (!LinkedRecords.fetchUserInfoPromise) {\n LinkedRecords.fetchUserInfoPromise = this.fetch('/userinfo', { skipWaitForUserId: true })\n .then(async (response) => {\n if (!response || response.status === 401) {\n this.handleExpiredLoginSession();\n return undefined;\n }\n\n const responseBody = await response.json();\n return responseBody;\n });\n }\n\n try {\n const ui = await LinkedRecords.fetchUserInfoPromise;\n return ui;\n } finally {\n // we only cached this so we have one request in flight at the same time\n // once the request is done we delete it so next time this method is called\n // we fetch up to date information\n LinkedRecords.fetchUserInfoPromise = undefined;\n }\n }\n\n async ensureUserIdIsKnown(): Promise<string | undefined> {\n if (this.actorId && typeof this.actorId === 'string') {\n return this.actorId;\n }\n\n const userInfo = await this.fetchUserInfo();\n\n if (!userInfo) {\n return undefined;\n }\n\n this.actorId = userInfo['userId'];\n\n return this.actorId;\n }\n\n public async getCurrentUserEmail(): Promise<string> {\n const userInfo = await this.fetchUserInfo();\n\n if (!userInfo || !userInfo['userEmail']) {\n throw new Error('Error fetching user info');\n }\n\n return userInfo['userEmail'];\n }\n\n // OIDC Auth methods for public client mode\n public async login() {\n if (!this.oidcManager) throw new Error('OIDC not configured');\n await this.oidcManager.login();\n }\n\n public async handleRedirectCallback() {\n if (!this.oidcManager) throw new Error('OIDC not configured');\n return this.oidcManager.handleRedirectCallback();\n }\n\n public async logout() {\n if (!this.oidcManager) throw new Error('OIDC not configured');\n await this.oidcManager.logout();\n }\n\n public async isAuthenticated() {\n if (!this.oidcManager) return false;\n return this.oidcManager.isAuthenticated();\n }\n\n public async getUser() {\n if (!this.oidcManager) return null;\n return this.oidcManager.getUser();\n }\n\n public async getAccessToken() {\n if (!this.oidcManager) return null;\n return this.oidcManager.getAccessToken();\n }\n}\n","import {\n UserManager,\n WebStorageStateStore,\n User,\n UserManagerSettings,\n} from 'oidc-client-ts';\n\nexport interface OIDCConfig {\n client_id?: string;\n redirect_uri: string;\n authority?: string; // discovered from server if not provided\n post_logout_redirect_uri?: string;\n scope?: string;\n response_type?: string;\n silent_redirect_uri?: string;\n automaticSilentRenew?: boolean;\n useSessionStorage?: boolean; // use sessionStorage instead of localStorage (useful for tests)\n}\n\nexport class OIDCManager {\n private userManager!: UserManager;\n\n private user: User | null = null;\n\n private ready: Promise<void>;\n\n private redirectOriginPath?: string;\n\n constructor(config: OIDCConfig, serverURL: URL) {\n const {\n redirect_uri: redirectUri,\n } = config;\n\n this.ready = this.initialize(config, serverURL);\n\n try {\n const ru = new URL(redirectUri);\n this.redirectOriginPath = `${ru.origin}${ru.pathname}`;\n } catch (_) {\n throw new Error(`Invalid redirect URI ${redirectUri}`);\n }\n }\n\n private async initialize(config: OIDCConfig, serverURL: URL): Promise<void> {\n const {\n authority: providedAuthority,\n client_id: clientId,\n redirect_uri: redirectUri,\n post_logout_redirect_uri: postLogoutRedirectUri,\n scope,\n response_type: responseType,\n silent_redirect_uri: silentRedirectUri,\n automaticSilentRenew,\n useSessionStorage,\n } = config;\n\n let authority = providedAuthority;\n let clientIdToUse = clientId;\n\n if (!authority) {\n const base = serverURL.toString().replace(/\\/$/, '');\n const resp = await fetch(`${base}/oidc/discovery`);\n if (!resp.ok) {\n throw new Error(`Failed to discover OIDC authority: ${resp.status} ${resp.statusText}`);\n }\n const data = await resp.json();\n authority = (data && typeof data.authority === 'string') ? data.authority : undefined;\n if (!authority) {\n throw new Error('OIDC discovery did not return an authority');\n }\n\n if (!clientIdToUse) {\n clientIdToUse = data.client_id;\n }\n }\n\n if (!clientIdToUse) {\n throw new Error('OIDC discovery did not return an clientId, you need to provide one when initializing LinkedRecords');\n }\n\n const settings: UserManagerSettings = {\n authority,\n client_id: clientIdToUse,\n redirect_uri: redirectUri,\n post_logout_redirect_uri: postLogoutRedirectUri,\n scope: scope || 'openid profile email',\n response_type: responseType || 'code',\n userStore: new WebStorageStateStore({\n store: useSessionStorage ? window.sessionStorage : window.localStorage,\n }),\n silent_redirect_uri: silentRedirectUri,\n automaticSilentRenew: automaticSilentRenew ?? true,\n extraQueryParams: {\n audience: serverURL.host,\n },\n };\n\n this.userManager = new UserManager(settings);\n }\n\n async login(): Promise<void> {\n await this.ready;\n if (await this.isOnRedirectUriRoute()) {\n return;\n }\n\n await this.userManager.removeUser();\n const returnTo = window.location.pathname + window.location.search + window.location.hash;\n window.sessionStorage.setItem('lr_return_to', returnTo);\n\n await this.userManager.signinRedirect();\n }\n\n async handleRedirectCallback(): Promise<User> {\n await this.ready;\n this.user = await this.userManager.signinRedirectCallback();\n\n const returnTo = window.sessionStorage.getItem('lr_return_to');\n window.sessionStorage.removeItem('lr_return_to');\n\n if (returnTo && typeof returnTo === 'string') {\n window.location.href = returnTo;\n }\n\n return this.user;\n }\n\n async logout(): Promise<void> {\n await this.ready;\n await this.userManager.removeUser();\n await this.userManager.signoutRedirect();\n }\n\n async getUser(): Promise<User | null> {\n await this.ready;\n if (!this.user) {\n this.user = await this.userManager.getUser();\n }\n return this.user;\n }\n\n async isAuthenticated(): Promise<boolean> {\n const user = await this.getUser();\n return !!user && !user.expired;\n }\n\n async getAccessToken(): Promise<string | null> {\n const user = await this.getUser();\n return user && !user.expired ? user.access_token : null;\n }\n\n async signinSilent(): Promise<User | null> {\n await this.ready;\n this.user = await this.userManager.signinSilent();\n return this.user;\n }\n\n async isOnRedirectUriRoute(): Promise<boolean> {\n const currentOriginPath = `${window.location.origin}${window.location.pathname}`;\n return currentOriginPath === this.redirectOriginPath;\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hasCORS = void 0;\n// imported from https://github.com/component/has-cors\nlet value = false;\ntry {\n value = typeof XMLHttpRequest !== 'undefined' &&\n 'withCredentials' in new XMLHttpRequest();\n}\ncatch (err) {\n // if XMLHttp support is disabled in IE then it will throw\n // when trying to create\n}\nexports.hasCORS = value;\n","\"use strict\";\n// imported from https://github.com/galkn/querystring\n/**\n * Compiles a querystring\n * Returns string representation of the object\n *\n * @param {Object}\n * @api private\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.encode = encode;\nexports.decode = decode;\nfunction encode(obj) {\n let str = '';\n for (let i in obj) {\n if (obj.hasOwnProperty(i)) {\n if (str.length)\n str += '&';\n str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n }\n }\n return str;\n}\n/**\n * Parses a simple querystring into an object\n *\n * @param {String} qs\n * @api private\n */\nfunction decode(qs) {\n let qry = {};\n let pairs = qs.split('&');\n for (let i = 0, l = pairs.length; i < l; i++) {\n let pair = pairs[i].split('=');\n qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n return qry;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parse = parse;\n// imported from https://github.com/galkn/parseuri\n/**\n * Parses a URI\n *\n * Note: we could also have used the built-in URL object, but it isn't supported on all platforms.\n *\n * See:\n * - https://developer.mozilla.org/en-US/docs/Web/API/URL\n * - https://caniuse.com/url\n * - https://www.rfc-editor.org/rfc/rfc3986#appendix-B\n *\n * History of the parse() method:\n * - first commit: https://github.com/socketio/socket.io-client/commit/4ee1d5d94b3906a9c052b459f1a818b15f38f91c\n * - export into its own module: https://github.com/socketio/engine.io-client/commit/de2c561e4564efeb78f1bdb1ba39ef81b2822cb3\n * - reimport: https://github.com/socketio/engine.io-client/commit/df32277c3f6d622eec5ed09f493cae3f3391d242\n *\n * @author Steven Levithan <stevenlevithan.com> (MIT license)\n * @api private\n */\nconst re = /^(?:(?![^:@\\/?#]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@\\/?#]*)(?::([^:@\\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\nconst parts = [\n 'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n];\nfunction parse(str) {\n if (str.length > 8000) {\n throw \"URI too long\";\n }\n const src = str, b = str.indexOf('['), e = str.indexOf(']');\n if (b != -1 && e != -1) {\n str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n }\n let m = re.exec(str || ''), uri = {}, i = 14;\n while (i--) {\n uri[parts[i]] = m[i] || '';\n }\n if (b != -1 && e != -1) {\n uri.source = src;\n uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n uri.ipv6uri = true;\n }\n uri.pathNames = pathNames(uri, uri['path']);\n uri.queryKey = queryKey(uri, uri['query']);\n return uri;\n}\nfunction pathNames(obj, path) {\n const regx = /\\/{2,9}/g, names = path.replace(regx, \"/\").split(\"/\");\n if (path.slice(0, 1) == '/' || path.length === 0) {\n names.splice(0, 1);\n }\n if (path.slice(-1) == '/') {\n names.splice(names.length - 1, 1);\n }\n return names;\n}\nfunction queryKey(uri, query) {\n const data = {};\n query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n if ($1) {\n data[$1] = $2;\n }\n });\n return data;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.defaultBinaryType = exports.globalThisShim = exports.nextTick = void 0;\nexports.createCookieJar = createCookieJar;\nexports.nextTick = (() => {\n const isPromiseAvailable = typeof Promise === \"function\" && typeof Promise.resolve === \"function\";\n if (isPromiseAvailable) {\n return (cb) => Promise.resolve().then(cb);\n }\n else {\n return (cb, setTimeoutFn) => setTimeoutFn(cb, 0);\n }\n})();\nexports.globalThisShim = (() => {\n if (typeof self !== \"undefined\") {\n return self;\n }\n else if (typeof window !== \"undefined\") {\n return window;\n }\n else {\n return Function(\"return this\")();\n }\n})();\nexports.defaultBinaryType = \"arraybuffer\";\nfunction createCookieJar() { }\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WebTransport = exports.WebSocket = exports.NodeWebSocket = exports.XHR = exports.NodeXHR = exports.Fetch = exports.nextTick = exports.parse = exports.installTimerFunctions = exports.transports = exports.TransportError = exports.Transport = exports.protocol = exports.SocketWithUpgrade = exports.SocketWithoutUpgrade = exports.Socket = void 0;\nconst socket_js_1 = require(\"./socket.js\");\nObject.defineProperty(exports, \"Socket\", { enumerable: true, get: function () { return socket_js_1.Socket; } });\nvar socket_js_2 = require(\"./socket.js\");\nObject.defineProperty(exports, \"SocketWithoutUpgrade\", { enumerable: true, get: function () { return socket_js_2.SocketWithoutUpgrade; } });\nObject.defineProperty(exports, \"SocketWithUpgrade\", { enumerable: true, get: function () { return socket_js_2.SocketWithUpgrade; } });\nexports.protocol = socket_js_1.Socket.protocol;\nvar transport_js_1 = require(\"./transport.js\");\nObject.defineProperty(exports, \"Transport\", { enumerable: true, get: function () { return transport_js_1.Transport; } });\nObject.defineProperty(exports, \"TransportError\", { enumerable: true, get: function () { return transport_js_1.TransportError; } });\nvar index_js_1 = require(\"./transports/index.js\");\nObject.defineProperty(exports, \"transports\", { enumerable: true, get: function () { return index_js_1.transports; } });\nvar util_js_1 = require(\"./util.js\");\nObject.defineProperty(exports, \"installTimerFunctions\", { enumerable: true, get: function () { return util_js_1.installTimerFunctions; } });\nvar parseuri_js_1 = require(\"./contrib/parseuri.js\");\nObject.defineProperty(exports, \"parse\", { enumerable: true, get: function () { return parseuri_js_1.parse; } });\nvar globals_node_js_1 = require(\"./globals.node.js\");\nObject.defineProperty(exports, \"nextTick\", { enumerable: true, get: function () { return globals_node_js_1.nextTick; } });\nvar polling_fetch_js_1 = require(\"./transports/polling-fetch.js\");\nObject.defineProperty(exports, \"Fetch\", { enumerable: true, get: function () { return polling_fetch_js_1.Fetch; } });\nvar polling_xhr_node_js_1 = require(\"./transports/polling-xhr.node.js\");\nObject.defineProperty(exports, \"NodeXHR\", { enumerable: true, get: function () { return polling_xhr_node_js_1.XHR; } });\nvar polling_xhr_js_1 = require(\"./transports/polling-xhr.js\");\nObject.defineProperty(exports, \"XHR\", { enumerable: true, get: function () { return polling_xhr_js_1.XHR; } });\nvar websocket_node_js_1 = require(\"./transports/websocket.node.js\");\nObject.defineProperty(exports, \"NodeWebSocket\", { enumerable: true, get: function () { return websocket_node_js_1.WS; } });\nvar websocket_js_1 = require(\"./transports/websocket.js\");\nObject.defineProperty(exports, \"WebSocket\", { enumerable: true, get: function () { return websocket_js_1.WS; } });\nvar webtransport_js_1 = require(\"./transports/webtransport.js\");\nObject.defineProperty(exports, \"WebTransport\", { enumerable: true, get: function () { return webtransport_js_1.WT; } });\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Socket = exports.SocketWithUpgrade = exports.SocketWithoutUpgrade = void 0;\nconst index_js_1 = require(\"./transports/index.js\");\nconst util_js_1 = require(\"./util.js\");\nconst parseqs_js_1 = require(\"./contrib/parseqs.js\");\nconst parseuri_js_1 = require(\"./contrib/parseuri.js\");\nconst component_emitter_1 = require(\"@socket.io/component-emitter\");\nconst engine_io_parser_1 = require(\"engine.io-parser\");\nconst globals_node_js_1 = require(\"./globals.node.js\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"engine.io-client:socket\"); // debug()\nconst withEventListeners = typeof addEventListener === \"function\" &&\n typeof removeEventListener === \"function\";\nconst OFFLINE_EVENT_LISTENERS = [];\nif (withEventListeners) {\n // within a ServiceWorker, any event handler for the 'offline' event must be added on the initial evaluation of the\n // script, so we create one single event listener here which will forward the event to the socket instances\n addEventListener(\"offline\", () => {\n debug(\"closing %d connection(s) because the network was lost\", OFFLINE_EVENT_LISTENERS.length);\n OFFLINE_EVENT_LISTENERS.forEach((listener) => listener());\n }, false);\n}\n/**\n * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established\n * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport.\n *\n * This class comes without upgrade mechanism, which means that it will keep the first low-level transport that\n * successfully establishes the connection.\n *\n * In order to allow tree-shaking, there are no transports included, that's why the `transports` option is mandatory.\n *\n * @example\n * import { SocketWithoutUpgrade, WebSocket } from \"engine.io-client\";\n *\n * const socket = new SocketWithoutUpgrade({\n * transports: [WebSocket]\n * });\n *\n * socket.on(\"open\", () => {\n * socket.send(\"hello\");\n * });\n *\n * @see SocketWithUpgrade\n * @see Socket\n */\nclass SocketWithoutUpgrade extends component_emitter_1.Emitter {\n /**\n * Socket constructor.\n *\n * @param {String|Object} uri - uri or options\n * @param {Object} opts - options\n */\n constructor(uri, opts) {\n super();\n this.binaryType = globals_node_js_1.defaultBinaryType;\n this.writeBuffer = [];\n this._prevBufferLen = 0;\n this._pingInterval = -1;\n this._pingTimeout = -1;\n this._maxPayload = -1;\n /**\n * The expiration timestamp of the {@link _pingTimeoutTimer} object is tracked, in case the timer is throttled and the\n * callback is not fired on time. This can happen for example when a laptop is suspended or when a phone is locked.\n */\n this._pingTimeoutTime = Infinity;\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n const parsedUri = (0, parseuri_js_1.parse)(uri);\n opts.hostname = parsedUri.host;\n opts.secure =\n parsedUri.protocol === \"https\" || parsedUri.protocol === \"wss\";\n opts.port = parsedUri.port;\n if (parsedUri.query)\n opts.query = parsedUri.query;\n }\n else if (opts.host) {\n opts.hostname = (0, parseuri_js_1.parse)(opts.host).host;\n }\n (0, util_js_1.installTimerFunctions)(this, opts);\n this.secure =\n null != opts.secure\n ? opts.secure\n : typeof location !== \"undefined\" && \"https:\" === location.protocol;\n if (opts.hostname && !opts.port) {\n // if no port is specified manually, use the protocol default\n opts.port = this.secure ? \"443\" : \"80\";\n }\n this.hostname =\n opts.hostname ||\n (typeof location !== \"undefined\" ? location.hostname : \"localhost\");\n this.port =\n opts.port ||\n (typeof location !== \"undefined\" && location.port\n ? location.port\n : this.secure\n ? \"443\"\n : \"80\");\n this.transports = [];\n this._transportsByName = {};\n opts.transports.forEach((t) => {\n const transportName = t.prototype.name;\n this.transports.push(transportName);\n this._transportsByName[transportName] = t;\n });\n this.opts = Object.assign({\n path: \"/engine.io\",\n agent: false,\n withCredentials: false,\n upgrade: true,\n timestampParam: \"t\",\n rememberUpgrade: false,\n addTrailingSlash: true,\n rejectUnauthorized: true,\n perMessageDeflate: {\n threshold: 1024,\n },\n transportOptions: {},\n closeOnBeforeunload: false,\n }, opts);\n this.opts.path =\n this.opts.path.replace(/\\/$/, \"\") +\n (this.opts.addTrailingSlash ? \"/\" : \"\");\n if (typeof this.opts.query === \"string\") {\n this.opts.query = (0, parseqs_js_1.decode)(this.opts.query);\n }\n if (withEventListeners) {\n if (this.opts.closeOnBeforeunload) {\n // Firefox closes the connection when the \"beforeunload\" event is emitted but not Chrome. This event listener\n // ensures every browser behaves the same (no \"disconnect\" event at the Socket.IO level when the page is\n // closed/reloaded)\n this._beforeunloadEventListener = () => {\n if (this.transport) {\n // silently close the transport\n this.transport.removeAllListeners();\n this.transport.close();\n }\n };\n addEventListener(\"beforeunload\", this._beforeunloadEventListener, false);\n }\n if (this.hostname !== \"localhost\") {\n debug(\"adding listener for the 'offline' event\");\n this._offlineEventListener = () => {\n this._onClose(\"transport close\", {\n description: \"network connection lost\",\n });\n };\n OFFLINE_EVENT_LISTENERS.push(this._offlineEventListener);\n }\n }\n if (this.opts.withCredentials) {\n this._cookieJar = (0, globals_node_js_1.createCookieJar)();\n }\n this._open();\n }\n /**\n * Creates transport of the given type.\n *\n * @param {String} name - transport name\n * @return {Transport}\n * @private\n */\n createTransport(name) {\n debug('creating transport \"%s\"', name);\n const query = Object.assign({}, this.opts.query);\n // append engine.io protocol identifier\n query.EIO = engine_io_parser_1.protocol;\n // transport name\n query.transport = name;\n // session id if we already have one\n if (this.id)\n query.sid = this.id;\n const opts = Object.assign({}, this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port,\n }, this.opts.transportOptions[name]);\n debug(\"options: %j\", opts);\n return new this._transportsByName[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @private\n */\n _open() {\n if (this.transports.length === 0) {\n // Emit error on next tick so it can be listened to\n this.setTimeoutFn(() => {\n this.emitReserved(\"error\", \"No transports available\");\n }, 0);\n return;\n }\n const transportName = this.opts.rememberUpgrade &&\n SocketWithoutUpgrade.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1\n ? \"websocket\"\n : this.transports[0];\n this.readyState = \"opening\";\n const transport = this.createTransport(transportName);\n transport.open();\n this.setTransport(transport);\n }\n /**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @private\n */\n setTransport(transport) {\n debug(\"setting transport %s\", transport.name);\n if (this.transport) {\n debug(\"clearing existing transport %s\", this.transport.name);\n this.transport.removeAllListeners();\n }\n // set up transport\n this.transport = transport;\n // set up transport listeners\n transport\n .on(\"drain\", this._onDrain.bind(this))\n .on(\"packet\", this._onPacket.bind(this))\n .on(\"error\", this._onError.bind(this))\n .on(\"close\", (reason) => this._onClose(\"transport close\", reason));\n }\n /**\n * Called when connection is deemed open.\n *\n * @private\n */\n onOpen() {\n debug(\"socket open\");\n this.readyState = \"open\";\n SocketWithoutUpgrade.priorWebsocketSuccess =\n \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n }\n /**\n * Handles a packet.\n *\n * @private\n */\n _onPacket(packet) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n debug('socket receive: type \"%s\", data \"%s\"', packet.type, packet.data);\n this.emitReserved(\"packet\", packet);\n // Socket is live - any packet counts\n this.emitReserved(\"heartbeat\");\n switch (packet.type) {\n case \"open\":\n this.onHandshake(JSON.parse(packet.data));\n break;\n case \"ping\":\n this._sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\n this._resetPingTimeout();\n break;\n case \"error\":\n const err = new Error(\"server error\");\n // @ts-ignore\n err.code = packet.data;\n this._onError(err);\n break;\n case \"message\":\n this.emitReserved(\"data\", packet.data);\n this.emitReserved(\"message\", packet.data);\n break;\n }\n }\n else {\n debug('packet received with socket readyState \"%s\"', this.readyState);\n }\n }\n /**\n * Called upon handshake completion.\n *\n * @param {Object} data - handshake obj\n * @private\n */\n onHandshake(data) {\n this.emitReserved(\"handshake\", data);\n this.id = data.sid;\n this.transport.query.sid = data.sid;\n this._pingInterval = data.pingInterval;\n this._pingTimeout = data.pingTimeout;\n this._maxPayload = data.maxPayload;\n this.onOpen();\n // In case open handler closes socket\n if (\"closed\" === this.readyState)\n return;\n this._resetPingTimeout();\n }\n /**\n * Sets and resets ping timeout timer based on server pings.\n *\n * @private\n */\n _resetPingTimeout() {\n this.clearTimeoutFn(this._pingTimeoutTimer);\n const delay = this._pingInterval + this._pingTimeout;\n this._pingTimeoutTime = Date.now() + delay;\n this._pingTimeoutTimer = this.setTimeoutFn(() => {\n this._onClose(\"ping timeout\");\n }, delay);\n if (this.opts.autoUnref) {\n this._pingTimeoutTimer.unref();\n }\n }\n /**\n * Called on `drain` event\n *\n * @private\n */\n _onDrain() {\n this.writeBuffer.splice(0, this._prevBufferLen);\n // setting prevBufferLen = 0 is very important\n // for example, when upgrading, upgrade packet is sent over,\n // and a nonzero prevBufferLen could cause problems on `drain`\n this._prevBufferLen = 0;\n if (0 === this.writeBuffer.length) {\n this.emitReserved(\"drain\");\n }\n else {\n this.flush();\n }\n }\n /**\n * Flush write buffers.\n *\n * @private\n */\n flush() {\n if (\"closed\" !== this.readyState &&\n this.transport.writable &&\n !this.upgrading &&\n this.writeBuffer.length) {\n const packets = this._getWritablePackets();\n debug(\"flushing %d packets in socket\", packets.length);\n this.transport.send(packets);\n // keep track of current length of writeBuffer\n // splice writeBuffer and callbackBuffer on `drain`\n this._prevBufferLen = packets.length;\n this.emitReserved(\"flush\");\n }\n }\n /**\n * Ensure the encoded size of the writeBuffer is below the maxPayload value sent by the server (only for HTTP\n * long-polling)\n *\n * @private\n */\n _getWritablePackets() {\n const shouldCheckPayloadSize = this._maxPayload &&\n this.transport.name === \"polling\" &&\n this.writeBuffer.length > 1;\n if (!shouldCheckPayloadSize) {\n return this.writeBuffer;\n }\n let payloadSize = 1; // first packet type\n for (let i = 0; i < this.writeBuffer.length; i++) {\n const data = this.writeBuffer[i].data;\n if (data) {\n payloadSize += (0, util_js_1.byteLength)(data);\n }\n if (i > 0 && payloadSize > this._maxPayload) {\n debug(\"only send %d out of %d packets\", i, this.writeBuffer.length);\n return this.writeBuffer.slice(0, i);\n }\n payloadSize += 2; // separator + packet type\n }\n debug(\"payload size is %d (max: %d)\", payloadSize, this._maxPayload);\n return this.writeBuffer;\n }\n /**\n * Checks whether the heartbeat timer has expired but the socket has not yet been notified.\n *\n * Note: this method is private for now because it does not really fit the WebSocket API, but if we put it in the\n * `write()` method then the message would not be buffered by the Socket.IO client.\n *\n * @return {boolean}\n * @private\n */\n /* private */ _hasPingExpired() {\n if (!this._pingTimeoutTime)\n return true;\n const hasExpired = Date.now() > this._pingTimeoutTime;\n if (hasExpired) {\n debug(\"throttled timer detected, scheduling connection close\");\n this._pingTimeoutTime = 0;\n (0, globals_node_js_1.nextTick)(() => {\n this._onClose(\"ping timeout\");\n }, this.setTimeoutFn);\n }\n return hasExpired;\n }\n /**\n * Sends a message.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} fn - callback function.\n * @return {Socket} for chaining.\n */\n write(msg, options, fn) {\n this._sendPacket(\"message\", msg, options, fn);\n return this;\n }\n /**\n * Sends a message. Alias of {@link Socket#write}.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} fn - callback function.\n * @return {Socket} for chaining.\n */\n send(msg, options, fn) {\n this._sendPacket(\"message\", msg, options, fn);\n return this;\n }\n /**\n * Sends a packet.\n *\n * @param {String} type: packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} fn - callback function.\n * @private\n */\n _sendPacket(type, data, options, fn) {\n if (\"function\" === typeof data) {\n fn = data;\n data = undefined;\n }\n if (\"function\" === typeof options) {\n fn = options;\n options = null;\n }\n if (\"closing\" === this.readyState || \"closed\" === this.readyState) {\n return;\n }\n options = options || {};\n options.compress = false !== options.compress;\n const packet = {\n type: type,\n data: data,\n options: options,\n };\n this.emitReserved(\"packetCreate\", packet);\n this.writeBuffer.push(packet);\n if (fn)\n this.once(\"flush\", fn);\n this.flush();\n }\n /**\n * Closes the connection.\n */\n close() {\n const close = () => {\n this._onClose(\"forced close\");\n debug(\"socket closing - telling transport to close\");\n this.transport.close();\n };\n const cleanupAndClose = () => {\n this.off(\"upgrade\", cleanupAndClose);\n this.off(\"upgradeError\", cleanupAndClose);\n close();\n };\n const waitForUpgrade = () => {\n // wait for upgrade to finish since we can't send packets while pausing a transport\n this.once(\"upgrade\", cleanupAndClose);\n this.once(\"upgradeError\", cleanupAndClose);\n };\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.readyState = \"closing\";\n if (this.writeBuffer.length) {\n this.once(\"drain\", () => {\n if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n });\n }\n else if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n }\n return this;\n }\n /**\n * Called upon transport error\n *\n * @private\n */\n _onError(err) {\n debug(\"socket error %j\", err);\n SocketWithoutUpgrade.priorWebsocketSuccess = false;\n if (this.opts.tryAllTransports &&\n this.transports.length > 1 &&\n this.readyState === \"opening\") {\n debug(\"trying next transport\");\n this.transports.shift();\n return this._open();\n }\n this.emitReserved(\"error\", err);\n this._onClose(\"transport error\", err);\n }\n /**\n * Called upon transport close.\n *\n * @private\n */\n _onClose(reason, description) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n debug('socket close with reason: \"%s\"', reason);\n // clear timers\n this.clearTimeoutFn(this._pingTimeoutTimer);\n // stop event from firing again for transport\n this.transport.removeAllListeners(\"close\");\n // ensure transport won't stay open\n this.transport.close();\n // ignore further transport communication\n this.transport.removeAllListeners();\n if (withEventListeners) {\n if (this._beforeunloadEventListener) {\n removeEventListener(\"beforeunload\", this._beforeunloadEventListener, false);\n }\n if (this._offlineEventListener) {\n const i = OFFLINE_EVENT_LISTENERS.indexOf(this._offlineEventListener);\n if (i !== -1) {\n debug(\"removing listener for the 'offline' event\");\n OFFLINE_EVENT_LISTENERS.splice(i, 1);\n }\n }\n }\n // set ready state\n this.readyState = \"closed\";\n // clear session id\n this.id = null;\n // emit close event\n this.emitReserved(\"close\", reason, description);\n // clean buffers after, so users can still\n // grab the buffers on `close` event\n this.writeBuffer = [];\n this._prevBufferLen = 0;\n }\n }\n}\nexports.SocketWithoutUpgrade = SocketWithoutUpgrade;\nSocketWithoutUpgrade.protocol = engine_io_parser_1.protocol;\n/**\n * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established\n * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport.\n *\n * This class comes with an upgrade mechanism, which means that once the connection is established with the first\n * low-level transport, it will try to upgrade to a better transport.\n *\n * In order to allow tree-shaking, there are no transports included, that's why the `transports` option is mandatory.\n *\n * @example\n * import { SocketWithUpgrade, WebSocket } from \"engine.io-client\";\n *\n * const socket = new SocketWithUpgrade({\n * transports: [WebSocket]\n * });\n *\n * socket.on(\"open\", () => {\n * socket.send(\"hello\");\n * });\n *\n * @see SocketWithoutUpgrade\n * @see Socket\n */\nclass SocketWithUpgrade extends SocketWithoutUpgrade {\n constructor() {\n super(...arguments);\n this._upgrades = [];\n }\n onOpen() {\n super.onOpen();\n if (\"open\" === this.readyState && this.opts.upgrade) {\n debug(\"starting upgrade probes\");\n for (let i = 0; i < this._upgrades.length; i++) {\n this._probe(this._upgrades[i]);\n }\n }\n }\n /**\n * Probes a transport.\n *\n * @param {String} name - transport name\n * @private\n */\n _probe(name) {\n debug('probing transport \"%s\"', name);\n let transport = this.createTransport(name);\n let failed = false;\n SocketWithoutUpgrade.priorWebsocketSuccess = false;\n const onTransportOpen = () => {\n if (failed)\n return;\n debug('probe transport \"%s\" opened', name);\n transport.send([{ type: \"ping\", data: \"probe\" }]);\n transport.once(\"packet\", (msg) => {\n if (failed)\n return;\n if (\"pong\" === msg.type && \"probe\" === msg.data) {\n debug('probe transport \"%s\" pong', name);\n this.upgrading = true;\n this.emitReserved(\"upgrading\", transport);\n if (!transport)\n return;\n SocketWithoutUpgrade.priorWebsocketSuccess =\n \"websocket\" === transport.name;\n debug('pausing current transport \"%s\"', this.transport.name);\n this.transport.pause(() => {\n if (failed)\n return;\n if (\"closed\" === this.readyState)\n return;\n debug(\"changing transport and sending upgrade packet\");\n cleanup();\n this.setTransport(transport);\n transport.send([{ type: \"upgrade\" }]);\n this.emitReserved(\"upgrade\", transport);\n transport = null;\n this.upgrading = false;\n this.flush();\n });\n }\n else {\n debug('probe transport \"%s\" failed', name);\n const err = new Error(\"probe error\");\n // @ts-ignore\n err.transport = transport.name;\n this.emitReserved(\"upgradeError\", err);\n }\n });\n };\n function freezeTransport() {\n if (failed)\n return;\n // Any callback called by transport should be ignored since now\n failed = true;\n cleanup();\n transport.close();\n transport = null;\n }\n // Handle any error that happens while probing\n const onerror = (err) => {\n const error = new Error(\"probe error: \" + err);\n // @ts-ignore\n error.transport = transport.name;\n freezeTransport();\n debug('probe transport \"%s\" failed because of error: %s', name, err);\n this.emitReserved(\"upgradeError\", error);\n };\n function onTransportClose() {\n onerror(\"transport closed\");\n }\n // When the socket is closed while we're probing\n function onclose() {\n onerror(\"socket closed\");\n }\n // When the socket is upgraded while we're probing\n function onupgrade(to) {\n if (transport && to.name !== transport.name) {\n debug('\"%s\" works - aborting \"%s\"', to.name, transport.name);\n freezeTransport();\n }\n }\n // Remove all listeners on the transport and on self\n const cleanup = () => {\n transport.removeListener(\"open\", onTransportOpen);\n transport.removeListener(\"error\", onerror);\n transport.removeListener(\"close\", onTransportClose);\n this.off(\"close\", onclose);\n this.off(\"upgrading\", onupgrade);\n };\n transport.once(\"open\", onTransportOpen);\n transport.once(\"error\", onerror);\n transport.once(\"close\", onTransportClose);\n this.once(\"close\", onclose);\n this.once(\"upgrading\", onupgrade);\n if (this._upgrades.indexOf(\"webtransport\") !== -1 &&\n name !== \"webtransport\") {\n // favor WebTransport\n this.setTimeoutFn(() => {\n if (!failed) {\n transport.open();\n }\n }, 200);\n }\n else {\n transport.open();\n }\n }\n onHandshake(data) {\n this._upgrades = this._filterUpgrades(data.upgrades);\n super.onHandshake(data);\n }\n /**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} upgrades - server upgrades\n * @private\n */\n _filterUpgrades(upgrades) {\n const filteredUpgrades = [];\n for (let i = 0; i < upgrades.length; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\nexports.SocketWithUpgrade = SocketWithUpgrade;\n/**\n * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established\n * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport.\n *\n * This class comes with an upgrade mechanism, which means that once the connection is established with the first\n * low-level transport, it will try to upgrade to a better transport.\n *\n * @example\n * import { Socket } from \"engine.io-client\";\n *\n * const socket = new Socket();\n *\n * socket.on(\"open\", () => {\n * socket.send(\"hello\");\n * });\n *\n * @see SocketWithoutUpgrade\n * @see SocketWithUpgrade\n */\nclass Socket extends SocketWithUpgrade {\n constructor(uri, opts = {}) {\n const o = typeof uri === \"object\" ? uri : opts;\n if (!o.transports ||\n (o.transports && typeof o.transports[0] === \"string\")) {\n o.transports = (o.transports || [\"polling\", \"websocket\", \"webtransport\"])\n .map((transportName) => index_js_1.transports[transportName])\n .filter((t) => !!t);\n }\n super(uri, o);\n }\n}\nexports.Socket = Socket;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Transport = exports.TransportError = void 0;\nconst engine_io_parser_1 = require(\"engine.io-parser\");\nconst component_emitter_1 = require(\"@socket.io/component-emitter\");\nconst util_js_1 = require(\"./util.js\");\nconst parseqs_js_1 = require(\"./contrib/parseqs.js\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"engine.io-client:transport\"); // debug()\nclass TransportError extends Error {\n constructor(reason, description, context) {\n super(reason);\n this.description = description;\n this.context = context;\n this.type = \"TransportError\";\n }\n}\nexports.TransportError = TransportError;\nclass Transport extends component_emitter_1.Emitter {\n /**\n * Transport abstract constructor.\n *\n * @param {Object} opts - options\n * @protected\n */\n constructor(opts) {\n super();\n this.writable = false;\n (0, util_js_1.installTimerFunctions)(this, opts);\n this.opts = opts;\n this.query = opts.query;\n this.socket = opts.socket;\n this.supportsBinary = !opts.forceBase64;\n }\n /**\n * Emits an error.\n *\n * @param {String} reason\n * @param description\n * @param context - the error context\n * @return {Transport} for chaining\n * @protected\n */\n onError(reason, description, context) {\n super.emitReserved(\"error\", new TransportError(reason, description, context));\n return this;\n }\n /**\n * Opens the transport.\n */\n open() {\n this.readyState = \"opening\";\n this.doOpen();\n return this;\n }\n /**\n * Closes the transport.\n */\n close() {\n if (this.readyState === \"opening\" || this.readyState === \"open\") {\n this.doClose();\n this.onClose();\n }\n return this;\n }\n /**\n * Sends multiple packets.\n *\n * @param {Array} packets\n */\n send(packets) {\n if (this.readyState === \"open\") {\n this.write(packets);\n }\n else {\n // this might happen if the transport was silently closed in the beforeunload event handler\n debug(\"transport is not open, discarding packets\");\n }\n }\n /**\n * Called upon open\n *\n * @protected\n */\n onOpen() {\n this.readyState = \"open\";\n this.writable = true;\n super.emitReserved(\"open\");\n }\n /**\n * Called with data.\n *\n * @param {String} data\n * @protected\n */\n onData(data) {\n const packet = (0, engine_io_parser_1.decodePacket)(data, this.socket.binaryType);\n this.onPacket(packet);\n }\n /**\n * Called with a decoded packet.\n *\n * @protected\n */\n onPacket(packet) {\n super.emitReserved(\"packet\", packet);\n }\n /**\n * Called upon close.\n *\n * @protected\n */\n onClose(details) {\n this.readyState = \"closed\";\n super.emitReserved(\"close\", details);\n }\n /**\n * Pauses the transport, in order not to lose packets during an upgrade.\n *\n * @param onPause\n */\n pause(onPause) { }\n createUri(schema, query = {}) {\n return (schema +\n \"://\" +\n this._hostname() +\n this._port() +\n this.opts.path +\n this._query(query));\n }\n _hostname() {\n const hostname = this.opts.hostname;\n return hostname.indexOf(\":\") === -1 ? hostname : \"[\" + hostname + \"]\";\n }\n _port() {\n if (this.opts.port &&\n ((this.opts.secure && Number(this.opts.port) !== 443) ||\n (!this.opts.secure && Number(this.opts.port) !== 80))) {\n return \":\" + this.opts.port;\n }\n else {\n return \"\";\n }\n }\n _query(query) {\n const encodedQuery = (0, parseqs_js_1.encode)(query);\n return encodedQuery.length ? \"?\" + encodedQuery : \"\";\n }\n}\nexports.Transport = Transport;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.transports = void 0;\nconst polling_xhr_node_js_1 = require(\"./polling-xhr.node.js\");\nconst websocket_node_js_1 = require(\"./websocket.node.js\");\nconst webtransport_js_1 = require(\"./webtransport.js\");\nexports.transports = {\n websocket: websocket_node_js_1.WS,\n webtransport: webtransport_js_1.WT,\n polling: polling_xhr_node_js_1.XHR,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Fetch = void 0;\nconst polling_js_1 = require(\"./polling.js\");\n/**\n * HTTP long-polling based on the built-in `fetch()` method.\n *\n * Usage: browser, Node.js (since v18), Deno, Bun\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/fetch\n * @see https://caniuse.com/fetch\n * @see https://nodejs.org/api/globals.html#fetch\n */\nclass Fetch extends polling_js_1.Polling {\n doPoll() {\n this._fetch()\n .then((res) => {\n if (!res.ok) {\n return this.onError(\"fetch read error\", res.status, res);\n }\n res.text().then((data) => this.onData(data));\n })\n .catch((err) => {\n this.onError(\"fetch read error\", err);\n });\n }\n doWrite(data, callback) {\n this._fetch(data)\n .then((res) => {\n if (!res.ok) {\n return this.onError(\"fetch write error\", res.status, res);\n }\n callback();\n })\n .catch((err) => {\n this.onError(\"fetch write error\", err);\n });\n }\n _fetch(data) {\n var _a;\n const isPost = data !== undefined;\n const headers = new Headers(this.opts.extraHeaders);\n if (isPost) {\n headers.set(\"content-type\", \"text/plain;charset=UTF-8\");\n }\n (_a = this.socket._cookieJar) === null || _a === void 0 ? void 0 : _a.appendCookies(headers);\n return fetch(this.uri(), {\n method: isPost ? \"POST\" : \"GET\",\n body: isPost ? data : null,\n headers,\n credentials: this.opts.withCredentials ? \"include\" : \"omit\",\n }).then((res) => {\n var _a;\n // @ts-ignore getSetCookie() was added in Node.js v19.7.0\n (_a = this.socket._cookieJar) === null || _a === void 0 ? void 0 : _a.parseCookies(res.headers.getSetCookie());\n return res;\n });\n }\n}\nexports.Fetch = Fetch;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.XHR = exports.Request = exports.BaseXHR = void 0;\nconst polling_js_1 = require(\"./polling.js\");\nconst component_emitter_1 = require(\"@socket.io/component-emitter\");\nconst util_js_1 = require(\"../util.js\");\nconst globals_node_js_1 = require(\"../globals.node.js\");\nconst has_cors_js_1 = require(\"../contrib/has-cors.js\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"engine.io-client:polling\"); // debug()\nfunction empty() { }\nclass BaseXHR extends polling_js_1.Polling {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @package\n */\n constructor(opts) {\n super(opts);\n if (typeof location !== \"undefined\") {\n const isSSL = \"https:\" === location.protocol;\n let port = location.port;\n // some user agents have empty `location.port`\n if (!port) {\n port = isSSL ? \"443\" : \"80\";\n }\n this.xd =\n (typeof location !== \"undefined\" &&\n opts.hostname !== location.hostname) ||\n port !== opts.port;\n }\n }\n /**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @private\n */\n doWrite(data, fn) {\n const req = this.request({\n method: \"POST\",\n data: data,\n });\n req.on(\"success\", fn);\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr post error\", xhrStatus, context);\n });\n }\n /**\n * Starts a poll cycle.\n *\n * @private\n */\n doPoll() {\n debug(\"xhr poll\");\n const req = this.request();\n req.on(\"data\", this.onData.bind(this));\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr poll error\", xhrStatus, context);\n });\n this.pollXhr = req;\n }\n}\nexports.BaseXHR = BaseXHR;\nclass Request extends component_emitter_1.Emitter {\n /**\n * Request constructor\n *\n * @param {Object} options\n * @package\n */\n constructor(createRequest, uri, opts) {\n super();\n this.createRequest = createRequest;\n (0, util_js_1.installTimerFunctions)(this, opts);\n this._opts = opts;\n this._method = opts.method || \"GET\";\n this._uri = uri;\n this._data = undefined !== opts.data ? opts.data : null;\n this._create();\n }\n /**\n * Creates the XHR object and sends the request.\n *\n * @private\n */\n _create() {\n var _a;\n const opts = (0, util_js_1.pick)(this._opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this._opts.xd;\n const xhr = (this._xhr = this.createRequest(opts));\n try {\n debug(\"xhr open %s: %s\", this._method, this._uri);\n xhr.open(this._method, this._uri, true);\n try {\n if (this._opts.extraHeaders) {\n // @ts-ignore\n xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n for (let i in this._opts.extraHeaders) {\n if (this._opts.extraHeaders.hasOwnProperty(i)) {\n xhr.setRequestHeader(i, this._opts.extraHeaders[i]);\n }\n }\n }\n }\n catch (e) { }\n if (\"POST\" === this._method) {\n try {\n xhr.setRequestHeader(\"Content-type\", \"text/plain;charset=UTF-8\");\n }\n catch (e) { }\n }\n try {\n xhr.setRequestHeader(\"Accept\", \"*/*\");\n }\n catch (e) { }\n (_a = this._opts.cookieJar) === null || _a === void 0 ? void 0 : _a.addCookies(xhr);\n // ie6 check\n if (\"withCredentials\" in xhr) {\n xhr.withCredentials = this._opts.withCredentials;\n }\n if (this._opts.requestTimeout) {\n xhr.timeout = this._opts.requestTimeout;\n }\n xhr.onreadystatechange = () => {\n var _a;\n if (xhr.readyState === 3) {\n (_a = this._opts.cookieJar) === null || _a === void 0 ? void 0 : _a.parseCookies(\n // @ts-ignore\n xhr.getResponseHeader(\"set-cookie\"));\n }\n if (4 !== xhr.readyState)\n return;\n if (200 === xhr.status || 1223 === xhr.status) {\n this._onLoad();\n }\n else {\n // make sure the `error` event handler that's user-set\n // does not throw in the same tick and gets caught here\n this.setTimeoutFn(() => {\n this._onError(typeof xhr.status === \"number\" ? xhr.status : 0);\n }, 0);\n }\n };\n debug(\"xhr data %s\", this._data);\n xhr.send(this._data);\n }\n catch (e) {\n // Need to defer since .create() is called directly from the constructor\n // and thus the 'error' event can only be only bound *after* this exception\n // occurs. Therefore, also, we cannot throw here at all.\n this.setTimeoutFn(() => {\n this._onError(e);\n }, 0);\n return;\n }\n if (typeof document !== \"undefined\") {\n this._index = Request.requestsCount++;\n Request.requests[this._index] = this;\n }\n }\n /**\n * Called upon error.\n *\n * @private\n */\n _onError(err) {\n this.emitReserved(\"error\", err, this._xhr);\n this._cleanup(true);\n }\n /**\n * Cleans up house.\n *\n * @private\n */\n _cleanup(fromError) {\n if (\"undefined\" === typeof this._xhr || null === this._xhr) {\n return;\n }\n this._xhr.onreadystatechange = empty;\n if (fromError) {\n try {\n this._xhr.abort();\n }\n catch (e) { }\n }\n if (typeof document !== \"undefined\") {\n delete Request.requests[this._index];\n }\n this._xhr = null;\n }\n /**\n * Called upon load.\n *\n * @private\n */\n _onLoad() {\n const data = this._xhr.responseText;\n if (data !== null) {\n this.emitReserved(\"data\", data);\n this.emitReserved(\"success\");\n this._cleanup();\n }\n }\n /**\n * Aborts the request.\n *\n * @package\n */\n abort() {\n this._cleanup();\n }\n}\nexports.Request = Request;\nRequest.requestsCount = 0;\nRequest.requests = {};\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\nif (typeof document !== \"undefined\") {\n // @ts-ignore\n if (typeof attachEvent === \"function\") {\n // @ts-ignore\n attachEvent(\"onunload\", unloadHandler);\n }\n else if (typeof addEventListener === \"function\") {\n const terminationEvent = \"onpagehide\" in globals_node_js_1.globalThisShim ? \"pagehide\" : \"unload\";\n addEventListener(terminationEvent, unloadHandler, false);\n }\n}\nfunction unloadHandler() {\n for (let i in Request.requests) {\n if (Request.requests.hasOwnProperty(i)) {\n Request.requests[i].abort();\n }\n }\n}\nconst hasXHR2 = (function () {\n const xhr = newRequest({\n xdomain: false,\n });\n return xhr && xhr.responseType !== null;\n})();\n/**\n * HTTP long-polling based on the built-in `XMLHttpRequest` object.\n *\n * Usage: browser\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest\n */\nclass XHR extends BaseXHR {\n constructor(opts) {\n super(opts);\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\n }\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd }, this.opts);\n return new Request(newRequest, this.uri(), opts);\n }\n}\nexports.XHR = XHR;\nfunction newRequest(opts) {\n const xdomain = opts.xdomain;\n // XMLHttpRequest can be disabled on IE\n try {\n if (\"undefined\" !== typeof XMLHttpRequest && (!xdomain || has_cors_js_1.hasCORS)) {\n return new XMLHttpRequest();\n }\n }\n catch (e) { }\n if (!xdomain) {\n try {\n return new globals_node_js_1.globalThisShim[[\"Active\"].concat(\"Object\").join(\"X\")](\"Microsoft.XMLHTTP\");\n }\n catch (e) { }\n }\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Polling = void 0;\nconst transport_js_1 = require(\"../transport.js\");\nconst util_js_1 = require(\"../util.js\");\nconst engine_io_parser_1 = require(\"engine.io-parser\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"engine.io-client:polling\"); // debug()\nclass Polling extends transport_js_1.Transport {\n constructor() {\n super(...arguments);\n this._polling = false;\n }\n get name() {\n return \"polling\";\n }\n /**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @protected\n */\n doOpen() {\n this._poll();\n }\n /**\n * Pauses polling.\n *\n * @param {Function} onPause - callback upon buffers are flushed and transport is paused\n * @package\n */\n pause(onPause) {\n this.readyState = \"pausing\";\n const pause = () => {\n debug(\"paused\");\n this.readyState = \"paused\";\n onPause();\n };\n if (this._polling || !this.writable) {\n let total = 0;\n if (this._polling) {\n debug(\"we are currently polling - waiting to pause\");\n total++;\n this.once(\"pollComplete\", function () {\n debug(\"pre-pause polling complete\");\n --total || pause();\n });\n }\n if (!this.writable) {\n debug(\"we are currently writing - waiting to pause\");\n total++;\n this.once(\"drain\", function () {\n debug(\"pre-pause writing complete\");\n --total || pause();\n });\n }\n }\n else {\n pause();\n }\n }\n /**\n * Starts polling cycle.\n *\n * @private\n */\n _poll() {\n debug(\"polling\");\n this._polling = true;\n this.doPoll();\n this.emitReserved(\"poll\");\n }\n /**\n * Overloads onData to detect payloads.\n *\n * @protected\n */\n onData(data) {\n debug(\"polling got data %s\", data);\n const callback = (packet) => {\n // if its the first message we consider the transport open\n if (\"opening\" === this.readyState && packet.type === \"open\") {\n this.onOpen();\n }\n // if its a close packet, we close the ongoing requests\n if (\"close\" === packet.type) {\n this.onClose({ description: \"transport closed by the server\" });\n return false;\n }\n // otherwise bypass onData and handle the message\n this.onPacket(packet);\n };\n // decode payload\n (0, engine_io_parser_1.decodePayload)(data, this.socket.binaryType).forEach(callback);\n // if an event did not trigger closing\n if (\"closed\" !== this.readyState) {\n // if we got data we're not polling\n this._polling = false;\n this.emitReserved(\"pollComplete\");\n if (\"open\" === this.readyState) {\n this._poll();\n }\n else {\n debug('ignoring poll - transport state \"%s\"', this.readyState);\n }\n }\n }\n /**\n * For polling, send a close packet.\n *\n * @protected\n */\n doClose() {\n const close = () => {\n debug(\"writing close packet\");\n this.write([{ type: \"close\" }]);\n };\n if (\"open\" === this.readyState) {\n debug(\"transport open - closing\");\n close();\n }\n else {\n // in case we're trying to close while\n // handshaking is in progress (GH-164)\n debug(\"transport not open - deferring close\");\n this.once(\"open\", close);\n }\n }\n /**\n * Writes a packets payload.\n *\n * @param {Array} packets - data packets\n * @protected\n */\n write(packets) {\n this.writable = false;\n (0, engine_io_parser_1.encodePayload)(packets, (data) => {\n this.doWrite(data, () => {\n this.writable = true;\n this.emitReserved(\"drain\");\n });\n });\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n const schema = this.opts.secure ? \"https\" : \"http\";\n const query = this.query || {};\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = (0, util_js_1.randomString)();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n return this.createUri(schema, query);\n }\n}\nexports.Polling = Polling;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WS = exports.BaseWS = void 0;\nconst transport_js_1 = require(\"../transport.js\");\nconst util_js_1 = require(\"../util.js\");\nconst engine_io_parser_1 = require(\"engine.io-parser\");\nconst globals_node_js_1 = require(\"../globals.node.js\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"engine.io-client:websocket\"); // debug()\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nclass BaseWS extends transport_js_1.Transport {\n get name() {\n return \"websocket\";\n }\n doOpen() {\n const uri = this.uri();\n const protocols = this.opts.protocols;\n // React Native only supports the 'headers' option, and will print a warning if anything else is passed\n const opts = isReactNative\n ? {}\n : (0, util_js_1.pick)(this.opts, \"agent\", \"perMessageDeflate\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"localAddress\", \"protocolVersion\", \"origin\", \"maxPayload\", \"family\", \"checkServerIdentity\");\n if (this.opts.extraHeaders) {\n opts.headers = this.opts.extraHeaders;\n }\n try {\n this.ws = this.createSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType;\n this.addEventListeners();\n }\n /**\n * Adds event listeners to the socket\n *\n * @private\n */\n addEventListeners() {\n this.ws.onopen = () => {\n if (this.opts.autoUnref) {\n this.ws._socket.unref();\n }\n this.onOpen();\n };\n this.ws.onclose = (closeEvent) => this.onClose({\n description: \"websocket connection closed\",\n context: closeEvent,\n });\n this.ws.onmessage = (ev) => this.onData(ev.data);\n this.ws.onerror = (e) => this.onError(\"websocket error\", e);\n }\n write(packets) {\n this.writable = false;\n // encodePacket efficient as it uses WS framing\n // no need for encodePayload\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n (0, engine_io_parser_1.encodePacket)(packet, this.supportsBinary, (data) => {\n // Sometimes the websocket has already been closed but the browser didn't\n // have a chance of informing us about it yet, in that case send will\n // throw an error\n try {\n this.doWrite(packet, data);\n }\n catch (e) {\n debug(\"websocket closed before onclose event\");\n }\n if (lastPacket) {\n // fake drain\n // defer to next tick to allow Socket to clear writeBuffer\n (0, globals_node_js_1.nextTick)(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n doClose() {\n if (typeof this.ws !== \"undefined\") {\n this.ws.onerror = () => { };\n this.ws.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n const query = this.query || {};\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = (0, util_js_1.randomString)();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n return this.createUri(schema, query);\n }\n}\nexports.BaseWS = BaseWS;\nconst WebSocketCtor = globals_node_js_1.globalThisShim.WebSocket || globals_node_js_1.globalThisShim.MozWebSocket;\n/**\n * WebSocket transport based on the built-in `WebSocket` object.\n *\n * Usage: browser, Node.js (since v21), Deno, Bun\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @see https://caniuse.com/mdn-api_websocket\n * @see https://nodejs.org/api/globals.html#websocket\n */\nclass WS extends BaseWS {\n createSocket(uri, protocols, opts) {\n return !isReactNative\n ? protocols\n ? new WebSocketCtor(uri, protocols)\n : new WebSocketCtor(uri)\n : new WebSocketCtor(uri, protocols, opts);\n }\n doWrite(_packet, data) {\n this.ws.send(data);\n }\n}\nexports.WS = WS;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WT = void 0;\nconst transport_js_1 = require(\"../transport.js\");\nconst globals_node_js_1 = require(\"../globals.node.js\");\nconst engine_io_parser_1 = require(\"engine.io-parser\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"engine.io-client:webtransport\"); // debug()\n/**\n * WebTransport transport based on the built-in `WebTransport` object.\n *\n * Usage: browser, Node.js (with the `@fails-components/webtransport` package)\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebTransport\n * @see https://caniuse.com/webtransport\n */\nclass WT extends transport_js_1.Transport {\n get name() {\n return \"webtransport\";\n }\n doOpen() {\n try {\n // @ts-ignore\n this._transport = new WebTransport(this.createUri(\"https\"), this.opts.transportOptions[this.name]);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this._transport.closed\n .then(() => {\n debug(\"transport closed gracefully\");\n this.onClose();\n })\n .catch((err) => {\n debug(\"transport closed due to %s\", err);\n this.onError(\"webtransport error\", err);\n });\n // note: we could have used async/await, but that would require some additional polyfills\n this._transport.ready.then(() => {\n this._transport.createBidirectionalStream().then((stream) => {\n const decoderStream = (0, engine_io_parser_1.createPacketDecoderStream)(Number.MAX_SAFE_INTEGER, this.socket.binaryType);\n const reader = stream.readable.pipeThrough(decoderStream).getReader();\n const encoderStream = (0, engine_io_parser_1.createPacketEncoderStream)();\n encoderStream.readable.pipeTo(stream.writable);\n this._writer = encoderStream.writable.getWriter();\n const read = () => {\n reader\n .read()\n .then(({ done, value }) => {\n if (done) {\n debug(\"session is closed\");\n return;\n }\n debug(\"received chunk: %o\", value);\n this.onPacket(value);\n read();\n })\n .catch((err) => {\n debug(\"an error occurred while reading: %s\", err);\n });\n };\n read();\n const packet = { type: \"open\" };\n if (this.query.sid) {\n packet.data = `{\"sid\":\"${this.query.sid}\"}`;\n }\n this._writer.write(packet).then(() => this.onOpen());\n });\n });\n }\n write(packets) {\n this.writable = false;\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n this._writer.write(packet).then(() => {\n if (lastPacket) {\n (0, globals_node_js_1.nextTick)(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n doClose() {\n var _a;\n (_a = this._transport) === null || _a === void 0 ? void 0 : _a.close();\n }\n}\nexports.WT = WT;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.pick = pick;\nexports.installTimerFunctions = installTimerFunctions;\nexports.byteLength = byteLength;\nexports.randomString = randomString;\nconst globals_node_js_1 = require(\"./globals.node.js\");\nfunction pick(obj, ...attr) {\n return attr.reduce((acc, k) => {\n if (obj.hasOwnProperty(k)) {\n acc[k] = obj[k];\n }\n return acc;\n }, {});\n}\n// Keep a reference to the real timeout functions so they can be used when overridden\nconst NATIVE_SET_TIMEOUT = globals_node_js_1.globalThisShim.setTimeout;\nconst NATIVE_CLEAR_TIMEOUT = globals_node_js_1.globalThisShim.clearTimeout;\nfunction installTimerFunctions(obj, opts) {\n if (opts.useNativeTimers) {\n obj.setTimeoutFn = NATIVE_SET_TIMEOUT.bind(globals_node_js_1.globalThisShim);\n obj.clearTimeoutFn = NATIVE_CLEAR_TIMEOUT.bind(globals_node_js_1.globalThisShim);\n }\n else {\n obj.setTimeoutFn = globals_node_js_1.globalThisShim.setTimeout.bind(globals_node_js_1.globalThisShim);\n obj.clearTimeoutFn = globals_node_js_1.globalThisShim.clearTimeout.bind(globals_node_js_1.globalThisShim);\n }\n}\n// base64 encoded buffers are about 33% bigger (https://en.wikipedia.org/wiki/Base64)\nconst BASE64_OVERHEAD = 1.33;\n// we could also have used `new Blob([obj]).size`, but it isn't supported in IE9\nfunction byteLength(obj) {\n if (typeof obj === \"string\") {\n return utf8Length(obj);\n }\n // arraybuffer or blob\n return Math.ceil((obj.byteLength || obj.size) * BASE64_OVERHEAD);\n}\nfunction utf8Length(str) {\n let c = 0, length = 0;\n for (let i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n length += 1;\n }\n else if (c < 0x800) {\n length += 2;\n }\n else if (c < 0xd800 || c >= 0xe000) {\n length += 3;\n }\n else {\n i++;\n length += 4;\n }\n }\n return length;\n}\n/**\n * Generates a random 8-characters string.\n */\nfunction randomString() {\n return (Date.now().toString(36).substring(3) +\n Math.random().toString(36).substring(2, 5));\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ERROR_PACKET = exports.PACKET_TYPES_REVERSE = exports.PACKET_TYPES = void 0;\nconst PACKET_TYPES = Object.create(null); // no Map = no polyfill\nexports.PACKET_TYPES = PACKET_TYPES;\nPACKET_TYPES[\"open\"] = \"0\";\nPACKET_TYPES[\"close\"] = \"1\";\nPACKET_TYPES[\"ping\"] = \"2\";\nPACKET_TYPES[\"pong\"] = \"3\";\nPACKET_TYPES[\"message\"] = \"4\";\nPACKET_TYPES[\"upgrade\"] = \"5\";\nPACKET_TYPES[\"noop\"] = \"6\";\nconst PACKET_TYPES_REVERSE = Object.create(null);\nexports.PACKET_TYPES_REVERSE = PACKET_TYPES_REVERSE;\nObject.keys(PACKET_TYPES).forEach(key => {\n PACKET_TYPES_REVERSE[PACKET_TYPES[key]] = key;\n});\nconst ERROR_PACKET = { type: \"error\", data: \"parser error\" };\nexports.ERROR_PACKET = ERROR_PACKET;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decode = exports.encode = void 0;\n// imported from https://github.com/socketio/base64-arraybuffer\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nconst encode = (arraybuffer) => {\n let bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n }\n else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n};\nexports.encode = encode;\nconst decode = (base64) => {\n let bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n const arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return arraybuffer;\n};\nexports.decode = decode;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodePacket = void 0;\nconst commons_js_1 = require(\"./commons.js\");\nconst base64_arraybuffer_js_1 = require(\"./contrib/base64-arraybuffer.js\");\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst decodePacket = (encodedPacket, binaryType) => {\n if (typeof encodedPacket !== \"string\") {\n return {\n type: \"message\",\n data: mapBinary(encodedPacket, binaryType)\n };\n }\n const type = encodedPacket.charAt(0);\n if (type === \"b\") {\n return {\n type: \"message\",\n data: decodeBase64Packet(encodedPacket.substring(1), binaryType)\n };\n }\n const packetType = commons_js_1.PACKET_TYPES_REVERSE[type];\n if (!packetType) {\n return commons_js_1.ERROR_PACKET;\n }\n return encodedPacket.length > 1\n ? {\n type: commons_js_1.PACKET_TYPES_REVERSE[type],\n data: encodedPacket.substring(1)\n }\n : {\n type: commons_js_1.PACKET_TYPES_REVERSE[type]\n };\n};\nexports.decodePacket = decodePacket;\nconst decodeBase64Packet = (data, binaryType) => {\n if (withNativeArrayBuffer) {\n const decoded = (0, base64_arraybuffer_js_1.decode)(data);\n return mapBinary(decoded, binaryType);\n }\n else {\n return { base64: true, data }; // fallback for old browsers\n }\n};\nconst mapBinary = (data, binaryType) => {\n switch (binaryType) {\n case \"blob\":\n if (data instanceof Blob) {\n // from WebSocket + binaryType \"blob\"\n return data;\n }\n else {\n // from HTTP long-polling or WebTransport\n return new Blob([data]);\n }\n case \"arraybuffer\":\n default:\n if (data instanceof ArrayBuffer) {\n // from HTTP long-polling (base64) or WebSocket + binaryType \"arraybuffer\"\n return data;\n }\n else {\n // from WebTransport (Uint8Array)\n return data.buffer;\n }\n }\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.encodePacket = exports.encodePacketToBinary = void 0;\nconst commons_js_1 = require(\"./commons.js\");\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n Object.prototype.toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\n// ArrayBuffer.isView method is not defined in IE10\nconst isView = obj => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj && obj.buffer instanceof ArrayBuffer;\n};\nconst encodePacket = ({ type, data }, supportsBinary, callback) => {\n if (withNativeBlob && data instanceof Blob) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(data, callback);\n }\n }\n else if (withNativeArrayBuffer &&\n (data instanceof ArrayBuffer || isView(data))) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(new Blob([data]), callback);\n }\n }\n // plain string\n return callback(commons_js_1.PACKET_TYPES[type] + (data || \"\"));\n};\nexports.encodePacket = encodePacket;\nconst encodeBlobAsBase64 = (data, callback) => {\n const fileReader = new FileReader();\n fileReader.onload = function () {\n const content = fileReader.result.split(\",\")[1];\n callback(\"b\" + (content || \"\"));\n };\n return fileReader.readAsDataURL(data);\n};\nfunction toArray(data) {\n if (data instanceof Uint8Array) {\n return data;\n }\n else if (data instanceof ArrayBuffer) {\n return new Uint8Array(data);\n }\n else {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n }\n}\nlet TEXT_ENCODER;\nfunction encodePacketToBinary(packet, callback) {\n if (withNativeBlob && packet.data instanceof Blob) {\n return packet.data\n .arrayBuffer()\n .then(toArray)\n .then(callback);\n }\n else if (withNativeArrayBuffer &&\n (packet.data instanceof ArrayBuffer || isView(packet.data))) {\n return callback(toArray(packet.data));\n }\n encodePacket(packet, false, encoded => {\n if (!TEXT_ENCODER) {\n TEXT_ENCODER = new TextEncoder();\n }\n callback(TEXT_ENCODER.encode(encoded));\n });\n}\nexports.encodePacketToBinary = encodePacketToBinary;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodePayload = exports.decodePacket = exports.encodePayload = exports.encodePacket = exports.protocol = exports.createPacketDecoderStream = exports.createPacketEncoderStream = void 0;\nconst encodePacket_js_1 = require(\"./encodePacket.js\");\nObject.defineProperty(exports, \"encodePacket\", { enumerable: true, get: function () { return encodePacket_js_1.encodePacket; } });\nconst decodePacket_js_1 = require(\"./decodePacket.js\");\nObject.defineProperty(exports, \"decodePacket\", { enumerable: true, get: function () { return decodePacket_js_1.decodePacket; } });\nconst commons_js_1 = require(\"./commons.js\");\nconst SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text\nconst encodePayload = (packets, callback) => {\n // some packets may be added to the array while encoding, so the initial length must be saved\n const length = packets.length;\n const encodedPackets = new Array(length);\n let count = 0;\n packets.forEach((packet, i) => {\n // force base64 encoding for binary packets\n (0, encodePacket_js_1.encodePacket)(packet, false, encodedPacket => {\n encodedPackets[i] = encodedPacket;\n if (++count === length) {\n callback(encodedPackets.join(SEPARATOR));\n }\n });\n });\n};\nexports.encodePayload = encodePayload;\nconst decodePayload = (encodedPayload, binaryType) => {\n const encodedPackets = encodedPayload.split(SEPARATOR);\n const packets = [];\n for (let i = 0; i < encodedPackets.length; i++) {\n const decodedPacket = (0, decodePacket_js_1.decodePacket)(encodedPackets[i], binaryType);\n packets.push(decodedPacket);\n if (decodedPacket.type === \"error\") {\n break;\n }\n }\n return packets;\n};\nexports.decodePayload = decodePayload;\nfunction createPacketEncoderStream() {\n return new TransformStream({\n transform(packet, controller) {\n (0, encodePacket_js_1.encodePacketToBinary)(packet, encodedPacket => {\n const payloadLength = encodedPacket.length;\n let header;\n // inspired by the WebSocket format: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#decoding_payload_length\n if (payloadLength < 126) {\n header = new Uint8Array(1);\n new DataView(header.buffer).setUint8(0, payloadLength);\n }\n else if (payloadLength < 65536) {\n header = new Uint8Array(3);\n const view = new DataView(header.buffer);\n view.setUint8(0, 126);\n view.setUint16(1, payloadLength);\n }\n else {\n header = new Uint8Array(9);\n const view = new DataView(header.buffer);\n view.setUint8(0, 127);\n view.setBigUint64(1, BigInt(payloadLength));\n }\n // first bit indicates whether the payload is plain text (0) or binary (1)\n if (packet.data && typeof packet.data !== \"string\") {\n header[0] |= 0x80;\n }\n controller.enqueue(header);\n controller.enqueue(encodedPacket);\n });\n }\n });\n}\nexports.createPacketEncoderStream = createPacketEncoderStream;\nlet TEXT_DECODER;\nfunction totalLength(chunks) {\n return chunks.reduce((acc, chunk) => acc + chunk.length, 0);\n}\nfunction concatChunks(chunks, size) {\n if (chunks[0].length === size) {\n return chunks.shift();\n }\n const buffer = new Uint8Array(size);\n let j = 0;\n for (let i = 0; i < size; i++) {\n buffer[i] = chunks[0][j++];\n if (j === chunks[0].length) {\n chunks.shift();\n j = 0;\n }\n }\n if (chunks.length && j < chunks[0].length) {\n chunks[0] = chunks[0].slice(j);\n }\n return buffer;\n}\nfunction createPacketDecoderStream(maxPayload, binaryType) {\n if (!TEXT_DECODER) {\n TEXT_DECODER = new TextDecoder();\n }\n const chunks = [];\n let state = 0 /* READ_HEADER */;\n let expectedLength = -1;\n let isBinary = false;\n return new TransformStream({\n transform(chunk, controller) {\n chunks.push(chunk);\n while (true) {\n if (state === 0 /* READ_HEADER */) {\n if (totalLength(chunks) < 1) {\n break;\n }\n const header = concatChunks(chunks, 1);\n isBinary = (header[0] & 0x80) === 0x80;\n expectedLength = header[0] & 0x7f;\n if (expectedLength < 126) {\n state = 3 /* READ_PAYLOAD */;\n }\n else if (expectedLength === 126) {\n state = 1 /* READ_EXTENDED_LENGTH_16 */;\n }\n else {\n state = 2 /* READ_EXTENDED_LENGTH_64 */;\n }\n }\n else if (state === 1 /* READ_EXTENDED_LENGTH_16 */) {\n if (totalLength(chunks) < 2) {\n break;\n }\n const headerArray = concatChunks(chunks, 2);\n expectedLength = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length).getUint16(0);\n state = 3 /* READ_PAYLOAD */;\n }\n else if (state === 2 /* READ_EXTENDED_LENGTH_64 */) {\n if (totalLength(chunks) < 8) {\n break;\n }\n const headerArray = concatChunks(chunks, 8);\n const view = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length);\n const n = view.getUint32(0);\n if (n > Math.pow(2, 53 - 32) - 1) {\n // the maximum safe integer in JavaScript is 2^53 - 1\n controller.enqueue(commons_js_1.ERROR_PACKET);\n break;\n }\n expectedLength = n * Math.pow(2, 32) + view.getUint32(4);\n state = 3 /* READ_PAYLOAD */;\n }\n else {\n if (totalLength(chunks) < expectedLength) {\n break;\n }\n const data = concatChunks(chunks, expectedLength);\n controller.enqueue((0, decodePacket_js_1.decodePacket)(isBinary ? data : TEXT_DECODER.decode(data), binaryType));\n state = 0 /* READ_HEADER */;\n }\n if (expectedLength === 0 || expectedLength > maxPayload) {\n controller.enqueue(commons_js_1.ERROR_PACKET);\n break;\n }\n }\n }\n });\n}\nexports.createPacketDecoderStream = createPacketDecoderStream;\nexports.protocol = 4;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.jwtDecode = exports.InvalidTokenError = void 0;\nclass InvalidTokenError extends Error {\n}\nexports.InvalidTokenError = InvalidTokenError;\nInvalidTokenError.prototype.name = \"InvalidTokenError\";\nfunction b64DecodeUnicode(str) {\n return decodeURIComponent(atob(str).replace(/(.)/g, (m, p) => {\n let code = p.charCodeAt(0).toString(16).toUpperCase();\n if (code.length < 2) {\n code = \"0\" + code;\n }\n return \"%\" + code;\n }));\n}\nfunction base64UrlDecode(str) {\n let output = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += \"==\";\n break;\n case 3:\n output += \"=\";\n break;\n default:\n throw new Error(\"base64 string is not of the correct length\");\n }\n try {\n return b64DecodeUnicode(output);\n }\n catch (err) {\n return atob(output);\n }\n}\nfunction jwtDecode(token, options) {\n if (typeof token !== \"string\") {\n throw new InvalidTokenError(\"Invalid token specified: must be a string\");\n }\n options || (options = {});\n const pos = options.header === true ? 0 : 1;\n const part = token.split(\".\")[pos];\n if (typeof part !== \"string\") {\n throw new InvalidTokenError(`Invalid token specified: missing part #${pos + 1}`);\n }\n let decoded;\n try {\n decoded = base64UrlDecode(part);\n }\n catch (e) {\n throw new InvalidTokenError(`Invalid token specified: invalid base64 for part #${pos + 1} (${e.message})`);\n }\n try {\n return JSON.parse(decoded);\n }\n catch (e) {\n throw new InvalidTokenError(`Invalid token specified: invalid json for part #${pos + 1} (${e.message})`);\n }\n}\nexports.jwtDecode = jwtDecode;\n","\"use strict\";\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Backoff = Backoff;\nfunction Backoff(opts) {\n opts = opts || {};\n this.ms = opts.min || 100;\n this.max = opts.max || 10000;\n this.factor = opts.factor || 2;\n this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n this.attempts = 0;\n}\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\nBackoff.prototype.duration = function () {\n var ms = this.ms * Math.pow(this.factor, this.attempts++);\n if (this.jitter) {\n var rand = Math.random();\n var deviation = Math.floor(rand * this.jitter * ms);\n ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;\n }\n return Math.min(ms, this.max) | 0;\n};\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\nBackoff.prototype.reset = function () {\n this.attempts = 0;\n};\n/**\n * Set the minimum duration\n *\n * @api public\n */\nBackoff.prototype.setMin = function (min) {\n this.ms = min;\n};\n/**\n * Set the maximum duration\n *\n * @api public\n */\nBackoff.prototype.setMax = function (max) {\n this.max = max;\n};\n/**\n * Set the jitter\n *\n * @api public\n */\nBackoff.prototype.setJitter = function (jitter) {\n this.jitter = jitter;\n};\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WebTransport = exports.WebSocket = exports.NodeWebSocket = exports.XHR = exports.NodeXHR = exports.Fetch = exports.Socket = exports.Manager = exports.protocol = void 0;\nexports.io = lookup;\nexports.connect = lookup;\nexports.default = lookup;\nconst url_js_1 = require(\"./url.js\");\nconst manager_js_1 = require(\"./manager.js\");\nObject.defineProperty(exports, \"Manager\", { enumerable: true, get: function () { return manager_js_1.Manager; } });\nconst socket_js_1 = require(\"./socket.js\");\nObject.defineProperty(exports, \"Socket\", { enumerable: true, get: function () { return socket_js_1.Socket; } });\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"socket.io-client\"); // debug()\n/**\n * Managers cache.\n */\nconst cache = {};\nfunction lookup(uri, opts) {\n if (typeof uri === \"object\") {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n const parsed = (0, url_js_1.url)(uri, opts.path || \"/socket.io\");\n const source = parsed.source;\n const id = parsed.id;\n const path = parsed.path;\n const sameNamespace = cache[id] && path in cache[id][\"nsps\"];\n const newConnection = opts.forceNew ||\n opts[\"force new connection\"] ||\n false === opts.multiplex ||\n sameNamespace;\n let io;\n if (newConnection) {\n debug(\"ignoring socket cache for %s\", source);\n io = new manager_js_1.Manager(source, opts);\n }\n else {\n if (!cache[id]) {\n debug(\"new io instance for %s\", source);\n cache[id] = new manager_js_1.Manager(source, opts);\n }\n io = cache[id];\n }\n if (parsed.query && !opts.query) {\n opts.query = parsed.queryKey;\n }\n return io.socket(parsed.path, opts);\n}\n// so that \"lookup\" can be used both as a function (e.g. `io(...)`) and as a\n// namespace (e.g. `io.connect(...)`), for backward compatibility\nObject.assign(lookup, {\n Manager: manager_js_1.Manager,\n Socket: socket_js_1.Socket,\n io: lookup,\n connect: lookup,\n});\n/**\n * Protocol version.\n *\n * @public\n */\nvar socket_io_parser_1 = require(\"socket.io-parser\");\nObject.defineProperty(exports, \"protocol\", { enumerable: true, get: function () { return socket_io_parser_1.protocol; } });\nvar engine_io_client_1 = require(\"engine.io-client\");\nObject.defineProperty(exports, \"Fetch\", { enumerable: true, get: function () { return engine_io_client_1.Fetch; } });\nObject.defineProperty(exports, \"NodeXHR\", { enumerable: true, get: function () { return engine_io_client_1.NodeXHR; } });\nObject.defineProperty(exports, \"XHR\", { enumerable: true, get: function () { return engine_io_client_1.XHR; } });\nObject.defineProperty(exports, \"NodeWebSocket\", { enumerable: true, get: function () { return engine_io_client_1.NodeWebSocket; } });\nObject.defineProperty(exports, \"WebSocket\", { enumerable: true, get: function () { return engine_io_client_1.WebSocket; } });\nObject.defineProperty(exports, \"WebTransport\", { enumerable: true, get: function () { return engine_io_client_1.WebTransport; } });\n\nmodule.exports = lookup;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Manager = void 0;\nconst engine_io_client_1 = require(\"engine.io-client\");\nconst socket_js_1 = require(\"./socket.js\");\nconst parser = __importStar(require(\"socket.io-parser\"));\nconst on_js_1 = require(\"./on.js\");\nconst backo2_js_1 = require(\"./contrib/backo2.js\");\nconst component_emitter_1 = require(\"@socket.io/component-emitter\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"socket.io-client:manager\"); // debug()\nclass Manager extends component_emitter_1.Emitter {\n constructor(uri, opts) {\n var _a;\n super();\n this.nsps = {};\n this.subs = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n opts.path = opts.path || \"/socket.io\";\n this.opts = opts;\n (0, engine_io_client_1.installTimerFunctions)(this, opts);\n this.reconnection(opts.reconnection !== false);\n this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n this.reconnectionDelay(opts.reconnectionDelay || 1000);\n this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n this.randomizationFactor((_a = opts.randomizationFactor) !== null && _a !== void 0 ? _a : 0.5);\n this.backoff = new backo2_js_1.Backoff({\n min: this.reconnectionDelay(),\n max: this.reconnectionDelayMax(),\n jitter: this.randomizationFactor(),\n });\n this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n this._readyState = \"closed\";\n this.uri = uri;\n const _parser = opts.parser || parser;\n this.encoder = new _parser.Encoder();\n this.decoder = new _parser.Decoder();\n this._autoConnect = opts.autoConnect !== false;\n if (this._autoConnect)\n this.open();\n }\n reconnection(v) {\n if (!arguments.length)\n return this._reconnection;\n this._reconnection = !!v;\n if (!v) {\n this.skipReconnect = true;\n }\n return this;\n }\n reconnectionAttempts(v) {\n if (v === undefined)\n return this._reconnectionAttempts;\n this._reconnectionAttempts = v;\n return this;\n }\n reconnectionDelay(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelay;\n this._reconnectionDelay = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMin(v);\n return this;\n }\n randomizationFactor(v) {\n var _a;\n if (v === undefined)\n return this._randomizationFactor;\n this._randomizationFactor = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setJitter(v);\n return this;\n }\n reconnectionDelayMax(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelayMax;\n this._reconnectionDelayMax = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMax(v);\n return this;\n }\n timeout(v) {\n if (!arguments.length)\n return this._timeout;\n this._timeout = v;\n return this;\n }\n /**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @private\n */\n maybeReconnectOnOpen() {\n // Only try to reconnect if it's the first time we're connecting\n if (!this._reconnecting &&\n this._reconnection &&\n this.backoff.attempts === 0) {\n // keeps reconnection from firing twice for the same reconnection loop\n this.reconnect();\n }\n }\n /**\n * Sets the current transport `socket`.\n *\n * @param {Function} fn - optional, callback\n * @return self\n * @public\n */\n open(fn) {\n debug(\"readyState %s\", this._readyState);\n if (~this._readyState.indexOf(\"open\"))\n return this;\n debug(\"opening %s\", this.uri);\n this.engine = new engine_io_client_1.Socket(this.uri, this.opts);\n const socket = this.engine;\n const self = this;\n this._readyState = \"opening\";\n this.skipReconnect = false;\n // emit `open`\n const openSubDestroy = (0, on_js_1.on)(socket, \"open\", function () {\n self.onopen();\n fn && fn();\n });\n const onError = (err) => {\n debug(\"error\");\n this.cleanup();\n this._readyState = \"closed\";\n this.emitReserved(\"error\", err);\n if (fn) {\n fn(err);\n }\n else {\n // Only do this if there is no fn to handle the error\n this.maybeReconnectOnOpen();\n }\n };\n // emit `error`\n const errorSub = (0, on_js_1.on)(socket, \"error\", onError);\n if (false !== this._timeout) {\n const timeout = this._timeout;\n debug(\"connect attempt will timeout after %d\", timeout);\n // set timer\n const timer = this.setTimeoutFn(() => {\n debug(\"connect attempt timed out after %d\", timeout);\n openSubDestroy();\n onError(new Error(\"timeout\"));\n socket.close();\n }, timeout);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(() => {\n this.clearTimeoutFn(timer);\n });\n }\n this.subs.push(openSubDestroy);\n this.subs.push(errorSub);\n return this;\n }\n /**\n * Alias for open()\n *\n * @return self\n * @public\n */\n connect(fn) {\n return this.open(fn);\n }\n /**\n * Called upon transport open.\n *\n * @private\n */\n onopen() {\n debug(\"open\");\n // clear old subs\n this.cleanup();\n // mark as open\n this._readyState = \"open\";\n this.emitReserved(\"open\");\n // add new subs\n const socket = this.engine;\n this.subs.push((0, on_js_1.on)(socket, \"ping\", this.onping.bind(this)), (0, on_js_1.on)(socket, \"data\", this.ondata.bind(this)), (0, on_js_1.on)(socket, \"error\", this.onerror.bind(this)), (0, on_js_1.on)(socket, \"close\", this.onclose.bind(this)), \n // @ts-ignore\n (0, on_js_1.on)(this.decoder, \"decoded\", this.ondecoded.bind(this)));\n }\n /**\n * Called upon a ping.\n *\n * @private\n */\n onping() {\n this.emitReserved(\"ping\");\n }\n /**\n * Called with data.\n *\n * @private\n */\n ondata(data) {\n try {\n this.decoder.add(data);\n }\n catch (e) {\n this.onclose(\"parse error\", e);\n }\n }\n /**\n * Called when parser fully decodes a packet.\n *\n * @private\n */\n ondecoded(packet) {\n // the nextTick call prevents an exception in a user-provided event listener from triggering a disconnection due to a \"parse error\"\n (0, engine_io_client_1.nextTick)(() => {\n this.emitReserved(\"packet\", packet);\n }, this.setTimeoutFn);\n }\n /**\n * Called upon socket error.\n *\n * @private\n */\n onerror(err) {\n debug(\"error\", err);\n this.emitReserved(\"error\", err);\n }\n /**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @public\n */\n socket(nsp, opts) {\n let socket = this.nsps[nsp];\n if (!socket) {\n socket = new socket_js_1.Socket(this, nsp, opts);\n this.nsps[nsp] = socket;\n }\n else if (this._autoConnect && !socket.active) {\n socket.connect();\n }\n return socket;\n }\n /**\n * Called upon a socket close.\n *\n * @param socket\n * @private\n */\n _destroy(socket) {\n const nsps = Object.keys(this.nsps);\n for (const nsp of nsps) {\n const socket = this.nsps[nsp];\n if (socket.active) {\n debug(\"socket %s is still active, skipping close\", nsp);\n return;\n }\n }\n this._close();\n }\n /**\n * Writes a packet.\n *\n * @param packet\n * @private\n */\n _packet(packet) {\n debug(\"writing packet %j\", packet);\n const encodedPackets = this.encoder.encode(packet);\n for (let i = 0; i < encodedPackets.length; i++) {\n this.engine.write(encodedPackets[i], packet.options);\n }\n }\n /**\n * Clean up transport subscriptions and packet buffer.\n *\n * @private\n */\n cleanup() {\n debug(\"cleanup\");\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs.length = 0;\n this.decoder.destroy();\n }\n /**\n * Close the current socket.\n *\n * @private\n */\n _close() {\n debug(\"disconnect\");\n this.skipReconnect = true;\n this._reconnecting = false;\n this.onclose(\"forced close\");\n }\n /**\n * Alias for close()\n *\n * @private\n */\n disconnect() {\n return this._close();\n }\n /**\n * Called when:\n *\n * - the low-level engine is closed\n * - the parser encountered a badly formatted packet\n * - all sockets are disconnected\n *\n * @private\n */\n onclose(reason, description) {\n var _a;\n debug(\"closed due to %s\", reason);\n this.cleanup();\n (_a = this.engine) === null || _a === void 0 ? void 0 : _a.close();\n this.backoff.reset();\n this._readyState = \"closed\";\n this.emitReserved(\"close\", reason, description);\n if (this._reconnection && !this.skipReconnect) {\n this.reconnect();\n }\n }\n /**\n * Attempt a reconnection.\n *\n * @private\n */\n reconnect() {\n if (this._reconnecting || this.skipReconnect)\n return this;\n const self = this;\n if (this.backoff.attempts >= this._reconnectionAttempts) {\n debug(\"reconnect failed\");\n this.backoff.reset();\n this.emitReserved(\"reconnect_failed\");\n this._reconnecting = false;\n }\n else {\n const delay = this.backoff.duration();\n debug(\"will wait %dms before reconnect attempt\", delay);\n this._reconnecting = true;\n const timer = this.setTimeoutFn(() => {\n if (self.skipReconnect)\n return;\n debug(\"attempting reconnect\");\n this.emitReserved(\"reconnect_attempt\", self.backoff.attempts);\n // check again for the case socket closed in above events\n if (self.skipReconnect)\n return;\n self.open((err) => {\n if (err) {\n debug(\"reconnect attempt error\");\n self._reconnecting = false;\n self.reconnect();\n this.emitReserved(\"reconnect_error\", err);\n }\n else {\n debug(\"reconnect success\");\n self.onreconnect();\n }\n });\n }, delay);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(() => {\n this.clearTimeoutFn(timer);\n });\n }\n }\n /**\n * Called upon successful reconnect.\n *\n * @private\n */\n onreconnect() {\n const attempt = this.backoff.attempts;\n this._reconnecting = false;\n this.backoff.reset();\n this.emitReserved(\"reconnect\", attempt);\n }\n}\nexports.Manager = Manager;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.on = on;\nfunction on(obj, ev, fn) {\n obj.on(ev, fn);\n return function subDestroy() {\n obj.off(ev, fn);\n };\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Socket = void 0;\nconst socket_io_parser_1 = require(\"socket.io-parser\");\nconst on_js_1 = require(\"./on.js\");\nconst component_emitter_1 = require(\"@socket.io/component-emitter\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"socket.io-client:socket\"); // debug()\n/**\n * Internal events.\n * These events can't be emitted by the user.\n */\nconst RESERVED_EVENTS = Object.freeze({\n connect: 1,\n connect_error: 1,\n disconnect: 1,\n disconnecting: 1,\n // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener\n newListener: 1,\n removeListener: 1,\n});\n/**\n * A Socket is the fundamental class for interacting with the server.\n *\n * A Socket belongs to a certain Namespace (by default /) and uses an underlying {@link Manager} to communicate.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(\"connected\");\n * });\n *\n * // send an event to the server\n * socket.emit(\"foo\", \"bar\");\n *\n * socket.on(\"foobar\", () => {\n * // an event was received from the server\n * });\n *\n * // upon disconnection\n * socket.on(\"disconnect\", (reason) => {\n * console.log(`disconnected due to ${reason}`);\n * });\n */\nclass Socket extends component_emitter_1.Emitter {\n /**\n * `Socket` constructor.\n */\n constructor(io, nsp, opts) {\n super();\n /**\n * Whether the socket is currently connected to the server.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.connected); // true\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.connected); // false\n * });\n */\n this.connected = false;\n /**\n * Whether the connection state was recovered after a temporary disconnection. In that case, any missed packets will\n * be transmitted by the server.\n */\n this.recovered = false;\n /**\n * Buffer for packets received before the CONNECT packet\n */\n this.receiveBuffer = [];\n /**\n * Buffer for packets that will be sent once the socket is connected\n */\n this.sendBuffer = [];\n /**\n * The queue of packets to be sent with retry in case of failure.\n *\n * Packets are sent one by one, each waiting for the server acknowledgement, in order to guarantee the delivery order.\n * @private\n */\n this._queue = [];\n /**\n * A sequence to generate the ID of the {@link QueuedPacket}.\n * @private\n */\n this._queueSeq = 0;\n this.ids = 0;\n /**\n * A map containing acknowledgement handlers.\n *\n * The `withError` attribute is used to differentiate handlers that accept an error as first argument:\n *\n * - `socket.emit(\"test\", (err, value) => { ... })` with `ackTimeout` option\n * - `socket.timeout(5000).emit(\"test\", (err, value) => { ... })`\n * - `const value = await socket.emitWithAck(\"test\")`\n *\n * From those that don't:\n *\n * - `socket.emit(\"test\", (value) => { ... });`\n *\n * In the first case, the handlers will be called with an error when:\n *\n * - the timeout is reached\n * - the socket gets disconnected\n *\n * In the second case, the handlers will be simply discarded upon disconnection, since the client will never receive\n * an acknowledgement from the server.\n *\n * @private\n */\n this.acks = {};\n this.flags = {};\n this.io = io;\n this.nsp = nsp;\n if (opts && opts.auth) {\n this.auth = opts.auth;\n }\n this._opts = Object.assign({}, opts);\n if (this.io._autoConnect)\n this.open();\n }\n /**\n * Whether the socket is currently disconnected\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.disconnected); // false\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.disconnected); // true\n * });\n */\n get disconnected() {\n return !this.connected;\n }\n /**\n * Subscribe to open, close and packet events\n *\n * @private\n */\n subEvents() {\n if (this.subs)\n return;\n const io = this.io;\n this.subs = [\n (0, on_js_1.on)(io, \"open\", this.onopen.bind(this)),\n (0, on_js_1.on)(io, \"packet\", this.onpacket.bind(this)),\n (0, on_js_1.on)(io, \"error\", this.onerror.bind(this)),\n (0, on_js_1.on)(io, \"close\", this.onclose.bind(this)),\n ];\n }\n /**\n * Whether the Socket will try to reconnect when its Manager connects or reconnects.\n *\n * @example\n * const socket = io();\n *\n * console.log(socket.active); // true\n *\n * socket.on(\"disconnect\", (reason) => {\n * if (reason === \"io server disconnect\") {\n * // the disconnection was initiated by the server, you need to manually reconnect\n * console.log(socket.active); // false\n * }\n * // else the socket will automatically try to reconnect\n * console.log(socket.active); // true\n * });\n */\n get active() {\n return !!this.subs;\n }\n /**\n * \"Opens\" the socket.\n *\n * @example\n * const socket = io({\n * autoConnect: false\n * });\n *\n * socket.connect();\n */\n connect() {\n if (this.connected)\n return this;\n this.subEvents();\n if (!this.io[\"_reconnecting\"])\n this.io.open(); // ensure open\n if (\"open\" === this.io._readyState)\n this.onopen();\n return this;\n }\n /**\n * Alias for {@link connect()}.\n */\n open() {\n return this.connect();\n }\n /**\n * Sends a `message` event.\n *\n * This method mimics the WebSocket.send() method.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send\n *\n * @example\n * socket.send(\"hello\");\n *\n * // this is equivalent to\n * socket.emit(\"message\", \"hello\");\n *\n * @return self\n */\n send(...args) {\n args.unshift(\"message\");\n this.emit.apply(this, args);\n return this;\n }\n /**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @example\n * socket.emit(\"hello\", \"world\");\n *\n * // all serializable datastructures are supported (no need to call JSON.stringify)\n * socket.emit(\"hello\", 1, \"2\", { 3: [\"4\"], 5: Uint8Array.from([6]) });\n *\n * // with an acknowledgement from the server\n * socket.emit(\"hello\", \"world\", (val) => {\n * // ...\n * });\n *\n * @return self\n */\n emit(ev, ...args) {\n var _a, _b, _c;\n if (RESERVED_EVENTS.hasOwnProperty(ev)) {\n throw new Error('\"' + ev.toString() + '\" is a reserved event name');\n }\n args.unshift(ev);\n if (this._opts.retries && !this.flags.fromQueue && !this.flags.volatile) {\n this._addToQueue(args);\n return this;\n }\n const packet = {\n type: socket_io_parser_1.PacketType.EVENT,\n data: args,\n };\n packet.options = {};\n packet.options.compress = this.flags.compress !== false;\n // event ack callback\n if (\"function\" === typeof args[args.length - 1]) {\n const id = this.ids++;\n debug(\"emitting packet with ack id %d\", id);\n const ack = args.pop();\n this._registerAckCallback(id, ack);\n packet.id = id;\n }\n const isTransportWritable = (_b = (_a = this.io.engine) === null || _a === void 0 ? void 0 : _a.transport) === null || _b === void 0 ? void 0 : _b.writable;\n const isConnected = this.connected && !((_c = this.io.engine) === null || _c === void 0 ? void 0 : _c._hasPingExpired());\n const discardPacket = this.flags.volatile && !isTransportWritable;\n if (discardPacket) {\n debug(\"discard packet as the transport is not currently writable\");\n }\n else if (isConnected) {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n }\n else {\n this.sendBuffer.push(packet);\n }\n this.flags = {};\n return this;\n }\n /**\n * @private\n */\n _registerAckCallback(id, ack) {\n var _a;\n const timeout = (_a = this.flags.timeout) !== null && _a !== void 0 ? _a : this._opts.ackTimeout;\n if (timeout === undefined) {\n this.acks[id] = ack;\n return;\n }\n // @ts-ignore\n const timer = this.io.setTimeoutFn(() => {\n delete this.acks[id];\n for (let i = 0; i < this.sendBuffer.length; i++) {\n if (this.sendBuffer[i].id === id) {\n debug(\"removing packet with ack id %d from the buffer\", id);\n this.sendBuffer.splice(i, 1);\n }\n }\n debug(\"event with ack id %d has timed out after %d ms\", id, timeout);\n ack.call(this, new Error(\"operation has timed out\"));\n }, timeout);\n const fn = (...args) => {\n // @ts-ignore\n this.io.clearTimeoutFn(timer);\n ack.apply(this, args);\n };\n fn.withError = true;\n this.acks[id] = fn;\n }\n /**\n * Emits an event and waits for an acknowledgement\n *\n * @example\n * // without timeout\n * const response = await socket.emitWithAck(\"hello\", \"world\");\n *\n * // with a specific timeout\n * try {\n * const response = await socket.timeout(1000).emitWithAck(\"hello\", \"world\");\n * } catch (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n *\n * @return a Promise that will be fulfilled when the server acknowledges the event\n */\n emitWithAck(ev, ...args) {\n return new Promise((resolve, reject) => {\n const fn = (arg1, arg2) => {\n return arg1 ? reject(arg1) : resolve(arg2);\n };\n fn.withError = true;\n args.push(fn);\n this.emit(ev, ...args);\n });\n }\n /**\n * Add the packet to the queue.\n * @param args\n * @private\n */\n _addToQueue(args) {\n let ack;\n if (typeof args[args.length - 1] === \"function\") {\n ack = args.pop();\n }\n const packet = {\n id: this._queueSeq++,\n tryCount: 0,\n pending: false,\n args,\n flags: Object.assign({ fromQueue: true }, this.flags),\n };\n args.push((err, ...responseArgs) => {\n if (packet !== this._queue[0]) {\n return debug(\"packet [%d] already acknowledged\", packet.id);\n }\n const hasError = err !== null;\n if (hasError) {\n if (packet.tryCount > this._opts.retries) {\n debug(\"packet [%d] is discarded after %d tries\", packet.id, packet.tryCount);\n this._queue.shift();\n if (ack) {\n ack(err);\n }\n }\n }\n else {\n debug(\"packet [%d] was successfully sent\", packet.id);\n this._queue.shift();\n if (ack) {\n ack(null, ...responseArgs);\n }\n }\n packet.pending = false;\n return this._drainQueue();\n });\n this._queue.push(packet);\n this._drainQueue();\n }\n /**\n * Send the first packet of the queue, and wait for an acknowledgement from the server.\n * @param force - whether to resend a packet that has not been acknowledged yet\n *\n * @private\n */\n _drainQueue(force = false) {\n debug(\"draining queue\");\n if (!this.connected || this._queue.length === 0) {\n return;\n }\n const packet = this._queue[0];\n if (packet.pending && !force) {\n debug(\"packet [%d] has already been sent and is waiting for an ack\", packet.id);\n return;\n }\n packet.pending = true;\n packet.tryCount++;\n debug(\"sending packet [%d] (try n°%d)\", packet.id, packet.tryCount);\n this.flags = packet.flags;\n this.emit.apply(this, packet.args);\n }\n /**\n * Sends a packet.\n *\n * @param packet\n * @private\n */\n packet(packet) {\n packet.nsp = this.nsp;\n this.io._packet(packet);\n }\n /**\n * Called upon engine `open`.\n *\n * @private\n */\n onopen() {\n debug(\"transport is open - connecting\");\n if (typeof this.auth == \"function\") {\n this.auth((data) => {\n this._sendConnectPacket(data);\n });\n }\n else {\n this._sendConnectPacket(this.auth);\n }\n }\n /**\n * Sends a CONNECT packet to initiate the Socket.IO session.\n *\n * @param data\n * @private\n */\n _sendConnectPacket(data) {\n this.packet({\n type: socket_io_parser_1.PacketType.CONNECT,\n data: this._pid\n ? Object.assign({ pid: this._pid, offset: this._lastOffset }, data)\n : data,\n });\n }\n /**\n * Called upon engine or manager `error`.\n *\n * @param err\n * @private\n */\n onerror(err) {\n if (!this.connected) {\n this.emitReserved(\"connect_error\", err);\n }\n }\n /**\n * Called upon engine `close`.\n *\n * @param reason\n * @param description\n * @private\n */\n onclose(reason, description) {\n debug(\"close (%s)\", reason);\n this.connected = false;\n delete this.id;\n this.emitReserved(\"disconnect\", reason, description);\n this._clearAcks();\n }\n /**\n * Clears the acknowledgement handlers upon disconnection, since the client will never receive an acknowledgement from\n * the server.\n *\n * @private\n */\n _clearAcks() {\n Object.keys(this.acks).forEach((id) => {\n const isBuffered = this.sendBuffer.some((packet) => String(packet.id) === id);\n if (!isBuffered) {\n // note: handlers that do not accept an error as first argument are ignored here\n const ack = this.acks[id];\n delete this.acks[id];\n if (ack.withError) {\n ack.call(this, new Error(\"socket has been disconnected\"));\n }\n }\n });\n }\n /**\n * Called with socket packet.\n *\n * @param packet\n * @private\n */\n onpacket(packet) {\n const sameNamespace = packet.nsp === this.nsp;\n if (!sameNamespace)\n return;\n switch (packet.type) {\n case socket_io_parser_1.PacketType.CONNECT:\n if (packet.data && packet.data.sid) {\n this.onconnect(packet.data.sid, packet.data.pid);\n }\n else {\n this.emitReserved(\"connect_error\", new Error(\"It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)\"));\n }\n break;\n case socket_io_parser_1.PacketType.EVENT:\n case socket_io_parser_1.PacketType.BINARY_EVENT:\n this.onevent(packet);\n break;\n case socket_io_parser_1.PacketType.ACK:\n case socket_io_parser_1.PacketType.BINARY_ACK:\n this.onack(packet);\n break;\n case socket_io_parser_1.PacketType.DISCONNECT:\n this.ondisconnect();\n break;\n case socket_io_parser_1.PacketType.CONNECT_ERROR:\n this.destroy();\n const err = new Error(packet.data.message);\n // @ts-ignore\n err.data = packet.data.data;\n this.emitReserved(\"connect_error\", err);\n break;\n }\n }\n /**\n * Called upon a server event.\n *\n * @param packet\n * @private\n */\n onevent(packet) {\n const args = packet.data || [];\n debug(\"emitting event %j\", args);\n if (null != packet.id) {\n debug(\"attaching ack callback to event\");\n args.push(this.ack(packet.id));\n }\n if (this.connected) {\n this.emitEvent(args);\n }\n else {\n this.receiveBuffer.push(Object.freeze(args));\n }\n }\n emitEvent(args) {\n if (this._anyListeners && this._anyListeners.length) {\n const listeners = this._anyListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, args);\n }\n }\n super.emit.apply(this, args);\n if (this._pid && args.length && typeof args[args.length - 1] === \"string\") {\n this._lastOffset = args[args.length - 1];\n }\n }\n /**\n * Produces an ack callback to emit with an event.\n *\n * @private\n */\n ack(id) {\n const self = this;\n let sent = false;\n return function (...args) {\n // prevent double callbacks\n if (sent)\n return;\n sent = true;\n debug(\"sending ack %j\", args);\n self.packet({\n type: socket_io_parser_1.PacketType.ACK,\n id: id,\n data: args,\n });\n };\n }\n /**\n * Called upon a server acknowledgement.\n *\n * @param packet\n * @private\n */\n onack(packet) {\n const ack = this.acks[packet.id];\n if (typeof ack !== \"function\") {\n debug(\"bad ack %s\", packet.id);\n return;\n }\n delete this.acks[packet.id];\n debug(\"calling ack %s with %j\", packet.id, packet.data);\n // @ts-ignore FIXME ack is incorrectly inferred as 'never'\n if (ack.withError) {\n packet.data.unshift(null);\n }\n // @ts-ignore\n ack.apply(this, packet.data);\n }\n /**\n * Called upon server connect.\n *\n * @private\n */\n onconnect(id, pid) {\n debug(\"socket connected with id %s\", id);\n this.id = id;\n this.recovered = pid && this._pid === pid;\n this._pid = pid; // defined only if connection state recovery is enabled\n this.connected = true;\n this.emitBuffered();\n this._drainQueue(true);\n this.emitReserved(\"connect\");\n }\n /**\n * Emit buffered events (received and emitted).\n *\n * @private\n */\n emitBuffered() {\n this.receiveBuffer.forEach((args) => this.emitEvent(args));\n this.receiveBuffer = [];\n this.sendBuffer.forEach((packet) => {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n });\n this.sendBuffer = [];\n }\n /**\n * Called upon server disconnect.\n *\n * @private\n */\n ondisconnect() {\n debug(\"server disconnect (%s)\", this.nsp);\n this.destroy();\n this.onclose(\"io server disconnect\");\n }\n /**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @private\n */\n destroy() {\n if (this.subs) {\n // clean subscriptions to avoid reconnections\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs = undefined;\n }\n this.io[\"_destroy\"](this);\n }\n /**\n * Disconnects the socket manually. In that case, the socket will not try to reconnect.\n *\n * If this is the last active Socket instance of the {@link Manager}, the low-level connection will be closed.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"disconnect\", (reason) => {\n * // console.log(reason); prints \"io client disconnect\"\n * });\n *\n * socket.disconnect();\n *\n * @return self\n */\n disconnect() {\n if (this.connected) {\n debug(\"performing disconnect (%s)\", this.nsp);\n this.packet({ type: socket_io_parser_1.PacketType.DISCONNECT });\n }\n // remove socket from pool\n this.destroy();\n if (this.connected) {\n // fire events\n this.onclose(\"io client disconnect\");\n }\n return this;\n }\n /**\n * Alias for {@link disconnect()}.\n *\n * @return self\n */\n close() {\n return this.disconnect();\n }\n /**\n * Sets the compress flag.\n *\n * @example\n * socket.compress(false).emit(\"hello\");\n *\n * @param compress - if `true`, compresses the sending data\n * @return self\n */\n compress(compress) {\n this.flags.compress = compress;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the event message will be dropped when this socket is not\n * ready to send messages.\n *\n * @example\n * socket.volatile.emit(\"hello\"); // the server may or may not receive it\n *\n * @returns self\n */\n get volatile() {\n this.flags.volatile = true;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the callback will be called with an error when the\n * given number of milliseconds have elapsed without an acknowledgement from the server:\n *\n * @example\n * socket.timeout(5000).emit(\"my-event\", (err) => {\n * if (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n * });\n *\n * @returns self\n */\n timeout(timeout) {\n this.flags.timeout = timeout;\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * @example\n * socket.onAny((event, ...args) => {\n * console.log(`got ${event}`);\n * });\n *\n * @param listener\n */\n onAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * @example\n * socket.prependAny((event, ...args) => {\n * console.log(`got event ${event}`);\n * });\n *\n * @param listener\n */\n prependAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`got event ${event}`);\n * }\n *\n * socket.onAny(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAny(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAny();\n *\n * @param listener\n */\n offAny(listener) {\n if (!this._anyListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAny() {\n return this._anyListeners || [];\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.onAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n onAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.prependAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n prependAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`sent event ${event}`);\n * }\n *\n * socket.onAnyOutgoing(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAnyOutgoing(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAnyOutgoing();\n *\n * @param [listener] - the catch-all listener (optional)\n */\n offAnyOutgoing(listener) {\n if (!this._anyOutgoingListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyOutgoingListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyOutgoingListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAnyOutgoing() {\n return this._anyOutgoingListeners || [];\n }\n /**\n * Notify the listeners for each packet sent\n *\n * @param packet\n *\n * @private\n */\n notifyOutgoingListeners(packet) {\n if (this._anyOutgoingListeners && this._anyOutgoingListeners.length) {\n const listeners = this._anyOutgoingListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, packet.data);\n }\n }\n }\n}\nexports.Socket = Socket;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.url = url;\nconst engine_io_client_1 = require(\"engine.io-client\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"socket.io-client:url\"); // debug()\n/**\n * URL parser.\n *\n * @param uri - url\n * @param path - the request path of the connection\n * @param loc - An object meant to mimic window.location.\n * Defaults to window.location.\n * @public\n */\nfunction url(uri, path = \"\", loc) {\n let obj = uri;\n // default to window.location\n loc = loc || (typeof location !== \"undefined\" && location);\n if (null == uri)\n uri = loc.protocol + \"//\" + loc.host;\n // relative path support\n if (typeof uri === \"string\") {\n if (\"/\" === uri.charAt(0)) {\n if (\"/\" === uri.charAt(1)) {\n uri = loc.protocol + uri;\n }\n else {\n uri = loc.host + uri;\n }\n }\n if (!/^(https?|wss?):\\/\\//.test(uri)) {\n debug(\"protocol-less url %s\", uri);\n if (\"undefined\" !== typeof loc) {\n uri = loc.protocol + \"//\" + uri;\n }\n else {\n uri = \"https://\" + uri;\n }\n }\n // parse\n debug(\"parse %s\", uri);\n obj = (0, engine_io_client_1.parse)(uri);\n }\n // make sure we treat `localhost:80` and `localhost` equally\n if (!obj.port) {\n if (/^(http|ws)$/.test(obj.protocol)) {\n obj.port = \"80\";\n }\n else if (/^(http|ws)s$/.test(obj.protocol)) {\n obj.port = \"443\";\n }\n }\n obj.path = obj.path || \"/\";\n const ipv6 = obj.host.indexOf(\":\") !== -1;\n const host = ipv6 ? \"[\" + obj.host + \"]\" : obj.host;\n // define unique id\n obj.id = obj.protocol + \"://\" + host + \":\" + obj.port + path;\n // define href\n obj.href =\n obj.protocol +\n \"://\" +\n host +\n (loc && loc.port === obj.port ? \"\" : \":\" + obj.port);\n return obj;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reconstructPacket = exports.deconstructPacket = void 0;\nconst is_binary_js_1 = require(\"./is-binary.js\");\n/**\n * Replaces every Buffer | ArrayBuffer | Blob | File in packet with a numbered placeholder.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @public\n */\nfunction deconstructPacket(packet) {\n const buffers = [];\n const packetData = packet.data;\n const pack = packet;\n pack.data = _deconstructPacket(packetData, buffers);\n pack.attachments = buffers.length; // number of binary 'attachments'\n return { packet: pack, buffers: buffers };\n}\nexports.deconstructPacket = deconstructPacket;\nfunction _deconstructPacket(data, buffers) {\n if (!data)\n return data;\n if ((0, is_binary_js_1.isBinary)(data)) {\n const placeholder = { _placeholder: true, num: buffers.length };\n buffers.push(data);\n return placeholder;\n }\n else if (Array.isArray(data)) {\n const newData = new Array(data.length);\n for (let i = 0; i < data.length; i++) {\n newData[i] = _deconstructPacket(data[i], buffers);\n }\n return newData;\n }\n else if (typeof data === \"object\" && !(data instanceof Date)) {\n const newData = {};\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n newData[key] = _deconstructPacket(data[key], buffers);\n }\n }\n return newData;\n }\n return data;\n}\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @public\n */\nfunction reconstructPacket(packet, buffers) {\n packet.data = _reconstructPacket(packet.data, buffers);\n delete packet.attachments; // no longer useful\n return packet;\n}\nexports.reconstructPacket = reconstructPacket;\nfunction _reconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (data && data._placeholder === true) {\n const isIndexValid = typeof data.num === \"number\" &&\n data.num >= 0 &&\n data.num < buffers.length;\n if (isIndexValid) {\n return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n }\n else {\n throw new Error(\"illegal attachments\");\n }\n }\n else if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n data[i] = _reconstructPacket(data[i], buffers);\n }\n }\n else if (typeof data === \"object\") {\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n data[key] = _reconstructPacket(data[key], buffers);\n }\n }\n }\n return data;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Decoder = exports.Encoder = exports.PacketType = exports.protocol = void 0;\nconst component_emitter_1 = require(\"@socket.io/component-emitter\");\nconst binary_js_1 = require(\"./binary.js\");\nconst is_binary_js_1 = require(\"./is-binary.js\");\nconst debug_1 = require(\"debug\"); // debug()\nconst debug = (0, debug_1.default)(\"socket.io-parser\"); // debug()\n/**\n * These strings must not be used as event names, as they have a special meaning.\n */\nconst RESERVED_EVENTS = [\n \"connect\",\n \"connect_error\",\n \"disconnect\",\n \"disconnecting\",\n \"newListener\",\n \"removeListener\", // used by the Node.js EventEmitter\n];\n/**\n * Protocol version.\n *\n * @public\n */\nexports.protocol = 5;\nvar PacketType;\n(function (PacketType) {\n PacketType[PacketType[\"CONNECT\"] = 0] = \"CONNECT\";\n PacketType[PacketType[\"DISCONNECT\"] = 1] = \"DISCONNECT\";\n PacketType[PacketType[\"EVENT\"] = 2] = \"EVENT\";\n PacketType[PacketType[\"ACK\"] = 3] = \"ACK\";\n PacketType[PacketType[\"CONNECT_ERROR\"] = 4] = \"CONNECT_ERROR\";\n PacketType[PacketType[\"BINARY_EVENT\"] = 5] = \"BINARY_EVENT\";\n PacketType[PacketType[\"BINARY_ACK\"] = 6] = \"BINARY_ACK\";\n})(PacketType = exports.PacketType || (exports.PacketType = {}));\n/**\n * A socket.io Encoder instance\n */\nclass Encoder {\n /**\n * Encoder constructor\n *\n * @param {function} replacer - custom replacer to pass down to JSON.parse\n */\n constructor(replacer) {\n this.replacer = replacer;\n }\n /**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n */\n encode(obj) {\n debug(\"encoding packet %j\", obj);\n if (obj.type === PacketType.EVENT || obj.type === PacketType.ACK) {\n if ((0, is_binary_js_1.hasBinary)(obj)) {\n return this.encodeAsBinary({\n type: obj.type === PacketType.EVENT\n ? PacketType.BINARY_EVENT\n : PacketType.BINARY_ACK,\n nsp: obj.nsp,\n data: obj.data,\n id: obj.id,\n });\n }\n }\n return [this.encodeAsString(obj)];\n }\n /**\n * Encode packet as string.\n */\n encodeAsString(obj) {\n // first is type\n let str = \"\" + obj.type;\n // attachments if we have them\n if (obj.type === PacketType.BINARY_EVENT ||\n obj.type === PacketType.BINARY_ACK) {\n str += obj.attachments + \"-\";\n }\n // if we have a namespace other than `/`\n // we append it followed by a comma `,`\n if (obj.nsp && \"/\" !== obj.nsp) {\n str += obj.nsp + \",\";\n }\n // immediately followed by the id\n if (null != obj.id) {\n str += obj.id;\n }\n // json data\n if (null != obj.data) {\n str += JSON.stringify(obj.data, this.replacer);\n }\n debug(\"encoded %j as %s\", obj, str);\n return str;\n }\n /**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n */\n encodeAsBinary(obj) {\n const deconstruction = (0, binary_js_1.deconstructPacket)(obj);\n const pack = this.encodeAsString(deconstruction.packet);\n const buffers = deconstruction.buffers;\n buffers.unshift(pack); // add packet info to beginning of data list\n return buffers; // write all the buffers\n }\n}\nexports.Encoder = Encoder;\n// see https://stackoverflow.com/questions/8511281/check-if-a-value-is-an-object-in-javascript\nfunction isObject(value) {\n return Object.prototype.toString.call(value) === \"[object Object]\";\n}\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n */\nclass Decoder extends component_emitter_1.Emitter {\n /**\n * Decoder constructor\n *\n * @param {function} reviver - custom reviver to pass down to JSON.stringify\n */\n constructor(reviver) {\n super();\n this.reviver = reviver;\n }\n /**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n */\n add(obj) {\n let packet;\n if (typeof obj === \"string\") {\n if (this.reconstructor) {\n throw new Error(\"got plaintext data when reconstructing a packet\");\n }\n packet = this.decodeString(obj);\n const isBinaryEvent = packet.type === PacketType.BINARY_EVENT;\n if (isBinaryEvent || packet.type === PacketType.BINARY_ACK) {\n packet.type = isBinaryEvent ? PacketType.EVENT : PacketType.ACK;\n // binary packet's json\n this.reconstructor = new BinaryReconstructor(packet);\n // no attachments, labeled binary but no binary data to follow\n if (packet.attachments === 0) {\n super.emitReserved(\"decoded\", packet);\n }\n }\n else {\n // non-binary full packet\n super.emitReserved(\"decoded\", packet);\n }\n }\n else if ((0, is_binary_js_1.isBinary)(obj) || obj.base64) {\n // raw binary data\n if (!this.reconstructor) {\n throw new Error(\"got binary data when not reconstructing a packet\");\n }\n else {\n packet = this.reconstructor.takeBinaryData(obj);\n if (packet) {\n // received final buffer\n this.reconstructor = null;\n super.emitReserved(\"decoded\", packet);\n }\n }\n }\n else {\n throw new Error(\"Unknown type: \" + obj);\n }\n }\n /**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n */\n decodeString(str) {\n let i = 0;\n // look up type\n const p = {\n type: Number(str.charAt(0)),\n };\n if (PacketType[p.type] === undefined) {\n throw new Error(\"unknown packet type \" + p.type);\n }\n // look up attachments if type binary\n if (p.type === PacketType.BINARY_EVENT ||\n p.type === PacketType.BINARY_ACK) {\n const start = i + 1;\n while (str.charAt(++i) !== \"-\" && i != str.length) { }\n const buf = str.substring(start, i);\n if (buf != Number(buf) || str.charAt(i) !== \"-\") {\n throw new Error(\"Illegal attachments\");\n }\n p.attachments = Number(buf);\n }\n // look up namespace (if any)\n if (\"/\" === str.charAt(i + 1)) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (\",\" === c)\n break;\n if (i === str.length)\n break;\n }\n p.nsp = str.substring(start, i);\n }\n else {\n p.nsp = \"/\";\n }\n // look up id\n const next = str.charAt(i + 1);\n if (\"\" !== next && Number(next) == next) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (null == c || Number(c) != c) {\n --i;\n break;\n }\n if (i === str.length)\n break;\n }\n p.id = Number(str.substring(start, i + 1));\n }\n // look up json data\n if (str.charAt(++i)) {\n const payload = this.tryParse(str.substr(i));\n if (Decoder.isPayloadValid(p.type, payload)) {\n p.data = payload;\n }\n else {\n throw new Error(\"invalid payload\");\n }\n }\n debug(\"decoded %s as %j\", str, p);\n return p;\n }\n tryParse(str) {\n try {\n return JSON.parse(str, this.reviver);\n }\n catch (e) {\n return false;\n }\n }\n static isPayloadValid(type, payload) {\n switch (type) {\n case PacketType.CONNECT:\n return isObject(payload);\n case PacketType.DISCONNECT:\n return payload === undefined;\n case PacketType.CONNECT_ERROR:\n return typeof payload === \"string\" || isObject(payload);\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n return (Array.isArray(payload) &&\n (typeof payload[0] === \"number\" ||\n (typeof payload[0] === \"string\" &&\n RESERVED_EVENTS.indexOf(payload[0]) === -1)));\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n return Array.isArray(payload);\n }\n }\n /**\n * Deallocates a parser's resources\n */\n destroy() {\n if (this.reconstructor) {\n this.reconstructor.finishedReconstruction();\n this.reconstructor = null;\n }\n }\n}\nexports.Decoder = Decoder;\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n */\nclass BinaryReconstructor {\n constructor(packet) {\n this.packet = packet;\n this.buffers = [];\n this.reconPack = packet;\n }\n /**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n * a reconstructed packet object if all buffers have been received.\n */\n takeBinaryData(binData) {\n this.buffers.push(binData);\n if (this.buffers.length === this.reconPack.attachments) {\n // done with buffer list\n const packet = (0, binary_js_1.reconstructPacket)(this.reconPack, this.buffers);\n this.finishedReconstruction();\n return packet;\n }\n return null;\n }\n /**\n * Cleans up binary packet reconstruction variables.\n */\n finishedReconstruction() {\n this.reconPack = null;\n this.buffers = [];\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hasBinary = exports.isBinary = void 0;\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst isView = (obj) => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj.buffer instanceof ArrayBuffer;\n};\nconst toString = Object.prototype.toString;\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeFile = typeof File === \"function\" ||\n (typeof File !== \"undefined\" &&\n toString.call(File) === \"[object FileConstructor]\");\n/**\n * Returns true if obj is a Buffer, an ArrayBuffer, a Blob or a File.\n *\n * @private\n */\nfunction isBinary(obj) {\n return ((withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj))) ||\n (withNativeBlob && obj instanceof Blob) ||\n (withNativeFile && obj instanceof File));\n}\nexports.isBinary = isBinary;\nfunction hasBinary(obj, toJSON) {\n if (!obj || typeof obj !== \"object\") {\n return false;\n }\n if (Array.isArray(obj)) {\n for (let i = 0, l = obj.length; i < l; i++) {\n if (hasBinary(obj[i])) {\n return true;\n }\n }\n return false;\n }\n if (isBinary(obj)) {\n return true;\n }\n if (obj.toJSON &&\n typeof obj.toJSON === \"function\" &&\n arguments.length === 1) {\n return hasBinary(obj.toJSON(), true);\n }\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n return true;\n }\n }\n return false;\n}\nexports.hasBinary = hasBinary;\n","\"use strict\";\n/**\n * uuidv7: An experimental implementation of the proposed UUID Version 7\n *\n * @license Apache-2.0\n * @copyright 2021-2023 LiosK\n * @packageDocumentation\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.uuidv4obj = exports.uuidv4 = exports.uuidv7obj = exports.uuidv7 = exports.V7Generator = exports.UUID = void 0;\nconst DIGITS = \"0123456789abcdef\";\n/** Represents a UUID as a 16-byte byte array. */\nclass UUID {\n /** @param bytes - The 16-byte byte array representation. */\n constructor(bytes) {\n this.bytes = bytes;\n }\n /**\n * Creates an object from the internal representation, a 16-byte byte array\n * containing the binary UUID representation in the big-endian byte order.\n *\n * This method does NOT shallow-copy the argument, and thus the created object\n * holds the reference to the underlying buffer.\n *\n * @throws TypeError if the length of the argument is not 16.\n */\n static ofInner(bytes) {\n if (bytes.length !== 16) {\n throw new TypeError(\"not 128-bit length\");\n }\n else {\n return new UUID(bytes);\n }\n }\n /**\n * Builds a byte array from UUIDv7 field values.\n *\n * @param unixTsMs - A 48-bit `unix_ts_ms` field value.\n * @param randA - A 12-bit `rand_a` field value.\n * @param randBHi - The higher 30 bits of 62-bit `rand_b` field value.\n * @param randBLo - The lower 32 bits of 62-bit `rand_b` field value.\n * @throws RangeError if any field value is out of the specified range.\n */\n static fromFieldsV7(unixTsMs, randA, randBHi, randBLo) {\n if (!Number.isInteger(unixTsMs) ||\n !Number.isInteger(randA) ||\n !Number.isInteger(randBHi) ||\n !Number.isInteger(randBLo) ||\n unixTsMs < 0 ||\n randA < 0 ||\n randBHi < 0 ||\n randBLo < 0 ||\n unixTsMs > 281474976710655 ||\n randA > 0xfff ||\n randBHi > 1073741823 ||\n randBLo > 4294967295) {\n throw new RangeError(\"invalid field value\");\n }\n const bytes = new Uint8Array(16);\n bytes[0] = unixTsMs / 2 ** 40;\n bytes[1] = unixTsMs / 2 ** 32;\n bytes[2] = unixTsMs / 2 ** 24;\n bytes[3] = unixTsMs / 2 ** 16;\n bytes[4] = unixTsMs / 2 ** 8;\n bytes[5] = unixTsMs;\n bytes[6] = 0x70 | (randA >>> 8);\n bytes[7] = randA;\n bytes[8] = 0x80 | (randBHi >>> 24);\n bytes[9] = randBHi >>> 16;\n bytes[10] = randBHi >>> 8;\n bytes[11] = randBHi;\n bytes[12] = randBLo >>> 24;\n bytes[13] = randBLo >>> 16;\n bytes[14] = randBLo >>> 8;\n bytes[15] = randBLo;\n return new UUID(bytes);\n }\n /**\n * Builds a byte array from a string representation.\n *\n * This method accepts the following formats:\n *\n * - 32-digit hexadecimal format without hyphens: `0189dcd553117d408db09496a2eef37b`\n * - 8-4-4-4-12 hyphenated format: `0189dcd5-5311-7d40-8db0-9496a2eef37b`\n * - Hyphenated format with surrounding braces: `{0189dcd5-5311-7d40-8db0-9496a2eef37b}`\n * - RFC 4122 URN format: `urn:uuid:0189dcd5-5311-7d40-8db0-9496a2eef37b`\n *\n * Leading and trailing whitespaces represents an error.\n *\n * @throws SyntaxError if the argument could not parse as a valid UUID string.\n */\n static parse(uuid) {\n var _a, _b, _c, _d;\n let hex = undefined;\n switch (uuid.length) {\n case 32:\n hex = (_a = /^[0-9a-f]{32}$/i.exec(uuid)) === null || _a === void 0 ? void 0 : _a[0];\n break;\n case 36:\n hex =\n (_b = /^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i\n .exec(uuid)) === null || _b === void 0 ? void 0 : _b.slice(1, 6).join(\"\");\n break;\n case 38:\n hex =\n (_c = /^\\{([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})\\}$/i\n .exec(uuid)) === null || _c === void 0 ? void 0 : _c.slice(1, 6).join(\"\");\n break;\n case 45:\n hex =\n (_d = /^urn:uuid:([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i\n .exec(uuid)) === null || _d === void 0 ? void 0 : _d.slice(1, 6).join(\"\");\n break;\n default:\n break;\n }\n if (hex) {\n const inner = new Uint8Array(16);\n for (let i = 0; i < 16; i += 4) {\n const n = parseInt(hex.substring(2 * i, 2 * i + 8), 16);\n inner[i + 0] = n >>> 24;\n inner[i + 1] = n >>> 16;\n inner[i + 2] = n >>> 8;\n inner[i + 3] = n;\n }\n return new UUID(inner);\n }\n else {\n throw new SyntaxError(\"could not parse UUID string\");\n }\n }\n /**\n * @returns The 8-4-4-4-12 canonical hexadecimal string representation\n * (`0189dcd5-5311-7d40-8db0-9496a2eef37b`).\n */\n toString() {\n let text = \"\";\n for (let i = 0; i < this.bytes.length; i++) {\n text += DIGITS.charAt(this.bytes[i] >>> 4);\n text += DIGITS.charAt(this.bytes[i] & 0xf);\n if (i === 3 || i === 5 || i === 7 || i === 9) {\n text += \"-\";\n }\n }\n return text;\n }\n /**\n * @returns The 32-digit hexadecimal representation without hyphens\n * (`0189dcd553117d408db09496a2eef37b`).\n */\n toHex() {\n let text = \"\";\n for (let i = 0; i < this.bytes.length; i++) {\n text += DIGITS.charAt(this.bytes[i] >>> 4);\n text += DIGITS.charAt(this.bytes[i] & 0xf);\n }\n return text;\n }\n /** @returns The 8-4-4-4-12 canonical hexadecimal string representation. */\n toJSON() {\n return this.toString();\n }\n /**\n * Reports the variant field value of the UUID or, if appropriate, \"NIL\" or\n * \"MAX\".\n *\n * For convenience, this method reports \"NIL\" or \"MAX\" if `this` represents\n * the Nil or Max UUID, although the Nil and Max UUIDs are technically\n * subsumed under the variants `0b0` and `0b111`, respectively.\n */\n getVariant() {\n const n = this.bytes[8] >>> 4;\n if (n < 0) {\n throw new Error(\"unreachable\");\n }\n else if (n <= 0b0111) {\n return this.bytes.every((e) => e === 0) ? \"NIL\" : \"VAR_0\";\n }\n else if (n <= 0b1011) {\n return \"VAR_10\";\n }\n else if (n <= 0b1101) {\n return \"VAR_110\";\n }\n else if (n <= 0b1111) {\n return this.bytes.every((e) => e === 0xff) ? \"MAX\" : \"VAR_RESERVED\";\n }\n else {\n throw new Error(\"unreachable\");\n }\n }\n /**\n * Returns the version field value of the UUID or `undefined` if the UUID does\n * not have the variant field value of `0b10`.\n */\n getVersion() {\n return this.getVariant() === \"VAR_10\" ? this.bytes[6] >>> 4 : undefined;\n }\n /** Creates an object from `this`. */\n clone() {\n return new UUID(this.bytes.slice(0));\n }\n /** Returns true if `this` is equivalent to `other`. */\n equals(other) {\n return this.compareTo(other) === 0;\n }\n /**\n * Returns a negative integer, zero, or positive integer if `this` is less\n * than, equal to, or greater than `other`, respectively.\n */\n compareTo(other) {\n for (let i = 0; i < 16; i++) {\n const diff = this.bytes[i] - other.bytes[i];\n if (diff !== 0) {\n return Math.sign(diff);\n }\n }\n return 0;\n }\n}\nexports.UUID = UUID;\n/**\n * Encapsulates the monotonic counter state.\n *\n * This class provides APIs to utilize a separate counter state from that of the\n * global generator used by {@link uuidv7} and {@link uuidv7obj}. In addition to\n * the default {@link generate} method, this class has {@link generateOrAbort}\n * that is useful to absolutely guarantee the monotonically increasing order of\n * generated UUIDs. See their respective documentation for details.\n */\nclass V7Generator {\n /**\n * Creates a generator object with the default random number generator, or\n * with the specified one if passed as an argument. The specified random\n * number generator should be cryptographically strong and securely seeded.\n */\n constructor(randomNumberGenerator) {\n this.timestamp = 0;\n this.counter = 0;\n this.random = randomNumberGenerator !== null && randomNumberGenerator !== void 0 ? randomNumberGenerator : getDefaultRandom();\n }\n /**\n * Generates a new UUIDv7 object from the current timestamp, or resets the\n * generator upon significant timestamp rollback.\n *\n * This method returns a monotonically increasing UUID by reusing the previous\n * timestamp even if the up-to-date timestamp is smaller than the immediately\n * preceding UUID's. However, when such a clock rollback is considered\n * significant (i.e., by more than ten seconds), this method resets the\n * generator and returns a new UUID based on the given timestamp, breaking the\n * increasing order of UUIDs.\n *\n * See {@link generateOrAbort} for the other mode of generation and\n * {@link generateOrResetCore} for the low-level primitive.\n */\n generate() {\n return this.generateOrResetCore(Date.now(), 10000);\n }\n /**\n * Generates a new UUIDv7 object from the current timestamp, or returns\n * `undefined` upon significant timestamp rollback.\n *\n * This method returns a monotonically increasing UUID by reusing the previous\n * timestamp even if the up-to-date timestamp is smaller than the immediately\n * preceding UUID's. However, when such a clock rollback is considered\n * significant (i.e., by more than ten seconds), this method aborts and\n * returns `undefined` immediately.\n *\n * See {@link generate} for the other mode of generation and\n * {@link generateOrAbortCore} for the low-level primitive.\n */\n generateOrAbort() {\n return this.generateOrAbortCore(Date.now(), 10000);\n }\n /**\n * Generates a new UUIDv7 object from the `unixTsMs` passed, or resets the\n * generator upon significant timestamp rollback.\n *\n * This method is equivalent to {@link generate} except that it takes a custom\n * timestamp and clock rollback allowance.\n *\n * @param rollbackAllowance - The amount of `unixTsMs` rollback that is\n * considered significant. A suggested value is `10_000` (milliseconds).\n * @throws RangeError if `unixTsMs` is not a 48-bit positive integer.\n */\n generateOrResetCore(unixTsMs, rollbackAllowance) {\n let value = this.generateOrAbortCore(unixTsMs, rollbackAllowance);\n if (value === undefined) {\n // reset state and resume\n this.timestamp = 0;\n value = this.generateOrAbortCore(unixTsMs, rollbackAllowance);\n }\n return value;\n }\n /**\n * Generates a new UUIDv7 object from the `unixTsMs` passed, or returns\n * `undefined` upon significant timestamp rollback.\n *\n * This method is equivalent to {@link generateOrAbort} except that it takes a\n * custom timestamp and clock rollback allowance.\n *\n * @param rollbackAllowance - The amount of `unixTsMs` rollback that is\n * considered significant. A suggested value is `10_000` (milliseconds).\n * @throws RangeError if `unixTsMs` is not a 48-bit positive integer.\n */\n generateOrAbortCore(unixTsMs, rollbackAllowance) {\n const MAX_COUNTER = 4398046511103;\n if (!Number.isInteger(unixTsMs) ||\n unixTsMs < 1 ||\n unixTsMs > 281474976710655) {\n throw new RangeError(\"`unixTsMs` must be a 48-bit positive integer\");\n }\n else if (rollbackAllowance < 0 || rollbackAllowance > 281474976710655) {\n throw new RangeError(\"`rollbackAllowance` out of reasonable range\");\n }\n if (unixTsMs > this.timestamp) {\n this.timestamp = unixTsMs;\n this.resetCounter();\n }\n else if (unixTsMs + rollbackAllowance >= this.timestamp) {\n // go on with previous timestamp if new one is not much smaller\n this.counter++;\n if (this.counter > MAX_COUNTER) {\n // increment timestamp at counter overflow\n this.timestamp++;\n this.resetCounter();\n }\n }\n else {\n // abort if clock went backwards to unbearable extent\n return undefined;\n }\n return UUID.fromFieldsV7(this.timestamp, Math.trunc(this.counter / 2 ** 30), this.counter & (2 ** 30 - 1), this.random.nextUint32());\n }\n /** Initializes the counter at a 42-bit random integer. */\n resetCounter() {\n this.counter =\n this.random.nextUint32() * 0x400 + (this.random.nextUint32() & 0x3ff);\n }\n /**\n * Generates a new UUIDv4 object utilizing the random number generator inside.\n *\n * @internal\n */\n generateV4() {\n const bytes = new Uint8Array(Uint32Array.of(this.random.nextUint32(), this.random.nextUint32(), this.random.nextUint32(), this.random.nextUint32()).buffer);\n bytes[6] = 0x40 | (bytes[6] >>> 4);\n bytes[8] = 0x80 | (bytes[8] >>> 2);\n return UUID.ofInner(bytes);\n }\n}\nexports.V7Generator = V7Generator;\n/** Returns the default random number generator available in the environment. */\nconst getDefaultRandom = () => {\n // detect Web Crypto API\n if (typeof crypto !== \"undefined\" &&\n typeof crypto.getRandomValues !== \"undefined\") {\n return new BufferedCryptoRandom();\n }\n else {\n // fall back on Math.random() unless the flag is set to true\n if (typeof UUIDV7_DENY_WEAK_RNG !== \"undefined\" && UUIDV7_DENY_WEAK_RNG) {\n throw new Error(\"no cryptographically strong RNG available\");\n }\n return {\n nextUint32: () => Math.trunc(Math.random() * 65536) * 65536 +\n Math.trunc(Math.random() * 65536),\n };\n }\n};\n/**\n * Wraps `crypto.getRandomValues()` to enable buffering; this uses a small\n * buffer by default to avoid both unbearable throughput decline in some\n * environments and the waste of time and space for unused values.\n */\nclass BufferedCryptoRandom {\n constructor() {\n this.buffer = new Uint32Array(8);\n this.cursor = 0xffff;\n }\n nextUint32() {\n if (this.cursor >= this.buffer.length) {\n crypto.getRandomValues(this.buffer);\n this.cursor = 0;\n }\n return this.buffer[this.cursor++];\n }\n}\nlet defaultGenerator;\n/**\n * Generates a UUIDv7 string.\n *\n * @returns The 8-4-4-4-12 canonical hexadecimal string representation\n * (\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\").\n */\nconst uuidv7 = () => (0, exports.uuidv7obj)().toString();\nexports.uuidv7 = uuidv7;\n/** Generates a UUIDv7 object. */\nconst uuidv7obj = () => (defaultGenerator || (defaultGenerator = new V7Generator())).generate();\nexports.uuidv7obj = uuidv7obj;\n/**\n * Generates a UUIDv4 string.\n *\n * @returns The 8-4-4-4-12 canonical hexadecimal string representation\n * (\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\").\n */\nconst uuidv4 = () => (0, exports.uuidv4obj)().toString();\nexports.uuidv4 = uuidv4;\n/** Generates a UUIDv4 object. */\nconst uuidv4obj = () => (defaultGenerator || (defaultGenerator = new V7Generator())).generateV4();\nexports.uuidv4obj = uuidv4obj;\n","/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nexport function Emitter(obj) {\n if (obj) return mixin(obj);\n}\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n for (var key in Emitter.prototype) {\n obj[key] = Emitter.prototype[key];\n }\n return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\n .push(fn);\n return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function(event, fn){\n function on() {\n this.off(event, on);\n fn.apply(this, arguments);\n }\n\n on.fn = fn;\n this.on(event, on);\n return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n\n // all\n if (0 == arguments.length) {\n this._callbacks = {};\n return this;\n }\n\n // specific event\n var callbacks = this._callbacks['$' + event];\n if (!callbacks) return this;\n\n // remove all handlers\n if (1 == arguments.length) {\n delete this._callbacks['$' + event];\n return this;\n }\n\n // remove specific handler\n var cb;\n for (var i = 0; i < callbacks.length; i++) {\n cb = callbacks[i];\n if (cb === fn || cb.fn === fn) {\n callbacks.splice(i, 1);\n break;\n }\n }\n\n // Remove event specific arrays for event types that no\n // one is subscribed for to avoid memory leak.\n if (callbacks.length === 0) {\n delete this._callbacks['$' + event];\n }\n\n return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function(event){\n this._callbacks = this._callbacks || {};\n\n var args = new Array(arguments.length - 1)\n , callbacks = this._callbacks['$' + event];\n\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n\n if (callbacks) {\n callbacks = callbacks.slice(0);\n for (var i = 0, len = callbacks.length; i < len; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n\n return this;\n};\n\n// alias used for reserved events (protected method)\nEmitter.prototype.emitReserved = Emitter.prototype.emit;\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function(event){\n this._callbacks = this._callbacks || {};\n return this._callbacks['$' + event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function(event){\n return !! this.listeners(event).length;\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\tif (!(moduleId in __webpack_modules__)) {\n\t\tdelete __webpack_module_cache__[moduleId];\n\t\tvar e = new Error(\"Cannot find module '\" + moduleId + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./index.ts\");\n"],"names":["root","factory","exports","module","define","amd","a","i","self","Changeset","Retain","Skip","Insert","Builder","this","ops","addendum","removendum","prototype","keep","retain","len","push","delete","skip","str","length","add","insert","end","cs","inputLength","outputLength","Array","isArray","arguments","input","output","Object","create","constructor","value","enumerable","writable","configurable","TextTransform","ChangesetTransform","subrange","start","op","oplen","range","l","pos","Infinity","Math","max","derive","merge","otherCs","left","Error","newops","addPtr1","remPtr1","addPtr2","remPtr2","newaddendum","newremovendum","cs1","cs2","func","op2","op1","opstack1","map","clone","opstack2","min","shift","unshift","zip","substr","console","log","bind","newCs","transformAgainst","transformation","forEach","nextOp","writeOutput","readInput","apply","result","substract","changeset","invert","operation","inspect","j","string","symbol","join","pack","replace","toString","unpack","packed","components","split","opstring","matches","match","s","data","fromDiff","diff","d","inputCs","newRemovendum","newAddendum","addendumPointer","removendumPointer","ret","readAddendum","writeRemovendum","filter","concat","call","Operator","addPos","remPos","window","changesets","name","url","initText","snapshot","transform","side","compose","t","parseInt","formatArgs","args","useColors","namespace","humanize","c","color","splice","index","lastC","save","namespaces","storage","setItem","removeItem","error","load","r","getItem","process","env","DEBUG","type","__nwjs","navigator","userAgent","toLowerCase","document","documentElement","style","WebkitAppearance","firebug","exception","table","RegExp","$1","localStorage","localstorage","destroy","warned","warn","colors","debug","formatters","v","JSON","stringify","message","createDebug","prevTime","namespacesCache","enabledCache","enableOverride","enabled","curr","Number","Date","ms","prev","coerce","format","formatter","val","selectColor","extend","defineProperty","get","set","init","delimiter","newDebug","toNamespace","regexp","substring","default","stack","disable","names","skips","enable","slice","test","keys","key","hash","charCodeAt","abs","diff_match_patch","Diff_Timeout","Diff_EditCost","Diff_DualThreshold","Match_Threshold","Match_Distance","Patch_DeleteThreshold","Patch_Margin","Match_MaxBits","maxbits","oldi","newi","getMaxBits","DIFF_DELETE","patch_obj","diffs","start1","start2","length1","length2","diff_main","text1","text2","opt_checklines","checklines","commonlength","diff_commonPrefix","commonprefix","diff_commonSuffix","commonsuffix","diff_compute","diff_cleanupMerge","longtext","shorttext","indexOf","linearray","hm","diff_halfMatch","text1_a","text1_b","text2_a","text2_b","mid_common","diffs_a","diffs_b","diff_linesToChars","diff_map","diff_charsToLines","diff_cleanupSemantic","pointer","count_delete","count_insert","text_delete","text_insert","pop","lineArray","lineHash","diff_linesToCharsMunge","text","chars","lineStart","lineEnd","lineArrayLength","line","hasOwnProperty","undefined","String","fromCharCode","x","y","footstep","ms_end","getTime","text1_length","text2_length","max_d","doubleEnd","v_map1","v_map2","v1","v2","footsteps","done","front","k","charAt","diff_path1","diff_path2","v_map","path","last_op","pathLength","pointermin","pointermax","pointermid","pointerstart","floor","pointerend","dmp","diff_halfMatchI","best_longtext_a","best_longtext_b","best_shorttext_a","best_shorttext_b","seed","best_common","prefixLength","suffixLength","hm1","ceil","hm2","changes","equalities","equalitiesLength","lastequality","length_changes1","length_changes2","diff_cleanupSemanticLossless","punctuation","whitespace","linebreak","blanklineEnd","blanklineStart","diff_cleanupSemanticScore","one","two","score","equality1","edit","equality2","commonOffset","commonString","bestEquality1","bestEdit","bestEquality2","bestScore","diff_cleanupEfficiency","pre_ins","pre_del","post_ins","post_del","diff_xIndex","loc","chars1","chars2","last_chars1","last_chars2","diff_prettyHtml","html","diff_text1","diff_text2","diff_levenshtein","levenshtein","insertions","deletions","diff_toDelta","encodeURI","diff_fromDelta","delta","diffsLength","tokens","param","decodeURI","ex","n","isNaN","match_main","pattern","match_bitap","match_alphabet","match_bitapScore","e","accuracy","proximity","score_threshold","best_loc","lastIndexOf","bin_min","bin_mid","matchmask","last_rd","bin_max","finish","rd","charMatch","patch_addContext","patch","padding","prefix","suffix","patch_make","opt_b","opt_c","patches","patchDiffLength","char_count1","char_count2","prepatch_text","postpatch_text","diff_type","diff_text","patch_deepCopy","patchesCopy","patchCopy","patch_apply","nullPadding","patch_addPadding","patch_splitMax","results","start_loc","expected_loc","end_loc","index2","index1","mod","paddingLength","extraLength","bigpatch","patch_size","precontext","empty","postcontext","patch_toText","patch_fromText","textline","textPointer","m","sign","matchesTemplate","search","template","searchIndex","templateIndex","starIndex","matchIndex","trim","Boolean","ns","h","w","plural","msAbs","isPlural","round","options","exec","parseFloat","parse","isFinite","long","fmtShort","isBuffer","obj","keyIdentity","flatten","target","opts","maxDepth","transformKey","step","object","currentDepth","isarray","safe","isbuffer","isobject","newKey","unflatten","overwrite","getkey","parsedKey","reduce","isObject","isEmpty","keyPrefix","recipient","addKeys","key1","key2","segs","joinChar","isValid","isValidObject","isString","splitChar","separator","idx","prop","hasProp","isObjectObject","o","ctor","prot","__defProp","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","index_exports","all","__export","AccessTokenEvents","CheckSessionIFrame","DPoPState","ErrorResponse","ErrorTimeout","InMemoryWebStorage","IndexedDbDPoPStore","Log","Logger","MetadataService","OidcClient","OidcClientSettingsStore","SessionMonitor","SigninResponse","SigninState","SignoutResponse","State","User","UserManager","UserManagerSettingsStore","Version","WebStorageStateStore","to","from","except","desc","__copyProps","level","logger","Log2","nopLogger","info","reset","setLevel","setLogger","_Logger","_name","_format","_method","err","method","methodLogger","createStatic","staticMethod","staticLogger","import_jwt_decode","JwtUtils","decode","token","jwtDecode","generateSignedJwt","header","payload","privateKey","encodedToken","CryptoUtils","encodeBase64Url","TextEncoder","encode","signature","crypto","subtle","Uint8Array","toBase64","btoa","chr","_CryptoUtils","_randomWord","arr","Uint32Array","getRandomValues","generateUUIDv4","generateCodeVerifier","generateCodeChallenge","code_verifier","hashed","digest","generateBasicAuth","client_id","client_secret","alg","msgUint8","hashBuffer","customCalculateJwkThumbprint","jwk","jsonObject","kty","crv","utf8encodedAndHashed","generateDPoPProof","accessToken","httpMethod","keyPair","nonce","hashedToken","encodedHash","randomUUID","now","ath","publicJwk","exportKey","publicKey","TypeError","generateDPoPJkt","generateDPoPKeys","generateKey","namedCurve","Event","_callbacks","_logger","addHandler","cb","removeHandler","raise","ev","PopupUtils","center","features","_a","width","find","outerWidth","screenX","height","top","screenY","outerHeight","serialize","entries","Timer","_Timer","super","_timerHandle","_expiration","_callback","getEpochTime","cancel","durationInSeconds","logger2","expiration","timerDurationInSeconds","setInterval","clearInterval","UrlUtils","readParams","responseMode","params","URL","URLSearchParams","URL_STATE_DELIMITER","form","_b","_c","error_description","error_uri","state","userState","session_state","url_state","_expiringTimer","_expiredTimer","_expiringNotificationTimeInSeconds","expiringNotificationTimeInSeconds","container","access_token","expires_in","duration","expiring","expired","unload","addAccessTokenExpiring","removeAccessTokenExpiring","addAccessTokenExpired","removeAccessTokenExpired","_client_id","_intervalInSeconds","_stopOnError","_timer","_session_state","_message","origin","_frame_origin","source","_frame","contentWindow","stop","parsedUrl","createElement","visibility","position","src","href","Promise","resolve","onload","body","appendChild","addEventListener","send","postMessage","_data","clear","ErrorDPoPNonce","JsonService","additionalContentTypes","_jwtHandler","_extraHeaders","_contentTypes","fetchWithTimeout","timeoutInSeconds","initFetch","fetch","controller","AbortController","timeoutId","setTimeout","abort","signal","DOMException","clearTimeout","getJson","credentials","headers","response","_appendExtraHeaders","status","contentType","item","startsWith","throw","ok","json","statusText","postForm","basicAuth","initCredentials","extraHeaders","responseText","has","customKeys","protectedHeaders","preventOverride","headerName","includes","toLocaleLowerCase","content","_settings","_signingKeys","_metadata","_metadataUrl","metadataUrl","_jsonService","signingKeys","metadata","fetchRequestCredentials","_fetchRequestCredentials","resetSigningKeys","getMetadata","requestTimeoutInSeconds","assign","metadataSeed","getIssuer","_getMetadataProperty","getAuthorizationEndpoint","getUserInfoEndpoint","getTokenEndpoint","optional","getCheckSessionIframe","getEndSessionEndpoint","getRevocationEndpoint","getKeysEndpoint","getSigningKeys","jwks_uri","keySet","store","_store","_prefix","remove","getAllKeys","authority","response_type","scope","redirect_uri","post_logout_redirect_uri","client_authentication","prompt","display","max_age","ui_locales","acr_values","resource","response_mode","filterProtocolClaims","loadUserInfo","staleStateAgeInSeconds","mergeClaimsStrategy","array","disablePKCE","stateStore","revokeTokenAdditionalContentTypes","refreshTokenAllowedScope","extraQueryParams","extraTokenParams","dpop","omitScopeWhenRequesting","endsWith","UserInfoService","_metadataService","_getClaimsFromJwt","async","getClaims","claims","TokenClient","exchangeCode","grant_type","code","append","exchangeCredentials","exchangeRefreshToken","refresh_token","revoke","token_type_hint","ResponseValidator","_claimsService","_userInfoService","_tokenClient","validateSigninResponse","_processSigninState","_processCode","isOpenId","_validateIdTokenAttributes","_processClaims","skipUserInfo","validateCredentialsResponse","shouldValidateSubClaim","id_token","validateRefreshResponse","profile","hasIdToken","validateSignoutResponse","id","validateSub","sub","mergeClaims","tokenResponse","existingToken","incoming","existing","auth_time","azp","_State","created","request_type","toStorageString","fromStorageString","storageString","clearStaleState","age","cutoff","_SigninState","code_challenge","_SigninRequest","state_data","dpopJkt","optionalParams","searchParams","stateParam","SigninRequest","token_type","splitState","decodeURIComponent","expires_at","SignoutRequest","id_token_hint","DefaultProtocolClaims","InternalRequiredProtocolClaims","ClaimsService","protocolClaims","claim","claims1","claims2","values","mergedValues","settings","metadataService","_validator","createSigninRequest","request","request_uri","login_hint","signinRequest","signinState","readSigninResponseState","removeState","storedStateString","processSigninResponse","dpopProof","getDpopProof","dpopStore","dpopState","processResourceOwnerPasswordCredentials","username","password","signinResponse","useRefreshToken","allowableScopes","createSignoutRequest","signoutState","readSignoutResponseState","processSignoutResponse","revokeToken","_userManager","_start","user","_sub","_checkSessionIFrame","intervalInSeconds","checkSessionIntervalInSeconds","stopOnError","stopCheckSessionOnError","checkSessionIFrame","_stop","monitorAnonymousSession","timerHandle","session","querySessionStatus","tmpUser","raiseEvent","events","_raiseUserSessionChanged","_raiseUserSignedOut","_raiseUserSignedIn","addUserLoaded","addUserUnloaded","_init","catch","getUser","_User","scopes","messageSource","AbstractChildWindow","_abort","_disposeHandlers","Set","_window","navigate","location","keepOpen","reject","listener","scriptOrigin","_dispose","removeEventListener","channel","BroadcastChannel","close","reason","dispose","_notifyParent","parent","targetOrigin","msgData","DefaultPopupWindowFeatures","toolbar","closePopupWindowAfterInSeconds","DefaultPopupTarget","DefaultAccessTokenExpiringNotificationTimeInSeconds","DefaultCheckSessionIntervalInSeconds","popup_redirect_uri","popup_post_logout_redirect_uri","popupWindowFeatures","popupWindowTarget","redirectMethod","redirectTarget","iframeNotifyParentOrigin","iframeScriptOrigin","silent_redirect_uri","silentRequestTimeoutInSeconds","automaticSilentRenew","validateSubOnSilentRenew","includeIdTokenInSilentRenew","monitorSession","query_status_response_type","revokeTokenTypes","revokeTokensOnSignout","includeIdTokenInSilentSignout","accessTokenExpiringNotificationTimeInSeconds","userStore","sessionStorage","IFrameWindow","_IFrameWindow","_timeoutInSeconds","createHiddenIframe","iframe","timer","parentNode","_a2","frame","removeChild","notifyParent","IFrameNavigator","prepare","callback","PopupWindow","popupSignal","centeredPopup","open","closed","focus","popupClosedInterval","clearPopupClosedInterval","notifyOpener","opener","PopupNavigator","RedirectNavigator","targetWindow","redirect","promise","UserManagerEvents","_userLoaded","_userUnloaded","_silentRenewError","_userSignedIn","_userSignedOut","_userSessionChanged","removeUserLoaded","removeUserUnloaded","addSilentRenewError","removeSilentRenewError","_raiseSilentRenewError","addUserSignedIn","removeUserSignedIn","addUserSignedOut","removeUserSignedOut","addUserSessionChanged","removeUserSessionChanged","SilentRenewService","_isStarted","_retryTimer","_tokenExpiring","signinSilent","RefreshState","redirectNavigator","popupNavigator","iframeNavigator","_client","_redirectNavigator","_popupNavigator","_iframeNavigator","_events","_silentRenewService","startSilentRenew","_sessionMonitor","_loadUser","removeUser","storeUser","signinRedirect","requestArgs","bind_authorization_code","handle","_signinStart","signinRedirectCallback","_signinEnd","signinResourceOwnerCredentials","_buildUser","signinPopup","_signin","signinPopupCallback","_useRefreshToken","verifySub","signinSilentCallback","signinCallback","signoutCallback","signoutRedirectCallback","signoutPopupCallback","signoutSilentCallback","navResponse","signoutRedirect","_signoutStart","_signoutEnd","signoutPopup","_signout","_revokeInternal","signoutRequest","signoutResponse","signoutSilent","revokeTokens","types","typesPresent","stopSilentRenew","_userStoreKey","dpopSettings","dpopKeys","_dbName","_storeName","createStore","put","promisifyRequest","transaction","oncomplete","onsuccess","onabort","onerror","dbName","storeName","indexedDB","onupgradeneeded","createObjectStore","db","txMode","objectStore","deleteProperty","Reflect","isPrimitive","isPlainObject","validateKey","isUnsafeKey","fn","flat","toStringKey","arrays","preservePaths","createMemoKey","setValue","cache","memoize","sep","preserve","parts","part","number","isInteger","splitString","assignProp","next","Map","subscriptions","connections","connectionsInEstablishment","isPaused","connectionInterruptedSubscribers","messagesWhilePaused","getBearerToken","subscribeConnectionInterrupted","subscribe","readToken","handler","subId","connection","ensureConnection","subResult","emit","sendResult","unsubscribe","unsubscribeAll","pauseNotification","unpauseNotification","getWSAsync","opt","withCredentials","pathname","transports","auth","socket","io","on","sseChannel","currentObj","lastKey","linkedRecords","clientServerBus","actorId","clientId","createdAt","updatedAt","serverURL","observers","isInitialized","version","attrSubscription","getAttributeClientId","ensureUserIdIsKnown","then","aId","getDefaultValue","getDataTypeName","isAttributeId","getDataTypePrefix","facts","requestConfig","getCreatePayload","isJSON","responseBody","getId","getClientId","getServerURL","getDataURL","changeId","getValue","newValue","rawSet","change","rawChange","observer","serverState","forceReload","jsonBody","serializedValue","deserializeValue","onLoad","notifySubscribers","parsedData","attributeId","onServerMessage","handleQuotaViolationError","sendToServer","authorizationErrorHandler","handleConnectionError","fullChangeInfo","toJSON","BlobAttribute","Blob","formData","FormData","transmitChange","changeWithMetadata","doNotHandleExpiredSessions","KeyValueAttribute","flatOldValue","flatValue","actualChanges","success","KeyValueChange","fromJSON","fromString","aChange","other","mergedChanges","ch","inFlightOp","foreignChange","c2","c1","bridge","LongTextAttribute","buffer","changeInTransmission","changeInTransmissionSendAt","static","getLastChangeTransmittedMillisecondsAgo","serverApprovalTimeoutInMS","processApproval","processForeignChange","foreignChangeWithMetadata","transformedForeignChange","foreignChangeset","approval","bufferedChanges","diffEngine","LongTextChange","b","otherChange","subject","predicate","query","_","byId","AttributesRepository","getClientServerBus","attributeCache","idToAttribute","ignoreCache","attributeTypePrefix","AttributeClass","attributeTypes","attr","createKeyValue","createLongText","createBlob","attributeType","attribute","createAll","rawResult","resultBody","attrName","config","tmpResult","findAll","records","attributeResult","sort","findAndLoadAll","promises","compoundName","subscribeToQuery","onChange","bus","onPossibleChange","subscription","clearCache","rawFact","fq","record","deleteAll","publicClients","LinkedRecords","loginHandler","connectionLostHandler","unknownServerErrorHandler","quotaViolationErrorHandler","attributeClientIdSuffix","Attribute","Fact","oidcManager","qetQuotaPromise","getPublicClient","normalizedUrl","cached","oidcConfig","setConnectionLostHandler","setUnknownServerErrorHandler","setLoginHandler","login","autoHandleRedirect","deferUserInfoFetching","OIDCManager","getAccessToken","handleRedirectCallback","history","replaceState","title","getUserIdByEmail","email","resp","encodeURIComponent","isAuthorizedToSeeMemberOf","nodeId","getMembersOf","notVisibleToUser","getQuota","uId","fetchOpt","isOnRedirectUriRoute","skipWaitForUserId","absoluteUrl","mergedHeaders","Accept","withConnectionLostHandler","handleExpiredLoginSession","clonedResponse","handleAuthorizationError","handleUnknownServerError","setQuotaViolationErrorHandler","setAuthorizationErrorHandler","fetchUserInfo","fetchUserInfoPromise","userInfo","getCurrentUserEmail","logout","isAuthenticated","userManager","ready","redirectOriginPath","redirectUri","initialize","ru","providedAuthority","postLogoutRedirectUri","responseType","silentRedirectUri","useSessionStorage","clientIdToUse","base","audience","host","returnTo","hasCORS","XMLHttpRequest","qs","qry","pairs","pair","re","uri","ipv6uri","pathNames","queryKey","$0","$2","defaultBinaryType","globalThisShim","nextTick","createCookieJar","setTimeoutFn","Function","WebTransport","WebSocket","NodeWebSocket","XHR","NodeXHR","Fetch","installTimerFunctions","TransportError","Transport","protocol","SocketWithUpgrade","SocketWithoutUpgrade","Socket","socket_js_1","socket_js_2","transport_js_1","index_js_1","util_js_1","parseuri_js_1","globals_node_js_1","polling_fetch_js_1","polling_xhr_node_js_1","polling_xhr_js_1","websocket_node_js_1","WS","websocket_js_1","webtransport_js_1","WT","__importDefault","__esModule","parseqs_js_1","component_emitter_1","engine_io_parser_1","withEventListeners","OFFLINE_EVENT_LISTENERS","Emitter","binaryType","writeBuffer","_prevBufferLen","_pingInterval","_pingTimeout","_maxPayload","_pingTimeoutTime","parsedUri","hostname","secure","port","_transportsByName","transportName","agent","upgrade","timestampParam","rememberUpgrade","addTrailingSlash","rejectUnauthorized","perMessageDeflate","threshold","transportOptions","closeOnBeforeunload","_beforeunloadEventListener","transport","removeAllListeners","_offlineEventListener","_onClose","description","_cookieJar","_open","createTransport","EIO","sid","emitReserved","priorWebsocketSuccess","readyState","setTransport","_onDrain","_onPacket","_onError","onOpen","flush","packet","onHandshake","_sendPacket","_resetPingTimeout","pingInterval","pingTimeout","maxPayload","clearTimeoutFn","_pingTimeoutTimer","delay","autoUnref","unref","upgrading","packets","_getWritablePackets","payloadSize","byteLength","_hasPingExpired","hasExpired","write","msg","compress","once","cleanupAndClose","off","waitForUpgrade","tryAllTransports","_upgrades","_probe","failed","onTransportOpen","pause","cleanup","freezeTransport","onTransportClose","onclose","onupgrade","removeListener","_filterUpgrades","upgrades","filteredUpgrades","context","supportsBinary","forceBase64","onError","doOpen","doClose","onClose","onData","decodePacket","onPacket","details","onPause","createUri","schema","_hostname","_port","_query","encodedQuery","websocket","webtransport","polling","polling_js_1","Polling","doPoll","_fetch","res","doWrite","isPost","Headers","appendCookies","parseCookies","getSetCookie","Request","BaseXHR","has_cors_js_1","isSSL","xd","req","xhrStatus","pollXhr","createRequest","_opts","_uri","_create","pick","xdomain","xhr","_xhr","setDisableHeaderCheck","setRequestHeader","cookieJar","addCookies","requestTimeout","timeout","onreadystatechange","getResponseHeader","_onLoad","_index","requestsCount","requests","_cleanup","fromError","attachEvent","unloadHandler","terminationEvent","hasXHR2","newRequest","_polling","_poll","total","decodePayload","encodePayload","timestampRequests","randomString","b64","BaseWS","isReactNative","product","protocols","ws","createSocket","addEventListeners","onopen","_socket","closeEvent","onmessage","lastPacket","encodePacket","WebSocketCtor","MozWebSocket","_packet","_transport","createBidirectionalStream","stream","decoderStream","createPacketDecoderStream","MAX_SAFE_INTEGER","reader","readable","pipeThrough","getReader","encoderStream","createPacketEncoderStream","pipeTo","_writer","getWriter","read","acc","useNativeTimers","NATIVE_SET_TIMEOUT","NATIVE_CLEAR_TIMEOUT","utf8Length","size","random","ERROR_PACKET","PACKET_TYPES_REVERSE","PACKET_TYPES","lookup","arraybuffer","bytes","base64","encoded1","encoded2","encoded3","encoded4","bufferLength","p","ArrayBuffer","commons_js_1","base64_arraybuffer_js_1","withNativeArrayBuffer","encodedPacket","mapBinary","decodeBase64Packet","decoded","encodePacketToBinary","withNativeBlob","isView","encodeBlobAsBase64","fileReader","FileReader","readAsDataURL","toArray","byteOffset","TEXT_ENCODER","arrayBuffer","encoded","encodePacket_js_1","decodePacket_js_1","SEPARATOR","TEXT_DECODER","totalLength","chunks","chunk","concatChunks","encodedPackets","count","encodedPayload","decodedPacket","TransformStream","payloadLength","DataView","setUint8","view","setUint16","setBigUint64","BigInt","enqueue","TextDecoder","expectedLength","isBinary","headerArray","getUint16","getUint32","pow","InvalidTokenError","atob","toUpperCase","b64DecodeUnicode","base64UrlDecode","Backoff","factor","jitter","attempts","rand","deviation","setMin","setMax","setJitter","Manager","connect","url_js_1","manager_js_1","parsed","sameNamespace","forceNew","multiplex","socket_io_parser_1","engine_io_client_1","__createBinding","k2","__setModuleDefault","__importStar","parser","on_js_1","backo2_js_1","nsps","subs","reconnection","reconnectionAttempts","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","_readyState","_parser","encoder","Encoder","decoder","Decoder","_autoConnect","autoConnect","_reconnection","skipReconnect","_reconnectionAttempts","_reconnectionDelay","_randomizationFactor","_reconnectionDelayMax","_timeout","maybeReconnectOnOpen","_reconnecting","reconnect","engine","openSubDestroy","errorSub","onping","ondata","ondecoded","nsp","active","_destroy","_close","subDestroy","disconnect","onreconnect","attempt","RESERVED_EVENTS","freeze","connect_error","disconnecting","newListener","connected","recovered","receiveBuffer","sendBuffer","_queue","_queueSeq","ids","acks","flags","disconnected","subEvents","onpacket","retries","fromQueue","volatile","_addToQueue","PacketType","EVENT","ack","_registerAckCallback","isTransportWritable","isConnected","notifyOutgoingListeners","ackTimeout","withError","emitWithAck","arg1","arg2","tryCount","pending","responseArgs","_drainQueue","force","_sendConnectPacket","CONNECT","_pid","pid","offset","_lastOffset","_clearAcks","some","onconnect","BINARY_EVENT","onevent","ACK","BINARY_ACK","onack","DISCONNECT","ondisconnect","CONNECT_ERROR","emitEvent","_anyListeners","listeners","sent","emitBuffered","onAny","prependAny","offAny","listenersAny","onAnyOutgoing","_anyOutgoingListeners","prependAnyOutgoing","offAnyOutgoing","listenersAnyOutgoing","reconstructPacket","deconstructPacket","is_binary_js_1","_deconstructPacket","buffers","placeholder","_placeholder","num","newData","_reconstructPacket","packetData","attachments","binary_js_1","replacer","hasBinary","encodeAsString","encodeAsBinary","deconstruction","reviver","reconstructor","decodeString","isBinaryEvent","BinaryReconstructor","takeBinaryData","buf","tryParse","isPayloadValid","finishedReconstruction","reconPack","binData","withNativeFile","File","uuidv4obj","uuidv4","uuidv7obj","uuidv7","V7Generator","UUID","DIGITS","ofInner","fromFieldsV7","unixTsMs","randA","randBHi","randBLo","RangeError","uuid","_d","hex","inner","SyntaxError","toHex","getVariant","every","getVersion","equals","compareTo","randomNumberGenerator","timestamp","counter","getDefaultRandom","generate","generateOrResetCore","generateOrAbort","generateOrAbortCore","rollbackAllowance","resetCounter","trunc","nextUint32","generateV4","of","BufferedCryptoRandom","UUIDV7_DENY_WEAK_RNG","cursor","defaultGenerator","mixin","event","callbacks","hasListeners","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","definition","Symbol","toStringTag"],"sourceRoot":""}
1
+ {"version":3,"file":"browser_sdk.js","mappings":"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","sources":["webpack:///webpack/universalModuleDefinition","webpack:///../../node_modules/changesets/lib/Builder.js","webpack:///../../node_modules/changesets/lib/Changeset.js","webpack:///../../node_modules/changesets/lib/ChangesetTransform.js","webpack:///../../node_modules/changesets/lib/Operator.js","webpack:///../../node_modules/changesets/lib/TextTransform.js","webpack:///../../node_modules/changesets/lib/index.js","webpack:///../../node_modules/changesets/lib/operations/Insert.js","webpack:///../../node_modules/changesets/lib/operations/Retain.js","webpack:///../../node_modules/changesets/lib/operations/Skip.js","webpack:///../../node_modules/diff_match_patch/lib/diff_match_patch.js","webpack:///../../node_modules/engine.io-client/node_modules/debug/src/browser.js","webpack:///../../node_modules/engine.io-client/node_modules/debug/src/common.js","webpack:///../../node_modules/engine.io-client/node_modules/ms/index.js","webpack:///../../node_modules/flat/index.js","webpack:///../../node_modules/get-value/index.js","webpack:///../../node_modules/is-plain-object/index.js","webpack:///../../node_modules/is-primitive/index.js","webpack:///../../node_modules/isobject/index.js","webpack:///../../node_modules/oidc-client-ts/dist/umd/oidc-client-ts.js","webpack:///../../node_modules/set-value/index.js","webpack:///../../node_modules/socket.io-client/node_modules/debug/src/browser.js","webpack:///../../node_modules/socket.io-client/node_modules/debug/src/common.js","webpack:///../../node_modules/socket.io-client/node_modules/ms/index.js","webpack:///../../node_modules/socket.io-parser/node_modules/debug/src/browser.js","webpack:///../../node_modules/socket.io-parser/node_modules/debug/src/common.js","webpack:///../../node_modules/socket.io-parser/node_modules/ms/index.js","webpack:///../../lib/client-server-bus/client/index.ts","webpack:///../../lib/client-server-bus/drivers/ws/client/index.ts","webpack:///../../lib/utils/all_prefixes.ts","webpack:///../../lib/utils/unset.ts","webpack:///../attributes/abstract/abstract_attribute_client.ts","webpack:///../attributes/abstract/serialized_change_with_metadata.ts","webpack:///../attributes/blob/client/index.ts","webpack:///../attributes/key_value/client/index.ts","webpack:///../attributes/key_value/key_value_change.ts","webpack:///../attributes/long_text/client/buffer.ts","webpack:///../attributes/long_text/client/index.ts","webpack:///../attributes/long_text/long_text_change.ts","webpack:///../facts/client/index.ts","webpack:///./attributes_repository.ts","webpack:///./facts_repository.ts","webpack:///./index.ts","webpack:///./oidc.ts","webpack:///../../node_modules/engine.io-client/build/cjs/contrib/has-cors.js","webpack:///../../node_modules/engine.io-client/build/cjs/contrib/parseqs.js","webpack:///../../node_modules/engine.io-client/build/cjs/contrib/parseuri.js","webpack:///../../node_modules/engine.io-client/build/cjs/globals.js","webpack:///../../node_modules/engine.io-client/build/cjs/index.js","webpack:///../../node_modules/engine.io-client/build/cjs/socket.js","webpack:///../../node_modules/engine.io-client/build/cjs/transport.js","webpack:///../../node_modules/engine.io-client/build/cjs/transports/index.js","webpack:///../../node_modules/engine.io-client/build/cjs/transports/polling-fetch.js","webpack:///../../node_modules/engine.io-client/build/cjs/transports/polling-xhr.js","webpack:///../../node_modules/engine.io-client/build/cjs/transports/polling.js","webpack:///../../node_modules/engine.io-client/build/cjs/transports/websocket.js","webpack:///../../node_modules/engine.io-client/build/cjs/transports/webtransport.js","webpack:///../../node_modules/engine.io-client/build/cjs/util.js","webpack:///../../node_modules/engine.io-parser/build/cjs/commons.js","webpack:///../../node_modules/engine.io-parser/build/cjs/contrib/base64-arraybuffer.js","webpack:///../../node_modules/engine.io-parser/build/cjs/decodePacket.browser.js","webpack:///../../node_modules/engine.io-parser/build/cjs/encodePacket.browser.js","webpack:///../../node_modules/engine.io-parser/build/cjs/index.js","webpack:///../../node_modules/jwt-decode/build/cjs/index.js","webpack:///../../node_modules/socket.io-client/build/cjs/contrib/backo2.js","webpack:///../../node_modules/socket.io-client/build/cjs/index.js","webpack:///../../node_modules/socket.io-client/build/cjs/manager.js","webpack:///../../node_modules/socket.io-client/build/cjs/on.js","webpack:///../../node_modules/socket.io-client/build/cjs/socket.js","webpack:///../../node_modules/socket.io-client/build/cjs/url.js","webpack:///../../node_modules/socket.io-parser/build/cjs/binary.js","webpack:///../../node_modules/socket.io-parser/build/cjs/index.js","webpack:///../../node_modules/socket.io-parser/build/cjs/is-binary.js","webpack:///../../node_modules/uuidv7/dist/index.cjs","webpack:///../../node_modules/@socket.io/component-emitter/index.mjs","webpack:///webpack/bootstrap","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn ","var Changeset = require('./Changeset')\n , Retain = require('./operations/Retain')\n , Skip = require('./operations/Skip')\n , Insert = require('./operations/Insert')\n\nfunction Builder() {\n this.ops = []\n this.addendum = ''\n this.removendum = ''\n}\n\nmodule.exports = Builder\n\nBuilder.prototype.keep =\nBuilder.prototype.retain = function(len) {\n this.ops.push(new Retain(len))\n return this\n}\n\nBuilder.prototype.delete =\nBuilder.prototype.skip = function(str) {\n this.removendum += str\n this.ops.push(new Skip(str.length))\n return this\n}\n\nBuilder.prototype.add =\nBuilder.prototype.insert = function(str) {\n this.addendum += str\n this.ops.push(new Insert(str.length))\n return this\n}\n\nBuilder.prototype.end = function() {\n var cs = new Changeset(this.ops)\n cs.addendum = this.addendum\n cs.removendum = this.removendum\n return cs\n}\n","/*!\n * changesets\n * A Changeset library incorporating operational transformation (OT)\n * Copyright 2012 by Marcel Klehr <mklehr@gmx.net>\n *\n * (MIT LICENSE)\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/**\n * A sequence of consecutive operations\n *\n * @param ops.. <Operation> all passed operations will be added to the changeset\n */\nfunction Changeset(ops/*or ops..*/) {\n this.addendum = \"\"\n this.removendum = \"\"\n this.inputLength = 0\n this.outputLength = 0\n\n if(!Array.isArray(ops)) ops = arguments\n for(var i=0; i<ops.length; i++) {\n this.push(ops[i])\n this.inputLength += ops[i].input\n this.outputLength += ops[i].output\n }\n}\n\n// True inheritance\nChangeset.prototype = Object.create(Array.prototype, {\n constructor: {\n value: Changeset,\n enumerable: false,\n writable: true,\n configurable: true\n }\n});\nmodule.exports = Changeset\n\nvar TextTransform = require('./TextTransform')\n , ChangesetTransform = require('./ChangesetTransform')\n\nvar Retain = require('./operations/Retain')\n , Skip = require('./operations/Skip')\n , Insert = require('./operations/Insert')\n\nvar Builder = require('./Builder')\n\n/**\n * Returns an array containing the ops that are within the passed range\n * (only op.input is counted; thus not counting inserts to the range length, yet they are part of the range)\n */\nChangeset.prototype.subrange = function(start, len) {\n var range = []\n , op, oplen\n , l=0\n for(var i=0, pos=0; i<this.length && l < len; i++) {\n op = this[i]\n if(op.input+pos >= start) {\n if(op.input) {\n if(op.length != Infinity) oplen = op.length -Math.max(0, start-pos) -Math.max(0, (op.length+pos)-(start+len))\n else oplen = len\n if (oplen !== 0) range.push( op.derive(oplen) ) // (Don't copy over more than len param allows)\n }\n else {\n range.push( op.derive(op.length) )\n oplen = 0\n }\n l += oplen\n }\n pos += op.input\n }\n return range\n}\n\n/**\n * Merge two changesets (that are based on the same state!) so that the resulting changseset\n * has the same effect as both orignal ones applied one after the other\n *\n * @param otherCs <Changeset>\n * @param left <boolean> Which op to choose if there's an insert tie (If you use this function in a distributed, synchronous environment, be sure to invert this param on the other site, otherwise it can be omitted safely))\n * @returns <Changeset>\n */\nChangeset.prototype.merge = function(otherCs, left) {\n if(otherCs.inputLength !== this.outputLength) {\n throw new Error(\"Changeset lengths for merging don't match! Input length of younger cs: \"+otherCs.inputLength+', output length of older cs:'+this.outputLength)\n }\n\n var newops = []\n , addPtr1 = 0\n , remPtr1 = 0\n , addPtr2 = 0\n , remPtr2 = 0\n , newaddendum = ''\n , newremovendum = ''\n\n zip(this, otherCs, function(op1, op2) {\n // console.log(newops)\n // console.log(op1, op2)\n\n // I'm deleting something -- the other cs can't know that, so just overtake my op\n if(op1 && !op1.output) {\n newops.push(op1.merge().clone())\n newremovendum += this.removendum.substr(remPtr1, op1.length) // overtake added chars\n remPtr1 += op1.length\n op1.length = 0 // don't gimme that one again.\n return\n }\n\n // op2 is an insert\n if(op2 && !op2.input) {\n newops.push(op2.merge().clone())\n newaddendum += otherCs.addendum.substr(addPtr2, op2.length) // overtake added chars\n addPtr2 += op2.length\n op2.length = 0 // don't gimme that one again.\n return\n }\n\n // op2 is either a retain or a skip\n if(op2 && op2.input && op1) {\n // op2 retains whatever we do here (retain or insert), so just clone my op\n if(op2.output) {\n newops.push(op1.merge(op2).clone())\n if(!op1.input) { // overtake addendum\n newaddendum += this.addendum.substr(addPtr1, op1.length)\n addPtr1 += op1.length\n }\n op1.length = 0 // don't gimme these again\n op2.length = 0\n }else\n\n // op2 deletes my retain here, so just clone the delete\n // (op1 can only be a retain and no skip here, cause we've handled skips above already)\n if(!op2.output && op1.input) {\n newops.push(op2.merge(op1).clone())\n newremovendum += otherCs.removendum.substr(remPtr2, op2.length) // overtake added chars\n remPtr2 += op2.length\n op1.length = 0 // don't gimme these again\n op2.length = 0\n }else\n\n //otherCs deletes something I added (-1) +1 = 0\n {\n addPtr1 += op1.length\n op1.length = 0 // don't gimme these again\n op2.length = 0\n }\n return\n }\n\n console.log('oops', arguments)\n throw new Error('oops. This case hasn\\'t been considered by the developer (error code: PBCAC)')\n }.bind(this))\n\n var newCs = new Changeset(newops)\n newCs.addendum = newaddendum\n newCs.removendum = newremovendum\n\n return newCs\n}\n\n/**\n * A private and quite handy function that slices ops into equally long pieces and applies them on a mapping function\n * that can determine the iteration steps by setting op.length to 0 on an op (equals using .next() in a usual iterator)\n */\nfunction zip(cs1, cs2, func) {\n var opstack1 = cs1.map(function(op) {return op.clone()}) // copy ops\n , opstack2 = cs2.map(function(op) {return op.clone()})\n\n var op2, op1\n while(opstack1.length || opstack2.length) {// iterate through all outstanding ops of this cs\n op1 = opstack1[0]? opstack1[0].clone() : null\n op2 = opstack2[0]? opstack2[0].clone() : null\n\n if(op1) {\n if(op2) op1 = op1.derive(Math.min(op1.length, op2.length)) // slice 'em into equally long pieces\n if(opstack1[0].length > op1.length) opstack1[0] = opstack1[0].derive(opstack1[0].length-op1.length)\n else opstack1.shift()\n }\n\n if(op2) {\n if(op1) op2 = op2.derive(Math.min(op1.length, op2.length)) // slice 'em into equally long pieces\n if(opstack2[0].length > op2.length) opstack2[0] = opstack2[0].derive(opstack2[0].length-op2.length)\n else opstack2.shift()\n }\n\n func(op1, op2)\n\n if(op1 && op1.length) opstack1.unshift(op1)\n if(op2 && op2.length) opstack2.unshift(op2)\n }\n}\n\n/**\n * Inclusion Transformation (IT) or Forward Transformation\n *\n * transforms the operations of the current changeset against the\n * all operations in another changeset in such a way that the\n * effects of the latter are effectively included.\n * This is basically like a applying the other cs on this one.\n *\n * @param otherCs <Changeset>\n * @param left <boolean> Which op to choose if there's an insert tie (If you use this function in a distributed, synchronous environment, be sure to invert this param on the other site, otherwise it can be omitted safely)\n *\n * @returns <Changeset>\n */\nChangeset.prototype.transformAgainst = function(otherCs, left) {\n if(this.inputLength != otherCs.inputLength) {\n throw new Error('Can\\'t transform changesets with differing inputLength: '+this.inputLength+' and '+otherCs.inputLength)\n }\n\n var transformation = new ChangesetTransform(this, [new Retain(Infinity)])\n otherCs.forEach(function(op) {\n var nextOp = this.subrange(transformation.pos, Infinity)[0] // next op of this cs\n if(nextOp && !nextOp.input && !op.input) { // two inserts tied; left breaks it\n if (left) transformation.writeOutput(transformation.readInput(nextOp.length))\n }\n op.apply(transformation)\n }.bind(this))\n\n return transformation.result()\n}\n\n/**\n * Exclusion Transformation (ET) or Backwards Transformation\n *\n * transforms all operations in the current changeset against the operations\n * in another changeset in such a way that the impact of the latter are effectively excluded\n *\n * @param changeset <Changeset> the changeset to substract from this one\n * @param left <boolean> Which op to choose if there's an insert tie (If you use this function in a distributed, synchronous environment, be sure to invert this param on the other site, otherwise it can be omitted safely)\n * @returns <Changeset>\n */\nChangeset.prototype.substract = function(changeset, left) {\n // The current operations assume that the changes in\n // `changeset` happened before, so for each of those ops\n // we create an operation that undoes its effect and\n // transform all our operations on top of the inverse changes\n return this.transformAgainst(changeset.invert(), left)\n}\n\n/**\n * Returns the inverse Changeset of the current one\n *\n * Changeset.invert().apply(Changeset.apply(document)) == document\n */\nChangeset.prototype.invert = function() {\n // invert all ops\n var newCs = new Changeset(this.map(function(op) {\n return op.invert()\n }))\n\n // removendum becomes addendum and vice versa\n newCs.addendum = this.removendum\n newCs.removendum = this.addendum\n\n return newCs\n}\n\n/**\n * Applies this changeset on a text\n */\nChangeset.prototype.apply = function(input) {\n // pre-requisites\n if(input.length != this.inputLength) throw new Error('Input length doesn\\'t match expected length. expected: '+this.inputLength+'; actual: '+input.length)\n\n var operation = new TextTransform(input, this.addendum, this.removendum)\n\n this.forEach(function(op) {\n // each Operation has access to all pointers as well as the input, addendum and removendum (the latter are immutable)\n op.apply(operation)\n }.bind(this))\n\n return operation.result()\n}\n\n/**\n * Returns an array of strings describing this changeset's operations\n */\nChangeset.prototype.inspect = function() {\n var j = 0\n return this.map(function(op) {\n var string = ''\n\n if(!op.input) { // if Insert\n string = this.addendum.substr(j,op.length)\n j += op.length\n return string\n }\n\n for(var i=0; i<op.length; i++) string += op.symbol\n return string\n }.bind(this)).join('')\n}\n\n/**\n * Serializes the given changeset in order to return a (hopefully) more compact representation\n * than json that can be sent through a network or stored in a database\n *\n * Numbers are converted to the base 36, unsafe chars in the text are urlencoded\n *\n * @param cs <Changeset> The changeset to be serialized\n * @returns <String> The serialized changeset\n */\nChangeset.prototype.pack = function() {\n var packed = this.map(function(op) {\n return op.pack()\n }).join('')\n\n var addendum = this.addendum.replace(/%/g, '%25').replace(/\\|/g, '%7C')\n , removendum = this.removendum.replace(/%/g, '%25').replace(/\\|/g, '%7C')\n return packed+'|'+addendum+'|'+removendum\n}\nChangeset.prototype.toString = function() {\n return this.pack()\n}\n\n/**\n * Unserializes the output of cs.text.Changeset#toString()\n *\n * @param packed <String> The serialized changeset\n * @param <cs.Changeset>\n */\nChangeset.unpack = function(packed) {\n if(packed == '') throw new Error('Cannot unpack from empty string')\n var components = packed.split('|')\n , opstring = components[0]\n , addendum = components[1].replace(/%7c/gi, '|').replace(/%25/g, '%')\n , removendum = components[2].replace(/%7c/gi, '|').replace(/%25/g, '%')\n\n var matches = opstring.match(/[=+-]([^=+-])+/g)\n if(!matches) throw new Error('Cannot unpack invalidly serialized op string')\n\n var ops = []\n matches.forEach(function(s) {\n var symbol = s.substr(0,1)\n , data = s.substr(1)\n if(Skip.prototype.symbol == symbol) return ops.push(Skip.unpack(data))\n if(Insert.prototype.symbol == symbol) return ops.push(Insert.unpack(data))\n if(Retain.prototype.symbol == symbol) return ops.push(Retain.unpack(data))\n throw new Error('Invalid changeset representation passed to Changeset.unpack')\n })\n\n var cs = new Changeset(ops)\n cs.addendum = addendum\n cs.removendum = removendum\n\n return cs\n}\n\nChangeset.create = function() {\n return new Builder\n}\n\n/**\n * Returns a Changeset containing the operations needed to transform text1 into text2\n *\n * @param text1 <String>\n * @param text2 <String>\n */\nChangeset.fromDiff = function(diff) {\n /**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\n var DIFF_DELETE = -1;\n var DIFF_INSERT = 1;\n var DIFF_EQUAL = 0;\n\n var ops = []\n , removendum = ''\n , addendum = ''\n\n diff.forEach(function(d) {\n if (DIFF_DELETE == d[0]) {\n ops.push(new Skip(d[1].length))\n removendum += d[1]\n }\n\n if (DIFF_INSERT == d[0]) {\n ops.push(new Insert(d[1].length))\n addendum += d[1]\n }\n\n if(DIFF_EQUAL == d[0]) {\n ops.push(new Retain(d[1].length))\n }\n })\n\n var cs = new Changeset(ops)\n cs.addendum = addendum\n cs.removendum = removendum\n return cs\n}\n","/*!\n * changesets\n * A Changeset library incorporating operational ChangesetTransform (OT)\n * Copyright 2012 by Marcel Klehr <mklehr@gmx.net>\n *\n * (MIT LICENSE)\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar Retain = require('./operations/Retain')\n , Skip = require('./operations/Skip')\n , Insert = require('./operations/Insert')\n , Changeset = require('./Changeset')\n\n\nfunction ChangesetTransform(inputCs, addendum) {\n this.output = []\n this.addendum = addendum\n this.newRemovendum = ''\n this.newAddendum = ''\n\n this.cs = inputCs\n this.pos = 0\n this.addendumPointer = 0\n this.removendumPointer = 0\n}\nmodule.exports = ChangesetTransform\n\nChangesetTransform.prototype.readInput = function (len) {\n var ret = this.cs.subrange(this.pos, len)\n this.pos += len\n return ret\n}\n\nChangesetTransform.prototype.readAddendum = function (len) {\n //return [new Retain(len)]\n var ret = this.subrange(this.addendum, this.addendumPointer, len)\n this.addendumPointer += len\n return ret\n}\n\nChangesetTransform.prototype.writeRemovendum = function (range) {\n range\n .filter(function(op) {return !op.output})\n .forEach(function(op) {\n this.removendumPointer += op.length\n }.bind(this))\n}\n\nChangesetTransform.prototype.writeOutput = function (range) {\n this.output = this.output.concat(range)\n range\n .filter(function(op) {return !op.output})\n .forEach(function(op) {\n this.newRemovendum += this.cs.removendum.substr(this.removendumPointer, op.length)\n this.removendumPointer += op.length\n }.bind(this))\n}\n\nChangesetTransform.prototype.subrange = function (range, start, len) {\n if(len) return this.cs.subrange.call(range, start, len)\n else return range.filter(function(op){ return !op.input})\n}\n\nChangesetTransform.prototype.result = function() {\n this.writeOutput(this.readInput(Infinity))\n var newCs = new Changeset(this.output)\n newCs.addendum = this.cs.addendum\n newCs.removendum = this.newRemovendum\n return newCs\n}\n","function Operator() {\n}\n\nmodule.exports = Operator\n\nOperator.prototype.clone = function() {\n return this.derive(this.length)\n}\n\nOperator.prototype.derive = function(len) {\n return new (this.constructor)(len)\n}\n\nOperator.prototype.pack = function() {\n return this.symbol + (this.length).toString(36)\n}\n","/*!\n * changesets\n * A Changeset library incorporating operational Apply (OT)\n * Copyright 2012 by Marcel Klehr <mklehr@gmx.net>\n *\n * (MIT LICENSE)\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar Retain = require('./operations/Retain')\n , Skip = require('./operations/Skip')\n , Insert = require('./operations/Insert')\n , Insert = require('./Changeset')\n\n\nfunction TextTransform(input, addendum, removendum) {\n this.output = ''\n\n this.input = input\n this.addendum = addendum\n this.removendum = removendum\n this.pos = 0\n this.addPos = 0\n this.remPos = 0\n}\nmodule.exports = TextTransform\n\nTextTransform.prototype.readInput = function (len) {\n var ret = this.input.substr(this.pos, len)\n this.pos += len\n return ret\n}\n\nTextTransform.prototype.readAddendum = function (len) {\n var ret = this.addendum.substr(this.addPos, len)\n this.addPos += len\n return ret\n}\n\nTextTransform.prototype.writeRemovendum = function (range) {\n //var expected = this.removendum.substr(this.remPos, range.length)\n //if(range != expected) throw new Error('Removed chars don\\'t match removendum. expected: '+expected+'; actual: '+range)\n this.remPos += range.length\n}\n\nTextTransform.prototype.writeOutput = function (range) {\n this.output += range\n}\n\nTextTransform.prototype.subrange = function (range, start, len) {\n return range.substr(start, len)\n}\n\nTextTransform.prototype.result = function() {\n this.writeOutput(this.readInput(Infinity))\n return this.output\n}\n","/*!\n * changesets\n * A Changeset library incorporating operational transformation (OT)\n * Copyright 2012 by Marcel Klehr <mklehr@gmx.net>\n *\n * (MIT LICENSE)\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar Changeset = require('./Changeset')\n , Retain = require('./operations/Retain')\n , Skip = require('./operations/Skip')\n , Insert = require('./operations/Insert')\n\nexports.Operator = require('./Operator')\nexports.Changeset = Changeset\nexports.Insert = Insert\nexports.Retain = Retain\nexports.Skip = Skip\n\nif('undefined' != typeof window) window.changesets = exports\n\n/**\n * Serializes the given changeset in order to return a (hopefully) more compact representation\n * that can be sent through a network or stored in a database\n * @alias cs.text.Changeset#pack\n */\nexports.pack = function(cs) {\n return cs.pack()\n}\n\n/**\n * Unserializes the output of cs.text.pack\n * @alias cs.text.Changeset.unpack\n */\nexports.unpack = function(packed) {\n return Changeset.unpack(packed)\n}\n\n\n\n\n/**\n * shareJS ot type API sepc support\n */\n\nexports.name = 'changesets'\nexports.url = 'https://github.com/marcelklehr/changesets'\n\n/**\n * create([initialText])\n *\n * creates a snapshot (optionally with supplied intial text)\n */\nexports.create = function(initText) {\n return initText || ''\n}\n\n/**\n * Apply a changeset on a snapshot creating a new one\n *\n * The old snapshot object mustn't be used after calling apply on it\n * returns the resulting\n */\nexports.apply = function(snapshot, op) {\n op = exports.unpack(op)\n return op.apply(snapshot)\n}\n\n/**\n * Transform changeset1 against changeset2\n */\nexports.transform = function (op1, op2, side) {\n op1 = exports.unpack(op1)\n op2 = exports.unpack(op2)\n return exports.pack(op1.transformAgainst(op2, ('left'==side)))\n}\n\n/**\n * Merge two changesets into one\n */\nexports.compose = function (op1, op2) {\n op1 = exports.unpack(op1)\n op2 = exports.unpack(op2)\n return exports.pack(op1.merge(op2))\n}\n\n/**\n * Invert a changeset\n */\nexports.invert = function(op) {\n return exports.pack(exports.unpack(op).invert())\n}\n","/*!\n * changesets\n * A Changeset library incorporating operational transformation (OT)\n * Copyright 2012 by Marcel Klehr <mklehr@gmx.net>\n *\n * (MIT LICENSE)\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar Operator = require('../Operator')\n\n/**\n * Insert Operator\n * Defined by:\n * - length\n * - input=0\n * - output=length\n *\n * @param length <Number> How many chars to be inserted\n */\nfunction Insert(length) {\n this.length = length\n this.input = 0\n this.output = length\n}\n\n// True inheritance\nInsert.prototype = Object.create(Operator.prototype, {\n constructor: {\n value: Insert,\n enumerable: false,\n writable: true,\n configurable: true\n }\n});\nmodule.exports = Insert\nInsert.prototype.symbol = '+'\n\nvar Skip = require('./Skip')\n , Retain = require('./Retain')\n\nInsert.prototype.apply = function(t) {\n t.writeOutput(t.readAddendum(this.output))\n}\n\nInsert.prototype.merge = function() {\n return this\n}\n\nInsert.prototype.invert = function() {\n return new Skip(this.length)\n}\n\nInsert.unpack = function(data) {\n return new Insert(parseInt(data, 36))\n}\n","/*!\n * changesets\n * A Changeset library incorporating operational transformation (OT)\n * Copyright 2012 by Marcel Klehr <mklehr@gmx.net>\n *\n * (MIT LICENSE)\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar Operator = require('../Operator')\n\n/**\n * Retain Operator\n * Defined by:\n * - length\n * - input=output=length\n *\n * @param length <Number> How many chars to retain\n */\nfunction Retain(length) {\n this.length = length\n this.input = length\n this.output = length\n}\n\n// True inheritance\nRetain.prototype = Object.create(Operator.prototype, {\n constructor: {\n value: Retain,\n enumerable: false,\n writable: true,\n configurable: true\n }\n});\nmodule.exports = Retain\nRetain.prototype.symbol = '='\n\nRetain.prototype.apply = function(t) {\n t.writeOutput(t.readInput(this.input))\n}\n\nRetain.prototype.invert = function() {\n return this\n}\n\nRetain.prototype.merge = function(op2) {\n return this\n}\n\nRetain.unpack = function(data) {\n return new Retain(parseInt(data, 36))\n}\n","/*!\n * changesets\n * A Changeset library incorporating operational transformation (OT)\n * Copyright 2012 by Marcel Klehr <mklehr@gmx.net>\n *\n * (MIT LICENSE)\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nvar Operator = require('../Operator')\n\n/**\n * Skip Operator\n * Defined by:\n * - length\n * - input=length\n * - output=0\n *\n * @param length <Number> How many chars to be Skip\n */\nfunction Skip(length) {\n this.length = length\n this.input = length\n this.output = 0\n}\n\n// True inheritance\nSkip.prototype = Object.create(Operator.prototype, {\n constructor: {\n value: Skip,\n enumerable: false,\n writable: true,\n configurable: true\n }\n});\nmodule.exports = Skip\nSkip.prototype.symbol = '-'\n\nvar Insert = require('./Insert')\n , Retain = require('./Retain')\n , Changeset = require('../Changeset')\n\nSkip.prototype.apply = function(t) {\n var input = t.readInput(this.input)\n t.writeRemovendum(input)\n t.writeOutput(t.subrange(input, 0, this.output)) // retain Inserts in my range\n}\n\nSkip.prototype.merge = function(op2) {\n return this\n}\n\nSkip.prototype.invert = function() {\n return new Insert(this.length)\n}\n\nSkip.unpack = function(data) {\n return new Skip(parseInt(data, 36))\n}\n","/**\n * Diff Match and Patch\n *\n * Copyright 2006 Google Inc.\n * http://code.google.com/p/google-diff-match-patch/\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Computes the difference between two texts to create a patch.\n * Applies the patch onto another text, allowing for errors.\n * @author fraser@google.com (Neil Fraser)\n */\n\n/**\n * Class containing the diff, match and patch methods.\n * @constructor\n */\nfunction diff_match_patch() {\n\n // Defaults.\n // Redefine these in your program to override the defaults.\n\n // Number of seconds to map a diff before giving up (0 for infinity).\n this.Diff_Timeout = 1.0;\n // Cost of an empty edit operation in terms of edit characters.\n this.Diff_EditCost = 4;\n // The size beyond which the double-ended diff activates.\n // Double-ending is twice as fast, but less accurate.\n this.Diff_DualThreshold = 32;\n // At what point is no match declared (0.0 = perfection, 1.0 = very loose).\n this.Match_Threshold = 0.5;\n // How far to search for a match (0 = exact location, 1000+ = broad match).\n // A match this many characters away from the expected location will add\n // 1.0 to the score (0.0 is a perfect match).\n this.Match_Distance = 1000;\n // When deleting a large block of text (over ~64 characters), how close does\n // the contents have to match the expected contents. (0.0 = perfection,\n // 1.0 = very loose). Note that Match_Threshold controls how closely the\n // end points of a delete need to match.\n this.Patch_DeleteThreshold = 0.5;\n // Chunk size for context length.\n this.Patch_Margin = 4;\n\n /**\n * Compute the number of bits in an int.\n * The normal answer for JavaScript is 32.\n * @return {number} Max bits\n */\n function getMaxBits() {\n var maxbits = 0;\n var oldi = 1;\n var newi = 2;\n while (oldi != newi) {\n maxbits++;\n oldi = newi;\n newi = newi << 1;\n }\n return maxbits;\n }\n // How many bits in a number?\n this.Match_MaxBits = getMaxBits();\n}\n\n\n// DIFF FUNCTIONS\n\n\n/**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\nvar DIFF_DELETE = -1;\nvar DIFF_INSERT = 1;\nvar DIFF_EQUAL = 0;\n\n\n/**\n * Find the differences between two texts. Simplifies the problem by stripping\n * any common prefix or suffix off the texts before diffing.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {boolean} opt_checklines Optional speedup flag. If present and false,\n * then don't run a line-level diff first to identify the changed areas.\n * Defaults to true, which does a faster, slightly less optimal diff\n * @return {Array.<Array.<number|string>>} Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_main = function(text1, text2, opt_checklines) {\n // Check for null inputs.\n if (text1 == null || text2 == null) {\n throw new Error('Null input. (diff_main)');\n }\n\n // Check for equality (speedup).\n if (text1 == text2) {\n return [[DIFF_EQUAL, text1]];\n }\n\n if (typeof opt_checklines == 'undefined') {\n opt_checklines = true;\n }\n var checklines = opt_checklines;\n\n // Trim off common prefix (speedup).\n var commonlength = this.diff_commonPrefix(text1, text2);\n var commonprefix = text1.substring(0, commonlength);\n text1 = text1.substring(commonlength);\n text2 = text2.substring(commonlength);\n\n // Trim off common suffix (speedup).\n commonlength = this.diff_commonSuffix(text1, text2);\n var commonsuffix = text1.substring(text1.length - commonlength);\n text1 = text1.substring(0, text1.length - commonlength);\n text2 = text2.substring(0, text2.length - commonlength);\n\n // Compute the diff on the middle block.\n var diffs = this.diff_compute(text1, text2, checklines);\n\n // Restore the prefix and suffix.\n if (commonprefix) {\n diffs.unshift([DIFF_EQUAL, commonprefix]);\n }\n if (commonsuffix) {\n diffs.push([DIFF_EQUAL, commonsuffix]);\n }\n this.diff_cleanupMerge(diffs);\n return diffs;\n};\n\n\n/**\n * Find the differences between two texts. Assumes that the texts do not\n * have any common prefix or suffix.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {boolean} checklines Speedup flag. If false, then don't run a\n * line-level diff first to identify the changed areas.\n * If true, then run a faster, slightly less optimal diff\n * @return {Array.<Array.<number|string>>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_compute = function(text1, text2, checklines) {\n var diffs;\n\n if (!text1) {\n // Just add some text (speedup).\n return [[DIFF_INSERT, text2]];\n }\n\n if (!text2) {\n // Just delete some text (speedup).\n return [[DIFF_DELETE, text1]];\n }\n\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n var i = longtext.indexOf(shorttext);\n if (i != -1) {\n // Shorter text is inside the longer text (speedup).\n diffs = [[DIFF_INSERT, longtext.substring(0, i)],\n [DIFF_EQUAL, shorttext],\n [DIFF_INSERT, longtext.substring(i + shorttext.length)]];\n // Swap insertions for deletions if diff is reversed.\n if (text1.length > text2.length) {\n diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n }\n return diffs;\n }\n longtext = shorttext = null; // Garbage collect.\n\n // Check to see if the problem can be split in two.\n var hm = this.diff_halfMatch(text1, text2);\n if (hm) {\n // A half-match was found, sort out the return data.\n var text1_a = hm[0];\n var text1_b = hm[1];\n var text2_a = hm[2];\n var text2_b = hm[3];\n var mid_common = hm[4];\n // Send both pairs off for separate processing.\n var diffs_a = this.diff_main(text1_a, text2_a, checklines);\n var diffs_b = this.diff_main(text1_b, text2_b, checklines);\n // Merge the results.\n return diffs_a.concat([[DIFF_EQUAL, mid_common]], diffs_b);\n }\n\n // Perform a real diff.\n if (checklines && (text1.length < 100 || text2.length < 100)) {\n // Too trivial for the overhead.\n checklines = false;\n }\n var linearray;\n if (checklines) {\n // Scan the text on a line-by-line basis first.\n var a = this.diff_linesToChars(text1, text2);\n text1 = a[0];\n text2 = a[1];\n linearray = a[2];\n }\n diffs = this.diff_map(text1, text2);\n if (!diffs) {\n // No acceptable result.\n diffs = [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];\n }\n if (checklines) {\n // Convert the diff back to original text.\n this.diff_charsToLines(diffs, linearray);\n // Eliminate freak matches (e.g. blank lines)\n this.diff_cleanupSemantic(diffs);\n\n // Rediff any replacement blocks, this time character-by-character.\n // Add a dummy entry at the end.\n diffs.push([DIFF_EQUAL, '']);\n var pointer = 0;\n var count_delete = 0;\n var count_insert = 0;\n var text_delete = '';\n var text_insert = '';\n while (pointer < diffs.length) {\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n count_insert++;\n text_insert += diffs[pointer][1];\n break;\n case DIFF_DELETE:\n count_delete++;\n text_delete += diffs[pointer][1];\n break;\n case DIFF_EQUAL:\n // Upon reaching an equality, check for prior redundancies.\n if (count_delete >= 1 && count_insert >= 1) {\n // Delete the offending records and add the merged ones.\n var a = this.diff_main(text_delete, text_insert, false);\n diffs.splice(pointer - count_delete - count_insert,\n count_delete + count_insert);\n pointer = pointer - count_delete - count_insert;\n for (var j = a.length - 1; j >= 0; j--) {\n diffs.splice(pointer, 0, a[j]);\n }\n pointer = pointer + a.length;\n }\n count_insert = 0;\n count_delete = 0;\n text_delete = '';\n text_insert = '';\n break;\n }\n pointer++;\n }\n diffs.pop(); // Remove the dummy entry at the end.\n }\n return diffs;\n};\n\n\n/**\n * Split two texts into an array of strings. Reduce the texts to a string of\n * hashes where each Unicode character represents one line.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {Array.<string|Array.<string>>} Three element Array, containing the\n * encoded text1, the encoded text2 and the array of unique strings. The\n * zeroth element of the array of unique strings is intentionally blank.\n * @private\n */\ndiff_match_patch.prototype.diff_linesToChars = function(text1, text2) {\n var lineArray = []; // e.g. lineArray[4] == 'Hello\\n'\n var lineHash = {}; // e.g. lineHash['Hello\\n'] == 4\n\n // '\\x00' is a valid character, but various debuggers don't like it.\n // So we'll insert a junk entry to avoid generating a null character.\n lineArray[0] = '';\n\n /**\n * Split a text into an array of strings. Reduce the texts to a string of\n * hashes where each Unicode character represents one line.\n * Modifies linearray and linehash through being a closure.\n * @param {string} text String to encode.\n * @return {string} Encoded string.\n * @private\n */\n function diff_linesToCharsMunge(text) {\n var chars = '';\n // Walk the text, pulling out a substring for each line.\n // text.split('\\n') would would temporarily double our memory footprint.\n // Modifying text would create many large strings to garbage collect.\n var lineStart = 0;\n var lineEnd = -1;\n // Keeping our own length variable is faster than looking it up.\n var lineArrayLength = lineArray.length;\n while (lineEnd < text.length - 1) {\n lineEnd = text.indexOf('\\n', lineStart);\n if (lineEnd == -1) {\n lineEnd = text.length - 1;\n }\n var line = text.substring(lineStart, lineEnd + 1);\n lineStart = lineEnd + 1;\n\n if (lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line) :\n (lineHash[line] !== undefined)) {\n chars += String.fromCharCode(lineHash[line]);\n } else {\n chars += String.fromCharCode(lineArrayLength);\n lineHash[line] = lineArrayLength;\n lineArray[lineArrayLength++] = line;\n }\n }\n return chars;\n }\n\n var chars1 = diff_linesToCharsMunge(text1);\n var chars2 = diff_linesToCharsMunge(text2);\n return [chars1, chars2, lineArray];\n};\n\n\n/**\n * Rehydrate the text in a diff from a string of line hashes to real lines of\n * text.\n * @param {Array.<Array.<number|string>>} diffs Array of diff tuples.\n * @param {Array.<string>} lineArray Array of unique strings.\n * @private\n */\ndiff_match_patch.prototype.diff_charsToLines = function(diffs, lineArray) {\n for (var x = 0; x < diffs.length; x++) {\n var chars = diffs[x][1];\n var text = [];\n for (var y = 0; y < chars.length; y++) {\n text[y] = lineArray[chars.charCodeAt(y)];\n }\n diffs[x][1] = text.join('');\n }\n};\n\n\n/**\n * Explore the intersection points between the two texts.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {?Array.<Array.<number|string>>} Array of diff tuples or null if no\n * diff available.\n * @private\n */\ndiff_match_patch.prototype.diff_map = function(text1, text2) {\n // Don't run for too long.\n var ms_end = (new Date()).getTime() + this.Diff_Timeout * 1000;\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length;\n var max_d = text1_length + text2_length - 1;\n var doubleEnd = this.Diff_DualThreshold * 2 < max_d;\n // JavaScript efficiency note: (x << 32) + y doesn't work since numbers are\n // only 32 bit. Use x + ',' + y to create a hash instead.\n var v_map1 = [];\n var v_map2 = [];\n var v1 = {};\n var v2 = {};\n v1[1] = 0;\n v2[1] = 0;\n var x, y;\n var footstep; // Used to track overlapping paths.\n var footsteps = {};\n var done = false;\n // If the total number of characters is odd, then the front path will collide\n // with the reverse path.\n var front = (text1_length + text2_length) % 2;\n for (var d = 0; d < max_d; d++) {\n // Bail out if timeout reached.\n if (this.Diff_Timeout > 0 && (new Date()).getTime() > ms_end) {\n return null;\n }\n\n // Walk the front path one step.\n v_map1[d] = {};\n for (var k = -d; k <= d; k += 2) {\n if (k == -d || k != d && v1[k - 1] < v1[k + 1]) {\n x = v1[k + 1];\n } else {\n x = v1[k - 1] + 1;\n }\n y = x - k;\n if (doubleEnd) {\n footstep = x + ',' + y;\n if (front && footsteps[footstep] !== undefined) {\n done = true;\n }\n if (!front) {\n footsteps[footstep] = d;\n }\n }\n while (!done && x < text1_length && y < text2_length &&\n text1.charAt(x) == text2.charAt(y)) {\n x++;\n y++;\n if (doubleEnd) {\n footstep = x + ',' + y;\n if (front && footsteps[footstep] !== undefined) {\n done = true;\n }\n if (!front) {\n footsteps[footstep] = d;\n }\n }\n }\n v1[k] = x;\n v_map1[d][x + ',' + y] = true;\n if (x == text1_length && y == text2_length) {\n // Reached the end in single-path mode.\n return this.diff_path1(v_map1, text1, text2);\n } else if (done) {\n // Front path ran over reverse path.\n v_map2 = v_map2.slice(0, footsteps[footstep] + 1);\n var a = this.diff_path1(v_map1, text1.substring(0, x),\n text2.substring(0, y));\n return a.concat(this.diff_path2(v_map2, text1.substring(x),\n text2.substring(y)));\n }\n }\n\n if (doubleEnd) {\n // Walk the reverse path one step.\n v_map2[d] = {};\n for (var k = -d; k <= d; k += 2) {\n if (k == -d || k != d && v2[k - 1] < v2[k + 1]) {\n x = v2[k + 1];\n } else {\n x = v2[k - 1] + 1;\n }\n y = x - k;\n footstep = (text1_length - x) + ',' + (text2_length - y);\n if (!front && footsteps[footstep] !== undefined) {\n done = true;\n }\n if (front) {\n footsteps[footstep] = d;\n }\n while (!done && x < text1_length && y < text2_length &&\n text1.charAt(text1_length - x - 1) ==\n text2.charAt(text2_length - y - 1)) {\n x++;\n y++;\n footstep = (text1_length - x) + ',' + (text2_length - y);\n if (!front && footsteps[footstep] !== undefined) {\n done = true;\n }\n if (front) {\n footsteps[footstep] = d;\n }\n }\n v2[k] = x;\n v_map2[d][x + ',' + y] = true;\n if (done) {\n // Reverse path ran over front path.\n v_map1 = v_map1.slice(0, footsteps[footstep] + 1);\n var a = this.diff_path1(v_map1, text1.substring(0, text1_length - x),\n text2.substring(0, text2_length - y));\n return a.concat(this.diff_path2(v_map2,\n text1.substring(text1_length - x),\n text2.substring(text2_length - y)));\n }\n }\n }\n }\n // Number of diffs equals number of characters, no commonality at all.\n return null;\n};\n\n\n/**\n * Work from the middle back to the start to determine the path.\n * @param {Array.<Object>} v_map Array of paths.\n * @param {string} text1 Old string fragment to be diffed.\n * @param {string} text2 New string fragment to be diffed.\n * @return {Array.<Array.<number|string>>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_path1 = function(v_map, text1, text2) {\n var path = [];\n var x = text1.length;\n var y = text2.length;\n /** @type {?number} */\n var last_op = null;\n for (var d = v_map.length - 2; d >= 0; d--) {\n while (1) {\n if (v_map[d][(x - 1) + ',' + y] !== undefined) {\n x--;\n if (last_op === DIFF_DELETE) {\n path[0][1] = text1.charAt(x) + path[0][1];\n } else {\n path.unshift([DIFF_DELETE, text1.charAt(x)]);\n }\n last_op = DIFF_DELETE;\n break;\n } else if (v_map[d][x + ',' + (y - 1)] !== undefined) {\n y--;\n if (last_op === DIFF_INSERT) {\n path[0][1] = text2.charAt(y) + path[0][1];\n } else {\n path.unshift([DIFF_INSERT, text2.charAt(y)]);\n }\n last_op = DIFF_INSERT;\n break;\n } else {\n x--;\n y--;\n if (text1.charAt(x) != text2.charAt(y)) {\n throw new Error('No diagonal. Can\\'t happen. (diff_path1)');\n }\n if (last_op === DIFF_EQUAL) {\n path[0][1] = text1.charAt(x) + path[0][1];\n } else {\n path.unshift([DIFF_EQUAL, text1.charAt(x)]);\n }\n last_op = DIFF_EQUAL;\n }\n }\n }\n return path;\n};\n\n\n/**\n * Work from the middle back to the end to determine the path.\n * @param {Array.<Object>} v_map Array of paths.\n * @param {string} text1 Old string fragment to be diffed.\n * @param {string} text2 New string fragment to be diffed.\n * @return {Array.<Array.<number|string>>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_path2 = function(v_map, text1, text2) {\n var path = [];\n var pathLength = 0;\n var x = text1.length;\n var y = text2.length;\n /** @type {?number} */\n var last_op = null;\n for (var d = v_map.length - 2; d >= 0; d--) {\n while (1) {\n if (v_map[d][(x - 1) + ',' + y] !== undefined) {\n x--;\n if (last_op === DIFF_DELETE) {\n path[pathLength - 1][1] += text1.charAt(text1.length - x - 1);\n } else {\n path[pathLength++] =\n [DIFF_DELETE, text1.charAt(text1.length - x - 1)];\n }\n last_op = DIFF_DELETE;\n break;\n } else if (v_map[d][x + ',' + (y - 1)] !== undefined) {\n y--;\n if (last_op === DIFF_INSERT) {\n path[pathLength - 1][1] += text2.charAt(text2.length - y - 1);\n } else {\n path[pathLength++] =\n [DIFF_INSERT, text2.charAt(text2.length - y - 1)];\n }\n last_op = DIFF_INSERT;\n break;\n } else {\n x--;\n y--;\n if (text1.charAt(text1.length - x - 1) !=\n text2.charAt(text2.length - y - 1)) {\n throw new Error('No diagonal. Can\\'t happen. (diff_path2)');\n }\n if (last_op === DIFF_EQUAL) {\n path[pathLength - 1][1] += text1.charAt(text1.length - x - 1);\n } else {\n path[pathLength++] =\n [DIFF_EQUAL, text1.charAt(text1.length - x - 1)];\n }\n last_op = DIFF_EQUAL;\n }\n }\n }\n return path;\n};\n\n\n/**\n * Determine the common prefix of two strings\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the start of each\n * string.\n */\ndiff_match_patch.prototype.diff_commonPrefix = function(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerstart = 0;\n while (pointermin < pointermid) {\n if (text1.substring(pointerstart, pointermid) ==\n text2.substring(pointerstart, pointermid)) {\n pointermin = pointermid;\n pointerstart = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n return pointermid;\n};\n\n\n/**\n * Determine the common suffix of two strings\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of each string.\n */\ndiff_match_patch.prototype.diff_commonSuffix = function(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 || text1.charAt(text1.length - 1) !=\n text2.charAt(text2.length - 1)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerend = 0;\n while (pointermin < pointermid) {\n if (text1.substring(text1.length - pointermid, text1.length - pointerend) ==\n text2.substring(text2.length - pointermid, text2.length - pointerend)) {\n pointermin = pointermid;\n pointerend = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n return pointermid;\n};\n\n\n/**\n * Do the two texts share a substring which is at least half the length of the\n * longer text?\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {?Array.<string>} Five element Array, containing the prefix of\n * text1, the suffix of text1, the prefix of text2, the suffix of\n * text2 and the common middle. Or null if there was no match.\n */\ndiff_match_patch.prototype.diff_halfMatch = function(text1, text2) {\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n if (longtext.length < 10 || shorttext.length < 1) {\n return null; // Pointless.\n }\n var dmp = this; // 'this' becomes 'window' in a closure.\n\n /**\n * Does a substring of shorttext exist within longtext such that the substring\n * is at least half the length of longtext?\n * Closure, but does not reference any external variables.\n * @param {string} longtext Longer string.\n * @param {string} shorttext Shorter string.\n * @param {number} i Start index of quarter length substring within longtext\n * @return {?Array.<string>} Five element Array, containing the prefix of\n * longtext, the suffix of longtext, the prefix of shorttext, the suffix\n * of shorttext and the common middle. Or null if there was no match.\n * @private\n */\n function diff_halfMatchI(longtext, shorttext, i) {\n // Start with a 1/4 length substring at position i as a seed.\n var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n var j = -1;\n var best_common = '';\n var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n while ((j = shorttext.indexOf(seed, j + 1)) != -1) {\n var prefixLength = dmp.diff_commonPrefix(longtext.substring(i),\n shorttext.substring(j));\n var suffixLength = dmp.diff_commonSuffix(longtext.substring(0, i),\n shorttext.substring(0, j));\n if (best_common.length < suffixLength + prefixLength) {\n best_common = shorttext.substring(j - suffixLength, j) +\n shorttext.substring(j, j + prefixLength);\n best_longtext_a = longtext.substring(0, i - suffixLength);\n best_longtext_b = longtext.substring(i + prefixLength);\n best_shorttext_a = shorttext.substring(0, j - suffixLength);\n best_shorttext_b = shorttext.substring(j + prefixLength);\n }\n }\n if (best_common.length >= longtext.length / 2) {\n return [best_longtext_a, best_longtext_b,\n best_shorttext_a, best_shorttext_b, best_common];\n } else {\n return null;\n }\n }\n\n // First check if the second quarter is the seed for a half-match.\n var hm1 = diff_halfMatchI(longtext, shorttext,\n Math.ceil(longtext.length / 4));\n // Check again based on the third quarter.\n var hm2 = diff_halfMatchI(longtext, shorttext,\n Math.ceil(longtext.length / 2));\n var hm;\n if (!hm1 && !hm2) {\n return null;\n } else if (!hm2) {\n hm = hm1;\n } else if (!hm1) {\n hm = hm2;\n } else {\n // Both matched. Select the longest.\n hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n }\n\n // A half-match was found, sort out the return data.\n var text1_a, text1_b, text2_a, text2_b;\n if (text1.length > text2.length) {\n text1_a = hm[0];\n text1_b = hm[1];\n text2_a = hm[2];\n text2_b = hm[3];\n } else {\n text2_a = hm[0];\n text2_b = hm[1];\n text1_a = hm[2];\n text1_b = hm[3];\n }\n var mid_common = hm[4];\n return [text1_a, text1_b, text2_a, text2_b, mid_common];\n};\n\n\n/**\n * Reduce the number of edits by eliminating semantically trivial equalities.\n * @param {Array.<Array.<number|string>>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupSemantic = function(diffs) {\n var changes = false;\n var equalities = []; // Stack of indices where equalities are found.\n var equalitiesLength = 0; // Keeping our own length var is faster in JS.\n var lastequality = null; // Always equal to equalities[equalitiesLength-1][1]\n var pointer = 0; // Index of current position.\n // Number of characters that changed prior to the equality.\n var length_changes1 = 0;\n // Number of characters that changed after the equality.\n var length_changes2 = 0;\n while (pointer < diffs.length) {\n if (diffs[pointer][0] == DIFF_EQUAL) { // equality found\n equalities[equalitiesLength++] = pointer;\n length_changes1 = length_changes2;\n length_changes2 = 0;\n lastequality = diffs[pointer][1];\n } else { // an insertion or deletion\n length_changes2 += diffs[pointer][1].length;\n if (lastequality !== null && (lastequality.length <= length_changes1) &&\n (lastequality.length <= length_changes2)) {\n // Duplicate record\n diffs.splice(equalities[equalitiesLength - 1], 0,\n [DIFF_DELETE, lastequality]);\n // Change second copy to insert.\n diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n // Throw away the equality we just deleted.\n equalitiesLength--;\n // Throw away the previous equality (it needs to be reevaluated).\n equalitiesLength--;\n pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;\n length_changes1 = 0; // Reset the counters.\n length_changes2 = 0;\n lastequality = null;\n changes = true;\n }\n }\n pointer++;\n }\n if (changes) {\n this.diff_cleanupMerge(diffs);\n }\n this.diff_cleanupSemanticLossless(diffs);\n};\n\n\n/**\n * Look for single edits surrounded on both sides by equalities\n * which can be shifted sideways to align the edit to a word boundary.\n * e.g: The c<ins>at c</ins>ame. -> The <ins>cat </ins>came.\n * @param {Array.<Array.<number|string>>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupSemanticLossless = function(diffs) {\n // Define some regex patterns for matching boundaries.\n var punctuation = /[^a-zA-Z0-9]/;\n var whitespace = /\\s/;\n var linebreak = /[\\r\\n]/;\n var blanklineEnd = /\\n\\r?\\n$/;\n var blanklineStart = /^\\r?\\n\\r?\\n/;\n\n /**\n * Given two strings, compute a score representing whether the internal\n * boundary falls on logical boundaries.\n * Scores range from 5 (best) to 0 (worst).\n * Closure, makes reference to regex patterns defined above.\n * @param {string} one First string.\n * @param {string} two Second string.\n * @return {number} The score.\n */\n function diff_cleanupSemanticScore(one, two) {\n if (!one || !two) {\n // Edges are the best.\n return 5;\n }\n\n // Each port of this function behaves slightly differently due to\n // subtle differences in each language's definition of things like\n // 'whitespace'. Since this function's purpose is largely cosmetic,\n // the choice has been made to use each language's native features\n // rather than force total conformity.\n var score = 0;\n // One point for non-alphanumeric.\n if (one.charAt(one.length - 1).match(punctuation) ||\n two.charAt(0).match(punctuation)) {\n score++;\n // Two points for whitespace.\n if (one.charAt(one.length - 1).match(whitespace) ||\n two.charAt(0).match(whitespace)) {\n score++;\n // Three points for line breaks.\n if (one.charAt(one.length - 1).match(linebreak) ||\n two.charAt(0).match(linebreak)) {\n score++;\n // Four points for blank lines.\n if (one.match(blanklineEnd) || two.match(blanklineStart)) {\n score++;\n }\n }\n }\n }\n return score;\n }\n\n var pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (diffs[pointer - 1][0] == DIFF_EQUAL &&\n diffs[pointer + 1][0] == DIFF_EQUAL) {\n // This is a single edit surrounded by equalities.\n var equality1 = diffs[pointer - 1][1];\n var edit = diffs[pointer][1];\n var equality2 = diffs[pointer + 1][1];\n\n // First, shift the edit as far left as possible.\n var commonOffset = this.diff_commonSuffix(equality1, edit);\n if (commonOffset) {\n var commonString = edit.substring(edit.length - commonOffset);\n equality1 = equality1.substring(0, equality1.length - commonOffset);\n edit = commonString + edit.substring(0, edit.length - commonOffset);\n equality2 = commonString + equality2;\n }\n\n // Second, step character by character right, looking for the best fit.\n var bestEquality1 = equality1;\n var bestEdit = edit;\n var bestEquality2 = equality2;\n var bestScore = diff_cleanupSemanticScore(equality1, edit) +\n diff_cleanupSemanticScore(edit, equality2);\n while (edit.charAt(0) === equality2.charAt(0)) {\n equality1 += edit.charAt(0);\n edit = edit.substring(1) + equality2.charAt(0);\n equality2 = equality2.substring(1);\n var score = diff_cleanupSemanticScore(equality1, edit) +\n diff_cleanupSemanticScore(edit, equality2);\n // The >= encourages trailing rather than leading whitespace on edits.\n if (score >= bestScore) {\n bestScore = score;\n bestEquality1 = equality1;\n bestEdit = edit;\n bestEquality2 = equality2;\n }\n }\n\n if (diffs[pointer - 1][1] != bestEquality1) {\n // We have an improvement, save it back to the diff.\n if (bestEquality1) {\n diffs[pointer - 1][1] = bestEquality1;\n } else {\n diffs.splice(pointer - 1, 1);\n pointer--;\n }\n diffs[pointer][1] = bestEdit;\n if (bestEquality2) {\n diffs[pointer + 1][1] = bestEquality2;\n } else {\n diffs.splice(pointer + 1, 1);\n pointer--;\n }\n }\n }\n pointer++;\n }\n};\n\n\n/**\n * Reduce the number of edits by eliminating operationally trivial equalities.\n * @param {Array.<Array.<number|string>>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupEfficiency = function(diffs) {\n var changes = false;\n var equalities = []; // Stack of indices where equalities are found.\n var equalitiesLength = 0; // Keeping our own length var is faster in JS.\n var lastequality = ''; // Always equal to equalities[equalitiesLength-1][1]\n var pointer = 0; // Index of current position.\n // Is there an insertion operation before the last equality.\n var pre_ins = false;\n // Is there a deletion operation before the last equality.\n var pre_del = false;\n // Is there an insertion operation after the last equality.\n var post_ins = false;\n // Is there a deletion operation after the last equality.\n var post_del = false;\n while (pointer < diffs.length) {\n if (diffs[pointer][0] == DIFF_EQUAL) { // equality found\n if (diffs[pointer][1].length < this.Diff_EditCost &&\n (post_ins || post_del)) {\n // Candidate found.\n equalities[equalitiesLength++] = pointer;\n pre_ins = post_ins;\n pre_del = post_del;\n lastequality = diffs[pointer][1];\n } else {\n // Not a candidate, and can never become one.\n equalitiesLength = 0;\n lastequality = '';\n }\n post_ins = post_del = false;\n } else { // an insertion or deletion\n if (diffs[pointer][0] == DIFF_DELETE) {\n post_del = true;\n } else {\n post_ins = true;\n }\n /*\n * Five types to be split:\n * <ins>A</ins><del>B</del>XY<ins>C</ins><del>D</del>\n * <ins>A</ins>X<ins>C</ins><del>D</del>\n * <ins>A</ins><del>B</del>X<ins>C</ins>\n * <ins>A</del>X<ins>C</ins><del>D</del>\n * <ins>A</ins><del>B</del>X<del>C</del>\n */\n if (lastequality && ((pre_ins && pre_del && post_ins && post_del) ||\n ((lastequality.length < this.Diff_EditCost / 2) &&\n (pre_ins + pre_del + post_ins + post_del) == 3))) {\n // Duplicate record\n diffs.splice(equalities[equalitiesLength - 1], 0,\n [DIFF_DELETE, lastequality]);\n // Change second copy to insert.\n diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n equalitiesLength--; // Throw away the equality we just deleted;\n lastequality = '';\n if (pre_ins && pre_del) {\n // No changes made which could affect previous entry, keep going.\n post_ins = post_del = true;\n equalitiesLength = 0;\n } else {\n equalitiesLength--; // Throw away the previous equality;\n pointer = equalitiesLength > 0 ?\n equalities[equalitiesLength - 1] : -1;\n post_ins = post_del = false;\n }\n changes = true;\n }\n }\n pointer++;\n }\n\n if (changes) {\n this.diff_cleanupMerge(diffs);\n }\n};\n\n\n/**\n * Reorder and merge like edit sections. Merge equalities.\n * Any edit section can move as long as it doesn't cross an equality.\n * @param {Array.<Array.<number|string>>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupMerge = function(diffs) {\n diffs.push([DIFF_EQUAL, '']); // Add a dummy entry at the end.\n var pointer = 0;\n var count_delete = 0;\n var count_insert = 0;\n var text_delete = '';\n var text_insert = '';\n var commonlength;\n while (pointer < diffs.length) {\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n count_insert++;\n text_insert += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_DELETE:\n count_delete++;\n text_delete += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_EQUAL:\n // Upon reaching an equality, check for prior redundancies.\n if (count_delete !== 0 || count_insert !== 0) {\n if (count_delete !== 0 && count_insert !== 0) {\n // Factor out any common prefixies.\n commonlength = this.diff_commonPrefix(text_insert, text_delete);\n if (commonlength !== 0) {\n if ((pointer - count_delete - count_insert) > 0 &&\n diffs[pointer - count_delete - count_insert - 1][0] ==\n DIFF_EQUAL) {\n diffs[pointer - count_delete - count_insert - 1][1] +=\n text_insert.substring(0, commonlength);\n } else {\n diffs.splice(0, 0, [DIFF_EQUAL,\n text_insert.substring(0, commonlength)]);\n pointer++;\n }\n text_insert = text_insert.substring(commonlength);\n text_delete = text_delete.substring(commonlength);\n }\n // Factor out any common suffixies.\n commonlength = this.diff_commonSuffix(text_insert, text_delete);\n if (commonlength !== 0) {\n diffs[pointer][1] = text_insert.substring(text_insert.length -\n commonlength) + diffs[pointer][1];\n text_insert = text_insert.substring(0, text_insert.length -\n commonlength);\n text_delete = text_delete.substring(0, text_delete.length -\n commonlength);\n }\n }\n // Delete the offending records and add the merged ones.\n if (count_delete === 0) {\n diffs.splice(pointer - count_delete - count_insert,\n count_delete + count_insert, [DIFF_INSERT, text_insert]);\n } else if (count_insert === 0) {\n diffs.splice(pointer - count_delete - count_insert,\n count_delete + count_insert, [DIFF_DELETE, text_delete]);\n } else {\n diffs.splice(pointer - count_delete - count_insert,\n count_delete + count_insert, [DIFF_DELETE, text_delete],\n [DIFF_INSERT, text_insert]);\n }\n pointer = pointer - count_delete - count_insert +\n (count_delete ? 1 : 0) + (count_insert ? 1 : 0) + 1;\n } else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) {\n // Merge this equality with the previous one.\n diffs[pointer - 1][1] += diffs[pointer][1];\n diffs.splice(pointer, 1);\n } else {\n pointer++;\n }\n count_insert = 0;\n count_delete = 0;\n text_delete = '';\n text_insert = '';\n break;\n }\n }\n if (diffs[diffs.length - 1][1] === '') {\n diffs.pop(); // Remove the dummy entry at the end.\n }\n\n // Second pass: look for single edits surrounded on both sides by equalities\n // which can be shifted sideways to eliminate an equality.\n // e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC\n var changes = false;\n pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (diffs[pointer - 1][0] == DIFF_EQUAL &&\n diffs[pointer + 1][0] == DIFF_EQUAL) {\n // This is a single edit surrounded by equalities.\n if (diffs[pointer][1].substring(diffs[pointer][1].length -\n diffs[pointer - 1][1].length) == diffs[pointer - 1][1]) {\n // Shift the edit over the previous equality.\n diffs[pointer][1] = diffs[pointer - 1][1] +\n diffs[pointer][1].substring(0, diffs[pointer][1].length -\n diffs[pointer - 1][1].length);\n diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n diffs.splice(pointer - 1, 1);\n changes = true;\n } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) ==\n diffs[pointer + 1][1]) {\n // Shift the edit over the next equality.\n diffs[pointer - 1][1] += diffs[pointer + 1][1];\n diffs[pointer][1] =\n diffs[pointer][1].substring(diffs[pointer + 1][1].length) +\n diffs[pointer + 1][1];\n diffs.splice(pointer + 1, 1);\n changes = true;\n }\n }\n pointer++;\n }\n // If shifts were made, the diff needs reordering and another shift sweep.\n if (changes) {\n this.diff_cleanupMerge(diffs);\n }\n};\n\n\n/**\n * loc is a location in text1, compute and return the equivalent location in\n * text2.\n * e.g. 'The cat' vs 'The big cat', 1->1, 5->8\n * @param {Array.<Array.<number|string>>} diffs Array of diff tuples.\n * @param {number} loc Location within text1.\n * @return {number} Location within text2.\n */\ndiff_match_patch.prototype.diff_xIndex = function(diffs, loc) {\n var chars1 = 0;\n var chars2 = 0;\n var last_chars1 = 0;\n var last_chars2 = 0;\n var x;\n for (x = 0; x < diffs.length; x++) {\n if (diffs[x][0] !== DIFF_INSERT) { // Equality or deletion.\n chars1 += diffs[x][1].length;\n }\n if (diffs[x][0] !== DIFF_DELETE) { // Equality or insertion.\n chars2 += diffs[x][1].length;\n }\n if (chars1 > loc) { // Overshot the location.\n break;\n }\n last_chars1 = chars1;\n last_chars2 = chars2;\n }\n // Was the location was deleted?\n if (diffs.length != x && diffs[x][0] === DIFF_DELETE) {\n return last_chars2;\n }\n // Add the remaining character length.\n return last_chars2 + (loc - last_chars1);\n};\n\n\n/**\n * Convert a diff array into a pretty HTML report.\n * @param {Array.<Array.<number|string>>} diffs Array of diff tuples.\n * @return {string} HTML representation.\n */\ndiff_match_patch.prototype.diff_prettyHtml = function(diffs) {\n var html = [];\n var i = 0;\n for (var x = 0; x < diffs.length; x++) {\n var op = diffs[x][0]; // Operation (insert, delete, equal)\n var data = diffs[x][1]; // Text of change.\n var text = data.replace(/&/g, '&amp;').replace(/</g, '&lt;')\n .replace(/>/g, '&gt;').replace(/\\n/g, '&para;<BR>');\n switch (op) {\n case DIFF_INSERT:\n html[x] = '<INS STYLE=\"background:#E6FFE6;\" TITLE=\"i=' + i + '\">' +\n text + '</INS>';\n break;\n case DIFF_DELETE:\n html[x] = '<DEL STYLE=\"background:#FFE6E6;\" TITLE=\"i=' + i + '\">' +\n text + '</DEL>';\n break;\n case DIFF_EQUAL:\n html[x] = '<SPAN TITLE=\"i=' + i + '\">' + text + '</SPAN>';\n break;\n }\n if (op !== DIFF_DELETE) {\n i += data.length;\n }\n }\n return html.join('');\n};\n\n\n/**\n * Compute and return the source text (all equalities and deletions).\n * @param {Array.<Array.<number|string>>} diffs Array of diff tuples.\n * @return {string} Source text.\n */\ndiff_match_patch.prototype.diff_text1 = function(diffs) {\n var text = [];\n for (var x = 0; x < diffs.length; x++) {\n if (diffs[x][0] !== DIFF_INSERT) {\n text[x] = diffs[x][1];\n }\n }\n return text.join('');\n};\n\n\n/**\n * Compute and return the destination text (all equalities and insertions).\n * @param {Array.<Array.<number|string>>} diffs Array of diff tuples.\n * @return {string} Destination text.\n */\ndiff_match_patch.prototype.diff_text2 = function(diffs) {\n var text = [];\n for (var x = 0; x < diffs.length; x++) {\n if (diffs[x][0] !== DIFF_DELETE) {\n text[x] = diffs[x][1];\n }\n }\n return text.join('');\n};\n\n\n/**\n * Compute the Levenshtein distance; the number of inserted, deleted or\n * substituted characters.\n * @param {Array.<Array.<number|string>>} diffs Array of diff tuples.\n * @return {number} Number of changes.\n */\ndiff_match_patch.prototype.diff_levenshtein = function(diffs) {\n var levenshtein = 0;\n var insertions = 0;\n var deletions = 0;\n for (var x = 0; x < diffs.length; x++) {\n var op = diffs[x][0];\n var data = diffs[x][1];\n switch (op) {\n case DIFF_INSERT:\n insertions += data.length;\n break;\n case DIFF_DELETE:\n deletions += data.length;\n break;\n case DIFF_EQUAL:\n // A deletion and an insertion is one substitution.\n levenshtein += Math.max(insertions, deletions);\n insertions = 0;\n deletions = 0;\n break;\n }\n }\n levenshtein += Math.max(insertions, deletions);\n return levenshtein;\n};\n\n\n/**\n * Crush the diff into an encoded string which describes the operations\n * required to transform text1 into text2.\n * E.g. =3\\t-2\\t+ing -> Keep 3 chars, delete 2 chars, insert 'ing'.\n * Operations are tab-separated. Inserted text is escaped using %xx notation.\n * @param {Array.<Array.<number|string>>} diffs Array of diff tuples.\n * @return {string} Delta text.\n */\ndiff_match_patch.prototype.diff_toDelta = function(diffs) {\n var text = [];\n for (var x = 0; x < diffs.length; x++) {\n switch (diffs[x][0]) {\n case DIFF_INSERT:\n text[x] = '+' + encodeURI(diffs[x][1]);\n break;\n case DIFF_DELETE:\n text[x] = '-' + diffs[x][1].length;\n break;\n case DIFF_EQUAL:\n text[x] = '=' + diffs[x][1].length;\n break;\n }\n }\n // Opera doesn't know how to encode char 0.\n return text.join('\\t').replace(/\\x00/g, '%00').replace(/%20/g, ' ');\n};\n\n\n/**\n * Given the original text1, and an encoded string which describes the\n * operations required to transform text1 into text2, compute the full diff.\n * @param {string} text1 Source string for the diff.\n * @param {string} delta Delta text.\n * @return {Array.<Array.<number|string>>} Array of diff tuples.\n * @throws {Error} If invalid input.\n */\ndiff_match_patch.prototype.diff_fromDelta = function(text1, delta) {\n var diffs = [];\n var diffsLength = 0; // Keeping our own length var is faster in JS.\n var pointer = 0; // Cursor in text1\n // Opera doesn't know how to decode char 0.\n delta = delta.replace(/%00/g, '\\0');\n var tokens = delta.split(/\\t/g);\n for (var x = 0; x < tokens.length; x++) {\n // Each token begins with a one character parameter which specifies the\n // operation of this token (delete, insert, equality).\n var param = tokens[x].substring(1);\n switch (tokens[x].charAt(0)) {\n case '+':\n try {\n diffs[diffsLength++] = [DIFF_INSERT, decodeURI(param)];\n } catch (ex) {\n // Malformed URI sequence.\n throw new Error('Illegal escape in diff_fromDelta: ' + param);\n }\n break;\n case '-':\n // Fall through.\n case '=':\n var n = parseInt(param, 10);\n if (isNaN(n) || n < 0) {\n throw new Error('Invalid number in diff_fromDelta: ' + param);\n }\n var text = text1.substring(pointer, pointer += n);\n if (tokens[x].charAt(0) == '=') {\n diffs[diffsLength++] = [DIFF_EQUAL, text];\n } else {\n diffs[diffsLength++] = [DIFF_DELETE, text];\n }\n break;\n default:\n // Blank tokens are ok (from a trailing \\t).\n // Anything else is an error.\n if (tokens[x]) {\n throw new Error('Invalid diff operation in diff_fromDelta: ' +\n tokens[x]);\n }\n }\n }\n if (pointer != text1.length) {\n throw new Error('Delta length (' + pointer +\n ') does not equal source text length (' + text1.length + ').');\n }\n return diffs;\n};\n\n\n// MATCH FUNCTIONS\n\n\n/**\n * Locate the best instance of 'pattern' in 'text' near 'loc'.\n * @param {string} text The text to search.\n * @param {string} pattern The pattern to search for.\n * @param {number} loc The location to search around.\n * @return {number} Best match index or -1.\n */\ndiff_match_patch.prototype.match_main = function(text, pattern, loc) {\n // Check for null inputs.\n if (text == null || pattern == null || loc == null) {\n throw new Error('Null input. (match_main)');\n }\n\n loc = Math.max(0, Math.min(loc, text.length));\n if (text == pattern) {\n // Shortcut (potentially not guaranteed by the algorithm)\n return 0;\n } else if (!text.length) {\n // Nothing to match.\n return -1;\n } else if (text.substring(loc, loc + pattern.length) == pattern) {\n // Perfect match at the perfect spot! (Includes case of null pattern)\n return loc;\n } else {\n // Do a fuzzy compare.\n return this.match_bitap(text, pattern, loc);\n }\n};\n\n\n/**\n * Locate the best instance of 'pattern' in 'text' near 'loc' using the\n * Bitap algorithm.\n * @param {string} text The text to search.\n * @param {string} pattern The pattern to search for.\n * @param {number} loc The location to search around.\n * @return {number} Best match index or -1.\n * @private\n */\ndiff_match_patch.prototype.match_bitap = function(text, pattern, loc) {\n if (pattern.length > this.Match_MaxBits) {\n throw new Error('Pattern too long for this browser.');\n }\n\n // Initialise the alphabet.\n var s = this.match_alphabet(pattern);\n\n var dmp = this; // 'this' becomes 'window' in a closure.\n\n /**\n * Compute and return the score for a match with e errors and x location.\n * Accesses loc and pattern through being a closure.\n * @param {number} e Number of errors in match.\n * @param {number} x Location of match.\n * @return {number} Overall score for match (0.0 = good, 1.0 = bad).\n * @private\n */\n function match_bitapScore(e, x) {\n var accuracy = e / pattern.length;\n var proximity = Math.abs(loc - x);\n if (!dmp.Match_Distance) {\n // Dodge divide by zero error.\n return proximity ? 1.0 : accuracy;\n }\n return accuracy + (proximity / dmp.Match_Distance);\n }\n\n // Highest score beyond which we give up.\n var score_threshold = this.Match_Threshold;\n // Is there a nearby exact match? (speedup)\n var best_loc = text.indexOf(pattern, loc);\n if (best_loc != -1) {\n score_threshold = Math.min(match_bitapScore(0, best_loc), score_threshold);\n // What about in the other direction? (speedup)\n best_loc = text.lastIndexOf(pattern, loc + pattern.length);\n if (best_loc != -1) {\n score_threshold =\n Math.min(match_bitapScore(0, best_loc), score_threshold);\n }\n }\n\n // Initialise the bit arrays.\n var matchmask = 1 << (pattern.length - 1);\n best_loc = -1;\n\n var bin_min, bin_mid;\n var bin_max = pattern.length + text.length;\n var last_rd;\n for (var d = 0; d < pattern.length; d++) {\n // Scan for the best match; each iteration allows for one more error.\n // Run a binary search to determine how far from 'loc' we can stray at this\n // error level.\n bin_min = 0;\n bin_mid = bin_max;\n while (bin_min < bin_mid) {\n if (match_bitapScore(d, loc + bin_mid) <= score_threshold) {\n bin_min = bin_mid;\n } else {\n bin_max = bin_mid;\n }\n bin_mid = Math.floor((bin_max - bin_min) / 2 + bin_min);\n }\n // Use the result from this iteration as the maximum for the next.\n bin_max = bin_mid;\n var start = Math.max(1, loc - bin_mid + 1);\n var finish = Math.min(loc + bin_mid, text.length) + pattern.length;\n\n var rd = Array(finish + 2);\n rd[finish + 1] = (1 << d) - 1;\n for (var j = finish; j >= start; j--) {\n // The alphabet (s) is a sparse hash, so the following line generates\n // warnings.\n var charMatch = s[text.charAt(j - 1)];\n if (d === 0) { // First pass: exact match.\n rd[j] = ((rd[j + 1] << 1) | 1) & charMatch;\n } else { // Subsequent passes: fuzzy match.\n rd[j] = ((rd[j + 1] << 1) | 1) & charMatch |\n (((last_rd[j + 1] | last_rd[j]) << 1) | 1) |\n last_rd[j + 1];\n }\n if (rd[j] & matchmask) {\n var score = match_bitapScore(d, j - 1);\n // This match will almost certainly be better than any existing match.\n // But check anyway.\n if (score <= score_threshold) {\n // Told you so.\n score_threshold = score;\n best_loc = j - 1;\n if (best_loc > loc) {\n // When passing loc, don't exceed our current distance from loc.\n start = Math.max(1, 2 * loc - best_loc);\n } else {\n // Already passed loc, downhill from here on in.\n break;\n }\n }\n }\n }\n // No hope for a (better) match at greater error levels.\n if (match_bitapScore(d + 1, loc) > score_threshold) {\n break;\n }\n last_rd = rd;\n }\n return best_loc;\n};\n\n\n/**\n * Initialise the alphabet for the Bitap algorithm.\n * @param {string} pattern The text to encode.\n * @return {Object} Hash of character locations.\n * @private\n */\ndiff_match_patch.prototype.match_alphabet = function(pattern) {\n var s = {};\n for (var i = 0; i < pattern.length; i++) {\n s[pattern.charAt(i)] = 0;\n }\n for (var i = 0; i < pattern.length; i++) {\n s[pattern.charAt(i)] |= 1 << (pattern.length - i - 1);\n }\n return s;\n};\n\n\n// PATCH FUNCTIONS\n\n\n/**\n * Increase the context until it is unique,\n * but don't let the pattern expand beyond Match_MaxBits.\n * @param {patch_obj} patch The patch to grow.\n * @param {string} text Source text.\n * @private\n */\ndiff_match_patch.prototype.patch_addContext = function(patch, text) {\n if (text.length == 0) {\n return;\n }\n var pattern = text.substring(patch.start2, patch.start2 + patch.length1);\n var padding = 0;\n\n // Look for the first and last matches of pattern in text. If two different\n // matches are found, increase the pattern length.\n while (text.indexOf(pattern) != text.lastIndexOf(pattern) &&\n pattern.length < this.Match_MaxBits - this.Patch_Margin -\n this.Patch_Margin) {\n padding += this.Patch_Margin;\n pattern = text.substring(patch.start2 - padding,\n patch.start2 + patch.length1 + padding);\n }\n // Add one chunk for good luck.\n padding += this.Patch_Margin;\n\n // Add the prefix.\n var prefix = text.substring(patch.start2 - padding, patch.start2);\n if (prefix) {\n patch.diffs.unshift([DIFF_EQUAL, prefix]);\n }\n // Add the suffix.\n var suffix = text.substring(patch.start2 + patch.length1,\n patch.start2 + patch.length1 + padding);\n if (suffix) {\n patch.diffs.push([DIFF_EQUAL, suffix]);\n }\n\n // Roll back the start points.\n patch.start1 -= prefix.length;\n patch.start2 -= prefix.length;\n // Extend the lengths.\n patch.length1 += prefix.length + suffix.length;\n patch.length2 += prefix.length + suffix.length;\n};\n\n\n/**\n * Compute a list of patches to turn text1 into text2.\n * Use diffs if provided, otherwise compute it ourselves.\n * There are four ways to call this function, depending on what data is\n * available to the caller:\n * Method 1:\n * a = text1, b = text2\n * Method 2:\n * a = diffs\n * Method 3 (optimal):\n * a = text1, b = diffs\n * Method 4 (deprecated, use method 3):\n * a = text1, b = text2, c = diffs\n *\n * @param {string|Array.<Array.<number|string>>} a text1 (methods 1,3,4) or\n * Array of diff tuples for text1 to text2 (method 2).\n * @param {string|Array.<Array.<number|string>>} opt_b text2 (methods 1,4) or\n * Array of diff tuples for text1 to text2 (method 3) or undefined (method 2).\n * @param {string|Array.<Array.<number|string>>} opt_c Array of diff tuples for\n * text1 to text2 (method 4) or undefined (methods 1,2,3).\n * @return {Array.<patch_obj>} Array of patch objects.\n */\ndiff_match_patch.prototype.patch_make = function(a, opt_b, opt_c) {\n var text1, diffs;\n if (typeof a == 'string' && typeof opt_b == 'string' &&\n typeof opt_c == 'undefined') {\n // Method 1: text1, text2\n // Compute diffs from text1 and text2.\n text1 = a;\n diffs = this.diff_main(text1, opt_b, true);\n if (diffs.length > 2) {\n this.diff_cleanupSemantic(diffs);\n this.diff_cleanupEfficiency(diffs);\n }\n } else if (a && typeof a == 'object' && typeof opt_b == 'undefined' &&\n typeof opt_c == 'undefined') {\n // Method 2: diffs\n // Compute text1 from diffs.\n diffs = a;\n text1 = this.diff_text1(diffs);\n } else if (typeof a == 'string' && opt_b && typeof opt_b == 'object' &&\n typeof opt_c == 'undefined') {\n // Method 3: text1, diffs\n text1 = a;\n diffs = opt_b;\n } else if (typeof a == 'string' && typeof opt_b == 'string' &&\n opt_c && typeof opt_c == 'object') {\n // Method 4: text1, text2, diffs\n // text2 is not used.\n text1 = a;\n diffs = opt_c;\n } else {\n throw new Error('Unknown call format to patch_make.');\n }\n\n if (diffs.length === 0) {\n return []; // Get rid of the null case.\n }\n var patches = [];\n var patch = new patch_obj();\n var patchDiffLength = 0; // Keeping our own length var is faster in JS.\n var char_count1 = 0; // Number of characters into the text1 string.\n var char_count2 = 0; // Number of characters into the text2 string.\n // Start with text1 (prepatch_text) and apply the diffs until we arrive at\n // text2 (postpatch_text). We recreate the patches one by one to determine\n // context info.\n var prepatch_text = text1;\n var postpatch_text = text1;\n for (var x = 0; x < diffs.length; x++) {\n var diff_type = diffs[x][0];\n var diff_text = diffs[x][1];\n\n if (!patchDiffLength && diff_type !== DIFF_EQUAL) {\n // A new patch starts here.\n patch.start1 = char_count1;\n patch.start2 = char_count2;\n }\n\n switch (diff_type) {\n case DIFF_INSERT:\n patch.diffs[patchDiffLength++] = diffs[x];\n patch.length2 += diff_text.length;\n postpatch_text = postpatch_text.substring(0, char_count2) + diff_text +\n postpatch_text.substring(char_count2);\n break;\n case DIFF_DELETE:\n patch.length1 += diff_text.length;\n patch.diffs[patchDiffLength++] = diffs[x];\n postpatch_text = postpatch_text.substring(0, char_count2) +\n postpatch_text.substring(char_count2 +\n diff_text.length);\n break;\n case DIFF_EQUAL:\n if (diff_text.length <= 2 * this.Patch_Margin &&\n patchDiffLength && diffs.length != x + 1) {\n // Small equality inside a patch.\n patch.diffs[patchDiffLength++] = diffs[x];\n patch.length1 += diff_text.length;\n patch.length2 += diff_text.length;\n } else if (diff_text.length >= 2 * this.Patch_Margin) {\n // Time for a new patch.\n if (patchDiffLength) {\n this.patch_addContext(patch, prepatch_text);\n patches.push(patch);\n patch = new patch_obj();\n patchDiffLength = 0;\n // Unlike Unidiff, our patch lists have a rolling context.\n // http://code.google.com/p/google-diff-match-patch/wiki/Unidiff\n // Update prepatch text & pos to reflect the application of the\n // just completed patch.\n prepatch_text = postpatch_text;\n char_count1 = char_count2;\n }\n }\n break;\n }\n\n // Update the current character count.\n if (diff_type !== DIFF_INSERT) {\n char_count1 += diff_text.length;\n }\n if (diff_type !== DIFF_DELETE) {\n char_count2 += diff_text.length;\n }\n }\n // Pick up the leftover patch if not empty.\n if (patchDiffLength) {\n this.patch_addContext(patch, prepatch_text);\n patches.push(patch);\n }\n\n return patches;\n};\n\n\n/**\n * Given an array of patches, return another array that is identical.\n * @param {Array.<patch_obj>} patches Array of patch objects.\n * @return {Array.<patch_obj>} Array of patch objects.\n */\ndiff_match_patch.prototype.patch_deepCopy = function(patches) {\n // Making deep copies is hard in JavaScript.\n var patchesCopy = [];\n for (var x = 0; x < patches.length; x++) {\n var patch = patches[x];\n var patchCopy = new patch_obj();\n patchCopy.diffs = [];\n for (var y = 0; y < patch.diffs.length; y++) {\n patchCopy.diffs[y] = patch.diffs[y].slice();\n }\n patchCopy.start1 = patch.start1;\n patchCopy.start2 = patch.start2;\n patchCopy.length1 = patch.length1;\n patchCopy.length2 = patch.length2;\n patchesCopy[x] = patchCopy;\n }\n return patchesCopy;\n};\n\n\n/**\n * Merge a set of patches onto the text. Return a patched text, as well\n * as a list of true/false values indicating which patches were applied.\n * @param {Array.<patch_obj>} patches Array of patch objects.\n * @param {string} text Old text.\n * @return {Array.<string|Array.<boolean>>} Two element Array, containing the\n * new text and an array of boolean values.\n */\ndiff_match_patch.prototype.patch_apply = function(patches, text) {\n if (patches.length == 0) {\n return [text, []];\n }\n\n // Deep copy the patches so that no changes are made to originals.\n patches = this.patch_deepCopy(patches);\n\n var nullPadding = this.patch_addPadding(patches);\n text = nullPadding + text + nullPadding;\n\n this.patch_splitMax(patches);\n // delta keeps track of the offset between the expected and actual location\n // of the previous patch. If there are patches expected at positions 10 and\n // 20, but the first patch was found at 12, delta is 2 and the second patch\n // has an effective expected position of 22.\n var delta = 0;\n var results = [];\n for (var x = 0; x < patches.length; x++) {\n var expected_loc = patches[x].start2 + delta;\n var text1 = this.diff_text1(patches[x].diffs);\n var start_loc;\n var end_loc = -1;\n if (text1.length > this.Match_MaxBits) {\n // patch_splitMax will only provide an oversized pattern in the case of\n // a monster delete.\n start_loc = this.match_main(text, text1.substring(0, this.Match_MaxBits),\n expected_loc);\n if (start_loc != -1) {\n end_loc = this.match_main(text,\n text1.substring(text1.length - this.Match_MaxBits),\n expected_loc + text1.length - this.Match_MaxBits);\n if (end_loc == -1 || start_loc >= end_loc) {\n // Can't find valid trailing context. Drop this patch.\n start_loc = -1;\n }\n }\n } else {\n start_loc = this.match_main(text, text1, expected_loc);\n }\n if (start_loc == -1) {\n // No match found. :(\n results[x] = false;\n // Subtract the delta for this failed patch from subsequent patches.\n delta -= patches[x].length2 - patches[x].length1;\n } else {\n // Found a match. :)\n results[x] = true;\n delta = start_loc - expected_loc;\n var text2;\n if (end_loc == -1) {\n text2 = text.substring(start_loc, start_loc + text1.length);\n } else {\n text2 = text.substring(start_loc, end_loc + this.Match_MaxBits);\n }\n if (text1 == text2) {\n // Perfect match, just shove the replacement text in.\n text = text.substring(0, start_loc) +\n this.diff_text2(patches[x].diffs) +\n text.substring(start_loc + text1.length);\n } else {\n // Imperfect match. Run a diff to get a framework of equivalent\n // indices.\n var diffs = this.diff_main(text1, text2, false);\n if (text1.length > this.Match_MaxBits &&\n this.diff_levenshtein(diffs) / text1.length >\n this.Patch_DeleteThreshold) {\n // The end points match, but the content is unacceptably bad.\n results[x] = false;\n } else {\n this.diff_cleanupSemanticLossless(diffs);\n var index1 = 0;\n var index2;\n for (var y = 0; y < patches[x].diffs.length; y++) {\n var mod = patches[x].diffs[y];\n if (mod[0] !== DIFF_EQUAL) {\n index2 = this.diff_xIndex(diffs, index1);\n }\n if (mod[0] === DIFF_INSERT) { // Insertion\n text = text.substring(0, start_loc + index2) + mod[1] +\n text.substring(start_loc + index2);\n } else if (mod[0] === DIFF_DELETE) { // Deletion\n text = text.substring(0, start_loc + index2) +\n text.substring(start_loc + this.diff_xIndex(diffs,\n index1 + mod[1].length));\n }\n if (mod[0] !== DIFF_DELETE) {\n index1 += mod[1].length;\n }\n }\n }\n }\n }\n }\n // Strip the padding off.\n text = text.substring(nullPadding.length, text.length - nullPadding.length);\n return [text, results];\n};\n\n\n/**\n * Add some padding on text start and end so that edges can match something.\n * Intended to be called only from within patch_apply.\n * @param {Array.<patch_obj>} patches Array of patch objects.\n * @return {string} The padding string added to each side.\n */\ndiff_match_patch.prototype.patch_addPadding = function(patches) {\n var paddingLength = this.Patch_Margin;\n var nullPadding = '';\n for (var x = 1; x <= paddingLength; x++) {\n nullPadding += String.fromCharCode(x);\n }\n\n // Bump all the patches forward.\n for (var x = 0; x < patches.length; x++) {\n patches[x].start1 += paddingLength;\n patches[x].start2 += paddingLength;\n }\n\n // Add some padding on start of first diff.\n var patch = patches[0];\n var diffs = patch.diffs;\n if (diffs.length == 0 || diffs[0][0] != DIFF_EQUAL) {\n // Add nullPadding equality.\n diffs.unshift([DIFF_EQUAL, nullPadding]);\n patch.start1 -= paddingLength; // Should be 0.\n patch.start2 -= paddingLength; // Should be 0.\n patch.length1 += paddingLength;\n patch.length2 += paddingLength;\n } else if (paddingLength > diffs[0][1].length) {\n // Grow first equality.\n var extraLength = paddingLength - diffs[0][1].length;\n diffs[0][1] = nullPadding.substring(diffs[0][1].length) + diffs[0][1];\n patch.start1 -= extraLength;\n patch.start2 -= extraLength;\n patch.length1 += extraLength;\n patch.length2 += extraLength;\n }\n\n // Add some padding on end of last diff.\n patch = patches[patches.length - 1];\n diffs = patch.diffs;\n if (diffs.length == 0 || diffs[diffs.length - 1][0] != DIFF_EQUAL) {\n // Add nullPadding equality.\n diffs.push([DIFF_EQUAL, nullPadding]);\n patch.length1 += paddingLength;\n patch.length2 += paddingLength;\n } else if (paddingLength > diffs[diffs.length - 1][1].length) {\n // Grow last equality.\n var extraLength = paddingLength - diffs[diffs.length - 1][1].length;\n diffs[diffs.length - 1][1] += nullPadding.substring(0, extraLength);\n patch.length1 += extraLength;\n patch.length2 += extraLength;\n }\n\n return nullPadding;\n};\n\n\n/**\n * Look through the patches and break up any which are longer than the maximum\n * limit of the match algorithm.\n * @param {Array.<patch_obj>} patches Array of patch objects.\n */\ndiff_match_patch.prototype.patch_splitMax = function(patches) {\n for (var x = 0; x < patches.length; x++) {\n if (patches[x].length1 > this.Match_MaxBits) {\n var bigpatch = patches[x];\n // Remove the big old patch.\n patches.splice(x--, 1);\n var patch_size = this.Match_MaxBits;\n var start1 = bigpatch.start1;\n var start2 = bigpatch.start2;\n var precontext = '';\n while (bigpatch.diffs.length !== 0) {\n // Create one of several smaller patches.\n var patch = new patch_obj();\n var empty = true;\n patch.start1 = start1 - precontext.length;\n patch.start2 = start2 - precontext.length;\n if (precontext !== '') {\n patch.length1 = patch.length2 = precontext.length;\n patch.diffs.push([DIFF_EQUAL, precontext]);\n }\n while (bigpatch.diffs.length !== 0 &&\n patch.length1 < patch_size - this.Patch_Margin) {\n var diff_type = bigpatch.diffs[0][0];\n var diff_text = bigpatch.diffs[0][1];\n if (diff_type === DIFF_INSERT) {\n // Insertions are harmless.\n patch.length2 += diff_text.length;\n start2 += diff_text.length;\n patch.diffs.push(bigpatch.diffs.shift());\n empty = false;\n } else if (diff_type === DIFF_DELETE && patch.diffs.length == 1 &&\n patch.diffs[0][0] == DIFF_EQUAL &&\n diff_text.length > 2 * patch_size) {\n // This is a large deletion. Let it pass in one chunk.\n patch.length1 += diff_text.length;\n start1 += diff_text.length;\n empty = false;\n patch.diffs.push([diff_type, diff_text]);\n bigpatch.diffs.shift();\n } else {\n // Deletion or equality. Only take as much as we can stomach.\n diff_text = diff_text.substring(0, patch_size - patch.length1 -\n this.Patch_Margin);\n patch.length1 += diff_text.length;\n start1 += diff_text.length;\n if (diff_type === DIFF_EQUAL) {\n patch.length2 += diff_text.length;\n start2 += diff_text.length;\n } else {\n empty = false;\n }\n patch.diffs.push([diff_type, diff_text]);\n if (diff_text == bigpatch.diffs[0][1]) {\n bigpatch.diffs.shift();\n } else {\n bigpatch.diffs[0][1] =\n bigpatch.diffs[0][1].substring(diff_text.length);\n }\n }\n }\n // Compute the head context for the next patch.\n precontext = this.diff_text2(patch.diffs);\n precontext =\n precontext.substring(precontext.length - this.Patch_Margin);\n // Append the end context for this patch.\n var postcontext = this.diff_text1(bigpatch.diffs)\n .substring(0, this.Patch_Margin);\n if (postcontext !== '') {\n patch.length1 += postcontext.length;\n patch.length2 += postcontext.length;\n if (patch.diffs.length !== 0 &&\n patch.diffs[patch.diffs.length - 1][0] === DIFF_EQUAL) {\n patch.diffs[patch.diffs.length - 1][1] += postcontext;\n } else {\n patch.diffs.push([DIFF_EQUAL, postcontext]);\n }\n }\n if (!empty) {\n patches.splice(++x, 0, patch);\n }\n }\n }\n }\n};\n\n\n/**\n * Take a list of patches and return a textual representation.\n * @param {Array.<patch_obj>} patches Array of patch objects.\n * @return {string} Text representation of patches.\n */\ndiff_match_patch.prototype.patch_toText = function(patches) {\n var text = [];\n for (var x = 0; x < patches.length; x++) {\n text[x] = patches[x];\n }\n return text.join('');\n};\n\n\n/**\n * Parse a textual representation of patches and return a list of patch objects.\n * @param {string} textline Text representation of patches.\n * @return {Array.<patch_obj>} Array of patch objects.\n * @throws {Error} If invalid input.\n */\ndiff_match_patch.prototype.patch_fromText = function(textline) {\n var patches = [];\n if (!textline) {\n return patches;\n }\n // Opera doesn't know how to decode char 0.\n textline = textline.replace(/%00/g, '\\0');\n var text = textline.split('\\n');\n var textPointer = 0;\n while (textPointer < text.length) {\n var m = text[textPointer].match(/^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$/);\n if (!m) {\n throw new Error('Invalid patch string: ' + text[textPointer]);\n }\n var patch = new patch_obj();\n patches.push(patch);\n patch.start1 = parseInt(m[1], 10);\n if (m[2] === '') {\n patch.start1--;\n patch.length1 = 1;\n } else if (m[2] == '0') {\n patch.length1 = 0;\n } else {\n patch.start1--;\n patch.length1 = parseInt(m[2], 10);\n }\n\n patch.start2 = parseInt(m[3], 10);\n if (m[4] === '') {\n patch.start2--;\n patch.length2 = 1;\n } else if (m[4] == '0') {\n patch.length2 = 0;\n } else {\n patch.start2--;\n patch.length2 = parseInt(m[4], 10);\n }\n textPointer++;\n\n while (textPointer < text.length) {\n var sign = text[textPointer].charAt(0);\n try {\n var line = decodeURI(text[textPointer].substring(1));\n } catch (ex) {\n // Malformed URI sequence.\n throw new Error('Illegal escape in patch_fromText: ' + line);\n }\n if (sign == '-') {\n // Deletion.\n patch.diffs.push([DIFF_DELETE, line]);\n } else if (sign == '+') {\n // Insertion.\n patch.diffs.push([DIFF_INSERT, line]);\n } else if (sign == ' ') {\n // Minor equality.\n patch.diffs.push([DIFF_EQUAL, line]);\n } else if (sign == '@') {\n // Start of next patch.\n break;\n } else if (sign === '') {\n // Blank line? Whatever.\n } else {\n // WTF?\n throw new Error('Invalid patch mode \"' + sign + '\" in: ' + line);\n }\n textPointer++;\n }\n }\n return patches;\n};\n\n\n/**\n * Class representing one patch operation.\n * @constructor\n */\nfunction patch_obj() {\n /** @type {Array.<Array.<number|string>>} */\n this.diffs = [];\n /** @type {?number} */\n this.start1 = null;\n /** @type {?number} */\n this.start2 = null;\n /** @type {number} */\n this.length1 = 0;\n /** @type {number} */\n this.length2 = 0;\n}\n\n\n/**\n * Emmulate GNU diff's format.\n * Header: @@ -382,8 +481,9 @@\n * Indicies are printed as 1-based, not 0-based.\n * @return {string} The GNU diff string.\n */\npatch_obj.prototype.toString = function() {\n var coords1, coords2;\n if (this.length1 === 0) {\n coords1 = this.start1 + ',0';\n } else if (this.length1 == 1) {\n coords1 = this.start1 + 1;\n } else {\n coords1 = (this.start1 + 1) + ',' + this.length1;\n }\n if (this.length2 === 0) {\n coords2 = this.start2 + ',0';\n } else if (this.length2 == 1) {\n coords2 = this.start2 + 1;\n } else {\n coords2 = (this.start2 + 1) + ',' + this.length2;\n }\n var text = ['@@ -' + coords1 + ' +' + coords2 + ' @@\\n'];\n var op;\n // Escape the body of the patch with %xx notation.\n for (var x = 0; x < this.diffs.length; x++) {\n switch (this.diffs[x][0]) {\n case DIFF_INSERT:\n op = '+';\n break;\n case DIFF_DELETE:\n op = '-';\n break;\n case DIFF_EQUAL:\n op = ' ';\n break;\n }\n text[x + 1] = op + encodeURI(this.diffs[x][1]) + '\\n';\n }\n // Opera doesn't know how to encode char 0.\n return text.join('').replace(/\\x00/g, '%00').replace(/%20/g, ' ');\n};\n\n\n// Export these global variables so that they survive Google's JS compiler.\n/*changed by lfborjas: changed `window` for `exports` to make it suitable for the node.js module conventions*/\nexports['diff_match_patch'] = diff_match_patch;\nexports['patch_obj'] = patch_obj;\nexports['DIFF_DELETE'] = DIFF_DELETE;\nexports['DIFF_INSERT'] = DIFF_INSERT;\nexports['DIFF_EQUAL'] = DIFF_EQUAL;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","module.exports = flatten\nflatten.flatten = flatten\nflatten.unflatten = unflatten\n\nfunction isBuffer (obj) {\n return obj &&\n obj.constructor &&\n (typeof obj.constructor.isBuffer === 'function') &&\n obj.constructor.isBuffer(obj)\n}\n\nfunction keyIdentity (key) {\n return key\n}\n\nfunction flatten (target, opts) {\n opts = opts || {}\n\n const delimiter = opts.delimiter || '.'\n const maxDepth = opts.maxDepth\n const transformKey = opts.transformKey || keyIdentity\n const output = {}\n\n function step (object, prev, currentDepth) {\n currentDepth = currentDepth || 1\n Object.keys(object).forEach(function (key) {\n const value = object[key]\n const isarray = opts.safe && Array.isArray(value)\n const type = Object.prototype.toString.call(value)\n const isbuffer = isBuffer(value)\n const isobject = (\n type === '[object Object]' ||\n type === '[object Array]'\n )\n\n const newKey = prev\n ? prev + delimiter + transformKey(key)\n : transformKey(key)\n\n if (!isarray && !isbuffer && isobject && Object.keys(value).length &&\n (!opts.maxDepth || currentDepth < maxDepth)) {\n return step(value, newKey, currentDepth + 1)\n }\n\n output[newKey] = value\n })\n }\n\n step(target)\n\n return output\n}\n\nfunction unflatten (target, opts) {\n opts = opts || {}\n\n const delimiter = opts.delimiter || '.'\n const overwrite = opts.overwrite || false\n const transformKey = opts.transformKey || keyIdentity\n const result = {}\n\n const isbuffer = isBuffer(target)\n if (isbuffer || Object.prototype.toString.call(target) !== '[object Object]') {\n return target\n }\n\n // safely ensure that the key is\n // an integer.\n function getkey (key) {\n const parsedKey = Number(key)\n\n return (\n isNaN(parsedKey) ||\n key.indexOf('.') !== -1 ||\n opts.object\n ) ? key\n : parsedKey\n }\n\n function addKeys (keyPrefix, recipient, target) {\n return Object.keys(target).reduce(function (result, key) {\n result[keyPrefix + delimiter + key] = target[key]\n\n return result\n }, recipient)\n }\n\n function isEmpty (val) {\n const type = Object.prototype.toString.call(val)\n const isArray = type === '[object Array]'\n const isObject = type === '[object Object]'\n\n if (!val) {\n return true\n } else if (isArray) {\n return !val.length\n } else if (isObject) {\n return !Object.keys(val).length\n }\n }\n\n target = Object.keys(target).reduce(function (result, key) {\n const type = Object.prototype.toString.call(target[key])\n const isObject = (type === '[object Object]' || type === '[object Array]')\n if (!isObject || isEmpty(target[key])) {\n result[key] = target[key]\n return result\n } else {\n return addKeys(\n key,\n result,\n flatten(target[key], opts)\n )\n }\n }, {})\n\n Object.keys(target).forEach(function (key) {\n const split = key.split(delimiter).map(transformKey)\n let key1 = getkey(split.shift())\n let key2 = getkey(split[0])\n let recipient = result\n\n while (key2 !== undefined) {\n if (key1 === '__proto__') {\n return\n }\n\n const type = Object.prototype.toString.call(recipient[key1])\n const isobject = (\n type === '[object Object]' ||\n type === '[object Array]'\n )\n\n // do not write over falsey, non-undefined values if overwrite is false\n if (!overwrite && !isobject && typeof recipient[key1] !== 'undefined') {\n return\n }\n\n if ((overwrite && !isobject) || (!overwrite && recipient[key1] == null)) {\n recipient[key1] = (\n typeof key2 === 'number' &&\n !opts.object ? [] : {}\n )\n }\n\n recipient = recipient[key1]\n if (split.length > 0) {\n key1 = getkey(split.shift())\n key2 = getkey(split[0])\n }\n }\n\n // unflatten again for 'messy objects'\n recipient[key1] = unflatten(target[key], opts)\n })\n\n return result\n}\n","/*!\n * get-value <https://github.com/jonschlinkert/get-value>\n *\n * Copyright (c) 2014-2018, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nconst isObject = require('isobject');\n\nmodule.exports = function(target, path, options) {\n if (!isObject(options)) {\n options = { default: options };\n }\n\n if (!isValidObject(target)) {\n return typeof options.default !== 'undefined' ? options.default : target;\n }\n\n if (typeof path === 'number') {\n path = String(path);\n }\n\n const isArray = Array.isArray(path);\n const isString = typeof path === 'string';\n const splitChar = options.separator || '.';\n const joinChar = options.joinChar || (typeof splitChar === 'string' ? splitChar : '.');\n\n if (!isString && !isArray) {\n return target;\n }\n\n if (isString && path in target) {\n return isValid(path, target, options) ? target[path] : options.default;\n }\n\n let segs = isArray ? path : split(path, splitChar, options);\n let len = segs.length;\n let idx = 0;\n\n do {\n let prop = segs[idx];\n if (typeof prop === 'number') {\n prop = String(prop);\n }\n\n while (prop && prop.slice(-1) === '\\\\') {\n prop = join([prop.slice(0, -1), segs[++idx] || ''], joinChar, options);\n }\n\n if (prop in target) {\n if (!isValid(prop, target, options)) {\n return options.default;\n }\n\n target = target[prop];\n } else {\n let hasProp = false;\n let n = idx + 1;\n\n while (n < len) {\n prop = join([prop, segs[n++]], joinChar, options);\n\n if ((hasProp = prop in target)) {\n if (!isValid(prop, target, options)) {\n return options.default;\n }\n\n target = target[prop];\n idx = n - 1;\n break;\n }\n }\n\n if (!hasProp) {\n return options.default;\n }\n }\n } while (++idx < len && isValidObject(target));\n\n if (idx === len) {\n return target;\n }\n\n return options.default;\n};\n\nfunction join(segs, joinChar, options) {\n if (typeof options.join === 'function') {\n return options.join(segs);\n }\n return segs[0] + joinChar + segs[1];\n}\n\nfunction split(path, splitChar, options) {\n if (typeof options.split === 'function') {\n return options.split(path);\n }\n return path.split(splitChar);\n}\n\nfunction isValid(key, target, options) {\n if (typeof options.isValid === 'function') {\n return options.isValid(key, target);\n }\n return true;\n}\n\nfunction isValidObject(val) {\n return isObject(val) || Array.isArray(val) || typeof val === 'function';\n}\n","/*!\n * is-plain-object <https://github.com/jonschlinkert/is-plain-object>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nvar isObject = require('isobject');\n\nfunction isObjectObject(o) {\n return isObject(o) === true\n && Object.prototype.toString.call(o) === '[object Object]';\n}\n\nmodule.exports = function isPlainObject(o) {\n var ctor,prot;\n\n if (isObjectObject(o) === false) return false;\n\n // If has modified constructor\n ctor = o.constructor;\n if (typeof ctor !== 'function') return false;\n\n // If has modified prototype\n prot = ctor.prototype;\n if (isObjectObject(prot) === false) return false;\n\n // If constructor does not have an Object-specific method\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false;\n }\n\n // Most likely a plain Object\n return true;\n};\n","/*!\n * is-primitive <https://github.com/jonschlinkert/is-primitive>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function isPrimitive(val) {\n if (typeof val === 'object') {\n return val === null;\n }\n return typeof val !== 'function';\n};\n","/*!\n * isobject <https://github.com/jonschlinkert/isobject>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function isObject(val) {\n return val != null && typeof val === 'object' && Array.isArray(val) === false;\n};\n","\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/index.ts\nvar index_exports = {};\n__export(index_exports, {\n AccessTokenEvents: () => AccessTokenEvents,\n CheckSessionIFrame: () => CheckSessionIFrame,\n DPoPState: () => DPoPState,\n ErrorResponse: () => ErrorResponse,\n ErrorTimeout: () => ErrorTimeout,\n InMemoryWebStorage: () => InMemoryWebStorage,\n IndexedDbDPoPStore: () => IndexedDbDPoPStore,\n Log: () => Log,\n Logger: () => Logger,\n MetadataService: () => MetadataService,\n OidcClient: () => OidcClient,\n OidcClientSettingsStore: () => OidcClientSettingsStore,\n SessionMonitor: () => SessionMonitor,\n SigninResponse: () => SigninResponse,\n SigninState: () => SigninState,\n SignoutResponse: () => SignoutResponse,\n State: () => State,\n User: () => User,\n UserManager: () => UserManager,\n UserManagerSettingsStore: () => UserManagerSettingsStore,\n Version: () => Version,\n WebStorageStateStore: () => WebStorageStateStore\n});\nmodule.exports = __toCommonJS(index_exports);\n\n// src/utils/Logger.ts\nvar nopLogger = {\n debug: () => void 0,\n info: () => void 0,\n warn: () => void 0,\n error: () => void 0\n};\nvar level;\nvar logger;\nvar Log = /* @__PURE__ */ ((Log2) => {\n Log2[Log2[\"NONE\"] = 0] = \"NONE\";\n Log2[Log2[\"ERROR\"] = 1] = \"ERROR\";\n Log2[Log2[\"WARN\"] = 2] = \"WARN\";\n Log2[Log2[\"INFO\"] = 3] = \"INFO\";\n Log2[Log2[\"DEBUG\"] = 4] = \"DEBUG\";\n return Log2;\n})(Log || {});\n((Log2) => {\n function reset() {\n level = 3 /* INFO */;\n logger = nopLogger;\n }\n Log2.reset = reset;\n function setLevel(value) {\n if (!(0 /* NONE */ <= value && value <= 4 /* DEBUG */)) {\n throw new Error(\"Invalid log level\");\n }\n level = value;\n }\n Log2.setLevel = setLevel;\n function setLogger(value) {\n logger = value;\n }\n Log2.setLogger = setLogger;\n})(Log || (Log = {}));\nvar Logger = class _Logger {\n constructor(_name) {\n this._name = _name;\n }\n /* eslint-disable @typescript-eslint/no-unsafe-enum-comparison */\n debug(...args) {\n if (level >= 4 /* DEBUG */) {\n logger.debug(_Logger._format(this._name, this._method), ...args);\n }\n }\n info(...args) {\n if (level >= 3 /* INFO */) {\n logger.info(_Logger._format(this._name, this._method), ...args);\n }\n }\n warn(...args) {\n if (level >= 2 /* WARN */) {\n logger.warn(_Logger._format(this._name, this._method), ...args);\n }\n }\n error(...args) {\n if (level >= 1 /* ERROR */) {\n logger.error(_Logger._format(this._name, this._method), ...args);\n }\n }\n /* eslint-enable @typescript-eslint/no-unsafe-enum-comparison */\n throw(err) {\n this.error(err);\n throw err;\n }\n create(method) {\n const methodLogger = Object.create(this);\n methodLogger._method = method;\n methodLogger.debug(\"begin\");\n return methodLogger;\n }\n static createStatic(name, staticMethod) {\n const staticLogger = new _Logger(`${name}.${staticMethod}`);\n staticLogger.debug(\"begin\");\n return staticLogger;\n }\n static _format(name, method) {\n const prefix = `[${name}]`;\n return method ? `${prefix} ${method}:` : prefix;\n }\n /* eslint-disable @typescript-eslint/no-unsafe-enum-comparison */\n // helpers for static class methods\n static debug(name, ...args) {\n if (level >= 4 /* DEBUG */) {\n logger.debug(_Logger._format(name), ...args);\n }\n }\n static info(name, ...args) {\n if (level >= 3 /* INFO */) {\n logger.info(_Logger._format(name), ...args);\n }\n }\n static warn(name, ...args) {\n if (level >= 2 /* WARN */) {\n logger.warn(_Logger._format(name), ...args);\n }\n }\n static error(name, ...args) {\n if (level >= 1 /* ERROR */) {\n logger.error(_Logger._format(name), ...args);\n }\n }\n /* eslint-enable @typescript-eslint/no-unsafe-enum-comparison */\n};\nLog.reset();\n\n// src/utils/JwtUtils.ts\nvar import_jwt_decode = require(\"jwt-decode\");\nvar JwtUtils = class {\n // IMPORTANT: doesn't validate the token\n static decode(token) {\n try {\n return (0, import_jwt_decode.jwtDecode)(token);\n } catch (err) {\n Logger.error(\"JwtUtils.decode\", err);\n throw err;\n }\n }\n static async generateSignedJwt(header, payload, privateKey) {\n const encodedHeader = CryptoUtils.encodeBase64Url(new TextEncoder().encode(JSON.stringify(header)));\n const encodedPayload = CryptoUtils.encodeBase64Url(new TextEncoder().encode(JSON.stringify(payload)));\n const encodedToken = `${encodedHeader}.${encodedPayload}`;\n const signature = await window.crypto.subtle.sign(\n {\n name: \"ECDSA\",\n hash: { name: \"SHA-256\" }\n },\n privateKey,\n new TextEncoder().encode(encodedToken)\n );\n const encodedSignature = CryptoUtils.encodeBase64Url(new Uint8Array(signature));\n return `${encodedToken}.${encodedSignature}`;\n }\n};\n\n// src/utils/CryptoUtils.ts\nvar UUID_V4_TEMPLATE = \"10000000-1000-4000-8000-100000000000\";\nvar toBase64 = (val) => btoa([...new Uint8Array(val)].map((chr) => String.fromCharCode(chr)).join(\"\"));\nvar _CryptoUtils = class _CryptoUtils {\n static _randomWord() {\n const arr = new Uint32Array(1);\n crypto.getRandomValues(arr);\n return arr[0];\n }\n /**\n * Generates RFC4122 version 4 guid\n */\n static generateUUIDv4() {\n const uuid = UUID_V4_TEMPLATE.replace(\n /[018]/g,\n (c) => (+c ^ _CryptoUtils._randomWord() & 15 >> +c / 4).toString(16)\n );\n return uuid.replace(/-/g, \"\");\n }\n /**\n * PKCE: Generate a code verifier\n */\n static generateCodeVerifier() {\n return _CryptoUtils.generateUUIDv4() + _CryptoUtils.generateUUIDv4() + _CryptoUtils.generateUUIDv4();\n }\n /**\n * PKCE: Generate a code challenge\n */\n static async generateCodeChallenge(code_verifier) {\n if (!crypto.subtle) {\n throw new Error(\"Crypto.subtle is available only in secure contexts (HTTPS).\");\n }\n try {\n const encoder = new TextEncoder();\n const data = encoder.encode(code_verifier);\n const hashed = await crypto.subtle.digest(\"SHA-256\", data);\n return toBase64(hashed).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n } catch (err) {\n Logger.error(\"CryptoUtils.generateCodeChallenge\", err);\n throw err;\n }\n }\n /**\n * Generates a base64-encoded string for a basic auth header\n */\n static generateBasicAuth(client_id, client_secret) {\n const encoder = new TextEncoder();\n const data = encoder.encode([client_id, client_secret].join(\":\"));\n return toBase64(data);\n }\n /**\n * Generates a hash of a string using a given algorithm\n * @param alg\n * @param message\n */\n static async hash(alg, message) {\n const msgUint8 = new TextEncoder().encode(message);\n const hashBuffer = await crypto.subtle.digest(alg, msgUint8);\n return new Uint8Array(hashBuffer);\n }\n /**\n * Generates a rfc7638 compliant jwk thumbprint\n * @param jwk\n */\n static async customCalculateJwkThumbprint(jwk) {\n let jsonObject;\n switch (jwk.kty) {\n case \"RSA\":\n jsonObject = {\n \"e\": jwk.e,\n \"kty\": jwk.kty,\n \"n\": jwk.n\n };\n break;\n case \"EC\":\n jsonObject = {\n \"crv\": jwk.crv,\n \"kty\": jwk.kty,\n \"x\": jwk.x,\n \"y\": jwk.y\n };\n break;\n case \"OKP\":\n jsonObject = {\n \"crv\": jwk.crv,\n \"kty\": jwk.kty,\n \"x\": jwk.x\n };\n break;\n case \"oct\":\n jsonObject = {\n \"crv\": jwk.k,\n \"kty\": jwk.kty\n };\n break;\n default:\n throw new Error(\"Unknown jwk type\");\n }\n const utf8encodedAndHashed = await _CryptoUtils.hash(\"SHA-256\", JSON.stringify(jsonObject));\n return _CryptoUtils.encodeBase64Url(utf8encodedAndHashed);\n }\n static async generateDPoPProof({\n url,\n accessToken,\n httpMethod,\n keyPair,\n nonce\n }) {\n let hashedToken;\n let encodedHash;\n const payload = {\n \"jti\": window.crypto.randomUUID(),\n \"htm\": httpMethod != null ? httpMethod : \"GET\",\n \"htu\": url,\n \"iat\": Math.floor(Date.now() / 1e3)\n };\n if (accessToken) {\n hashedToken = await _CryptoUtils.hash(\"SHA-256\", accessToken);\n encodedHash = _CryptoUtils.encodeBase64Url(hashedToken);\n payload.ath = encodedHash;\n }\n if (nonce) {\n payload.nonce = nonce;\n }\n try {\n const publicJwk = await crypto.subtle.exportKey(\"jwk\", keyPair.publicKey);\n const header = {\n \"alg\": \"ES256\",\n \"typ\": \"dpop+jwt\",\n \"jwk\": {\n \"crv\": publicJwk.crv,\n \"kty\": publicJwk.kty,\n \"x\": publicJwk.x,\n \"y\": publicJwk.y\n }\n };\n return await JwtUtils.generateSignedJwt(header, payload, keyPair.privateKey);\n } catch (err) {\n if (err instanceof TypeError) {\n throw new Error(`Error exporting dpop public key: ${err.message}`);\n } else {\n throw err;\n }\n }\n }\n static async generateDPoPJkt(keyPair) {\n try {\n const publicJwk = await crypto.subtle.exportKey(\"jwk\", keyPair.publicKey);\n return await _CryptoUtils.customCalculateJwkThumbprint(publicJwk);\n } catch (err) {\n if (err instanceof TypeError) {\n throw new Error(`Could not retrieve dpop keys from storage: ${err.message}`);\n } else {\n throw err;\n }\n }\n }\n static async generateDPoPKeys() {\n return await window.crypto.subtle.generateKey(\n {\n name: \"ECDSA\",\n namedCurve: \"P-256\"\n },\n false,\n [\"sign\", \"verify\"]\n );\n }\n};\n/**\n * Generates a base64url encoded string\n */\n_CryptoUtils.encodeBase64Url = (input) => {\n return toBase64(input).replace(/=/g, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\");\n};\nvar CryptoUtils = _CryptoUtils;\n\n// src/utils/Event.ts\nvar Event = class {\n constructor(_name) {\n this._name = _name;\n this._callbacks = [];\n this._logger = new Logger(`Event('${this._name}')`);\n }\n addHandler(cb) {\n this._callbacks.push(cb);\n return () => this.removeHandler(cb);\n }\n removeHandler(cb) {\n const idx = this._callbacks.lastIndexOf(cb);\n if (idx >= 0) {\n this._callbacks.splice(idx, 1);\n }\n }\n async raise(...ev) {\n this._logger.debug(\"raise:\", ...ev);\n for (const cb of this._callbacks) {\n await cb(...ev);\n }\n }\n};\n\n// src/utils/PopupUtils.ts\nvar PopupUtils = class {\n /**\n * Populates a map of window features with a placement centered in front of\n * the current window. If no explicit width is given, a default value is\n * binned into [800, 720, 600, 480, 360] based on the current window's width.\n */\n static center({ ...features }) {\n var _a, _b, _c;\n if (features.width == null)\n features.width = (_a = [800, 720, 600, 480].find((width) => width <= window.outerWidth / 1.618)) != null ? _a : 360;\n (_b = features.left) != null ? _b : features.left = Math.max(0, Math.round(window.screenX + (window.outerWidth - features.width) / 2));\n if (features.height != null)\n (_c = features.top) != null ? _c : features.top = Math.max(0, Math.round(window.screenY + (window.outerHeight - features.height) / 2));\n return features;\n }\n static serialize(features) {\n return Object.entries(features).filter(([, value]) => value != null).map(([key, value]) => `${key}=${typeof value !== \"boolean\" ? value : value ? \"yes\" : \"no\"}`).join(\",\");\n }\n};\n\n// src/utils/Timer.ts\nvar Timer = class _Timer extends Event {\n constructor() {\n super(...arguments);\n this._logger = new Logger(`Timer('${this._name}')`);\n this._timerHandle = null;\n this._expiration = 0;\n this._callback = () => {\n const diff = this._expiration - _Timer.getEpochTime();\n this._logger.debug(\"timer completes in\", diff);\n if (this._expiration <= _Timer.getEpochTime()) {\n this.cancel();\n void super.raise();\n }\n };\n }\n // get the time\n static getEpochTime() {\n return Math.floor(Date.now() / 1e3);\n }\n init(durationInSeconds) {\n const logger2 = this._logger.create(\"init\");\n durationInSeconds = Math.max(Math.floor(durationInSeconds), 1);\n const expiration = _Timer.getEpochTime() + durationInSeconds;\n if (this.expiration === expiration && this._timerHandle) {\n logger2.debug(\"skipping since already initialized for expiration at\", this.expiration);\n return;\n }\n this.cancel();\n logger2.debug(\"using duration\", durationInSeconds);\n this._expiration = expiration;\n const timerDurationInSeconds = Math.min(durationInSeconds, 5);\n this._timerHandle = setInterval(this._callback, timerDurationInSeconds * 1e3);\n }\n get expiration() {\n return this._expiration;\n }\n cancel() {\n this._logger.create(\"cancel\");\n if (this._timerHandle) {\n clearInterval(this._timerHandle);\n this._timerHandle = null;\n }\n }\n};\n\n// src/utils/UrlUtils.ts\nvar UrlUtils = class {\n static readParams(url, responseMode = \"query\") {\n if (!url) throw new TypeError(\"Invalid URL\");\n const parsedUrl = new URL(url, \"http://127.0.0.1\");\n const params = parsedUrl[responseMode === \"fragment\" ? \"hash\" : \"search\"];\n return new URLSearchParams(params.slice(1));\n }\n};\nvar URL_STATE_DELIMITER = \";\";\n\n// src/errors/ErrorResponse.ts\nvar ErrorResponse = class extends Error {\n constructor(args, form) {\n var _a, _b, _c;\n super(args.error_description || args.error || \"\");\n this.form = form;\n /** Marker to detect class: \"ErrorResponse\" */\n this.name = \"ErrorResponse\";\n if (!args.error) {\n Logger.error(\"ErrorResponse\", \"No error passed\");\n throw new Error(\"No error passed\");\n }\n this.error = args.error;\n this.error_description = (_a = args.error_description) != null ? _a : null;\n this.error_uri = (_b = args.error_uri) != null ? _b : null;\n this.state = args.userState;\n this.session_state = (_c = args.session_state) != null ? _c : null;\n this.url_state = args.url_state;\n }\n};\n\n// src/errors/ErrorTimeout.ts\nvar ErrorTimeout = class extends Error {\n constructor(message) {\n super(message);\n /** Marker to detect class: \"ErrorTimeout\" */\n this.name = \"ErrorTimeout\";\n }\n};\n\n// src/AccessTokenEvents.ts\nvar AccessTokenEvents = class {\n constructor(args) {\n this._logger = new Logger(\"AccessTokenEvents\");\n this._expiringTimer = new Timer(\"Access token expiring\");\n this._expiredTimer = new Timer(\"Access token expired\");\n this._expiringNotificationTimeInSeconds = args.expiringNotificationTimeInSeconds;\n }\n async load(container) {\n const logger2 = this._logger.create(\"load\");\n if (container.access_token && container.expires_in !== void 0) {\n const duration = container.expires_in;\n logger2.debug(\"access token present, remaining duration:\", duration);\n if (duration > 0) {\n let expiring = duration - this._expiringNotificationTimeInSeconds;\n if (expiring <= 0) {\n expiring = 1;\n }\n logger2.debug(\"registering expiring timer, raising in\", expiring, \"seconds\");\n this._expiringTimer.init(expiring);\n } else {\n logger2.debug(\"canceling existing expiring timer because we're past expiration.\");\n this._expiringTimer.cancel();\n }\n const expired = duration + 1;\n logger2.debug(\"registering expired timer, raising in\", expired, \"seconds\");\n this._expiredTimer.init(expired);\n } else {\n this._expiringTimer.cancel();\n this._expiredTimer.cancel();\n }\n }\n async unload() {\n this._logger.debug(\"unload: canceling existing access token timers\");\n this._expiringTimer.cancel();\n this._expiredTimer.cancel();\n }\n /**\n * Add callback: Raised prior to the access token expiring.\n */\n addAccessTokenExpiring(cb) {\n return this._expiringTimer.addHandler(cb);\n }\n /**\n * Remove callback: Raised prior to the access token expiring.\n */\n removeAccessTokenExpiring(cb) {\n this._expiringTimer.removeHandler(cb);\n }\n /**\n * Add callback: Raised after the access token has expired.\n */\n addAccessTokenExpired(cb) {\n return this._expiredTimer.addHandler(cb);\n }\n /**\n * Remove callback: Raised after the access token has expired.\n */\n removeAccessTokenExpired(cb) {\n this._expiredTimer.removeHandler(cb);\n }\n};\n\n// src/CheckSessionIFrame.ts\nvar CheckSessionIFrame = class {\n constructor(_callback, _client_id, url, _intervalInSeconds, _stopOnError) {\n this._callback = _callback;\n this._client_id = _client_id;\n this._intervalInSeconds = _intervalInSeconds;\n this._stopOnError = _stopOnError;\n this._logger = new Logger(\"CheckSessionIFrame\");\n this._timer = null;\n this._session_state = null;\n this._message = (e) => {\n if (e.origin === this._frame_origin && e.source === this._frame.contentWindow) {\n if (e.data === \"error\") {\n this._logger.error(\"error message from check session op iframe\");\n if (this._stopOnError) {\n this.stop();\n }\n } else if (e.data === \"changed\") {\n this._logger.debug(\"changed message from check session op iframe\");\n this.stop();\n void this._callback();\n } else {\n this._logger.debug(e.data + \" message from check session op iframe\");\n }\n }\n };\n const parsedUrl = new URL(url);\n this._frame_origin = parsedUrl.origin;\n this._frame = window.document.createElement(\"iframe\");\n this._frame.style.visibility = \"hidden\";\n this._frame.style.position = \"fixed\";\n this._frame.style.left = \"-1000px\";\n this._frame.style.top = \"0\";\n this._frame.width = \"0\";\n this._frame.height = \"0\";\n this._frame.src = parsedUrl.href;\n }\n load() {\n return new Promise((resolve) => {\n this._frame.onload = () => {\n resolve();\n };\n window.document.body.appendChild(this._frame);\n window.addEventListener(\"message\", this._message, false);\n });\n }\n start(session_state) {\n if (this._session_state === session_state) {\n return;\n }\n this._logger.create(\"start\");\n this.stop();\n this._session_state = session_state;\n const send = () => {\n if (!this._frame.contentWindow || !this._session_state) {\n return;\n }\n this._frame.contentWindow.postMessage(this._client_id + \" \" + this._session_state, this._frame_origin);\n };\n send();\n this._timer = setInterval(send, this._intervalInSeconds * 1e3);\n }\n stop() {\n this._logger.create(\"stop\");\n this._session_state = null;\n if (this._timer) {\n clearInterval(this._timer);\n this._timer = null;\n }\n }\n};\n\n// src/InMemoryWebStorage.ts\nvar InMemoryWebStorage = class {\n constructor() {\n this._logger = new Logger(\"InMemoryWebStorage\");\n this._data = {};\n }\n clear() {\n this._logger.create(\"clear\");\n this._data = {};\n }\n getItem(key) {\n this._logger.create(`getItem('${key}')`);\n return this._data[key];\n }\n setItem(key, value) {\n this._logger.create(`setItem('${key}')`);\n this._data[key] = value;\n }\n removeItem(key) {\n this._logger.create(`removeItem('${key}')`);\n delete this._data[key];\n }\n get length() {\n return Object.getOwnPropertyNames(this._data).length;\n }\n key(index) {\n return Object.getOwnPropertyNames(this._data)[index];\n }\n};\n\n// src/errors/ErrorDPoPNonce.ts\nvar ErrorDPoPNonce = class extends Error {\n constructor(nonce, message) {\n super(message);\n /** Marker to detect class: \"ErrorDPoPNonce\" */\n this.name = \"ErrorDPoPNonce\";\n this.nonce = nonce;\n }\n};\n\n// src/JsonService.ts\nvar JsonService = class {\n constructor(additionalContentTypes = [], _jwtHandler = null, _extraHeaders = {}) {\n this._jwtHandler = _jwtHandler;\n this._extraHeaders = _extraHeaders;\n this._logger = new Logger(\"JsonService\");\n this._contentTypes = [];\n this._contentTypes.push(...additionalContentTypes, \"application/json\");\n if (_jwtHandler) {\n this._contentTypes.push(\"application/jwt\");\n }\n }\n async fetchWithTimeout(input, init = {}) {\n const { timeoutInSeconds, ...initFetch } = init;\n if (!timeoutInSeconds) {\n return await fetch(input, initFetch);\n }\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeoutInSeconds * 1e3);\n try {\n const response = await fetch(input, {\n ...init,\n signal: controller.signal\n });\n return response;\n } catch (err) {\n if (err instanceof DOMException && err.name === \"AbortError\") {\n throw new ErrorTimeout(\"Network timed out\");\n }\n throw err;\n } finally {\n clearTimeout(timeoutId);\n }\n }\n async getJson(url, {\n token,\n credentials,\n timeoutInSeconds\n } = {}) {\n const logger2 = this._logger.create(\"getJson\");\n const headers = {\n \"Accept\": this._contentTypes.join(\", \")\n };\n if (token) {\n logger2.debug(\"token passed, setting Authorization header\");\n headers[\"Authorization\"] = \"Bearer \" + token;\n }\n this._appendExtraHeaders(headers);\n let response;\n try {\n logger2.debug(\"url:\", url);\n response = await this.fetchWithTimeout(url, { method: \"GET\", headers, timeoutInSeconds, credentials });\n } catch (err) {\n logger2.error(\"Network Error\");\n throw err;\n }\n logger2.debug(\"HTTP response received, status\", response.status);\n const contentType = response.headers.get(\"Content-Type\");\n if (contentType && !this._contentTypes.find((item) => contentType.startsWith(item))) {\n logger2.throw(new Error(`Invalid response Content-Type: ${contentType != null ? contentType : \"undefined\"}, from URL: ${url}`));\n }\n if (response.ok && this._jwtHandler && (contentType == null ? void 0 : contentType.startsWith(\"application/jwt\"))) {\n return await this._jwtHandler(await response.text());\n }\n let json;\n try {\n json = await response.json();\n } catch (err) {\n logger2.error(\"Error parsing JSON response\", err);\n if (response.ok) throw err;\n throw new Error(`${response.statusText} (${response.status})`);\n }\n if (!response.ok) {\n logger2.error(\"Error from server:\", json);\n if (json.error) {\n throw new ErrorResponse(json);\n }\n throw new Error(`${response.statusText} (${response.status}): ${JSON.stringify(json)}`);\n }\n return json;\n }\n async postForm(url, {\n body,\n basicAuth,\n timeoutInSeconds,\n initCredentials,\n extraHeaders\n }) {\n const logger2 = this._logger.create(\"postForm\");\n const headers = {\n \"Accept\": this._contentTypes.join(\", \"),\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n ...extraHeaders\n };\n if (basicAuth !== void 0) {\n headers[\"Authorization\"] = \"Basic \" + basicAuth;\n }\n this._appendExtraHeaders(headers);\n let response;\n try {\n logger2.debug(\"url:\", url);\n response = await this.fetchWithTimeout(url, { method: \"POST\", headers, body, timeoutInSeconds, credentials: initCredentials });\n } catch (err) {\n logger2.error(\"Network error\");\n throw err;\n }\n logger2.debug(\"HTTP response received, status\", response.status);\n const contentType = response.headers.get(\"Content-Type\");\n if (contentType && !this._contentTypes.find((item) => contentType.startsWith(item))) {\n throw new Error(`Invalid response Content-Type: ${contentType != null ? contentType : \"undefined\"}, from URL: ${url}`);\n }\n const responseText = await response.text();\n let json = {};\n if (responseText) {\n try {\n json = JSON.parse(responseText);\n } catch (err) {\n logger2.error(\"Error parsing JSON response\", err);\n if (response.ok) throw err;\n throw new Error(`${response.statusText} (${response.status})`);\n }\n }\n if (!response.ok) {\n logger2.error(\"Error from server:\", json);\n if (response.headers.has(\"dpop-nonce\")) {\n const nonce = response.headers.get(\"dpop-nonce\");\n throw new ErrorDPoPNonce(nonce, `${JSON.stringify(json)}`);\n }\n if (json.error) {\n throw new ErrorResponse(json, body);\n }\n throw new Error(`${response.statusText} (${response.status}): ${JSON.stringify(json)}`);\n }\n return json;\n }\n _appendExtraHeaders(headers) {\n const logger2 = this._logger.create(\"appendExtraHeaders\");\n const customKeys = Object.keys(this._extraHeaders);\n const protectedHeaders = [\n \"accept\",\n \"content-type\"\n ];\n const preventOverride = [\n \"authorization\"\n ];\n if (customKeys.length === 0) {\n return;\n }\n customKeys.forEach((headerName) => {\n if (protectedHeaders.includes(headerName.toLocaleLowerCase())) {\n logger2.warn(\"Protected header could not be set\", headerName, protectedHeaders);\n return;\n }\n if (preventOverride.includes(headerName.toLocaleLowerCase()) && Object.keys(headers).includes(headerName)) {\n logger2.warn(\"Header could not be overridden\", headerName, preventOverride);\n return;\n }\n const content = typeof this._extraHeaders[headerName] === \"function\" ? this._extraHeaders[headerName]() : this._extraHeaders[headerName];\n if (content && content !== \"\") {\n headers[headerName] = content;\n }\n });\n }\n};\n\n// src/MetadataService.ts\nvar MetadataService = class {\n constructor(_settings) {\n this._settings = _settings;\n this._logger = new Logger(\"MetadataService\");\n this._signingKeys = null;\n this._metadata = null;\n this._metadataUrl = this._settings.metadataUrl;\n this._jsonService = new JsonService(\n [\"application/jwk-set+json\"],\n null,\n this._settings.extraHeaders\n );\n if (this._settings.signingKeys) {\n this._logger.debug(\"using signingKeys from settings\");\n this._signingKeys = this._settings.signingKeys;\n }\n if (this._settings.metadata) {\n this._logger.debug(\"using metadata from settings\");\n this._metadata = this._settings.metadata;\n }\n if (this._settings.fetchRequestCredentials) {\n this._logger.debug(\"using fetchRequestCredentials from settings\");\n this._fetchRequestCredentials = this._settings.fetchRequestCredentials;\n }\n }\n resetSigningKeys() {\n this._signingKeys = null;\n }\n async getMetadata() {\n const logger2 = this._logger.create(\"getMetadata\");\n if (this._metadata) {\n logger2.debug(\"using cached values\");\n return this._metadata;\n }\n if (!this._metadataUrl) {\n logger2.throw(new Error(\"No authority or metadataUrl configured on settings\"));\n throw null;\n }\n logger2.debug(\"getting metadata from\", this._metadataUrl);\n const metadata = await this._jsonService.getJson(this._metadataUrl, { credentials: this._fetchRequestCredentials, timeoutInSeconds: this._settings.requestTimeoutInSeconds });\n logger2.debug(\"merging remote JSON with seed metadata\");\n this._metadata = Object.assign({}, metadata, this._settings.metadataSeed);\n return this._metadata;\n }\n getIssuer() {\n return this._getMetadataProperty(\"issuer\");\n }\n getAuthorizationEndpoint() {\n return this._getMetadataProperty(\"authorization_endpoint\");\n }\n getUserInfoEndpoint() {\n return this._getMetadataProperty(\"userinfo_endpoint\");\n }\n getTokenEndpoint(optional = true) {\n return this._getMetadataProperty(\"token_endpoint\", optional);\n }\n getCheckSessionIframe() {\n return this._getMetadataProperty(\"check_session_iframe\", true);\n }\n getEndSessionEndpoint() {\n return this._getMetadataProperty(\"end_session_endpoint\", true);\n }\n getRevocationEndpoint(optional = true) {\n return this._getMetadataProperty(\"revocation_endpoint\", optional);\n }\n getKeysEndpoint(optional = true) {\n return this._getMetadataProperty(\"jwks_uri\", optional);\n }\n async _getMetadataProperty(name, optional = false) {\n const logger2 = this._logger.create(`_getMetadataProperty('${name}')`);\n const metadata = await this.getMetadata();\n logger2.debug(\"resolved\");\n if (metadata[name] === void 0) {\n if (optional === true) {\n logger2.warn(\"Metadata does not contain optional property\");\n return void 0;\n }\n logger2.throw(new Error(\"Metadata does not contain property \" + name));\n }\n return metadata[name];\n }\n async getSigningKeys() {\n const logger2 = this._logger.create(\"getSigningKeys\");\n if (this._signingKeys) {\n logger2.debug(\"returning signingKeys from cache\");\n return this._signingKeys;\n }\n const jwks_uri = await this.getKeysEndpoint(false);\n logger2.debug(\"got jwks_uri\", jwks_uri);\n const keySet = await this._jsonService.getJson(jwks_uri, { timeoutInSeconds: this._settings.requestTimeoutInSeconds });\n logger2.debug(\"got key set\", keySet);\n if (!Array.isArray(keySet.keys)) {\n logger2.throw(new Error(\"Missing keys on keyset\"));\n throw null;\n }\n this._signingKeys = keySet.keys;\n return this._signingKeys;\n }\n};\n\n// src/WebStorageStateStore.ts\nvar WebStorageStateStore = class {\n constructor({\n prefix = \"oidc.\",\n store = localStorage\n } = {}) {\n this._logger = new Logger(\"WebStorageStateStore\");\n this._store = store;\n this._prefix = prefix;\n }\n async set(key, value) {\n this._logger.create(`set('${key}')`);\n key = this._prefix + key;\n await this._store.setItem(key, value);\n }\n async get(key) {\n this._logger.create(`get('${key}')`);\n key = this._prefix + key;\n const item = await this._store.getItem(key);\n return item;\n }\n async remove(key) {\n this._logger.create(`remove('${key}')`);\n key = this._prefix + key;\n const item = await this._store.getItem(key);\n await this._store.removeItem(key);\n return item;\n }\n async getAllKeys() {\n this._logger.create(\"getAllKeys\");\n const len = await this._store.length;\n const keys = [];\n for (let index = 0; index < len; index++) {\n const key = await this._store.key(index);\n if (key && key.indexOf(this._prefix) === 0) {\n keys.push(key.substr(this._prefix.length));\n }\n }\n return keys;\n }\n};\n\n// src/OidcClientSettings.ts\nvar DefaultResponseType = \"code\";\nvar DefaultScope = \"openid\";\nvar DefaultClientAuthentication = \"client_secret_post\";\nvar DefaultStaleStateAgeInSeconds = 60 * 15;\nvar OidcClientSettingsStore = class {\n constructor({\n // metadata related\n authority,\n metadataUrl,\n metadata,\n signingKeys,\n metadataSeed,\n // client related\n client_id,\n client_secret,\n response_type = DefaultResponseType,\n scope = DefaultScope,\n redirect_uri,\n post_logout_redirect_uri,\n client_authentication = DefaultClientAuthentication,\n // optional protocol\n prompt,\n display,\n max_age,\n ui_locales,\n acr_values,\n resource,\n response_mode,\n // behavior flags\n filterProtocolClaims = true,\n loadUserInfo = false,\n requestTimeoutInSeconds,\n staleStateAgeInSeconds = DefaultStaleStateAgeInSeconds,\n mergeClaimsStrategy = { array: \"replace\" },\n disablePKCE = false,\n // other behavior\n stateStore,\n revokeTokenAdditionalContentTypes,\n fetchRequestCredentials,\n refreshTokenAllowedScope,\n // extra\n extraQueryParams = {},\n extraTokenParams = {},\n extraHeaders = {},\n dpop,\n omitScopeWhenRequesting = false\n }) {\n var _a;\n this.authority = authority;\n if (metadataUrl) {\n this.metadataUrl = metadataUrl;\n } else {\n this.metadataUrl = authority;\n if (authority) {\n if (!this.metadataUrl.endsWith(\"/\")) {\n this.metadataUrl += \"/\";\n }\n this.metadataUrl += \".well-known/openid-configuration\";\n }\n }\n this.metadata = metadata;\n this.metadataSeed = metadataSeed;\n this.signingKeys = signingKeys;\n this.client_id = client_id;\n this.client_secret = client_secret;\n this.response_type = response_type;\n this.scope = scope;\n this.redirect_uri = redirect_uri;\n this.post_logout_redirect_uri = post_logout_redirect_uri;\n this.client_authentication = client_authentication;\n this.prompt = prompt;\n this.display = display;\n this.max_age = max_age;\n this.ui_locales = ui_locales;\n this.acr_values = acr_values;\n this.resource = resource;\n this.response_mode = response_mode;\n this.filterProtocolClaims = filterProtocolClaims != null ? filterProtocolClaims : true;\n this.loadUserInfo = !!loadUserInfo;\n this.staleStateAgeInSeconds = staleStateAgeInSeconds;\n this.mergeClaimsStrategy = mergeClaimsStrategy;\n this.omitScopeWhenRequesting = omitScopeWhenRequesting;\n this.disablePKCE = !!disablePKCE;\n this.revokeTokenAdditionalContentTypes = revokeTokenAdditionalContentTypes;\n this.fetchRequestCredentials = fetchRequestCredentials ? fetchRequestCredentials : \"same-origin\";\n this.requestTimeoutInSeconds = requestTimeoutInSeconds;\n if (stateStore) {\n this.stateStore = stateStore;\n } else {\n const store = typeof window !== \"undefined\" ? window.localStorage : new InMemoryWebStorage();\n this.stateStore = new WebStorageStateStore({ store });\n }\n this.refreshTokenAllowedScope = refreshTokenAllowedScope;\n this.extraQueryParams = extraQueryParams;\n this.extraTokenParams = extraTokenParams;\n this.extraHeaders = extraHeaders;\n this.dpop = dpop;\n if (this.dpop && !((_a = this.dpop) == null ? void 0 : _a.store)) {\n throw new Error(\"A DPoPStore is required when dpop is enabled\");\n }\n }\n};\n\n// src/UserInfoService.ts\nvar UserInfoService = class {\n constructor(_settings, _metadataService) {\n this._settings = _settings;\n this._metadataService = _metadataService;\n this._logger = new Logger(\"UserInfoService\");\n this._getClaimsFromJwt = async (responseText) => {\n const logger2 = this._logger.create(\"_getClaimsFromJwt\");\n try {\n const payload = JwtUtils.decode(responseText);\n logger2.debug(\"JWT decoding successful\");\n return payload;\n } catch (err) {\n logger2.error(\"Error parsing JWT response\");\n throw err;\n }\n };\n this._jsonService = new JsonService(\n void 0,\n this._getClaimsFromJwt,\n this._settings.extraHeaders\n );\n }\n async getClaims(token) {\n const logger2 = this._logger.create(\"getClaims\");\n if (!token) {\n this._logger.throw(new Error(\"No token passed\"));\n }\n const url = await this._metadataService.getUserInfoEndpoint();\n logger2.debug(\"got userinfo url\", url);\n const claims = await this._jsonService.getJson(url, {\n token,\n credentials: this._settings.fetchRequestCredentials,\n timeoutInSeconds: this._settings.requestTimeoutInSeconds\n });\n logger2.debug(\"got claims\", claims);\n return claims;\n }\n};\n\n// src/TokenClient.ts\nvar TokenClient = class {\n constructor(_settings, _metadataService) {\n this._settings = _settings;\n this._metadataService = _metadataService;\n this._logger = new Logger(\"TokenClient\");\n this._jsonService = new JsonService(\n this._settings.revokeTokenAdditionalContentTypes,\n null,\n this._settings.extraHeaders\n );\n }\n /**\n * Exchange code.\n *\n * @see https://www.rfc-editor.org/rfc/rfc6749#section-4.1.3\n */\n async exchangeCode({\n grant_type = \"authorization_code\",\n redirect_uri = this._settings.redirect_uri,\n client_id = this._settings.client_id,\n client_secret = this._settings.client_secret,\n extraHeaders,\n ...args\n }) {\n const logger2 = this._logger.create(\"exchangeCode\");\n if (!client_id) {\n logger2.throw(new Error(\"A client_id is required\"));\n }\n if (!redirect_uri) {\n logger2.throw(new Error(\"A redirect_uri is required\"));\n }\n if (!args.code) {\n logger2.throw(new Error(\"A code is required\"));\n }\n const params = new URLSearchParams({ grant_type, redirect_uri });\n for (const [key, value] of Object.entries(args)) {\n if (value != null) {\n params.set(key, value);\n }\n }\n let basicAuth;\n switch (this._settings.client_authentication) {\n case \"client_secret_basic\":\n if (client_secret === void 0 || client_secret === null) {\n logger2.throw(new Error(\"A client_secret is required\"));\n throw null;\n }\n basicAuth = CryptoUtils.generateBasicAuth(client_id, client_secret);\n break;\n case \"client_secret_post\":\n params.append(\"client_id\", client_id);\n if (client_secret) {\n params.append(\"client_secret\", client_secret);\n }\n break;\n }\n const url = await this._metadataService.getTokenEndpoint(false);\n logger2.debug(\"got token endpoint\");\n const response = await this._jsonService.postForm(url, {\n body: params,\n basicAuth,\n timeoutInSeconds: this._settings.requestTimeoutInSeconds,\n initCredentials: this._settings.fetchRequestCredentials,\n extraHeaders\n });\n logger2.debug(\"got response\");\n return response;\n }\n /**\n * Exchange credentials.\n *\n * @see https://www.rfc-editor.org/rfc/rfc6749#section-4.3.2\n */\n async exchangeCredentials({\n grant_type = \"password\",\n client_id = this._settings.client_id,\n client_secret = this._settings.client_secret,\n scope = this._settings.scope,\n ...args\n }) {\n const logger2 = this._logger.create(\"exchangeCredentials\");\n if (!client_id) {\n logger2.throw(new Error(\"A client_id is required\"));\n }\n const params = new URLSearchParams({ grant_type });\n if (!this._settings.omitScopeWhenRequesting) {\n params.set(\"scope\", scope);\n }\n for (const [key, value] of Object.entries(args)) {\n if (value != null) {\n params.set(key, value);\n }\n }\n let basicAuth;\n switch (this._settings.client_authentication) {\n case \"client_secret_basic\":\n if (client_secret === void 0 || client_secret === null) {\n logger2.throw(new Error(\"A client_secret is required\"));\n throw null;\n }\n basicAuth = CryptoUtils.generateBasicAuth(client_id, client_secret);\n break;\n case \"client_secret_post\":\n params.append(\"client_id\", client_id);\n if (client_secret) {\n params.append(\"client_secret\", client_secret);\n }\n break;\n }\n const url = await this._metadataService.getTokenEndpoint(false);\n logger2.debug(\"got token endpoint\");\n const response = await this._jsonService.postForm(url, { body: params, basicAuth, timeoutInSeconds: this._settings.requestTimeoutInSeconds, initCredentials: this._settings.fetchRequestCredentials });\n logger2.debug(\"got response\");\n return response;\n }\n /**\n * Exchange a refresh token.\n *\n * @see https://www.rfc-editor.org/rfc/rfc6749#section-6\n */\n async exchangeRefreshToken({\n grant_type = \"refresh_token\",\n client_id = this._settings.client_id,\n client_secret = this._settings.client_secret,\n timeoutInSeconds,\n extraHeaders,\n ...args\n }) {\n const logger2 = this._logger.create(\"exchangeRefreshToken\");\n if (!client_id) {\n logger2.throw(new Error(\"A client_id is required\"));\n }\n if (!args.refresh_token) {\n logger2.throw(new Error(\"A refresh_token is required\"));\n }\n const params = new URLSearchParams({ grant_type });\n for (const [key, value] of Object.entries(args)) {\n if (Array.isArray(value)) {\n value.forEach((param) => params.append(key, param));\n } else if (value != null) {\n params.set(key, value);\n }\n }\n let basicAuth;\n switch (this._settings.client_authentication) {\n case \"client_secret_basic\":\n if (client_secret === void 0 || client_secret === null) {\n logger2.throw(new Error(\"A client_secret is required\"));\n throw null;\n }\n basicAuth = CryptoUtils.generateBasicAuth(client_id, client_secret);\n break;\n case \"client_secret_post\":\n params.append(\"client_id\", client_id);\n if (client_secret) {\n params.append(\"client_secret\", client_secret);\n }\n break;\n }\n const url = await this._metadataService.getTokenEndpoint(false);\n logger2.debug(\"got token endpoint\");\n const response = await this._jsonService.postForm(url, { body: params, basicAuth, timeoutInSeconds, initCredentials: this._settings.fetchRequestCredentials, extraHeaders });\n logger2.debug(\"got response\");\n return response;\n }\n /**\n * Revoke an access or refresh token.\n *\n * @see https://datatracker.ietf.org/doc/html/rfc7009#section-2.1\n */\n async revoke(args) {\n var _a;\n const logger2 = this._logger.create(\"revoke\");\n if (!args.token) {\n logger2.throw(new Error(\"A token is required\"));\n }\n const url = await this._metadataService.getRevocationEndpoint(false);\n logger2.debug(`got revocation endpoint, revoking ${(_a = args.token_type_hint) != null ? _a : \"default token type\"}`);\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(args)) {\n if (value != null) {\n params.set(key, value);\n }\n }\n params.set(\"client_id\", this._settings.client_id);\n if (this._settings.client_secret) {\n params.set(\"client_secret\", this._settings.client_secret);\n }\n await this._jsonService.postForm(url, { body: params, timeoutInSeconds: this._settings.requestTimeoutInSeconds });\n logger2.debug(\"got response\");\n }\n};\n\n// src/ResponseValidator.ts\nvar ResponseValidator = class {\n constructor(_settings, _metadataService, _claimsService) {\n this._settings = _settings;\n this._metadataService = _metadataService;\n this._claimsService = _claimsService;\n this._logger = new Logger(\"ResponseValidator\");\n this._userInfoService = new UserInfoService(this._settings, this._metadataService);\n this._tokenClient = new TokenClient(this._settings, this._metadataService);\n }\n async validateSigninResponse(response, state, extraHeaders) {\n const logger2 = this._logger.create(\"validateSigninResponse\");\n this._processSigninState(response, state);\n logger2.debug(\"state processed\");\n await this._processCode(response, state, extraHeaders);\n logger2.debug(\"code processed\");\n if (response.isOpenId) {\n this._validateIdTokenAttributes(response);\n }\n logger2.debug(\"tokens validated\");\n await this._processClaims(response, state == null ? void 0 : state.skipUserInfo, response.isOpenId);\n logger2.debug(\"claims processed\");\n }\n async validateCredentialsResponse(response, skipUserInfo) {\n const logger2 = this._logger.create(\"validateCredentialsResponse\");\n const shouldValidateSubClaim = response.isOpenId && !!response.id_token;\n if (shouldValidateSubClaim) {\n this._validateIdTokenAttributes(response);\n }\n logger2.debug(\"tokens validated\");\n await this._processClaims(response, skipUserInfo, shouldValidateSubClaim);\n logger2.debug(\"claims processed\");\n }\n async validateRefreshResponse(response, state) {\n var _a, _b;\n const logger2 = this._logger.create(\"validateRefreshResponse\");\n response.userState = state.data;\n (_a = response.session_state) != null ? _a : response.session_state = state.session_state;\n (_b = response.scope) != null ? _b : response.scope = state.scope;\n if (response.isOpenId && !!response.id_token) {\n this._validateIdTokenAttributes(response, state.id_token);\n logger2.debug(\"ID Token validated\");\n }\n if (!response.id_token) {\n response.id_token = state.id_token;\n response.profile = state.profile;\n }\n const hasIdToken = response.isOpenId && !!response.id_token;\n await this._processClaims(response, false, hasIdToken);\n logger2.debug(\"claims processed\");\n }\n validateSignoutResponse(response, state) {\n const logger2 = this._logger.create(\"validateSignoutResponse\");\n if (state.id !== response.state) {\n logger2.throw(new Error(\"State does not match\"));\n }\n logger2.debug(\"state validated\");\n response.userState = state.data;\n if (response.error) {\n logger2.warn(\"Response was error\", response.error);\n throw new ErrorResponse(response);\n }\n }\n _processSigninState(response, state) {\n var _a;\n const logger2 = this._logger.create(\"_processSigninState\");\n if (state.id !== response.state) {\n logger2.throw(new Error(\"State does not match\"));\n }\n if (!state.client_id) {\n logger2.throw(new Error(\"No client_id on state\"));\n }\n if (!state.authority) {\n logger2.throw(new Error(\"No authority on state\"));\n }\n if (this._settings.authority !== state.authority) {\n logger2.throw(new Error(\"authority mismatch on settings vs. signin state\"));\n }\n if (this._settings.client_id && this._settings.client_id !== state.client_id) {\n logger2.throw(new Error(\"client_id mismatch on settings vs. signin state\"));\n }\n logger2.debug(\"state validated\");\n response.userState = state.data;\n response.url_state = state.url_state;\n (_a = response.scope) != null ? _a : response.scope = state.scope;\n if (response.error) {\n logger2.warn(\"Response was error\", response.error);\n throw new ErrorResponse(response);\n }\n if (state.code_verifier && !response.code) {\n logger2.throw(new Error(\"Expected code in response\"));\n }\n }\n async _processClaims(response, skipUserInfo = false, validateSub = true) {\n const logger2 = this._logger.create(\"_processClaims\");\n response.profile = this._claimsService.filterProtocolClaims(response.profile);\n if (skipUserInfo || !this._settings.loadUserInfo || !response.access_token) {\n logger2.debug(\"not loading user info\");\n return;\n }\n logger2.debug(\"loading user info\");\n const claims = await this._userInfoService.getClaims(response.access_token);\n logger2.debug(\"user info claims received from user info endpoint\");\n if (validateSub && claims.sub !== response.profile.sub) {\n logger2.throw(new Error(\"subject from UserInfo response does not match subject in ID Token\"));\n }\n response.profile = this._claimsService.mergeClaims(response.profile, this._claimsService.filterProtocolClaims(claims));\n logger2.debug(\"user info claims received, updated profile:\", response.profile);\n }\n async _processCode(response, state, extraHeaders) {\n const logger2 = this._logger.create(\"_processCode\");\n if (response.code) {\n logger2.debug(\"Validating code\");\n const tokenResponse = await this._tokenClient.exchangeCode({\n client_id: state.client_id,\n client_secret: state.client_secret,\n code: response.code,\n redirect_uri: state.redirect_uri,\n code_verifier: state.code_verifier,\n extraHeaders,\n ...state.extraTokenParams\n });\n Object.assign(response, tokenResponse);\n } else {\n logger2.debug(\"No code to process\");\n }\n }\n _validateIdTokenAttributes(response, existingToken) {\n var _a;\n const logger2 = this._logger.create(\"_validateIdTokenAttributes\");\n logger2.debug(\"decoding ID Token JWT\");\n const incoming = JwtUtils.decode((_a = response.id_token) != null ? _a : \"\");\n if (!incoming.sub) {\n logger2.throw(new Error(\"ID Token is missing a subject claim\"));\n }\n if (existingToken) {\n const existing = JwtUtils.decode(existingToken);\n if (incoming.sub !== existing.sub) {\n logger2.throw(new Error(\"sub in id_token does not match current sub\"));\n }\n if (incoming.auth_time && incoming.auth_time !== existing.auth_time) {\n logger2.throw(new Error(\"auth_time in id_token does not match original auth_time\"));\n }\n if (incoming.azp && incoming.azp !== existing.azp) {\n logger2.throw(new Error(\"azp in id_token does not match original azp\"));\n }\n if (!incoming.azp && existing.azp) {\n logger2.throw(new Error(\"azp not in id_token, but present in original id_token\"));\n }\n }\n response.profile = incoming;\n }\n};\n\n// src/State.ts\nvar State = class _State {\n constructor(args) {\n this.id = args.id || CryptoUtils.generateUUIDv4();\n this.data = args.data;\n if (args.created && args.created > 0) {\n this.created = args.created;\n } else {\n this.created = Timer.getEpochTime();\n }\n this.request_type = args.request_type;\n this.url_state = args.url_state;\n }\n toStorageString() {\n new Logger(\"State\").create(\"toStorageString\");\n return JSON.stringify({\n id: this.id,\n data: this.data,\n created: this.created,\n request_type: this.request_type,\n url_state: this.url_state\n });\n }\n static fromStorageString(storageString) {\n Logger.createStatic(\"State\", \"fromStorageString\");\n return Promise.resolve(new _State(JSON.parse(storageString)));\n }\n static async clearStaleState(storage, age) {\n const logger2 = Logger.createStatic(\"State\", \"clearStaleState\");\n const cutoff = Timer.getEpochTime() - age;\n const keys = await storage.getAllKeys();\n logger2.debug(\"got keys\", keys);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const item = await storage.get(key);\n let remove = false;\n if (item) {\n try {\n const state = await _State.fromStorageString(item);\n logger2.debug(\"got item from key:\", key, state.created);\n if (state.created <= cutoff) {\n remove = true;\n }\n } catch (err) {\n logger2.error(\"Error parsing state for key:\", key, err);\n remove = true;\n }\n } else {\n logger2.debug(\"no item in storage for key:\", key);\n remove = true;\n }\n if (remove) {\n logger2.debug(\"removed item for key:\", key);\n void storage.remove(key);\n }\n }\n }\n};\n\n// src/SigninState.ts\nvar SigninState = class _SigninState extends State {\n constructor(args) {\n super(args);\n this.code_verifier = args.code_verifier;\n this.code_challenge = args.code_challenge;\n this.authority = args.authority;\n this.client_id = args.client_id;\n this.redirect_uri = args.redirect_uri;\n this.scope = args.scope;\n this.client_secret = args.client_secret;\n this.extraTokenParams = args.extraTokenParams;\n this.response_mode = args.response_mode;\n this.skipUserInfo = args.skipUserInfo;\n }\n static async create(args) {\n const code_verifier = args.code_verifier === true ? CryptoUtils.generateCodeVerifier() : args.code_verifier || void 0;\n const code_challenge = code_verifier ? await CryptoUtils.generateCodeChallenge(code_verifier) : void 0;\n return new _SigninState({\n ...args,\n code_verifier,\n code_challenge\n });\n }\n toStorageString() {\n new Logger(\"SigninState\").create(\"toStorageString\");\n return JSON.stringify({\n id: this.id,\n data: this.data,\n created: this.created,\n request_type: this.request_type,\n url_state: this.url_state,\n code_verifier: this.code_verifier,\n authority: this.authority,\n client_id: this.client_id,\n redirect_uri: this.redirect_uri,\n scope: this.scope,\n client_secret: this.client_secret,\n extraTokenParams: this.extraTokenParams,\n response_mode: this.response_mode,\n skipUserInfo: this.skipUserInfo\n });\n }\n static fromStorageString(storageString) {\n Logger.createStatic(\"SigninState\", \"fromStorageString\");\n const data = JSON.parse(storageString);\n return _SigninState.create(data);\n }\n};\n\n// src/SigninRequest.ts\nvar _SigninRequest = class _SigninRequest {\n constructor(args) {\n this.url = args.url;\n this.state = args.state;\n }\n static async create({\n // mandatory\n url,\n authority,\n client_id,\n redirect_uri,\n response_type,\n scope,\n // optional\n state_data,\n response_mode,\n request_type,\n client_secret,\n nonce,\n url_state,\n resource,\n skipUserInfo,\n extraQueryParams,\n extraTokenParams,\n disablePKCE,\n dpopJkt,\n omitScopeWhenRequesting,\n ...optionalParams\n }) {\n if (!url) {\n this._logger.error(\"create: No url passed\");\n throw new Error(\"url\");\n }\n if (!client_id) {\n this._logger.error(\"create: No client_id passed\");\n throw new Error(\"client_id\");\n }\n if (!redirect_uri) {\n this._logger.error(\"create: No redirect_uri passed\");\n throw new Error(\"redirect_uri\");\n }\n if (!response_type) {\n this._logger.error(\"create: No response_type passed\");\n throw new Error(\"response_type\");\n }\n if (!scope) {\n this._logger.error(\"create: No scope passed\");\n throw new Error(\"scope\");\n }\n if (!authority) {\n this._logger.error(\"create: No authority passed\");\n throw new Error(\"authority\");\n }\n const state = await SigninState.create({\n data: state_data,\n request_type,\n url_state,\n code_verifier: !disablePKCE,\n client_id,\n authority,\n redirect_uri,\n response_mode,\n client_secret,\n scope,\n extraTokenParams,\n skipUserInfo\n });\n const parsedUrl = new URL(url);\n parsedUrl.searchParams.append(\"client_id\", client_id);\n parsedUrl.searchParams.append(\"redirect_uri\", redirect_uri);\n parsedUrl.searchParams.append(\"response_type\", response_type);\n if (!omitScopeWhenRequesting) {\n parsedUrl.searchParams.append(\"scope\", scope);\n }\n if (nonce) {\n parsedUrl.searchParams.append(\"nonce\", nonce);\n }\n if (dpopJkt) {\n parsedUrl.searchParams.append(\"dpop_jkt\", dpopJkt);\n }\n let stateParam = state.id;\n if (url_state) {\n stateParam = `${stateParam}${URL_STATE_DELIMITER}${url_state}`;\n }\n parsedUrl.searchParams.append(\"state\", stateParam);\n if (state.code_challenge) {\n parsedUrl.searchParams.append(\"code_challenge\", state.code_challenge);\n parsedUrl.searchParams.append(\"code_challenge_method\", \"S256\");\n }\n if (resource) {\n const resources = Array.isArray(resource) ? resource : [resource];\n resources.forEach((r) => parsedUrl.searchParams.append(\"resource\", r));\n }\n for (const [key, value] of Object.entries({ response_mode, ...optionalParams, ...extraQueryParams })) {\n if (value != null) {\n parsedUrl.searchParams.append(key, value.toString());\n }\n }\n return new _SigninRequest({\n url: parsedUrl.href,\n state\n });\n }\n};\n_SigninRequest._logger = new Logger(\"SigninRequest\");\nvar SigninRequest = _SigninRequest;\n\n// src/SigninResponse.ts\nvar OidcScope = \"openid\";\nvar SigninResponse = class {\n constructor(params) {\n /** @see {@link User.access_token} */\n this.access_token = \"\";\n /** @see {@link User.token_type} */\n this.token_type = \"\";\n /** @see {@link User.profile} */\n this.profile = {};\n this.state = params.get(\"state\");\n this.session_state = params.get(\"session_state\");\n if (this.state) {\n const splitState = decodeURIComponent(this.state).split(URL_STATE_DELIMITER);\n this.state = splitState[0];\n if (splitState.length > 1) {\n this.url_state = splitState.slice(1).join(URL_STATE_DELIMITER);\n }\n }\n this.error = params.get(\"error\");\n this.error_description = params.get(\"error_description\");\n this.error_uri = params.get(\"error_uri\");\n this.code = params.get(\"code\");\n }\n get expires_in() {\n if (this.expires_at === void 0) {\n return void 0;\n }\n return this.expires_at - Timer.getEpochTime();\n }\n set expires_in(value) {\n if (typeof value === \"string\") value = Number(value);\n if (value !== void 0 && value >= 0) {\n this.expires_at = Math.floor(value) + Timer.getEpochTime();\n }\n }\n get isOpenId() {\n var _a;\n return ((_a = this.scope) == null ? void 0 : _a.split(\" \").includes(OidcScope)) || !!this.id_token;\n }\n};\n\n// src/SignoutRequest.ts\nvar SignoutRequest = class {\n constructor({\n url,\n state_data,\n id_token_hint,\n post_logout_redirect_uri,\n extraQueryParams,\n request_type,\n client_id,\n url_state\n }) {\n this._logger = new Logger(\"SignoutRequest\");\n if (!url) {\n this._logger.error(\"ctor: No url passed\");\n throw new Error(\"url\");\n }\n const parsedUrl = new URL(url);\n if (id_token_hint) {\n parsedUrl.searchParams.append(\"id_token_hint\", id_token_hint);\n }\n if (client_id) {\n parsedUrl.searchParams.append(\"client_id\", client_id);\n }\n if (post_logout_redirect_uri) {\n parsedUrl.searchParams.append(\"post_logout_redirect_uri\", post_logout_redirect_uri);\n if (state_data || url_state) {\n this.state = new State({ data: state_data, request_type, url_state });\n let stateParam = this.state.id;\n if (url_state) {\n stateParam = `${stateParam}${URL_STATE_DELIMITER}${url_state}`;\n }\n parsedUrl.searchParams.append(\"state\", stateParam);\n }\n }\n for (const [key, value] of Object.entries({ ...extraQueryParams })) {\n if (value != null) {\n parsedUrl.searchParams.append(key, value.toString());\n }\n }\n this.url = parsedUrl.href;\n }\n};\n\n// src/SignoutResponse.ts\nvar SignoutResponse = class {\n constructor(params) {\n this.state = params.get(\"state\");\n if (this.state) {\n const splitState = decodeURIComponent(this.state).split(URL_STATE_DELIMITER);\n this.state = splitState[0];\n if (splitState.length > 1) {\n this.url_state = splitState.slice(1).join(URL_STATE_DELIMITER);\n }\n }\n this.error = params.get(\"error\");\n this.error_description = params.get(\"error_description\");\n this.error_uri = params.get(\"error_uri\");\n }\n};\n\n// src/ClaimsService.ts\nvar DefaultProtocolClaims = [\n \"nbf\",\n \"jti\",\n \"auth_time\",\n \"nonce\",\n \"acr\",\n \"amr\",\n \"azp\",\n \"at_hash\"\n // https://openid.net/specs/openid-connect-core-1_0.html#CodeIDToken\n];\nvar InternalRequiredProtocolClaims = [\"sub\", \"iss\", \"aud\", \"exp\", \"iat\"];\nvar ClaimsService = class {\n constructor(_settings) {\n this._settings = _settings;\n this._logger = new Logger(\"ClaimsService\");\n }\n filterProtocolClaims(claims) {\n const result = { ...claims };\n if (this._settings.filterProtocolClaims) {\n let protocolClaims;\n if (Array.isArray(this._settings.filterProtocolClaims)) {\n protocolClaims = this._settings.filterProtocolClaims;\n } else {\n protocolClaims = DefaultProtocolClaims;\n }\n for (const claim of protocolClaims) {\n if (!InternalRequiredProtocolClaims.includes(claim)) {\n delete result[claim];\n }\n }\n }\n return result;\n }\n mergeClaims(claims1, claims2) {\n const result = { ...claims1 };\n for (const [claim, values] of Object.entries(claims2)) {\n if (result[claim] !== values) {\n if (Array.isArray(result[claim]) || Array.isArray(values)) {\n if (this._settings.mergeClaimsStrategy.array == \"replace\") {\n result[claim] = values;\n } else {\n const mergedValues = Array.isArray(result[claim]) ? result[claim] : [result[claim]];\n for (const value of Array.isArray(values) ? values : [values]) {\n if (!mergedValues.includes(value)) {\n mergedValues.push(value);\n }\n }\n result[claim] = mergedValues;\n }\n } else if (typeof result[claim] === \"object\" && typeof values === \"object\") {\n result[claim] = this.mergeClaims(result[claim], values);\n } else {\n result[claim] = values;\n }\n }\n }\n return result;\n }\n};\n\n// src/DPoPStore.ts\nvar DPoPState = class {\n constructor(keys, nonce) {\n this.keys = keys;\n this.nonce = nonce;\n }\n};\n\n// src/OidcClient.ts\nvar OidcClient = class {\n constructor(settings, metadataService) {\n this._logger = new Logger(\"OidcClient\");\n this.settings = settings instanceof OidcClientSettingsStore ? settings : new OidcClientSettingsStore(settings);\n this.metadataService = metadataService != null ? metadataService : new MetadataService(this.settings);\n this._claimsService = new ClaimsService(this.settings);\n this._validator = new ResponseValidator(this.settings, this.metadataService, this._claimsService);\n this._tokenClient = new TokenClient(this.settings, this.metadataService);\n }\n async createSigninRequest({\n state,\n request,\n request_uri,\n request_type,\n id_token_hint,\n login_hint,\n skipUserInfo,\n nonce,\n url_state,\n response_type = this.settings.response_type,\n scope = this.settings.scope,\n redirect_uri = this.settings.redirect_uri,\n prompt = this.settings.prompt,\n display = this.settings.display,\n max_age = this.settings.max_age,\n ui_locales = this.settings.ui_locales,\n acr_values = this.settings.acr_values,\n resource = this.settings.resource,\n response_mode = this.settings.response_mode,\n extraQueryParams = this.settings.extraQueryParams,\n extraTokenParams = this.settings.extraTokenParams,\n dpopJkt,\n omitScopeWhenRequesting = this.settings.omitScopeWhenRequesting\n }) {\n const logger2 = this._logger.create(\"createSigninRequest\");\n if (response_type !== \"code\") {\n throw new Error(\"Only the Authorization Code flow (with PKCE) is supported\");\n }\n const url = await this.metadataService.getAuthorizationEndpoint();\n logger2.debug(\"Received authorization endpoint\", url);\n const signinRequest = await SigninRequest.create({\n url,\n authority: this.settings.authority,\n client_id: this.settings.client_id,\n redirect_uri,\n response_type,\n scope,\n state_data: state,\n url_state,\n prompt,\n display,\n max_age,\n ui_locales,\n id_token_hint,\n login_hint,\n acr_values,\n dpopJkt,\n resource,\n request,\n request_uri,\n extraQueryParams,\n extraTokenParams,\n request_type,\n response_mode,\n client_secret: this.settings.client_secret,\n skipUserInfo,\n nonce,\n disablePKCE: this.settings.disablePKCE,\n omitScopeWhenRequesting\n });\n await this.clearStaleState();\n const signinState = signinRequest.state;\n await this.settings.stateStore.set(signinState.id, signinState.toStorageString());\n return signinRequest;\n }\n async readSigninResponseState(url, removeState = false) {\n const logger2 = this._logger.create(\"readSigninResponseState\");\n const response = new SigninResponse(UrlUtils.readParams(url, this.settings.response_mode));\n if (!response.state) {\n logger2.throw(new Error(\"No state in response\"));\n throw null;\n }\n const storedStateString = await this.settings.stateStore[removeState ? \"remove\" : \"get\"](response.state);\n if (!storedStateString) {\n logger2.throw(new Error(\"No matching state found in storage\"));\n throw null;\n }\n const state = await SigninState.fromStorageString(storedStateString);\n return { state, response };\n }\n async processSigninResponse(url, extraHeaders, removeState = true) {\n const logger2 = this._logger.create(\"processSigninResponse\");\n const { state, response } = await this.readSigninResponseState(url, removeState);\n logger2.debug(\"received state from storage; validating response\");\n if (this.settings.dpop && this.settings.dpop.store) {\n const dpopProof = await this.getDpopProof(this.settings.dpop.store);\n extraHeaders = { ...extraHeaders, \"DPoP\": dpopProof };\n }\n try {\n await this._validator.validateSigninResponse(response, state, extraHeaders);\n } catch (err) {\n if (err instanceof ErrorDPoPNonce && this.settings.dpop) {\n const dpopProof = await this.getDpopProof(this.settings.dpop.store, err.nonce);\n extraHeaders[\"DPoP\"] = dpopProof;\n await this._validator.validateSigninResponse(response, state, extraHeaders);\n } else {\n throw err;\n }\n }\n return response;\n }\n async getDpopProof(dpopStore, nonce) {\n let keyPair;\n let dpopState;\n if (!(await dpopStore.getAllKeys()).includes(this.settings.client_id)) {\n keyPair = await CryptoUtils.generateDPoPKeys();\n dpopState = new DPoPState(keyPair, nonce);\n await dpopStore.set(this.settings.client_id, dpopState);\n } else {\n dpopState = await dpopStore.get(this.settings.client_id);\n if (dpopState.nonce !== nonce && nonce) {\n dpopState.nonce = nonce;\n await dpopStore.set(this.settings.client_id, dpopState);\n }\n }\n return await CryptoUtils.generateDPoPProof({\n url: await this.metadataService.getTokenEndpoint(false),\n httpMethod: \"POST\",\n keyPair: dpopState.keys,\n nonce: dpopState.nonce\n });\n }\n async processResourceOwnerPasswordCredentials({\n username,\n password,\n skipUserInfo = false,\n extraTokenParams = {}\n }) {\n const tokenResponse = await this._tokenClient.exchangeCredentials({ username, password, ...extraTokenParams });\n const signinResponse = new SigninResponse(new URLSearchParams());\n Object.assign(signinResponse, tokenResponse);\n await this._validator.validateCredentialsResponse(signinResponse, skipUserInfo);\n return signinResponse;\n }\n async useRefreshToken({\n state,\n redirect_uri,\n resource,\n timeoutInSeconds,\n extraHeaders,\n extraTokenParams\n }) {\n var _a;\n const logger2 = this._logger.create(\"useRefreshToken\");\n let scope;\n if (this.settings.refreshTokenAllowedScope === void 0) {\n scope = state.scope;\n } else {\n const allowableScopes = this.settings.refreshTokenAllowedScope.split(\" \");\n const providedScopes = ((_a = state.scope) == null ? void 0 : _a.split(\" \")) || [];\n scope = providedScopes.filter((s) => allowableScopes.includes(s)).join(\" \");\n }\n if (this.settings.dpop && this.settings.dpop.store) {\n const dpopProof = await this.getDpopProof(this.settings.dpop.store);\n extraHeaders = { ...extraHeaders, \"DPoP\": dpopProof };\n }\n let result;\n try {\n result = await this._tokenClient.exchangeRefreshToken({\n refresh_token: state.refresh_token,\n // provide the (possible filtered) scope list\n scope,\n redirect_uri,\n resource,\n timeoutInSeconds,\n extraHeaders,\n ...extraTokenParams\n });\n } catch (err) {\n if (err instanceof ErrorDPoPNonce && this.settings.dpop) {\n extraHeaders[\"DPoP\"] = await this.getDpopProof(this.settings.dpop.store, err.nonce);\n result = await this._tokenClient.exchangeRefreshToken({\n refresh_token: state.refresh_token,\n // provide the (possible filtered) scope list\n scope,\n redirect_uri,\n resource,\n timeoutInSeconds,\n extraHeaders,\n ...extraTokenParams\n });\n } else {\n throw err;\n }\n }\n const response = new SigninResponse(new URLSearchParams());\n Object.assign(response, result);\n logger2.debug(\"validating response\", response);\n await this._validator.validateRefreshResponse(response, {\n ...state,\n // override the scope in the state handed over to the validator\n // so it can set the granted scope to the requested scope in case none is included in the response\n scope\n });\n return response;\n }\n async createSignoutRequest({\n state,\n id_token_hint,\n client_id,\n request_type,\n url_state,\n post_logout_redirect_uri = this.settings.post_logout_redirect_uri,\n extraQueryParams = this.settings.extraQueryParams\n } = {}) {\n const logger2 = this._logger.create(\"createSignoutRequest\");\n const url = await this.metadataService.getEndSessionEndpoint();\n if (!url) {\n logger2.throw(new Error(\"No end session endpoint\"));\n throw null;\n }\n logger2.debug(\"Received end session endpoint\", url);\n if (!client_id && post_logout_redirect_uri && !id_token_hint) {\n client_id = this.settings.client_id;\n }\n const request = new SignoutRequest({\n url,\n id_token_hint,\n client_id,\n post_logout_redirect_uri,\n state_data: state,\n extraQueryParams,\n request_type,\n url_state\n });\n await this.clearStaleState();\n const signoutState = request.state;\n if (signoutState) {\n logger2.debug(\"Signout request has state to persist\");\n await this.settings.stateStore.set(signoutState.id, signoutState.toStorageString());\n }\n return request;\n }\n async readSignoutResponseState(url, removeState = false) {\n const logger2 = this._logger.create(\"readSignoutResponseState\");\n const response = new SignoutResponse(UrlUtils.readParams(url, this.settings.response_mode));\n if (!response.state) {\n logger2.debug(\"No state in response\");\n if (response.error) {\n logger2.warn(\"Response was error:\", response.error);\n throw new ErrorResponse(response);\n }\n return { state: void 0, response };\n }\n const storedStateString = await this.settings.stateStore[removeState ? \"remove\" : \"get\"](response.state);\n if (!storedStateString) {\n logger2.throw(new Error(\"No matching state found in storage\"));\n throw null;\n }\n const state = await State.fromStorageString(storedStateString);\n return { state, response };\n }\n async processSignoutResponse(url) {\n const logger2 = this._logger.create(\"processSignoutResponse\");\n const { state, response } = await this.readSignoutResponseState(url, true);\n if (state) {\n logger2.debug(\"Received state from storage; validating response\");\n this._validator.validateSignoutResponse(response, state);\n } else {\n logger2.debug(\"No state from storage; skipping response validation\");\n }\n return response;\n }\n clearStaleState() {\n this._logger.create(\"clearStaleState\");\n return State.clearStaleState(this.settings.stateStore, this.settings.staleStateAgeInSeconds);\n }\n async revokeToken(token, type) {\n this._logger.create(\"revokeToken\");\n return await this._tokenClient.revoke({\n token,\n token_type_hint: type\n });\n }\n};\n\n// src/SessionMonitor.ts\nvar SessionMonitor = class {\n constructor(_userManager) {\n this._userManager = _userManager;\n this._logger = new Logger(\"SessionMonitor\");\n this._start = async (user) => {\n const session_state = user.session_state;\n if (!session_state) {\n return;\n }\n const logger2 = this._logger.create(\"_start\");\n if (user.profile) {\n this._sub = user.profile.sub;\n logger2.debug(\"session_state\", session_state, \", sub\", this._sub);\n } else {\n this._sub = void 0;\n logger2.debug(\"session_state\", session_state, \", anonymous user\");\n }\n if (this._checkSessionIFrame) {\n this._checkSessionIFrame.start(session_state);\n return;\n }\n try {\n const url = await this._userManager.metadataService.getCheckSessionIframe();\n if (url) {\n logger2.debug(\"initializing check session iframe\");\n const client_id = this._userManager.settings.client_id;\n const intervalInSeconds = this._userManager.settings.checkSessionIntervalInSeconds;\n const stopOnError = this._userManager.settings.stopCheckSessionOnError;\n const checkSessionIFrame = new CheckSessionIFrame(this._callback, client_id, url, intervalInSeconds, stopOnError);\n await checkSessionIFrame.load();\n this._checkSessionIFrame = checkSessionIFrame;\n checkSessionIFrame.start(session_state);\n } else {\n logger2.warn(\"no check session iframe found in the metadata\");\n }\n } catch (err) {\n logger2.error(\"Error from getCheckSessionIframe:\", err instanceof Error ? err.message : err);\n }\n };\n this._stop = () => {\n const logger2 = this._logger.create(\"_stop\");\n this._sub = void 0;\n if (this._checkSessionIFrame) {\n this._checkSessionIFrame.stop();\n }\n if (this._userManager.settings.monitorAnonymousSession) {\n const timerHandle = setInterval(async () => {\n clearInterval(timerHandle);\n try {\n const session = await this._userManager.querySessionStatus();\n if (session) {\n const tmpUser = {\n session_state: session.session_state,\n profile: session.sub ? {\n sub: session.sub\n } : null\n };\n void this._start(tmpUser);\n }\n } catch (err) {\n logger2.error(\"error from querySessionStatus\", err instanceof Error ? err.message : err);\n }\n }, 1e3);\n }\n };\n this._callback = async () => {\n const logger2 = this._logger.create(\"_callback\");\n try {\n const session = await this._userManager.querySessionStatus();\n let raiseEvent = true;\n if (session && this._checkSessionIFrame) {\n if (session.sub === this._sub) {\n raiseEvent = false;\n this._checkSessionIFrame.start(session.session_state);\n logger2.debug(\"same sub still logged in at OP, session state has changed, restarting check session iframe; session_state\", session.session_state);\n await this._userManager.events._raiseUserSessionChanged();\n } else {\n logger2.debug(\"different subject signed into OP\", session.sub);\n }\n } else {\n logger2.debug(\"subject no longer signed into OP\");\n }\n if (raiseEvent) {\n if (this._sub) {\n await this._userManager.events._raiseUserSignedOut();\n } else {\n await this._userManager.events._raiseUserSignedIn();\n }\n } else {\n logger2.debug(\"no change in session detected, no event to raise\");\n }\n } catch (err) {\n if (this._sub) {\n logger2.debug(\"Error calling queryCurrentSigninSession; raising signed out event\", err);\n await this._userManager.events._raiseUserSignedOut();\n }\n }\n };\n if (!_userManager) {\n this._logger.throw(new Error(\"No user manager passed\"));\n }\n this._userManager.events.addUserLoaded(this._start);\n this._userManager.events.addUserUnloaded(this._stop);\n this._init().catch((err) => {\n this._logger.error(err);\n });\n }\n async _init() {\n this._logger.create(\"_init\");\n const user = await this._userManager.getUser();\n if (user) {\n void this._start(user);\n } else if (this._userManager.settings.monitorAnonymousSession) {\n const session = await this._userManager.querySessionStatus();\n if (session) {\n const tmpUser = {\n session_state: session.session_state,\n profile: session.sub ? {\n sub: session.sub\n } : null\n };\n void this._start(tmpUser);\n }\n }\n }\n};\n\n// src/User.ts\nvar User = class _User {\n constructor(args) {\n var _a;\n this.id_token = args.id_token;\n this.session_state = (_a = args.session_state) != null ? _a : null;\n this.access_token = args.access_token;\n this.refresh_token = args.refresh_token;\n this.token_type = args.token_type;\n this.scope = args.scope;\n this.profile = args.profile;\n this.expires_at = args.expires_at;\n this.state = args.userState;\n this.url_state = args.url_state;\n }\n /** Computed number of seconds the access token has remaining. */\n get expires_in() {\n if (this.expires_at === void 0) {\n return void 0;\n }\n return this.expires_at - Timer.getEpochTime();\n }\n set expires_in(value) {\n if (value !== void 0) {\n this.expires_at = Math.floor(value) + Timer.getEpochTime();\n }\n }\n /** Computed value indicating if the access token is expired. */\n get expired() {\n const expires_in = this.expires_in;\n if (expires_in === void 0) {\n return void 0;\n }\n return expires_in <= 0;\n }\n /** Array representing the parsed values from the `scope`. */\n get scopes() {\n var _a, _b;\n return (_b = (_a = this.scope) == null ? void 0 : _a.split(\" \")) != null ? _b : [];\n }\n toStorageString() {\n new Logger(\"User\").create(\"toStorageString\");\n return JSON.stringify({\n id_token: this.id_token,\n session_state: this.session_state,\n access_token: this.access_token,\n refresh_token: this.refresh_token,\n token_type: this.token_type,\n scope: this.scope,\n profile: this.profile,\n expires_at: this.expires_at\n });\n }\n static fromStorageString(storageString) {\n Logger.createStatic(\"User\", \"fromStorageString\");\n return new _User(JSON.parse(storageString));\n }\n};\n\n// src/navigators/AbstractChildWindow.ts\nvar messageSource = \"oidc-client\";\nvar AbstractChildWindow = class {\n constructor() {\n this._abort = new Event(\"Window navigation aborted\");\n this._disposeHandlers = /* @__PURE__ */ new Set();\n this._window = null;\n }\n async navigate(params) {\n const logger2 = this._logger.create(\"navigate\");\n if (!this._window) {\n throw new Error(\"Attempted to navigate on a disposed window\");\n }\n logger2.debug(\"setting URL in window\");\n this._window.location.replace(params.url);\n const { url, keepOpen } = await new Promise((resolve, reject) => {\n const listener = (e) => {\n var _a;\n const data = e.data;\n const origin = (_a = params.scriptOrigin) != null ? _a : window.location.origin;\n if (e.origin !== origin || (data == null ? void 0 : data.source) !== messageSource) {\n return;\n }\n try {\n const state = UrlUtils.readParams(data.url, params.response_mode).get(\"state\");\n if (!state) {\n logger2.warn(\"no state found in response url\");\n }\n if (e.source !== this._window && state !== params.state) {\n return;\n }\n } catch {\n this._dispose();\n reject(new Error(\"Invalid response from window\"));\n }\n resolve(data);\n };\n window.addEventListener(\"message\", listener, false);\n this._disposeHandlers.add(() => window.removeEventListener(\"message\", listener, false));\n const channel = new BroadcastChannel(`oidc-client-popup-${params.state}`);\n channel.addEventListener(\"message\", listener, false);\n this._disposeHandlers.add(() => channel.close());\n this._disposeHandlers.add(this._abort.addHandler((reason) => {\n this._dispose();\n reject(reason);\n }));\n });\n logger2.debug(\"got response from window\");\n this._dispose();\n if (!keepOpen) {\n this.close();\n }\n return { url };\n }\n _dispose() {\n this._logger.create(\"_dispose\");\n for (const dispose of this._disposeHandlers) {\n dispose();\n }\n this._disposeHandlers.clear();\n }\n static _notifyParent(parent, url, keepOpen = false, targetOrigin = window.location.origin) {\n const msgData = {\n source: messageSource,\n url,\n keepOpen\n };\n const logger2 = new Logger(\"_notifyParent\");\n if (parent) {\n logger2.debug(\"With parent. Using parent.postMessage.\");\n parent.postMessage(msgData, targetOrigin);\n } else {\n logger2.debug(\"No parent. Using BroadcastChannel.\");\n const state = new URL(url).searchParams.get(\"state\");\n if (!state) {\n throw new Error(\"No parent and no state in URL. Can't complete notification.\");\n }\n const channel = new BroadcastChannel(`oidc-client-popup-${state}`);\n channel.postMessage(msgData);\n channel.close();\n }\n }\n};\n\n// src/UserManagerSettings.ts\nvar DefaultPopupWindowFeatures = {\n location: false,\n toolbar: false,\n height: 640,\n closePopupWindowAfterInSeconds: -1\n};\nvar DefaultPopupTarget = \"_blank\";\nvar DefaultAccessTokenExpiringNotificationTimeInSeconds = 60;\nvar DefaultCheckSessionIntervalInSeconds = 2;\nvar DefaultSilentRequestTimeoutInSeconds = 10;\nvar UserManagerSettingsStore = class extends OidcClientSettingsStore {\n constructor(args) {\n const {\n popup_redirect_uri = args.redirect_uri,\n popup_post_logout_redirect_uri = args.post_logout_redirect_uri,\n popupWindowFeatures = DefaultPopupWindowFeatures,\n popupWindowTarget = DefaultPopupTarget,\n redirectMethod = \"assign\",\n redirectTarget = \"self\",\n iframeNotifyParentOrigin = args.iframeNotifyParentOrigin,\n iframeScriptOrigin = args.iframeScriptOrigin,\n requestTimeoutInSeconds,\n silent_redirect_uri = args.redirect_uri,\n silentRequestTimeoutInSeconds,\n automaticSilentRenew = true,\n validateSubOnSilentRenew = true,\n includeIdTokenInSilentRenew = false,\n monitorSession = false,\n monitorAnonymousSession = false,\n checkSessionIntervalInSeconds = DefaultCheckSessionIntervalInSeconds,\n query_status_response_type = \"code\",\n stopCheckSessionOnError = true,\n revokeTokenTypes = [\"access_token\", \"refresh_token\"],\n revokeTokensOnSignout = false,\n includeIdTokenInSilentSignout = false,\n accessTokenExpiringNotificationTimeInSeconds = DefaultAccessTokenExpiringNotificationTimeInSeconds,\n userStore\n } = args;\n super(args);\n this.popup_redirect_uri = popup_redirect_uri;\n this.popup_post_logout_redirect_uri = popup_post_logout_redirect_uri;\n this.popupWindowFeatures = popupWindowFeatures;\n this.popupWindowTarget = popupWindowTarget;\n this.redirectMethod = redirectMethod;\n this.redirectTarget = redirectTarget;\n this.iframeNotifyParentOrigin = iframeNotifyParentOrigin;\n this.iframeScriptOrigin = iframeScriptOrigin;\n this.silent_redirect_uri = silent_redirect_uri;\n this.silentRequestTimeoutInSeconds = silentRequestTimeoutInSeconds || requestTimeoutInSeconds || DefaultSilentRequestTimeoutInSeconds;\n this.automaticSilentRenew = automaticSilentRenew;\n this.validateSubOnSilentRenew = validateSubOnSilentRenew;\n this.includeIdTokenInSilentRenew = includeIdTokenInSilentRenew;\n this.monitorSession = monitorSession;\n this.monitorAnonymousSession = monitorAnonymousSession;\n this.checkSessionIntervalInSeconds = checkSessionIntervalInSeconds;\n this.stopCheckSessionOnError = stopCheckSessionOnError;\n this.query_status_response_type = query_status_response_type;\n this.revokeTokenTypes = revokeTokenTypes;\n this.revokeTokensOnSignout = revokeTokensOnSignout;\n this.includeIdTokenInSilentSignout = includeIdTokenInSilentSignout;\n this.accessTokenExpiringNotificationTimeInSeconds = accessTokenExpiringNotificationTimeInSeconds;\n if (userStore) {\n this.userStore = userStore;\n } else {\n const store = typeof window !== \"undefined\" ? window.sessionStorage : new InMemoryWebStorage();\n this.userStore = new WebStorageStateStore({ store });\n }\n }\n};\n\n// src/navigators/IFrameWindow.ts\nvar IFrameWindow = class _IFrameWindow extends AbstractChildWindow {\n constructor({\n silentRequestTimeoutInSeconds = DefaultSilentRequestTimeoutInSeconds\n }) {\n super();\n this._logger = new Logger(\"IFrameWindow\");\n this._timeoutInSeconds = silentRequestTimeoutInSeconds;\n this._frame = _IFrameWindow.createHiddenIframe();\n this._window = this._frame.contentWindow;\n }\n static createHiddenIframe() {\n const iframe = window.document.createElement(\"iframe\");\n iframe.style.visibility = \"hidden\";\n iframe.style.position = \"fixed\";\n iframe.style.left = \"-1000px\";\n iframe.style.top = \"0\";\n iframe.width = \"0\";\n iframe.height = \"0\";\n window.document.body.appendChild(iframe);\n return iframe;\n }\n async navigate(params) {\n this._logger.debug(\"navigate: Using timeout of:\", this._timeoutInSeconds);\n const timer = setTimeout(() => void this._abort.raise(new ErrorTimeout(\"IFrame timed out without a response\")), this._timeoutInSeconds * 1e3);\n this._disposeHandlers.add(() => clearTimeout(timer));\n return await super.navigate(params);\n }\n close() {\n var _a;\n if (this._frame) {\n if (this._frame.parentNode) {\n this._frame.addEventListener(\"load\", (ev) => {\n var _a2;\n const frame = ev.target;\n (_a2 = frame.parentNode) == null ? void 0 : _a2.removeChild(frame);\n void this._abort.raise(new Error(\"IFrame removed from DOM\"));\n }, true);\n (_a = this._frame.contentWindow) == null ? void 0 : _a.location.replace(\"about:blank\");\n }\n this._frame = null;\n }\n this._window = null;\n }\n static notifyParent(url, targetOrigin) {\n return super._notifyParent(window.parent, url, false, targetOrigin);\n }\n};\n\n// src/navigators/IFrameNavigator.ts\nvar IFrameNavigator = class {\n constructor(_settings) {\n this._settings = _settings;\n this._logger = new Logger(\"IFrameNavigator\");\n }\n async prepare({\n silentRequestTimeoutInSeconds = this._settings.silentRequestTimeoutInSeconds\n }) {\n return new IFrameWindow({ silentRequestTimeoutInSeconds });\n }\n async callback(url) {\n this._logger.create(\"callback\");\n IFrameWindow.notifyParent(url, this._settings.iframeNotifyParentOrigin);\n }\n};\n\n// src/navigators/PopupWindow.ts\nvar checkForPopupClosedInterval = 500;\nvar second = 1e3;\nvar PopupWindow = class extends AbstractChildWindow {\n constructor({\n popupWindowTarget = DefaultPopupTarget,\n popupWindowFeatures = {},\n popupSignal\n }) {\n super();\n this._logger = new Logger(\"PopupWindow\");\n const centeredPopup = PopupUtils.center({ ...DefaultPopupWindowFeatures, ...popupWindowFeatures });\n this._window = window.open(void 0, popupWindowTarget, PopupUtils.serialize(centeredPopup));\n if (popupSignal) {\n popupSignal.addEventListener(\"abort\", () => {\n var _a;\n void this._abort.raise(new Error((_a = popupSignal.reason) != null ? _a : \"Popup aborted\"));\n });\n }\n if (popupWindowFeatures.closePopupWindowAfterInSeconds && popupWindowFeatures.closePopupWindowAfterInSeconds > 0) {\n setTimeout(() => {\n if (!this._window || typeof this._window.closed !== \"boolean\" || this._window.closed) {\n void this._abort.raise(new Error(\"Popup blocked by user\"));\n return;\n }\n this.close();\n }, popupWindowFeatures.closePopupWindowAfterInSeconds * second);\n }\n }\n async navigate(params) {\n var _a;\n (_a = this._window) == null ? void 0 : _a.focus();\n const popupClosedInterval = setInterval(() => {\n if (!this._window || this._window.closed) {\n this._logger.debug(\"Popup closed by user or isolated by redirect\");\n clearPopupClosedInterval();\n this._disposeHandlers.delete(clearPopupClosedInterval);\n }\n }, checkForPopupClosedInterval);\n const clearPopupClosedInterval = () => clearInterval(popupClosedInterval);\n this._disposeHandlers.add(clearPopupClosedInterval);\n return await super.navigate(params);\n }\n close() {\n if (this._window) {\n if (!this._window.closed) {\n this._window.close();\n void this._abort.raise(new Error(\"Popup closed\"));\n }\n }\n this._window = null;\n }\n static notifyOpener(url, keepOpen) {\n super._notifyParent(window.opener, url, keepOpen);\n if (!keepOpen && !window.opener) {\n window.close();\n }\n }\n};\n\n// src/navigators/PopupNavigator.ts\nvar PopupNavigator = class {\n constructor(_settings) {\n this._settings = _settings;\n this._logger = new Logger(\"PopupNavigator\");\n }\n async prepare({\n popupWindowFeatures = this._settings.popupWindowFeatures,\n popupWindowTarget = this._settings.popupWindowTarget,\n popupSignal\n }) {\n return new PopupWindow({ popupWindowFeatures, popupWindowTarget, popupSignal });\n }\n async callback(url, { keepOpen = false }) {\n this._logger.create(\"callback\");\n PopupWindow.notifyOpener(url, keepOpen);\n }\n};\n\n// src/navigators/RedirectNavigator.ts\nvar RedirectNavigator = class {\n constructor(_settings) {\n this._settings = _settings;\n this._logger = new Logger(\"RedirectNavigator\");\n }\n async prepare({\n redirectMethod = this._settings.redirectMethod,\n redirectTarget = this._settings.redirectTarget\n }) {\n var _a;\n this._logger.create(\"prepare\");\n let targetWindow = window.self;\n if (redirectTarget === \"top\") {\n targetWindow = (_a = window.top) != null ? _a : window.self;\n }\n const redirect = targetWindow.location[redirectMethod].bind(targetWindow.location);\n let abort;\n return {\n navigate: async (params) => {\n this._logger.create(\"navigate\");\n const promise = new Promise((resolve, reject) => {\n abort = reject;\n });\n redirect(params.url);\n return await promise;\n },\n close: () => {\n this._logger.create(\"close\");\n abort == null ? void 0 : abort(new Error(\"Redirect aborted\"));\n targetWindow.stop();\n }\n };\n }\n async callback() {\n return;\n }\n};\n\n// src/UserManagerEvents.ts\nvar UserManagerEvents = class extends AccessTokenEvents {\n constructor(settings) {\n super({ expiringNotificationTimeInSeconds: settings.accessTokenExpiringNotificationTimeInSeconds });\n this._logger = new Logger(\"UserManagerEvents\");\n this._userLoaded = new Event(\"User loaded\");\n this._userUnloaded = new Event(\"User unloaded\");\n this._silentRenewError = new Event(\"Silent renew error\");\n this._userSignedIn = new Event(\"User signed in\");\n this._userSignedOut = new Event(\"User signed out\");\n this._userSessionChanged = new Event(\"User session changed\");\n }\n async load(user, raiseEvent = true) {\n await super.load(user);\n if (raiseEvent) {\n await this._userLoaded.raise(user);\n }\n }\n async unload() {\n await super.unload();\n await this._userUnloaded.raise();\n }\n /**\n * Add callback: Raised when a user session has been established (or re-established).\n */\n addUserLoaded(cb) {\n return this._userLoaded.addHandler(cb);\n }\n /**\n * Remove callback: Raised when a user session has been established (or re-established).\n */\n removeUserLoaded(cb) {\n return this._userLoaded.removeHandler(cb);\n }\n /**\n * Add callback: Raised when a user session has been terminated.\n */\n addUserUnloaded(cb) {\n return this._userUnloaded.addHandler(cb);\n }\n /**\n * Remove callback: Raised when a user session has been terminated.\n */\n removeUserUnloaded(cb) {\n return this._userUnloaded.removeHandler(cb);\n }\n /**\n * Add callback: Raised when the automatic silent renew has failed.\n */\n addSilentRenewError(cb) {\n return this._silentRenewError.addHandler(cb);\n }\n /**\n * Remove callback: Raised when the automatic silent renew has failed.\n */\n removeSilentRenewError(cb) {\n return this._silentRenewError.removeHandler(cb);\n }\n /**\n * @internal\n */\n async _raiseSilentRenewError(e) {\n await this._silentRenewError.raise(e);\n }\n /**\n * Add callback: Raised when the user is signed in (when `monitorSession` is set).\n * @see {@link UserManagerSettings.monitorSession}\n */\n addUserSignedIn(cb) {\n return this._userSignedIn.addHandler(cb);\n }\n /**\n * Remove callback: Raised when the user is signed in (when `monitorSession` is set).\n */\n removeUserSignedIn(cb) {\n this._userSignedIn.removeHandler(cb);\n }\n /**\n * @internal\n */\n async _raiseUserSignedIn() {\n await this._userSignedIn.raise();\n }\n /**\n * Add callback: Raised when the user's sign-in status at the OP has changed (when `monitorSession` is set).\n * @see {@link UserManagerSettings.monitorSession}\n */\n addUserSignedOut(cb) {\n return this._userSignedOut.addHandler(cb);\n }\n /**\n * Remove callback: Raised when the user's sign-in status at the OP has changed (when `monitorSession` is set).\n */\n removeUserSignedOut(cb) {\n this._userSignedOut.removeHandler(cb);\n }\n /**\n * @internal\n */\n async _raiseUserSignedOut() {\n await this._userSignedOut.raise();\n }\n /**\n * Add callback: Raised when the user session changed (when `monitorSession` is set).\n * @see {@link UserManagerSettings.monitorSession}\n */\n addUserSessionChanged(cb) {\n return this._userSessionChanged.addHandler(cb);\n }\n /**\n * Remove callback: Raised when the user session changed (when `monitorSession` is set).\n */\n removeUserSessionChanged(cb) {\n this._userSessionChanged.removeHandler(cb);\n }\n /**\n * @internal\n */\n async _raiseUserSessionChanged() {\n await this._userSessionChanged.raise();\n }\n};\n\n// src/SilentRenewService.ts\nvar SilentRenewService = class {\n constructor(_userManager) {\n this._userManager = _userManager;\n this._logger = new Logger(\"SilentRenewService\");\n this._isStarted = false;\n this._retryTimer = new Timer(\"Retry Silent Renew\");\n this._tokenExpiring = async () => {\n const logger2 = this._logger.create(\"_tokenExpiring\");\n try {\n await this._userManager.signinSilent();\n logger2.debug(\"silent token renewal successful\");\n } catch (err) {\n if (err instanceof ErrorTimeout) {\n logger2.warn(\"ErrorTimeout from signinSilent:\", err, \"retry in 5s\");\n this._retryTimer.init(5);\n return;\n }\n logger2.error(\"Error from signinSilent:\", err);\n await this._userManager.events._raiseSilentRenewError(err);\n }\n };\n }\n async start() {\n const logger2 = this._logger.create(\"start\");\n if (!this._isStarted) {\n this._isStarted = true;\n this._userManager.events.addAccessTokenExpiring(this._tokenExpiring);\n this._retryTimer.addHandler(this._tokenExpiring);\n try {\n await this._userManager.getUser();\n } catch (err) {\n logger2.error(\"getUser error\", err);\n }\n }\n }\n stop() {\n if (this._isStarted) {\n this._retryTimer.cancel();\n this._retryTimer.removeHandler(this._tokenExpiring);\n this._userManager.events.removeAccessTokenExpiring(this._tokenExpiring);\n this._isStarted = false;\n }\n }\n};\n\n// src/RefreshState.ts\nvar RefreshState = class {\n constructor(args) {\n this.refresh_token = args.refresh_token;\n this.id_token = args.id_token;\n this.session_state = args.session_state;\n this.scope = args.scope;\n this.profile = args.profile;\n this.data = args.state;\n }\n};\n\n// src/UserManager.ts\nvar UserManager = class {\n constructor(settings, redirectNavigator, popupNavigator, iframeNavigator) {\n this._logger = new Logger(\"UserManager\");\n this.settings = new UserManagerSettingsStore(settings);\n this._client = new OidcClient(settings);\n this._redirectNavigator = redirectNavigator != null ? redirectNavigator : new RedirectNavigator(this.settings);\n this._popupNavigator = popupNavigator != null ? popupNavigator : new PopupNavigator(this.settings);\n this._iframeNavigator = iframeNavigator != null ? iframeNavigator : new IFrameNavigator(this.settings);\n this._events = new UserManagerEvents(this.settings);\n this._silentRenewService = new SilentRenewService(this);\n if (this.settings.automaticSilentRenew) {\n this.startSilentRenew();\n }\n this._sessionMonitor = null;\n if (this.settings.monitorSession) {\n this._sessionMonitor = new SessionMonitor(this);\n }\n }\n /**\n * Get object used to register for events raised by the `UserManager`.\n */\n get events() {\n return this._events;\n }\n /**\n * Get object used to access the metadata configuration of the identity provider.\n */\n get metadataService() {\n return this._client.metadataService;\n }\n /**\n * Load the `User` object for the currently authenticated user.\n *\n * @param raiseEvent - If `true`, the `UserLoaded` event will be raised. Defaults to false.\n * @returns A promise\n */\n async getUser(raiseEvent = false) {\n const logger2 = this._logger.create(\"getUser\");\n const user = await this._loadUser();\n if (user) {\n logger2.info(\"user loaded\");\n await this._events.load(user, raiseEvent);\n return user;\n }\n logger2.info(\"user not found in storage\");\n return null;\n }\n /**\n * Remove from any storage the currently authenticated user.\n *\n * @returns A promise\n */\n async removeUser() {\n const logger2 = this._logger.create(\"removeUser\");\n await this.storeUser(null);\n logger2.info(\"user removed from storage\");\n await this._events.unload();\n }\n /**\n * Trigger a redirect of the current window to the authorization endpoint.\n *\n * @returns A promise\n *\n * @throws `Error` In cases of wrong authentication.\n */\n async signinRedirect(args = {}) {\n var _a;\n this._logger.create(\"signinRedirect\");\n const {\n redirectMethod,\n ...requestArgs\n } = args;\n let dpopJkt;\n if ((_a = this.settings.dpop) == null ? void 0 : _a.bind_authorization_code) {\n dpopJkt = await this.generateDPoPJkt(this.settings.dpop);\n }\n const handle = await this._redirectNavigator.prepare({ redirectMethod });\n await this._signinStart({\n request_type: \"si:r\",\n dpopJkt,\n ...requestArgs\n }, handle);\n }\n /**\n * Process the response (callback) from the authorization endpoint.\n * It is recommended to use {@link UserManager.signinCallback} instead.\n *\n * @returns A promise containing the authenticated `User`.\n *\n * @see {@link UserManager.signinCallback}\n */\n async signinRedirectCallback(url = window.location.href) {\n const logger2 = this._logger.create(\"signinRedirectCallback\");\n const user = await this._signinEnd(url);\n if (user.profile && user.profile.sub) {\n logger2.info(\"success, signed in subject\", user.profile.sub);\n } else {\n logger2.info(\"no subject\");\n }\n return user;\n }\n /**\n * Trigger the signin with user/password.\n *\n * @returns A promise containing the authenticated `User`.\n * @throws {@link ErrorResponse} In cases of wrong authentication.\n */\n async signinResourceOwnerCredentials({\n username,\n password,\n skipUserInfo = false\n }) {\n const logger2 = this._logger.create(\"signinResourceOwnerCredential\");\n const signinResponse = await this._client.processResourceOwnerPasswordCredentials({\n username,\n password,\n skipUserInfo,\n extraTokenParams: this.settings.extraTokenParams\n });\n logger2.debug(\"got signin response\");\n const user = await this._buildUser(signinResponse);\n if (user.profile && user.profile.sub) {\n logger2.info(\"success, signed in subject\", user.profile.sub);\n } else {\n logger2.info(\"no subject\");\n }\n return user;\n }\n /**\n * Trigger a request (via a popup window) to the authorization endpoint.\n *\n * @returns A promise containing the authenticated `User`.\n * @throws `Error` In cases of wrong authentication.\n */\n async signinPopup(args = {}) {\n var _a;\n const logger2 = this._logger.create(\"signinPopup\");\n let dpopJkt;\n if ((_a = this.settings.dpop) == null ? void 0 : _a.bind_authorization_code) {\n dpopJkt = await this.generateDPoPJkt(this.settings.dpop);\n }\n const {\n popupWindowFeatures,\n popupWindowTarget,\n popupSignal,\n ...requestArgs\n } = args;\n const url = this.settings.popup_redirect_uri;\n if (!url) {\n logger2.throw(new Error(\"No popup_redirect_uri configured\"));\n }\n const handle = await this._popupNavigator.prepare({ popupWindowFeatures, popupWindowTarget, popupSignal });\n const user = await this._signin({\n request_type: \"si:p\",\n redirect_uri: url,\n display: \"popup\",\n dpopJkt,\n ...requestArgs\n }, handle);\n if (user) {\n if (user.profile && user.profile.sub) {\n logger2.info(\"success, signed in subject\", user.profile.sub);\n } else {\n logger2.info(\"no subject\");\n }\n }\n return user;\n }\n /**\n * Notify the opening window of response (callback) from the authorization endpoint.\n * It is recommended to use {@link UserManager.signinCallback} instead.\n *\n * @returns A promise\n *\n * @see {@link UserManager.signinCallback}\n */\n async signinPopupCallback(url = window.location.href, keepOpen = false) {\n const logger2 = this._logger.create(\"signinPopupCallback\");\n await this._popupNavigator.callback(url, { keepOpen });\n logger2.info(\"success\");\n }\n /**\n * Trigger a silent request (via refresh token or an iframe) to the authorization endpoint.\n *\n * @returns A promise that contains the authenticated `User`.\n */\n async signinSilent(args = {}) {\n var _a, _b;\n const logger2 = this._logger.create(\"signinSilent\");\n const {\n silentRequestTimeoutInSeconds,\n ...requestArgs\n } = args;\n let user = await this._loadUser();\n if (user == null ? void 0 : user.refresh_token) {\n logger2.debug(\"using refresh token\");\n const state = new RefreshState(user);\n return await this._useRefreshToken({\n state,\n redirect_uri: requestArgs.redirect_uri,\n resource: requestArgs.resource,\n extraTokenParams: requestArgs.extraTokenParams,\n timeoutInSeconds: silentRequestTimeoutInSeconds\n });\n }\n let dpopJkt;\n if ((_a = this.settings.dpop) == null ? void 0 : _a.bind_authorization_code) {\n dpopJkt = await this.generateDPoPJkt(this.settings.dpop);\n }\n const url = this.settings.silent_redirect_uri;\n if (!url) {\n logger2.throw(new Error(\"No silent_redirect_uri configured\"));\n }\n let verifySub;\n if (user && this.settings.validateSubOnSilentRenew) {\n logger2.debug(\"subject prior to silent renew:\", user.profile.sub);\n verifySub = user.profile.sub;\n }\n const handle = await this._iframeNavigator.prepare({ silentRequestTimeoutInSeconds });\n user = await this._signin({\n request_type: \"si:s\",\n redirect_uri: url,\n prompt: \"none\",\n id_token_hint: this.settings.includeIdTokenInSilentRenew ? user == null ? void 0 : user.id_token : void 0,\n dpopJkt,\n ...requestArgs\n }, handle, verifySub);\n if (user) {\n if ((_b = user.profile) == null ? void 0 : _b.sub) {\n logger2.info(\"success, signed in subject\", user.profile.sub);\n } else {\n logger2.info(\"no subject\");\n }\n }\n return user;\n }\n async _useRefreshToken(args) {\n const response = await this._client.useRefreshToken({\n timeoutInSeconds: this.settings.silentRequestTimeoutInSeconds,\n ...args\n });\n const user = new User({ ...args.state, ...response });\n await this.storeUser(user);\n await this._events.load(user);\n return user;\n }\n /**\n *\n * Notify the parent window of response (callback) from the authorization endpoint.\n * It is recommended to use {@link UserManager.signinCallback} instead.\n *\n * @returns A promise\n *\n * @see {@link UserManager.signinCallback}\n */\n async signinSilentCallback(url = window.location.href) {\n const logger2 = this._logger.create(\"signinSilentCallback\");\n await this._iframeNavigator.callback(url);\n logger2.info(\"success\");\n }\n /**\n * Process any response (callback) from the authorization endpoint, by dispatching the request_type\n * and executing one of the following functions:\n * - {@link UserManager.signinRedirectCallback}\n * - {@link UserManager.signinPopupCallback}\n * - {@link UserManager.signinSilentCallback}\n *\n * @throws `Error` If request_type is unknown or signin cannot be processed.\n */\n async signinCallback(url = window.location.href) {\n const { state } = await this._client.readSigninResponseState(url);\n switch (state.request_type) {\n case \"si:r\":\n return await this.signinRedirectCallback(url);\n case \"si:p\":\n await this.signinPopupCallback(url);\n break;\n case \"si:s\":\n await this.signinSilentCallback(url);\n break;\n default:\n throw new Error(\"invalid response_type in state\");\n }\n return void 0;\n }\n /**\n * Process any response (callback) from the end session endpoint, by dispatching the request_type\n * and executing one of the following functions:\n * - {@link UserManager.signoutRedirectCallback}\n * - {@link UserManager.signoutPopupCallback}\n * - {@link UserManager.signoutSilentCallback}\n *\n * @throws `Error` If request_type is unknown or signout cannot be processed.\n */\n async signoutCallback(url = window.location.href, keepOpen = false) {\n const { state } = await this._client.readSignoutResponseState(url);\n if (!state) {\n return void 0;\n }\n switch (state.request_type) {\n case \"so:r\":\n return await this.signoutRedirectCallback(url);\n case \"so:p\":\n await this.signoutPopupCallback(url, keepOpen);\n break;\n case \"so:s\":\n await this.signoutSilentCallback(url);\n break;\n default:\n throw new Error(\"invalid response_type in state\");\n }\n return void 0;\n }\n /**\n * Query OP for user's current signin status.\n *\n * @returns A promise object with session_state and subject identifier.\n */\n async querySessionStatus(args = {}) {\n const logger2 = this._logger.create(\"querySessionStatus\");\n const {\n silentRequestTimeoutInSeconds,\n ...requestArgs\n } = args;\n const url = this.settings.silent_redirect_uri;\n if (!url) {\n logger2.throw(new Error(\"No silent_redirect_uri configured\"));\n }\n const user = await this._loadUser();\n const handle = await this._iframeNavigator.prepare({ silentRequestTimeoutInSeconds });\n const navResponse = await this._signinStart({\n request_type: \"si:s\",\n // this acts like a signin silent\n redirect_uri: url,\n prompt: \"none\",\n id_token_hint: this.settings.includeIdTokenInSilentRenew ? user == null ? void 0 : user.id_token : void 0,\n response_type: this.settings.query_status_response_type,\n scope: \"openid\",\n skipUserInfo: true,\n ...requestArgs\n }, handle);\n try {\n const extraHeaders = {};\n const signinResponse = await this._client.processSigninResponse(navResponse.url, extraHeaders);\n logger2.debug(\"got signin response\");\n if (signinResponse.session_state && signinResponse.profile.sub) {\n logger2.info(\"success for subject\", signinResponse.profile.sub);\n return {\n session_state: signinResponse.session_state,\n sub: signinResponse.profile.sub\n };\n }\n logger2.info(\"success, user not authenticated\");\n return null;\n } catch (err) {\n if (this.settings.monitorAnonymousSession && err instanceof ErrorResponse) {\n switch (err.error) {\n case \"login_required\":\n case \"consent_required\":\n case \"interaction_required\":\n case \"account_selection_required\":\n logger2.info(\"success for anonymous user\");\n return {\n session_state: err.session_state\n };\n }\n }\n throw err;\n }\n }\n async _signin(args, handle, verifySub) {\n const navResponse = await this._signinStart(args, handle);\n return await this._signinEnd(navResponse.url, verifySub);\n }\n async _signinStart(args, handle) {\n const logger2 = this._logger.create(\"_signinStart\");\n try {\n const signinRequest = await this._client.createSigninRequest(args);\n logger2.debug(\"got signin request\");\n return await handle.navigate({\n url: signinRequest.url,\n state: signinRequest.state.id,\n response_mode: signinRequest.state.response_mode,\n scriptOrigin: this.settings.iframeScriptOrigin\n });\n } catch (err) {\n logger2.debug(\"error after preparing navigator, closing navigator window\");\n handle.close();\n throw err;\n }\n }\n async _signinEnd(url, verifySub) {\n const logger2 = this._logger.create(\"_signinEnd\");\n const extraHeaders = {};\n const signinResponse = await this._client.processSigninResponse(url, extraHeaders);\n logger2.debug(\"got signin response\");\n const user = await this._buildUser(signinResponse, verifySub);\n return user;\n }\n async _buildUser(signinResponse, verifySub) {\n const logger2 = this._logger.create(\"_buildUser\");\n const user = new User(signinResponse);\n if (verifySub) {\n if (verifySub !== user.profile.sub) {\n logger2.debug(\"current user does not match user returned from signin. sub from signin:\", user.profile.sub);\n throw new ErrorResponse({ ...signinResponse, error: \"login_required\" });\n }\n logger2.debug(\"current user matches user returned from signin\");\n }\n await this.storeUser(user);\n logger2.debug(\"user stored\");\n await this._events.load(user);\n return user;\n }\n /**\n * Trigger a redirect of the current window to the end session endpoint.\n *\n * @returns A promise\n */\n async signoutRedirect(args = {}) {\n const logger2 = this._logger.create(\"signoutRedirect\");\n const {\n redirectMethod,\n ...requestArgs\n } = args;\n const handle = await this._redirectNavigator.prepare({ redirectMethod });\n await this._signoutStart({\n request_type: \"so:r\",\n post_logout_redirect_uri: this.settings.post_logout_redirect_uri,\n ...requestArgs\n }, handle);\n logger2.info(\"success\");\n }\n /**\n * Process response (callback) from the end session endpoint.\n * It is recommended to use {@link UserManager.signoutCallback} instead.\n *\n * @returns A promise containing signout response\n *\n * @see {@link UserManager.signoutCallback}\n */\n async signoutRedirectCallback(url = window.location.href) {\n const logger2 = this._logger.create(\"signoutRedirectCallback\");\n const response = await this._signoutEnd(url);\n logger2.info(\"success\");\n return response;\n }\n /**\n * Trigger a redirect of a popup window to the end session endpoint.\n *\n * @returns A promise\n */\n async signoutPopup(args = {}) {\n const logger2 = this._logger.create(\"signoutPopup\");\n const {\n popupWindowFeatures,\n popupWindowTarget,\n popupSignal,\n ...requestArgs\n } = args;\n const url = this.settings.popup_post_logout_redirect_uri;\n const handle = await this._popupNavigator.prepare({ popupWindowFeatures, popupWindowTarget, popupSignal });\n await this._signout({\n request_type: \"so:p\",\n post_logout_redirect_uri: url,\n // we're putting a dummy entry in here because we\n // need a unique id from the state for notification\n // to the parent window, which is necessary if we\n // plan to return back to the client after signout\n // and so we can close the popup after signout\n state: url == null ? void 0 : {},\n ...requestArgs\n }, handle);\n logger2.info(\"success\");\n }\n /**\n * Process response (callback) from the end session endpoint from a popup window.\n * It is recommended to use {@link UserManager.signoutCallback} instead.\n *\n * @returns A promise\n *\n * @see {@link UserManager.signoutCallback}\n */\n async signoutPopupCallback(url = window.location.href, keepOpen = false) {\n const logger2 = this._logger.create(\"signoutPopupCallback\");\n await this._popupNavigator.callback(url, { keepOpen });\n logger2.info(\"success\");\n }\n async _signout(args, handle) {\n const navResponse = await this._signoutStart(args, handle);\n return await this._signoutEnd(navResponse.url);\n }\n async _signoutStart(args = {}, handle) {\n var _a;\n const logger2 = this._logger.create(\"_signoutStart\");\n try {\n const user = await this._loadUser();\n logger2.debug(\"loaded current user from storage\");\n if (this.settings.revokeTokensOnSignout) {\n await this._revokeInternal(user);\n }\n const id_token = args.id_token_hint || user && user.id_token;\n if (id_token) {\n logger2.debug(\"setting id_token_hint in signout request\");\n args.id_token_hint = id_token;\n }\n await this.removeUser();\n logger2.debug(\"user removed, creating signout request\");\n const signoutRequest = await this._client.createSignoutRequest(args);\n logger2.debug(\"got signout request\");\n return await handle.navigate({\n url: signoutRequest.url,\n state: (_a = signoutRequest.state) == null ? void 0 : _a.id,\n scriptOrigin: this.settings.iframeScriptOrigin\n });\n } catch (err) {\n logger2.debug(\"error after preparing navigator, closing navigator window\");\n handle.close();\n throw err;\n }\n }\n async _signoutEnd(url) {\n const logger2 = this._logger.create(\"_signoutEnd\");\n const signoutResponse = await this._client.processSignoutResponse(url);\n logger2.debug(\"got signout response\");\n return signoutResponse;\n }\n /**\n * Trigger a silent request (via an iframe) to the end session endpoint.\n *\n * @returns A promise\n */\n async signoutSilent(args = {}) {\n var _a;\n const logger2 = this._logger.create(\"signoutSilent\");\n const {\n silentRequestTimeoutInSeconds,\n ...requestArgs\n } = args;\n const id_token_hint = this.settings.includeIdTokenInSilentSignout ? (_a = await this._loadUser()) == null ? void 0 : _a.id_token : void 0;\n const url = this.settings.popup_post_logout_redirect_uri;\n const handle = await this._iframeNavigator.prepare({ silentRequestTimeoutInSeconds });\n await this._signout({\n request_type: \"so:s\",\n post_logout_redirect_uri: url,\n id_token_hint,\n ...requestArgs\n }, handle);\n logger2.info(\"success\");\n }\n /**\n * Notify the parent window of response (callback) from the end session endpoint.\n * It is recommended to use {@link UserManager.signoutCallback} instead.\n *\n * @returns A promise\n *\n * @see {@link UserManager.signoutCallback}\n */\n async signoutSilentCallback(url = window.location.href) {\n const logger2 = this._logger.create(\"signoutSilentCallback\");\n await this._iframeNavigator.callback(url);\n logger2.info(\"success\");\n }\n async revokeTokens(types) {\n const user = await this._loadUser();\n await this._revokeInternal(user, types);\n }\n async _revokeInternal(user, types = this.settings.revokeTokenTypes) {\n const logger2 = this._logger.create(\"_revokeInternal\");\n if (!user) return;\n const typesPresent = types.filter((type) => typeof user[type] === \"string\");\n if (!typesPresent.length) {\n logger2.debug(\"no need to revoke due to no token(s)\");\n return;\n }\n for (const type of typesPresent) {\n await this._client.revokeToken(\n user[type],\n type\n );\n logger2.info(`${type} revoked successfully`);\n if (type !== \"access_token\") {\n user[type] = null;\n }\n }\n await this.storeUser(user);\n logger2.debug(\"user stored\");\n await this._events.load(user);\n }\n /**\n * Enables silent renew for the `UserManager`.\n */\n startSilentRenew() {\n this._logger.create(\"startSilentRenew\");\n void this._silentRenewService.start();\n }\n /**\n * Disables silent renew for the `UserManager`.\n */\n stopSilentRenew() {\n this._silentRenewService.stop();\n }\n get _userStoreKey() {\n return `user:${this.settings.authority}:${this.settings.client_id}`;\n }\n async _loadUser() {\n const logger2 = this._logger.create(\"_loadUser\");\n const storageString = await this.settings.userStore.get(this._userStoreKey);\n if (storageString) {\n logger2.debug(\"user storageString loaded\");\n return User.fromStorageString(storageString);\n }\n logger2.debug(\"no user storageString\");\n return null;\n }\n async storeUser(user) {\n const logger2 = this._logger.create(\"storeUser\");\n if (user) {\n logger2.debug(\"storing user\");\n const storageString = user.toStorageString();\n await this.settings.userStore.set(this._userStoreKey, storageString);\n } else {\n this._logger.debug(\"removing user\");\n await this.settings.userStore.remove(this._userStoreKey);\n if (this.settings.dpop) {\n await this.settings.dpop.store.remove(this.settings.client_id);\n }\n }\n }\n /**\n * Removes stale state entries in storage for incomplete authorize requests.\n */\n async clearStaleState() {\n await this._client.clearStaleState();\n }\n /**\n * Dynamically generates a DPoP proof for a given user, URL and optional Http method.\n * This method is useful when you need to make a request to a resource server\n * with fetch or similar, and you need to include a DPoP proof in a DPoP header.\n * @param url - The URL to generate the DPoP proof for\n * @param user - The user to generate the DPoP proof for\n * @param httpMethod - Optional, defaults to \"GET\"\n * @param nonce - Optional nonce provided by the resource server\n *\n * @returns A promise containing the DPoP proof or undefined if DPoP is not enabled/no user is found.\n */\n async dpopProof(url, user, httpMethod, nonce) {\n var _a, _b;\n const dpopState = await ((_b = (_a = this.settings.dpop) == null ? void 0 : _a.store) == null ? void 0 : _b.get(this.settings.client_id));\n if (dpopState) {\n return await CryptoUtils.generateDPoPProof({\n url,\n accessToken: user == null ? void 0 : user.access_token,\n httpMethod,\n keyPair: dpopState.keys,\n nonce\n });\n }\n return void 0;\n }\n async generateDPoPJkt(dpopSettings) {\n let dpopState = await dpopSettings.store.get(this.settings.client_id);\n if (!dpopState) {\n const dpopKeys = await CryptoUtils.generateDPoPKeys();\n dpopState = new DPoPState(dpopKeys);\n await dpopSettings.store.set(this.settings.client_id, dpopState);\n }\n return await CryptoUtils.generateDPoPJkt(dpopState.keys);\n }\n};\n\n// package.json\nvar version = \"3.3.0\";\n\n// src/Version.ts\nvar Version = version;\n\n// src/IndexedDbDPoPStore.ts\nvar IndexedDbDPoPStore = class {\n constructor() {\n this._dbName = \"oidc\";\n this._storeName = \"dpop\";\n }\n async set(key, value) {\n const store = await this.createStore(this._dbName, this._storeName);\n await store(\"readwrite\", (str) => {\n str.put(value, key);\n return this.promisifyRequest(str.transaction);\n });\n }\n async get(key) {\n const store = await this.createStore(this._dbName, this._storeName);\n return await store(\"readonly\", (str) => {\n return this.promisifyRequest(str.get(key));\n });\n }\n async remove(key) {\n const item = await this.get(key);\n const store = await this.createStore(this._dbName, this._storeName);\n await store(\"readwrite\", (str) => {\n return this.promisifyRequest(str.delete(key));\n });\n return item;\n }\n async getAllKeys() {\n const store = await this.createStore(this._dbName, this._storeName);\n return await store(\"readonly\", (str) => {\n return this.promisifyRequest(str.getAllKeys());\n });\n }\n promisifyRequest(request) {\n return new Promise((resolve, reject) => {\n request.oncomplete = request.onsuccess = () => resolve(request.result);\n request.onabort = request.onerror = () => reject(request.error);\n });\n }\n async createStore(dbName, storeName) {\n const request = indexedDB.open(dbName);\n request.onupgradeneeded = () => request.result.createObjectStore(storeName);\n const db = await this.promisifyRequest(request);\n return async (txMode, callback) => {\n const tx = db.transaction(storeName, txMode);\n const store = tx.objectStore(storeName);\n return await callback(store);\n };\n }\n};\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n AccessTokenEvents,\n CheckSessionIFrame,\n DPoPState,\n ErrorResponse,\n ErrorTimeout,\n InMemoryWebStorage,\n IndexedDbDPoPStore,\n Log,\n Logger,\n MetadataService,\n OidcClient,\n OidcClientSettingsStore,\n SessionMonitor,\n SigninResponse,\n SigninState,\n SignoutResponse,\n State,\n User,\n UserManager,\n UserManagerSettingsStore,\n Version,\n WebStorageStateStore\n});\n//# sourceMappingURL=oidc-client-ts.js.map\n","/*!\n * set-value <https://github.com/jonschlinkert/set-value>\n *\n * Copyright (c) Jon Schlinkert (https://github.com/jonschlinkert).\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst { deleteProperty } = Reflect;\nconst isPrimitive = require('is-primitive');\nconst isPlainObject = require('is-plain-object');\n\nconst isObject = value => {\n return (typeof value === 'object' && value !== null) || typeof value === 'function';\n};\n\nconst isUnsafeKey = key => {\n return key === '__proto__' || key === 'constructor' || key === 'prototype';\n};\n\nconst validateKey = key => {\n if (!isPrimitive(key)) {\n throw new TypeError('Object keys must be strings or symbols');\n }\n\n if (isUnsafeKey(key)) {\n throw new Error(`Cannot set unsafe key: \"${key}\"`);\n }\n};\n\nconst toStringKey = input => {\n return Array.isArray(input) ? input.flat().map(String).join(',') : input;\n};\n\nconst createMemoKey = (input, options) => {\n if (typeof input !== 'string' || !options) return input;\n let key = input + ';';\n if (options.arrays !== undefined) key += `arrays=${options.arrays};`;\n if (options.separator !== undefined) key += `separator=${options.separator};`;\n if (options.split !== undefined) key += `split=${options.split};`;\n if (options.merge !== undefined) key += `merge=${options.merge};`;\n if (options.preservePaths !== undefined) key += `preservePaths=${options.preservePaths};`;\n return key;\n};\n\nconst memoize = (input, options, fn) => {\n const key = toStringKey(options ? createMemoKey(input, options) : input);\n validateKey(key);\n\n const value = setValue.cache.get(key) || fn();\n setValue.cache.set(key, value);\n return value;\n};\n\nconst splitString = (input, options = {}) => {\n const sep = options.separator || '.';\n const preserve = sep === '/' ? false : options.preservePaths;\n\n if (typeof input === 'string' && preserve !== false && /\\//.test(input)) {\n return [input];\n }\n\n const parts = [];\n let part = '';\n\n const push = part => {\n let number;\n if (part.trim() !== '' && Number.isInteger((number = Number(part)))) {\n parts.push(number);\n } else {\n parts.push(part);\n }\n };\n\n for (let i = 0; i < input.length; i++) {\n const value = input[i];\n\n if (value === '\\\\') {\n part += input[++i];\n continue;\n }\n\n if (value === sep) {\n push(part);\n part = '';\n continue;\n }\n\n part += value;\n }\n\n if (part) {\n push(part);\n }\n\n return parts;\n};\n\nconst split = (input, options) => {\n if (options && typeof options.split === 'function') return options.split(input);\n if (typeof input === 'symbol') return [input];\n if (Array.isArray(input)) return input;\n return memoize(input, options, () => splitString(input, options));\n};\n\nconst assignProp = (obj, prop, value, options) => {\n validateKey(prop);\n\n // Delete property when \"value\" is undefined\n if (value === undefined) {\n deleteProperty(obj, prop);\n\n } else if (options && options.merge) {\n const merge = options.merge === 'function' ? options.merge : Object.assign;\n\n // Only merge plain objects\n if (merge && isPlainObject(obj[prop]) && isPlainObject(value)) {\n obj[prop] = merge(obj[prop], value);\n } else {\n obj[prop] = value;\n }\n\n } else {\n obj[prop] = value;\n }\n\n return obj;\n};\n\nconst setValue = (target, path, value, options) => {\n if (!path || !isObject(target)) return target;\n\n const keys = split(path, options);\n let obj = target;\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const next = keys[i + 1];\n\n validateKey(key);\n\n if (next === undefined) {\n assignProp(obj, key, value, options);\n break;\n }\n\n if (typeof next === 'number' && !Array.isArray(obj[key])) {\n obj = obj[key] = [];\n continue;\n }\n\n if (!isObject(obj[key])) {\n obj[key] = {};\n }\n\n obj = obj[key];\n }\n\n return target;\n};\n\nsetValue.split = split;\nsetValue.cache = new Map();\nsetValue.clear = () => {\n setValue.cache = new Map();\n};\n\nmodule.exports = setValue;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","// eslint-disable-next-line import/no-cycle\nimport ClientServerBus from '../drivers/ws/client';\n\nexport default ClientServerBus;\n","import {\n io,\n ManagerOptions,\n Socket,\n SocketOptions,\n} from 'socket.io-client';\n\nexport default class ClientServerBus {\n subscriptions = {};\n\n connections = {};\n\n connectionsInEstablishment = {};\n\n isPaused: boolean = false;\n\n connectionInterruptedSubscribers: ((error?: any) => void)[] = [];\n\n messagesWhilePaused: { cb: (data: any) => any, data: any }[] = [];\n\n getBearerToken?: () => Promise<string | null>;\n\n constructor(getBearerToken?: () => Promise<string | null>) {\n this.getBearerToken = getBearerToken;\n }\n\n public subscribeConnectionInterrupted(sub: (error?: any) => void): void {\n this.connectionInterruptedSubscribers.push(sub);\n }\n\n public async subscribe(url: string, channel: string, readToken, handler: (data: any) => any)\n : Promise<[string, (data: any) => any]> {\n const parsedUrl: URL = new URL(url);\n const subId = `${parsedUrl.origin}-${channel}`;\n const connection = await this.ensureConnection(parsedUrl.origin);\n\n const subResult = await new Promise((resolve) => {\n connection.emit('subscribe', { channel, readToken }, resolve);\n }) as any;\n\n if (subResult.status === 'unauthorized') {\n throw new Error('unauthorized');\n }\n\n if (subResult.status !== 'subscribed') {\n throw new Error(`unknown error when subscribing to ${channel}`);\n }\n\n this.subscriptions[subId] = this.subscriptions[subId] || [];\n this.subscriptions[subId].push(handler);\n\n return [subId, handler];\n }\n\n public async send(url: string, channel: string, message: object) {\n const parsedUrl: URL = new URL(url);\n const connection = await this.ensureConnection(parsedUrl.origin);\n\n const sendResult = await new Promise((resolve) => {\n connection.emit('message', { channel, message }, resolve);\n }) as any;\n\n if (sendResult.status === 'unauthorized') {\n throw new Error('unauthorized');\n }\n\n if (sendResult.status !== 'delivered') {\n throw new Error(`unknown error when sending message to ${channel}`);\n }\n }\n\n public async unsubscribe([subId, handler]: [string, (data: any) => any]) {\n if (this.subscriptions[subId]) {\n this.subscriptions[subId] = this.subscriptions[subId].filter((h) => h !== handler);\n }\n }\n\n public unsubscribeAll() {\n Object.values(this.connections).forEach((connection: any) => {\n connection.close();\n });\n\n this.connections = {};\n }\n\n public pauseNotification() {\n this.isPaused = true;\n }\n\n public unpauseNotification() {\n this.messagesWhilePaused.forEach(({ cb, data }) => {\n cb(data);\n });\n\n this.messagesWhilePaused = [];\n }\n\n private async getWSAsync(url: URL): Promise<Socket<any, any>> {\n const opt: Partial<ManagerOptions & SocketOptions> = {\n withCredentials: true,\n path: url.pathname,\n transports: ['websocket'],\n };\n\n if (this.getBearerToken) {\n const token = await this.getBearerToken();\n\n if (token) {\n opt.auth = {\n token: `Bearer ${token}`,\n };\n }\n }\n\n return new Promise((resolve, reject) => {\n const socket = io(url.origin, opt);\n\n socket.on('connect', () => {\n resolve(socket);\n });\n\n socket.on('error', (error) => {\n console.log('==> websocket error', error);\n this.connectionInterruptedSubscribers.forEach((sub) => {\n sub(error);\n });\n });\n\n socket.on('disconnect', (reason) => {\n const willTryToReconnectReasons = ['ping timeout', 'transport close', 'transport error'];\n\n if (willTryToReconnectReasons.includes(reason)) {\n console.log('Connection disconnected. Socket.io will try to reconnect...');\n return;\n }\n\n this.connectionInterruptedSubscribers.forEach((sub) => {\n sub(new Error(`Websocket connection closed because: ${reason}`));\n });\n });\n\n socket.io.on('reconnect_error', (error) => {\n this.connectionInterruptedSubscribers.forEach((sub) => {\n console.log(`Websocket reconnect error: ${error}`);\n sub(new Error(`Websocket reconnect error: ${error}`));\n });\n });\n\n socket.io.on('reconnect_failed', () => {\n this.connectionInterruptedSubscribers.forEach((sub) => {\n console.log('Websocket reconnect failed!');\n sub(new Error('Websocket reconnect failed!'));\n });\n });\n\n socket.on('connect_error', reject);\n });\n }\n\n private async ensureConnection(origin) {\n const url = new URL(origin);\n url.pathname = '/ws';\n\n if (this.connectionsInEstablishment[url.origin]) {\n const connection = await this.connectionsInEstablishment[url.origin];\n return connection;\n }\n\n if (!this.connections[url.origin]) {\n this.connectionsInEstablishment[url.origin] = this.getWSAsync(url);\n this.connections[url.origin] = await this.connectionsInEstablishment[url.origin];\n\n this.connections[url.origin].on('data', (data) => {\n const { sseChannel } = data;\n\n if (!sseChannel) {\n return;\n }\n\n // eslint-disable-next-line no-param-reassign\n delete data.sseChannel;\n\n const subscriptions = this.subscriptions[`${url.origin}-${sseChannel}`];\n\n if (subscriptions) {\n subscriptions.forEach((cb) => {\n if (this.isPaused) {\n this.messagesWhilePaused.push({ cb, data });\n } else {\n cb(data);\n }\n });\n }\n });\n }\n\n return this.connections[origin];\n }\n}\n","export default function getAllPrefixes(arr: string[]): string[][] {\n const result: string[][] = [];\n const prefix: string[] = [];\n\n arr.forEach((item) => {\n prefix.push(item);\n result.push([...prefix]);\n });\n\n return result;\n}\n","export default function unset(obj, path) {\n const keys = path.split('.');\n let currentObj = obj;\n\n for (let i = 0; i < keys.length - 1; i += 1) {\n const key = keys[i];\n // eslint-disable-next-line no-prototype-builtins\n if (!currentObj.hasOwnProperty(key) || typeof currentObj[key] !== 'object') {\n // If the key doesn't exist or isn't an object, stop here.\n return;\n }\n currentObj = currentObj[key];\n }\n\n const lastKey = keys[keys.length - 1];\n // eslint-disable-next-line no-prototype-builtins\n if (currentObj.hasOwnProperty(lastKey)) {\n delete currentObj[lastKey];\n }\n}\n","/* eslint-disable import/no-cycle */\n/* eslint-disable class-methods-use-this */\n\nimport LinkedRecords from '../../browser_sdk/index';\nimport SerializedChangeWithMetadata from './serialized_change_with_metadata';\nimport IsSerializable from './is_serializable';\nimport ClientServerBus from '../../../lib/client-server-bus/client';\n\nexport default abstract class AbstractAttributeClient <Type, TypedChange extends IsSerializable > {\n linkedRecords: LinkedRecords;\n\n clientServerBus: ClientServerBus;\n\n id?: string;\n\n actorId: string | undefined;\n\n clientId: string;\n\n createdAt: Date | undefined;\n\n updatedAt: Date | undefined;\n\n serverURL: URL;\n\n observers: Function[];\n\n isInitialized: boolean;\n\n version: string; // TODO: should be number\n\n value: Type;\n\n attrSubscription?: [string, (data: any) => any] = undefined;\n\n readToken?: string;\n\n constructor(linkedRecords: LinkedRecords, clientServerBus: ClientServerBus, id?: string) {\n this.id = id;\n this.linkedRecords = linkedRecords;\n this.clientServerBus = clientServerBus;\n this.serverURL = linkedRecords.serverURL;\n this.createdAt = undefined;\n this.updatedAt = undefined;\n this.observers = [];\n\n // because the same user can be logged on two browsers/laptops, we need\n // a clientId and an actorId. Every attribute needs to have its own clientId.\n this.clientId = linkedRecords.getAttributeClientId();\n\n if (linkedRecords.actorId) {\n this.actorId = linkedRecords.actorId;\n } else {\n linkedRecords.ensureUserIdIsKnown().then((aId) => { this.actorId = aId; });\n }\n\n this.version = '0';\n this.value = this.getDefaultValue();\n this.isInitialized = false;\n }\n\n public static getDataTypeName() {\n throw new Error('getDataTypeName needs to be implemented in child class');\n }\n\n public static isAttributeId(id: string) {\n return id.split('-')[0] === this.prototype.getDataTypePrefix();\n }\n\n public abstract getDataTypePrefix();\n public abstract getDefaultValue() : Type;\n public abstract deserializeValue(serializedValue: string) : Promise<Type>;\n\n protected abstract rawSet(newValue: Type): void;\n protected abstract rawChange(delta: TypedChange): Promise<boolean>;\n protected abstract onServerMessage(payload: SerializedChangeWithMetadata<TypedChange>);\n protected abstract onLoad();\n\n public async create(value: Type, facts?: [ string?, string?, string? ][]) {\n if (this.id) {\n throw new Error(`Cannot create attribute because it has an id assigned (${this.id})`);\n }\n\n const requestConfig: any = {\n method: 'POST',\n body: await this.getCreatePayload(value, facts),\n };\n\n if (typeof requestConfig.body !== 'string') {\n requestConfig.isJSON = false;\n }\n\n const url = `/attributes?dtp=${this.getDataTypePrefix()}&clientId=${this.clientId}`;\n const response = await this.linkedRecords.fetch(url, requestConfig);\n\n if (!response) {\n return;\n }\n\n if (response.status !== 200) {\n throw new Error(`Error creating attribute: ${await response.text()}`);\n }\n\n const responseBody = await response.json();\n\n this.id = responseBody.id;\n\n if (!this.id || !this.id.trim()) {\n throw new Error('Unknown error occurred: The attribute was not assigned an ID by the server');\n }\n\n await this.load(responseBody);\n }\n\n public getId(): string {\n if (!this.id) {\n throw new Error('getId can not return the attribute id as id is undefined');\n }\n\n return this.id;\n }\n\n public getClientId(): string {\n if (!this.clientId) {\n throw new Error('clientId can not return the attribute id as id is undefined');\n }\n\n return this.clientId;\n }\n\n public getServerURL(): string {\n if (!this.serverURL) {\n throw new Error('serverURL can not return the attribute id as id is undefined');\n }\n\n return this.serverURL.toString();\n }\n\n public getDataURL() {\n const url = new URL(`/attributes/${this.id}?clientId=${this.clientId}&valueOnly=true`, this.linkedRecords.serverURL);\n return url.toString();\n }\n\n protected async getCreatePayload(\n value: Type,\n facts: [ string?, string?, string? ][] = [],\n ): Promise<string | FormData> {\n const actorId = await this.linkedRecords.ensureUserIdIsKnown();\n\n if (!actorId) {\n throw new Error('actorId is unknown, can not create payload!');\n }\n\n return JSON.stringify({\n clientId: this.clientId,\n actorId,\n facts,\n value,\n });\n }\n\n public async get() : Promise<{ value: Type, changeId: string, actorId: string } | undefined> {\n const isOk = await this.load();\n\n if (!isOk) {\n return undefined;\n }\n\n if (!this.actorId) {\n throw new Error('actorId is unknown, can not get attribute value!');\n }\n\n return {\n value: this.value,\n changeId: this.version,\n actorId: this.actorId,\n };\n }\n\n public async getValue() : Promise<Type | undefined> {\n const isOk = await this.load();\n\n if (!isOk) {\n return undefined;\n }\n\n return this.value;\n }\n\n public async set(newValue: Type) : Promise<void> {\n await this.load();\n\n if (newValue === this.value) {\n return;\n }\n\n await this.rawSet(newValue);\n }\n\n public async change(change: TypedChange) : Promise<boolean> {\n await this.load();\n return this.rawChange(change);\n }\n\n public async subscribe(observer: Function) {\n await this.load();\n this.observers.push(observer);\n }\n\n // TODO: when an attribute is unloaded it should be removed from the attribute cache\n public unload() {\n if (this.attrSubscription) {\n this.clientServerBus.unsubscribe(this.attrSubscription);\n }\n }\n\n public async load(serverState?: {\n changeId: string,\n value: string,\n createdAt: Date,\n updatedAt: Date,\n readToken?: string,\n }, forceReload: boolean = false): Promise<boolean> {\n let result = serverState;\n\n if (this.isInitialized && !forceReload) {\n return true;\n }\n\n if (!this.id) {\n throw new Error('cannot load an attribute without id');\n }\n\n if (!result) {\n const url = `/attributes/${this.id}?clientId=${this.clientId}`;\n const response = await this.linkedRecords.fetch(url);\n\n if (!response) {\n return false;\n }\n\n const jsonBody = await response.json();\n\n result = {\n changeId: jsonBody.changeId,\n value: jsonBody.value,\n createdAt: new Date(jsonBody.createdAt),\n updatedAt: new Date(jsonBody.updatedAt),\n };\n }\n\n const serializedValue = typeof result.value === 'string' ? result.value : JSON.stringify(result.value);\n\n if (!serializedValue && serializedValue !== '') {\n throw new Error('invalid server state');\n }\n\n this.version = result.changeId;\n this.value = await this.deserializeValue(serializedValue);\n this.createdAt = new Date(result.createdAt);\n this.updatedAt = new Date(result.updatedAt);\n this.readToken = result.readToken;\n this.isInitialized = true;\n this.onLoad();\n this.notifySubscribers(undefined, undefined);\n\n if (!this.attrSubscription) {\n const url = new URL(`/attributes/${this.id}/changes?clientId=${this.clientId}`, this.serverURL);\n const callback = (parsedData) => {\n if (parsedData.error === 'quota_violation') {\n this.linkedRecords.handleQuotaViolationError(parsedData);\n return;\n }\n\n if (parsedData.attributeId !== this.id) {\n return;\n }\n\n this.updatedAt = new Date(parsedData.updatedAt);\n\n this.onServerMessage(parsedData);\n };\n\n this.attrSubscription = await this.clientServerBus.subscribe(\n url.toString(),\n this.id,\n this.readToken,\n callback,\n );\n }\n\n return true;\n }\n\n protected async sendToServer(\n change: SerializedChangeWithMetadata<TypedChange>,\n ): Promise<boolean> {\n if (!this.id) {\n throw Error('cannot send message to server as attribute does not has an id');\n }\n\n try {\n await this.clientServerBus.send(this.serverURL.toString(), this.id, change);\n return true;\n } catch (ex: any) {\n if (ex.message && ex.message.match && ex.message.match(/unauthorized/)) {\n if (this.linkedRecords.authorizationErrorHandler) {\n this.linkedRecords.authorizationErrorHandler();\n } else {\n throw new Error('User is not allowed to perform operation');\n }\n } else {\n this.linkedRecords.handleConnectionError(ex);\n }\n\n return false;\n }\n }\n\n protected notifySubscribers(change?: TypedChange, fullChangeInfo?: { actorId: string }) {\n this.observers.forEach((callback) => {\n callback(change, fullChangeInfo);\n });\n }\n}\n","import IsSerializable from './is_serializable';\n\nexport default class SerializedChangeWithMetadata<Change extends IsSerializable> {\n public attributeId: string;\n\n public actorId: string;\n\n public clientId: string;\n\n public change: Change;\n\n public updatedAt: Date | undefined;\n\n constructor(\n attributeId: string,\n actorId: string,\n clientId: string,\n change: Change,\n updatedAt: Date | undefined = undefined,\n ) {\n this.attributeId = attributeId;\n this.actorId = actorId;\n this.clientId = clientId;\n this.change = change;\n this.updatedAt = updatedAt;\n }\n\n toJSON(): any {\n return {\n attributeId: this.attributeId,\n change: this.change.toJSON(),\n actorId: this.actorId,\n clientId: this.clientId,\n updatedAt: this.updatedAt,\n };\n }\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\n/* eslint-disable import/no-cycle */\n/* eslint-disable class-methods-use-this */\nimport AbstractAttributeClient from '../../abstract/abstract_attribute_client';\nimport SerializedChangeWithMetadata from '../../abstract/serialized_change_with_metadata';\nimport BlobChange from '../blob_change';\n\nexport default class BlobAttribute extends AbstractAttributeClient<Blob, BlobChange> {\n public static getDataTypePrefix() : string {\n return 'bl';\n }\n\n public static getDataTypeName() : string {\n return 'blob';\n }\n\n public getDataTypePrefix() : string {\n return BlobAttribute.getDataTypePrefix();\n }\n\n public getDataTypeName() : string {\n return BlobAttribute.getDataTypeName();\n }\n\n public getDefaultValue() : Blob {\n return new Blob();\n }\n\n public async deserializeValue(serializedValue: string) : Promise<Blob> {\n return new Blob([serializedValue]);\n }\n\n protected async getCreatePayload(value: Blob): Promise<string | FormData> {\n const actorId = await this.linkedRecords.ensureUserIdIsKnown();\n\n if (!actorId) {\n throw new Error('actorId is unknown, can not create blob payload!');\n }\n\n const formData = new FormData();\n formData.append('change', value, 'blob');\n formData.append('actorId', actorId);\n formData.append('clientId', this.clientId);\n\n return formData;\n }\n\n protected async rawSet(newValue: Blob) {\n this.value = newValue;\n this.transmitChange(this.value);\n }\n\n protected async rawChange(change: BlobChange): Promise<boolean> {\n this.value = change.value;\n return this.transmitChange(this.value);\n }\n\n protected onServerMessage(changeWithMetadata: SerializedChangeWithMetadata<BlobChange>) {\n if (changeWithMetadata.clientId !== this.clientId) {\n this.notifySubscribers(changeWithMetadata.change, changeWithMetadata);\n }\n }\n\n protected async transmitChange(value: Blob): Promise<boolean> {\n if (!this.id) {\n throw new Error('change can not be transmitted because attribute does not has an id');\n }\n\n if (!this.actorId) {\n throw new Error('actorId is unknown, can not transmit change!');\n }\n\n const formData = new FormData();\n const url = `/attributes/${this.id}?clientId=${this.clientId}&actorId=${this.actorId}`;\n\n formData.append('change', value, 'blob');\n formData.append('attributeId', this.id);\n formData.append('actorId', this.actorId);\n formData.append('clientId', this.clientId);\n\n const success = await this.linkedRecords.fetch(url, {\n method: 'PATCH',\n body: formData,\n isJSON: false,\n doNotHandleExpiredSessions: true,\n });\n\n return !!success;\n }\n\n protected onLoad() {}\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\n/* eslint-disable import/no-cycle */\n/* eslint-disable class-methods-use-this */\nimport flatten, { unflatten } from 'flat';\nimport get from 'get-value';\nimport AbstractAttributeClient from '../../abstract/abstract_attribute_client';\nimport SerializedChangeWithMetadata from '../../abstract/serialized_change_with_metadata';\nimport KeyValueChange, { AtomicChange } from '../key_value_change';\nimport getAllPrefixes from '../../../../lib/utils/all_prefixes';\n\nexport default class KeyValueAttribute extends AbstractAttributeClient<object, KeyValueChange> {\n public static getDataTypePrefix() : string {\n return 'kv';\n }\n\n public static getDataTypeName() : string {\n return 'keyValue';\n }\n\n public getDataTypePrefix() : string {\n return KeyValueAttribute.getDataTypePrefix();\n }\n\n public getDataTypeName() : string {\n return KeyValueAttribute.getDataTypeName();\n }\n\n public getDefaultValue() : object {\n return {};\n }\n\n public deserializeValue(serializedValue: string) : Promise<object> {\n return Promise.resolve(unflatten(JSON.parse(serializedValue)));\n }\n\n public async getValue() : Promise<object | undefined> {\n const isOk = await this.load();\n\n if (!isOk) {\n return undefined;\n }\n\n if (!this.value) {\n return this.value;\n }\n\n return JSON.parse(JSON.stringify(this.value));\n }\n\n public async patch(changes: Record<string, object | string | number | boolean | null >) {\n return this.change(new KeyValueChange(\n Object.entries(changes).map(([key, value]) => ({ key, value })),\n ));\n }\n\n protected async rawSet(newValue: object) {\n let changes: AtomicChange[] = [];\n const flatOldValue = flatten(this.value) as object;\n const flatValue = flatten(newValue) as object;\n\n Object.entries(flatOldValue).forEach(([key]) => {\n // in case keys are not present in newValue anymore,\n // we want to remove them from the key value store.\n // flatOldValue.split('.').\n getAllPrefixes(key.split('.')).forEach((path) => {\n changes.push({ key: path.join('.'), value: null });\n });\n });\n\n changes = changes.filter(({ key }) => (\n get(newValue, key) === null || get(newValue, key) === undefined));\n\n Object.entries(flatValue).forEach(([key, value]) => {\n // We transmit the key value pair only if it actually changed\n if (flatOldValue[key] !== value) {\n changes.push({ key, value });\n }\n });\n\n if (changes.length) {\n await this.change(new KeyValueChange(changes));\n }\n }\n\n protected async rawChange(change: KeyValueChange): Promise<boolean> {\n const actualChanges = change.change.filter(({ key, value }) => {\n if (!this.value[key] && value) {\n return true;\n }\n\n if (this.value[key] && !value) {\n return true;\n }\n\n return JSON.stringify(this.value[key]) !== JSON.stringify(value);\n });\n\n if (actualChanges.length === 0) {\n return true;\n }\n\n const success = await this.transmitChange(new KeyValueChange(actualChanges, this.version));\n\n if (success) {\n this.notifySubscribers(change);\n this.value = change.apply(this.value);\n }\n\n return success;\n }\n\n protected onLoad() {\n }\n\n protected onServerMessage(changeWithMetadata: SerializedChangeWithMetadata<KeyValueChange>) {\n const change = new KeyValueChange(\n changeWithMetadata.change as unknown as AtomicChange[],\n changeWithMetadata.change.changeId,\n );\n\n if (changeWithMetadata.clientId === this.clientId) {\n return;\n }\n\n this.value = change.apply(this.value);\n this.version = change.changeId;\n\n this.notifySubscribers(change, changeWithMetadata);\n }\n\n protected transmitChange(changeset: KeyValueChange): Promise<boolean> {\n if (!this.id) {\n throw new Error('change can not be transmitted because attribute does not has an id');\n }\n\n if (!this.actorId) {\n throw new Error('actorId is unknown, can not transmit change!');\n }\n\n return this.sendToServer(new SerializedChangeWithMetadata<KeyValueChange>(\n this.id,\n this.actorId,\n this.clientId,\n changeset,\n ));\n }\n}\n","import set from 'set-value';\nimport unset from '../../../lib/utils/unset';\n\nexport type AtomicChange = {\n key: string,\n value: object | string | boolean | number | null,\n};\n\nexport default class KeyValueChange {\n public changeId: string;\n\n public change: AtomicChange[];\n\n public static fromJSON(input: any, changeId?: string) {\n return new KeyValueChange(input as AtomicChange[], changeId);\n }\n\n public static fromString(input: string) : KeyValueChange {\n return new KeyValueChange(JSON.parse(input));\n }\n\n constructor(changeset: AtomicChange[], changeId?: string) {\n this.changeId = changeId ?? 'uncommitted';\n this.change = changeset;\n }\n\n public toString(): string {\n return JSON.stringify(this.change);\n }\n\n public toJSON(): object {\n return this.change;\n }\n\n public apply(input: object): object {\n const result = JSON.parse(JSON.stringify(input));\n\n if (!this.change.forEach) {\n return result;\n }\n\n this.change.forEach((aChange) => {\n if (aChange.value === null) {\n unset(result, aChange.key);\n } else {\n set(result, aChange.key, aChange.value);\n }\n });\n\n return result;\n }\n\n public merge(other: KeyValueChange): KeyValueChange {\n let mergedChanges: AtomicChange[] = [];\n\n this.change.forEach((ch) => {\n mergedChanges = mergedChanges.filter((x) => x.key !== ch.key);\n mergedChanges.push(ch);\n });\n\n other.change.forEach((ch) => {\n mergedChanges = mergedChanges.filter((x) => x.key !== ch.key);\n mergedChanges.push(ch);\n });\n\n return new KeyValueChange(mergedChanges);\n }\n}\n","import LongTextChange from '../long_text_change';\n\nexport default class ChangeBuffer {\n value?: LongTextChange;\n\n // this is the a2\n inFlightOp?: LongTextChange;\n\n init(inFlightOp: LongTextChange) {\n this.inFlightOp = inFlightOp;\n }\n\n add(changeset: LongTextChange): void {\n this.value = this.value ? this.value.merge(changeset) : changeset;\n }\n\n // this function returns a transformed version of the foreignChange which\n // fits into the current client state. This is required because the client\n // could have some changes which has not been send to the server yet. So, the\n // server don't know about these changes and the changes coming from the server\n // would not fit into the client state.\n transformAgainst(\n foreignChange: LongTextChange,\n ) : LongTextChange {\n if (!this.inFlightOp) {\n return foreignChange;\n }\n\n const c2 = foreignChange.transformAgainst(this.inFlightOp, true);\n this.inFlightOp = this.inFlightOp?.transformAgainst(foreignChange, false);\n\n if (!this.value) return c2;\n\n // transform the foreignChange (change from server) into the client state.\n const c1 = c2.transformAgainst(this.value, true);\n\n // \"Once we have this inferred operation, c2, we can use it\n // to transform the buffer (b) \"down\" one step\"\n this.value = this.value?.transformAgainst(c2, false);\n\n return c1;\n }\n\n // TODO: Why does it not work to use the bridge to transform server changes?\n get bridge(): LongTextChange | undefined {\n if (!this.inFlightOp) {\n return undefined;\n }\n\n if (!this.value) {\n return this.inFlightOp;\n }\n\n return this.inFlightOp.merge(this.value);\n }\n\n clear() {\n this.value = undefined;\n this.inFlightOp = undefined;\n }\n\n getValue(): LongTextChange | undefined {\n return this.value;\n }\n}\n","/* eslint-disable import/no-cycle */\n/* eslint-disable class-methods-use-this */\n\nimport AbstractAttributeClient from '../../abstract/abstract_attribute_client';\nimport SerializedChangeWithMetadata from '../../abstract/serialized_change_with_metadata';\nimport LongTextChange from '../long_text_change';\nimport ChangeBuffer from './buffer';\n\nexport default class LongTextAttribute extends AbstractAttributeClient<string, LongTextChange> {\n buffer: ChangeBuffer = new ChangeBuffer();\n\n changeInTransmission?: SerializedChangeWithMetadata<LongTextChange> = undefined;\n\n changeInTransmissionSendAt?: Date = undefined;\n\n public static serverApprovalTimeoutInMS: number = 2500;\n\n public static getDataTypePrefix() : string {\n return 'l';\n }\n\n public static getDataTypeName() : string {\n return 'longText';\n }\n\n public getDataTypePrefix() : string {\n return 'l';\n }\n\n public getDataTypeName() : string {\n return LongTextAttribute.getDataTypeName();\n }\n\n public getDefaultValue() : string {\n return '';\n }\n\n public deserializeValue(serializedValue: string) : Promise<string> {\n return Promise.resolve(serializedValue);\n }\n\n protected async rawSet(newValue: string) {\n const changeset = LongTextChange.fromDiff(this.value, newValue);\n\n await this.change(changeset);\n }\n\n protected async rawChange(changeset: LongTextChange): Promise<boolean> {\n // TODO: Check for version is valid\n // if (this.version === '0') {\n // throw Error('Cannot change attribute as attributed state is not loaded from server!');\n // }\n\n this.value = changeset.apply(this.value);\n\n if (this.changeInTransmission) {\n if (\n this.getLastChangeTransmittedMillisecondsAgo() > LongTextAttribute.serverApprovalTimeoutInMS\n ) {\n this.linkedRecords.handleConnectionError(new Error(`No approval received from server after ${LongTextAttribute.serverApprovalTimeoutInMS} ms`));\n }\n\n this.buffer.add(changeset);\n } else {\n const success = await this.transmitChange(\n new LongTextChange(changeset.changeset, this.version),\n );\n\n if (!success) {\n return false;\n }\n }\n\n this.notifySubscribers(changeset);\n\n return true;\n }\n\n protected getLastChangeTransmittedMillisecondsAgo(): number {\n if (!this.changeInTransmissionSendAt) {\n return -1;\n }\n\n return (new Date()).getTime() - this.changeInTransmissionSendAt.getTime();\n }\n\n protected onLoad() {\n this.changeInTransmission = undefined;\n this.changeInTransmissionSendAt = undefined;\n this.buffer.clear();\n }\n\n protected onServerMessage(changeWithMetadata: SerializedChangeWithMetadata<LongTextChange>) {\n if (changeWithMetadata.clientId === this.clientId) {\n this.processApproval(changeWithMetadata);\n } else {\n this.processForeignChange(changeWithMetadata);\n }\n }\n\n private processForeignChange(\n foreignChangeWithMetadata: SerializedChangeWithMetadata<LongTextChange>,\n ) {\n let transformedForeignChange;\n let foreignChangeset;\n\n try {\n foreignChangeset = LongTextChange.fromString(\n foreignChangeWithMetadata.change.changeset,\n );\n\n transformedForeignChange = this.buffer.transformAgainst(\n foreignChangeset,\n );\n\n this.value = transformedForeignChange.apply(this.value);\n this.version = foreignChangeWithMetadata.change.changeId;\n this.notifySubscribers(transformedForeignChange, foreignChangeWithMetadata);\n } catch (ex) {\n // eslint-disable-next-line no-console\n console.log(this.value);\n // eslint-disable-next-line no-console\n console.log(transformedForeignChange?.changeset?.inspect());\n // eslint-disable-next-line no-console\n console.log('ERROR: processing foreign change failed (probably because of a previous message loss). Reload server state to recover.', ex);\n this.buffer.clear();\n this.load(undefined, true);\n }\n }\n\n private processApproval(approval: SerializedChangeWithMetadata<LongTextChange>) {\n const bufferedChanges = this.buffer.getValue();\n this.changeInTransmission = undefined;\n this.changeInTransmissionSendAt = undefined;\n this.version = approval.change.changeId;\n this.buffer.clear();\n\n if (bufferedChanges) {\n this.transmitChange(new LongTextChange(bufferedChanges.changeset, approval.change.changeId));\n }\n }\n\n protected transmitChange(changeset: LongTextChange): Promise<boolean> {\n if (!this.id) {\n throw new Error('change can not be transmitted because attribute does not has an id');\n }\n\n if (!this.actorId) {\n throw new Error('actorId is unknown, can not transmit change!');\n }\n\n this.changeInTransmissionSendAt = new Date();\n this.changeInTransmission = new SerializedChangeWithMetadata<LongTextChange>(\n this.id,\n this.actorId,\n this.clientId,\n changeset,\n );\n\n this.buffer.init(changeset);\n\n return this.sendToServer(this.changeInTransmission);\n }\n}\n","import { Changeset } from 'changesets';\nimport { diff_match_patch as DiffMatchPatch } from 'diff_match_patch';\n\nconst diffEngine = new DiffMatchPatch();\n\nexport default class LongTextChange {\n public changeset;\n\n public changeId: string;\n\n constructor(changeset, changeId?: string) {\n this.changeset = changeset;\n this.changeId = changeId ?? 'uncommitted';\n }\n\n public static fromString(change: string): LongTextChange {\n return new LongTextChange(Changeset.unpack(change));\n }\n\n public static fromDiff(a: string, b: string): LongTextChange {\n return new LongTextChange(Changeset.fromDiff(diffEngine.diff_main(a, b)));\n }\n\n public apply(value: string): string {\n return this.changeset.apply(value);\n }\n\n public toString(): string {\n return typeof this.changeset === 'string'\n ? this.changeset\n : this.changeset.pack();\n }\n\n public transformAgainst(change: LongTextChange | null, side?) : LongTextChange {\n if (!change) {\n return this;\n }\n\n return new LongTextChange(this.changeset.transformAgainst(change.changeset, side));\n }\n\n public merge(otherChange: LongTextChange) : LongTextChange {\n return new LongTextChange(this.changeset.merge(otherChange.changeset));\n }\n\n public toJSON() {\n return {\n changeset: this.toString(),\n changeId: this.changeId,\n };\n }\n}\n","// eslint-disable-next-line import/no-cycle\nimport LinkedRecords from '../../browser_sdk';\n\nexport default class Fact {\n linkedRecords: LinkedRecords;\n\n subject: string;\n\n predicate: string;\n\n object: string;\n\n constructor(linkedRecords: LinkedRecords, subject: string, predicate: string, object: string) {\n this.linkedRecords = linkedRecords;\n this.subject = subject;\n this.predicate = predicate;\n this.object = object;\n }\n\n toJSON() {\n return {\n subject: this.subject,\n predicate: this.predicate,\n object: this.object,\n };\n }\n\n async save() {\n await this.linkedRecords.fetch('/facts', {\n method: 'POST',\n body: JSON.stringify({\n subject: this.subject,\n predicate: this.predicate,\n object: this.object,\n }),\n });\n }\n}\n","/* eslint-disable max-len */\n/* eslint-disable import/no-cycle */\nimport LinkedRecords from '.';\nimport AbstractAttributeClient from '../attributes/abstract/abstract_attribute_client';\nimport IsSerializable from '../attributes/abstract/is_serializable';\nimport LongTextAttribute from '../attributes/long_text/client';\nimport KeyValueAttribute from '../attributes/key_value/client';\nimport BlobAttribute from '../attributes/blob/client';\nimport { CompoundAttributeQuery, FactQueryWithOptionalSubjectPlaceholder } from '../attributes/attribute_query';\nimport ClientServerBus from '../../lib/client-server-bus/client';\n\ntype ArrayContains<T, U> = T extends Array<infer E>\n ? Extract<E, U> extends never\n ? T & Array<U>\n : T\n : never;\n\ntype ConcreteTypedArray<X> =\n X extends ArrayContains<X, [string, string, typeof KeyValueAttribute] | [string, typeof KeyValueAttribute]> ? Array<KeyValueAttribute> :\n X extends ArrayContains<X, [string, string, typeof LongTextAttribute] | [string, typeof LongTextAttribute]> ? Array<LongTextAttribute> :\n X extends ArrayContains<X, [string, string, typeof BlobAttribute] | [string, typeof BlobAttribute]> ? Array<BlobAttribute> :\n Array<AbstractAttributeClient<any, any>>;\n\ntype TransformQueryRecord<X>\n = X extends Array<FactQueryWithOptionalSubjectPlaceholder> ? ConcreteTypedArray<X> : AbstractAttributeClient<any, any>;\n\ntype TransformCompositionCreationResult<X extends { type?: typeof AbstractAttributeClient<any, IsSerializable> | string }> =\n X['type'] extends typeof KeyValueAttribute ? KeyValueAttribute :\n X['type'] extends typeof LongTextAttribute ? LongTextAttribute :\n X['type'] extends typeof BlobAttribute ? BlobAttribute :\n X['type'] extends string ? AbstractAttributeClient<any, IsSerializable> :\n KeyValueAttribute;\n\ntype QueryResult<T> = { [K in keyof T]: TransformQueryRecord<T[K]> };\n\nexport type CompositionCreationRequest = {\n [k: string]: {\n type?: typeof AbstractAttributeClient<any, IsSerializable> | string,\n facts?: [string, string, string?][] | undefined,\n value?: any,\n }\n};\n\nconst stringify = (query) => JSON.stringify(query, (_, v) => {\n if (v === KeyValueAttribute) {\n return 'KeyValueAttribute';\n }\n\n if (v === LongTextAttribute) {\n return 'LongTextAttribute';\n }\n\n if (v === BlobAttribute) {\n return 'BlobAttribute';\n }\n\n return v;\n});\n\nconst byId = (a, b) => {\n if (a.id < b.id) return -1;\n if (a.id > b.id) return 1;\n return 0;\n};\n\nexport default class AttributesRepository {\n private linkedRecords: LinkedRecords;\n\n private getClientServerBus: () => Promise<ClientServerBus>;\n\n private attributeCache: Record<string, AbstractAttributeClient<any, any>>;\n\n static attributeTypes = [\n LongTextAttribute,\n KeyValueAttribute,\n BlobAttribute,\n ];\n\n constructor(linkedRecords: LinkedRecords, getClientServerBus: () => Promise<ClientServerBus>) {\n this.linkedRecords = linkedRecords;\n this.getClientServerBus = getClientServerBus;\n this.attributeCache = {};\n }\n\n // TODO: we should cache this\n private async idToAttribute(id, ignoreCache: boolean = false, serverState?): Promise<AbstractAttributeClient<any, any> | undefined> {\n const [attributeTypePrefix] = id.split('-');\n const AttributeClass = AttributesRepository\n .attributeTypes\n .find((c) => c.getDataTypePrefix() === attributeTypePrefix);\n\n if (!AttributeClass) {\n return undefined;\n }\n\n if (this.attributeCache[id] && !ignoreCache) {\n return this.attributeCache[id];\n }\n\n const attr = new AttributeClass(this.linkedRecords, await this.getClientServerBus(), id);\n\n if (serverState) {\n await attr.load(serverState);\n }\n\n this.attributeCache[id] = attr;\n\n return attr;\n }\n\n async createKeyValue(\n value?: object,\n facts?: [ string, string, string?][],\n ): Promise<KeyValueAttribute> {\n const attr = await this.create('keyValue', value || {}, facts);\n return attr as KeyValueAttribute;\n }\n\n async createLongText(\n value?: string,\n facts?: [ string, string, string? ][],\n ): Promise<LongTextAttribute> {\n const attr = await this.create('longText', value || '', facts);\n return attr as LongTextAttribute;\n }\n\n async createBlob(\n value?: Blob,\n facts?: [ string, string, string? ][],\n ): Promise<BlobAttribute> {\n const attr = await this.create('blob', value || '', facts);\n return attr as BlobAttribute;\n }\n\n async create(attributeType: string, value: any, facts?: [ string, string, string? ][])\n :Promise<AbstractAttributeClient<any, IsSerializable>> {\n const AttributeClass = AttributesRepository\n .attributeTypes\n .find((c) => c.getDataTypeName() === attributeType);\n\n if (!AttributeClass) {\n throw new Error(`Attribute Type ${attributeType} is unknown`);\n }\n\n const attribute: AbstractAttributeClient<any, IsSerializable> = new AttributeClass(\n this.linkedRecords,\n await this.getClientServerBus(),\n );\n\n await attribute.create(value, facts);\n\n return attribute;\n }\n\n async createAll<CCR extends CompositionCreationRequest>(attr: CCR)\n : Promise<{\n [K in keyof CCR]: TransformCompositionCreationResult<CCR[K]>\n }> {\n const url = `/attribute-compositions?clientId=${this.linkedRecords.clientId}`;\n\n const rawResult = await this.linkedRecords.fetch(url, {\n method: 'POST',\n body: stringify(attr),\n });\n\n if (!rawResult) {\n throw new Error('error creating attribute composition');\n }\n\n const resultBody = await rawResult.json();\n\n const result: { [key: string]: AbstractAttributeClient<any, any> } = {};\n\n await Promise.all(Object.entries(resultBody).map(async ([attrName, config]: [string, any]) => {\n if (config.id) {\n const tmpResult = await this.idToAttribute(config.id!, false, config);\n\n if (!tmpResult) {\n throw new Error(`Error transforming id to attribute: ${config.id}`);\n }\n\n result[attrName] = tmpResult;\n }\n }));\n\n // @ts-ignore I don't know how to make him happy here.\n return result;\n }\n\n async find(attributeId: string, ignoreCache: boolean = false)\n :Promise<AbstractAttributeClient<any, IsSerializable> | undefined> {\n const attribute = await this.idToAttribute(attributeId, ignoreCache);\n\n if (!attribute) {\n throw new Error(`Attribute ID ${attributeId} is unknown`);\n }\n\n const isOk = await attribute.get();\n\n if (!isOk) {\n return undefined;\n }\n\n return attribute;\n }\n\n // TODO: check for null values in the query\n async findAll<T extends CompoundAttributeQuery>(\n query: T,\n ignoreCache: boolean = false,\n ): Promise<QueryResult<T>> {\n const params = new URLSearchParams();\n\n params.append('query', stringify(query));\n\n const result = await this.linkedRecords.fetch(`/attributes?${params.toString()}`);\n const records = await result.json();\n\n const attributeResult = {} as any;\n\n await Promise.all(Object.keys(records).map(async (key) => {\n if (Array.isArray(records[key])) {\n attributeResult[key] = (await Promise.all(records[key].map((attr) => this.idToAttribute(attr.id, ignoreCache, attr)))).sort(byId);\n } else if (records[key]) {\n attributeResult[key] = await this.idToAttribute(records[key].id, ignoreCache, records[key]);\n } else {\n attributeResult[key] = null;\n }\n }));\n\n return attributeResult;\n }\n\n async findAndLoadAll<T extends CompoundAttributeQuery>(query: T): Promise<QueryResult<T>> {\n const result = await this.findAll(query);\n const promises: Promise<boolean>[] = [];\n\n Object.keys(result).forEach((compoundName) => {\n if (result[compoundName]) {\n if (Array.isArray(result[compoundName])) {\n (result[compoundName] as Array<AbstractAttributeClient<any, any>>).forEach((attr) => {\n promises.push(attr.load());\n });\n } else {\n promises.push((result[compoundName] as AbstractAttributeClient<any, any>).load());\n }\n }\n });\n\n await Promise.all(promises);\n\n return result;\n }\n\n async subscribeToQuery<T extends CompoundAttributeQuery>(query: T, onChange: (result: QueryResult<T>) => void): Promise<() => void> {\n if (!this.linkedRecords.actorId) {\n throw new Error('Not ready to subscribe to queries yet: this.linkedRecords.actorId is not initialized');\n }\n\n const bus = await this.getClientServerBus();\n const url = new URL('query-sub', this.linkedRecords.serverURL).toString();\n const channel = `query-sub:${this.linkedRecords.actorId}:${stringify(query)}`;\n\n const onPossibleChange = () => {\n this.findAndLoadAll(query).then(onChange);\n };\n\n const subscription = await bus.subscribe(url, channel, undefined, onPossibleChange);\n\n onPossibleChange();\n\n return () => {\n bus.unsubscribe(subscription);\n };\n }\n\n clearCache() {\n this.attributeCache = {};\n }\n}\n","/* eslint-disable import/no-cycle */\n\nimport LinkedRecords from '.';\nimport Fact from '../facts/client';\nimport { FactQuery } from '../facts/fact_query';\n\nexport default class FactsRepository {\n linkedRecords: LinkedRecords;\n\n constructor(linkedRecords: LinkedRecords) {\n this.linkedRecords = linkedRecords;\n }\n\n async createAll(facts: [ string?, string?, string? ][]):\n Promise<Fact[]> {\n const response = await this.linkedRecords.fetch('/facts', {\n method: 'POST',\n body: JSON.stringify(facts),\n });\n\n if (!response) {\n return [];\n }\n\n const createdRawFacts = await response.json();\n\n return createdRawFacts.map((rawFact) => new Fact(\n this.linkedRecords,\n rawFact.subject,\n rawFact.predicate,\n rawFact.object,\n ));\n }\n\n async findAll(query: FactQuery | FactQuery[]): Promise<Fact[]> {\n if (Array.isArray(query)) {\n const result = await Promise.all(query.map((fq) => this.findAll(fq)));\n return result.flat();\n }\n\n const { subject, predicate, object } = query;\n\n const params = new URLSearchParams();\n\n if (subject) {\n params.append('subject', JSON.stringify(subject));\n }\n\n if (predicate) {\n params.append('predicate', JSON.stringify(predicate));\n }\n\n if (object) {\n params.append('object', JSON.stringify(object));\n }\n\n const response = await this.linkedRecords.fetch(`/facts?${params.toString()}`);\n const responseJson = await response.json();\n\n return responseJson.map((record) => new Fact(\n this.linkedRecords,\n record.subject,\n record.predicate,\n record.object,\n ));\n }\n\n async deleteAll(facts: [ string, string, string ][]): Promise<void> {\n await this.linkedRecords.fetch('/facts/delete', {\n method: 'POST',\n body: JSON.stringify(facts),\n });\n }\n}\n","/* eslint-disable class-methods-use-this */\n/* eslint-disable import/no-cycle */\n\nimport { uuidv7 as uuid } from 'uuidv7';\n\nimport LongTextAttribute from '../attributes/long_text/client';\nimport KeyValueAttribute from '../attributes/key_value/client';\nimport KeyValueChange from '../attributes/key_value/key_value_change';\nimport LongTextChange from '../attributes/long_text/long_text_change';\nimport ClientServerBus from '../../lib/client-server-bus/client';\nimport FactsRepository from './facts_repository';\nimport AttributesRepository from './attributes_repository';\nimport { QuotaAsJSON } from '../server/quota';\nimport { OIDCManager, OIDCConfig } from './oidc';\n\ntype FetchOptions = {\n headers?: object | undefined,\n method?: string,\n body?: any,\n isJSON?: boolean,\n doNotHandleExpiredSessions?: boolean,\n skipWaitForUserId?: boolean,\n};\n\nexport {\n LongTextAttribute,\n KeyValueAttribute,\n KeyValueChange,\n LongTextChange,\n};\n\nconst publicClients: Record<string, LinkedRecords> = {};\n\nexport default class LinkedRecords {\n static fetchUserInfoPromise;\n\n KeyValueChange: typeof KeyValueChange = KeyValueChange;\n\n private clientServerBus: ClientServerBus;\n\n serverURL: URL;\n\n loginHandler?: () => void;\n\n connectionLostHandler?: (err?) => void;\n\n unknownServerErrorHandler?: (response) => void;\n\n quotaViolationErrorHandler?: (response) => void;\n\n authorizationErrorHandler?: (response?) => void;\n\n attributeClientIdSuffix: number = 0;\n\n clientId: string;\n\n actorId: string | undefined;\n\n Attribute: AttributesRepository;\n\n Fact: FactsRepository;\n\n private oidcManager?: OIDCManager;\n\n private qetQuotaPromise: Record<string, Promise<any | undefined>> = {};\n\n static getPublicClient(url: string): LinkedRecords {\n const normalizedUrl = new URL(url).toString().replace(/\\/$/, '');\n const cached = publicClients[normalizedUrl];\n if (cached !== undefined) {\n return cached;\n }\n\n const oidcConfig = {\n redirect_uri: `${window.location.origin}/callback`,\n };\n\n const linkedRecords: LinkedRecords = new LinkedRecords(new URL(url), oidcConfig);\n\n linkedRecords.setConnectionLostHandler((error: any) => {\n console.error('linkedRecords connection lost error:', error);\n });\n\n linkedRecords.setUnknownServerErrorHandler(() => {\n console.error('server error');\n });\n\n linkedRecords.setLoginHandler(() => {\n const needsVerification = window.location.search.includes('email-not-verified');\n\n if (needsVerification) {\n console.log('the user must verify its email address.');\n } else {\n linkedRecords.login();\n }\n\n console.log('login required, set a login handler which prompts the user to login via linkedRecords.setLoginHandler');\n });\n\n publicClients[normalizedUrl] = linkedRecords;\n return linkedRecords;\n }\n\n constructor(\n serverURL: URL,\n oidcConfig?: OIDCConfig,\n autoHandleRedirect = true,\n deferUserInfoFetching = false,\n ) {\n this.serverURL = serverURL;\n\n if (oidcConfig) {\n this.oidcManager = new OIDCManager(oidcConfig, serverURL);\n }\n\n this.clientServerBus = new ClientServerBus(() => this.getAccessToken());\n\n this.clientServerBus.subscribeConnectionInterrupted(() => {\n if (this.connectionLostHandler) {\n this.connectionLostHandler();\n }\n });\n\n this.Attribute = new AttributesRepository(this, () => this.getClientServerBus());\n this.clientId = uuid();\n this.Fact = new FactsRepository(this);\n\n if (!deferUserInfoFetching) {\n this.ensureUserIdIsKnown();\n }\n\n if (this.oidcManager) {\n if (\n autoHandleRedirect\n && typeof window !== 'undefined'\n && window.location\n && window.location.search\n ) {\n const params = new URLSearchParams(window.location.search);\n if (params.has('code') && params.has('state')) {\n this.oidcManager\n .handleRedirectCallback()\n .then(() => {\n // Clean up the URL after handling the callback\n // Remove OIDC parameters from the URL\n // for a cleaner user experience\n window.history.replaceState(\n {},\n document.title,\n window.location.pathname,\n );\n });\n }\n }\n }\n }\n\n public getAttributeClientId(): string {\n this.attributeClientIdSuffix += 1;\n return `${this.clientId}-${this.attributeClientIdSuffix}`;\n }\n\n public async getClientServerBus(): Promise<ClientServerBus> {\n return this.clientServerBus;\n }\n\n public async getUserIdByEmail(email: string): Promise<string | undefined> {\n const resp = await this.fetch(`/userinfo?email=${encodeURIComponent(email)}`);\n const parsed = await resp.json();\n return parsed.id;\n }\n\n public async isAuthorizedToSeeMemberOf(nodeId: string):Promise<boolean> {\n const response = await this.fetch(`/attributes/${nodeId}/members?clientId=${this.clientId}`, { doNotHandleExpiredSessions: true });\n return !!response;\n }\n\n public async getMembersOf(nodeId: string): Promise<{ id: string, username: string }[]> {\n const response = await this.fetch(`/attributes/${nodeId}/members?clientId=${this.clientId}`);\n\n if (!response) {\n // TODO: remove this check once the this.fetch throws an exception\n throw new Error(`Unauthorized member query for ${nodeId}`);\n }\n\n const data = await response.json();\n\n if (data.notVisibleToUser) {\n throw new Error(`Unauthorized member query for ${nodeId}`);\n }\n\n return data;\n }\n\n public async getQuota(nodeId?: string): Promise<QuotaAsJSON> {\n if (this.qetQuotaPromise[nodeId || '']) {\n return this.qetQuotaPromise[nodeId || ''];\n }\n\n this.qetQuotaPromise[nodeId || ''] = this.ensureUserIdIsKnown()\n .then((uId) => this.fetch(`/quota/${nodeId || uId}`))\n .then((r) => r.json());\n\n const result = await this.qetQuotaPromise[nodeId || ''];\n delete this.qetQuotaPromise[nodeId || ''];\n\n return result;\n }\n\n public async fetch(url: string, fetchOpt?: FetchOptions) {\n const isOnRedirectUriRoute = await this.oidcManager?.isOnRedirectUriRoute();\n\n const {\n headers = undefined,\n method = 'GET',\n body = undefined,\n isJSON = true,\n doNotHandleExpiredSessions = false,\n skipWaitForUserId = false,\n } = fetchOpt || {};\n\n if (isOnRedirectUriRoute) {\n // We are on the OIDC redirect URI: delay requests briefly to avoid\n // triggering the login flow again while the session is being established.\n await new Promise((resolve) => { setTimeout(resolve, 2000); });\n }\n\n if (!skipWaitForUserId) {\n await this.ensureUserIdIsKnown();\n }\n\n const absoluteUrl = (new URL(url, this.serverURL)).toString();\n const options: any = {\n method,\n credentials: 'include',\n };\n\n const mergedHeaders: Record<string, string> = headers\n ? { ...(headers as Record<string, string>) }\n : {};\n\n // If OIDC is enabled and access token is available, use Bearer token\n if (this.oidcManager) {\n const accessToken = await this.oidcManager.getAccessToken();\n\n // FIXME: if we do not hav a token but still are in public client mode,\n // the userInfo request will fail because of CORS which tries to send\n // cookies to the domain\n if (accessToken) {\n mergedHeaders['Authorization'] = `Bearer ${accessToken}`;\n // For cross-origin, do not send cookies if using Bearer\n options.credentials = 'same-origin';\n }\n }\n\n if (body) {\n options.body = body;\n }\n\n if (Object.keys(mergedHeaders).length > 0) {\n options.headers = mergedHeaders;\n }\n\n if (isJSON) {\n if (!options.headers) {\n options.headers = {};\n }\n options.headers.Accept = 'application/json';\n options.headers['Content-Type'] = 'application/json';\n }\n\n const response = await this.withConnectionLostHandler(() => fetch(absoluteUrl, options));\n\n if (response.status === 401) {\n console.error(`Authentication Error when calling ${method} ${url} ${await response.text()}`);\n\n if (!doNotHandleExpiredSessions) {\n this.handleExpiredLoginSession();\n }\n\n return false;\n }\n\n if (response.status === 403) {\n const clonedResponse = response.clone();\n const responseText = await clonedResponse.text();\n\n if (responseText.startsWith('Not enough storage space')) {\n this.handleQuotaViolationError(response);\n } else {\n this.handleAuthorizationError(response);\n }\n\n return false;\n }\n\n if (!response.ok) {\n this.handleUnknownServerError(response);\n return false;\n }\n\n return response;\n }\n\n public async withConnectionLostHandler(fn: () => Promise<any>) {\n try {\n return await fn();\n } catch (ex: any) {\n if (ex.message === 'Failed to fetch') {\n this.handleConnectionError(ex);\n }\n\n return false;\n }\n }\n\n public setConnectionLostHandler(handler: (err?) => void) {\n this.connectionLostHandler = handler;\n }\n\n public handleConnectionError(error) {\n if (this.connectionLostHandler) {\n this.connectionLostHandler(error);\n } else {\n console.log('Connection Lost', error);\n }\n }\n\n public setLoginHandler(handler: () => void) {\n this.loginHandler = handler;\n }\n\n public handleExpiredLoginSession() {\n if (this.loginHandler) {\n this.loginHandler();\n }\n }\n\n public setUnknownServerErrorHandler(handler: (response) => void) {\n this.unknownServerErrorHandler = handler;\n }\n\n public handleUnknownServerError(response) {\n if (this.unknownServerErrorHandler) {\n this.unknownServerErrorHandler(response);\n } else {\n console.log('UnknownServerError', response);\n }\n }\n\n public setQuotaViolationErrorHandler(handler: (response) => void) {\n this.quotaViolationErrorHandler = handler;\n }\n\n public handleQuotaViolationError(response) {\n if (this.quotaViolationErrorHandler) {\n this.quotaViolationErrorHandler(response);\n } else {\n this.handleUnknownServerError(response);\n }\n }\n\n public setAuthorizationErrorHandler(handler: (response) => void) {\n this.authorizationErrorHandler = handler;\n }\n\n public handleAuthorizationError(response?) {\n if (this.authorizationErrorHandler) {\n this.authorizationErrorHandler(response);\n } else {\n throw new Error('User is not allowed to perform operation');\n }\n }\n\n async fetchUserInfo(): Promise<Record<string, string> | undefined> {\n if (!LinkedRecords.fetchUserInfoPromise) {\n LinkedRecords.fetchUserInfoPromise = this.fetch('/userinfo', { skipWaitForUserId: true })\n .then(async (response) => {\n if (!response || response.status === 401) {\n this.handleExpiredLoginSession();\n return undefined;\n }\n\n const responseBody = await response.json();\n return responseBody;\n });\n }\n\n try {\n const ui = await LinkedRecords.fetchUserInfoPromise;\n return ui;\n } finally {\n // we only cached this so we have one request in flight at the same time\n // once the request is done we delete it so next time this method is called\n // we fetch up to date information\n LinkedRecords.fetchUserInfoPromise = undefined;\n }\n }\n\n async ensureUserIdIsKnown(): Promise<string | undefined> {\n if (this.actorId && typeof this.actorId === 'string') {\n return this.actorId;\n }\n\n const userInfo = await this.fetchUserInfo();\n\n if (!userInfo) {\n return undefined;\n }\n\n this.actorId = userInfo['userId'];\n\n return this.actorId;\n }\n\n public async getCurrentUserEmail(): Promise<string> {\n const userInfo = await this.fetchUserInfo();\n\n if (!userInfo || !userInfo['userEmail']) {\n throw new Error('Error fetching user info');\n }\n\n return userInfo['userEmail'];\n }\n\n // OIDC Auth methods for public client mode\n public async login() {\n if (!this.oidcManager) throw new Error('OIDC not configured');\n await this.oidcManager.login();\n }\n\n public async handleRedirectCallback() {\n if (!this.oidcManager) throw new Error('OIDC not configured');\n return this.oidcManager.handleRedirectCallback();\n }\n\n public async logout() {\n if (!this.oidcManager) throw new Error('OIDC not configured');\n await this.oidcManager.logout();\n }\n\n public async isAuthenticated() {\n if (!this.oidcManager) return false;\n return this.oidcManager.isAuthenticated();\n }\n\n public async getUser() {\n if (!this.oidcManager) return null;\n return this.oidcManager.getUser();\n }\n\n public async getAccessToken() {\n if (!this.oidcManager) return null;\n return this.oidcManager.getAccessToken();\n }\n}\n","import {\n UserManager,\n WebStorageStateStore,\n User,\n UserManagerSettings,\n} from 'oidc-client-ts';\n\nexport interface OIDCConfig {\n client_id?: string;\n redirect_uri: string;\n authority?: string; // discovered from server if not provided\n post_logout_redirect_uri?: string;\n scope?: string;\n response_type?: string;\n silent_redirect_uri?: string;\n automaticSilentRenew?: boolean;\n useSessionStorage?: boolean; // use sessionStorage instead of localStorage (useful for tests)\n}\n\nexport class OIDCManager {\n private userManager!: UserManager;\n\n private user: User | null = null;\n\n private ready: Promise<void>;\n\n private redirectOriginPath?: string;\n\n constructor(config: OIDCConfig, serverURL: URL) {\n const {\n redirect_uri: redirectUri,\n } = config;\n\n this.ready = this.initialize(config, serverURL);\n\n try {\n const ru = new URL(redirectUri);\n this.redirectOriginPath = `${ru.origin}${ru.pathname}`;\n } catch (_) {\n throw new Error(`Invalid redirect URI ${redirectUri}`);\n }\n }\n\n private async initialize(config: OIDCConfig, serverURL: URL): Promise<void> {\n const {\n authority: providedAuthority,\n client_id: clientId,\n redirect_uri: redirectUri,\n post_logout_redirect_uri: postLogoutRedirectUri,\n scope,\n response_type: responseType,\n silent_redirect_uri: silentRedirectUri,\n automaticSilentRenew,\n useSessionStorage,\n } = config;\n\n let authority = providedAuthority;\n let clientIdToUse = clientId;\n\n if (!authority) {\n const base = serverURL.toString().replace(/\\/$/, '');\n const resp = await fetch(`${base}/oidc/discovery`);\n if (!resp.ok) {\n throw new Error(`Failed to discover OIDC authority: ${resp.status} ${resp.statusText}`);\n }\n const data = await resp.json();\n authority = (data && typeof data.authority === 'string') ? data.authority : undefined;\n if (!authority) {\n throw new Error('OIDC discovery did not return an authority');\n }\n\n if (!clientIdToUse) {\n clientIdToUse = data.client_id;\n }\n }\n\n if (!clientIdToUse) {\n throw new Error('OIDC discovery did not return an clientId, you need to provide one when initializing LinkedRecords');\n }\n\n const settings: UserManagerSettings = {\n authority,\n client_id: clientIdToUse,\n redirect_uri: redirectUri,\n post_logout_redirect_uri: postLogoutRedirectUri,\n scope: scope || 'openid profile email',\n response_type: responseType || 'code',\n userStore: new WebStorageStateStore({\n store: useSessionStorage ? window.sessionStorage : window.localStorage,\n }),\n silent_redirect_uri: silentRedirectUri,\n automaticSilentRenew: automaticSilentRenew ?? true,\n extraQueryParams: {\n audience: serverURL.host,\n },\n };\n\n this.userManager = new UserManager(settings);\n }\n\n async login(): Promise<void> {\n await this.ready;\n if (await this.isOnRedirectUriRoute()) {\n return;\n }\n\n await this.userManager.removeUser();\n const returnTo = window.location.pathname + window.location.search + window.location.hash;\n window.sessionStorage.setItem('lr_return_to', returnTo);\n\n await this.userManager.signinRedirect();\n }\n\n async handleRedirectCallback(): Promise<User> {\n await this.ready;\n this.user = await this.userManager.signinRedirectCallback();\n\n const returnTo = window.sessionStorage.getItem('lr_return_to');\n window.sessionStorage.removeItem('lr_return_to');\n\n if (returnTo && typeof returnTo === 'string') {\n window.location.href = returnTo;\n }\n\n return this.user;\n }\n\n async logout(): Promise<void> {\n await this.ready;\n await this.userManager.removeUser();\n await this.userManager.signoutRedirect();\n }\n\n async getUser(): Promise<User | null> {\n await this.ready;\n if (!this.user) {\n this.user = await this.userManager.getUser();\n }\n return this.user;\n }\n\n async isAuthenticated(): Promise<boolean> {\n const user = await this.getUser();\n return !!user && !user.expired;\n }\n\n async getAccessToken(): Promise<string | null> {\n const user = await this.getUser();\n return user && !user.expired ? user.access_token : null;\n }\n\n async signinSilent(): Promise<User | null> {\n await this.ready;\n this.user = await this.userManager.signinSilent();\n return this.user;\n }\n\n async isOnRedirectUriRoute(): Promise<boolean> {\n const currentOriginPath = `${window.location.origin}${window.location.pathname}`;\n return currentOriginPath === this.redirectOriginPath;\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hasCORS = void 0;\n// imported from https://github.com/component/has-cors\nlet value = false;\ntry {\n value = typeof XMLHttpRequest !== 'undefined' &&\n 'withCredentials' in new XMLHttpRequest();\n}\ncatch (err) {\n // if XMLHttp support is disabled in IE then it will throw\n // when trying to create\n}\nexports.hasCORS = value;\n","\"use strict\";\n// imported from https://github.com/galkn/querystring\n/**\n * Compiles a querystring\n * Returns string representation of the object\n *\n * @param {Object}\n * @api private\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.encode = encode;\nexports.decode = decode;\nfunction encode(obj) {\n let str = '';\n for (let i in obj) {\n if (obj.hasOwnProperty(i)) {\n if (str.length)\n str += '&';\n str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n }\n }\n return str;\n}\n/**\n * Parses a simple querystring into an object\n *\n * @param {String} qs\n * @api private\n */\nfunction decode(qs) {\n let qry = {};\n let pairs = qs.split('&');\n for (let i = 0, l = pairs.length; i < l; i++) {\n let pair = pairs[i].split('=');\n qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n return qry;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parse = parse;\n// imported from https://github.com/galkn/parseuri\n/**\n * Parses a URI\n *\n * Note: we could also have used the built-in URL object, but it isn't supported on all platforms.\n *\n * See:\n * - https://developer.mozilla.org/en-US/docs/Web/API/URL\n * - https://caniuse.com/url\n * - https://www.rfc-editor.org/rfc/rfc3986#appendix-B\n *\n * History of the parse() method:\n * - first commit: https://github.com/socketio/socket.io-client/commit/4ee1d5d94b3906a9c052b459f1a818b15f38f91c\n * - export into its own module: https://github.com/socketio/engine.io-client/commit/de2c561e4564efeb78f1bdb1ba39ef81b2822cb3\n * - reimport: https://github.com/socketio/engine.io-client/commit/df32277c3f6d622eec5ed09f493cae3f3391d242\n *\n * @author Steven Levithan <stevenlevithan.com> (MIT license)\n * @api private\n */\nconst re = /^(?:(?![^:@\\/?#]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@\\/?#]*)(?::([^:@\\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\nconst parts = [\n 'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n];\nfunction parse(str) {\n if (str.length > 8000) {\n throw \"URI too long\";\n }\n const src = str, b = str.indexOf('['), e = str.indexOf(']');\n if (b != -1 && e != -1) {\n str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n }\n let m = re.exec(str || ''), uri = {}, i = 14;\n while (i--) {\n uri[parts[i]] = m[i] || '';\n }\n if (b != -1 && e != -1) {\n uri.source = src;\n uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n uri.ipv6uri = true;\n }\n uri.pathNames = pathNames(uri, uri['path']);\n uri.queryKey = queryKey(uri, uri['query']);\n return uri;\n}\nfunction pathNames(obj, path) {\n const regx = /\\/{2,9}/g, names = path.replace(regx, \"/\").split(\"/\");\n if (path.slice(0, 1) == '/' || path.length === 0) {\n names.splice(0, 1);\n }\n if (path.slice(-1) == '/') {\n names.splice(names.length - 1, 1);\n }\n return names;\n}\nfunction queryKey(uri, query) {\n const data = {};\n query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n if ($1) {\n data[$1] = $2;\n }\n });\n return data;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.defaultBinaryType = exports.globalThisShim = exports.nextTick = void 0;\nexports.createCookieJar = createCookieJar;\nexports.nextTick = (() => {\n const isPromiseAvailable = typeof Promise === \"function\" && typeof Promise.resolve === \"function\";\n if (isPromiseAvailable) {\n return (cb) => Promise.resolve().then(cb);\n }\n else {\n return (cb, setTimeoutFn) => setTimeoutFn(cb, 0);\n }\n})();\nexports.globalThisShim = (() => {\n if (typeof self !== \"undefined\") {\n return self;\n }\n else if (typeof window !== \"undefined\") {\n return window;\n }\n else {\n return Function(\"return this\")();\n }\n})();\nexports.defaultBinaryType = \"arraybuffer\";\nfunction createCookieJar() { }\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WebTransport = exports.WebSocket = exports.NodeWebSocket = exports.XHR = exports.NodeXHR = exports.Fetch = exports.nextTick = exports.parse = exports.installTimerFunctions = exports.transports = exports.TransportError = exports.Transport = exports.protocol = exports.SocketWithUpgrade = exports.SocketWithoutUpgrade = exports.Socket = void 0;\nconst socket_js_1 = require(\"./socket.js\");\nObject.defineProperty(exports, \"Socket\", { enumerable: true, get: function () { return socket_js_1.Socket; } });\nvar socket_js_2 = require(\"./socket.js\");\nObject.defineProperty(exports, \"SocketWithoutUpgrade\", { enumerable: true, get: function () { return socket_js_2.SocketWithoutUpgrade; } });\nObject.defineProperty(exports, \"SocketWithUpgrade\", { enumerable: true, get: function () { return socket_js_2.SocketWithUpgrade; } });\nexports.protocol = socket_js_1.Socket.protocol;\nvar transport_js_1 = require(\"./transport.js\");\nObject.defineProperty(exports, \"Transport\", { enumerable: true, get: function () { return transport_js_1.Transport; } });\nObject.defineProperty(exports, \"TransportError\", { enumerable: true, get: function () { return transport_js_1.TransportError; } });\nvar index_js_1 = require(\"./transports/index.js\");\nObject.defineProperty(exports, \"transports\", { enumerable: true, get: function () { return index_js_1.transports; } });\nvar util_js_1 = require(\"./util.js\");\nObject.defineProperty(exports, \"installTimerFunctions\", { enumerable: true, get: function () { return util_js_1.installTimerFunctions; } });\nvar parseuri_js_1 = require(\"./contrib/parseuri.js\");\nObject.defineProperty(exports, \"parse\", { enumerable: true, get: function () { return parseuri_js_1.parse; } });\nvar globals_node_js_1 = require(\"./globals.node.js\");\nObject.defineProperty(exports, \"nextTick\", { enumerable: true, get: function () { return globals_node_js_1.nextTick; } });\nvar polling_fetch_js_1 = require(\"./transports/polling-fetch.js\");\nObject.defineProperty(exports, \"Fetch\", { enumerable: true, get: function () { return polling_fetch_js_1.Fetch; } });\nvar polling_xhr_node_js_1 = require(\"./transports/polling-xhr.node.js\");\nObject.defineProperty(exports, \"NodeXHR\", { enumerable: true, get: function () { return polling_xhr_node_js_1.XHR; } });\nvar polling_xhr_js_1 = require(\"./transports/polling-xhr.js\");\nObject.defineProperty(exports, \"XHR\", { enumerable: true, get: function () { return polling_xhr_js_1.XHR; } });\nvar websocket_node_js_1 = require(\"./transports/websocket.node.js\");\nObject.defineProperty(exports, \"NodeWebSocket\", { enumerable: true, get: function () { return websocket_node_js_1.WS; } });\nvar websocket_js_1 = require(\"./transports/websocket.js\");\nObject.defineProperty(exports, \"WebSocket\", { enumerable: true, get: function () { return websocket_js_1.WS; } });\nvar webtransport_js_1 = require(\"./transports/webtransport.js\");\nObject.defineProperty(exports, \"WebTransport\", { enumerable: true, get: function () { return webtransport_js_1.WT; } });\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Socket = exports.SocketWithUpgrade = exports.SocketWithoutUpgrade = void 0;\nconst index_js_1 = require(\"./transports/index.js\");\nconst util_js_1 = require(\"./util.js\");\nconst parseqs_js_1 = require(\"./contrib/parseqs.js\");\nconst parseuri_js_1 = require(\"./contrib/parseuri.js\");\nconst component_emitter_1 = require(\"@socket.io/component-emitter\");\nconst engine_io_parser_1 = require(\"engine.io-parser\");\nconst globals_node_js_1 = require(\"./globals.node.js\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"engine.io-client:socket\"); // debug()\nconst withEventListeners = typeof addEventListener === \"function\" &&\n typeof removeEventListener === \"function\";\nconst OFFLINE_EVENT_LISTENERS = [];\nif (withEventListeners) {\n // within a ServiceWorker, any event handler for the 'offline' event must be added on the initial evaluation of the\n // script, so we create one single event listener here which will forward the event to the socket instances\n addEventListener(\"offline\", () => {\n debug(\"closing %d connection(s) because the network was lost\", OFFLINE_EVENT_LISTENERS.length);\n OFFLINE_EVENT_LISTENERS.forEach((listener) => listener());\n }, false);\n}\n/**\n * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established\n * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport.\n *\n * This class comes without upgrade mechanism, which means that it will keep the first low-level transport that\n * successfully establishes the connection.\n *\n * In order to allow tree-shaking, there are no transports included, that's why the `transports` option is mandatory.\n *\n * @example\n * import { SocketWithoutUpgrade, WebSocket } from \"engine.io-client\";\n *\n * const socket = new SocketWithoutUpgrade({\n * transports: [WebSocket]\n * });\n *\n * socket.on(\"open\", () => {\n * socket.send(\"hello\");\n * });\n *\n * @see SocketWithUpgrade\n * @see Socket\n */\nclass SocketWithoutUpgrade extends component_emitter_1.Emitter {\n /**\n * Socket constructor.\n *\n * @param {String|Object} uri - uri or options\n * @param {Object} opts - options\n */\n constructor(uri, opts) {\n super();\n this.binaryType = globals_node_js_1.defaultBinaryType;\n this.writeBuffer = [];\n this._prevBufferLen = 0;\n this._pingInterval = -1;\n this._pingTimeout = -1;\n this._maxPayload = -1;\n /**\n * The expiration timestamp of the {@link _pingTimeoutTimer} object is tracked, in case the timer is throttled and the\n * callback is not fired on time. This can happen for example when a laptop is suspended or when a phone is locked.\n */\n this._pingTimeoutTime = Infinity;\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n const parsedUri = (0, parseuri_js_1.parse)(uri);\n opts.hostname = parsedUri.host;\n opts.secure =\n parsedUri.protocol === \"https\" || parsedUri.protocol === \"wss\";\n opts.port = parsedUri.port;\n if (parsedUri.query)\n opts.query = parsedUri.query;\n }\n else if (opts.host) {\n opts.hostname = (0, parseuri_js_1.parse)(opts.host).host;\n }\n (0, util_js_1.installTimerFunctions)(this, opts);\n this.secure =\n null != opts.secure\n ? opts.secure\n : typeof location !== \"undefined\" && \"https:\" === location.protocol;\n if (opts.hostname && !opts.port) {\n // if no port is specified manually, use the protocol default\n opts.port = this.secure ? \"443\" : \"80\";\n }\n this.hostname =\n opts.hostname ||\n (typeof location !== \"undefined\" ? location.hostname : \"localhost\");\n this.port =\n opts.port ||\n (typeof location !== \"undefined\" && location.port\n ? location.port\n : this.secure\n ? \"443\"\n : \"80\");\n this.transports = [];\n this._transportsByName = {};\n opts.transports.forEach((t) => {\n const transportName = t.prototype.name;\n this.transports.push(transportName);\n this._transportsByName[transportName] = t;\n });\n this.opts = Object.assign({\n path: \"/engine.io\",\n agent: false,\n withCredentials: false,\n upgrade: true,\n timestampParam: \"t\",\n rememberUpgrade: false,\n addTrailingSlash: true,\n rejectUnauthorized: true,\n perMessageDeflate: {\n threshold: 1024,\n },\n transportOptions: {},\n closeOnBeforeunload: false,\n }, opts);\n this.opts.path =\n this.opts.path.replace(/\\/$/, \"\") +\n (this.opts.addTrailingSlash ? \"/\" : \"\");\n if (typeof this.opts.query === \"string\") {\n this.opts.query = (0, parseqs_js_1.decode)(this.opts.query);\n }\n if (withEventListeners) {\n if (this.opts.closeOnBeforeunload) {\n // Firefox closes the connection when the \"beforeunload\" event is emitted but not Chrome. This event listener\n // ensures every browser behaves the same (no \"disconnect\" event at the Socket.IO level when the page is\n // closed/reloaded)\n this._beforeunloadEventListener = () => {\n if (this.transport) {\n // silently close the transport\n this.transport.removeAllListeners();\n this.transport.close();\n }\n };\n addEventListener(\"beforeunload\", this._beforeunloadEventListener, false);\n }\n if (this.hostname !== \"localhost\") {\n debug(\"adding listener for the 'offline' event\");\n this._offlineEventListener = () => {\n this._onClose(\"transport close\", {\n description: \"network connection lost\",\n });\n };\n OFFLINE_EVENT_LISTENERS.push(this._offlineEventListener);\n }\n }\n if (this.opts.withCredentials) {\n this._cookieJar = (0, globals_node_js_1.createCookieJar)();\n }\n this._open();\n }\n /**\n * Creates transport of the given type.\n *\n * @param {String} name - transport name\n * @return {Transport}\n * @private\n */\n createTransport(name) {\n debug('creating transport \"%s\"', name);\n const query = Object.assign({}, this.opts.query);\n // append engine.io protocol identifier\n query.EIO = engine_io_parser_1.protocol;\n // transport name\n query.transport = name;\n // session id if we already have one\n if (this.id)\n query.sid = this.id;\n const opts = Object.assign({}, this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port,\n }, this.opts.transportOptions[name]);\n debug(\"options: %j\", opts);\n return new this._transportsByName[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @private\n */\n _open() {\n if (this.transports.length === 0) {\n // Emit error on next tick so it can be listened to\n this.setTimeoutFn(() => {\n this.emitReserved(\"error\", \"No transports available\");\n }, 0);\n return;\n }\n const transportName = this.opts.rememberUpgrade &&\n SocketWithoutUpgrade.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1\n ? \"websocket\"\n : this.transports[0];\n this.readyState = \"opening\";\n const transport = this.createTransport(transportName);\n transport.open();\n this.setTransport(transport);\n }\n /**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @private\n */\n setTransport(transport) {\n debug(\"setting transport %s\", transport.name);\n if (this.transport) {\n debug(\"clearing existing transport %s\", this.transport.name);\n this.transport.removeAllListeners();\n }\n // set up transport\n this.transport = transport;\n // set up transport listeners\n transport\n .on(\"drain\", this._onDrain.bind(this))\n .on(\"packet\", this._onPacket.bind(this))\n .on(\"error\", this._onError.bind(this))\n .on(\"close\", (reason) => this._onClose(\"transport close\", reason));\n }\n /**\n * Called when connection is deemed open.\n *\n * @private\n */\n onOpen() {\n debug(\"socket open\");\n this.readyState = \"open\";\n SocketWithoutUpgrade.priorWebsocketSuccess =\n \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n }\n /**\n * Handles a packet.\n *\n * @private\n */\n _onPacket(packet) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n debug('socket receive: type \"%s\", data \"%s\"', packet.type, packet.data);\n this.emitReserved(\"packet\", packet);\n // Socket is live - any packet counts\n this.emitReserved(\"heartbeat\");\n switch (packet.type) {\n case \"open\":\n this.onHandshake(JSON.parse(packet.data));\n break;\n case \"ping\":\n this._sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\n this._resetPingTimeout();\n break;\n case \"error\":\n const err = new Error(\"server error\");\n // @ts-ignore\n err.code = packet.data;\n this._onError(err);\n break;\n case \"message\":\n this.emitReserved(\"data\", packet.data);\n this.emitReserved(\"message\", packet.data);\n break;\n }\n }\n else {\n debug('packet received with socket readyState \"%s\"', this.readyState);\n }\n }\n /**\n * Called upon handshake completion.\n *\n * @param {Object} data - handshake obj\n * @private\n */\n onHandshake(data) {\n this.emitReserved(\"handshake\", data);\n this.id = data.sid;\n this.transport.query.sid = data.sid;\n this._pingInterval = data.pingInterval;\n this._pingTimeout = data.pingTimeout;\n this._maxPayload = data.maxPayload;\n this.onOpen();\n // In case open handler closes socket\n if (\"closed\" === this.readyState)\n return;\n this._resetPingTimeout();\n }\n /**\n * Sets and resets ping timeout timer based on server pings.\n *\n * @private\n */\n _resetPingTimeout() {\n this.clearTimeoutFn(this._pingTimeoutTimer);\n const delay = this._pingInterval + this._pingTimeout;\n this._pingTimeoutTime = Date.now() + delay;\n this._pingTimeoutTimer = this.setTimeoutFn(() => {\n this._onClose(\"ping timeout\");\n }, delay);\n if (this.opts.autoUnref) {\n this._pingTimeoutTimer.unref();\n }\n }\n /**\n * Called on `drain` event\n *\n * @private\n */\n _onDrain() {\n this.writeBuffer.splice(0, this._prevBufferLen);\n // setting prevBufferLen = 0 is very important\n // for example, when upgrading, upgrade packet is sent over,\n // and a nonzero prevBufferLen could cause problems on `drain`\n this._prevBufferLen = 0;\n if (0 === this.writeBuffer.length) {\n this.emitReserved(\"drain\");\n }\n else {\n this.flush();\n }\n }\n /**\n * Flush write buffers.\n *\n * @private\n */\n flush() {\n if (\"closed\" !== this.readyState &&\n this.transport.writable &&\n !this.upgrading &&\n this.writeBuffer.length) {\n const packets = this._getWritablePackets();\n debug(\"flushing %d packets in socket\", packets.length);\n this.transport.send(packets);\n // keep track of current length of writeBuffer\n // splice writeBuffer and callbackBuffer on `drain`\n this._prevBufferLen = packets.length;\n this.emitReserved(\"flush\");\n }\n }\n /**\n * Ensure the encoded size of the writeBuffer is below the maxPayload value sent by the server (only for HTTP\n * long-polling)\n *\n * @private\n */\n _getWritablePackets() {\n const shouldCheckPayloadSize = this._maxPayload &&\n this.transport.name === \"polling\" &&\n this.writeBuffer.length > 1;\n if (!shouldCheckPayloadSize) {\n return this.writeBuffer;\n }\n let payloadSize = 1; // first packet type\n for (let i = 0; i < this.writeBuffer.length; i++) {\n const data = this.writeBuffer[i].data;\n if (data) {\n payloadSize += (0, util_js_1.byteLength)(data);\n }\n if (i > 0 && payloadSize > this._maxPayload) {\n debug(\"only send %d out of %d packets\", i, this.writeBuffer.length);\n return this.writeBuffer.slice(0, i);\n }\n payloadSize += 2; // separator + packet type\n }\n debug(\"payload size is %d (max: %d)\", payloadSize, this._maxPayload);\n return this.writeBuffer;\n }\n /**\n * Checks whether the heartbeat timer has expired but the socket has not yet been notified.\n *\n * Note: this method is private for now because it does not really fit the WebSocket API, but if we put it in the\n * `write()` method then the message would not be buffered by the Socket.IO client.\n *\n * @return {boolean}\n * @private\n */\n /* private */ _hasPingExpired() {\n if (!this._pingTimeoutTime)\n return true;\n const hasExpired = Date.now() > this._pingTimeoutTime;\n if (hasExpired) {\n debug(\"throttled timer detected, scheduling connection close\");\n this._pingTimeoutTime = 0;\n (0, globals_node_js_1.nextTick)(() => {\n this._onClose(\"ping timeout\");\n }, this.setTimeoutFn);\n }\n return hasExpired;\n }\n /**\n * Sends a message.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} fn - callback function.\n * @return {Socket} for chaining.\n */\n write(msg, options, fn) {\n this._sendPacket(\"message\", msg, options, fn);\n return this;\n }\n /**\n * Sends a message. Alias of {@link Socket#write}.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} fn - callback function.\n * @return {Socket} for chaining.\n */\n send(msg, options, fn) {\n this._sendPacket(\"message\", msg, options, fn);\n return this;\n }\n /**\n * Sends a packet.\n *\n * @param {String} type: packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} fn - callback function.\n * @private\n */\n _sendPacket(type, data, options, fn) {\n if (\"function\" === typeof data) {\n fn = data;\n data = undefined;\n }\n if (\"function\" === typeof options) {\n fn = options;\n options = null;\n }\n if (\"closing\" === this.readyState || \"closed\" === this.readyState) {\n return;\n }\n options = options || {};\n options.compress = false !== options.compress;\n const packet = {\n type: type,\n data: data,\n options: options,\n };\n this.emitReserved(\"packetCreate\", packet);\n this.writeBuffer.push(packet);\n if (fn)\n this.once(\"flush\", fn);\n this.flush();\n }\n /**\n * Closes the connection.\n */\n close() {\n const close = () => {\n this._onClose(\"forced close\");\n debug(\"socket closing - telling transport to close\");\n this.transport.close();\n };\n const cleanupAndClose = () => {\n this.off(\"upgrade\", cleanupAndClose);\n this.off(\"upgradeError\", cleanupAndClose);\n close();\n };\n const waitForUpgrade = () => {\n // wait for upgrade to finish since we can't send packets while pausing a transport\n this.once(\"upgrade\", cleanupAndClose);\n this.once(\"upgradeError\", cleanupAndClose);\n };\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.readyState = \"closing\";\n if (this.writeBuffer.length) {\n this.once(\"drain\", () => {\n if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n });\n }\n else if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n }\n return this;\n }\n /**\n * Called upon transport error\n *\n * @private\n */\n _onError(err) {\n debug(\"socket error %j\", err);\n SocketWithoutUpgrade.priorWebsocketSuccess = false;\n if (this.opts.tryAllTransports &&\n this.transports.length > 1 &&\n this.readyState === \"opening\") {\n debug(\"trying next transport\");\n this.transports.shift();\n return this._open();\n }\n this.emitReserved(\"error\", err);\n this._onClose(\"transport error\", err);\n }\n /**\n * Called upon transport close.\n *\n * @private\n */\n _onClose(reason, description) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n debug('socket close with reason: \"%s\"', reason);\n // clear timers\n this.clearTimeoutFn(this._pingTimeoutTimer);\n // stop event from firing again for transport\n this.transport.removeAllListeners(\"close\");\n // ensure transport won't stay open\n this.transport.close();\n // ignore further transport communication\n this.transport.removeAllListeners();\n if (withEventListeners) {\n if (this._beforeunloadEventListener) {\n removeEventListener(\"beforeunload\", this._beforeunloadEventListener, false);\n }\n if (this._offlineEventListener) {\n const i = OFFLINE_EVENT_LISTENERS.indexOf(this._offlineEventListener);\n if (i !== -1) {\n debug(\"removing listener for the 'offline' event\");\n OFFLINE_EVENT_LISTENERS.splice(i, 1);\n }\n }\n }\n // set ready state\n this.readyState = \"closed\";\n // clear session id\n this.id = null;\n // emit close event\n this.emitReserved(\"close\", reason, description);\n // clean buffers after, so users can still\n // grab the buffers on `close` event\n this.writeBuffer = [];\n this._prevBufferLen = 0;\n }\n }\n}\nexports.SocketWithoutUpgrade = SocketWithoutUpgrade;\nSocketWithoutUpgrade.protocol = engine_io_parser_1.protocol;\n/**\n * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established\n * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport.\n *\n * This class comes with an upgrade mechanism, which means that once the connection is established with the first\n * low-level transport, it will try to upgrade to a better transport.\n *\n * In order to allow tree-shaking, there are no transports included, that's why the `transports` option is mandatory.\n *\n * @example\n * import { SocketWithUpgrade, WebSocket } from \"engine.io-client\";\n *\n * const socket = new SocketWithUpgrade({\n * transports: [WebSocket]\n * });\n *\n * socket.on(\"open\", () => {\n * socket.send(\"hello\");\n * });\n *\n * @see SocketWithoutUpgrade\n * @see Socket\n */\nclass SocketWithUpgrade extends SocketWithoutUpgrade {\n constructor() {\n super(...arguments);\n this._upgrades = [];\n }\n onOpen() {\n super.onOpen();\n if (\"open\" === this.readyState && this.opts.upgrade) {\n debug(\"starting upgrade probes\");\n for (let i = 0; i < this._upgrades.length; i++) {\n this._probe(this._upgrades[i]);\n }\n }\n }\n /**\n * Probes a transport.\n *\n * @param {String} name - transport name\n * @private\n */\n _probe(name) {\n debug('probing transport \"%s\"', name);\n let transport = this.createTransport(name);\n let failed = false;\n SocketWithoutUpgrade.priorWebsocketSuccess = false;\n const onTransportOpen = () => {\n if (failed)\n return;\n debug('probe transport \"%s\" opened', name);\n transport.send([{ type: \"ping\", data: \"probe\" }]);\n transport.once(\"packet\", (msg) => {\n if (failed)\n return;\n if (\"pong\" === msg.type && \"probe\" === msg.data) {\n debug('probe transport \"%s\" pong', name);\n this.upgrading = true;\n this.emitReserved(\"upgrading\", transport);\n if (!transport)\n return;\n SocketWithoutUpgrade.priorWebsocketSuccess =\n \"websocket\" === transport.name;\n debug('pausing current transport \"%s\"', this.transport.name);\n this.transport.pause(() => {\n if (failed)\n return;\n if (\"closed\" === this.readyState)\n return;\n debug(\"changing transport and sending upgrade packet\");\n cleanup();\n this.setTransport(transport);\n transport.send([{ type: \"upgrade\" }]);\n this.emitReserved(\"upgrade\", transport);\n transport = null;\n this.upgrading = false;\n this.flush();\n });\n }\n else {\n debug('probe transport \"%s\" failed', name);\n const err = new Error(\"probe error\");\n // @ts-ignore\n err.transport = transport.name;\n this.emitReserved(\"upgradeError\", err);\n }\n });\n };\n function freezeTransport() {\n if (failed)\n return;\n // Any callback called by transport should be ignored since now\n failed = true;\n cleanup();\n transport.close();\n transport = null;\n }\n // Handle any error that happens while probing\n const onerror = (err) => {\n const error = new Error(\"probe error: \" + err);\n // @ts-ignore\n error.transport = transport.name;\n freezeTransport();\n debug('probe transport \"%s\" failed because of error: %s', name, err);\n this.emitReserved(\"upgradeError\", error);\n };\n function onTransportClose() {\n onerror(\"transport closed\");\n }\n // When the socket is closed while we're probing\n function onclose() {\n onerror(\"socket closed\");\n }\n // When the socket is upgraded while we're probing\n function onupgrade(to) {\n if (transport && to.name !== transport.name) {\n debug('\"%s\" works - aborting \"%s\"', to.name, transport.name);\n freezeTransport();\n }\n }\n // Remove all listeners on the transport and on self\n const cleanup = () => {\n transport.removeListener(\"open\", onTransportOpen);\n transport.removeListener(\"error\", onerror);\n transport.removeListener(\"close\", onTransportClose);\n this.off(\"close\", onclose);\n this.off(\"upgrading\", onupgrade);\n };\n transport.once(\"open\", onTransportOpen);\n transport.once(\"error\", onerror);\n transport.once(\"close\", onTransportClose);\n this.once(\"close\", onclose);\n this.once(\"upgrading\", onupgrade);\n if (this._upgrades.indexOf(\"webtransport\") !== -1 &&\n name !== \"webtransport\") {\n // favor WebTransport\n this.setTimeoutFn(() => {\n if (!failed) {\n transport.open();\n }\n }, 200);\n }\n else {\n transport.open();\n }\n }\n onHandshake(data) {\n this._upgrades = this._filterUpgrades(data.upgrades);\n super.onHandshake(data);\n }\n /**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} upgrades - server upgrades\n * @private\n */\n _filterUpgrades(upgrades) {\n const filteredUpgrades = [];\n for (let i = 0; i < upgrades.length; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\nexports.SocketWithUpgrade = SocketWithUpgrade;\n/**\n * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established\n * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport.\n *\n * This class comes with an upgrade mechanism, which means that once the connection is established with the first\n * low-level transport, it will try to upgrade to a better transport.\n *\n * @example\n * import { Socket } from \"engine.io-client\";\n *\n * const socket = new Socket();\n *\n * socket.on(\"open\", () => {\n * socket.send(\"hello\");\n * });\n *\n * @see SocketWithoutUpgrade\n * @see SocketWithUpgrade\n */\nclass Socket extends SocketWithUpgrade {\n constructor(uri, opts = {}) {\n const o = typeof uri === \"object\" ? uri : opts;\n if (!o.transports ||\n (o.transports && typeof o.transports[0] === \"string\")) {\n o.transports = (o.transports || [\"polling\", \"websocket\", \"webtransport\"])\n .map((transportName) => index_js_1.transports[transportName])\n .filter((t) => !!t);\n }\n super(uri, o);\n }\n}\nexports.Socket = Socket;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Transport = exports.TransportError = void 0;\nconst engine_io_parser_1 = require(\"engine.io-parser\");\nconst component_emitter_1 = require(\"@socket.io/component-emitter\");\nconst util_js_1 = require(\"./util.js\");\nconst parseqs_js_1 = require(\"./contrib/parseqs.js\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"engine.io-client:transport\"); // debug()\nclass TransportError extends Error {\n constructor(reason, description, context) {\n super(reason);\n this.description = description;\n this.context = context;\n this.type = \"TransportError\";\n }\n}\nexports.TransportError = TransportError;\nclass Transport extends component_emitter_1.Emitter {\n /**\n * Transport abstract constructor.\n *\n * @param {Object} opts - options\n * @protected\n */\n constructor(opts) {\n super();\n this.writable = false;\n (0, util_js_1.installTimerFunctions)(this, opts);\n this.opts = opts;\n this.query = opts.query;\n this.socket = opts.socket;\n this.supportsBinary = !opts.forceBase64;\n }\n /**\n * Emits an error.\n *\n * @param {String} reason\n * @param description\n * @param context - the error context\n * @return {Transport} for chaining\n * @protected\n */\n onError(reason, description, context) {\n super.emitReserved(\"error\", new TransportError(reason, description, context));\n return this;\n }\n /**\n * Opens the transport.\n */\n open() {\n this.readyState = \"opening\";\n this.doOpen();\n return this;\n }\n /**\n * Closes the transport.\n */\n close() {\n if (this.readyState === \"opening\" || this.readyState === \"open\") {\n this.doClose();\n this.onClose();\n }\n return this;\n }\n /**\n * Sends multiple packets.\n *\n * @param {Array} packets\n */\n send(packets) {\n if (this.readyState === \"open\") {\n this.write(packets);\n }\n else {\n // this might happen if the transport was silently closed in the beforeunload event handler\n debug(\"transport is not open, discarding packets\");\n }\n }\n /**\n * Called upon open\n *\n * @protected\n */\n onOpen() {\n this.readyState = \"open\";\n this.writable = true;\n super.emitReserved(\"open\");\n }\n /**\n * Called with data.\n *\n * @param {String} data\n * @protected\n */\n onData(data) {\n const packet = (0, engine_io_parser_1.decodePacket)(data, this.socket.binaryType);\n this.onPacket(packet);\n }\n /**\n * Called with a decoded packet.\n *\n * @protected\n */\n onPacket(packet) {\n super.emitReserved(\"packet\", packet);\n }\n /**\n * Called upon close.\n *\n * @protected\n */\n onClose(details) {\n this.readyState = \"closed\";\n super.emitReserved(\"close\", details);\n }\n /**\n * Pauses the transport, in order not to lose packets during an upgrade.\n *\n * @param onPause\n */\n pause(onPause) { }\n createUri(schema, query = {}) {\n return (schema +\n \"://\" +\n this._hostname() +\n this._port() +\n this.opts.path +\n this._query(query));\n }\n _hostname() {\n const hostname = this.opts.hostname;\n return hostname.indexOf(\":\") === -1 ? hostname : \"[\" + hostname + \"]\";\n }\n _port() {\n if (this.opts.port &&\n ((this.opts.secure && Number(this.opts.port) !== 443) ||\n (!this.opts.secure && Number(this.opts.port) !== 80))) {\n return \":\" + this.opts.port;\n }\n else {\n return \"\";\n }\n }\n _query(query) {\n const encodedQuery = (0, parseqs_js_1.encode)(query);\n return encodedQuery.length ? \"?\" + encodedQuery : \"\";\n }\n}\nexports.Transport = Transport;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.transports = void 0;\nconst polling_xhr_node_js_1 = require(\"./polling-xhr.node.js\");\nconst websocket_node_js_1 = require(\"./websocket.node.js\");\nconst webtransport_js_1 = require(\"./webtransport.js\");\nexports.transports = {\n websocket: websocket_node_js_1.WS,\n webtransport: webtransport_js_1.WT,\n polling: polling_xhr_node_js_1.XHR,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Fetch = void 0;\nconst polling_js_1 = require(\"./polling.js\");\n/**\n * HTTP long-polling based on the built-in `fetch()` method.\n *\n * Usage: browser, Node.js (since v18), Deno, Bun\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/fetch\n * @see https://caniuse.com/fetch\n * @see https://nodejs.org/api/globals.html#fetch\n */\nclass Fetch extends polling_js_1.Polling {\n doPoll() {\n this._fetch()\n .then((res) => {\n if (!res.ok) {\n return this.onError(\"fetch read error\", res.status, res);\n }\n res.text().then((data) => this.onData(data));\n })\n .catch((err) => {\n this.onError(\"fetch read error\", err);\n });\n }\n doWrite(data, callback) {\n this._fetch(data)\n .then((res) => {\n if (!res.ok) {\n return this.onError(\"fetch write error\", res.status, res);\n }\n callback();\n })\n .catch((err) => {\n this.onError(\"fetch write error\", err);\n });\n }\n _fetch(data) {\n var _a;\n const isPost = data !== undefined;\n const headers = new Headers(this.opts.extraHeaders);\n if (isPost) {\n headers.set(\"content-type\", \"text/plain;charset=UTF-8\");\n }\n (_a = this.socket._cookieJar) === null || _a === void 0 ? void 0 : _a.appendCookies(headers);\n return fetch(this.uri(), {\n method: isPost ? \"POST\" : \"GET\",\n body: isPost ? data : null,\n headers,\n credentials: this.opts.withCredentials ? \"include\" : \"omit\",\n }).then((res) => {\n var _a;\n // @ts-ignore getSetCookie() was added in Node.js v19.7.0\n (_a = this.socket._cookieJar) === null || _a === void 0 ? void 0 : _a.parseCookies(res.headers.getSetCookie());\n return res;\n });\n }\n}\nexports.Fetch = Fetch;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.XHR = exports.Request = exports.BaseXHR = void 0;\nconst polling_js_1 = require(\"./polling.js\");\nconst component_emitter_1 = require(\"@socket.io/component-emitter\");\nconst util_js_1 = require(\"../util.js\");\nconst globals_node_js_1 = require(\"../globals.node.js\");\nconst has_cors_js_1 = require(\"../contrib/has-cors.js\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"engine.io-client:polling\"); // debug()\nfunction empty() { }\nclass BaseXHR extends polling_js_1.Polling {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @package\n */\n constructor(opts) {\n super(opts);\n if (typeof location !== \"undefined\") {\n const isSSL = \"https:\" === location.protocol;\n let port = location.port;\n // some user agents have empty `location.port`\n if (!port) {\n port = isSSL ? \"443\" : \"80\";\n }\n this.xd =\n (typeof location !== \"undefined\" &&\n opts.hostname !== location.hostname) ||\n port !== opts.port;\n }\n }\n /**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @private\n */\n doWrite(data, fn) {\n const req = this.request({\n method: \"POST\",\n data: data,\n });\n req.on(\"success\", fn);\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr post error\", xhrStatus, context);\n });\n }\n /**\n * Starts a poll cycle.\n *\n * @private\n */\n doPoll() {\n debug(\"xhr poll\");\n const req = this.request();\n req.on(\"data\", this.onData.bind(this));\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr poll error\", xhrStatus, context);\n });\n this.pollXhr = req;\n }\n}\nexports.BaseXHR = BaseXHR;\nclass Request extends component_emitter_1.Emitter {\n /**\n * Request constructor\n *\n * @param {Object} options\n * @package\n */\n constructor(createRequest, uri, opts) {\n super();\n this.createRequest = createRequest;\n (0, util_js_1.installTimerFunctions)(this, opts);\n this._opts = opts;\n this._method = opts.method || \"GET\";\n this._uri = uri;\n this._data = undefined !== opts.data ? opts.data : null;\n this._create();\n }\n /**\n * Creates the XHR object and sends the request.\n *\n * @private\n */\n _create() {\n var _a;\n const opts = (0, util_js_1.pick)(this._opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this._opts.xd;\n const xhr = (this._xhr = this.createRequest(opts));\n try {\n debug(\"xhr open %s: %s\", this._method, this._uri);\n xhr.open(this._method, this._uri, true);\n try {\n if (this._opts.extraHeaders) {\n // @ts-ignore\n xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n for (let i in this._opts.extraHeaders) {\n if (this._opts.extraHeaders.hasOwnProperty(i)) {\n xhr.setRequestHeader(i, this._opts.extraHeaders[i]);\n }\n }\n }\n }\n catch (e) { }\n if (\"POST\" === this._method) {\n try {\n xhr.setRequestHeader(\"Content-type\", \"text/plain;charset=UTF-8\");\n }\n catch (e) { }\n }\n try {\n xhr.setRequestHeader(\"Accept\", \"*/*\");\n }\n catch (e) { }\n (_a = this._opts.cookieJar) === null || _a === void 0 ? void 0 : _a.addCookies(xhr);\n // ie6 check\n if (\"withCredentials\" in xhr) {\n xhr.withCredentials = this._opts.withCredentials;\n }\n if (this._opts.requestTimeout) {\n xhr.timeout = this._opts.requestTimeout;\n }\n xhr.onreadystatechange = () => {\n var _a;\n if (xhr.readyState === 3) {\n (_a = this._opts.cookieJar) === null || _a === void 0 ? void 0 : _a.parseCookies(\n // @ts-ignore\n xhr.getResponseHeader(\"set-cookie\"));\n }\n if (4 !== xhr.readyState)\n return;\n if (200 === xhr.status || 1223 === xhr.status) {\n this._onLoad();\n }\n else {\n // make sure the `error` event handler that's user-set\n // does not throw in the same tick and gets caught here\n this.setTimeoutFn(() => {\n this._onError(typeof xhr.status === \"number\" ? xhr.status : 0);\n }, 0);\n }\n };\n debug(\"xhr data %s\", this._data);\n xhr.send(this._data);\n }\n catch (e) {\n // Need to defer since .create() is called directly from the constructor\n // and thus the 'error' event can only be only bound *after* this exception\n // occurs. Therefore, also, we cannot throw here at all.\n this.setTimeoutFn(() => {\n this._onError(e);\n }, 0);\n return;\n }\n if (typeof document !== \"undefined\") {\n this._index = Request.requestsCount++;\n Request.requests[this._index] = this;\n }\n }\n /**\n * Called upon error.\n *\n * @private\n */\n _onError(err) {\n this.emitReserved(\"error\", err, this._xhr);\n this._cleanup(true);\n }\n /**\n * Cleans up house.\n *\n * @private\n */\n _cleanup(fromError) {\n if (\"undefined\" === typeof this._xhr || null === this._xhr) {\n return;\n }\n this._xhr.onreadystatechange = empty;\n if (fromError) {\n try {\n this._xhr.abort();\n }\n catch (e) { }\n }\n if (typeof document !== \"undefined\") {\n delete Request.requests[this._index];\n }\n this._xhr = null;\n }\n /**\n * Called upon load.\n *\n * @private\n */\n _onLoad() {\n const data = this._xhr.responseText;\n if (data !== null) {\n this.emitReserved(\"data\", data);\n this.emitReserved(\"success\");\n this._cleanup();\n }\n }\n /**\n * Aborts the request.\n *\n * @package\n */\n abort() {\n this._cleanup();\n }\n}\nexports.Request = Request;\nRequest.requestsCount = 0;\nRequest.requests = {};\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\nif (typeof document !== \"undefined\") {\n // @ts-ignore\n if (typeof attachEvent === \"function\") {\n // @ts-ignore\n attachEvent(\"onunload\", unloadHandler);\n }\n else if (typeof addEventListener === \"function\") {\n const terminationEvent = \"onpagehide\" in globals_node_js_1.globalThisShim ? \"pagehide\" : \"unload\";\n addEventListener(terminationEvent, unloadHandler, false);\n }\n}\nfunction unloadHandler() {\n for (let i in Request.requests) {\n if (Request.requests.hasOwnProperty(i)) {\n Request.requests[i].abort();\n }\n }\n}\nconst hasXHR2 = (function () {\n const xhr = newRequest({\n xdomain: false,\n });\n return xhr && xhr.responseType !== null;\n})();\n/**\n * HTTP long-polling based on the built-in `XMLHttpRequest` object.\n *\n * Usage: browser\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest\n */\nclass XHR extends BaseXHR {\n constructor(opts) {\n super(opts);\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\n }\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd }, this.opts);\n return new Request(newRequest, this.uri(), opts);\n }\n}\nexports.XHR = XHR;\nfunction newRequest(opts) {\n const xdomain = opts.xdomain;\n // XMLHttpRequest can be disabled on IE\n try {\n if (\"undefined\" !== typeof XMLHttpRequest && (!xdomain || has_cors_js_1.hasCORS)) {\n return new XMLHttpRequest();\n }\n }\n catch (e) { }\n if (!xdomain) {\n try {\n return new globals_node_js_1.globalThisShim[[\"Active\"].concat(\"Object\").join(\"X\")](\"Microsoft.XMLHTTP\");\n }\n catch (e) { }\n }\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Polling = void 0;\nconst transport_js_1 = require(\"../transport.js\");\nconst util_js_1 = require(\"../util.js\");\nconst engine_io_parser_1 = require(\"engine.io-parser\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"engine.io-client:polling\"); // debug()\nclass Polling extends transport_js_1.Transport {\n constructor() {\n super(...arguments);\n this._polling = false;\n }\n get name() {\n return \"polling\";\n }\n /**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @protected\n */\n doOpen() {\n this._poll();\n }\n /**\n * Pauses polling.\n *\n * @param {Function} onPause - callback upon buffers are flushed and transport is paused\n * @package\n */\n pause(onPause) {\n this.readyState = \"pausing\";\n const pause = () => {\n debug(\"paused\");\n this.readyState = \"paused\";\n onPause();\n };\n if (this._polling || !this.writable) {\n let total = 0;\n if (this._polling) {\n debug(\"we are currently polling - waiting to pause\");\n total++;\n this.once(\"pollComplete\", function () {\n debug(\"pre-pause polling complete\");\n --total || pause();\n });\n }\n if (!this.writable) {\n debug(\"we are currently writing - waiting to pause\");\n total++;\n this.once(\"drain\", function () {\n debug(\"pre-pause writing complete\");\n --total || pause();\n });\n }\n }\n else {\n pause();\n }\n }\n /**\n * Starts polling cycle.\n *\n * @private\n */\n _poll() {\n debug(\"polling\");\n this._polling = true;\n this.doPoll();\n this.emitReserved(\"poll\");\n }\n /**\n * Overloads onData to detect payloads.\n *\n * @protected\n */\n onData(data) {\n debug(\"polling got data %s\", data);\n const callback = (packet) => {\n // if its the first message we consider the transport open\n if (\"opening\" === this.readyState && packet.type === \"open\") {\n this.onOpen();\n }\n // if its a close packet, we close the ongoing requests\n if (\"close\" === packet.type) {\n this.onClose({ description: \"transport closed by the server\" });\n return false;\n }\n // otherwise bypass onData and handle the message\n this.onPacket(packet);\n };\n // decode payload\n (0, engine_io_parser_1.decodePayload)(data, this.socket.binaryType).forEach(callback);\n // if an event did not trigger closing\n if (\"closed\" !== this.readyState) {\n // if we got data we're not polling\n this._polling = false;\n this.emitReserved(\"pollComplete\");\n if (\"open\" === this.readyState) {\n this._poll();\n }\n else {\n debug('ignoring poll - transport state \"%s\"', this.readyState);\n }\n }\n }\n /**\n * For polling, send a close packet.\n *\n * @protected\n */\n doClose() {\n const close = () => {\n debug(\"writing close packet\");\n this.write([{ type: \"close\" }]);\n };\n if (\"open\" === this.readyState) {\n debug(\"transport open - closing\");\n close();\n }\n else {\n // in case we're trying to close while\n // handshaking is in progress (GH-164)\n debug(\"transport not open - deferring close\");\n this.once(\"open\", close);\n }\n }\n /**\n * Writes a packets payload.\n *\n * @param {Array} packets - data packets\n * @protected\n */\n write(packets) {\n this.writable = false;\n (0, engine_io_parser_1.encodePayload)(packets, (data) => {\n this.doWrite(data, () => {\n this.writable = true;\n this.emitReserved(\"drain\");\n });\n });\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n const schema = this.opts.secure ? \"https\" : \"http\";\n const query = this.query || {};\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = (0, util_js_1.randomString)();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n return this.createUri(schema, query);\n }\n}\nexports.Polling = Polling;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WS = exports.BaseWS = void 0;\nconst transport_js_1 = require(\"../transport.js\");\nconst util_js_1 = require(\"../util.js\");\nconst engine_io_parser_1 = require(\"engine.io-parser\");\nconst globals_node_js_1 = require(\"../globals.node.js\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"engine.io-client:websocket\"); // debug()\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nclass BaseWS extends transport_js_1.Transport {\n get name() {\n return \"websocket\";\n }\n doOpen() {\n const uri = this.uri();\n const protocols = this.opts.protocols;\n // React Native only supports the 'headers' option, and will print a warning if anything else is passed\n const opts = isReactNative\n ? {}\n : (0, util_js_1.pick)(this.opts, \"agent\", \"perMessageDeflate\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"localAddress\", \"protocolVersion\", \"origin\", \"maxPayload\", \"family\", \"checkServerIdentity\");\n if (this.opts.extraHeaders) {\n opts.headers = this.opts.extraHeaders;\n }\n try {\n this.ws = this.createSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType;\n this.addEventListeners();\n }\n /**\n * Adds event listeners to the socket\n *\n * @private\n */\n addEventListeners() {\n this.ws.onopen = () => {\n if (this.opts.autoUnref) {\n this.ws._socket.unref();\n }\n this.onOpen();\n };\n this.ws.onclose = (closeEvent) => this.onClose({\n description: \"websocket connection closed\",\n context: closeEvent,\n });\n this.ws.onmessage = (ev) => this.onData(ev.data);\n this.ws.onerror = (e) => this.onError(\"websocket error\", e);\n }\n write(packets) {\n this.writable = false;\n // encodePacket efficient as it uses WS framing\n // no need for encodePayload\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n (0, engine_io_parser_1.encodePacket)(packet, this.supportsBinary, (data) => {\n // Sometimes the websocket has already been closed but the browser didn't\n // have a chance of informing us about it yet, in that case send will\n // throw an error\n try {\n this.doWrite(packet, data);\n }\n catch (e) {\n debug(\"websocket closed before onclose event\");\n }\n if (lastPacket) {\n // fake drain\n // defer to next tick to allow Socket to clear writeBuffer\n (0, globals_node_js_1.nextTick)(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n doClose() {\n if (typeof this.ws !== \"undefined\") {\n this.ws.onerror = () => { };\n this.ws.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n const query = this.query || {};\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = (0, util_js_1.randomString)();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n return this.createUri(schema, query);\n }\n}\nexports.BaseWS = BaseWS;\nconst WebSocketCtor = globals_node_js_1.globalThisShim.WebSocket || globals_node_js_1.globalThisShim.MozWebSocket;\n/**\n * WebSocket transport based on the built-in `WebSocket` object.\n *\n * Usage: browser, Node.js (since v21), Deno, Bun\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @see https://caniuse.com/mdn-api_websocket\n * @see https://nodejs.org/api/globals.html#websocket\n */\nclass WS extends BaseWS {\n createSocket(uri, protocols, opts) {\n return !isReactNative\n ? protocols\n ? new WebSocketCtor(uri, protocols)\n : new WebSocketCtor(uri)\n : new WebSocketCtor(uri, protocols, opts);\n }\n doWrite(_packet, data) {\n this.ws.send(data);\n }\n}\nexports.WS = WS;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WT = void 0;\nconst transport_js_1 = require(\"../transport.js\");\nconst globals_node_js_1 = require(\"../globals.node.js\");\nconst engine_io_parser_1 = require(\"engine.io-parser\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"engine.io-client:webtransport\"); // debug()\n/**\n * WebTransport transport based on the built-in `WebTransport` object.\n *\n * Usage: browser, Node.js (with the `@fails-components/webtransport` package)\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebTransport\n * @see https://caniuse.com/webtransport\n */\nclass WT extends transport_js_1.Transport {\n get name() {\n return \"webtransport\";\n }\n doOpen() {\n try {\n // @ts-ignore\n this._transport = new WebTransport(this.createUri(\"https\"), this.opts.transportOptions[this.name]);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this._transport.closed\n .then(() => {\n debug(\"transport closed gracefully\");\n this.onClose();\n })\n .catch((err) => {\n debug(\"transport closed due to %s\", err);\n this.onError(\"webtransport error\", err);\n });\n // note: we could have used async/await, but that would require some additional polyfills\n this._transport.ready.then(() => {\n this._transport.createBidirectionalStream().then((stream) => {\n const decoderStream = (0, engine_io_parser_1.createPacketDecoderStream)(Number.MAX_SAFE_INTEGER, this.socket.binaryType);\n const reader = stream.readable.pipeThrough(decoderStream).getReader();\n const encoderStream = (0, engine_io_parser_1.createPacketEncoderStream)();\n encoderStream.readable.pipeTo(stream.writable);\n this._writer = encoderStream.writable.getWriter();\n const read = () => {\n reader\n .read()\n .then(({ done, value }) => {\n if (done) {\n debug(\"session is closed\");\n return;\n }\n debug(\"received chunk: %o\", value);\n this.onPacket(value);\n read();\n })\n .catch((err) => {\n debug(\"an error occurred while reading: %s\", err);\n });\n };\n read();\n const packet = { type: \"open\" };\n if (this.query.sid) {\n packet.data = `{\"sid\":\"${this.query.sid}\"}`;\n }\n this._writer.write(packet).then(() => this.onOpen());\n });\n });\n }\n write(packets) {\n this.writable = false;\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n this._writer.write(packet).then(() => {\n if (lastPacket) {\n (0, globals_node_js_1.nextTick)(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n doClose() {\n var _a;\n (_a = this._transport) === null || _a === void 0 ? void 0 : _a.close();\n }\n}\nexports.WT = WT;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.pick = pick;\nexports.installTimerFunctions = installTimerFunctions;\nexports.byteLength = byteLength;\nexports.randomString = randomString;\nconst globals_node_js_1 = require(\"./globals.node.js\");\nfunction pick(obj, ...attr) {\n return attr.reduce((acc, k) => {\n if (obj.hasOwnProperty(k)) {\n acc[k] = obj[k];\n }\n return acc;\n }, {});\n}\n// Keep a reference to the real timeout functions so they can be used when overridden\nconst NATIVE_SET_TIMEOUT = globals_node_js_1.globalThisShim.setTimeout;\nconst NATIVE_CLEAR_TIMEOUT = globals_node_js_1.globalThisShim.clearTimeout;\nfunction installTimerFunctions(obj, opts) {\n if (opts.useNativeTimers) {\n obj.setTimeoutFn = NATIVE_SET_TIMEOUT.bind(globals_node_js_1.globalThisShim);\n obj.clearTimeoutFn = NATIVE_CLEAR_TIMEOUT.bind(globals_node_js_1.globalThisShim);\n }\n else {\n obj.setTimeoutFn = globals_node_js_1.globalThisShim.setTimeout.bind(globals_node_js_1.globalThisShim);\n obj.clearTimeoutFn = globals_node_js_1.globalThisShim.clearTimeout.bind(globals_node_js_1.globalThisShim);\n }\n}\n// base64 encoded buffers are about 33% bigger (https://en.wikipedia.org/wiki/Base64)\nconst BASE64_OVERHEAD = 1.33;\n// we could also have used `new Blob([obj]).size`, but it isn't supported in IE9\nfunction byteLength(obj) {\n if (typeof obj === \"string\") {\n return utf8Length(obj);\n }\n // arraybuffer or blob\n return Math.ceil((obj.byteLength || obj.size) * BASE64_OVERHEAD);\n}\nfunction utf8Length(str) {\n let c = 0, length = 0;\n for (let i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n length += 1;\n }\n else if (c < 0x800) {\n length += 2;\n }\n else if (c < 0xd800 || c >= 0xe000) {\n length += 3;\n }\n else {\n i++;\n length += 4;\n }\n }\n return length;\n}\n/**\n * Generates a random 8-characters string.\n */\nfunction randomString() {\n return (Date.now().toString(36).substring(3) +\n Math.random().toString(36).substring(2, 5));\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ERROR_PACKET = exports.PACKET_TYPES_REVERSE = exports.PACKET_TYPES = void 0;\nconst PACKET_TYPES = Object.create(null); // no Map = no polyfill\nexports.PACKET_TYPES = PACKET_TYPES;\nPACKET_TYPES[\"open\"] = \"0\";\nPACKET_TYPES[\"close\"] = \"1\";\nPACKET_TYPES[\"ping\"] = \"2\";\nPACKET_TYPES[\"pong\"] = \"3\";\nPACKET_TYPES[\"message\"] = \"4\";\nPACKET_TYPES[\"upgrade\"] = \"5\";\nPACKET_TYPES[\"noop\"] = \"6\";\nconst PACKET_TYPES_REVERSE = Object.create(null);\nexports.PACKET_TYPES_REVERSE = PACKET_TYPES_REVERSE;\nObject.keys(PACKET_TYPES).forEach(key => {\n PACKET_TYPES_REVERSE[PACKET_TYPES[key]] = key;\n});\nconst ERROR_PACKET = { type: \"error\", data: \"parser error\" };\nexports.ERROR_PACKET = ERROR_PACKET;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decode = exports.encode = void 0;\n// imported from https://github.com/socketio/base64-arraybuffer\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nconst encode = (arraybuffer) => {\n let bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n }\n else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n};\nexports.encode = encode;\nconst decode = (base64) => {\n let bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n const arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return arraybuffer;\n};\nexports.decode = decode;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodePacket = void 0;\nconst commons_js_1 = require(\"./commons.js\");\nconst base64_arraybuffer_js_1 = require(\"./contrib/base64-arraybuffer.js\");\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst decodePacket = (encodedPacket, binaryType) => {\n if (typeof encodedPacket !== \"string\") {\n return {\n type: \"message\",\n data: mapBinary(encodedPacket, binaryType)\n };\n }\n const type = encodedPacket.charAt(0);\n if (type === \"b\") {\n return {\n type: \"message\",\n data: decodeBase64Packet(encodedPacket.substring(1), binaryType)\n };\n }\n const packetType = commons_js_1.PACKET_TYPES_REVERSE[type];\n if (!packetType) {\n return commons_js_1.ERROR_PACKET;\n }\n return encodedPacket.length > 1\n ? {\n type: commons_js_1.PACKET_TYPES_REVERSE[type],\n data: encodedPacket.substring(1)\n }\n : {\n type: commons_js_1.PACKET_TYPES_REVERSE[type]\n };\n};\nexports.decodePacket = decodePacket;\nconst decodeBase64Packet = (data, binaryType) => {\n if (withNativeArrayBuffer) {\n const decoded = (0, base64_arraybuffer_js_1.decode)(data);\n return mapBinary(decoded, binaryType);\n }\n else {\n return { base64: true, data }; // fallback for old browsers\n }\n};\nconst mapBinary = (data, binaryType) => {\n switch (binaryType) {\n case \"blob\":\n if (data instanceof Blob) {\n // from WebSocket + binaryType \"blob\"\n return data;\n }\n else {\n // from HTTP long-polling or WebTransport\n return new Blob([data]);\n }\n case \"arraybuffer\":\n default:\n if (data instanceof ArrayBuffer) {\n // from HTTP long-polling (base64) or WebSocket + binaryType \"arraybuffer\"\n return data;\n }\n else {\n // from WebTransport (Uint8Array)\n return data.buffer;\n }\n }\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.encodePacket = exports.encodePacketToBinary = void 0;\nconst commons_js_1 = require(\"./commons.js\");\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n Object.prototype.toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\n// ArrayBuffer.isView method is not defined in IE10\nconst isView = obj => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj && obj.buffer instanceof ArrayBuffer;\n};\nconst encodePacket = ({ type, data }, supportsBinary, callback) => {\n if (withNativeBlob && data instanceof Blob) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(data, callback);\n }\n }\n else if (withNativeArrayBuffer &&\n (data instanceof ArrayBuffer || isView(data))) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(new Blob([data]), callback);\n }\n }\n // plain string\n return callback(commons_js_1.PACKET_TYPES[type] + (data || \"\"));\n};\nexports.encodePacket = encodePacket;\nconst encodeBlobAsBase64 = (data, callback) => {\n const fileReader = new FileReader();\n fileReader.onload = function () {\n const content = fileReader.result.split(\",\")[1];\n callback(\"b\" + (content || \"\"));\n };\n return fileReader.readAsDataURL(data);\n};\nfunction toArray(data) {\n if (data instanceof Uint8Array) {\n return data;\n }\n else if (data instanceof ArrayBuffer) {\n return new Uint8Array(data);\n }\n else {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n }\n}\nlet TEXT_ENCODER;\nfunction encodePacketToBinary(packet, callback) {\n if (withNativeBlob && packet.data instanceof Blob) {\n return packet.data\n .arrayBuffer()\n .then(toArray)\n .then(callback);\n }\n else if (withNativeArrayBuffer &&\n (packet.data instanceof ArrayBuffer || isView(packet.data))) {\n return callback(toArray(packet.data));\n }\n encodePacket(packet, false, encoded => {\n if (!TEXT_ENCODER) {\n TEXT_ENCODER = new TextEncoder();\n }\n callback(TEXT_ENCODER.encode(encoded));\n });\n}\nexports.encodePacketToBinary = encodePacketToBinary;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodePayload = exports.decodePacket = exports.encodePayload = exports.encodePacket = exports.protocol = exports.createPacketDecoderStream = exports.createPacketEncoderStream = void 0;\nconst encodePacket_js_1 = require(\"./encodePacket.js\");\nObject.defineProperty(exports, \"encodePacket\", { enumerable: true, get: function () { return encodePacket_js_1.encodePacket; } });\nconst decodePacket_js_1 = require(\"./decodePacket.js\");\nObject.defineProperty(exports, \"decodePacket\", { enumerable: true, get: function () { return decodePacket_js_1.decodePacket; } });\nconst commons_js_1 = require(\"./commons.js\");\nconst SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text\nconst encodePayload = (packets, callback) => {\n // some packets may be added to the array while encoding, so the initial length must be saved\n const length = packets.length;\n const encodedPackets = new Array(length);\n let count = 0;\n packets.forEach((packet, i) => {\n // force base64 encoding for binary packets\n (0, encodePacket_js_1.encodePacket)(packet, false, encodedPacket => {\n encodedPackets[i] = encodedPacket;\n if (++count === length) {\n callback(encodedPackets.join(SEPARATOR));\n }\n });\n });\n};\nexports.encodePayload = encodePayload;\nconst decodePayload = (encodedPayload, binaryType) => {\n const encodedPackets = encodedPayload.split(SEPARATOR);\n const packets = [];\n for (let i = 0; i < encodedPackets.length; i++) {\n const decodedPacket = (0, decodePacket_js_1.decodePacket)(encodedPackets[i], binaryType);\n packets.push(decodedPacket);\n if (decodedPacket.type === \"error\") {\n break;\n }\n }\n return packets;\n};\nexports.decodePayload = decodePayload;\nfunction createPacketEncoderStream() {\n return new TransformStream({\n transform(packet, controller) {\n (0, encodePacket_js_1.encodePacketToBinary)(packet, encodedPacket => {\n const payloadLength = encodedPacket.length;\n let header;\n // inspired by the WebSocket format: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#decoding_payload_length\n if (payloadLength < 126) {\n header = new Uint8Array(1);\n new DataView(header.buffer).setUint8(0, payloadLength);\n }\n else if (payloadLength < 65536) {\n header = new Uint8Array(3);\n const view = new DataView(header.buffer);\n view.setUint8(0, 126);\n view.setUint16(1, payloadLength);\n }\n else {\n header = new Uint8Array(9);\n const view = new DataView(header.buffer);\n view.setUint8(0, 127);\n view.setBigUint64(1, BigInt(payloadLength));\n }\n // first bit indicates whether the payload is plain text (0) or binary (1)\n if (packet.data && typeof packet.data !== \"string\") {\n header[0] |= 0x80;\n }\n controller.enqueue(header);\n controller.enqueue(encodedPacket);\n });\n }\n });\n}\nexports.createPacketEncoderStream = createPacketEncoderStream;\nlet TEXT_DECODER;\nfunction totalLength(chunks) {\n return chunks.reduce((acc, chunk) => acc + chunk.length, 0);\n}\nfunction concatChunks(chunks, size) {\n if (chunks[0].length === size) {\n return chunks.shift();\n }\n const buffer = new Uint8Array(size);\n let j = 0;\n for (let i = 0; i < size; i++) {\n buffer[i] = chunks[0][j++];\n if (j === chunks[0].length) {\n chunks.shift();\n j = 0;\n }\n }\n if (chunks.length && j < chunks[0].length) {\n chunks[0] = chunks[0].slice(j);\n }\n return buffer;\n}\nfunction createPacketDecoderStream(maxPayload, binaryType) {\n if (!TEXT_DECODER) {\n TEXT_DECODER = new TextDecoder();\n }\n const chunks = [];\n let state = 0 /* READ_HEADER */;\n let expectedLength = -1;\n let isBinary = false;\n return new TransformStream({\n transform(chunk, controller) {\n chunks.push(chunk);\n while (true) {\n if (state === 0 /* READ_HEADER */) {\n if (totalLength(chunks) < 1) {\n break;\n }\n const header = concatChunks(chunks, 1);\n isBinary = (header[0] & 0x80) === 0x80;\n expectedLength = header[0] & 0x7f;\n if (expectedLength < 126) {\n state = 3 /* READ_PAYLOAD */;\n }\n else if (expectedLength === 126) {\n state = 1 /* READ_EXTENDED_LENGTH_16 */;\n }\n else {\n state = 2 /* READ_EXTENDED_LENGTH_64 */;\n }\n }\n else if (state === 1 /* READ_EXTENDED_LENGTH_16 */) {\n if (totalLength(chunks) < 2) {\n break;\n }\n const headerArray = concatChunks(chunks, 2);\n expectedLength = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length).getUint16(0);\n state = 3 /* READ_PAYLOAD */;\n }\n else if (state === 2 /* READ_EXTENDED_LENGTH_64 */) {\n if (totalLength(chunks) < 8) {\n break;\n }\n const headerArray = concatChunks(chunks, 8);\n const view = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length);\n const n = view.getUint32(0);\n if (n > Math.pow(2, 53 - 32) - 1) {\n // the maximum safe integer in JavaScript is 2^53 - 1\n controller.enqueue(commons_js_1.ERROR_PACKET);\n break;\n }\n expectedLength = n * Math.pow(2, 32) + view.getUint32(4);\n state = 3 /* READ_PAYLOAD */;\n }\n else {\n if (totalLength(chunks) < expectedLength) {\n break;\n }\n const data = concatChunks(chunks, expectedLength);\n controller.enqueue((0, decodePacket_js_1.decodePacket)(isBinary ? data : TEXT_DECODER.decode(data), binaryType));\n state = 0 /* READ_HEADER */;\n }\n if (expectedLength === 0 || expectedLength > maxPayload) {\n controller.enqueue(commons_js_1.ERROR_PACKET);\n break;\n }\n }\n }\n });\n}\nexports.createPacketDecoderStream = createPacketDecoderStream;\nexports.protocol = 4;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.jwtDecode = exports.InvalidTokenError = void 0;\nclass InvalidTokenError extends Error {\n}\nexports.InvalidTokenError = InvalidTokenError;\nInvalidTokenError.prototype.name = \"InvalidTokenError\";\nfunction b64DecodeUnicode(str) {\n return decodeURIComponent(atob(str).replace(/(.)/g, (m, p) => {\n let code = p.charCodeAt(0).toString(16).toUpperCase();\n if (code.length < 2) {\n code = \"0\" + code;\n }\n return \"%\" + code;\n }));\n}\nfunction base64UrlDecode(str) {\n let output = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += \"==\";\n break;\n case 3:\n output += \"=\";\n break;\n default:\n throw new Error(\"base64 string is not of the correct length\");\n }\n try {\n return b64DecodeUnicode(output);\n }\n catch (err) {\n return atob(output);\n }\n}\nfunction jwtDecode(token, options) {\n if (typeof token !== \"string\") {\n throw new InvalidTokenError(\"Invalid token specified: must be a string\");\n }\n options || (options = {});\n const pos = options.header === true ? 0 : 1;\n const part = token.split(\".\")[pos];\n if (typeof part !== \"string\") {\n throw new InvalidTokenError(`Invalid token specified: missing part #${pos + 1}`);\n }\n let decoded;\n try {\n decoded = base64UrlDecode(part);\n }\n catch (e) {\n throw new InvalidTokenError(`Invalid token specified: invalid base64 for part #${pos + 1} (${e.message})`);\n }\n try {\n return JSON.parse(decoded);\n }\n catch (e) {\n throw new InvalidTokenError(`Invalid token specified: invalid json for part #${pos + 1} (${e.message})`);\n }\n}\nexports.jwtDecode = jwtDecode;\n","\"use strict\";\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Backoff = Backoff;\nfunction Backoff(opts) {\n opts = opts || {};\n this.ms = opts.min || 100;\n this.max = opts.max || 10000;\n this.factor = opts.factor || 2;\n this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n this.attempts = 0;\n}\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\nBackoff.prototype.duration = function () {\n var ms = this.ms * Math.pow(this.factor, this.attempts++);\n if (this.jitter) {\n var rand = Math.random();\n var deviation = Math.floor(rand * this.jitter * ms);\n ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;\n }\n return Math.min(ms, this.max) | 0;\n};\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\nBackoff.prototype.reset = function () {\n this.attempts = 0;\n};\n/**\n * Set the minimum duration\n *\n * @api public\n */\nBackoff.prototype.setMin = function (min) {\n this.ms = min;\n};\n/**\n * Set the maximum duration\n *\n * @api public\n */\nBackoff.prototype.setMax = function (max) {\n this.max = max;\n};\n/**\n * Set the jitter\n *\n * @api public\n */\nBackoff.prototype.setJitter = function (jitter) {\n this.jitter = jitter;\n};\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WebTransport = exports.WebSocket = exports.NodeWebSocket = exports.XHR = exports.NodeXHR = exports.Fetch = exports.Socket = exports.Manager = exports.protocol = void 0;\nexports.io = lookup;\nexports.connect = lookup;\nexports.default = lookup;\nconst url_js_1 = require(\"./url.js\");\nconst manager_js_1 = require(\"./manager.js\");\nObject.defineProperty(exports, \"Manager\", { enumerable: true, get: function () { return manager_js_1.Manager; } });\nconst socket_js_1 = require(\"./socket.js\");\nObject.defineProperty(exports, \"Socket\", { enumerable: true, get: function () { return socket_js_1.Socket; } });\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"socket.io-client\"); // debug()\n/**\n * Managers cache.\n */\nconst cache = {};\nfunction lookup(uri, opts) {\n if (typeof uri === \"object\") {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n const parsed = (0, url_js_1.url)(uri, opts.path || \"/socket.io\");\n const source = parsed.source;\n const id = parsed.id;\n const path = parsed.path;\n const sameNamespace = cache[id] && path in cache[id][\"nsps\"];\n const newConnection = opts.forceNew ||\n opts[\"force new connection\"] ||\n false === opts.multiplex ||\n sameNamespace;\n let io;\n if (newConnection) {\n debug(\"ignoring socket cache for %s\", source);\n io = new manager_js_1.Manager(source, opts);\n }\n else {\n if (!cache[id]) {\n debug(\"new io instance for %s\", source);\n cache[id] = new manager_js_1.Manager(source, opts);\n }\n io = cache[id];\n }\n if (parsed.query && !opts.query) {\n opts.query = parsed.queryKey;\n }\n return io.socket(parsed.path, opts);\n}\n// so that \"lookup\" can be used both as a function (e.g. `io(...)`) and as a\n// namespace (e.g. `io.connect(...)`), for backward compatibility\nObject.assign(lookup, {\n Manager: manager_js_1.Manager,\n Socket: socket_js_1.Socket,\n io: lookup,\n connect: lookup,\n});\n/**\n * Protocol version.\n *\n * @public\n */\nvar socket_io_parser_1 = require(\"socket.io-parser\");\nObject.defineProperty(exports, \"protocol\", { enumerable: true, get: function () { return socket_io_parser_1.protocol; } });\nvar engine_io_client_1 = require(\"engine.io-client\");\nObject.defineProperty(exports, \"Fetch\", { enumerable: true, get: function () { return engine_io_client_1.Fetch; } });\nObject.defineProperty(exports, \"NodeXHR\", { enumerable: true, get: function () { return engine_io_client_1.NodeXHR; } });\nObject.defineProperty(exports, \"XHR\", { enumerable: true, get: function () { return engine_io_client_1.XHR; } });\nObject.defineProperty(exports, \"NodeWebSocket\", { enumerable: true, get: function () { return engine_io_client_1.NodeWebSocket; } });\nObject.defineProperty(exports, \"WebSocket\", { enumerable: true, get: function () { return engine_io_client_1.WebSocket; } });\nObject.defineProperty(exports, \"WebTransport\", { enumerable: true, get: function () { return engine_io_client_1.WebTransport; } });\n\nmodule.exports = lookup;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Manager = void 0;\nconst engine_io_client_1 = require(\"engine.io-client\");\nconst socket_js_1 = require(\"./socket.js\");\nconst parser = __importStar(require(\"socket.io-parser\"));\nconst on_js_1 = require(\"./on.js\");\nconst backo2_js_1 = require(\"./contrib/backo2.js\");\nconst component_emitter_1 = require(\"@socket.io/component-emitter\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"socket.io-client:manager\"); // debug()\nclass Manager extends component_emitter_1.Emitter {\n constructor(uri, opts) {\n var _a;\n super();\n this.nsps = {};\n this.subs = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n opts.path = opts.path || \"/socket.io\";\n this.opts = opts;\n (0, engine_io_client_1.installTimerFunctions)(this, opts);\n this.reconnection(opts.reconnection !== false);\n this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n this.reconnectionDelay(opts.reconnectionDelay || 1000);\n this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n this.randomizationFactor((_a = opts.randomizationFactor) !== null && _a !== void 0 ? _a : 0.5);\n this.backoff = new backo2_js_1.Backoff({\n min: this.reconnectionDelay(),\n max: this.reconnectionDelayMax(),\n jitter: this.randomizationFactor(),\n });\n this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n this._readyState = \"closed\";\n this.uri = uri;\n const _parser = opts.parser || parser;\n this.encoder = new _parser.Encoder();\n this.decoder = new _parser.Decoder();\n this._autoConnect = opts.autoConnect !== false;\n if (this._autoConnect)\n this.open();\n }\n reconnection(v) {\n if (!arguments.length)\n return this._reconnection;\n this._reconnection = !!v;\n if (!v) {\n this.skipReconnect = true;\n }\n return this;\n }\n reconnectionAttempts(v) {\n if (v === undefined)\n return this._reconnectionAttempts;\n this._reconnectionAttempts = v;\n return this;\n }\n reconnectionDelay(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelay;\n this._reconnectionDelay = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMin(v);\n return this;\n }\n randomizationFactor(v) {\n var _a;\n if (v === undefined)\n return this._randomizationFactor;\n this._randomizationFactor = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setJitter(v);\n return this;\n }\n reconnectionDelayMax(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelayMax;\n this._reconnectionDelayMax = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMax(v);\n return this;\n }\n timeout(v) {\n if (!arguments.length)\n return this._timeout;\n this._timeout = v;\n return this;\n }\n /**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @private\n */\n maybeReconnectOnOpen() {\n // Only try to reconnect if it's the first time we're connecting\n if (!this._reconnecting &&\n this._reconnection &&\n this.backoff.attempts === 0) {\n // keeps reconnection from firing twice for the same reconnection loop\n this.reconnect();\n }\n }\n /**\n * Sets the current transport `socket`.\n *\n * @param {Function} fn - optional, callback\n * @return self\n * @public\n */\n open(fn) {\n debug(\"readyState %s\", this._readyState);\n if (~this._readyState.indexOf(\"open\"))\n return this;\n debug(\"opening %s\", this.uri);\n this.engine = new engine_io_client_1.Socket(this.uri, this.opts);\n const socket = this.engine;\n const self = this;\n this._readyState = \"opening\";\n this.skipReconnect = false;\n // emit `open`\n const openSubDestroy = (0, on_js_1.on)(socket, \"open\", function () {\n self.onopen();\n fn && fn();\n });\n const onError = (err) => {\n debug(\"error\");\n this.cleanup();\n this._readyState = \"closed\";\n this.emitReserved(\"error\", err);\n if (fn) {\n fn(err);\n }\n else {\n // Only do this if there is no fn to handle the error\n this.maybeReconnectOnOpen();\n }\n };\n // emit `error`\n const errorSub = (0, on_js_1.on)(socket, \"error\", onError);\n if (false !== this._timeout) {\n const timeout = this._timeout;\n debug(\"connect attempt will timeout after %d\", timeout);\n // set timer\n const timer = this.setTimeoutFn(() => {\n debug(\"connect attempt timed out after %d\", timeout);\n openSubDestroy();\n onError(new Error(\"timeout\"));\n socket.close();\n }, timeout);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(() => {\n this.clearTimeoutFn(timer);\n });\n }\n this.subs.push(openSubDestroy);\n this.subs.push(errorSub);\n return this;\n }\n /**\n * Alias for open()\n *\n * @return self\n * @public\n */\n connect(fn) {\n return this.open(fn);\n }\n /**\n * Called upon transport open.\n *\n * @private\n */\n onopen() {\n debug(\"open\");\n // clear old subs\n this.cleanup();\n // mark as open\n this._readyState = \"open\";\n this.emitReserved(\"open\");\n // add new subs\n const socket = this.engine;\n this.subs.push((0, on_js_1.on)(socket, \"ping\", this.onping.bind(this)), (0, on_js_1.on)(socket, \"data\", this.ondata.bind(this)), (0, on_js_1.on)(socket, \"error\", this.onerror.bind(this)), (0, on_js_1.on)(socket, \"close\", this.onclose.bind(this)), \n // @ts-ignore\n (0, on_js_1.on)(this.decoder, \"decoded\", this.ondecoded.bind(this)));\n }\n /**\n * Called upon a ping.\n *\n * @private\n */\n onping() {\n this.emitReserved(\"ping\");\n }\n /**\n * Called with data.\n *\n * @private\n */\n ondata(data) {\n try {\n this.decoder.add(data);\n }\n catch (e) {\n this.onclose(\"parse error\", e);\n }\n }\n /**\n * Called when parser fully decodes a packet.\n *\n * @private\n */\n ondecoded(packet) {\n // the nextTick call prevents an exception in a user-provided event listener from triggering a disconnection due to a \"parse error\"\n (0, engine_io_client_1.nextTick)(() => {\n this.emitReserved(\"packet\", packet);\n }, this.setTimeoutFn);\n }\n /**\n * Called upon socket error.\n *\n * @private\n */\n onerror(err) {\n debug(\"error\", err);\n this.emitReserved(\"error\", err);\n }\n /**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @public\n */\n socket(nsp, opts) {\n let socket = this.nsps[nsp];\n if (!socket) {\n socket = new socket_js_1.Socket(this, nsp, opts);\n this.nsps[nsp] = socket;\n }\n else if (this._autoConnect && !socket.active) {\n socket.connect();\n }\n return socket;\n }\n /**\n * Called upon a socket close.\n *\n * @param socket\n * @private\n */\n _destroy(socket) {\n const nsps = Object.keys(this.nsps);\n for (const nsp of nsps) {\n const socket = this.nsps[nsp];\n if (socket.active) {\n debug(\"socket %s is still active, skipping close\", nsp);\n return;\n }\n }\n this._close();\n }\n /**\n * Writes a packet.\n *\n * @param packet\n * @private\n */\n _packet(packet) {\n debug(\"writing packet %j\", packet);\n const encodedPackets = this.encoder.encode(packet);\n for (let i = 0; i < encodedPackets.length; i++) {\n this.engine.write(encodedPackets[i], packet.options);\n }\n }\n /**\n * Clean up transport subscriptions and packet buffer.\n *\n * @private\n */\n cleanup() {\n debug(\"cleanup\");\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs.length = 0;\n this.decoder.destroy();\n }\n /**\n * Close the current socket.\n *\n * @private\n */\n _close() {\n debug(\"disconnect\");\n this.skipReconnect = true;\n this._reconnecting = false;\n this.onclose(\"forced close\");\n }\n /**\n * Alias for close()\n *\n * @private\n */\n disconnect() {\n return this._close();\n }\n /**\n * Called when:\n *\n * - the low-level engine is closed\n * - the parser encountered a badly formatted packet\n * - all sockets are disconnected\n *\n * @private\n */\n onclose(reason, description) {\n var _a;\n debug(\"closed due to %s\", reason);\n this.cleanup();\n (_a = this.engine) === null || _a === void 0 ? void 0 : _a.close();\n this.backoff.reset();\n this._readyState = \"closed\";\n this.emitReserved(\"close\", reason, description);\n if (this._reconnection && !this.skipReconnect) {\n this.reconnect();\n }\n }\n /**\n * Attempt a reconnection.\n *\n * @private\n */\n reconnect() {\n if (this._reconnecting || this.skipReconnect)\n return this;\n const self = this;\n if (this.backoff.attempts >= this._reconnectionAttempts) {\n debug(\"reconnect failed\");\n this.backoff.reset();\n this.emitReserved(\"reconnect_failed\");\n this._reconnecting = false;\n }\n else {\n const delay = this.backoff.duration();\n debug(\"will wait %dms before reconnect attempt\", delay);\n this._reconnecting = true;\n const timer = this.setTimeoutFn(() => {\n if (self.skipReconnect)\n return;\n debug(\"attempting reconnect\");\n this.emitReserved(\"reconnect_attempt\", self.backoff.attempts);\n // check again for the case socket closed in above events\n if (self.skipReconnect)\n return;\n self.open((err) => {\n if (err) {\n debug(\"reconnect attempt error\");\n self._reconnecting = false;\n self.reconnect();\n this.emitReserved(\"reconnect_error\", err);\n }\n else {\n debug(\"reconnect success\");\n self.onreconnect();\n }\n });\n }, delay);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(() => {\n this.clearTimeoutFn(timer);\n });\n }\n }\n /**\n * Called upon successful reconnect.\n *\n * @private\n */\n onreconnect() {\n const attempt = this.backoff.attempts;\n this._reconnecting = false;\n this.backoff.reset();\n this.emitReserved(\"reconnect\", attempt);\n }\n}\nexports.Manager = Manager;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.on = on;\nfunction on(obj, ev, fn) {\n obj.on(ev, fn);\n return function subDestroy() {\n obj.off(ev, fn);\n };\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Socket = void 0;\nconst socket_io_parser_1 = require(\"socket.io-parser\");\nconst on_js_1 = require(\"./on.js\");\nconst component_emitter_1 = require(\"@socket.io/component-emitter\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"socket.io-client:socket\"); // debug()\n/**\n * Internal events.\n * These events can't be emitted by the user.\n */\nconst RESERVED_EVENTS = Object.freeze({\n connect: 1,\n connect_error: 1,\n disconnect: 1,\n disconnecting: 1,\n // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener\n newListener: 1,\n removeListener: 1,\n});\n/**\n * A Socket is the fundamental class for interacting with the server.\n *\n * A Socket belongs to a certain Namespace (by default /) and uses an underlying {@link Manager} to communicate.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(\"connected\");\n * });\n *\n * // send an event to the server\n * socket.emit(\"foo\", \"bar\");\n *\n * socket.on(\"foobar\", () => {\n * // an event was received from the server\n * });\n *\n * // upon disconnection\n * socket.on(\"disconnect\", (reason) => {\n * console.log(`disconnected due to ${reason}`);\n * });\n */\nclass Socket extends component_emitter_1.Emitter {\n /**\n * `Socket` constructor.\n */\n constructor(io, nsp, opts) {\n super();\n /**\n * Whether the socket is currently connected to the server.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.connected); // true\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.connected); // false\n * });\n */\n this.connected = false;\n /**\n * Whether the connection state was recovered after a temporary disconnection. In that case, any missed packets will\n * be transmitted by the server.\n */\n this.recovered = false;\n /**\n * Buffer for packets received before the CONNECT packet\n */\n this.receiveBuffer = [];\n /**\n * Buffer for packets that will be sent once the socket is connected\n */\n this.sendBuffer = [];\n /**\n * The queue of packets to be sent with retry in case of failure.\n *\n * Packets are sent one by one, each waiting for the server acknowledgement, in order to guarantee the delivery order.\n * @private\n */\n this._queue = [];\n /**\n * A sequence to generate the ID of the {@link QueuedPacket}.\n * @private\n */\n this._queueSeq = 0;\n this.ids = 0;\n /**\n * A map containing acknowledgement handlers.\n *\n * The `withError` attribute is used to differentiate handlers that accept an error as first argument:\n *\n * - `socket.emit(\"test\", (err, value) => { ... })` with `ackTimeout` option\n * - `socket.timeout(5000).emit(\"test\", (err, value) => { ... })`\n * - `const value = await socket.emitWithAck(\"test\")`\n *\n * From those that don't:\n *\n * - `socket.emit(\"test\", (value) => { ... });`\n *\n * In the first case, the handlers will be called with an error when:\n *\n * - the timeout is reached\n * - the socket gets disconnected\n *\n * In the second case, the handlers will be simply discarded upon disconnection, since the client will never receive\n * an acknowledgement from the server.\n *\n * @private\n */\n this.acks = {};\n this.flags = {};\n this.io = io;\n this.nsp = nsp;\n if (opts && opts.auth) {\n this.auth = opts.auth;\n }\n this._opts = Object.assign({}, opts);\n if (this.io._autoConnect)\n this.open();\n }\n /**\n * Whether the socket is currently disconnected\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.disconnected); // false\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.disconnected); // true\n * });\n */\n get disconnected() {\n return !this.connected;\n }\n /**\n * Subscribe to open, close and packet events\n *\n * @private\n */\n subEvents() {\n if (this.subs)\n return;\n const io = this.io;\n this.subs = [\n (0, on_js_1.on)(io, \"open\", this.onopen.bind(this)),\n (0, on_js_1.on)(io, \"packet\", this.onpacket.bind(this)),\n (0, on_js_1.on)(io, \"error\", this.onerror.bind(this)),\n (0, on_js_1.on)(io, \"close\", this.onclose.bind(this)),\n ];\n }\n /**\n * Whether the Socket will try to reconnect when its Manager connects or reconnects.\n *\n * @example\n * const socket = io();\n *\n * console.log(socket.active); // true\n *\n * socket.on(\"disconnect\", (reason) => {\n * if (reason === \"io server disconnect\") {\n * // the disconnection was initiated by the server, you need to manually reconnect\n * console.log(socket.active); // false\n * }\n * // else the socket will automatically try to reconnect\n * console.log(socket.active); // true\n * });\n */\n get active() {\n return !!this.subs;\n }\n /**\n * \"Opens\" the socket.\n *\n * @example\n * const socket = io({\n * autoConnect: false\n * });\n *\n * socket.connect();\n */\n connect() {\n if (this.connected)\n return this;\n this.subEvents();\n if (!this.io[\"_reconnecting\"])\n this.io.open(); // ensure open\n if (\"open\" === this.io._readyState)\n this.onopen();\n return this;\n }\n /**\n * Alias for {@link connect()}.\n */\n open() {\n return this.connect();\n }\n /**\n * Sends a `message` event.\n *\n * This method mimics the WebSocket.send() method.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send\n *\n * @example\n * socket.send(\"hello\");\n *\n * // this is equivalent to\n * socket.emit(\"message\", \"hello\");\n *\n * @return self\n */\n send(...args) {\n args.unshift(\"message\");\n this.emit.apply(this, args);\n return this;\n }\n /**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @example\n * socket.emit(\"hello\", \"world\");\n *\n * // all serializable datastructures are supported (no need to call JSON.stringify)\n * socket.emit(\"hello\", 1, \"2\", { 3: [\"4\"], 5: Uint8Array.from([6]) });\n *\n * // with an acknowledgement from the server\n * socket.emit(\"hello\", \"world\", (val) => {\n * // ...\n * });\n *\n * @return self\n */\n emit(ev, ...args) {\n var _a, _b, _c;\n if (RESERVED_EVENTS.hasOwnProperty(ev)) {\n throw new Error('\"' + ev.toString() + '\" is a reserved event name');\n }\n args.unshift(ev);\n if (this._opts.retries && !this.flags.fromQueue && !this.flags.volatile) {\n this._addToQueue(args);\n return this;\n }\n const packet = {\n type: socket_io_parser_1.PacketType.EVENT,\n data: args,\n };\n packet.options = {};\n packet.options.compress = this.flags.compress !== false;\n // event ack callback\n if (\"function\" === typeof args[args.length - 1]) {\n const id = this.ids++;\n debug(\"emitting packet with ack id %d\", id);\n const ack = args.pop();\n this._registerAckCallback(id, ack);\n packet.id = id;\n }\n const isTransportWritable = (_b = (_a = this.io.engine) === null || _a === void 0 ? void 0 : _a.transport) === null || _b === void 0 ? void 0 : _b.writable;\n const isConnected = this.connected && !((_c = this.io.engine) === null || _c === void 0 ? void 0 : _c._hasPingExpired());\n const discardPacket = this.flags.volatile && !isTransportWritable;\n if (discardPacket) {\n debug(\"discard packet as the transport is not currently writable\");\n }\n else if (isConnected) {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n }\n else {\n this.sendBuffer.push(packet);\n }\n this.flags = {};\n return this;\n }\n /**\n * @private\n */\n _registerAckCallback(id, ack) {\n var _a;\n const timeout = (_a = this.flags.timeout) !== null && _a !== void 0 ? _a : this._opts.ackTimeout;\n if (timeout === undefined) {\n this.acks[id] = ack;\n return;\n }\n // @ts-ignore\n const timer = this.io.setTimeoutFn(() => {\n delete this.acks[id];\n for (let i = 0; i < this.sendBuffer.length; i++) {\n if (this.sendBuffer[i].id === id) {\n debug(\"removing packet with ack id %d from the buffer\", id);\n this.sendBuffer.splice(i, 1);\n }\n }\n debug(\"event with ack id %d has timed out after %d ms\", id, timeout);\n ack.call(this, new Error(\"operation has timed out\"));\n }, timeout);\n const fn = (...args) => {\n // @ts-ignore\n this.io.clearTimeoutFn(timer);\n ack.apply(this, args);\n };\n fn.withError = true;\n this.acks[id] = fn;\n }\n /**\n * Emits an event and waits for an acknowledgement\n *\n * @example\n * // without timeout\n * const response = await socket.emitWithAck(\"hello\", \"world\");\n *\n * // with a specific timeout\n * try {\n * const response = await socket.timeout(1000).emitWithAck(\"hello\", \"world\");\n * } catch (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n *\n * @return a Promise that will be fulfilled when the server acknowledges the event\n */\n emitWithAck(ev, ...args) {\n return new Promise((resolve, reject) => {\n const fn = (arg1, arg2) => {\n return arg1 ? reject(arg1) : resolve(arg2);\n };\n fn.withError = true;\n args.push(fn);\n this.emit(ev, ...args);\n });\n }\n /**\n * Add the packet to the queue.\n * @param args\n * @private\n */\n _addToQueue(args) {\n let ack;\n if (typeof args[args.length - 1] === \"function\") {\n ack = args.pop();\n }\n const packet = {\n id: this._queueSeq++,\n tryCount: 0,\n pending: false,\n args,\n flags: Object.assign({ fromQueue: true }, this.flags),\n };\n args.push((err, ...responseArgs) => {\n if (packet !== this._queue[0]) {\n return debug(\"packet [%d] already acknowledged\", packet.id);\n }\n const hasError = err !== null;\n if (hasError) {\n if (packet.tryCount > this._opts.retries) {\n debug(\"packet [%d] is discarded after %d tries\", packet.id, packet.tryCount);\n this._queue.shift();\n if (ack) {\n ack(err);\n }\n }\n }\n else {\n debug(\"packet [%d] was successfully sent\", packet.id);\n this._queue.shift();\n if (ack) {\n ack(null, ...responseArgs);\n }\n }\n packet.pending = false;\n return this._drainQueue();\n });\n this._queue.push(packet);\n this._drainQueue();\n }\n /**\n * Send the first packet of the queue, and wait for an acknowledgement from the server.\n * @param force - whether to resend a packet that has not been acknowledged yet\n *\n * @private\n */\n _drainQueue(force = false) {\n debug(\"draining queue\");\n if (!this.connected || this._queue.length === 0) {\n return;\n }\n const packet = this._queue[0];\n if (packet.pending && !force) {\n debug(\"packet [%d] has already been sent and is waiting for an ack\", packet.id);\n return;\n }\n packet.pending = true;\n packet.tryCount++;\n debug(\"sending packet [%d] (try n°%d)\", packet.id, packet.tryCount);\n this.flags = packet.flags;\n this.emit.apply(this, packet.args);\n }\n /**\n * Sends a packet.\n *\n * @param packet\n * @private\n */\n packet(packet) {\n packet.nsp = this.nsp;\n this.io._packet(packet);\n }\n /**\n * Called upon engine `open`.\n *\n * @private\n */\n onopen() {\n debug(\"transport is open - connecting\");\n if (typeof this.auth == \"function\") {\n this.auth((data) => {\n this._sendConnectPacket(data);\n });\n }\n else {\n this._sendConnectPacket(this.auth);\n }\n }\n /**\n * Sends a CONNECT packet to initiate the Socket.IO session.\n *\n * @param data\n * @private\n */\n _sendConnectPacket(data) {\n this.packet({\n type: socket_io_parser_1.PacketType.CONNECT,\n data: this._pid\n ? Object.assign({ pid: this._pid, offset: this._lastOffset }, data)\n : data,\n });\n }\n /**\n * Called upon engine or manager `error`.\n *\n * @param err\n * @private\n */\n onerror(err) {\n if (!this.connected) {\n this.emitReserved(\"connect_error\", err);\n }\n }\n /**\n * Called upon engine `close`.\n *\n * @param reason\n * @param description\n * @private\n */\n onclose(reason, description) {\n debug(\"close (%s)\", reason);\n this.connected = false;\n delete this.id;\n this.emitReserved(\"disconnect\", reason, description);\n this._clearAcks();\n }\n /**\n * Clears the acknowledgement handlers upon disconnection, since the client will never receive an acknowledgement from\n * the server.\n *\n * @private\n */\n _clearAcks() {\n Object.keys(this.acks).forEach((id) => {\n const isBuffered = this.sendBuffer.some((packet) => String(packet.id) === id);\n if (!isBuffered) {\n // note: handlers that do not accept an error as first argument are ignored here\n const ack = this.acks[id];\n delete this.acks[id];\n if (ack.withError) {\n ack.call(this, new Error(\"socket has been disconnected\"));\n }\n }\n });\n }\n /**\n * Called with socket packet.\n *\n * @param packet\n * @private\n */\n onpacket(packet) {\n const sameNamespace = packet.nsp === this.nsp;\n if (!sameNamespace)\n return;\n switch (packet.type) {\n case socket_io_parser_1.PacketType.CONNECT:\n if (packet.data && packet.data.sid) {\n this.onconnect(packet.data.sid, packet.data.pid);\n }\n else {\n this.emitReserved(\"connect_error\", new Error(\"It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)\"));\n }\n break;\n case socket_io_parser_1.PacketType.EVENT:\n case socket_io_parser_1.PacketType.BINARY_EVENT:\n this.onevent(packet);\n break;\n case socket_io_parser_1.PacketType.ACK:\n case socket_io_parser_1.PacketType.BINARY_ACK:\n this.onack(packet);\n break;\n case socket_io_parser_1.PacketType.DISCONNECT:\n this.ondisconnect();\n break;\n case socket_io_parser_1.PacketType.CONNECT_ERROR:\n this.destroy();\n const err = new Error(packet.data.message);\n // @ts-ignore\n err.data = packet.data.data;\n this.emitReserved(\"connect_error\", err);\n break;\n }\n }\n /**\n * Called upon a server event.\n *\n * @param packet\n * @private\n */\n onevent(packet) {\n const args = packet.data || [];\n debug(\"emitting event %j\", args);\n if (null != packet.id) {\n debug(\"attaching ack callback to event\");\n args.push(this.ack(packet.id));\n }\n if (this.connected) {\n this.emitEvent(args);\n }\n else {\n this.receiveBuffer.push(Object.freeze(args));\n }\n }\n emitEvent(args) {\n if (this._anyListeners && this._anyListeners.length) {\n const listeners = this._anyListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, args);\n }\n }\n super.emit.apply(this, args);\n if (this._pid && args.length && typeof args[args.length - 1] === \"string\") {\n this._lastOffset = args[args.length - 1];\n }\n }\n /**\n * Produces an ack callback to emit with an event.\n *\n * @private\n */\n ack(id) {\n const self = this;\n let sent = false;\n return function (...args) {\n // prevent double callbacks\n if (sent)\n return;\n sent = true;\n debug(\"sending ack %j\", args);\n self.packet({\n type: socket_io_parser_1.PacketType.ACK,\n id: id,\n data: args,\n });\n };\n }\n /**\n * Called upon a server acknowledgement.\n *\n * @param packet\n * @private\n */\n onack(packet) {\n const ack = this.acks[packet.id];\n if (typeof ack !== \"function\") {\n debug(\"bad ack %s\", packet.id);\n return;\n }\n delete this.acks[packet.id];\n debug(\"calling ack %s with %j\", packet.id, packet.data);\n // @ts-ignore FIXME ack is incorrectly inferred as 'never'\n if (ack.withError) {\n packet.data.unshift(null);\n }\n // @ts-ignore\n ack.apply(this, packet.data);\n }\n /**\n * Called upon server connect.\n *\n * @private\n */\n onconnect(id, pid) {\n debug(\"socket connected with id %s\", id);\n this.id = id;\n this.recovered = pid && this._pid === pid;\n this._pid = pid; // defined only if connection state recovery is enabled\n this.connected = true;\n this.emitBuffered();\n this._drainQueue(true);\n this.emitReserved(\"connect\");\n }\n /**\n * Emit buffered events (received and emitted).\n *\n * @private\n */\n emitBuffered() {\n this.receiveBuffer.forEach((args) => this.emitEvent(args));\n this.receiveBuffer = [];\n this.sendBuffer.forEach((packet) => {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n });\n this.sendBuffer = [];\n }\n /**\n * Called upon server disconnect.\n *\n * @private\n */\n ondisconnect() {\n debug(\"server disconnect (%s)\", this.nsp);\n this.destroy();\n this.onclose(\"io server disconnect\");\n }\n /**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @private\n */\n destroy() {\n if (this.subs) {\n // clean subscriptions to avoid reconnections\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs = undefined;\n }\n this.io[\"_destroy\"](this);\n }\n /**\n * Disconnects the socket manually. In that case, the socket will not try to reconnect.\n *\n * If this is the last active Socket instance of the {@link Manager}, the low-level connection will be closed.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"disconnect\", (reason) => {\n * // console.log(reason); prints \"io client disconnect\"\n * });\n *\n * socket.disconnect();\n *\n * @return self\n */\n disconnect() {\n if (this.connected) {\n debug(\"performing disconnect (%s)\", this.nsp);\n this.packet({ type: socket_io_parser_1.PacketType.DISCONNECT });\n }\n // remove socket from pool\n this.destroy();\n if (this.connected) {\n // fire events\n this.onclose(\"io client disconnect\");\n }\n return this;\n }\n /**\n * Alias for {@link disconnect()}.\n *\n * @return self\n */\n close() {\n return this.disconnect();\n }\n /**\n * Sets the compress flag.\n *\n * @example\n * socket.compress(false).emit(\"hello\");\n *\n * @param compress - if `true`, compresses the sending data\n * @return self\n */\n compress(compress) {\n this.flags.compress = compress;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the event message will be dropped when this socket is not\n * ready to send messages.\n *\n * @example\n * socket.volatile.emit(\"hello\"); // the server may or may not receive it\n *\n * @returns self\n */\n get volatile() {\n this.flags.volatile = true;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the callback will be called with an error when the\n * given number of milliseconds have elapsed without an acknowledgement from the server:\n *\n * @example\n * socket.timeout(5000).emit(\"my-event\", (err) => {\n * if (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n * });\n *\n * @returns self\n */\n timeout(timeout) {\n this.flags.timeout = timeout;\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * @example\n * socket.onAny((event, ...args) => {\n * console.log(`got ${event}`);\n * });\n *\n * @param listener\n */\n onAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * @example\n * socket.prependAny((event, ...args) => {\n * console.log(`got event ${event}`);\n * });\n *\n * @param listener\n */\n prependAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`got event ${event}`);\n * }\n *\n * socket.onAny(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAny(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAny();\n *\n * @param listener\n */\n offAny(listener) {\n if (!this._anyListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAny() {\n return this._anyListeners || [];\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.onAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n onAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.prependAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n prependAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`sent event ${event}`);\n * }\n *\n * socket.onAnyOutgoing(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAnyOutgoing(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAnyOutgoing();\n *\n * @param [listener] - the catch-all listener (optional)\n */\n offAnyOutgoing(listener) {\n if (!this._anyOutgoingListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyOutgoingListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyOutgoingListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAnyOutgoing() {\n return this._anyOutgoingListeners || [];\n }\n /**\n * Notify the listeners for each packet sent\n *\n * @param packet\n *\n * @private\n */\n notifyOutgoingListeners(packet) {\n if (this._anyOutgoingListeners && this._anyOutgoingListeners.length) {\n const listeners = this._anyOutgoingListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, packet.data);\n }\n }\n }\n}\nexports.Socket = Socket;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.url = url;\nconst engine_io_client_1 = require(\"engine.io-client\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"socket.io-client:url\"); // debug()\n/**\n * URL parser.\n *\n * @param uri - url\n * @param path - the request path of the connection\n * @param loc - An object meant to mimic window.location.\n * Defaults to window.location.\n * @public\n */\nfunction url(uri, path = \"\", loc) {\n let obj = uri;\n // default to window.location\n loc = loc || (typeof location !== \"undefined\" && location);\n if (null == uri)\n uri = loc.protocol + \"//\" + loc.host;\n // relative path support\n if (typeof uri === \"string\") {\n if (\"/\" === uri.charAt(0)) {\n if (\"/\" === uri.charAt(1)) {\n uri = loc.protocol + uri;\n }\n else {\n uri = loc.host + uri;\n }\n }\n if (!/^(https?|wss?):\\/\\//.test(uri)) {\n debug(\"protocol-less url %s\", uri);\n if (\"undefined\" !== typeof loc) {\n uri = loc.protocol + \"//\" + uri;\n }\n else {\n uri = \"https://\" + uri;\n }\n }\n // parse\n debug(\"parse %s\", uri);\n obj = (0, engine_io_client_1.parse)(uri);\n }\n // make sure we treat `localhost:80` and `localhost` equally\n if (!obj.port) {\n if (/^(http|ws)$/.test(obj.protocol)) {\n obj.port = \"80\";\n }\n else if (/^(http|ws)s$/.test(obj.protocol)) {\n obj.port = \"443\";\n }\n }\n obj.path = obj.path || \"/\";\n const ipv6 = obj.host.indexOf(\":\") !== -1;\n const host = ipv6 ? \"[\" + obj.host + \"]\" : obj.host;\n // define unique id\n obj.id = obj.protocol + \"://\" + host + \":\" + obj.port + path;\n // define href\n obj.href =\n obj.protocol +\n \"://\" +\n host +\n (loc && loc.port === obj.port ? \"\" : \":\" + obj.port);\n return obj;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.deconstructPacket = deconstructPacket;\nexports.reconstructPacket = reconstructPacket;\nconst is_binary_js_1 = require(\"./is-binary.js\");\n/**\n * Replaces every Buffer | ArrayBuffer | Blob | File in packet with a numbered placeholder.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @public\n */\nfunction deconstructPacket(packet) {\n const buffers = [];\n const packetData = packet.data;\n const pack = packet;\n pack.data = _deconstructPacket(packetData, buffers);\n pack.attachments = buffers.length; // number of binary 'attachments'\n return { packet: pack, buffers: buffers };\n}\nfunction _deconstructPacket(data, buffers) {\n if (!data)\n return data;\n if ((0, is_binary_js_1.isBinary)(data)) {\n const placeholder = { _placeholder: true, num: buffers.length };\n buffers.push(data);\n return placeholder;\n }\n else if (Array.isArray(data)) {\n const newData = new Array(data.length);\n for (let i = 0; i < data.length; i++) {\n newData[i] = _deconstructPacket(data[i], buffers);\n }\n return newData;\n }\n else if (typeof data === \"object\" && !(data instanceof Date)) {\n const newData = {};\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n newData[key] = _deconstructPacket(data[key], buffers);\n }\n }\n return newData;\n }\n return data;\n}\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @public\n */\nfunction reconstructPacket(packet, buffers) {\n packet.data = _reconstructPacket(packet.data, buffers);\n delete packet.attachments; // no longer useful\n return packet;\n}\nfunction _reconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (data && data._placeholder === true) {\n const isIndexValid = typeof data.num === \"number\" &&\n data.num >= 0 &&\n data.num < buffers.length;\n if (isIndexValid) {\n return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n }\n else {\n throw new Error(\"illegal attachments\");\n }\n }\n else if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n data[i] = _reconstructPacket(data[i], buffers);\n }\n }\n else if (typeof data === \"object\") {\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n data[key] = _reconstructPacket(data[key], buffers);\n }\n }\n }\n return data;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Decoder = exports.Encoder = exports.PacketType = exports.protocol = void 0;\nexports.isPacketValid = isPacketValid;\nconst component_emitter_1 = require(\"@socket.io/component-emitter\");\nconst binary_js_1 = require(\"./binary.js\");\nconst is_binary_js_1 = require(\"./is-binary.js\");\nconst debug_1 = require(\"debug\"); // debug()\nconst debug = (0, debug_1.default)(\"socket.io-parser\"); // debug()\n/**\n * These strings must not be used as event names, as they have a special meaning.\n */\nconst RESERVED_EVENTS = [\n \"connect\", // used on the client side\n \"connect_error\", // used on the client side\n \"disconnect\", // used on both sides\n \"disconnecting\", // used on the server side\n \"newListener\", // used by the Node.js EventEmitter\n \"removeListener\", // used by the Node.js EventEmitter\n];\n/**\n * Protocol version.\n *\n * @public\n */\nexports.protocol = 5;\nvar PacketType;\n(function (PacketType) {\n PacketType[PacketType[\"CONNECT\"] = 0] = \"CONNECT\";\n PacketType[PacketType[\"DISCONNECT\"] = 1] = \"DISCONNECT\";\n PacketType[PacketType[\"EVENT\"] = 2] = \"EVENT\";\n PacketType[PacketType[\"ACK\"] = 3] = \"ACK\";\n PacketType[PacketType[\"CONNECT_ERROR\"] = 4] = \"CONNECT_ERROR\";\n PacketType[PacketType[\"BINARY_EVENT\"] = 5] = \"BINARY_EVENT\";\n PacketType[PacketType[\"BINARY_ACK\"] = 6] = \"BINARY_ACK\";\n})(PacketType || (exports.PacketType = PacketType = {}));\n/**\n * A socket.io Encoder instance\n */\nclass Encoder {\n /**\n * Encoder constructor\n *\n * @param {function} replacer - custom replacer to pass down to JSON.parse\n */\n constructor(replacer) {\n this.replacer = replacer;\n }\n /**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n */\n encode(obj) {\n debug(\"encoding packet %j\", obj);\n if (obj.type === PacketType.EVENT || obj.type === PacketType.ACK) {\n if ((0, is_binary_js_1.hasBinary)(obj)) {\n return this.encodeAsBinary({\n type: obj.type === PacketType.EVENT\n ? PacketType.BINARY_EVENT\n : PacketType.BINARY_ACK,\n nsp: obj.nsp,\n data: obj.data,\n id: obj.id,\n });\n }\n }\n return [this.encodeAsString(obj)];\n }\n /**\n * Encode packet as string.\n */\n encodeAsString(obj) {\n // first is type\n let str = \"\" + obj.type;\n // attachments if we have them\n if (obj.type === PacketType.BINARY_EVENT ||\n obj.type === PacketType.BINARY_ACK) {\n str += obj.attachments + \"-\";\n }\n // if we have a namespace other than `/`\n // we append it followed by a comma `,`\n if (obj.nsp && \"/\" !== obj.nsp) {\n str += obj.nsp + \",\";\n }\n // immediately followed by the id\n if (null != obj.id) {\n str += obj.id;\n }\n // json data\n if (null != obj.data) {\n str += JSON.stringify(obj.data, this.replacer);\n }\n debug(\"encoded %j as %s\", obj, str);\n return str;\n }\n /**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n */\n encodeAsBinary(obj) {\n const deconstruction = (0, binary_js_1.deconstructPacket)(obj);\n const pack = this.encodeAsString(deconstruction.packet);\n const buffers = deconstruction.buffers;\n buffers.unshift(pack); // add packet info to beginning of data list\n return buffers; // write all the buffers\n }\n}\nexports.Encoder = Encoder;\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n */\nclass Decoder extends component_emitter_1.Emitter {\n /**\n * Decoder constructor\n */\n constructor(opts) {\n super();\n this.opts = Object.assign({\n reviver: undefined,\n maxAttachments: 10,\n }, typeof opts === \"function\" ? { reviver: opts } : opts);\n }\n /**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n */\n add(obj) {\n let packet;\n if (typeof obj === \"string\") {\n if (this.reconstructor) {\n throw new Error(\"got plaintext data when reconstructing a packet\");\n }\n packet = this.decodeString(obj);\n const isBinaryEvent = packet.type === PacketType.BINARY_EVENT;\n if (isBinaryEvent || packet.type === PacketType.BINARY_ACK) {\n packet.type = isBinaryEvent ? PacketType.EVENT : PacketType.ACK;\n // binary packet's json\n this.reconstructor = new BinaryReconstructor(packet);\n // no attachments, labeled binary but no binary data to follow\n if (packet.attachments === 0) {\n super.emitReserved(\"decoded\", packet);\n }\n }\n else {\n // non-binary full packet\n super.emitReserved(\"decoded\", packet);\n }\n }\n else if ((0, is_binary_js_1.isBinary)(obj) || obj.base64) {\n // raw binary data\n if (!this.reconstructor) {\n throw new Error(\"got binary data when not reconstructing a packet\");\n }\n else {\n packet = this.reconstructor.takeBinaryData(obj);\n if (packet) {\n // received final buffer\n this.reconstructor = null;\n super.emitReserved(\"decoded\", packet);\n }\n }\n }\n else {\n throw new Error(\"Unknown type: \" + obj);\n }\n }\n /**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n */\n decodeString(str) {\n let i = 0;\n // look up type\n const p = {\n type: Number(str.charAt(0)),\n };\n if (PacketType[p.type] === undefined) {\n throw new Error(\"unknown packet type \" + p.type);\n }\n // look up attachments if type binary\n if (p.type === PacketType.BINARY_EVENT ||\n p.type === PacketType.BINARY_ACK) {\n const start = i + 1;\n while (str.charAt(++i) !== \"-\" && i != str.length) { }\n const buf = str.substring(start, i);\n if (buf != Number(buf) || str.charAt(i) !== \"-\") {\n throw new Error(\"Illegal attachments\");\n }\n const n = Number(buf);\n if (!isInteger(n) || n < 0) {\n throw new Error(\"Illegal attachments\");\n }\n else if (n > this.opts.maxAttachments) {\n throw new Error(\"too many attachments\");\n }\n p.attachments = n;\n }\n // look up namespace (if any)\n if (\"/\" === str.charAt(i + 1)) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (\",\" === c)\n break;\n if (i === str.length)\n break;\n }\n p.nsp = str.substring(start, i);\n }\n else {\n p.nsp = \"/\";\n }\n // look up id\n const next = str.charAt(i + 1);\n if (\"\" !== next && Number(next) == next) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (null == c || Number(c) != c) {\n --i;\n break;\n }\n if (i === str.length)\n break;\n }\n p.id = Number(str.substring(start, i + 1));\n }\n // look up json data\n if (str.charAt(++i)) {\n const payload = this.tryParse(str.substr(i));\n if (Decoder.isPayloadValid(p.type, payload)) {\n p.data = payload;\n }\n else {\n throw new Error(\"invalid payload\");\n }\n }\n debug(\"decoded %s as %j\", str, p);\n return p;\n }\n tryParse(str) {\n try {\n return JSON.parse(str, this.opts.reviver);\n }\n catch (e) {\n return false;\n }\n }\n static isPayloadValid(type, payload) {\n switch (type) {\n case PacketType.CONNECT:\n return isObject(payload);\n case PacketType.DISCONNECT:\n return payload === undefined;\n case PacketType.CONNECT_ERROR:\n return typeof payload === \"string\" || isObject(payload);\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n return (Array.isArray(payload) &&\n (typeof payload[0] === \"number\" ||\n (typeof payload[0] === \"string\" &&\n RESERVED_EVENTS.indexOf(payload[0]) === -1)));\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n return Array.isArray(payload);\n }\n }\n /**\n * Deallocates a parser's resources\n */\n destroy() {\n if (this.reconstructor) {\n this.reconstructor.finishedReconstruction();\n this.reconstructor = null;\n }\n }\n}\nexports.Decoder = Decoder;\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n */\nclass BinaryReconstructor {\n constructor(packet) {\n this.packet = packet;\n this.buffers = [];\n this.reconPack = packet;\n }\n /**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n * a reconstructed packet object if all buffers have been received.\n */\n takeBinaryData(binData) {\n this.buffers.push(binData);\n if (this.buffers.length === this.reconPack.attachments) {\n // done with buffer list\n const packet = (0, binary_js_1.reconstructPacket)(this.reconPack, this.buffers);\n this.finishedReconstruction();\n return packet;\n }\n return null;\n }\n /**\n * Cleans up binary packet reconstruction variables.\n */\n finishedReconstruction() {\n this.reconPack = null;\n this.buffers = [];\n }\n}\nfunction isNamespaceValid(nsp) {\n return typeof nsp === \"string\";\n}\n// see https://caniuse.com/mdn-javascript_builtins_number_isinteger\nconst isInteger = Number.isInteger ||\n function (value) {\n return (typeof value === \"number\" &&\n isFinite(value) &&\n Math.floor(value) === value);\n };\nfunction isAckIdValid(id) {\n return id === undefined || isInteger(id);\n}\n// see https://stackoverflow.com/questions/8511281/check-if-a-value-is-an-object-in-javascript\nfunction isObject(value) {\n return Object.prototype.toString.call(value) === \"[object Object]\";\n}\nfunction isDataValid(type, payload) {\n switch (type) {\n case PacketType.CONNECT:\n return payload === undefined || isObject(payload);\n case PacketType.DISCONNECT:\n return payload === undefined;\n case PacketType.EVENT:\n return (Array.isArray(payload) &&\n (typeof payload[0] === \"number\" ||\n (typeof payload[0] === \"string\" &&\n RESERVED_EVENTS.indexOf(payload[0]) === -1)));\n case PacketType.ACK:\n return Array.isArray(payload);\n case PacketType.CONNECT_ERROR:\n return typeof payload === \"string\" || isObject(payload);\n default:\n return false;\n }\n}\nfunction isPacketValid(packet) {\n return (isNamespaceValid(packet.nsp) &&\n isAckIdValid(packet.id) &&\n isDataValid(packet.type, packet.data));\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isBinary = isBinary;\nexports.hasBinary = hasBinary;\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst isView = (obj) => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj.buffer instanceof ArrayBuffer;\n};\nconst toString = Object.prototype.toString;\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeFile = typeof File === \"function\" ||\n (typeof File !== \"undefined\" &&\n toString.call(File) === \"[object FileConstructor]\");\n/**\n * Returns true if obj is a Buffer, an ArrayBuffer, a Blob or a File.\n *\n * @private\n */\nfunction isBinary(obj) {\n return ((withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj))) ||\n (withNativeBlob && obj instanceof Blob) ||\n (withNativeFile && obj instanceof File));\n}\nfunction hasBinary(obj, toJSON) {\n if (!obj || typeof obj !== \"object\") {\n return false;\n }\n if (Array.isArray(obj)) {\n for (let i = 0, l = obj.length; i < l; i++) {\n if (hasBinary(obj[i])) {\n return true;\n }\n }\n return false;\n }\n if (isBinary(obj)) {\n return true;\n }\n if (obj.toJSON &&\n typeof obj.toJSON === \"function\" &&\n arguments.length === 1) {\n return hasBinary(obj.toJSON(), true);\n }\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n return true;\n }\n }\n return false;\n}\n","\"use strict\";\n/**\n * uuidv7: An experimental implementation of the proposed UUID Version 7\n *\n * @license Apache-2.0\n * @copyright 2021-2023 LiosK\n * @packageDocumentation\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.uuidv4obj = exports.uuidv4 = exports.uuidv7obj = exports.uuidv7 = exports.V7Generator = exports.UUID = void 0;\nconst DIGITS = \"0123456789abcdef\";\n/** Represents a UUID as a 16-byte byte array. */\nclass UUID {\n /** @param bytes - The 16-byte byte array representation. */\n constructor(bytes) {\n this.bytes = bytes;\n }\n /**\n * Creates an object from the internal representation, a 16-byte byte array\n * containing the binary UUID representation in the big-endian byte order.\n *\n * This method does NOT shallow-copy the argument, and thus the created object\n * holds the reference to the underlying buffer.\n *\n * @throws TypeError if the length of the argument is not 16.\n */\n static ofInner(bytes) {\n if (bytes.length !== 16) {\n throw new TypeError(\"not 128-bit length\");\n }\n else {\n return new UUID(bytes);\n }\n }\n /**\n * Builds a byte array from UUIDv7 field values.\n *\n * @param unixTsMs - A 48-bit `unix_ts_ms` field value.\n * @param randA - A 12-bit `rand_a` field value.\n * @param randBHi - The higher 30 bits of 62-bit `rand_b` field value.\n * @param randBLo - The lower 32 bits of 62-bit `rand_b` field value.\n * @throws RangeError if any field value is out of the specified range.\n */\n static fromFieldsV7(unixTsMs, randA, randBHi, randBLo) {\n if (!Number.isInteger(unixTsMs) ||\n !Number.isInteger(randA) ||\n !Number.isInteger(randBHi) ||\n !Number.isInteger(randBLo) ||\n unixTsMs < 0 ||\n randA < 0 ||\n randBHi < 0 ||\n randBLo < 0 ||\n unixTsMs > 281474976710655 ||\n randA > 0xfff ||\n randBHi > 1073741823 ||\n randBLo > 4294967295) {\n throw new RangeError(\"invalid field value\");\n }\n const bytes = new Uint8Array(16);\n bytes[0] = unixTsMs / 2 ** 40;\n bytes[1] = unixTsMs / 2 ** 32;\n bytes[2] = unixTsMs / 2 ** 24;\n bytes[3] = unixTsMs / 2 ** 16;\n bytes[4] = unixTsMs / 2 ** 8;\n bytes[5] = unixTsMs;\n bytes[6] = 0x70 | (randA >>> 8);\n bytes[7] = randA;\n bytes[8] = 0x80 | (randBHi >>> 24);\n bytes[9] = randBHi >>> 16;\n bytes[10] = randBHi >>> 8;\n bytes[11] = randBHi;\n bytes[12] = randBLo >>> 24;\n bytes[13] = randBLo >>> 16;\n bytes[14] = randBLo >>> 8;\n bytes[15] = randBLo;\n return new UUID(bytes);\n }\n /**\n * Builds a byte array from a string representation.\n *\n * This method accepts the following formats:\n *\n * - 32-digit hexadecimal format without hyphens: `0189dcd553117d408db09496a2eef37b`\n * - 8-4-4-4-12 hyphenated format: `0189dcd5-5311-7d40-8db0-9496a2eef37b`\n * - Hyphenated format with surrounding braces: `{0189dcd5-5311-7d40-8db0-9496a2eef37b}`\n * - RFC 4122 URN format: `urn:uuid:0189dcd5-5311-7d40-8db0-9496a2eef37b`\n *\n * Leading and trailing whitespaces represents an error.\n *\n * @throws SyntaxError if the argument could not parse as a valid UUID string.\n */\n static parse(uuid) {\n var _a, _b, _c, _d;\n let hex = undefined;\n switch (uuid.length) {\n case 32:\n hex = (_a = /^[0-9a-f]{32}$/i.exec(uuid)) === null || _a === void 0 ? void 0 : _a[0];\n break;\n case 36:\n hex =\n (_b = /^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i\n .exec(uuid)) === null || _b === void 0 ? void 0 : _b.slice(1, 6).join(\"\");\n break;\n case 38:\n hex =\n (_c = /^\\{([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})\\}$/i\n .exec(uuid)) === null || _c === void 0 ? void 0 : _c.slice(1, 6).join(\"\");\n break;\n case 45:\n hex =\n (_d = /^urn:uuid:([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i\n .exec(uuid)) === null || _d === void 0 ? void 0 : _d.slice(1, 6).join(\"\");\n break;\n default:\n break;\n }\n if (hex) {\n const inner = new Uint8Array(16);\n for (let i = 0; i < 16; i += 4) {\n const n = parseInt(hex.substring(2 * i, 2 * i + 8), 16);\n inner[i + 0] = n >>> 24;\n inner[i + 1] = n >>> 16;\n inner[i + 2] = n >>> 8;\n inner[i + 3] = n;\n }\n return new UUID(inner);\n }\n else {\n throw new SyntaxError(\"could not parse UUID string\");\n }\n }\n /**\n * @returns The 8-4-4-4-12 canonical hexadecimal string representation\n * (`0189dcd5-5311-7d40-8db0-9496a2eef37b`).\n */\n toString() {\n let text = \"\";\n for (let i = 0; i < this.bytes.length; i++) {\n text += DIGITS.charAt(this.bytes[i] >>> 4);\n text += DIGITS.charAt(this.bytes[i] & 0xf);\n if (i === 3 || i === 5 || i === 7 || i === 9) {\n text += \"-\";\n }\n }\n return text;\n }\n /**\n * @returns The 32-digit hexadecimal representation without hyphens\n * (`0189dcd553117d408db09496a2eef37b`).\n */\n toHex() {\n let text = \"\";\n for (let i = 0; i < this.bytes.length; i++) {\n text += DIGITS.charAt(this.bytes[i] >>> 4);\n text += DIGITS.charAt(this.bytes[i] & 0xf);\n }\n return text;\n }\n /** @returns The 8-4-4-4-12 canonical hexadecimal string representation. */\n toJSON() {\n return this.toString();\n }\n /**\n * Reports the variant field value of the UUID or, if appropriate, \"NIL\" or\n * \"MAX\".\n *\n * For convenience, this method reports \"NIL\" or \"MAX\" if `this` represents\n * the Nil or Max UUID, although the Nil and Max UUIDs are technically\n * subsumed under the variants `0b0` and `0b111`, respectively.\n */\n getVariant() {\n const n = this.bytes[8] >>> 4;\n if (n < 0) {\n throw new Error(\"unreachable\");\n }\n else if (n <= 0b0111) {\n return this.bytes.every((e) => e === 0) ? \"NIL\" : \"VAR_0\";\n }\n else if (n <= 0b1011) {\n return \"VAR_10\";\n }\n else if (n <= 0b1101) {\n return \"VAR_110\";\n }\n else if (n <= 0b1111) {\n return this.bytes.every((e) => e === 0xff) ? \"MAX\" : \"VAR_RESERVED\";\n }\n else {\n throw new Error(\"unreachable\");\n }\n }\n /**\n * Returns the version field value of the UUID or `undefined` if the UUID does\n * not have the variant field value of `0b10`.\n */\n getVersion() {\n return this.getVariant() === \"VAR_10\" ? this.bytes[6] >>> 4 : undefined;\n }\n /** Creates an object from `this`. */\n clone() {\n return new UUID(this.bytes.slice(0));\n }\n /** Returns true if `this` is equivalent to `other`. */\n equals(other) {\n return this.compareTo(other) === 0;\n }\n /**\n * Returns a negative integer, zero, or positive integer if `this` is less\n * than, equal to, or greater than `other`, respectively.\n */\n compareTo(other) {\n for (let i = 0; i < 16; i++) {\n const diff = this.bytes[i] - other.bytes[i];\n if (diff !== 0) {\n return Math.sign(diff);\n }\n }\n return 0;\n }\n}\nexports.UUID = UUID;\n/**\n * Encapsulates the monotonic counter state.\n *\n * This class provides APIs to utilize a separate counter state from that of the\n * global generator used by {@link uuidv7} and {@link uuidv7obj}. In addition to\n * the default {@link generate} method, this class has {@link generateOrAbort}\n * that is useful to absolutely guarantee the monotonically increasing order of\n * generated UUIDs. See their respective documentation for details.\n */\nclass V7Generator {\n /**\n * Creates a generator object with the default random number generator, or\n * with the specified one if passed as an argument. The specified random\n * number generator should be cryptographically strong and securely seeded.\n */\n constructor(randomNumberGenerator) {\n this.timestamp = 0;\n this.counter = 0;\n this.random = randomNumberGenerator !== null && randomNumberGenerator !== void 0 ? randomNumberGenerator : getDefaultRandom();\n }\n /**\n * Generates a new UUIDv7 object from the current timestamp, or resets the\n * generator upon significant timestamp rollback.\n *\n * This method returns a monotonically increasing UUID by reusing the previous\n * timestamp even if the up-to-date timestamp is smaller than the immediately\n * preceding UUID's. However, when such a clock rollback is considered\n * significant (i.e., by more than ten seconds), this method resets the\n * generator and returns a new UUID based on the given timestamp, breaking the\n * increasing order of UUIDs.\n *\n * See {@link generateOrAbort} for the other mode of generation and\n * {@link generateOrResetCore} for the low-level primitive.\n */\n generate() {\n return this.generateOrResetCore(Date.now(), 10000);\n }\n /**\n * Generates a new UUIDv7 object from the current timestamp, or returns\n * `undefined` upon significant timestamp rollback.\n *\n * This method returns a monotonically increasing UUID by reusing the previous\n * timestamp even if the up-to-date timestamp is smaller than the immediately\n * preceding UUID's. However, when such a clock rollback is considered\n * significant (i.e., by more than ten seconds), this method aborts and\n * returns `undefined` immediately.\n *\n * See {@link generate} for the other mode of generation and\n * {@link generateOrAbortCore} for the low-level primitive.\n */\n generateOrAbort() {\n return this.generateOrAbortCore(Date.now(), 10000);\n }\n /**\n * Generates a new UUIDv7 object from the `unixTsMs` passed, or resets the\n * generator upon significant timestamp rollback.\n *\n * This method is equivalent to {@link generate} except that it takes a custom\n * timestamp and clock rollback allowance.\n *\n * @param rollbackAllowance - The amount of `unixTsMs` rollback that is\n * considered significant. A suggested value is `10_000` (milliseconds).\n * @throws RangeError if `unixTsMs` is not a 48-bit positive integer.\n */\n generateOrResetCore(unixTsMs, rollbackAllowance) {\n let value = this.generateOrAbortCore(unixTsMs, rollbackAllowance);\n if (value === undefined) {\n // reset state and resume\n this.timestamp = 0;\n value = this.generateOrAbortCore(unixTsMs, rollbackAllowance);\n }\n return value;\n }\n /**\n * Generates a new UUIDv7 object from the `unixTsMs` passed, or returns\n * `undefined` upon significant timestamp rollback.\n *\n * This method is equivalent to {@link generateOrAbort} except that it takes a\n * custom timestamp and clock rollback allowance.\n *\n * @param rollbackAllowance - The amount of `unixTsMs` rollback that is\n * considered significant. A suggested value is `10_000` (milliseconds).\n * @throws RangeError if `unixTsMs` is not a 48-bit positive integer.\n */\n generateOrAbortCore(unixTsMs, rollbackAllowance) {\n const MAX_COUNTER = 4398046511103;\n if (!Number.isInteger(unixTsMs) ||\n unixTsMs < 1 ||\n unixTsMs > 281474976710655) {\n throw new RangeError(\"`unixTsMs` must be a 48-bit positive integer\");\n }\n else if (rollbackAllowance < 0 || rollbackAllowance > 281474976710655) {\n throw new RangeError(\"`rollbackAllowance` out of reasonable range\");\n }\n if (unixTsMs > this.timestamp) {\n this.timestamp = unixTsMs;\n this.resetCounter();\n }\n else if (unixTsMs + rollbackAllowance >= this.timestamp) {\n // go on with previous timestamp if new one is not much smaller\n this.counter++;\n if (this.counter > MAX_COUNTER) {\n // increment timestamp at counter overflow\n this.timestamp++;\n this.resetCounter();\n }\n }\n else {\n // abort if clock went backwards to unbearable extent\n return undefined;\n }\n return UUID.fromFieldsV7(this.timestamp, Math.trunc(this.counter / 2 ** 30), this.counter & (2 ** 30 - 1), this.random.nextUint32());\n }\n /** Initializes the counter at a 42-bit random integer. */\n resetCounter() {\n this.counter =\n this.random.nextUint32() * 0x400 + (this.random.nextUint32() & 0x3ff);\n }\n /**\n * Generates a new UUIDv4 object utilizing the random number generator inside.\n *\n * @internal\n */\n generateV4() {\n const bytes = new Uint8Array(Uint32Array.of(this.random.nextUint32(), this.random.nextUint32(), this.random.nextUint32(), this.random.nextUint32()).buffer);\n bytes[6] = 0x40 | (bytes[6] >>> 4);\n bytes[8] = 0x80 | (bytes[8] >>> 2);\n return UUID.ofInner(bytes);\n }\n}\nexports.V7Generator = V7Generator;\n/** Returns the default random number generator available in the environment. */\nconst getDefaultRandom = () => {\n // detect Web Crypto API\n if (typeof crypto !== \"undefined\" &&\n typeof crypto.getRandomValues !== \"undefined\") {\n return new BufferedCryptoRandom();\n }\n else {\n // fall back on Math.random() unless the flag is set to true\n if (typeof UUIDV7_DENY_WEAK_RNG !== \"undefined\" && UUIDV7_DENY_WEAK_RNG) {\n throw new Error(\"no cryptographically strong RNG available\");\n }\n return {\n nextUint32: () => Math.trunc(Math.random() * 65536) * 65536 +\n Math.trunc(Math.random() * 65536),\n };\n }\n};\n/**\n * Wraps `crypto.getRandomValues()` to enable buffering; this uses a small\n * buffer by default to avoid both unbearable throughput decline in some\n * environments and the waste of time and space for unused values.\n */\nclass BufferedCryptoRandom {\n constructor() {\n this.buffer = new Uint32Array(8);\n this.cursor = 0xffff;\n }\n nextUint32() {\n if (this.cursor >= this.buffer.length) {\n crypto.getRandomValues(this.buffer);\n this.cursor = 0;\n }\n return this.buffer[this.cursor++];\n }\n}\nlet defaultGenerator;\n/**\n * Generates a UUIDv7 string.\n *\n * @returns The 8-4-4-4-12 canonical hexadecimal string representation\n * (\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\").\n */\nconst uuidv7 = () => (0, exports.uuidv7obj)().toString();\nexports.uuidv7 = uuidv7;\n/** Generates a UUIDv7 object. */\nconst uuidv7obj = () => (defaultGenerator || (defaultGenerator = new V7Generator())).generate();\nexports.uuidv7obj = uuidv7obj;\n/**\n * Generates a UUIDv4 string.\n *\n * @returns The 8-4-4-4-12 canonical hexadecimal string representation\n * (\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\").\n */\nconst uuidv4 = () => (0, exports.uuidv4obj)().toString();\nexports.uuidv4 = uuidv4;\n/** Generates a UUIDv4 object. */\nconst uuidv4obj = () => (defaultGenerator || (defaultGenerator = new V7Generator())).generateV4();\nexports.uuidv4obj = uuidv4obj;\n","/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nexport function Emitter(obj) {\n if (obj) return mixin(obj);\n}\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n for (var key in Emitter.prototype) {\n obj[key] = Emitter.prototype[key];\n }\n return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\n .push(fn);\n return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function(event, fn){\n function on() {\n this.off(event, on);\n fn.apply(this, arguments);\n }\n\n on.fn = fn;\n this.on(event, on);\n return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n\n // all\n if (0 == arguments.length) {\n this._callbacks = {};\n return this;\n }\n\n // specific event\n var callbacks = this._callbacks['$' + event];\n if (!callbacks) return this;\n\n // remove all handlers\n if (1 == arguments.length) {\n delete this._callbacks['$' + event];\n return this;\n }\n\n // remove specific handler\n var cb;\n for (var i = 0; i < callbacks.length; i++) {\n cb = callbacks[i];\n if (cb === fn || cb.fn === fn) {\n callbacks.splice(i, 1);\n break;\n }\n }\n\n // Remove event specific arrays for event types that no\n // one is subscribed for to avoid memory leak.\n if (callbacks.length === 0) {\n delete this._callbacks['$' + event];\n }\n\n return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function(event){\n this._callbacks = this._callbacks || {};\n\n var args = new Array(arguments.length - 1)\n , callbacks = this._callbacks['$' + event];\n\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n\n if (callbacks) {\n callbacks = callbacks.slice(0);\n for (var i = 0, len = callbacks.length; i < len; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n\n return this;\n};\n\n// alias used for reserved events (protected method)\nEmitter.prototype.emitReserved = Emitter.prototype.emit;\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function(event){\n this._callbacks = this._callbacks || {};\n return this._callbacks['$' + event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function(event){\n return !! this.listeners(event).length;\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\tif (!(moduleId in __webpack_modules__)) {\n\t\tdelete __webpack_module_cache__[moduleId];\n\t\tvar e = new Error(\"Cannot find module '\" + moduleId + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./index.ts\");\n"],"names":["root","factory","exports","module","define","amd","a","i","self","Changeset","Retain","Skip","Insert","Builder","this","ops","addendum","removendum","prototype","keep","retain","len","push","delete","skip","str","length","add","insert","end","cs","inputLength","outputLength","Array","isArray","arguments","input","output","Object","create","constructor","value","enumerable","writable","configurable","TextTransform","ChangesetTransform","subrange","start","op","oplen","range","l","pos","Infinity","Math","max","derive","merge","otherCs","left","Error","newops","addPtr1","remPtr1","addPtr2","remPtr2","newaddendum","newremovendum","cs1","cs2","func","op2","op1","opstack1","map","clone","opstack2","min","shift","unshift","zip","substr","console","log","bind","newCs","transformAgainst","transformation","forEach","nextOp","writeOutput","readInput","apply","result","substract","changeset","invert","operation","inspect","j","string","symbol","join","pack","replace","toString","unpack","packed","components","split","opstring","matches","match","s","data","fromDiff","diff","d","inputCs","newRemovendum","newAddendum","addendumPointer","removendumPointer","ret","readAddendum","writeRemovendum","filter","concat","call","Operator","addPos","remPos","window","changesets","name","url","initText","snapshot","transform","side","compose","t","parseInt","diff_match_patch","Diff_Timeout","Diff_EditCost","Diff_DualThreshold","Match_Threshold","Match_Distance","Patch_DeleteThreshold","Patch_Margin","Match_MaxBits","maxbits","oldi","newi","getMaxBits","DIFF_DELETE","patch_obj","diffs","start1","start2","length1","length2","diff_main","text1","text2","opt_checklines","checklines","commonlength","diff_commonPrefix","commonprefix","substring","diff_commonSuffix","commonsuffix","diff_compute","diff_cleanupMerge","longtext","shorttext","indexOf","linearray","hm","diff_halfMatch","text1_a","text1_b","text2_a","text2_b","mid_common","diffs_a","diffs_b","diff_linesToChars","diff_map","diff_charsToLines","diff_cleanupSemantic","pointer","count_delete","count_insert","text_delete","text_insert","splice","pop","lineArray","lineHash","diff_linesToCharsMunge","text","chars","lineStart","lineEnd","lineArrayLength","line","hasOwnProperty","undefined","String","fromCharCode","x","y","charCodeAt","footstep","ms_end","Date","getTime","text1_length","text2_length","max_d","doubleEnd","v_map1","v_map2","v1","v2","footsteps","done","front","k","charAt","diff_path1","slice","diff_path2","v_map","path","last_op","pathLength","pointermin","pointermax","pointermid","pointerstart","floor","pointerend","dmp","diff_halfMatchI","best_longtext_a","best_longtext_b","best_shorttext_a","best_shorttext_b","seed","best_common","prefixLength","suffixLength","hm1","ceil","hm2","changes","equalities","equalitiesLength","lastequality","length_changes1","length_changes2","diff_cleanupSemanticLossless","punctuation","whitespace","linebreak","blanklineEnd","blanklineStart","diff_cleanupSemanticScore","one","two","score","equality1","edit","equality2","commonOffset","commonString","bestEquality1","bestEdit","bestEquality2","bestScore","diff_cleanupEfficiency","pre_ins","pre_del","post_ins","post_del","diff_xIndex","loc","chars1","chars2","last_chars1","last_chars2","diff_prettyHtml","html","diff_text1","diff_text2","diff_levenshtein","levenshtein","insertions","deletions","diff_toDelta","encodeURI","diff_fromDelta","delta","diffsLength","tokens","param","decodeURI","ex","n","isNaN","match_main","pattern","match_bitap","match_alphabet","match_bitapScore","e","accuracy","proximity","abs","score_threshold","best_loc","lastIndexOf","bin_min","bin_mid","matchmask","last_rd","bin_max","finish","rd","charMatch","patch_addContext","patch","padding","prefix","suffix","patch_make","opt_b","opt_c","patches","patchDiffLength","char_count1","char_count2","prepatch_text","postpatch_text","diff_type","diff_text","patch_deepCopy","patchesCopy","patchCopy","patch_apply","nullPadding","patch_addPadding","patch_splitMax","results","start_loc","expected_loc","end_loc","index2","index1","mod","paddingLength","extraLength","bigpatch","patch_size","precontext","empty","postcontext","patch_toText","patch_fromText","textline","textPointer","m","sign","formatArgs","args","useColors","namespace","humanize","c","color","index","lastC","save","namespaces","storage","setItem","removeItem","error","load","r","getItem","process","env","DEBUG","type","__nwjs","navigator","userAgent","toLowerCase","document","documentElement","style","WebkitAppearance","firebug","exception","table","localStorage","localstorage","destroy","warned","warn","colors","debug","formatters","v","JSON","stringify","message","createDebug","prevTime","namespacesCache","enabledCache","enableOverride","enabled","curr","Number","ms","prev","coerce","format","formatter","val","selectColor","extend","defineProperty","get","set","init","delimiter","newDebug","matchesTemplate","search","template","searchIndex","templateIndex","starIndex","matchIndex","default","stack","disable","names","skips","enable","trim","Boolean","ns","keys","key","hash","h","w","plural","msAbs","isPlural","round","options","exec","parseFloat","parse","isFinite","long","fmtShort","isBuffer","obj","keyIdentity","flatten","target","opts","maxDepth","transformKey","step","object","currentDepth","isarray","safe","isbuffer","isobject","newKey","unflatten","overwrite","getkey","parsedKey","reduce","isObject","isEmpty","keyPrefix","recipient","addKeys","key1","key2","segs","joinChar","isValid","isValidObject","isString","splitChar","separator","idx","prop","hasProp","isObjectObject","o","ctor","prot","__defProp","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","index_exports","all","__export","AccessTokenEvents","CheckSessionIFrame","DPoPState","ErrorResponse","ErrorTimeout","InMemoryWebStorage","IndexedDbDPoPStore","Log","Logger","MetadataService","OidcClient","OidcClientSettingsStore","SessionMonitor","SigninResponse","SigninState","SignoutResponse","State","User","UserManager","UserManagerSettingsStore","Version","WebStorageStateStore","to","from","except","desc","__copyProps","level","logger","Log2","nopLogger","info","reset","setLevel","setLogger","_Logger","_name","_format","_method","err","method","methodLogger","createStatic","staticMethod","staticLogger","import_jwt_decode","JwtUtils","decode","token","jwtDecode","generateSignedJwt","header","payload","privateKey","encodedToken","CryptoUtils","encodeBase64Url","TextEncoder","encode","signature","crypto","subtle","Uint8Array","toBase64","btoa","chr","_CryptoUtils","_randomWord","arr","Uint32Array","getRandomValues","generateUUIDv4","generateCodeVerifier","generateCodeChallenge","code_verifier","hashed","digest","generateBasicAuth","client_id","client_secret","alg","msgUint8","hashBuffer","customCalculateJwkThumbprint","jwk","jsonObject","kty","crv","utf8encodedAndHashed","generateDPoPProof","accessToken","httpMethod","keyPair","nonce","hashedToken","encodedHash","randomUUID","now","ath","publicJwk","exportKey","publicKey","TypeError","generateDPoPJkt","generateDPoPKeys","generateKey","namedCurve","Event","_callbacks","_logger","addHandler","cb","removeHandler","raise","ev","PopupUtils","center","features","_a","width","find","outerWidth","screenX","height","top","screenY","outerHeight","serialize","entries","Timer","_Timer","super","_timerHandle","_expiration","_callback","getEpochTime","cancel","durationInSeconds","logger2","expiration","timerDurationInSeconds","setInterval","clearInterval","UrlUtils","readParams","responseMode","params","URL","URLSearchParams","URL_STATE_DELIMITER","form","_b","_c","error_description","error_uri","state","userState","session_state","url_state","_expiringTimer","_expiredTimer","_expiringNotificationTimeInSeconds","expiringNotificationTimeInSeconds","container","access_token","expires_in","duration","expiring","expired","unload","addAccessTokenExpiring","removeAccessTokenExpiring","addAccessTokenExpired","removeAccessTokenExpired","_client_id","_intervalInSeconds","_stopOnError","_timer","_session_state","_message","origin","_frame_origin","source","_frame","contentWindow","stop","parsedUrl","createElement","visibility","position","src","href","Promise","resolve","onload","body","appendChild","addEventListener","send","postMessage","_data","clear","ErrorDPoPNonce","JsonService","additionalContentTypes","_jwtHandler","_extraHeaders","_contentTypes","fetchWithTimeout","timeoutInSeconds","initFetch","fetch","controller","AbortController","timeoutId","setTimeout","abort","signal","DOMException","clearTimeout","getJson","credentials","headers","response","_appendExtraHeaders","status","contentType","item","startsWith","throw","ok","json","statusText","postForm","basicAuth","initCredentials","extraHeaders","responseText","has","customKeys","protectedHeaders","preventOverride","headerName","includes","toLocaleLowerCase","content","_settings","_signingKeys","_metadata","_metadataUrl","metadataUrl","_jsonService","signingKeys","metadata","fetchRequestCredentials","_fetchRequestCredentials","resetSigningKeys","getMetadata","requestTimeoutInSeconds","assign","metadataSeed","getIssuer","_getMetadataProperty","getAuthorizationEndpoint","getUserInfoEndpoint","getTokenEndpoint","optional","getCheckSessionIframe","getEndSessionEndpoint","getRevocationEndpoint","getKeysEndpoint","getSigningKeys","jwks_uri","keySet","store","_store","_prefix","remove","getAllKeys","authority","response_type","scope","redirect_uri","post_logout_redirect_uri","client_authentication","prompt","display","max_age","ui_locales","acr_values","resource","response_mode","filterProtocolClaims","loadUserInfo","staleStateAgeInSeconds","mergeClaimsStrategy","array","disablePKCE","stateStore","revokeTokenAdditionalContentTypes","refreshTokenAllowedScope","extraQueryParams","extraTokenParams","dpop","omitScopeWhenRequesting","endsWith","UserInfoService","_metadataService","_getClaimsFromJwt","async","getClaims","claims","TokenClient","exchangeCode","grant_type","code","append","exchangeCredentials","exchangeRefreshToken","refresh_token","revoke","token_type_hint","ResponseValidator","_claimsService","_userInfoService","_tokenClient","validateSigninResponse","_processSigninState","_processCode","isOpenId","_validateIdTokenAttributes","_processClaims","skipUserInfo","validateCredentialsResponse","shouldValidateSubClaim","id_token","validateRefreshResponse","profile","hasIdToken","validateSignoutResponse","id","validateSub","sub","mergeClaims","tokenResponse","existingToken","incoming","existing","auth_time","azp","_State","created","request_type","toStorageString","fromStorageString","storageString","clearStaleState","age","cutoff","_SigninState","code_challenge","_SigninRequest","state_data","dpopJkt","optionalParams","searchParams","stateParam","SigninRequest","token_type","splitState","decodeURIComponent","expires_at","SignoutRequest","id_token_hint","DefaultProtocolClaims","InternalRequiredProtocolClaims","ClaimsService","protocolClaims","claim","claims1","claims2","values","mergedValues","settings","metadataService","_validator","createSigninRequest","request","request_uri","login_hint","signinRequest","signinState","readSigninResponseState","removeState","storedStateString","processSigninResponse","dpopProof","getDpopProof","dpopStore","dpopState","processResourceOwnerPasswordCredentials","username","password","signinResponse","useRefreshToken","allowableScopes","createSignoutRequest","signoutState","readSignoutResponseState","processSignoutResponse","revokeToken","_userManager","_start","user","_sub","_checkSessionIFrame","intervalInSeconds","checkSessionIntervalInSeconds","stopOnError","stopCheckSessionOnError","checkSessionIFrame","_stop","monitorAnonymousSession","timerHandle","session","querySessionStatus","tmpUser","raiseEvent","events","_raiseUserSessionChanged","_raiseUserSignedOut","_raiseUserSignedIn","addUserLoaded","addUserUnloaded","_init","catch","getUser","_User","scopes","messageSource","AbstractChildWindow","_abort","_disposeHandlers","Set","_window","navigate","location","keepOpen","reject","listener","scriptOrigin","_dispose","removeEventListener","channel","BroadcastChannel","close","reason","dispose","_notifyParent","parent","targetOrigin","msgData","DefaultPopupWindowFeatures","toolbar","closePopupWindowAfterInSeconds","DefaultPopupTarget","DefaultAccessTokenExpiringNotificationTimeInSeconds","DefaultCheckSessionIntervalInSeconds","popup_redirect_uri","popup_post_logout_redirect_uri","popupWindowFeatures","popupWindowTarget","redirectMethod","redirectTarget","iframeNotifyParentOrigin","iframeScriptOrigin","silent_redirect_uri","silentRequestTimeoutInSeconds","automaticSilentRenew","validateSubOnSilentRenew","includeIdTokenInSilentRenew","monitorSession","query_status_response_type","revokeTokenTypes","revokeTokensOnSignout","includeIdTokenInSilentSignout","accessTokenExpiringNotificationTimeInSeconds","userStore","sessionStorage","IFrameWindow","_IFrameWindow","_timeoutInSeconds","createHiddenIframe","iframe","timer","parentNode","_a2","frame","removeChild","notifyParent","IFrameNavigator","prepare","callback","PopupWindow","popupSignal","centeredPopup","open","closed","focus","popupClosedInterval","clearPopupClosedInterval","notifyOpener","opener","PopupNavigator","RedirectNavigator","targetWindow","redirect","promise","UserManagerEvents","_userLoaded","_userUnloaded","_silentRenewError","_userSignedIn","_userSignedOut","_userSessionChanged","removeUserLoaded","removeUserUnloaded","addSilentRenewError","removeSilentRenewError","_raiseSilentRenewError","addUserSignedIn","removeUserSignedIn","addUserSignedOut","removeUserSignedOut","addUserSessionChanged","removeUserSessionChanged","SilentRenewService","_isStarted","_retryTimer","_tokenExpiring","signinSilent","RefreshState","redirectNavigator","popupNavigator","iframeNavigator","_client","_redirectNavigator","_popupNavigator","_iframeNavigator","_events","_silentRenewService","startSilentRenew","_sessionMonitor","_loadUser","removeUser","storeUser","signinRedirect","requestArgs","bind_authorization_code","handle","_signinStart","signinRedirectCallback","_signinEnd","signinResourceOwnerCredentials","_buildUser","signinPopup","_signin","signinPopupCallback","_useRefreshToken","verifySub","signinSilentCallback","signinCallback","signoutCallback","signoutRedirectCallback","signoutPopupCallback","signoutSilentCallback","navResponse","signoutRedirect","_signoutStart","_signoutEnd","signoutPopup","_signout","_revokeInternal","signoutRequest","signoutResponse","signoutSilent","revokeTokens","types","typesPresent","stopSilentRenew","_userStoreKey","dpopSettings","dpopKeys","_dbName","_storeName","createStore","put","promisifyRequest","transaction","oncomplete","onsuccess","onabort","onerror","dbName","storeName","indexedDB","onupgradeneeded","createObjectStore","db","txMode","objectStore","deleteProperty","Reflect","isPrimitive","isPlainObject","validateKey","isUnsafeKey","fn","flat","toStringKey","arrays","preservePaths","createMemoKey","setValue","cache","memoize","sep","preserve","test","parts","part","number","isInteger","splitString","assignProp","next","Map","subscriptions","connections","connectionsInEstablishment","isPaused","connectionInterruptedSubscribers","messagesWhilePaused","getBearerToken","subscribeConnectionInterrupted","subscribe","readToken","handler","subId","connection","ensureConnection","subResult","emit","sendResult","unsubscribe","unsubscribeAll","pauseNotification","unpauseNotification","getWSAsync","opt","withCredentials","pathname","transports","auth","socket","io","on","sseChannel","currentObj","lastKey","linkedRecords","clientServerBus","actorId","clientId","createdAt","updatedAt","serverURL","observers","isInitialized","version","attrSubscription","getAttributeClientId","ensureUserIdIsKnown","then","aId","getDefaultValue","getDataTypeName","isAttributeId","getDataTypePrefix","facts","requestConfig","getCreatePayload","isJSON","responseBody","getId","getClientId","getServerURL","getDataURL","changeId","getValue","newValue","rawSet","change","rawChange","observer","serverState","forceReload","jsonBody","serializedValue","deserializeValue","onLoad","notifySubscribers","parsedData","attributeId","onServerMessage","handleQuotaViolationError","sendToServer","authorizationErrorHandler","handleConnectionError","fullChangeInfo","toJSON","BlobAttribute","Blob","formData","FormData","transmitChange","changeWithMetadata","doNotHandleExpiredSessions","KeyValueAttribute","flatOldValue","flatValue","actualChanges","success","KeyValueChange","fromJSON","fromString","aChange","other","mergedChanges","ch","inFlightOp","foreignChange","c2","c1","bridge","LongTextAttribute","buffer","changeInTransmission","changeInTransmissionSendAt","static","getLastChangeTransmittedMillisecondsAgo","serverApprovalTimeoutInMS","processApproval","processForeignChange","foreignChangeWithMetadata","transformedForeignChange","foreignChangeset","approval","bufferedChanges","diffEngine","LongTextChange","b","otherChange","subject","predicate","query","_","byId","AttributesRepository","getClientServerBus","attributeCache","idToAttribute","ignoreCache","attributeTypePrefix","AttributeClass","attributeTypes","attr","createKeyValue","createLongText","createBlob","attributeType","attribute","createAll","rawResult","resultBody","attrName","config","tmpResult","findAll","records","attributeResult","sort","findAndLoadAll","promises","compoundName","subscribeToQuery","onChange","bus","onPossibleChange","subscription","clearCache","rawFact","fq","record","deleteAll","publicClients","LinkedRecords","loginHandler","connectionLostHandler","unknownServerErrorHandler","quotaViolationErrorHandler","attributeClientIdSuffix","Attribute","Fact","oidcManager","qetQuotaPromise","getPublicClient","normalizedUrl","cached","oidcConfig","setConnectionLostHandler","setUnknownServerErrorHandler","setLoginHandler","login","autoHandleRedirect","deferUserInfoFetching","OIDCManager","getAccessToken","handleRedirectCallback","history","replaceState","title","getUserIdByEmail","email","resp","encodeURIComponent","isAuthorizedToSeeMemberOf","nodeId","getMembersOf","notVisibleToUser","getQuota","uId","fetchOpt","isOnRedirectUriRoute","skipWaitForUserId","absoluteUrl","mergedHeaders","Accept","withConnectionLostHandler","handleExpiredLoginSession","clonedResponse","handleAuthorizationError","handleUnknownServerError","setQuotaViolationErrorHandler","setAuthorizationErrorHandler","fetchUserInfo","fetchUserInfoPromise","userInfo","getCurrentUserEmail","logout","isAuthenticated","userManager","ready","redirectOriginPath","redirectUri","initialize","ru","providedAuthority","postLogoutRedirectUri","responseType","silentRedirectUri","useSessionStorage","clientIdToUse","base","audience","host","returnTo","hasCORS","XMLHttpRequest","qs","qry","pairs","pair","re","uri","ipv6uri","pathNames","queryKey","$0","$1","$2","defaultBinaryType","globalThisShim","nextTick","createCookieJar","setTimeoutFn","Function","WebTransport","WebSocket","NodeWebSocket","XHR","NodeXHR","Fetch","installTimerFunctions","TransportError","Transport","protocol","SocketWithUpgrade","SocketWithoutUpgrade","Socket","socket_js_1","socket_js_2","transport_js_1","index_js_1","util_js_1","parseuri_js_1","globals_node_js_1","polling_fetch_js_1","polling_xhr_node_js_1","polling_xhr_js_1","websocket_node_js_1","WS","websocket_js_1","webtransport_js_1","WT","__importDefault","__esModule","parseqs_js_1","component_emitter_1","engine_io_parser_1","withEventListeners","OFFLINE_EVENT_LISTENERS","Emitter","binaryType","writeBuffer","_prevBufferLen","_pingInterval","_pingTimeout","_maxPayload","_pingTimeoutTime","parsedUri","hostname","secure","port","_transportsByName","transportName","agent","upgrade","timestampParam","rememberUpgrade","addTrailingSlash","rejectUnauthorized","perMessageDeflate","threshold","transportOptions","closeOnBeforeunload","_beforeunloadEventListener","transport","removeAllListeners","_offlineEventListener","_onClose","description","_cookieJar","_open","createTransport","EIO","sid","emitReserved","priorWebsocketSuccess","readyState","setTransport","_onDrain","_onPacket","_onError","onOpen","flush","packet","onHandshake","_sendPacket","_resetPingTimeout","pingInterval","pingTimeout","maxPayload","clearTimeoutFn","_pingTimeoutTimer","delay","autoUnref","unref","upgrading","packets","_getWritablePackets","payloadSize","byteLength","_hasPingExpired","hasExpired","write","msg","compress","once","cleanupAndClose","off","waitForUpgrade","tryAllTransports","_upgrades","_probe","failed","onTransportOpen","pause","cleanup","freezeTransport","onTransportClose","onclose","onupgrade","removeListener","_filterUpgrades","upgrades","filteredUpgrades","context","supportsBinary","forceBase64","onError","doOpen","doClose","onClose","onData","decodePacket","onPacket","details","onPause","createUri","schema","_hostname","_port","_query","encodedQuery","websocket","webtransport","polling","polling_js_1","Polling","doPoll","_fetch","res","doWrite","isPost","Headers","appendCookies","parseCookies","getSetCookie","Request","BaseXHR","has_cors_js_1","isSSL","xd","req","xhrStatus","pollXhr","createRequest","_opts","_uri","_create","pick","xdomain","xhr","_xhr","setDisableHeaderCheck","setRequestHeader","cookieJar","addCookies","requestTimeout","timeout","onreadystatechange","getResponseHeader","_onLoad","_index","requestsCount","requests","_cleanup","fromError","attachEvent","unloadHandler","terminationEvent","hasXHR2","newRequest","_polling","_poll","total","decodePayload","encodePayload","timestampRequests","randomString","b64","BaseWS","isReactNative","product","protocols","ws","createSocket","addEventListeners","onopen","_socket","closeEvent","onmessage","lastPacket","encodePacket","WebSocketCtor","MozWebSocket","_packet","_transport","createBidirectionalStream","stream","decoderStream","createPacketDecoderStream","MAX_SAFE_INTEGER","reader","readable","pipeThrough","getReader","encoderStream","createPacketEncoderStream","pipeTo","_writer","getWriter","read","acc","useNativeTimers","NATIVE_SET_TIMEOUT","NATIVE_CLEAR_TIMEOUT","utf8Length","size","random","ERROR_PACKET","PACKET_TYPES_REVERSE","PACKET_TYPES","lookup","arraybuffer","bytes","base64","encoded1","encoded2","encoded3","encoded4","bufferLength","p","ArrayBuffer","commons_js_1","base64_arraybuffer_js_1","withNativeArrayBuffer","encodedPacket","mapBinary","decodeBase64Packet","decoded","encodePacketToBinary","withNativeBlob","isView","encodeBlobAsBase64","fileReader","FileReader","readAsDataURL","toArray","byteOffset","TEXT_ENCODER","arrayBuffer","encoded","encodePacket_js_1","decodePacket_js_1","SEPARATOR","TEXT_DECODER","totalLength","chunks","chunk","concatChunks","encodedPackets","count","encodedPayload","decodedPacket","TransformStream","payloadLength","DataView","setUint8","view","setUint16","setBigUint64","BigInt","enqueue","TextDecoder","expectedLength","isBinary","headerArray","getUint16","getUint32","pow","InvalidTokenError","atob","toUpperCase","b64DecodeUnicode","base64UrlDecode","Backoff","factor","jitter","attempts","rand","deviation","setMin","setMax","setJitter","Manager","connect","url_js_1","manager_js_1","parsed","sameNamespace","forceNew","multiplex","socket_io_parser_1","engine_io_client_1","__createBinding","k2","__setModuleDefault","__importStar","parser","on_js_1","backo2_js_1","nsps","subs","reconnection","reconnectionAttempts","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","_readyState","_parser","encoder","Encoder","decoder","Decoder","_autoConnect","autoConnect","_reconnection","skipReconnect","_reconnectionAttempts","_reconnectionDelay","_randomizationFactor","_reconnectionDelayMax","_timeout","maybeReconnectOnOpen","_reconnecting","reconnect","engine","openSubDestroy","errorSub","onping","ondata","ondecoded","nsp","active","_destroy","_close","subDestroy","disconnect","onreconnect","attempt","RESERVED_EVENTS","freeze","connect_error","disconnecting","newListener","connected","recovered","receiveBuffer","sendBuffer","_queue","_queueSeq","ids","acks","flags","disconnected","subEvents","onpacket","retries","fromQueue","volatile","_addToQueue","PacketType","EVENT","ack","_registerAckCallback","isTransportWritable","isConnected","notifyOutgoingListeners","ackTimeout","withError","emitWithAck","arg1","arg2","tryCount","pending","responseArgs","_drainQueue","force","_sendConnectPacket","CONNECT","_pid","pid","offset","_lastOffset","_clearAcks","some","onconnect","BINARY_EVENT","onevent","ACK","BINARY_ACK","onack","DISCONNECT","ondisconnect","CONNECT_ERROR","emitEvent","_anyListeners","listeners","sent","emitBuffered","onAny","prependAny","offAny","listenersAny","onAnyOutgoing","_anyOutgoingListeners","prependAnyOutgoing","offAnyOutgoing","listenersAnyOutgoing","deconstructPacket","buffers","packetData","_deconstructPacket","attachments","reconstructPacket","_reconstructPacket","is_binary_js_1","placeholder","_placeholder","num","newData","isPacketValid","isDataValid","binary_js_1","replacer","hasBinary","encodeAsString","encodeAsBinary","deconstruction","reviver","maxAttachments","reconstructor","decodeString","isBinaryEvent","BinaryReconstructor","takeBinaryData","buf","tryParse","isPayloadValid","finishedReconstruction","reconPack","binData","withNativeFile","File","uuidv4obj","uuidv4","uuidv7obj","uuidv7","V7Generator","UUID","DIGITS","ofInner","fromFieldsV7","unixTsMs","randA","randBHi","randBLo","RangeError","uuid","_d","hex","inner","SyntaxError","toHex","getVariant","every","getVersion","equals","compareTo","randomNumberGenerator","timestamp","counter","getDefaultRandom","generate","generateOrResetCore","generateOrAbort","generateOrAbortCore","rollbackAllowance","resetCounter","trunc","nextUint32","generateV4","of","BufferedCryptoRandom","UUIDV7_DENY_WEAK_RNG","cursor","defaultGenerator","mixin","event","callbacks","hasListeners","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","definition","Symbol","toStringTag"],"sourceRoot":""}